@@ -4,10 +4,70 @@ const assert = require('assert');
44const babel = require ( '@babel/core' ) ;
55const { stripIndent } = require ( 'common-tags' ) ;
66const 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
821describe ( '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 `
0 commit comments