old_contents: /*
  **  Microkernel -- Microkernel for Server Applications
  **  Copyright (c) 2015 Ralf S. Engelschall <rse@engelschall.com>
  **
  **  Permission is hereby granted, free of charge, to any person obtaining
  **  a copy of this software and associated documentation files (the
  **  "Software"), to deal in the Software without restriction, including
  **  without limitation the rights to use, copy, modify, merge, publish,
  **  distribute, sublicense, and/or sell copies of the Software, and to
  **  permit persons to whom the Software is furnished to do so, subject to
  **  the following conditions:
  **
  **  The above copyright notice and this permission notice shall be included
  **  in all copies or substantial portions of the Software.
  **
  **  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  **  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  **  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  **  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  **  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  **  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  **  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
  
  import glob from "glob"
  
  /*  the mixin class  */
  export default class MicrokernelLoader {
      /*  load source files as a procedure
          (and hence execute them with the microkernel as context)  */
      exec (...files) {
          files.forEach((file) => {
              let filesExpanded = file.match(/[*?]/) !== null ? glob.sync(file) : [ file ]
              if (filesExpanded.length === 0)
                  throw new Error("no files found")
              filesExpanded.forEach((file) => {
                  let mod = require(file)
                  mod(this)
              })
          })
          return this
      }
  
      /*  load source files as module definition
          (and hence instanciate and add them to microkernel)  */
      load (...files) {
          files.forEach((file) => {
              let filesExpanded = file.match(/[*?]/) !== null ? glob.sync(file) : [ file ]
              filesExpanded.forEach((file) => {
                  let mod = require(file)
                  this.add(new mod())
              })
          })
          return this
      }
  }
  
  
new_contents: /*
  **  Microkernel -- Microkernel for Server Applications
  **  Copyright (c) 2015 Ralf S. Engelschall <rse@engelschall.com>
  **
  **  Permission is hereby granted, free of charge, to any person obtaining
  **  a copy of this software and associated documentation files (the
  **  "Software"), to deal in the Software without restriction, including
  **  without limitation the rights to use, copy, modify, merge, publish,
  **  distribute, sublicense, and/or sell copies of the Software, and to
  **  permit persons to whom the Software is furnished to do so, subject to
  **  the following conditions:
  **
  **  The above copyright notice and this permission notice shall be included
  **  in all copies or substantial portions of the Software.
  **
  **  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  **  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  **  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  **  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  **  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  **  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  **  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
  
  import glob from "glob"
  
  /*  the mixin class  */
  export default class MicrokernelLoader {
      /*  load source files as a procedure
          (and hence execute them with the microkernel as context)  */
      exec (...files) {
          return new Promise((resolve, reject) => {
              let seq = new Promise.resolve()
              files.forEach((file) => {
                  let filesExpanded = file.match(/[*?]/) !== null ? glob.sync(file) : [ file ]
                  if (filesExpanded.length === 0)
                      throw new Error("no files found")
                  filesExpanded.forEach((file) => {
                      let mod = require(file)
                      seq = seq.then(() => mod(this))
                  })
              })
              seq.then(() => resolve())
          })
      }
  
      /*  load source files as module definition
          (and hence instanciate and add them to microkernel)  */
      load (...files) {
          files.forEach((file) => {
              let filesExpanded = file.match(/[*?]/) !== null ? glob.sync(file) : [ file ]
              filesExpanded.forEach((file) => {
                  let mod = require(file)
                  this.add(new mod())
              })
          })
          return this
      }
  }
  
  
subject: use Promises for exec()