You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.8 KiB
62 lines
1.8 KiB
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); |
|
""" |