UNPKG

@arco-plugins/webpack-react

Version:
146 lines (145 loc) 6.72 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.modifyBabelLoaderMerge = exports.modifyBabelLoaderOverride = exports.transformImport = exports.getBabelPlugins = void 0; var core_1 = require("@babel/core"); var lodash_1 = require("lodash"); var babel_config_1 = __importDefault(require("../config/babel.config")); var _a = require('../config'), ARCO_DESIGN_COMPONENT_NAME = _a.ARCO_DESIGN_COMPONENT_NAME, ARCO_DESIGN_ICON_NAME = _a.ARCO_DESIGN_ICON_NAME; var babelPluginImport = require.resolve('babel-plugin-import'); var babelPluginFlagPrefix = '__arco_babel_plugin__'; function getBabelPluginFlag(suffix) { return "".concat(babelPluginFlagPrefix).concat(suffix); } // babel plugins for component library function getArcoImportPlugins(options) { return [ [ babelPluginImport, __assign(__assign({ libraryDirectory: 'es', style: true }, options), { libraryName: ARCO_DESIGN_COMPONENT_NAME, camel2DashComponentName: false }), getBabelPluginFlag("import_".concat(ARCO_DESIGN_COMPONENT_NAME)), ], [ babelPluginImport, { libraryName: ARCO_DESIGN_ICON_NAME, libraryDirectory: 'react-icon', camel2DashComponentName: false, }, getBabelPluginFlag("import_".concat(ARCO_DESIGN_ICON_NAME)), ], ]; } // babel plugins for iconbox function getIconBoxImportPlugins(iconBoxLibName) { if (!iconBoxLibName) return []; return [ [ babelPluginImport, { libraryName: iconBoxLibName, libraryDirectory: 'esm', camel2DashComponentName: false, }, getBabelPluginFlag("import_".concat(iconBoxLibName)), ], ]; } function getTransformOptions(options) { return (0, lodash_1.merge)({ libraryDirectory: 'es', style: true, iconBox: '', babelConfig: {}, }, options || {}); } function getBabelPlugins(options) { var _options = getTransformOptions(options); return __spreadArray(__spreadArray(__spreadArray([], (_options.babelConfig.plugins || []), true), getArcoImportPlugins({ libraryDirectory: _options.libraryDirectory, style: _options.style, }), true), getIconBoxImportPlugins(_options.iconBox), true); } exports.getBabelPlugins = getBabelPlugins; function mergeBabelPresets(defaults, userPresets) { var finalPresets = __spreadArray([], defaults, true); userPresets.forEach(function (p) { var _a = Array.isArray(p) ? p : [p], presetName = _a[0], presetOptions = _a[1]; var existedPresetIndex = finalPresets.findIndex(function (i) { var _presetName = Array.isArray(i) ? i[0] : i; // Preset name can be passed in a file path or the name of an npm package, // so we use resolved paths to determine whether two presets are the same. if (require.resolve(presetName) === require.resolve(_presetName)) { return true; } return false; }); if (existedPresetIndex === -1) { finalPresets.push(p); } else { var mergedPreset = finalPresets[existedPresetIndex]; mergedPreset = Array.isArray(mergedPreset) ? mergedPreset : [mergedPreset]; // merge preset options mergedPreset[1] = __assign(__assign({}, mergedPreset[1]), presetOptions); finalPresets.splice(existedPresetIndex, 1, mergedPreset); } }); return finalPresets; } function transformImport(source, options) { var _options = getTransformOptions(options); var babelPlugins = getBabelPlugins(options); var babelPresets = mergeBabelPresets(babel_config_1.default.presets, _options.babelConfig.presets || []); var transformResult = (0, core_1.transformSync)(source, (0, lodash_1.merge)({}, _options.babelConfig, { presets: babelPresets, plugins: babelPlugins, })); return transformResult.code; } exports.transformImport = transformImport; function modifyBabelLoaderOverride(loader, options) { var _a; var loaderOptions = loader.options; if ((_a = loaderOptions === null || loaderOptions === void 0 ? void 0 : loaderOptions.plugins) === null || _a === void 0 ? void 0 : _a.some(function (item) { var _a; return (_a = item[2]) === null || _a === void 0 ? void 0 : _a.startsWith(babelPluginFlagPrefix); })) { return; } var config = options.babelConfig; var plugins = getBabelPlugins(options); loader.options = __assign(__assign(__assign({}, loaderOptions), config), { presets: __spreadArray(__spreadArray([], (loaderOptions.presets || []), true), ((config === null || config === void 0 ? void 0 : config.presets) || []), true), plugins: plugins }); } exports.modifyBabelLoaderOverride = modifyBabelLoaderOverride; function modifyBabelLoaderMerge(loader, options) { var _a; var loaderOptions = loader.options; if ((_a = loaderOptions === null || loaderOptions === void 0 ? void 0 : loaderOptions.plugins) === null || _a === void 0 ? void 0 : _a.some(function (item) { var _a; return (_a = item[2]) === null || _a === void 0 ? void 0 : _a.startsWith(babelPluginFlagPrefix); })) { return; } var config = options.babelConfig; var plugins = getBabelPlugins(options); loader.options = __assign(__assign(__assign({}, loaderOptions), config), { presets: __spreadArray(__spreadArray([], (loaderOptions.presets || []), true), ((config === null || config === void 0 ? void 0 : config.presets) || []), true), plugins: __spreadArray(__spreadArray([], (loaderOptions.plugins || []), true), (plugins || []), true) }); } exports.modifyBabelLoaderMerge = modifyBabelLoaderMerge;