| require! { |
| '../library/fn/promise': Promise |
| './config': {list, experimental, libraryBlacklist, es5SpecialCase, banner} |
| fs: {readFile, writeFile, unlink} |
| path: {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: '' |
| filename: 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); |
| """ |