@arco-plugins/webpack-react
Version:
arco webpack plugin
146 lines (145 loc) • 6.72 kB
JavaScript
;
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;