1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const tslib_1 = require("tslib");
|
4 | const core_1 = require("@babel/core");
|
5 | const plugin_babel_1 = require("@rollup/plugin-babel");
|
6 | const lodash_merge_1 = tslib_1.__importDefault(require("lodash.merge"));
|
7 | exports.isTruthy = (obj) => {
|
8 | if (!obj) {
|
9 | return false;
|
10 | }
|
11 | return obj.constructor !== Object || Object.keys(obj).length > 0;
|
12 | };
|
13 |
|
14 | const replacements = [{ original: 'lodash(?!/fp)', replacement: 'lodash-es' }];
|
15 | exports.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 | };
|
34 | exports.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 | };
|
40 | exports.babelPluginTsdx = plugin_babel_1.createBabelInputPluginFactory(() => ({
|
41 |
|
42 | options(_a) {
|
43 | var { custom: customOptions } = _a, pluginOptions = tslib_1.__rest(_a, ["custom"]);
|
44 | return {
|
45 |
|
46 | customOptions,
|
47 |
|
48 | pluginOptions,
|
49 | };
|
50 | },
|
51 | config(config, { customOptions }) {
|
52 | const defaultPlugins = exports.createConfigItems('plugin', [
|
53 |
|
54 |
|
55 |
|
56 |
|
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 |
|
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 |
|
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 |
|
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 |
|
109 | babelOptions.plugins = exports.mergeConfigItems('plugin', defaultPlugins, babelOptions.plugins || []);
|
110 | return babelOptions;
|
111 | },
|
112 | }));
|