commonjs-everywhere
Version:
CommonJS browser bundler with aliasing, extensibility, and source maps from the minified JS bundle
81 lines (80 loc) • 3.9 kB
JavaScript
// Generated by CoffeeScript 2.0.0-beta7
void function () {
var canonicalise, esprima, PRELUDE, PRELUDE_NODE, wrapFile;
esprima = require('esprima');
canonicalise = require('./canonicalise');
PRELUDE_NODE = "\nvar process = function(){\n var cwd = '/';\n return {\n title: 'browser',\n version: '" + process.version + "',\n browser: true,\n env: {},\n argv: [],\n nextTick: global.setImmediate || function(fn){ setTimeout(fn, 0); },\n cwd: function(){ return cwd; },\n chdir: function(dir){ cwd = dir; }\n };\n}();";
PRELUDE = "\nfunction require(file, parentModule){\n if({}.hasOwnProperty.call(require.cache, file))\n return require.cache[file];\n\n var resolved = require.resolve(file);\n if(!resolved) throw new Error('Failed to resolve module ' + file);\n\n var module$ = {\n id: file,\n require: require,\n filename: file,\n exports: {},\n loaded: false,\n parent: parentModule,\n children: []\n };\n if(parentModule) parentModule.children.push(module$);\n var dirname = file.slice(0, file.lastIndexOf('/') + 1);\n\n require.cache[file] = module$.exports;\n resolved.call(module$.exports, module$, module$.exports, dirname, file);\n module$.loaded = true;\n return require.cache[file] = module$.exports;\n}\n\nrequire.modules = {};\nrequire.cache = {};\n\nrequire.resolve = function(file){\n return {}.hasOwnProperty.call(require.modules, file) ? require.modules[file] : void 0;\n};\nrequire.define = function(file, fn){ require.modules[file] = fn; };";
wrapFile = function (name, program) {
var wrapper, wrapperProgram;
wrapperProgram = esprima.parse('require.define(0, function(module, exports, __dirname, __filename){});');
wrapper = wrapperProgram.body[0];
wrapper.expression['arguments'][0] = {
type: 'Literal',
value: name
};
wrapper.expression['arguments'][1].body.body = program.body;
return wrapper;
};
module.exports = function (processed, entryPoint, root, options) {
var ast, exportExpression, filename, iife, lhsExpression, prelude, program, requireEntryPoint;
prelude = (null != options.node ? options.node : true) ? '' + PRELUDE + '\n' + PRELUDE_NODE : PRELUDE;
program = esprima.parse(prelude);
for (filename in processed) {
if (!isOwn$(processed, filename))
continue;
ast = processed[filename].ast;
program.body.push(wrapFile(ast.loc.source, ast));
}
requireEntryPoint = {
type: 'CallExpression',
callee: {
type: 'Identifier',
name: 'require'
},
'arguments': [{
type: 'Literal',
value: canonicalise(root, entryPoint)
}]
};
if (null != options['export']) {
exportExpression = esprima.parse(options['export']).body[0].expression;
lhsExpression = exportExpression.type === 'Identifier' ? {
type: 'MemberExpression',
computed: false,
object: {
type: 'Identifier',
name: 'global'
},
property: {
type: 'Identifier',
name: exportExpression.name
}
} : exportExpression;
program.body.push({
type: 'ExpressionStatement',
expression: {
type: 'AssignmentExpression',
operator: '=',
left: lhsExpression,
right: requireEntryPoint
}
});
} else {
program.body.push({
type: 'ExpressionStatement',
expression: requireEntryPoint
});
}
iife = esprima.parse('(function(global){}).call(this, this);');
iife.body[0].expression.callee.object.body.body = program.body;
iife.leadingComments = [{
type: 'Line',
value: ' Generated by CommonJS Everywhere ' + require('../package.json').version
}];
return iife;
};
function isOwn$(o, p) {
return {}.hasOwnProperty.call(o, p);
}
}.call(this);