123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- "use strict";
- exports.__esModule = true;
- var _create = require("babel-runtime/core-js/object/create");
- var _create2 = _interopRequireDefault(_create);
- exports.default = function (_ref) {
- var t = _ref.types;
- function isValidRequireCall(path) {
- if (!path.isCallExpression()) return false;
- if (!path.get("callee").isIdentifier({ name: "require" })) return false;
- if (path.scope.getBinding("require")) return false;
- var args = path.get("arguments");
- if (args.length !== 1) return false;
- var arg = args[0];
- if (!arg.isStringLiteral()) return false;
- return true;
- }
- var amdVisitor = {
- ReferencedIdentifier: function ReferencedIdentifier(_ref2) {
- var node = _ref2.node,
- scope = _ref2.scope;
- if (node.name === "exports" && !scope.getBinding("exports")) {
- this.hasExports = true;
- }
- if (node.name === "module" && !scope.getBinding("module")) {
- this.hasModule = true;
- }
- },
- CallExpression: function CallExpression(path) {
- if (!isValidRequireCall(path)) return;
- this.bareSources.push(path.node.arguments[0]);
- path.remove();
- },
- VariableDeclarator: function VariableDeclarator(path) {
- var id = path.get("id");
- if (!id.isIdentifier()) return;
- var init = path.get("init");
- if (!isValidRequireCall(init)) return;
- var source = init.node.arguments[0];
- this.sourceNames[source.value] = true;
- this.sources.push([id.node, source]);
- path.remove();
- }
- };
- return {
- inherits: require("babel-plugin-transform-es2015-modules-commonjs"),
- pre: function pre() {
- this.sources = [];
- this.sourceNames = (0, _create2.default)(null);
- this.bareSources = [];
- this.hasExports = false;
- this.hasModule = false;
- },
- visitor: {
- Program: {
- exit: function exit(path) {
- var _this = this;
- if (this.ran) return;
- this.ran = true;
- path.traverse(amdVisitor, this);
- var params = this.sources.map(function (source) {
- return source[0];
- });
- var sources = this.sources.map(function (source) {
- return source[1];
- });
- sources = sources.concat(this.bareSources.filter(function (str) {
- return !_this.sourceNames[str.value];
- }));
- var moduleName = this.getModuleName();
- if (moduleName) moduleName = t.stringLiteral(moduleName);
- if (this.hasExports) {
- sources.unshift(t.stringLiteral("exports"));
- params.unshift(t.identifier("exports"));
- }
- if (this.hasModule) {
- sources.unshift(t.stringLiteral("module"));
- params.unshift(t.identifier("module"));
- }
- var node = path.node;
- var factory = buildFactory({
- PARAMS: params,
- BODY: node.body
- });
- factory.expression.body.directives = node.directives;
- node.directives = [];
- node.body = [buildDefine({
- MODULE_NAME: moduleName,
- SOURCES: sources,
- FACTORY: factory
- })];
- }
- }
- }
- };
- };
- var _babelTemplate = require("babel-template");
- var _babelTemplate2 = _interopRequireDefault(_babelTemplate);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var buildDefine = (0, _babelTemplate2.default)("\n define(MODULE_NAME, [SOURCES], FACTORY);\n");
- var buildFactory = (0, _babelTemplate2.default)("\n (function (PARAMS) {\n BODY;\n })\n");
- module.exports = exports["default"];
|