refactor: use option-validator in preset-typescript (#12347)

This commit is contained in:
Huáng Jùnliàng 2020-11-20 09:11:20 -05:00 committed by GitHub
parent ab5a90ce47
commit 2e3eec6646
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 58 additions and 64 deletions

View File

@ -29,12 +29,6 @@ export default declare((api, opts) => {
const development = !!opts.development; const development = !!opts.development;
const useBuiltIns = !!opts.useBuiltIns; const useBuiltIns = !!opts.useBuiltIns;
if (typeof development !== "boolean") {
throw new Error(
"@babel/preset-react 'development' option must be a boolean.",
);
}
const transformReactJSXPlugin = const transformReactJSXPlugin =
runtime === "automatic" && development runtime === "automatic" && development
? transformReactJSXDevelopment ? transformReactJSXDevelopment

View File

@ -18,6 +18,7 @@
], ],
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "workspace:^7.10.4", "@babel/helper-plugin-utils": "workspace:^7.10.4",
"@babel/helper-validator-option": "workspace:^7.12.1",
"@babel/plugin-transform-typescript": "workspace:^7.12.1" "@babel/plugin-transform-typescript": "workspace:^7.12.1"
}, },
"peerDependencies": { "peerDependencies": {

View File

@ -1,67 +1,65 @@
import { declare } from "@babel/helper-plugin-utils"; import { declare } from "@babel/helper-plugin-utils";
import transformTypeScript from "@babel/plugin-transform-typescript"; import transformTypeScript from "@babel/plugin-transform-typescript";
import { OptionValidator } from "@babel/helper-validator-option";
const v = new OptionValidator("@babel/preset-typescript");
export default declare( export default declare((api, opts) => {
( api.assertVersion(7);
api,
{
allExtensions = false,
allowDeclareFields,
allowNamespaces,
jsxPragma,
jsxPragmaFrag = "React.Fragment",
isTSX = false,
onlyRemoveTypeImports,
},
) => {
api.assertVersion(7);
if (typeof jsxPragmaFrag !== "string") { const {
throw new Error(".jsxPragmaFrag must be a string, or undefined"); allowDeclareFields,
} allowNamespaces,
jsxPragma,
onlyRemoveTypeImports,
} = opts;
if (typeof allExtensions !== "boolean") { const jsxPragmaFrag = v.validateStringOption(
throw new Error(".allExtensions must be a boolean, or undefined"); "jsxPragmaFrag",
} opts.jsxPragmaFrag,
"React.Fragment",
);
if (typeof isTSX !== "boolean") { const allExtensions = v.validateBooleanOption(
throw new Error(".isTSX must be a boolean, or undefined"); "allExtensions",
} opts.allExtensions,
false,
);
if (isTSX && !allExtensions) { const isTSX = v.validateBooleanOption("isTSX", opts.isTSX, false);
throw new Error("isTSX:true requires allExtensions:true");
}
const pluginOptions = isTSX => ({ if (isTSX) {
allowDeclareFields, v.invariant(allExtensions, "isTSX:true requires allExtensions:true");
allowNamespaces, }
isTSX,
jsxPragma,
jsxPragmaFrag,
onlyRemoveTypeImports,
});
return { const pluginOptions = isTSX => ({
overrides: allExtensions allowDeclareFields,
? [ allowNamespaces,
{ isTSX,
plugins: [[transformTypeScript, pluginOptions(isTSX)]], jsxPragma,
}, jsxPragmaFrag,
] onlyRemoveTypeImports,
: [ });
{
// Only set 'test' if explicitly requested, since it requires that return {
// Babel is being called` overrides: allExtensions
test: /\.ts$/, ? [
plugins: [[transformTypeScript, pluginOptions(false)]], {
}, plugins: [[transformTypeScript, pluginOptions(isTSX)]],
{ },
// Only set 'test' if explicitly requested, since it requires that ]
// Babel is being called` : [
test: /\.tsx$/, {
plugins: [[transformTypeScript, pluginOptions(true)]], // 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)]],
},
],
};
});

View File

@ -3134,6 +3134,7 @@ __metadata:
"@babel/core": "workspace:*" "@babel/core": "workspace:*"
"@babel/helper-plugin-test-runner": "workspace:*" "@babel/helper-plugin-test-runner": "workspace:*"
"@babel/helper-plugin-utils": "workspace:^7.10.4" "@babel/helper-plugin-utils": "workspace:^7.10.4"
"@babel/helper-validator-option": "workspace:^7.12.1"
"@babel/plugin-transform-typescript": "workspace:^7.12.1" "@babel/plugin-transform-typescript": "workspace:^7.12.1"
peerDependencies: peerDependencies:
"@babel/core": ^7.0.0-0 "@babel/core": ^7.0.0-0