babel-plugin-system-import-transformer
Advanced tools
Comparing version 2.1.0 to 2.2.0
'use strict'; | ||
var path = require('path'); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
module.exports = function (babel) { | ||
var t = babel.types; | ||
function getImportPath(file, relativeImportPath) { | ||
var filename = file.opts.filename; | ||
var filePath = filename.replace(/[^\/]+$/, ''); | ||
var result = path.join(filePath, relativeImportPath); | ||
return result; | ||
} | ||
function getImportModuleName(file, importPath) { | ||
// check if it is a relative path or a module name | ||
var importedModulePath = importPath.indexOf('/') === -1 ? importPath : getImportPath(file, importPath); | ||
// Use the getModuleName() | ||
// so that the getModuleId configuration option is called | ||
// There should be a better way than cloning | ||
var importedModuleFile = t.clone(file); | ||
importedModuleFile.opts = t.cloneDeep(file.opts); | ||
importedModuleFile.opts.filename = importedModuleFile.opts.filenameRelative = importedModulePath + '.js'; | ||
importedModuleFile.opts.moduleIds = true; | ||
var result = importedModuleFile.getModuleName(); | ||
return result; | ||
} | ||
function SystemImportExpressionTransformer(state, params) { | ||
this.state = state; | ||
this.file = state.file; | ||
this.pluginOptions = this.state.opts; | ||
this.moduleType = this.pluginOptions.modules; | ||
var param = params[0]; | ||
this.importedModuleLiteral = t.stringLiteral(param.node.value); | ||
var moduleName = getImportModuleName(this.file, this.importedModuleLiteral.value); | ||
this.moduleNameLiteral = t.stringLiteral(moduleName); | ||
} | ||
SystemImportExpressionTransformer.prototype.getGlobalIdentifier = function () { | ||
if (this.globalIdentifier) { | ||
return this.globalIdentifier; | ||
} | ||
var name = 'system-import-transformer-global-identifier'; | ||
var ref = t.conditionalExpression(t.binaryExpression('!==', t.unaryExpression('typeof', t.identifier('window')), t.stringLiteral('undefined')), t.identifier('window'), t.identifier('self')); | ||
this.globalIdentifier = this.getOrCreateHelper(name, ref); | ||
return this.globalIdentifier; | ||
}; | ||
SystemImportExpressionTransformer.prototype.getOrCreateHelper = function (name, ref) { | ||
var declar = this.file.declarations[name]; | ||
if (declar) { | ||
return declar; | ||
} | ||
var uid = this.file.declarations[name] = this.file.scope.generateUidIdentifier(name); | ||
this.file.usedHelpers[name] = true; | ||
if (t.isFunctionExpression(ref) && !ref.id) { | ||
ref.body._compact = true; | ||
ref._generated = true; | ||
ref.id = uid; | ||
ref.type = "FunctionDeclaration"; | ||
this.file.attachAuxiliaryComment(ref); | ||
this.file.path.unshiftContainer("body", ref); | ||
} else { | ||
ref._compact = true; | ||
this.file.scope.push({ | ||
id: uid, | ||
init: ref, | ||
unique: true | ||
}); | ||
} | ||
return uid; | ||
}; | ||
SystemImportExpressionTransformer.prototype.getAmdTest = function () { | ||
var globalIdentifier = this.getGlobalIdentifier(); | ||
// typeof global.define === 'function' && global.define.amd | ||
var amdTest = t.logicalExpression('&&', t.binaryExpression('===', t.unaryExpression('typeof', t.memberExpression(globalIdentifier, t.identifier('define'))), t.stringLiteral('function')), t.memberExpression(t.memberExpression(globalIdentifier, t.identifier('define')), t.identifier('amd'))); | ||
return amdTest; | ||
}; | ||
SystemImportExpressionTransformer.prototype.getAmdRequirePromise = function (module) { | ||
var globalIdentifier = this.getGlobalIdentifier(); | ||
// global.require(['localforageSerializer'], resolve, reject); | ||
var amdRequire = t.expressionStatement(t.callExpression(t.memberExpression(globalIdentifier, t.identifier('require')), [t.arrayExpression([module]), t.identifier('resolve'), t.identifier('reject')])); | ||
var newPromiseExpression = t.newExpression(t.identifier('Promise'), [t.functionExpression(null, [t.identifier('resolve'), t.identifier('reject')], t.blockStatement([amdRequire]))]); | ||
return newPromiseExpression; | ||
}; | ||
SystemImportExpressionTransformer.prototype.getCommonJSTest = function () { | ||
// typeof module !== 'undefined' && module.exports && typeof require !== 'undefined' | ||
var commonJSTest = t.logicalExpression('&&', t.binaryExpression('!==', t.unaryExpression('typeof', t.identifier('module')), t.stringLiteral('undefined')), t.logicalExpression('&&', t.memberExpression(t.identifier('module'), t.identifier('exports')), t.binaryExpression('!==', t.unaryExpression('typeof', t.identifier('require')), t.stringLiteral('undefined')))); | ||
return commonJSTest; | ||
}; | ||
SystemImportExpressionTransformer.prototype.getComponentTest = function () { | ||
var globalIdentifier = this.getGlobalIdentifier(); | ||
// typeof module !== 'undefined' && module.component && global.require && global.require.loader === 'component' | ||
var componentTest = t.logicalExpression('&&', t.binaryExpression('!==', t.unaryExpression('typeof', t.identifier('module')), t.stringLiteral('undefined')), t.logicalExpression('&&', t.memberExpression(t.identifier('module'), t.identifier('component')), t.logicalExpression('&&', t.memberExpression(globalIdentifier, t.identifier('require')), t.binaryExpression('===', t.memberExpression(t.memberExpression(globalIdentifier, t.identifier('require')), t.identifier('loader')), t.stringLiteral('component'))))); | ||
return componentTest; | ||
}; | ||
SystemImportExpressionTransformer.prototype.getCommonJSRequire = function (module) { | ||
// resolve(require('./../utils/serializer')); | ||
var commonJSRequireExpression = t.callExpression(t.identifier('require'), | ||
// [module] // why this isn't working??? | ||
// [module, t.identifier('undefined')] // had to add extra undefined parameter or parenthesis !?!?!? | ||
[t.parenthesizedExpression(module)]); | ||
return commonJSRequireExpression; | ||
}; | ||
SystemImportExpressionTransformer.prototype.getCommonJSRequirePromise = function (module) { | ||
var commonJSRequireExpression = this.getCommonJSRequire(module); | ||
var commonJSRequire = this.createPromiseResolveExpression(commonJSRequireExpression); | ||
return commonJSRequire; | ||
}; | ||
SystemImportExpressionTransformer.prototype.getGlobalRequire = function (module) { | ||
var globalIdentifier = this.getGlobalIdentifier(); | ||
// resolve(global.localforageSerializer); | ||
var globalMemberExpression = t.memberExpression(globalIdentifier, module, true // computed | ||
); | ||
return globalMemberExpression; | ||
}; | ||
SystemImportExpressionTransformer.prototype.getGlobalRequirePromise = function (module) { | ||
var globalMemberExpression = this.getGlobalRequire(module); | ||
var globalRequire = this.createPromiseResolveExpression(globalMemberExpression); | ||
return globalRequire; | ||
}; | ||
SystemImportExpressionTransformer.prototype.createTransformedExpression = function () { | ||
var moduleImportExpression; | ||
if (this.moduleType === 'amd') { | ||
moduleImportExpression = this.getAmdRequirePromise(this.moduleNameLiteral); | ||
} else if (this.moduleType === 'common') { | ||
moduleImportExpression = this.getCommonJSRequirePromise(this.importedModuleLiteral); | ||
} else if (this.moduleType === 'global') { | ||
moduleImportExpression = this.getGlobalRequirePromise(this.moduleNameLiteral); | ||
} else { | ||
// umd | ||
var amdTest = this.getAmdTest(); | ||
var commonJSTest = this.getCommonJSTest(); | ||
var componentTest = this.getComponentTest(); | ||
var commonJSOrComponentTest = t.logicalExpression('||', commonJSTest, componentTest); | ||
var umdRequire = t.conditionalExpression(amdTest, this.getAmdRequirePromise(this.moduleNameLiteral), t.conditionalExpression(commonJSOrComponentTest, this.getCommonJSRequirePromise(this.importedModuleLiteral), this.getGlobalRequirePromise(this.moduleNameLiteral))); | ||
moduleImportExpression = umdRequire; | ||
} | ||
return moduleImportExpression; | ||
}; | ||
SystemImportExpressionTransformer.prototype.createResolveExpressionStatement = function (parameter) { | ||
var result = t.expressionStatement(t.callExpression(t.identifier('resolve'), [parameter])); | ||
return result; | ||
}; | ||
SystemImportExpressionTransformer.prototype.createPromiseResolveExpression = function (parameter) { | ||
var result = t.callExpression(t.memberExpression(t.identifier('Promise'), t.identifier('resolve')), [parameter]); | ||
return result; | ||
}; | ||
exports.default = function (babel) { | ||
return { | ||
@@ -181,3 +15,4 @@ visitor: { | ||
if (params.length && params[0].isLiteral()) { | ||
var transformer = new SystemImportExpressionTransformer(state, params); | ||
(0, _babelArgumentProvider.setBabelArgument)(babel); | ||
var transformer = new _SystemImportExpressionTransformer2.default(state, params); | ||
var transformedExpression = transformer.createTransformedExpression(); | ||
@@ -192,2 +27,10 @@ if (transformedExpression) { | ||
}; | ||
}; | ||
}; | ||
var _babelArgumentProvider = require('./babelArgumentProvider'); | ||
var _SystemImportExpressionTransformer = require('./SystemImportExpressionTransformer'); | ||
var _SystemImportExpressionTransformer2 = _interopRequireDefault(_SystemImportExpressionTransformer); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
@@ -9,19 +9,16 @@ 'use strict'; | ||
var _ModuleImportHelper = require('./ModuleImportHelper'); | ||
var _babelArgumentProvider = require('./babelArgumentProvider'); | ||
var _ModuleImportHelper2 = _interopRequireDefault(_ModuleImportHelper); | ||
var _moduleImportHelper = require('./moduleImportHelper'); | ||
var _promiseUtils = require('./promiseUtils'); | ||
var _utils = require('./utils'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
var t; | ||
var SystemImportExpressionTransformer = function () { | ||
function SystemImportExpressionTransformer(types, state, params) { | ||
function SystemImportExpressionTransformer(state, params) { | ||
_classCallCheck(this, SystemImportExpressionTransformer); | ||
t = types; | ||
this.state = state; | ||
@@ -32,6 +29,6 @@ this.file = state.file; | ||
var param = params[0]; | ||
this.importedModuleLiteral = t.stringLiteral(param.node.value); | ||
this.importedModuleLiteral = _babelArgumentProvider.types.stringLiteral(param.node.value); | ||
var moduleName = new _ModuleImportHelper2.default(t).getImportModuleName(this.file, this.importedModuleLiteral.value); | ||
this.moduleNameLiteral = t.stringLiteral(moduleName); | ||
var moduleName = (0, _moduleImportHelper.getImportModuleName)(this.file, this.importedModuleLiteral.value); | ||
this.moduleNameLiteral = _babelArgumentProvider.types.stringLiteral(moduleName); | ||
} | ||
@@ -45,3 +42,3 @@ | ||
} | ||
this.globalIdentifier = new _utils.UtilsHelper(t, this.file).getGlobalIdentifier(); | ||
this.globalIdentifier = new _utils.UtilsHelper(this.file).getGlobalIdentifier(); | ||
return this.globalIdentifier; | ||
@@ -54,3 +51,3 @@ } | ||
// typeof global.define === 'function' && global.define.amd | ||
var amdTest = t.logicalExpression('&&', t.binaryExpression('===', t.unaryExpression('typeof', t.memberExpression(globalIdentifier, t.identifier('define'))), t.stringLiteral('function')), t.memberExpression(t.memberExpression(globalIdentifier, t.identifier('define')), t.identifier('amd'))); | ||
var amdTest = _babelArgumentProvider.types.logicalExpression('&&', _babelArgumentProvider.types.binaryExpression('===', _babelArgumentProvider.types.unaryExpression('typeof', _babelArgumentProvider.types.memberExpression(globalIdentifier, _babelArgumentProvider.types.identifier('define'))), _babelArgumentProvider.types.stringLiteral('function')), _babelArgumentProvider.types.memberExpression(_babelArgumentProvider.types.memberExpression(globalIdentifier, _babelArgumentProvider.types.identifier('define')), _babelArgumentProvider.types.identifier('amd'))); | ||
return amdTest; | ||
@@ -63,5 +60,5 @@ } | ||
// global.require(['localforageSerializer'], resolve, reject); | ||
var amdRequire = t.expressionStatement(t.callExpression(t.memberExpression(globalIdentifier, t.identifier('require')), [t.arrayExpression([module]), t.identifier('resolve'), t.identifier('reject')])); | ||
var amdRequire = _babelArgumentProvider.types.expressionStatement(_babelArgumentProvider.types.callExpression(_babelArgumentProvider.types.memberExpression(globalIdentifier, _babelArgumentProvider.types.identifier('require')), [_babelArgumentProvider.types.arrayExpression([module]), _babelArgumentProvider.types.identifier('resolve'), _babelArgumentProvider.types.identifier('reject')])); | ||
var newPromiseExpression = t.newExpression(t.identifier('Promise'), [t.functionExpression(null, [t.identifier('resolve'), t.identifier('reject')], t.blockStatement([amdRequire]))]); | ||
var newPromiseExpression = _babelArgumentProvider.types.newExpression(_babelArgumentProvider.types.identifier('Promise'), [_babelArgumentProvider.types.functionExpression(null, [_babelArgumentProvider.types.identifier('resolve'), _babelArgumentProvider.types.identifier('reject')], _babelArgumentProvider.types.blockStatement([amdRequire]))]); | ||
return newPromiseExpression; | ||
@@ -73,3 +70,3 @@ } | ||
// typeof module !== 'undefined' && module.exports && typeof require !== 'undefined' | ||
var commonJSTest = t.logicalExpression('&&', t.binaryExpression('!==', t.unaryExpression('typeof', t.identifier('module')), t.stringLiteral('undefined')), t.logicalExpression('&&', t.memberExpression(t.identifier('module'), t.identifier('exports')), t.binaryExpression('!==', t.unaryExpression('typeof', t.identifier('require')), t.stringLiteral('undefined')))); | ||
var commonJSTest = _babelArgumentProvider.types.logicalExpression('&&', _babelArgumentProvider.types.binaryExpression('!==', _babelArgumentProvider.types.unaryExpression('typeof', _babelArgumentProvider.types.identifier('module')), _babelArgumentProvider.types.stringLiteral('undefined')), _babelArgumentProvider.types.logicalExpression('&&', _babelArgumentProvider.types.memberExpression(_babelArgumentProvider.types.identifier('module'), _babelArgumentProvider.types.identifier('exports')), _babelArgumentProvider.types.binaryExpression('!==', _babelArgumentProvider.types.unaryExpression('typeof', _babelArgumentProvider.types.identifier('require')), _babelArgumentProvider.types.stringLiteral('undefined')))); | ||
return commonJSTest; | ||
@@ -82,3 +79,3 @@ } | ||
// typeof module !== 'undefined' && module.component && global.require && global.require.loader === 'component' | ||
var componentTest = t.logicalExpression('&&', t.binaryExpression('!==', t.unaryExpression('typeof', t.identifier('module')), t.stringLiteral('undefined')), t.logicalExpression('&&', t.memberExpression(t.identifier('module'), t.identifier('component')), t.logicalExpression('&&', t.memberExpression(globalIdentifier, t.identifier('require')), t.binaryExpression('===', t.memberExpression(t.memberExpression(globalIdentifier, t.identifier('require')), t.identifier('loader')), t.stringLiteral('component'))))); | ||
var componentTest = _babelArgumentProvider.types.logicalExpression('&&', _babelArgumentProvider.types.binaryExpression('!==', _babelArgumentProvider.types.unaryExpression('typeof', _babelArgumentProvider.types.identifier('module')), _babelArgumentProvider.types.stringLiteral('undefined')), _babelArgumentProvider.types.logicalExpression('&&', _babelArgumentProvider.types.memberExpression(_babelArgumentProvider.types.identifier('module'), _babelArgumentProvider.types.identifier('component')), _babelArgumentProvider.types.logicalExpression('&&', _babelArgumentProvider.types.memberExpression(globalIdentifier, _babelArgumentProvider.types.identifier('require')), _babelArgumentProvider.types.binaryExpression('===', _babelArgumentProvider.types.memberExpression(_babelArgumentProvider.types.memberExpression(globalIdentifier, _babelArgumentProvider.types.identifier('require')), _babelArgumentProvider.types.identifier('loader')), _babelArgumentProvider.types.stringLiteral('component'))))); | ||
return componentTest; | ||
@@ -91,6 +88,6 @@ } | ||
var commonJSRequireExpression = t.callExpression(t.identifier('require'), | ||
var commonJSRequireExpression = _babelArgumentProvider.types.callExpression(_babelArgumentProvider.types.identifier('require'), | ||
// [module] // why this isn't working??? | ||
// [module, t.identifier('undefined')] // had to add extra undefined parameter or parenthesis !?!?!? | ||
[t.parenthesizedExpression(module)]); | ||
[_babelArgumentProvider.types.parenthesizedExpression(module)]); | ||
return commonJSRequireExpression; | ||
@@ -102,3 +99,3 @@ } | ||
var commonJSRequireExpression = this.getCommonJSRequire(module); | ||
var commonJSRequire = this.createPromiseResolveExpression(commonJSRequireExpression); | ||
var commonJSRequire = (0, _promiseUtils.createPromiseResolveExpression)(commonJSRequireExpression); | ||
return commonJSRequire; | ||
@@ -112,3 +109,3 @@ } | ||
// resolve(global.localforageSerializer); | ||
var globalMemberExpression = t.memberExpression(globalIdentifier, module, true // computed | ||
var globalMemberExpression = _babelArgumentProvider.types.memberExpression(globalIdentifier, module, true // computed | ||
); | ||
@@ -121,3 +118,3 @@ return globalMemberExpression; | ||
var globalMemberExpression = this.getGlobalRequire(module); | ||
var globalRequire = this.createPromiseResolveExpression(globalMemberExpression); | ||
var globalRequire = (0, _promiseUtils.createPromiseResolveExpression)(globalMemberExpression); | ||
return globalRequire; | ||
@@ -140,5 +137,5 @@ } | ||
var componentTest = this.getComponentTest(); | ||
var commonJSOrComponentTest = t.logicalExpression('||', commonJSTest, componentTest); | ||
var commonJSOrComponentTest = _babelArgumentProvider.types.logicalExpression('||', commonJSTest, componentTest); | ||
var umdRequire = t.conditionalExpression(amdTest, this.getAmdRequirePromise(this.moduleNameLiteral), t.conditionalExpression(commonJSOrComponentTest, this.getCommonJSRequirePromise(this.importedModuleLiteral), this.getGlobalRequirePromise(this.moduleNameLiteral))); | ||
var umdRequire = _babelArgumentProvider.types.conditionalExpression(amdTest, this.getAmdRequirePromise(this.moduleNameLiteral), _babelArgumentProvider.types.conditionalExpression(commonJSOrComponentTest, this.getCommonJSRequirePromise(this.importedModuleLiteral), this.getGlobalRequirePromise(this.moduleNameLiteral))); | ||
moduleImportExpression = umdRequire; | ||
@@ -149,14 +146,2 @@ } | ||
} | ||
}, { | ||
key: 'createResolveExpressionStatement', | ||
value: function createResolveExpressionStatement(parameter) { | ||
var result = t.expressionStatement(t.callExpression(t.identifier('resolve'), [parameter])); | ||
return result; | ||
} | ||
}, { | ||
key: 'createPromiseResolveExpression', | ||
value: function createPromiseResolveExpression(parameter) { | ||
var result = t.callExpression(t.memberExpression(t.identifier('Promise'), t.identifier('resolve')), [parameter]); | ||
return result; | ||
} | ||
}]); | ||
@@ -163,0 +148,0 @@ |
@@ -6,2 +6,3 @@ 'use strict'; | ||
}); | ||
exports.UtilsHelper = undefined; | ||
@@ -11,7 +12,9 @@ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); | ||
exports.getGlobalObjectExpression = getGlobalObjectExpression; | ||
exports.createResolveExpressionStatement = createResolveExpressionStatement; | ||
exports.createPromiseResolveExpression = createPromiseResolveExpression; | ||
var _babelArgumentProvider = require('./babelArgumentProvider'); | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
var t; | ||
function getGlobalObjectExpression(t) { | ||
@@ -21,7 +24,16 @@ return t.conditionalExpression(t.binaryExpression('!==', t.unaryExpression('typeof', t.identifier('window')), t.stringLiteral('undefined')), t.identifier('window'), t.identifier('self')); | ||
function createResolveExpressionStatement(t, parameter) { | ||
var result = t.expressionStatement(t.callExpression(t.identifier('resolve'), [parameter])); | ||
return result; | ||
} | ||
function createPromiseResolveExpression(t, parameter) { | ||
var result = t.callExpression(t.memberExpression(t.identifier('Promise'), t.identifier('resolve')), [parameter]); | ||
return result; | ||
} | ||
var UtilsHelper = exports.UtilsHelper = function () { | ||
function UtilsHelper(types, file) { | ||
function UtilsHelper(file) { | ||
_classCallCheck(this, UtilsHelper); | ||
t = types; | ||
this.file = file; | ||
@@ -35,3 +47,3 @@ } | ||
var result = this.getOrCreateHelper(name, function () { | ||
return getGlobalObjectExpression(t); | ||
return getGlobalObjectExpression(_babelArgumentProvider.types); | ||
}); | ||
@@ -55,3 +67,3 @@ return result; | ||
if (t.isFunctionExpression(ref) && !ref.id) { | ||
if (_babelArgumentProvider.types.isFunctionExpression(ref) && !ref.id) { | ||
ref.body._compact = true; | ||
@@ -58,0 +70,0 @@ ref._generated = true; |
{ | ||
"name": "babel-plugin-system-import-transformer", | ||
"version": "2.1.0", | ||
"version": "2.2.0", | ||
"description": "Babel plugin that replaces System.import with the equivalent UMD pattern", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
15
0
23171
278