1 | "use strict";
|
---|
2 |
|
---|
3 | Object.defineProperty(exports, "__esModule", {
|
---|
4 | value: true
|
---|
5 | });
|
---|
6 | exports.default = void 0;
|
---|
7 | function _gensync() {
|
---|
8 | const data = require("gensync");
|
---|
9 | _gensync = function () {
|
---|
10 | return data;
|
---|
11 | };
|
---|
12 | return data;
|
---|
13 | }
|
---|
14 | var _async = require("../gensync-utils/async.js");
|
---|
15 | var _util = require("./util.js");
|
---|
16 | var context = require("../index.js");
|
---|
17 | var _plugin = require("./plugin.js");
|
---|
18 | var _item = require("./item.js");
|
---|
19 | var _configChain = require("./config-chain.js");
|
---|
20 | var _deepArray = require("./helpers/deep-array.js");
|
---|
21 | function _traverse() {
|
---|
22 | const data = require("@babel/traverse");
|
---|
23 | _traverse = function () {
|
---|
24 | return data;
|
---|
25 | };
|
---|
26 | return data;
|
---|
27 | }
|
---|
28 | var _caching = require("./caching.js");
|
---|
29 | var _options = require("./validation/options.js");
|
---|
30 | var _plugins = require("./validation/plugins.js");
|
---|
31 | var _configApi = require("./helpers/config-api.js");
|
---|
32 | var _partial = require("./partial.js");
|
---|
33 | var _configError = require("../errors/config-error.js");
|
---|
34 | var _default = exports.default = _gensync()(function* loadFullConfig(inputOpts) {
|
---|
35 | var _opts$assumptions;
|
---|
36 | const result = yield* (0, _partial.default)(inputOpts);
|
---|
37 | if (!result) {
|
---|
38 | return null;
|
---|
39 | }
|
---|
40 | const {
|
---|
41 | options,
|
---|
42 | context,
|
---|
43 | fileHandling
|
---|
44 | } = result;
|
---|
45 | if (fileHandling === "ignored") {
|
---|
46 | return null;
|
---|
47 | }
|
---|
48 | const optionDefaults = {};
|
---|
49 | const {
|
---|
50 | plugins,
|
---|
51 | presets
|
---|
52 | } = options;
|
---|
53 | if (!plugins || !presets) {
|
---|
54 | throw new Error("Assertion failure - plugins and presets exist");
|
---|
55 | }
|
---|
56 | const presetContext = Object.assign({}, context, {
|
---|
57 | targets: options.targets
|
---|
58 | });
|
---|
59 | const toDescriptor = item => {
|
---|
60 | const desc = (0, _item.getItemDescriptor)(item);
|
---|
61 | if (!desc) {
|
---|
62 | throw new Error("Assertion failure - must be config item");
|
---|
63 | }
|
---|
64 | return desc;
|
---|
65 | };
|
---|
66 | const presetsDescriptors = presets.map(toDescriptor);
|
---|
67 | const initialPluginsDescriptors = plugins.map(toDescriptor);
|
---|
68 | const pluginDescriptorsByPass = [[]];
|
---|
69 | const passes = [];
|
---|
70 | const externalDependencies = [];
|
---|
71 | const ignored = yield* enhanceError(context, function* recursePresetDescriptors(rawPresets, pluginDescriptorsPass) {
|
---|
72 | const presets = [];
|
---|
73 | for (let i = 0; i < rawPresets.length; i++) {
|
---|
74 | const descriptor = rawPresets[i];
|
---|
75 | if (descriptor.options !== false) {
|
---|
76 | try {
|
---|
77 | var preset = yield* loadPresetDescriptor(descriptor, presetContext);
|
---|
78 | } catch (e) {
|
---|
79 | if (e.code === "BABEL_UNKNOWN_OPTION") {
|
---|
80 | (0, _options.checkNoUnwrappedItemOptionPairs)(rawPresets, i, "preset", e);
|
---|
81 | }
|
---|
82 | throw e;
|
---|
83 | }
|
---|
84 | externalDependencies.push(preset.externalDependencies);
|
---|
85 | if (descriptor.ownPass) {
|
---|
86 | presets.push({
|
---|
87 | preset: preset.chain,
|
---|
88 | pass: []
|
---|
89 | });
|
---|
90 | } else {
|
---|
91 | presets.unshift({
|
---|
92 | preset: preset.chain,
|
---|
93 | pass: pluginDescriptorsPass
|
---|
94 | });
|
---|
95 | }
|
---|
96 | }
|
---|
97 | }
|
---|
98 | if (presets.length > 0) {
|
---|
99 | pluginDescriptorsByPass.splice(1, 0, ...presets.map(o => o.pass).filter(p => p !== pluginDescriptorsPass));
|
---|
100 | for (const {
|
---|
101 | preset,
|
---|
102 | pass
|
---|
103 | } of presets) {
|
---|
104 | if (!preset) return true;
|
---|
105 | pass.push(...preset.plugins);
|
---|
106 | const ignored = yield* recursePresetDescriptors(preset.presets, pass);
|
---|
107 | if (ignored) return true;
|
---|
108 | preset.options.forEach(opts => {
|
---|
109 | (0, _util.mergeOptions)(optionDefaults, opts);
|
---|
110 | });
|
---|
111 | }
|
---|
112 | }
|
---|
113 | })(presetsDescriptors, pluginDescriptorsByPass[0]);
|
---|
114 | if (ignored) return null;
|
---|
115 | const opts = optionDefaults;
|
---|
116 | (0, _util.mergeOptions)(opts, options);
|
---|
117 | const pluginContext = Object.assign({}, presetContext, {
|
---|
118 | assumptions: (_opts$assumptions = opts.assumptions) != null ? _opts$assumptions : {}
|
---|
119 | });
|
---|
120 | yield* enhanceError(context, function* loadPluginDescriptors() {
|
---|
121 | pluginDescriptorsByPass[0].unshift(...initialPluginsDescriptors);
|
---|
122 | for (const descs of pluginDescriptorsByPass) {
|
---|
123 | const pass = [];
|
---|
124 | passes.push(pass);
|
---|
125 | for (let i = 0; i < descs.length; i++) {
|
---|
126 | const descriptor = descs[i];
|
---|
127 | if (descriptor.options !== false) {
|
---|
128 | try {
|
---|
129 | var plugin = yield* loadPluginDescriptor(descriptor, pluginContext);
|
---|
130 | } catch (e) {
|
---|
131 | if (e.code === "BABEL_UNKNOWN_PLUGIN_PROPERTY") {
|
---|
132 | (0, _options.checkNoUnwrappedItemOptionPairs)(descs, i, "plugin", e);
|
---|
133 | }
|
---|
134 | throw e;
|
---|
135 | }
|
---|
136 | pass.push(plugin);
|
---|
137 | externalDependencies.push(plugin.externalDependencies);
|
---|
138 | }
|
---|
139 | }
|
---|
140 | }
|
---|
141 | })();
|
---|
142 | opts.plugins = passes[0];
|
---|
143 | opts.presets = passes.slice(1).filter(plugins => plugins.length > 0).map(plugins => ({
|
---|
144 | plugins
|
---|
145 | }));
|
---|
146 | opts.passPerPreset = opts.presets.length > 0;
|
---|
147 | return {
|
---|
148 | options: opts,
|
---|
149 | passes: passes,
|
---|
150 | externalDependencies: (0, _deepArray.finalize)(externalDependencies)
|
---|
151 | };
|
---|
152 | });
|
---|
153 | function enhanceError(context, fn) {
|
---|
154 | return function* (arg1, arg2) {
|
---|
155 | try {
|
---|
156 | return yield* fn(arg1, arg2);
|
---|
157 | } catch (e) {
|
---|
158 | if (!/^\[BABEL\]/.test(e.message)) {
|
---|
159 | var _context$filename;
|
---|
160 | e.message = `[BABEL] ${(_context$filename = context.filename) != null ? _context$filename : "unknown file"}: ${e.message}`;
|
---|
161 | }
|
---|
162 | throw e;
|
---|
163 | }
|
---|
164 | };
|
---|
165 | }
|
---|
166 | const makeDescriptorLoader = apiFactory => (0, _caching.makeWeakCache)(function* ({
|
---|
167 | value,
|
---|
168 | options,
|
---|
169 | dirname,
|
---|
170 | alias
|
---|
171 | }, cache) {
|
---|
172 | if (options === false) throw new Error("Assertion failure");
|
---|
173 | options = options || {};
|
---|
174 | const externalDependencies = [];
|
---|
175 | let item = value;
|
---|
176 | if (typeof value === "function") {
|
---|
177 | const factory = (0, _async.maybeAsync)(value, `You appear to be using an async plugin/preset, but Babel has been called synchronously`);
|
---|
178 | const api = Object.assign({}, context, apiFactory(cache, externalDependencies));
|
---|
179 | try {
|
---|
180 | item = yield* factory(api, options, dirname);
|
---|
181 | } catch (e) {
|
---|
182 | if (alias) {
|
---|
183 | e.message += ` (While processing: ${JSON.stringify(alias)})`;
|
---|
184 | }
|
---|
185 | throw e;
|
---|
186 | }
|
---|
187 | }
|
---|
188 | if (!item || typeof item !== "object") {
|
---|
189 | throw new Error("Plugin/Preset did not return an object.");
|
---|
190 | }
|
---|
191 | if ((0, _async.isThenable)(item)) {
|
---|
192 | yield* [];
|
---|
193 | throw new Error(`You appear to be using a promise as a plugin, ` + `which your current version of Babel does not support. ` + `If you're using a published plugin, ` + `you may need to upgrade your @babel/core version. ` + `As an alternative, you can prefix the promise with "await". ` + `(While processing: ${JSON.stringify(alias)})`);
|
---|
194 | }
|
---|
195 | if (externalDependencies.length > 0 && (!cache.configured() || cache.mode() === "forever")) {
|
---|
196 | let error = `A plugin/preset has external untracked dependencies ` + `(${externalDependencies[0]}), but the cache `;
|
---|
197 | if (!cache.configured()) {
|
---|
198 | error += `has not been configured to be invalidated when the external dependencies change. `;
|
---|
199 | } else {
|
---|
200 | error += ` has been configured to never be invalidated. `;
|
---|
201 | }
|
---|
202 | error += `Plugins/presets should configure their cache to be invalidated when the external ` + `dependencies change, for example using \`api.cache.invalidate(() => ` + `statSync(filepath).mtimeMs)\` or \`api.cache.never()\`\n` + `(While processing: ${JSON.stringify(alias)})`;
|
---|
203 | throw new Error(error);
|
---|
204 | }
|
---|
205 | return {
|
---|
206 | value: item,
|
---|
207 | options,
|
---|
208 | dirname,
|
---|
209 | alias,
|
---|
210 | externalDependencies: (0, _deepArray.finalize)(externalDependencies)
|
---|
211 | };
|
---|
212 | });
|
---|
213 | const pluginDescriptorLoader = makeDescriptorLoader(_configApi.makePluginAPI);
|
---|
214 | const presetDescriptorLoader = makeDescriptorLoader(_configApi.makePresetAPI);
|
---|
215 | const instantiatePlugin = (0, _caching.makeWeakCache)(function* ({
|
---|
216 | value,
|
---|
217 | options,
|
---|
218 | dirname,
|
---|
219 | alias,
|
---|
220 | externalDependencies
|
---|
221 | }, cache) {
|
---|
222 | const pluginObj = (0, _plugins.validatePluginObject)(value);
|
---|
223 | const plugin = Object.assign({}, pluginObj);
|
---|
224 | if (plugin.visitor) {
|
---|
225 | plugin.visitor = _traverse().default.explode(Object.assign({}, plugin.visitor));
|
---|
226 | }
|
---|
227 | if (plugin.inherits) {
|
---|
228 | const inheritsDescriptor = {
|
---|
229 | name: undefined,
|
---|
230 | alias: `${alias}$inherits`,
|
---|
231 | value: plugin.inherits,
|
---|
232 | options,
|
---|
233 | dirname
|
---|
234 | };
|
---|
235 | const inherits = yield* (0, _async.forwardAsync)(loadPluginDescriptor, run => {
|
---|
236 | return cache.invalidate(data => run(inheritsDescriptor, data));
|
---|
237 | });
|
---|
238 | plugin.pre = chainMaybeAsync(inherits.pre, plugin.pre);
|
---|
239 | plugin.post = chainMaybeAsync(inherits.post, plugin.post);
|
---|
240 | plugin.manipulateOptions = chainMaybeAsync(inherits.manipulateOptions, plugin.manipulateOptions);
|
---|
241 | plugin.visitor = _traverse().default.visitors.merge([inherits.visitor || {}, plugin.visitor || {}]);
|
---|
242 | if (inherits.externalDependencies.length > 0) {
|
---|
243 | if (externalDependencies.length === 0) {
|
---|
244 | externalDependencies = inherits.externalDependencies;
|
---|
245 | } else {
|
---|
246 | externalDependencies = (0, _deepArray.finalize)([externalDependencies, inherits.externalDependencies]);
|
---|
247 | }
|
---|
248 | }
|
---|
249 | }
|
---|
250 | return new _plugin.default(plugin, options, alias, externalDependencies);
|
---|
251 | });
|
---|
252 | function* loadPluginDescriptor(descriptor, context) {
|
---|
253 | if (descriptor.value instanceof _plugin.default) {
|
---|
254 | if (descriptor.options) {
|
---|
255 | throw new Error("Passed options to an existing Plugin instance will not work.");
|
---|
256 | }
|
---|
257 | return descriptor.value;
|
---|
258 | }
|
---|
259 | return yield* instantiatePlugin(yield* pluginDescriptorLoader(descriptor, context), context);
|
---|
260 | }
|
---|
261 | const needsFilename = val => val && typeof val !== "function";
|
---|
262 | const validateIfOptionNeedsFilename = (options, descriptor) => {
|
---|
263 | if (needsFilename(options.test) || needsFilename(options.include) || needsFilename(options.exclude)) {
|
---|
264 | const formattedPresetName = descriptor.name ? `"${descriptor.name}"` : "/* your preset */";
|
---|
265 | throw new _configError.default([`Preset ${formattedPresetName} requires a filename to be set when babel is called directly,`, `\`\`\``, `babel.transformSync(code, { filename: 'file.ts', presets: [${formattedPresetName}] });`, `\`\`\``, `See https://babeljs.io/docs/en/options#filename for more information.`].join("\n"));
|
---|
266 | }
|
---|
267 | };
|
---|
268 | const validatePreset = (preset, context, descriptor) => {
|
---|
269 | if (!context.filename) {
|
---|
270 | var _options$overrides;
|
---|
271 | const {
|
---|
272 | options
|
---|
273 | } = preset;
|
---|
274 | validateIfOptionNeedsFilename(options, descriptor);
|
---|
275 | (_options$overrides = options.overrides) == null || _options$overrides.forEach(overrideOptions => validateIfOptionNeedsFilename(overrideOptions, descriptor));
|
---|
276 | }
|
---|
277 | };
|
---|
278 | const instantiatePreset = (0, _caching.makeWeakCacheSync)(({
|
---|
279 | value,
|
---|
280 | dirname,
|
---|
281 | alias,
|
---|
282 | externalDependencies
|
---|
283 | }) => {
|
---|
284 | return {
|
---|
285 | options: (0, _options.validate)("preset", value),
|
---|
286 | alias,
|
---|
287 | dirname,
|
---|
288 | externalDependencies
|
---|
289 | };
|
---|
290 | });
|
---|
291 | function* loadPresetDescriptor(descriptor, context) {
|
---|
292 | const preset = instantiatePreset(yield* presetDescriptorLoader(descriptor, context));
|
---|
293 | validatePreset(preset, context, descriptor);
|
---|
294 | return {
|
---|
295 | chain: yield* (0, _configChain.buildPresetChain)(preset, context),
|
---|
296 | externalDependencies: preset.externalDependencies
|
---|
297 | };
|
---|
298 | }
|
---|
299 | function chainMaybeAsync(a, b) {
|
---|
300 | if (!a) return b;
|
---|
301 | if (!b) return a;
|
---|
302 | return function (...args) {
|
---|
303 | const res = a.apply(this, args);
|
---|
304 | if (res && typeof res.then === "function") {
|
---|
305 | return res.then(() => b.apply(this, args));
|
---|
306 | }
|
---|
307 | return b.apply(this, args);
|
---|
308 | };
|
---|
309 | }
|
---|
310 | 0 && 0;
|
---|
311 |
|
---|
312 | //# sourceMappingURL=full.js.map
|
---|