From a11c7b27b8b7e70c6cce30ad9965578cf17ad848 Mon Sep 17 00:00:00 2001 From: oceandrama Date: Tue, 13 Sep 2022 01:03:16 +0300 Subject: [PATCH] fix: expose dts option to @babel/plugin-syntax-typescript --- .../src/index.ts | 67 ++++++++++--------- .../test/fixtures/dts/enabled/input.ts | 1 + .../test/fixtures/dts/enabled/options.json | 3 + .../test/fixtures/dts/enabled/output.js | 1 + 4 files changed, 40 insertions(+), 32 deletions(-) create mode 100644 packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/input.ts create mode 100644 packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/options.json create mode 100644 packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/output.js diff --git a/packages/babel-plugin-syntax-typescript/src/index.ts b/packages/babel-plugin-syntax-typescript/src/index.ts index 01fb877d5a88..5c8cc6765ecd 100644 --- a/packages/babel-plugin-syntax-typescript/src/index.ts +++ b/packages/babel-plugin-syntax-typescript/src/index.ts @@ -18,38 +18,41 @@ function removePlugin(plugins: ParserPlugin[], name: string) { export interface Options { disallowAmbiguousJSXLike?: boolean; + dts?: boolean; isTSX?: boolean; } -export default declare((api, { isTSX, disallowAmbiguousJSXLike }: Options) => { - api.assertVersion(7); - - return { - name: "syntax-typescript", - - manipulateOptions(opts, parserOpts) { - const { plugins } = parserOpts; - // If the Flow syntax plugin already ran, remove it since Typescript - // takes priority. - removePlugin(plugins, "flow"); - - // If the JSX syntax plugin already ran, remove it because JSX handling - // in TS depends on the extensions, and is purely dependent on 'isTSX'. - removePlugin(plugins, "jsx"); - - plugins.push( - ["typescript", { disallowAmbiguousJSXLike }], - "classProperties", - ); - - if (!process.env.BABEL_8_BREAKING) { - // This is enabled by default since @babel/parser 7.1.5 - plugins.push("objectRestSpread"); - } - - if (isTSX) { - plugins.push("jsx"); - } - }, - }; -}); +export default declare( + (api, { disallowAmbiguousJSXLike, dts, isTSX }: Options) => { + api.assertVersion(7); + + return { + name: "syntax-typescript", + + manipulateOptions(opts, parserOpts) { + const { plugins } = parserOpts; + // If the Flow syntax plugin already ran, remove it since Typescript + // takes priority. + removePlugin(plugins, "flow"); + + // If the JSX syntax plugin already ran, remove it because JSX handling + // in TS depends on the extensions, and is purely dependent on 'isTSX'. + removePlugin(plugins, "jsx"); + + plugins.push( + ["typescript", { disallowAmbiguousJSXLike, dts }], + "classProperties", + ); + + if (!process.env.BABEL_8_BREAKING) { + // This is enabled by default since @babel/parser 7.1.5 + plugins.push("objectRestSpread"); + } + + if (isTSX) { + plugins.push("jsx"); + } + }, + }; + }, +); diff --git a/packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/input.ts b/packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/input.ts new file mode 100644 index 000000000000..a11304376001 --- /dev/null +++ b/packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/input.ts @@ -0,0 +1 @@ +const foo: string; \ No newline at end of file diff --git a/packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/options.json b/packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/options.json new file mode 100644 index 000000000000..dc21f7f5c669 --- /dev/null +++ b/packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/options.json @@ -0,0 +1,3 @@ +{ + "plugins": [["syntax-typescript", { "dts": true }]] +} diff --git a/packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/output.js b/packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/output.js new file mode 100644 index 000000000000..6821c110cef6 --- /dev/null +++ b/packages/babel-plugin-syntax-typescript/test/fixtures/dts/enabled/output.js @@ -0,0 +1 @@ +const foo: string;