You cannot 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
Plaintext
62 lines
1.8 KiB
Plaintext
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);
|
|
""" |