1require! { 2 '../library/fn/promise': Promise 3 './config': {list, experimental, libraryBlacklist, es5SpecialCase, banner} 4 fs: {readFile, writeFile, unlink} 5 path: {basename, dirname, join} 6 webpack, temp 7} 8 9module.exports = ({modules = [], blacklist = [], library = no, umd = on})-> 10 resolve, reject <~! new Promise _ 11 let @ = modules.reduce ((memo, it)-> memo[it] = on; memo), {} 12 if @exp => for experimental => @[..] = on 13 if @es5 => for es5SpecialCase => @[..] = on 14 for ns of @ 15 if @[ns] 16 for name in list 17 if name.indexOf("#ns.") is 0 and name not in experimental 18 @[name] = on 19 20 if library => blacklist ++= libraryBlacklist 21 for ns in blacklist 22 for name in list 23 if name is ns or name.indexOf("#ns.") is 0 24 @[name] = no 25 26 TARGET = temp.path {suffix: '.js'} 27 28 err, info <~! webpack do 29 entry: list.filter(~> @[it]).map ~> 30 if library => join __dirname, '..', 'library', 'modules', it 31 else join __dirname, '..', 'modules', it 32 output: 33 path: dirname TARGET 34 filename: basename "./#TARGET" 35 if err => return reject err 36 37 err, script <~! readFile TARGET 38 if err => return reject err 39 40 err <~! unlink TARGET 41 if err => return reject err 42 43 if umd 44 exportScript = """ 45 // CommonJS export 46 if (typeof module != 'undefined' && module.exports) module.exports = __e; 47 // RequireJS export 48 else if (typeof define == 'function' && define.amd) define(function () { return __e; }); 49 // Export to global object 50 else __g.core = __e; 51 """ 52 else 53 exportScript = "" 54 55 resolve """ 56 #banner 57 !function(__e, __g, undefined){ 58 'use strict'; 59 #script 60 #exportScript 61 }(1, 1); 62 """