build-easy
Version:
library build tool.
87 lines (81 loc) • 4.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getBabelConfig;
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function getBabelConfig(buildConfig, isBrowser, moduleType) {
const nodeVersion = buildConfig.nodeVersion,
runtimeHelpers = buildConfig.runtimeHelpers,
_buildConfig$babelCon = buildConfig.babelConfigTransform,
babelConfigTransform = _buildConfig$babelCon === void 0 ? config => config : _buildConfig$babelCon,
_buildConfig$extraBab = buildConfig.extraBabelPlugins,
extraBabelPlugins = _buildConfig$extraBab === void 0 ? [] : _buildConfig$extraBab,
_buildConfig$extraBab2 = buildConfig.extraBabelPresets,
extraBabelPresets = _buildConfig$extraBab2 === void 0 ? [] : _buildConfig$extraBab2,
frame = buildConfig.frame;
const vue = frame === 'vue';
const react = frame === 'react';
const defaultEnvConfig = {
exclude: ['transform-member-expression-literals', 'transform-reserved-words', 'transform-template-literals', 'transform-typeof-symbol', 'transform-unicode-regex', 'transform-sticky-regex', 'transform-new-target', 'transform-modules-umd', 'transform-modules-systemjs', 'transform-modules-amd', 'transform-literals', 'transform-regenerator'].filter(Boolean)
}; // Setting this to false will preserve ES modules.
const modules = moduleType === 'esm' ? false : 'cjs';
const babelConfig = {
presets: [require.resolve('@build-easy/bundles/model/@babel/preset-typescript'), [require.resolve('@build-easy/bundles/model/@babel/preset-env'), _objectSpread({
targets: isBrowser ? {
browsers: ['last 2 versions', 'IE 11']
} : {
node: nodeVersion !== null && nodeVersion !== void 0 ? nodeVersion : 6
},
modules
}, defaultEnvConfig)],
/**
* @desc Supports react
*/
isBrowser && react && require.resolve('@build-easy/bundles/model/@babel/preset-react'), ...extraBabelPresets].filter(Boolean),
plugins: [
/**
* @in
* export default 1
* @out
* Object.defineProperty(exports, "__esModule", {
* value: true,
* });
*
* exports.default = 1;
*/
moduleType === 'cjs' && !isBrowser && [require.resolve('@build-easy/bundles/model/@babel/plugin-transform-modules-commonjs'), {
lazy: true
}],
/**
* @in
* export * as v from "mod"
* @out
* export v from "mod"
*/
require.resolve('@build-easy/bundles/model/@babel/plugin-proposal-export-default-from'),
/**
* @desc
* let a = do {
* if (x > 10) {
* ("big");
* } else {
* ("small");
* }
* };
* // is equivalent to:
* let a = x > 10 ? "big" : "small";
*/
require.resolve('@build-easy/bundles/model/@babel/plugin-proposal-do-expressions'),
/**
* @desc Supports vue jsx
*/
isBrowser && vue && require('@build-easy/bundles/model/@vue/babel-plugin-jsx'), runtimeHelpers && [require.resolve('@build-easy/bundles/model/@babel/plugin-transform-runtime'), {
useESModules: isBrowser && moduleType === 'esm',
version: require('@babel/runtime/package.json').version
}], ...extraBabelPlugins].filter(Boolean)
};
return babelConfigTransform(babelConfig);
}