diff --git a/lib/babel-packages.js.flow b/lib/babel-packages.js.flow index 100ba525af..d6d45648e6 100644 --- a/lib/babel-packages.js.flow +++ b/lib/babel-packages.js.flow @@ -116,3 +116,20 @@ declare module "@babel/code-frame" { opts?: Options ): string; } + +declare module "@babel/helper-validator-identifier" { + declare function isReservedWord(word: string, inModule: boolean): boolean; + declare function isStrictReservedWord( + word: string, + inModule: boolean + ): boolean; + declare function isStrictBindOnlyReservedWord(word: string): boolean; + declare function isStrictBindReservedWord( + word: string, + inModule: boolean + ): boolean; + declare function isKeyword(word: string): boolean; + declare function isIdentifierStart(code: number): boolean; + declare function isIdentifierChar(code: number): boolean; + declare function isIdentifierName(name: string): boolean; +} diff --git a/packages/babel-helper-validator-identifier/src/identifier.js b/packages/babel-helper-validator-identifier/src/identifier.ts similarity index 99% rename from packages/babel-helper-validator-identifier/src/identifier.js rename to packages/babel-helper-validator-identifier/src/identifier.ts index 5088281bbf..0a25c7a9ab 100644 --- a/packages/babel-helper-validator-identifier/src/identifier.js +++ b/packages/babel-helper-validator-identifier/src/identifier.ts @@ -1,5 +1,3 @@ -// @flow - import * as charCodes from "charcodes"; // ## Character categories @@ -38,7 +36,7 @@ const astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,1 // This has a complexity linear to the value of the code. The // assumption is that looking up astral identifier characters is // rare. -function isInAstralSet(code: number, set: $ReadOnlyArray): boolean { +function isInAstralSet(code: number, set: readonly number[]): boolean { let pos = 0x10000; for (let i = 0, length = set.length; i < length; i += 2) { pos += set[i]; diff --git a/packages/babel-helper-validator-identifier/src/index.js b/packages/babel-helper-validator-identifier/src/index.ts similarity index 100% rename from packages/babel-helper-validator-identifier/src/index.js rename to packages/babel-helper-validator-identifier/src/index.ts diff --git a/packages/babel-helper-validator-identifier/src/keyword.js b/packages/babel-helper-validator-identifier/src/keyword.ts similarity index 99% rename from packages/babel-helper-validator-identifier/src/keyword.js rename to packages/babel-helper-validator-identifier/src/keyword.ts index d062275cc0..55f7b70344 100644 --- a/packages/babel-helper-validator-identifier/src/keyword.js +++ b/packages/babel-helper-validator-identifier/src/keyword.ts @@ -1,5 +1,3 @@ -// @flow - const reservedWords = { keyword: [ "break", diff --git a/packages/babel-types/src/definitions/core.ts b/packages/babel-types/src/definitions/core.ts index 572fa6d711..ace2ae9f9f 100644 --- a/packages/babel-types/src/definitions/core.ts +++ b/packages/babel-types/src/definitions/core.ts @@ -522,7 +522,7 @@ defineType("Identifier", { // Ideally we should call isStrictReservedWord if this node is a descendant // of a block in strict mode. Also, we should pass the inModule option so // we can disable "await" in module. - (isKeyword(node.name) || isReservedWord(node.name)) && + (isKeyword(node.name) || isReservedWord(node.name, false)) && // Even if "this" is a keyword, we are using the Identifier // node to represent it. node.name !== "this" diff --git a/packages/babel-types/src/validators/isValidIdentifier.ts b/packages/babel-types/src/validators/isValidIdentifier.ts index 1fd56898d5..46d9fe0456 100644 --- a/packages/babel-types/src/validators/isValidIdentifier.ts +++ b/packages/babel-types/src/validators/isValidIdentifier.ts @@ -15,10 +15,8 @@ export default function isValidIdentifier( if (typeof name !== "string") return false; if (reserved) { - if (isKeyword(name) || isStrictReservedWord(name)) { - return false; - } else if (name === "await") { - // invalid in module, valid in script; better be safe (see #4952) + // "await" is invalid in module, valid in script; better be safe (see #4952) + if (isKeyword(name) || isStrictReservedWord(name, true)) { return false; } }