@arco-plugins/webpack-react
Version:
arco webpack plugin
49 lines (48 loc) • 1.86 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var parser_1 = require("@babel/parser");
var loader_utils_1 = require("loader-utils");
var traverse_1 = __importDefault(require("@babel/traverse"));
var generator_1 = __importDefault(require("@babel/generator"));
// 替换默认语言包
var ReplaceDefaultLanguageLoader = function (resource) {
var options = (0, loader_utils_1.getOptions)(this);
var _a = options, _b = _a.type, type = _b === void 0 ? 'es' : _b, defaultLanguage = _a.defaultLanguage;
var ast = (0, parser_1.parse)(resource, {
sourceType: type === 'es' ? 'module' : 'script',
});
var replaceLanguage = function (source) {
return source.replace(/([a-zA-Z-]+)(.js|.ts)?$/, defaultLanguage);
};
if (type === 'lib') {
// @ts-ignore
(0, traverse_1.default)(ast, {
CallExpression: function (path) {
var node = path.node;
var callee = node.callee;
// @ts-ignore
if (callee.name === 'require') {
// @ts-ignore
node.arguments[0].value = replaceLanguage(node.arguments[0].value);
}
},
});
}
if (type === 'es') {
// @ts-ignore
(0, traverse_1.default)(ast, {
ImportDeclaration: function (path) {
var node = path.node;
var source = node.source;
source.value = replaceLanguage(source.value);
},
});
}
// @ts-ignore
return (0, generator_1.default)(ast).code;
};
module.exports = ReplaceDefaultLanguageLoader;
module.exports.default = ReplaceDefaultLanguageLoader;