From 72b678722bfdb96134f8db69c9cc739d037ebdad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Mon, 17 May 2021 00:17:56 +0200 Subject: [PATCH 1/3] Pass assumptions set in presets to plugins --- packages/babel-core/package.json | 1 + packages/babel-core/src/config/full.ts | 12 ++++--- packages/babel-core/test/assumptions.js | 42 +++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/packages/babel-core/package.json b/packages/babel-core/package.json index 1835fde831c8..c40b4250a4f9 100644 --- a/packages/babel-core/package.json +++ b/packages/babel-core/package.json @@ -66,6 +66,7 @@ }, "devDependencies": { "@babel/helper-transform-fixture-test-runner": "workspace:*", + "@babel/plugin-transform-modules-commonjs": "workspace:*", "@types/convert-source-map": "^1.5.1", "@types/debug": "^4.1.0", "@types/resolve": "^1.3.2", diff --git a/packages/babel-core/src/config/full.ts b/packages/babel-core/src/config/full.ts index dca5527492eb..0e8a333918be 100644 --- a/packages/babel-core/src/config/full.ts +++ b/packages/babel-core/src/config/full.ts @@ -68,10 +68,9 @@ export default gensync<(inputOpts: unknown) => ResolvedConfig | null>( throw new Error("Assertion failure - plugins and presets exist"); } - const pluginContext: Context.FullPlugin = { + const presetContext: Context.FullPreset = { ...context, targets: options.targets, - assumptions: options.assumptions ?? {}, }; const toDescriptor = (item: PluginItem) => { @@ -110,7 +109,7 @@ export default gensync<(inputOpts: unknown) => ResolvedConfig | null>( presets.push({ preset: yield* loadPresetDescriptor( descriptor, - pluginContext, + presetContext, ), pass: [], }); @@ -118,7 +117,7 @@ export default gensync<(inputOpts: unknown) => ResolvedConfig | null>( presets.unshift({ preset: yield* loadPresetDescriptor( descriptor, - pluginContext, + presetContext, ), pass: pluginDescriptorsPass, }); @@ -168,6 +167,11 @@ export default gensync<(inputOpts: unknown) => ResolvedConfig | null>( const opts: any = optionDefaults; mergeOptions(opts, options); + const pluginContext: Context.FullPlugin = { + ...presetContext, + assumptions: opts.assumptions ?? {}, + }; + yield* enhanceError(context, function* loadPluginDescriptors() { pluginDescriptorsByPass[0].unshift(...initialPluginsDescriptors); diff --git a/packages/babel-core/test/assumptions.js b/packages/babel-core/test/assumptions.js index bf97c3bbb6af..04b5d2196a15 100644 --- a/packages/babel-core/test/assumptions.js +++ b/packages/babel-core/test/assumptions.js @@ -1,6 +1,7 @@ import path from "path"; import { fileURLToPath } from "url"; import { loadOptions as loadOptionsOrig, transformSync } from "../lib"; +import pluginCommonJS from "@babel/plugin-transform-modules-commonjs"; const cwd = path.dirname(fileURLToPath(import.meta.url)); @@ -101,6 +102,47 @@ describe("assumptions", () => { expect(assumptionFn).toBeUndefined(); }); + // https://github.com/babel/babel/issues/13316 + describe("assumptions set in presets are visible from plugins - #13316", () => { + function presetEnumerableModuleMeta() { + return { assumptions: { enumerableModuleMeta: true } }; + } + + it("unit", () => { + let enumerableModuleMeta; + + loadOptions({ + configFile: false, + presets: [presetEnumerableModuleMeta], + plugins: [ + function extractEnumerableModuleMeta(api) { + enumerableModuleMeta = api.assumption("enumerableModuleMeta"); + return { visitor: {} }; + }, + ], + }); + + expect(enumerableModuleMeta).toBe(true); + }); + + it("integration", () => { + const { code } = transformSync(`export const foo = 1;`, { + configFile: false, + presets: [presetEnumerableModuleMeta], + plugins: [pluginCommonJS], + }); + + expect(code).toMatchInlineSnapshot(` + "\\"use strict\\"; + + exports.__esModule = true; + exports.foo = void 0; + const foo = 1; + exports.foo = foo;" + `); + }); + }); + describe("plugin cache", () => { const makePlugin = () => jest.fn(api => { From 499537dec9a873e06dfeae575742459f3a7e2b2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Mon, 17 May 2021 00:27:30 +0200 Subject: [PATCH 2/3] `yarn` --- yarn.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn.lock b/yarn.lock index 40f332e893aa..a5d25ff8f229 100644 --- a/yarn.lock +++ b/yarn.lock @@ -214,6 +214,7 @@ __metadata: "@babel/helper-transform-fixture-test-runner": "workspace:*" "@babel/helpers": "workspace:^7.14.0" "@babel/parser": "workspace:^7.14.2" + "@babel/plugin-transform-modules-commonjs": "workspace:*" "@babel/template": "workspace:^7.12.13" "@babel/traverse": "workspace:^7.14.2" "@babel/types": "workspace:^7.14.2" From f1ab26ecb32189ba4c6e2ecb3cb0be2acad14f1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Mon, 17 May 2021 21:33:21 +0200 Subject: [PATCH 3/3] Test for plugin inside preset --- packages/babel-core/test/assumptions.js | 32 ++++++++++++++++++------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/packages/babel-core/test/assumptions.js b/packages/babel-core/test/assumptions.js index 04b5d2196a15..64b0e7663648 100644 --- a/packages/babel-core/test/assumptions.js +++ b/packages/babel-core/test/assumptions.js @@ -108,21 +108,37 @@ describe("assumptions", () => { return { assumptions: { enumerableModuleMeta: true } }; } - it("unit", () => { - let enumerableModuleMeta; + function pluginExtractEnumerableModuleMeta(api, options) { + options.enumerableModuleMeta = api.assumption("enumerableModuleMeta"); + return { visitor: {} }; + } + + it("plugin defined outside preset", () => { + const ref = {}; loadOptions({ configFile: false, presets: [presetEnumerableModuleMeta], - plugins: [ - function extractEnumerableModuleMeta(api) { - enumerableModuleMeta = api.assumption("enumerableModuleMeta"); - return { visitor: {} }; - }, + plugins: [[pluginExtractEnumerableModuleMeta, ref]], + }); + + expect(ref.enumerableModuleMeta).toBe(true); + }); + + it("plugin defined inside preset", () => { + const ref = {}; + + loadOptions({ + configFile: false, + presets: [ + () => ({ + assumptions: { enumerableModuleMeta: true }, + plugins: [[pluginExtractEnumerableModuleMeta, ref]], + }), ], }); - expect(enumerableModuleMeta).toBe(true); + expect(ref.enumerableModuleMeta).toBe(true); }); it("integration", () => {