diff --git a/packages/babel-generator/src/generators/typescript.js b/packages/babel-generator/src/generators/typescript.js index 68d31f3d43f3..4ff2fe1ad188 100644 --- a/packages/babel-generator/src/generators/typescript.js +++ b/packages/babel-generator/src/generators/typescript.js @@ -129,6 +129,9 @@ export function TSIndexSignature(node) { export function TSAnyKeyword() { this.word("any"); } +export function TSBigIntKeyword() { + this.word("bigint"); +} export function TSUnknownKeyword() { this.word("unknown"); } diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/regression/10338/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/regression/10338/input.ts new file mode 100644 index 000000000000..36a5d899a6e1 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/regression/10338/input.ts @@ -0,0 +1,4 @@ +const {result} = idArray.reduce( + (a, b) => {}, + {result: [] as (number | bigint)[]}, +) \ No newline at end of file diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/regression/10338/options.json b/packages/babel-plugin-transform-typescript/test/fixtures/regression/10338/options.json new file mode 100644 index 000000000000..c22d3cb0914c --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/regression/10338/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-typescript", "transform-destructuring"] +} diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/regression/10338/output.js b/packages/babel-plugin-transform-typescript/test/fixtures/regression/10338/output.js new file mode 100644 index 000000000000..20db22353cb9 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/regression/10338/output.js @@ -0,0 +1,4 @@ +const _idArray$reduce = idArray.reduce((a, b) => {}, { + result: [] +}), + result = _idArray$reduce.result; diff --git a/packages/babel-types/src/asserts/generated/index.js b/packages/babel-types/src/asserts/generated/index.js index c50116b309d5..93c911d9004f 100644 --- a/packages/babel-types/src/asserts/generated/index.js +++ b/packages/babel-types/src/asserts/generated/index.js @@ -794,8 +794,17 @@ export function assertTSIndexSignature(node: Object, opts?: Object = {}): void { export function assertTSAnyKeyword(node: Object, opts?: Object = {}): void { assert("TSAnyKeyword", node, opts); } -export function assertTSUnknownKeyword(node: Object, opts?: Object = {}): void { - assert("TSUnknownKeyword", node, opts); +export function assertTSBooleanKeyword(node: Object, opts?: Object = {}): void { + assert("TSBooleanKeyword", node, opts); +} +export function assertTSBigIntKeyword(node: Object, opts?: Object = {}): void { + assert("TSBigIntKeyword", node, opts); +} +export function assertTSNeverKeyword(node: Object, opts?: Object = {}): void { + assert("TSNeverKeyword", node, opts); +} +export function assertTSNullKeyword(node: Object, opts?: Object = {}): void { + assert("TSNullKeyword", node, opts); } export function assertTSNumberKeyword(node: Object, opts?: Object = {}): void { assert("TSNumberKeyword", node, opts); @@ -803,29 +812,23 @@ export function assertTSNumberKeyword(node: Object, opts?: Object = {}): void { export function assertTSObjectKeyword(node: Object, opts?: Object = {}): void { assert("TSObjectKeyword", node, opts); } -export function assertTSBooleanKeyword(node: Object, opts?: Object = {}): void { - assert("TSBooleanKeyword", node, opts); -} export function assertTSStringKeyword(node: Object, opts?: Object = {}): void { assert("TSStringKeyword", node, opts); } export function assertTSSymbolKeyword(node: Object, opts?: Object = {}): void { assert("TSSymbolKeyword", node, opts); } -export function assertTSVoidKeyword(node: Object, opts?: Object = {}): void { - assert("TSVoidKeyword", node, opts); -} export function assertTSUndefinedKeyword( node: Object, opts?: Object = {}, ): void { assert("TSUndefinedKeyword", node, opts); } -export function assertTSNullKeyword(node: Object, opts?: Object = {}): void { - assert("TSNullKeyword", node, opts); +export function assertTSUnknownKeyword(node: Object, opts?: Object = {}): void { + assert("TSUnknownKeyword", node, opts); } -export function assertTSNeverKeyword(node: Object, opts?: Object = {}): void { - assert("TSNeverKeyword", node, opts); +export function assertTSVoidKeyword(node: Object, opts?: Object = {}): void { + assert("TSVoidKeyword", node, opts); } export function assertTSThisType(node: Object, opts?: Object = {}): void { assert("TSThisType", node, opts); diff --git a/packages/babel-types/src/builders/generated/index.js b/packages/babel-types/src/builders/generated/index.js index e4ca375762cc..af48f24ec876 100644 --- a/packages/babel-types/src/builders/generated/index.js +++ b/packages/babel-types/src/builders/generated/index.js @@ -722,11 +722,26 @@ export function TSAnyKeyword(...args: Array): Object { } export { TSAnyKeyword as tsAnyKeyword }; export { TSAnyKeyword as tSAnyKeyword }; -export function TSUnknownKeyword(...args: Array): Object { - return builder("TSUnknownKeyword", ...args); +export function TSBooleanKeyword(...args: Array): Object { + return builder("TSBooleanKeyword", ...args); } -export { TSUnknownKeyword as tsUnknownKeyword }; -export { TSUnknownKeyword as tSUnknownKeyword }; +export { TSBooleanKeyword as tsBooleanKeyword }; +export { TSBooleanKeyword as tSBooleanKeyword }; +export function TSBigIntKeyword(...args: Array): Object { + return builder("TSBigIntKeyword", ...args); +} +export { TSBigIntKeyword as tsBigIntKeyword }; +export { TSBigIntKeyword as tSBigIntKeyword }; +export function TSNeverKeyword(...args: Array): Object { + return builder("TSNeverKeyword", ...args); +} +export { TSNeverKeyword as tsNeverKeyword }; +export { TSNeverKeyword as tSNeverKeyword }; +export function TSNullKeyword(...args: Array): Object { + return builder("TSNullKeyword", ...args); +} +export { TSNullKeyword as tsNullKeyword }; +export { TSNullKeyword as tSNullKeyword }; export function TSNumberKeyword(...args: Array): Object { return builder("TSNumberKeyword", ...args); } @@ -737,11 +752,6 @@ export function TSObjectKeyword(...args: Array): Object { } export { TSObjectKeyword as tsObjectKeyword }; export { TSObjectKeyword as tSObjectKeyword }; -export function TSBooleanKeyword(...args: Array): Object { - return builder("TSBooleanKeyword", ...args); -} -export { TSBooleanKeyword as tsBooleanKeyword }; -export { TSBooleanKeyword as tSBooleanKeyword }; export function TSStringKeyword(...args: Array): Object { return builder("TSStringKeyword", ...args); } @@ -752,26 +762,21 @@ export function TSSymbolKeyword(...args: Array): Object { } export { TSSymbolKeyword as tsSymbolKeyword }; export { TSSymbolKeyword as tSSymbolKeyword }; -export function TSVoidKeyword(...args: Array): Object { - return builder("TSVoidKeyword", ...args); -} -export { TSVoidKeyword as tsVoidKeyword }; -export { TSVoidKeyword as tSVoidKeyword }; export function TSUndefinedKeyword(...args: Array): Object { return builder("TSUndefinedKeyword", ...args); } export { TSUndefinedKeyword as tsUndefinedKeyword }; export { TSUndefinedKeyword as tSUndefinedKeyword }; -export function TSNullKeyword(...args: Array): Object { - return builder("TSNullKeyword", ...args); +export function TSUnknownKeyword(...args: Array): Object { + return builder("TSUnknownKeyword", ...args); } -export { TSNullKeyword as tsNullKeyword }; -export { TSNullKeyword as tSNullKeyword }; -export function TSNeverKeyword(...args: Array): Object { - return builder("TSNeverKeyword", ...args); +export { TSUnknownKeyword as tsUnknownKeyword }; +export { TSUnknownKeyword as tSUnknownKeyword }; +export function TSVoidKeyword(...args: Array): Object { + return builder("TSVoidKeyword", ...args); } -export { TSNeverKeyword as tsNeverKeyword }; -export { TSNeverKeyword as tSNeverKeyword }; +export { TSVoidKeyword as tsVoidKeyword }; +export { TSVoidKeyword as tSVoidKeyword }; export function TSThisType(...args: Array): Object { return builder("TSThisType", ...args); } diff --git a/packages/babel-types/src/definitions/typescript.js b/packages/babel-types/src/definitions/typescript.js index 9f0625d12320..af34dbfc6255 100644 --- a/packages/babel-types/src/definitions/typescript.js +++ b/packages/babel-types/src/definitions/typescript.js @@ -128,16 +128,17 @@ defineType("TSIndexSignature", { const tsKeywordTypes = [ "TSAnyKeyword", - "TSUnknownKeyword", + "TSBooleanKeyword", + "TSBigIntKeyword", + "TSNeverKeyword", + "TSNullKeyword", "TSNumberKeyword", "TSObjectKeyword", - "TSBooleanKeyword", "TSStringKeyword", "TSSymbolKeyword", - "TSVoidKeyword", "TSUndefinedKeyword", - "TSNullKeyword", - "TSNeverKeyword", + "TSUnknownKeyword", + "TSVoidKeyword", ]; for (const type of tsKeywordTypes) { diff --git a/packages/babel-types/src/validators/generated/index.js b/packages/babel-types/src/validators/generated/index.js index 076495d5cb28..259e37d90430 100644 --- a/packages/babel-types/src/validators/generated/index.js +++ b/packages/babel-types/src/validators/generated/index.js @@ -2523,11 +2523,11 @@ export function isTSAnyKeyword(node: ?Object, opts?: Object): boolean { return false; } -export function isTSUnknownKeyword(node: ?Object, opts?: Object): boolean { +export function isTSBooleanKeyword(node: ?Object, opts?: Object): boolean { if (!node) return false; const nodeType = node.type; - if (nodeType === "TSUnknownKeyword") { + if (nodeType === "TSBooleanKeyword") { if (typeof opts === "undefined") { return true; } else { @@ -2537,11 +2537,11 @@ export function isTSUnknownKeyword(node: ?Object, opts?: Object): boolean { return false; } -export function isTSNumberKeyword(node: ?Object, opts?: Object): boolean { +export function isTSBigIntKeyword(node: ?Object, opts?: Object): boolean { if (!node) return false; const nodeType = node.type; - if (nodeType === "TSNumberKeyword") { + if (nodeType === "TSBigIntKeyword") { if (typeof opts === "undefined") { return true; } else { @@ -2551,11 +2551,11 @@ export function isTSNumberKeyword(node: ?Object, opts?: Object): boolean { return false; } -export function isTSObjectKeyword(node: ?Object, opts?: Object): boolean { +export function isTSNeverKeyword(node: ?Object, opts?: Object): boolean { if (!node) return false; const nodeType = node.type; - if (nodeType === "TSObjectKeyword") { + if (nodeType === "TSNeverKeyword") { if (typeof opts === "undefined") { return true; } else { @@ -2565,11 +2565,11 @@ export function isTSObjectKeyword(node: ?Object, opts?: Object): boolean { return false; } -export function isTSBooleanKeyword(node: ?Object, opts?: Object): boolean { +export function isTSNullKeyword(node: ?Object, opts?: Object): boolean { if (!node) return false; const nodeType = node.type; - if (nodeType === "TSBooleanKeyword") { + if (nodeType === "TSNullKeyword") { if (typeof opts === "undefined") { return true; } else { @@ -2579,11 +2579,11 @@ export function isTSBooleanKeyword(node: ?Object, opts?: Object): boolean { return false; } -export function isTSStringKeyword(node: ?Object, opts?: Object): boolean { +export function isTSNumberKeyword(node: ?Object, opts?: Object): boolean { if (!node) return false; const nodeType = node.type; - if (nodeType === "TSStringKeyword") { + if (nodeType === "TSNumberKeyword") { if (typeof opts === "undefined") { return true; } else { @@ -2593,11 +2593,11 @@ export function isTSStringKeyword(node: ?Object, opts?: Object): boolean { return false; } -export function isTSSymbolKeyword(node: ?Object, opts?: Object): boolean { +export function isTSObjectKeyword(node: ?Object, opts?: Object): boolean { if (!node) return false; const nodeType = node.type; - if (nodeType === "TSSymbolKeyword") { + if (nodeType === "TSObjectKeyword") { if (typeof opts === "undefined") { return true; } else { @@ -2607,11 +2607,25 @@ export function isTSSymbolKeyword(node: ?Object, opts?: Object): boolean { return false; } -export function isTSVoidKeyword(node: ?Object, opts?: Object): boolean { +export function isTSStringKeyword(node: ?Object, opts?: Object): boolean { if (!node) return false; const nodeType = node.type; - if (nodeType === "TSVoidKeyword") { + if (nodeType === "TSStringKeyword") { + if (typeof opts === "undefined") { + return true; + } else { + return shallowEqual(node, opts); + } + } + + return false; +} +export function isTSSymbolKeyword(node: ?Object, opts?: Object): boolean { + if (!node) return false; + + const nodeType = node.type; + if (nodeType === "TSSymbolKeyword") { if (typeof opts === "undefined") { return true; } else { @@ -2635,11 +2649,11 @@ export function isTSUndefinedKeyword(node: ?Object, opts?: Object): boolean { return false; } -export function isTSNullKeyword(node: ?Object, opts?: Object): boolean { +export function isTSUnknownKeyword(node: ?Object, opts?: Object): boolean { if (!node) return false; const nodeType = node.type; - if (nodeType === "TSNullKeyword") { + if (nodeType === "TSUnknownKeyword") { if (typeof opts === "undefined") { return true; } else { @@ -2649,11 +2663,11 @@ export function isTSNullKeyword(node: ?Object, opts?: Object): boolean { return false; } -export function isTSNeverKeyword(node: ?Object, opts?: Object): boolean { +export function isTSVoidKeyword(node: ?Object, opts?: Object): boolean { if (!node) return false; const nodeType = node.type; - if (nodeType === "TSNeverKeyword") { + if (nodeType === "TSVoidKeyword") { if (typeof opts === "undefined") { return true; } else { @@ -4326,16 +4340,17 @@ export function isTSType(node: ?Object, opts?: Object): boolean { if ( nodeType === "TSType" || "TSAnyKeyword" === nodeType || - "TSUnknownKeyword" === nodeType || + "TSBooleanKeyword" === nodeType || + "TSBigIntKeyword" === nodeType || + "TSNeverKeyword" === nodeType || + "TSNullKeyword" === nodeType || "TSNumberKeyword" === nodeType || "TSObjectKeyword" === nodeType || - "TSBooleanKeyword" === nodeType || "TSStringKeyword" === nodeType || "TSSymbolKeyword" === nodeType || - "TSVoidKeyword" === nodeType || "TSUndefinedKeyword" === nodeType || - "TSNullKeyword" === nodeType || - "TSNeverKeyword" === nodeType || + "TSUnknownKeyword" === nodeType || + "TSVoidKeyword" === nodeType || "TSThisType" === nodeType || "TSFunctionType" === nodeType || "TSConstructorType" === nodeType ||