transform-imports
Version:
Easy-to-use API for manipulating imports and require calls.
47 lines (46 loc) • 2.42 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var traverse = require("@babel/traverse")["default"];
var recast = require("recast");
var babelParser = require("@babel/parser");
var importsVisitor = require("imports-visitor");
module.exports = function transformImports(code, callback) {
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var parser = options.parser || {
parse: function parse(code, parserOptions) {
return babelParser.parse(code, _objectSpread({
allowImportExportEverywhere: true,
allowReturnOutsideFunction: true,
allowSuperOutsideMethod: true,
tokens: true,
plugins: [
// "estree",
"jsx", "flow", "flowComments",
// "typescript",
"doExpressions", "objectRestSpread",
// "decorators",
"classProperties", "classPrivateProperties", "classPrivateMethods", "exportDefaultFrom", "exportNamespaceFrom", "asyncGenerators", "functionBind", "functionSent", "dynamicImport", "numericSeparator", "optionalChaining", "importMeta", "bigInt", "optionalCatchBinding", "throwExpressions",
// "pipelineOperator",
"nullishCoalescingOperator"]
}, parserOptions));
}
};
var ast = recast.parse(code, {
parser: parser
});
traverse(ast, {
enter: function enter(path) {
if (path.isProgram()) {
var imports = [];
path.traverse(importsVisitor, {
imports: imports
});
callback(imports);
}
}
});
return recast.print(ast).code;
};