systemjs-builder
Advanced tools
Comparing version 0.0.0 to 0.0.1
@@ -9,3 +9,7 @@ // converts anonymous AMDs into named AMD for the module | ||
// NB need to handle naming the module itself as the last defined | ||
// TODO convert into System.register dynamic form rather | ||
// Turns define(...) into System.register(...) | ||
var match; | ||
@@ -12,0 +16,0 @@ |
@@ -5,27 +5,24 @@ var path = require('path'); | ||
function cjsOutput(name, deps, address, source) { | ||
var dirname = path.dirname(address); | ||
function cjsOutput(name, deps, address, source, baseURL) { | ||
var filename = path.relative(baseURL, address); | ||
var dirname = path.dirname(filename); | ||
return 'System.defined["' + name + '"] = {\n' | ||
+ ' deps: ' + JSON.stringify(deps) + ',\n' | ||
+ ' executingRequire: true,\n' | ||
+ ' execute: function(require, exports, __moduleName) {\n' | ||
+ ' var global = System.global;\n' | ||
+ ' var __define = global.define;\n' | ||
+ ' global.define = undefined;\n' | ||
+ ' var module = { exports: exports };\n' | ||
+ ' var process = System.get("@@nodeProcess");\n' | ||
// + ' var __filename = "' + address + '";\n' | ||
// + ' var __dirname = "' + dirname + '";\n' | ||
+ ' ' + source.replace(/\n/g, '\n ') + '\n' | ||
+ ' global.define = __define;\n' | ||
+ ' return module.exports;\n' | ||
+ ' }\n' | ||
+ '};\n' | ||
return 'System.register("' + name + '", ' + JSON.stringify(deps) + ', true, function(require, exports, __moduleName) {\n' | ||
+ ' var global = System.global;\n' | ||
+ ' var __define = global.define;\n' | ||
+ ' global.define = undefined;\n' | ||
+ ' var module = { exports: exports };\n' | ||
+ ' var process = System.get("@@nodeProcess")["default"];\n' | ||
+ ' var __filename = "' + filename + '";\n' | ||
+ ' var __dirname = "' + dirname + '";\n' | ||
+ ' ' + source.replace(/\n/g, '\n ') + '\n' | ||
+ ' global.define = __define;\n' | ||
+ ' return module.exports;\n' | ||
+ '});\n' | ||
} | ||
exports.compile = function(load) { | ||
exports.compile = function(load, loader) { | ||
return Promise.resolve({ | ||
source: cjsOutput(load.name, load.metadata.deps, load.address, load.source) | ||
source: cjsOutput(load.name, load.metadata.deps, load.address, load.source, loader.baseURL) | ||
}); | ||
} |
@@ -9,11 +9,8 @@ // Converts globals into a form that will define the module onto the loader | ||
function globalOutput(name, deps, exportName, init, source) { | ||
return 'System.defined["' + name + '"] = {\n' | ||
+ ' deps: ' + JSON.stringify(deps) + ',\n' | ||
+ ' execute: function(__require, __exports, __moduleName) {\n' | ||
+ ' System.get("@@global-helpers").prepareGlobal(__moduleName, ' + JSON.stringify(deps) + ');\n' | ||
+ ' ' + source.replace(/\n/g, '\n ') + '\n' | ||
+ (exportName ? ' this["' + exportName + '"] = ' + exportName + ';\n' : '') | ||
+ ' return System.get("@@global-helpers").retrieveGlobal(__moduleName, ' + (exportName ? '"' + exportName + '"' : 'false') + (init ? ', ' + init.toString().replace(/\n/g, '\n ') : '') + ');\n' | ||
+ ' }\n' | ||
+ '};\n'; | ||
return 'System.register("' + name + '", ' + JSON.stringify(deps) + ', false, function(__require, __exports, __moduleName) {\n' | ||
+ ' System.get("@@global-helpers").prepareGlobal(__moduleName, ' + JSON.stringify(deps) + ');\n' | ||
+ ' ' + source.replace(/\n/g, '\n ') + '\n' | ||
+ (exportName ? ' this["' + exportName + '"] = ' + exportName + ';\n' : '') | ||
+ ' return System.get("@@global-helpers").retrieveGlobal(__moduleName, ' + (exportName ? '"' + exportName + '"' : 'false') + (init ? ', ' + init.toString().replace(/\n/g, '\n ') : '') + ');\n' | ||
+ '});\n'; | ||
} | ||
@@ -20,0 +17,0 @@ |
133
index.js
@@ -14,4 +14,2 @@ var Promise = require('rsvp').Promise; | ||
// TODO source maps | ||
var loader = new Loader(System); | ||
@@ -34,71 +32,83 @@ loader.baseURL = System.baseURL; | ||
loader.config(config); | ||
pluginLoader.config(config); | ||
return exports.trace(moduleName, config) | ||
.then(function(trace) { | ||
return exports.buildTree(trace.tree, trace.moduleName, outFile) | ||
}); | ||
} | ||
exports.buildTree = function(tree, moduleName, outFile) { | ||
var concatOutput = ['"format register";\n']; | ||
return visitTree(tree, moduleName, function(load) { | ||
if (load.metadata.format == 'es6') { | ||
var result = traceur.compile(load.source, { | ||
moduleName: load.name, | ||
modules: 'instantiate' | ||
}); | ||
concatOutput.push(result.js); | ||
} | ||
else if (load.metadata.format == 'register') { | ||
return registerCompiler.compile(load, loader).then(function(result) { | ||
concatOutput.push(result.source); | ||
}); | ||
} | ||
else if (load.metadata.format == 'amd') { | ||
return amdCompiler.compile(load, loader).then(function(result) { | ||
concatOutput.push(result.source); | ||
}); | ||
} | ||
else if (load.metadata.format == 'cjs') { | ||
return cjsCompiler.compile(load, loader).then(function(result) { | ||
concatOutput.push(result.source); | ||
}); | ||
} | ||
else if (load.metadata.format == 'global') { | ||
return globalCompiler.compile(load, loader).then(function(result) { | ||
concatOutput.push(result.source); | ||
}); | ||
} | ||
else { | ||
throw "unknown format " + load.metadata.format; | ||
} | ||
}) | ||
.then(function() { | ||
return asp(fs.writeFile)(outFile, concatOutput.join('\n')); | ||
}); | ||
} | ||
exports.trace = function(moduleName, config) { | ||
if (config) { | ||
loader.config(config); | ||
pluginLoader.config(config); | ||
} | ||
var System = loader.global.System; | ||
loader.global.System = loader; | ||
return loader.import(moduleName).then(function() { | ||
// we now have the full tree at loader.loads | ||
return visitLoadTree(moduleName, function(load) { | ||
if (load.metadata.format == 'es6') { | ||
var result = traceur.compile(load.source, { | ||
moduleName: load.name, | ||
modules: 'instantiate' | ||
}); | ||
concatOutput.push(result.js); | ||
} | ||
else if (load.metadata.format == 'register') { | ||
return registerCompiler.compile(load).then(function(result) { | ||
concatOutput.push(result.source); | ||
}); | ||
} | ||
else if (load.metadata.format == 'amd') { | ||
return amdCompiler.compile(load).then(function(result) { | ||
concatOutput.push(result.source); | ||
}); | ||
} | ||
else if (load.metadata.format == 'cjs') { | ||
return cjsCompiler.compile(load).then(function(result) { | ||
concatOutput.push(result.source); | ||
}); | ||
} | ||
else if (load.metadata.format == 'global') { | ||
return globalCompiler.compile(load).then(function(result) { | ||
concatOutput.push(result.source); | ||
}); | ||
} | ||
else { | ||
console.log(load); | ||
throw "unknown format " + load.metadata.format; | ||
} | ||
}) | ||
var traceTree = {}; | ||
return loader.import(moduleName) | ||
.then(function() { | ||
return loader.normalize(moduleName); | ||
}) | ||
.then(function() { | ||
.then(function(_moduleName) { | ||
moduleName = _moduleName; | ||
loader.global.System = System; | ||
return asp(fs.writeFile)(outFile, concatOutput.join('\n')); | ||
return visitTree(loader.loads, moduleName, function(load) { | ||
traceTree[load.name] = load; | ||
}); | ||
}) | ||
.then(function() { | ||
return { | ||
moduleName: moduleName, | ||
tree: traceTree | ||
}; | ||
}) | ||
.catch(function(e) { | ||
loader.global.System = System; | ||
setTimeout(function() { | ||
throw e; | ||
}) | ||
throw e; | ||
}); | ||
} | ||
exports.createTraceTree = function(moduleName) { | ||
return loader.import(moduleName).then(function() { | ||
var traceTree = {}; | ||
return visitLoadTree(moduleName, function(load) { | ||
traceTree[load.name] = load.dependencies.map(function(dep) { return dep.value; }); | ||
}) | ||
.then(function() { | ||
return traceTree; | ||
}); | ||
}); | ||
} | ||
function visitLoadTree(moduleName, visit, seen) { | ||
function visitTree(tree, moduleName, visit, seen) { | ||
seen = seen || []; | ||
@@ -111,7 +121,10 @@ | ||
var load = loader.loads[moduleName]; | ||
var load = tree[moduleName]; | ||
if (!load) | ||
return; | ||
// visit the deps first | ||
return Promise.all(load.dependencies.map(function(dep) { | ||
return Promise.resolve(visitLoadTree(dep.value, visit, seen)); | ||
return Promise.all(load.deps.map(function(dep) { | ||
return Promise.resolve(visitTree(tree, load.depMap[dep], visit, seen)); | ||
})).then(function() { | ||
@@ -118,0 +131,0 @@ // if we are the bottom of the tree, visit |
{ | ||
"name": "systemjs-builder", | ||
"version": "0.0.0", | ||
"version": "0.0.1", | ||
"description": "", | ||
@@ -12,3 +12,3 @@ "main": "index.js", | ||
"systemjs": "^0.6.0", | ||
"traceur": "^0.0.41" | ||
"traceur": "git+ssh://git@github.com/google/traceur-compiler.git" | ||
}, | ||
@@ -15,0 +15,0 @@ "devDependencies": { |
@@ -28,2 +28,4 @@ SystemJS Build Tool | ||
```javascript | ||
// Declarative System.register (ES6) | ||
// System.register(name, deps, declare) | ||
System.register('app', ['./jquery'], function(deps) { | ||
@@ -52,22 +54,23 @@ var $, hello; | ||
It also provides a CSP wrapping for CommonJS and Globals. For example, CommonJS is output as: | ||
It also provides a dynamic System.register variation for CommonJS and Globals. For example, CommonJS is output as: | ||
```javascript | ||
System.defined["some/cjs"] = { | ||
deps: [], | ||
executingRequire: true, | ||
execute: function(require, exports, __moduleName) { | ||
var global = System.global; | ||
var __define = global.define; | ||
global.define = undefined; | ||
var module = { exports: exports }; | ||
var process = System.get("@@nodeProcess"); | ||
exports.cjs = true; | ||
global.define = __define; | ||
return module.exports; | ||
} | ||
}; | ||
// Dynamic module System.register | ||
// System.register(name, deps, executingRequire, execute); | ||
System.register("some/cjs", [], true, function(require, exports, __moduleName) { | ||
var global = System.global; | ||
var __define = global.define; | ||
global.define = undefined; | ||
var module = { exports: exports }; | ||
var process = System.get("@@nodeProcess")['default']; | ||
exports.cjs = true; | ||
global.define = __define; | ||
return module.exports; | ||
}); | ||
``` | ||
The `true` boolean argument in the above indicates that CommonJS requires are execution driving, | ||
as opposed to AMD which delays execution until all dependencies have been executed. | ||
Basic Use | ||
@@ -74,0 +77,0 @@ --- |
@@ -14,4 +14,4 @@ var builder = require('../index'); | ||
builder.createTraceTree('tree/first').then(function(traceTree) { | ||
builder.trace('tree/first').then(function(traceTree) { | ||
console.log(JSON.stringify(traceTree, null, 2)); | ||
}); |
@@ -12,27 +12,22 @@ "format register"; | ||
System.defined["tree/cjs"] = { | ||
deps: [], | ||
executingRequire: true, | ||
execute: function(require, exports, __moduleName) { | ||
var global = System.global; | ||
var __define = global.define; | ||
global.define = undefined; | ||
var module = { exports: exports }; | ||
var process = System.get("@@nodeProcess"); | ||
exports.cjs = true; | ||
global.define = __define; | ||
return module.exports; | ||
} | ||
}; | ||
System.register("tree/cjs", [], true, function(require, exports, __moduleName) { | ||
var global = System.global; | ||
var __define = global.define; | ||
global.define = undefined; | ||
var module = { exports: exports }; | ||
var process = System.get("@@nodeProcess")["default"]; | ||
var __filename = "tree/cjs.js"; | ||
var __dirname = "tree"; | ||
exports.cjs = true; | ||
global.define = __define; | ||
return module.exports; | ||
}); | ||
System.defined["tree/jquery"] = { | ||
deps: [], | ||
execute: function(__require, __exports, __moduleName) { | ||
System.get("@@global-helpers").prepareGlobal(__moduleName, []); | ||
this.jquery = {}; | ||
System.register("tree/jquery", [], false, function(__require, __exports, __moduleName) { | ||
System.get("@@global-helpers").prepareGlobal(__moduleName, []); | ||
this.jquery = {}; | ||
return System.get("@@global-helpers").retrieveGlobal(__moduleName, false); | ||
} | ||
}; | ||
return System.get("@@global-helpers").retrieveGlobal(__moduleName, false); | ||
}); | ||
@@ -60,7 +55,5 @@ System.register("tree/second", ["./third", "./cjs"], function($__0) { | ||
System.defined["tree/global"] = { | ||
deps: ["./jquery"], | ||
execute: function(__require, __exports, __moduleName) { | ||
System.get("@@global-helpers").prepareGlobal(__moduleName, ["./jquery"]); | ||
"deps ./jquery"; | ||
System.register("tree/global", ["./jquery"], false, function(__require, __exports, __moduleName) { | ||
System.get("@@global-helpers").prepareGlobal(__moduleName, ["./jquery"]); | ||
"deps ./jquery"; | ||
"exports jquery.test"; | ||
@@ -71,6 +64,5 @@ | ||
this["jquery.test"] = jquery.test; | ||
return System.get("@@global-helpers").retrieveGlobal(__moduleName, "jquery.test"); | ||
} | ||
}; | ||
this["jquery.test"] = jquery.test; | ||
return System.get("@@global-helpers").retrieveGlobal(__moduleName, "jquery.test"); | ||
}); | ||
@@ -77,0 +69,0 @@ define("tree/amd", ['./global'], function() { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Git dependency
Supply chain riskContains a dependency which resolves to a remote git URL. Dependencies fetched from git URLs are not immutable can be used to inject untrusted code or reduce the likelihood of a reproducible install.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
15799
103
1
- Removedcollections@0.2.2(transitive)
- Removedmime@1.2.11(transitive)
- Removedmimeparse@0.1.4(transitive)
- Removedq@0.9.7(transitive)
- Removedq-io@1.10.9(transitive)
- Removedqs@0.1.0(transitive)
- Removedtraceur@0.0.41(transitive)
- Removedurl2@0.0.0(transitive)
- Removedweak-map@1.0.0(transitive)
Updatedtraceur@git+ssh://git@github.com/google/traceur-compiler.git