UNPKG

4.67 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const tslib_1 = require("tslib");
4const core_1 = require("@babel/core");
5const plugin_babel_1 = require("@rollup/plugin-babel");
6const lodash_merge_1 = tslib_1.__importDefault(require("lodash.merge"));
7exports.isTruthy = (obj) => {
8 if (!obj) {
9 return false;
10 }
11 return obj.constructor !== Object || Object.keys(obj).length > 0;
12};
13// replace lodash with lodash-es, but not lodash/fp
14const replacements = [{ original: 'lodash(?!/fp)', replacement: 'lodash-es' }];
15exports.mergeConfigItems = (type, ...configItemsToMerge) => {
16 const mergedItems = [];
17 configItemsToMerge.forEach(configItemToMerge => {
18 configItemToMerge.forEach((item) => {
19 const itemToMergeWithIndex = mergedItems.findIndex(mergedItem => mergedItem.file.resolved === item.file.resolved);
20 if (itemToMergeWithIndex === -1) {
21 mergedItems.push(item);
22 return;
23 }
24 mergedItems[itemToMergeWithIndex] = core_1.createConfigItem([
25 mergedItems[itemToMergeWithIndex].file.resolved,
26 lodash_merge_1.default(mergedItems[itemToMergeWithIndex].options, item.options),
27 ], {
28 type,
29 });
30 });
31 });
32 return mergedItems;
33};
34exports.createConfigItems = (type, items) => {
35 return items.map((_a) => {
36 var { name } = _a, options = tslib_1.__rest(_a, ["name"]);
37 return core_1.createConfigItem([require.resolve(name), options], { type });
38 });
39};
40exports.babelPluginTsdx = plugin_babel_1.createBabelInputPluginFactory(() => ({
41 // Passed the plugin options.
42 options(_a) {
43 var { custom: customOptions } = _a, pluginOptions = tslib_1.__rest(_a, ["custom"]);
44 return {
45 // Pull out any custom options that the plugin might have.
46 customOptions,
47 // Pass the options back with the two custom options removed.
48 pluginOptions,
49 };
50 },
51 config(config, { customOptions }) {
52 const defaultPlugins = exports.createConfigItems('plugin', [
53 // {
54 // name: '@babel/plugin-transform-react-jsx',
55 // pragma: customOptions.jsx || 'h',
56 // pragmaFrag: customOptions.jsxFragment || 'Fragment',
57 // },
58 { name: 'babel-plugin-macros' },
59 { name: 'babel-plugin-annotate-pure-calls' },
60 { name: 'babel-plugin-dev-expression' },
61 customOptions.format !== 'cjs' && {
62 name: 'babel-plugin-transform-rename-import',
63 replacements,
64 },
65 {
66 name: 'babel-plugin-polyfill-regenerator',
67 // don't pollute global env as this is being used in a library
68 method: 'usage-pure',
69 },
70 {
71 name: '@babel/plugin-proposal-class-properties',
72 loose: true,
73 },
74 exports.isTruthy(customOptions.extractErrors) && {
75 name: './errors/transformErrorMessages',
76 },
77 ].filter(Boolean));
78 const babelOptions = config.options || {};
79 babelOptions.presets = babelOptions.presets || [];
80 const presetEnvIdx = babelOptions.presets.findIndex((preset) => preset.file.request.includes('@babel/preset-env'));
81 // if they use preset-env, merge their options with ours
82 if (presetEnvIdx !== -1) {
83 const presetEnv = babelOptions.presets[presetEnvIdx];
84 babelOptions.presets[presetEnvIdx] = core_1.createConfigItem([
85 presetEnv.file.resolved,
86 lodash_merge_1.default({
87 loose: true,
88 targets: customOptions.targets,
89 }, presetEnv.options, {
90 modules: false,
91 }),
92 ], {
93 type: `preset`,
94 });
95 }
96 else {
97 // if no preset-env, add it & merge with their presets
98 const defaultPresets = exports.createConfigItems('preset', [
99 {
100 name: '@babel/preset-env',
101 targets: customOptions.targets,
102 modules: false,
103 loose: true,
104 },
105 ]);
106 babelOptions.presets = exports.mergeConfigItems('preset', defaultPresets, babelOptions.presets);
107 }
108 // Merge babelrc & our plugins together
109 babelOptions.plugins = exports.mergeConfigItems('plugin', defaultPlugins, babelOptions.plugins || []);
110 return babelOptions;
111 },
112}));