From a620cb9bd97ee713a0de1474f2d53571ffd2a9fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Fri, 5 Mar 2021 16:20:30 -0500 Subject: [PATCH 1/4] fix: do not throw when creating type annotation based on bigint --- .../flow/createTypeAnnotationBasedOnTypeof.ts | 5 +++++ ...TypeAnnotationBasedOnTypeof-bigint.js.snap | 7 ++++++ ...reateTypeAnnotationBasedOnTypeof-bigint.js | 22 +++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof-bigint.js.snap create mode 100644 packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof-bigint.js diff --git a/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts b/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts index 8107e5508b89..8688dc5acdcf 100644 --- a/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts +++ b/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts @@ -1,4 +1,5 @@ import { + anyTypeAnnotation, stringTypeAnnotation, numberTypeAnnotation, voidTypeAnnotation, @@ -40,6 +41,10 @@ export default function createTypeAnnotationBasedOnTypeof( return genericTypeAnnotation(identifier("Object")); } else if (type === "symbol") { return genericTypeAnnotation(identifier("Symbol")); + } else if (type === "bigint") { + // todo: use BigInt annotation when Flow supports BigInt + // https://github.com/facebook/flow/issues/6639 + return anyTypeAnnotation(); } else { throw new Error("Invalid typeof value"); } diff --git a/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof-bigint.js.snap b/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof-bigint.js.snap new file mode 100644 index 000000000000..c15b8db671e0 --- /dev/null +++ b/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof-bigint.js.snap @@ -0,0 +1,7 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`builders flow createTypeAnnotationBasedOnTypeof on bigint bigint 1`] = ` +Object { + "type": "AnyTypeAnnotation", +} +`; diff --git a/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof-bigint.js b/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof-bigint.js new file mode 100644 index 000000000000..63d583f594c2 --- /dev/null +++ b/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof-bigint.js @@ -0,0 +1,22 @@ +import { createTypeAnnotationBasedOnTypeof } from "../../.."; + +describe("builders", function () { + describe("flow", function () { + (parseFloat(process.versions.node) >= 12 ? describe : describe.skip)( + "createTypeAnnotationBasedOnTypeof on bigint", + function () { + const values = { + bigint: typeof 0n, + }; + + for (const name in values) { + const value = values[name]; + it(name, function () { + const result = createTypeAnnotationBasedOnTypeof(value); + expect(result).toMatchSnapshot(); + }); + } + }, + ); + }); +}); From c7c8547f7fb0a8b1f2df68722c3fcde2b5aa3543 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Fri, 5 Mar 2021 16:35:09 -0500 Subject: [PATCH 2/4] fix flow error --- .../src/builders/flow/createTypeAnnotationBasedOnTypeof.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts b/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts index 8688dc5acdcf..86e04dde31e6 100644 --- a/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts +++ b/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts @@ -26,7 +26,8 @@ export default function createTypeAnnotationBasedOnTypeof( | t.VoidTypeAnnotation | t.NumberTypeAnnotation | t.BooleanTypeAnnotation - | t.GenericTypeAnnotation { + | t.GenericTypeAnnotation + | t.AnyTypeAnnotation { if (type === "string") { return stringTypeAnnotation(); } else if (type === "number") { From e133cdcc37237ec1f1720d12990c67ae3ba5d691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Fri, 5 Mar 2021 16:58:55 -0500 Subject: [PATCH 3/4] make Node 8 happy --- ...TypeAnnotationBasedOnTypeof-bigint.js.snap | 7 ------ .../createTypeAnnotationBasedOnTypeof.js.snap | 6 +++++ ...reateTypeAnnotationBasedOnTypeof-bigint.js | 22 ------------------- .../flow/createTypeAnnotationBasedOnTypeof.js | 7 ++++++ 4 files changed, 13 insertions(+), 29 deletions(-) delete mode 100644 packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof-bigint.js.snap delete mode 100644 packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof-bigint.js diff --git a/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof-bigint.js.snap b/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof-bigint.js.snap deleted file mode 100644 index c15b8db671e0..000000000000 --- a/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof-bigint.js.snap +++ /dev/null @@ -1,7 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`builders flow createTypeAnnotationBasedOnTypeof on bigint bigint 1`] = ` -Object { - "type": "AnyTypeAnnotation", -} -`; diff --git a/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof.js.snap b/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof.js.snap index ee98fe3b5eeb..6f4ca7d0dcca 100644 --- a/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof.js.snap +++ b/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof.js.snap @@ -1,5 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`builders flow createTypeAnnotationBasedOnTypeof bigint 1`] = ` +Object { + "type": "AnyTypeAnnotation", +} +`; + exports[`builders flow createTypeAnnotationBasedOnTypeof function 1`] = ` Object { "id": Object { diff --git a/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof-bigint.js b/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof-bigint.js deleted file mode 100644 index 63d583f594c2..000000000000 --- a/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof-bigint.js +++ /dev/null @@ -1,22 +0,0 @@ -import { createTypeAnnotationBasedOnTypeof } from "../../.."; - -describe("builders", function () { - describe("flow", function () { - (parseFloat(process.versions.node) >= 12 ? describe : describe.skip)( - "createTypeAnnotationBasedOnTypeof on bigint", - function () { - const values = { - bigint: typeof 0n, - }; - - for (const name in values) { - const value = values[name]; - it(name, function () { - const result = createTypeAnnotationBasedOnTypeof(value); - expect(result).toMatchSnapshot(); - }); - } - }, - ); - }); -}); diff --git a/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof.js b/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof.js index d686e5c4984b..dfe6efb42c23 100644 --- a/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof.js +++ b/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof.js @@ -11,6 +11,13 @@ describe("builders", function () { undefined: typeof undefined, function: typeof function () {}, symbol: typeof Symbol(), + bigint: (() => { + try { + return eval("typeof 0n"); + } catch (e) { + return "bigint"; + } + })(), }; for (const name in values) { From 5eee3af2868714f231b040d0a0ee6a7d0ef600f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Thu, 18 Mar 2021 10:16:08 -0400 Subject: [PATCH 4/4] polish: print type in error messages --- .../src/builders/flow/createTypeAnnotationBasedOnTypeof.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts b/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts index 86e04dde31e6..d0ae215cd1c5 100644 --- a/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts +++ b/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts @@ -47,6 +47,6 @@ export default function createTypeAnnotationBasedOnTypeof( // https://github.com/facebook/flow/issues/6639 return anyTypeAnnotation(); } else { - throw new Error("Invalid typeof value"); + throw new Error("Invalid typeof value: " + type); } }