From 4d125c391a9633ecdcaa0a6c0453170a611e869d Mon Sep 17 00:00:00 2001 From: Pierre-Marie Dartus Date: Wed, 4 Jul 2018 04:44:33 -0700 Subject: [PATCH] Typescript: Avoid stripping class properties when a decorator is set (#8238) The `babel-plugin-transform-typescript` removes class properties without value regardless if decorators are assigned to it or not. --- packages/babel-plugin-transform-typescript/src/index.js | 9 ++++----- .../test/fixtures/class/properties/input.js | 2 ++ .../test/fixtures/class/properties/options.json | 6 ++++++ .../test/fixtures/class/properties/output.js | 4 ++++ 4 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/class/properties/options.json diff --git a/packages/babel-plugin-transform-typescript/src/index.js b/packages/babel-plugin-transform-typescript/src/index.js index 9ba2e23d89..f7f2b304f6 100644 --- a/packages/babel-plugin-transform-typescript/src/index.js +++ b/packages/babel-plugin-transform-typescript/src/index.js @@ -157,10 +157,6 @@ export default declare((api, { jsxPragma = "React" }) => { ClassProperty(path) { const { node } = path; - if (!node.value) { - path.remove(); - return; - } if (node.accessibility) node.accessibility = null; if (node.abstract) node.abstract = null; @@ -196,7 +192,10 @@ export default declare((api, { jsxPragma = "React" }) => { path.get("body.body").forEach(child => { if (child.isClassProperty()) { child.node.typeAnnotation = null; - if (!child.node.value) child.remove(); + + if (!child.node.value && !child.node.decorators) { + child.remove(); + } } }); }, diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/class/properties/input.js b/packages/babel-plugin-transform-typescript/test/fixtures/class/properties/input.js index ce12b25f6f..abb53ac69b 100644 --- a/packages/babel-plugin-transform-typescript/test/fixtures/class/properties/input.js +++ b/packages/babel-plugin-transform-typescript/test/fixtures/class/properties/input.js @@ -2,4 +2,6 @@ class C { public a?: number; private b: number = 0; readonly c!: number = 1; + @foo d: number; + @foo e: number = 3; } diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/class/properties/options.json b/packages/babel-plugin-transform-typescript/test/fixtures/class/properties/options.json new file mode 100644 index 0000000000..43bd3d3759 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/class/properties/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + "transform-typescript", + ["syntax-decorators", { "legacy": true }] + ] +} diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/class/properties/output.js b/packages/babel-plugin-transform-typescript/test/fixtures/class/properties/output.js index 77e91a62b0..8dd079732d 100644 --- a/packages/babel-plugin-transform-typescript/test/fixtures/class/properties/output.js +++ b/packages/babel-plugin-transform-typescript/test/fixtures/class/properties/output.js @@ -1,4 +1,8 @@ class C { b = 0; c = 1; + @foo + d; + @foo + e = 3; }