From efa9a1abf2d8e7dd62b975df3779c4248a25f995 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Wed, 18 Nov 2015 22:37:04 -0500 Subject: [PATCH 1/3] add more validation for jsx nodes --- packages/babel-types/src/definitions/jsx.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/babel-types/src/definitions/jsx.js b/packages/babel-types/src/definitions/jsx.js index c11d2fdc17..3132b039a6 100644 --- a/packages/babel-types/src/definitions/jsx.js +++ b/packages/babel-types/src/definitions/jsx.js @@ -7,7 +7,7 @@ defineType("JSXAttribute", { aliases: ["JSX", "Immutable"], fields: { name: { - validate: assertNodeType("JSXIdentifier", "JSXMemberExpression") + validate: assertNodeType("JSXIdentifier", "JSXNamespacedName") }, value: { optional: true, @@ -39,7 +39,10 @@ defineType("JSXElement", { validate: assertNodeType("JSXClosingElement") }, children: { - // todo + validate: chain( + assertValueType("array"), + assertEach(assertNodeType("Literal", "JSXExpressionContainer", "JSXElement")) + ) } } }); @@ -73,7 +76,7 @@ defineType("JSXMemberExpression", { aliases: ["JSX", "Expression"], fields: { object: { - validate: assertNodeType("JSXIdentifier") + validate: assertNodeType("JSXMemberExpression", "JSXIdentifier") }, property: { validate: assertNodeType("JSXIdentifier") From 3a05513e31554edf3b0e7eee910fea1bc8d32008 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Sat, 21 Nov 2015 22:25:21 -0500 Subject: [PATCH 2/3] literal to stringLiteral - fixes T6667 --- packages/babel-types/src/converters.js | 2 +- packages/babel-types/src/definitions/core.js | 4 ++-- packages/babel-types/src/definitions/es2015.js | 2 +- packages/babel-types/src/definitions/jsx.js | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/babel-types/src/converters.js b/packages/babel-types/src/converters.js index f156c6d32b..8716a10a3f 100644 --- a/packages/babel-types/src/converters.js +++ b/packages/babel-types/src/converters.js @@ -288,7 +288,7 @@ export function valueToNode(value: any): Object { if (t.isValidIdentifier(key)) { nodeKey = t.identifier(key); } else { - nodeKey = t.literal(key); + nodeKey = t.stringLiteral(key); } props.push(t.objectProperty(nodeKey, t.valueToNode(value[key]))); } diff --git a/packages/babel-types/src/definitions/core.js b/packages/babel-types/src/definitions/core.js index 12ede7e4d0..bc570cc5f8 100644 --- a/packages/babel-types/src/definitions/core.js +++ b/packages/babel-types/src/definitions/core.js @@ -478,7 +478,7 @@ defineType("ObjectMethod", { }, key: { validate(node, key, val) { - let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "Literal"]; + let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral"]; assertNodeType(...expectedTypes)(node, key, val); } }, @@ -510,7 +510,7 @@ defineType("ObjectProperty", { }, key: { validate(node, key, val) { - let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "Literal"]; + let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral"]; assertNodeType(...expectedTypes)(node, key, val); } }, diff --git a/packages/babel-types/src/definitions/es2015.js b/packages/babel-types/src/definitions/es2015.js index ee726ab95a..1ad09e8fa9 100644 --- a/packages/babel-types/src/definitions/es2015.js +++ b/packages/babel-types/src/definitions/es2015.js @@ -254,7 +254,7 @@ defineType("ClassMethod", { }, key: { validate(node, key, val) { - let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "Literal"]; + let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral"]; assertNodeType(...expectedTypes)(node, key, val); } }, diff --git a/packages/babel-types/src/definitions/jsx.js b/packages/babel-types/src/definitions/jsx.js index 3132b039a6..7da4f26ba2 100644 --- a/packages/babel-types/src/definitions/jsx.js +++ b/packages/babel-types/src/definitions/jsx.js @@ -41,7 +41,7 @@ defineType("JSXElement", { children: { validate: chain( assertValueType("array"), - assertEach(assertNodeType("Literal", "JSXExpressionContainer", "JSXElement")) + assertEach(assertNodeType("StringLiteral", "JSXExpressionContainer", "JSXElement")) ) } } From f56af90c20b2e556e8bc320a65f392569d4e7f83 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Sat, 21 Nov 2015 22:50:21 -0500 Subject: [PATCH 3/3] add numericliteral --- packages/babel-types/src/definitions/core.js | 4 ++-- packages/babel-types/src/definitions/es2015.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/babel-types/src/definitions/core.js b/packages/babel-types/src/definitions/core.js index bc570cc5f8..825565b588 100644 --- a/packages/babel-types/src/definitions/core.js +++ b/packages/babel-types/src/definitions/core.js @@ -478,7 +478,7 @@ defineType("ObjectMethod", { }, key: { validate(node, key, val) { - let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral"]; + let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral", "NumericLiteral"]; assertNodeType(...expectedTypes)(node, key, val); } }, @@ -510,7 +510,7 @@ defineType("ObjectProperty", { }, key: { validate(node, key, val) { - let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral"]; + let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral", "NumericLiteral"]; assertNodeType(...expectedTypes)(node, key, val); } }, diff --git a/packages/babel-types/src/definitions/es2015.js b/packages/babel-types/src/definitions/es2015.js index 1ad09e8fa9..e699ba3d18 100644 --- a/packages/babel-types/src/definitions/es2015.js +++ b/packages/babel-types/src/definitions/es2015.js @@ -254,7 +254,7 @@ defineType("ClassMethod", { }, key: { validate(node, key, val) { - let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral"]; + let expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral", "NumericLiteral"]; assertNodeType(...expectedTypes)(node, key, val); } },