require! { '../library/fn/promise': Promise './config': {list, experimental, libraryBlacklist, es5SpecialCase, banner} fs: {readFile, writeFile, unlink} path: {basename, dirname, join} webpack, temp } module.exports = ({modules = [], blacklist = [], library = no, umd = on})-> resolve, reject <~! new Promise _ let @ = modules.reduce ((memo, it)-> memo[it] = on; memo), {} if @exp => for experimental => @[..] = on if @es5 => for es5SpecialCase => @[..] = on for ns of @ if @[ns] for name in list if name.indexOf("#ns.") is 0 and name not in experimental @[name] = on if library => blacklist ++= libraryBlacklist for ns in blacklist for name in list if name is ns or name.indexOf("#ns.") is 0 @[name] = no TARGET = temp.path {suffix: '.js'} err, info <~! webpack do entry: list.filter(~> @[it]).map ~> if library => join __dirname, '..', 'library', 'modules', it else join __dirname, '..', 'modules', it output: path: dirname TARGET filename: basename "./#TARGET" if err => return reject err err, script <~! readFile TARGET if err => return reject err err <~! unlink TARGET if err => return reject err if umd exportScript = """ // CommonJS export if (typeof module != 'undefined' && module.exports) module.exports = __e; // RequireJS export else if (typeof define == 'function' && define.amd) define(function () { return __e; }); // Export to global object else __g.core = __e; """ else exportScript = "" resolve """ #banner !function(__e, __g, undefined){ 'use strict'; #script #exportScript }(1, 1); """