diff --git a/packages/babel-preset-react/src/index.js b/packages/babel-preset-react/src/index.js index c57cc52ff580..b4e43f2b7a66 100644 --- a/packages/babel-preset-react/src/index.js +++ b/packages/babel-preset-react/src/index.js @@ -29,12 +29,6 @@ export default declare((api, opts) => { const development = !!opts.development; const useBuiltIns = !!opts.useBuiltIns; - if (typeof development !== "boolean") { - throw new Error( - "@babel/preset-react 'development' option must be a boolean.", - ); - } - const transformReactJSXPlugin = runtime === "automatic" && development ? transformReactJSXDevelopment diff --git a/packages/babel-preset-typescript/package.json b/packages/babel-preset-typescript/package.json index 0f793444e428..d79238ef581f 100644 --- a/packages/babel-preset-typescript/package.json +++ b/packages/babel-preset-typescript/package.json @@ -18,6 +18,7 @@ ], "dependencies": { "@babel/helper-plugin-utils": "workspace:^7.10.4", + "@babel/helper-validator-option": "workspace:^7.12.1", "@babel/plugin-transform-typescript": "workspace:^7.12.1" }, "peerDependencies": { diff --git a/packages/babel-preset-typescript/src/index.js b/packages/babel-preset-typescript/src/index.js index a6376d79dc11..36e20e63acb6 100644 --- a/packages/babel-preset-typescript/src/index.js +++ b/packages/babel-preset-typescript/src/index.js @@ -1,67 +1,65 @@ import { declare } from "@babel/helper-plugin-utils"; import transformTypeScript from "@babel/plugin-transform-typescript"; +import { OptionValidator } from "@babel/helper-validator-option"; +const v = new OptionValidator("@babel/preset-typescript"); -export default declare( - ( - api, - { - allExtensions = false, - allowDeclareFields, - allowNamespaces, - jsxPragma, - jsxPragmaFrag = "React.Fragment", - isTSX = false, - onlyRemoveTypeImports, - }, - ) => { - api.assertVersion(7); +export default declare((api, opts) => { + api.assertVersion(7); - if (typeof jsxPragmaFrag !== "string") { - throw new Error(".jsxPragmaFrag must be a string, or undefined"); - } + const { + allowDeclareFields, + allowNamespaces, + jsxPragma, + onlyRemoveTypeImports, + } = opts; - if (typeof allExtensions !== "boolean") { - throw new Error(".allExtensions must be a boolean, or undefined"); - } + const jsxPragmaFrag = v.validateStringOption( + "jsxPragmaFrag", + opts.jsxPragmaFrag, + "React.Fragment", + ); - if (typeof isTSX !== "boolean") { - throw new Error(".isTSX must be a boolean, or undefined"); - } + const allExtensions = v.validateBooleanOption( + "allExtensions", + opts.allExtensions, + false, + ); - if (isTSX && !allExtensions) { - throw new Error("isTSX:true requires allExtensions:true"); - } + const isTSX = v.validateBooleanOption("isTSX", opts.isTSX, false); - const pluginOptions = isTSX => ({ - allowDeclareFields, - allowNamespaces, - isTSX, - jsxPragma, - jsxPragmaFrag, - onlyRemoveTypeImports, - }); + if (isTSX) { + v.invariant(allExtensions, "isTSX:true requires allExtensions:true"); + } - return { - overrides: allExtensions - ? [ - { - plugins: [[transformTypeScript, pluginOptions(isTSX)]], - }, - ] - : [ - { - // Only set 'test' if explicitly requested, since it requires that - // Babel is being called` - test: /\.ts$/, - plugins: [[transformTypeScript, pluginOptions(false)]], - }, - { - // Only set 'test' if explicitly requested, since it requires that - // Babel is being called` - test: /\.tsx$/, - plugins: [[transformTypeScript, pluginOptions(true)]], - }, - ], - }; - }, -); + const pluginOptions = isTSX => ({ + allowDeclareFields, + allowNamespaces, + isTSX, + jsxPragma, + jsxPragmaFrag, + onlyRemoveTypeImports, + }); + + return { + overrides: allExtensions + ? [ + { + plugins: [[transformTypeScript, pluginOptions(isTSX)]], + }, + ] + : [ + { + // Only set 'test' if explicitly requested, since it requires that + // Babel is being called` + test: /\.ts$/, + plugins: [[transformTypeScript, pluginOptions(false)]], + }, + { + // Only set 'test' if explicitly requested, since it requires that + // Babel is being called` + test: /\.tsx$/, + plugins: [[transformTypeScript, pluginOptions(true)]], + }, + ], + }; +}); diff --git a/yarn.lock b/yarn.lock index cbe4498804fc..13b2eb7ab438 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3134,6 +3134,7 @@ __metadata: "@babel/core": "workspace:*" "@babel/helper-plugin-test-runner": "workspace:*" "@babel/helper-plugin-utils": "workspace:^7.10.4" + "@babel/helper-validator-option": "workspace:^7.12.1" "@babel/plugin-transform-typescript": "workspace:^7.12.1" peerDependencies: "@babel/core": ^7.0.0-0