Skip to content

Commit 4ce280b

Browse files
author
Robert Jackson
authored
Fix issues when using colocated component's with decorators. (#340)
Fix issues when using colocated component's with decorators.
2 parents 86838c6 + f903240 commit 4ce280b

4 files changed

Lines changed: 87 additions & 4 deletions

File tree

lib/colocated-babel-plugin.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@ module.exports = function(babel) {
2222
},
2323

2424
ExportDefaultDeclaration(path, state) {
25-
if (!state.colocatedTemplateFound) {
25+
if (state.colocatedTemplateFound !== true || state.setComponentTemplateInjected === true) {
2626
return;
2727
}
2828

29+
state.setComponentTemplateInjected = true;
2930
let defaultExportDeclaration = path.node.declaration;
3031
let setComponentTemplateMemberExpression = makeSetComponentTemplateMemberExpression();
3132
let colocatedTemplateIdentifier = makeColocatedTemplateIdentifier();
@@ -63,12 +64,13 @@ module.exports = function(babel) {
6364
},
6465

6566
ExportNamedDeclaration(path, state) {
66-
if (!state.colocatedTemplateFound) {
67+
if (state.colocatedTemplateFound !== true || state.setComponentTemplateInjected === true) {
6768
return;
6869
}
6970

7071
let defaultSpecifier = path.node.specifiers.find(spec => spec.exported.name === 'default');
7172
if (defaultSpecifier) {
73+
state.setComponentTemplateInjected = true;
7274
path.parent.body.push(
7375
t.expressionStatement(
7476
t.callExpression(makeSetComponentTemplateMemberExpression(), [

node-tests/colocated-babel-plugin-test.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,70 @@ const assert = require('assert');
44
const babel = require('@babel/core');
55
const { stripIndent } = require('common-tags');
66
const ColocatedBabelPlugin = require('../lib/colocated-babel-plugin');
7+
const DecoratorsPlugin = [require.resolve('@babel/plugin-proposal-decorators'), { legacy: true }];
8+
const ClassPropertiesPlugin = [
9+
require.resolve('@babel/plugin-proposal-class-properties'),
10+
{ loose: true },
11+
];
12+
const RuntimePlugin = [
13+
require.resolve('@babel/plugin-transform-runtime'),
14+
{
15+
version: require('@babel/runtime/package').version,
16+
regenerator: false,
17+
useESModules: true,
18+
},
19+
];
720

821
describe('ColocatedBabelPlugin', function() {
922
this.slow(500);
1023

24+
it('can be used with decorators', function() {
25+
let { code } = babel.transformSync(
26+
stripIndent`
27+
import Component from '@glimmer/component';
28+
const __COLOCATED_TEMPLATE__ = 'ok';
29+
30+
export default class MyComponent extends Component {
31+
@tracked data = null;
32+
};
33+
`,
34+
{ plugins: [RuntimePlugin, ColocatedBabelPlugin, DecoratorsPlugin, ClassPropertiesPlugin] }
35+
);
36+
37+
assert.strictEqual(
38+
code,
39+
stripIndent`
40+
import _initializerDefineProperty from "@babel/runtime/helpers/esm/initializerDefineProperty";
41+
import _applyDecoratedDescriptor from "@babel/runtime/helpers/esm/applyDecoratedDescriptor";
42+
import _initializerWarningHelper from "@babel/runtime/helpers/esm/initializerWarningHelper";
43+
44+
var _class, _descriptor, _temp;
45+
46+
import Component from '@glimmer/component';
47+
const __COLOCATED_TEMPLATE__ = 'ok';
48+
let MyComponent = (_class = (_temp = class MyComponent extends Component {
49+
constructor(...args) {
50+
super(...args);
51+
52+
_initializerDefineProperty(this, "data", _descriptor, this);
53+
}
54+
55+
}, _temp), (_descriptor = _applyDecoratedDescriptor(_class.prototype, "data", [tracked], {
56+
configurable: true,
57+
enumerable: true,
58+
writable: true,
59+
initializer: function () {
60+
return null;
61+
}
62+
})), _class);
63+
export { MyComponent as default };
64+
;
65+
66+
Ember._setComponentTemplate(__COLOCATED_TEMPLATE__, MyComponent);
67+
`
68+
);
69+
});
70+
1171
it('sets the template for non-class default exports', function() {
1272
let { code } = babel.transformSync(
1373
stripIndent`

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,11 @@
4949
},
5050
"devDependencies": {
5151
"@babel/core": "^7.6.4",
52+
"@babel/plugin-proposal-class-properties": "^7.5.5",
53+
"@babel/plugin-proposal-decorators": "^7.6.0",
54+
"@babel/plugin-transform-runtime": "^7.6.2",
5255
"@babel/plugin-transform-typescript": "^7.6.3",
56+
"@babel/runtime": "^7.6.3",
5357
"@ember/optional-features": "^1.0.0",
5458
"babel-plugin-debug-macros": "^0.3.3",
5559
"broccoli-merge-trees": "^3.0.2",

yarn.lock

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,15 +273,15 @@
273273
"@babel/helper-remap-async-to-generator" "^7.1.0"
274274
"@babel/plugin-syntax-async-generators" "^7.2.0"
275275

276-
"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.3.4":
276+
"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.3.4", "@babel/plugin-proposal-class-properties@^7.5.5":
277277
version "7.5.5"
278278
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4"
279279
integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==
280280
dependencies:
281281
"@babel/helper-create-class-features-plugin" "^7.5.5"
282282
"@babel/helper-plugin-utils" "^7.0.0"
283283

284-
"@babel/plugin-proposal-decorators@^7.3.0":
284+
"@babel/plugin-proposal-decorators@^7.3.0", "@babel/plugin-proposal-decorators@^7.6.0":
285285
version "7.6.0"
286286
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.6.0.tgz#6659d2572a17d70abd68123e89a12a43d90aa30c"
287287
integrity sha512-ZSyYw9trQI50sES6YxREXKu+4b7MAg6Qx2cvyDDYjP2Hpzd3FleOUwC9cqn1+za8d0A2ZU8SHujxFao956efUg==
@@ -597,6 +597,16 @@
597597
resolve "^1.8.1"
598598
semver "^5.5.1"
599599

600+
"@babel/plugin-transform-runtime@^7.6.2":
601+
version "7.6.2"
602+
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.2.tgz#2669f67c1fae0ae8d8bf696e4263ad52cb98b6f8"
603+
integrity sha512-cqULw/QB4yl73cS5Y0TZlQSjDvNkzDbu0FurTZyHlJpWE5T3PCMdnyV+xXoH1opr1ldyHODe3QAX3OMAii5NxA==
604+
dependencies:
605+
"@babel/helper-module-imports" "^7.0.0"
606+
"@babel/helper-plugin-utils" "^7.0.0"
607+
resolve "^1.8.1"
608+
semver "^5.5.1"
609+
600610
"@babel/plugin-transform-shorthand-properties@^7.2.0":
601611
version "7.2.0"
602612
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0"
@@ -731,6 +741,13 @@
731741
dependencies:
732742
regenerator-runtime "^0.13.2"
733743

744+
"@babel/runtime@^7.6.3":
745+
version "7.6.3"
746+
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f"
747+
integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==
748+
dependencies:
749+
regenerator-runtime "^0.13.2"
750+
734751
"@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0":
735752
version "7.6.0"
736753
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6"

0 commit comments

Comments
 (0)