UNPKG

babel-plugin-import-separation

Version:
84 lines (66 loc) 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _default; var _helperModuleImports = require("@babel/helper-module-imports"); var _utils = require("./utils.js"); var _path = require("path"); var _assert = _interopRequireDefault(require("assert")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var tipMessage = "\n for separation should't use ImportDefaultSpecifier or ImportNamespaceSpecifier to load resource,\n error for --> (import all from 'xxx') / (import * as other from 'xxx'),\n should for --> (import { child1, child2 } from 'xxx')\n"; function _default(_ref) { var t = _ref.types; var pluginsUtil = null; // Program visitor var Program = function Program(path, _ref2) { var _ref2$opts = _ref2.opts, opts = _ref2$opts === void 0 ? {} : _ref2$opts; // Init plugin instances once. if (!pluginsUtil) { (0, _assert.default)(opts.libraryName, 'libraryName should be provided'); (0, _assert.default)(!(!opts.style && opts.onlyStyle), 'in onlyStyle mode must provided style'); pluginsUtil = new _utils.Configuration(opts.libraryName, opts.libraryDirectory, opts.style, opts.camelSymbol, opts.fileName, opts.onlyStyle); } }; // ImportDeclaration visitor var ImportDeclaration = function ImportDeclaration(path, state) { var _pluginsUtil = pluginsUtil, libraryName = _pluginsUtil.libraryName, libraryDirectory = _pluginsUtil.libraryDirectory, style = _pluginsUtil.style, fileName = _pluginsUtil.fileName, formatHandler = _pluginsUtil.formatHandler, onlyStyle = _pluginsUtil.onlyStyle; if (path.get('source').isLiteral({ value: libraryName })) { var node = path.node; var specifiers = node.specifiers; (0, _assert.default)(specifiers.every(function (spec) { return t.isImportSpecifier(spec); }), tipMessage); specifiers.forEach(function (spec) { var transformedMethodName = formatHandler(spec.imported.name); var localName = spec.local.name; var filePath = (0, _utils.winPath)((0, _path.join)(libraryName, libraryDirectory, transformedMethodName, fileName)); // if has style add style file if (style === true) { (0, _helperModuleImports.addSideEffect)(path, "".concat(filePath, "/style")); } else if (style === 'css') { (0, _helperModuleImports.addSideEffect)(path, "".concat(filePath, "/style/css")); } // if not onlyStyle add separation file if (onlyStyle !== true) { path.insertAfter(t.ImportDeclaration([t.ImportDefaultSpecifier(t.Identifier(localName))], t.stringLiteral("".concat(filePath)))); } }); if (onlyStyle !== true) { path.remove(); } } }; var ret = { visitor: { Program: Program, ImportDeclaration: ImportDeclaration } }; return ret; }