From c7d8b8a37752f42163128cf4d5e8b54c2637cec4 Mon Sep 17 00:00:00 2001 From: Martin Forsgren Date: Sat, 2 Nov 2019 12:04:16 +0100 Subject: [PATCH] throw a TypeError if identifier validation fails (#10621) * throw a TypeError if Identifier validation fails * Relax identifier validation, reserved words are ok --- packages/babel-types/src/definitions/core.js | 6 +++--- packages/babel-types/src/index.js | 1 + packages/babel-types/src/validators/isIdentifierName.js | 9 +++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 packages/babel-types/src/validators/isIdentifierName.js diff --git a/packages/babel-types/src/definitions/core.js b/packages/babel-types/src/definitions/core.js index 09c41c9119a9..2b7802096cd9 100644 --- a/packages/babel-types/src/definitions/core.js +++ b/packages/babel-types/src/definitions/core.js @@ -1,5 +1,5 @@ // @flow -import isValidIdentifier from "../validators/isValidIdentifier"; +import isIdentifierName from "../validators/isIdentifierName"; import { BINARY_OPERATORS, @@ -406,8 +406,8 @@ defineType("Identifier", { ...patternLikeCommon, name: { validate: chain(function(node, key, val) { - if (!isValidIdentifier(val)) { - // throw new TypeError(`"${val}" is not a valid identifer name`); + if (!isIdentifierName(val)) { + throw new TypeError(`"${val}" is not a valid identifer name`); } }, assertValueType("string")), }, diff --git a/packages/babel-types/src/index.js b/packages/babel-types/src/index.js index d3311dfc9f2f..a34588c85c06 100644 --- a/packages/babel-types/src/index.js +++ b/packages/babel-types/src/index.js @@ -109,6 +109,7 @@ export { default as isValidES3Identifier, } from "./validators/isValidES3Identifier"; export { default as isValidIdentifier } from "./validators/isValidIdentifier"; +export { default as isIdentifierName } from "./validators/isIdentifierName"; export { default as isVar } from "./validators/isVar"; export { default as matchesPattern } from "./validators/matchesPattern"; export { default as validate } from "./validators/validate"; diff --git a/packages/babel-types/src/validators/isIdentifierName.js b/packages/babel-types/src/validators/isIdentifierName.js new file mode 100644 index 000000000000..9cae809217cf --- /dev/null +++ b/packages/babel-types/src/validators/isIdentifierName.js @@ -0,0 +1,9 @@ +// @flow +import esutils from "esutils"; + +/** + * Check if the input `name` is a valid identifier name. + */ +export default function isIdentifierName(name: string): boolean { + return esutils.keyword.isIdentifierNameES6(name); +}