diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/output.js index 0268eef274..5e502c2384 100644 --- a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/output.js +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/output.js @@ -22,10 +22,8 @@ function () { key: "invite", value: function invite() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - return function () { - var privacy = options.privacy || "Private"; - console.log(this); - }.apply(this); + var privacy = options.privacy || "Private"; + console.log(this); } }]); diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-id/input.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-id/input.mjs new file mode 100644 index 0000000000..f46a82c360 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-id/input.mjs @@ -0,0 +1,2 @@ +import { A } from 'lib' +enum Enum { A }; \ No newline at end of file diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-id/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-id/output.mjs new file mode 100644 index 0000000000..628c6ba0ff --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-id/output.mjs @@ -0,0 +1,7 @@ +var Enum; + +(function (Enum) { + Enum[Enum["A"] = 0] = "A"; +})(Enum || (Enum = {})); + +; diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-value/input.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-value/input.mjs new file mode 100644 index 0000000000..727760d0ed --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-value/input.mjs @@ -0,0 +1,2 @@ +import { A } from 'lib' +enum Enum { id = A }; \ No newline at end of file diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-value/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-value/output.mjs new file mode 100644 index 0000000000..88a2cffb83 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/imports/enum-value/output.mjs @@ -0,0 +1,8 @@ +import { A } from 'lib'; +var Enum; + +(function (Enum) { + Enum[Enum["id"] = A] = "id"; +})(Enum || (Enum = {})); + +; diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/imports/property-signature/input.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/imports/property-signature/input.mjs new file mode 100644 index 0000000000..7e24284647 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/imports/property-signature/input.mjs @@ -0,0 +1,2 @@ +import { A } from 'lib' +const obj: { A: A } = { A: 'foo' }; \ No newline at end of file diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/imports/property-signature/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/imports/property-signature/output.mjs new file mode 100644 index 0000000000..cba06b741a --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/imports/property-signature/output.mjs @@ -0,0 +1,3 @@ +const obj = { + A: 'foo' +}; diff --git a/packages/babel-types/src/validators/isReferenced.js b/packages/babel-types/src/validators/isReferenced.js index 6a5a3ebc8e..f83c7956c4 100644 --- a/packages/babel-types/src/validators/isReferenced.js +++ b/packages/babel-types/src/validators/isReferenced.js @@ -134,6 +134,20 @@ export default function isReferenced( // no: type X = { NODE: OtherType } case "ObjectTypeProperty": return parent.key !== node; + + // yes: enum X { Foo = NODE } + // no: enum X { NODE } + case "TSEnumMember": + return parent.id !== node; + + // yes: { [NODE]: value } + // no: { NODE: value } + case "TSPropertySignature": + if (parent.key === node) { + return !!parent.computed; + } + + return true; } return true; diff --git a/packages/babel-types/test/validators.js b/packages/babel-types/test/validators.js index 8e1f18e115..3b4ec0d933 100644 --- a/packages/babel-types/test/validators.js +++ b/packages/babel-types/test/validators.js @@ -122,7 +122,7 @@ describe("validators", function() { expect(t.isReferenced(node, parent)).toBe(true); }); - it("returns true if node id a value of ObjectProperty of an expression", function() { + it("returns true if node is a value of ObjectProperty of an expression", function() { const node = t.identifier("a"); const parent = t.objectProperty(t.identifier("key"), node); const grandparent = t.objectExpression([parent]); @@ -130,13 +130,55 @@ describe("validators", function() { expect(t.isReferenced(node, parent, grandparent)).toBe(true); }); - it("returns false if node id a value of ObjectProperty of a pattern", function() { + it("returns false if node is a value of ObjectProperty of a pattern", function() { const node = t.identifier("a"); const parent = t.objectProperty(t.identifier("key"), node); const grandparent = t.objectPattern([parent]); expect(t.isReferenced(node, parent, grandparent)).toBe(false); }); + + describe("TSPropertySignature", function() { + it("returns false if node is a key", function() { + // { A: string } + const node = t.identifier("A"); + const parent = t.tsPropertySignature( + node, + t.tsTypeAnnotation(t.tsStringKeyword()), + ); + + expect(t.isReferenced(node, parent)).toBe(false); + }); + + it("returns true if node is a value", function() { + // { someKey: A } + const node = t.identifier("A"); + const parent = t.tsPropertySignature( + t.identifier("someKey"), + t.tsTypeAnnotation(t.tsTypeReference(node)), + ); + + expect(t.isReferenced(node, parent)).toBe(true); + }); + }); + + describe("TSEnumMember", function() { + it("returns false if node is an id", function() { + // enum X = { A }; + const node = t.identifier("A"); + const parent = t.tsEnumMember(node); + + expect(t.isReferenced(node, parent)).toBe(false); + }); + + it("returns true if node is a value", function() { + // enum X = { Foo = A } + const node = t.identifier("A"); + const parent = t.tsEnumMember(t.identifier("Foo"), node); + + expect(t.isReferenced(node, parent)).toBe(true); + }); + }); }); describe("isBinding", function() {