grunt-systemjs-builder
Version:
grunt task for building projects based on systemjs
224 lines (162 loc) • 7.11 kB
JavaScript
/* */
"format cjs";
;
exports.__esModule = true;
// istanbul ignore next
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj["default"] = obj; return newObj; } }
// istanbul ignore next
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
// istanbul ignore next
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
// istanbul ignore next
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var _default = require("./_default");
var _default2 = _interopRequireDefault(_default);
var _common = require("./common");
var _common2 = _interopRequireDefault(_common);
var _lodashCollectionIncludes = require("lodash/collection/includes");
var _lodashCollectionIncludes2 = _interopRequireDefault(_lodashCollectionIncludes);
var _lodashObjectValues = require("lodash/object/values");
var _lodashObjectValues2 = _interopRequireDefault(_lodashObjectValues);
var _util = require("../../util");
var util = _interopRequireWildcard(_util);
var _types = require("../../types");
var t = _interopRequireWildcard(_types);
/**
* [Please add a description.]
*/
var AMDFormatter = (function (_DefaultFormatter) {
_inherits(AMDFormatter, _DefaultFormatter);
function AMDFormatter() {
_classCallCheck(this, AMDFormatter);
_DefaultFormatter.apply(this, arguments);
}
/**
* [Please add a description.]
*/
AMDFormatter.prototype.setup = function setup() {
_common2["default"].prototype._setup.call(this, this.hasNonDefaultExports);
};
/**
* [Please add a description.]
*/
AMDFormatter.prototype.buildDependencyLiterals = function buildDependencyLiterals() {
var names = [];
for (var name in this.ids) {
names.push(t.literal(name));
}
return names;
};
/**
* Wrap the entire body in a `define` wrapper.
*/
AMDFormatter.prototype.transform = function transform(program) {
_common2["default"].prototype.transform.apply(this, arguments);
var body = program.body;
// build an array of module names
var names = [t.literal("exports")];
if (this.passModuleArg) names.push(t.literal("module"));
names = names.concat(this.buildDependencyLiterals());
names = t.arrayExpression(names);
// build up define container
var params = _lodashObjectValues2["default"](this.ids);
if (this.passModuleArg) params.unshift(t.identifier("module"));
params.unshift(t.identifier("exports"));
var container = t.functionExpression(null, params, t.blockStatement(body));
var defineArgs = [names, container];
var moduleName = this.getModuleName();
if (moduleName) defineArgs.unshift(t.literal(moduleName));
var call = t.callExpression(t.identifier("define"), defineArgs);
program.body = [t.expressionStatement(call)];
};
/**
* Get the AMD module name that we'll prepend to the wrapper
* to define this module
*/
AMDFormatter.prototype.getModuleName = function getModuleName() {
if (this.file.opts.moduleIds) {
return _default2["default"].prototype.getModuleName.apply(this, arguments);
} else {
return null;
}
};
/**
* [Please add a description.]
*/
AMDFormatter.prototype._getExternalReference = function _getExternalReference(node) {
return this.scope.generateUidIdentifier(node.source.value);
};
/**
* [Please add a description.]
*/
AMDFormatter.prototype.importDeclaration = function importDeclaration(node) {
this.getExternalReference(node);
};
/**
* [Please add a description.]
*/
AMDFormatter.prototype.importSpecifier = function importSpecifier(specifier, node, nodes, scope) {
var key = node.source.value;
var ref = this.getExternalReference(node);
if (t.isImportNamespaceSpecifier(specifier) || t.isImportDefaultSpecifier(specifier)) {
this.defaultIds[key] = specifier.local;
}
if (this.isModuleType(node, "absolute")) {
// absolute module reference
} else if (this.isModuleType(node, "absoluteDefault")) {
// prevent unnecessary renaming of dynamic imports
this.ids[node.source.value] = ref;
ref = t.memberExpression(ref, t.identifier("default"));
} else if (t.isImportNamespaceSpecifier(specifier)) {
// import * as bar from "foo";
} else if (!_lodashCollectionIncludes2["default"](this.file.dynamicImported, node) && t.isSpecifierDefault(specifier) && !this.noInteropRequireImport) {
// import foo from "foo";
var uid = scope.generateUidIdentifier(specifier.local.name);
nodes.push(t.variableDeclaration("var", [t.variableDeclarator(uid, t.callExpression(this.file.addHelper("interop-require-default"), [ref]))]));
ref = t.memberExpression(uid, t.identifier("default"));
} else {
// import { foo } from "foo";
var imported = specifier.imported;
if (t.isSpecifierDefault(specifier)) imported = t.identifier("default");
ref = t.memberExpression(ref, imported);
}
this.remaps.add(scope, specifier.local.name, ref);
};
/**
* [Please add a description.]
*/
AMDFormatter.prototype.exportSpecifier = function exportSpecifier(specifier, node, nodes) {
if (this.doDefaultExportInterop(specifier)) {
this.passModuleArg = true;
if (specifier.exported !== specifier.local && !node.source) {
nodes.push(util.template("exports-default-assign", {
VALUE: specifier.local
}, true));
return;
}
}
_common2["default"].prototype.exportSpecifier.apply(this, arguments);
};
/**
* [Please add a description.]
*/
AMDFormatter.prototype.exportDeclaration = function exportDeclaration(node, nodes) {
if (this.doDefaultExportInterop(node)) {
this.passModuleArg = true;
var declar = node.declaration;
var assign = util.template("exports-default-assign", {
VALUE: this._pushStatement(declar, nodes)
}, true);
if (t.isFunctionDeclaration(declar)) {
// we can hoist this assignment to the top of the file
assign._blockHoist = 3;
}
nodes.push(assign);
return;
}
_default2["default"].prototype.exportDeclaration.apply(this, arguments);
};
return AMDFormatter;
})(_default2["default"]);
exports["default"] = AMDFormatter;
module.exports = exports["default"];