@norith/glimmer-tracking 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +44 -0
  2. package/dist/commonjs/index.d.ts +2 -0
  3. package/dist/commonjs/index.js +8 -0
  4. package/dist/commonjs/src/cached.d.ts +58 -0
  5. package/dist/commonjs/src/cached.js +100 -0
  6. package/dist/commonjs/src/tracked.d.ts +57 -0
  7. package/dist/commonjs/src/tracked.js +109 -0
  8. package/dist/commonjs/test/cached-decorator-test.d.ts +1 -0
  9. package/dist/commonjs/test/cached-decorator-test.js +137 -0
  10. package/dist/commonjs/test/fixtures/typescript.d.ts +47 -0
  11. package/dist/commonjs/test/fixtures/typescript.js +297 -0
  12. package/dist/commonjs/test/helpers/tags.d.ts +2 -0
  13. package/dist/commonjs/test/helpers/tags.js +10 -0
  14. package/dist/commonjs/test/index.d.ts +2 -0
  15. package/dist/commonjs/test/index.js +5 -0
  16. package/dist/commonjs/test/tracked-decorator-test.d.ts +1 -0
  17. package/dist/commonjs/test/tracked-decorator-test.js +182 -0
  18. package/dist/modules/index.d.ts +2 -0
  19. package/dist/modules/index.js +3 -0
  20. package/dist/modules/src/cached.d.ts +58 -0
  21. package/dist/modules/src/cached.js +96 -0
  22. package/dist/modules/src/tracked.d.ts +57 -0
  23. package/dist/modules/src/tracked.js +105 -0
  24. package/dist/modules/test/cached-decorator-test.d.ts +1 -0
  25. package/dist/modules/test/cached-decorator-test.js +116 -0
  26. package/dist/modules/test/fixtures/typescript.d.ts +47 -0
  27. package/dist/modules/test/fixtures/typescript.js +280 -0
  28. package/dist/modules/test/helpers/tags.d.ts +2 -0
  29. package/dist/modules/test/helpers/tags.js +6 -0
  30. package/dist/modules/test/index.d.ts +2 -0
  31. package/dist/modules/test/index.js +3 -0
  32. package/dist/modules/test/tracked-decorator-test.d.ts +1 -0
  33. package/dist/modules/test/tracked-decorator-test.js +161 -0
  34. package/ember-addon-main.js +5 -0
  35. package/package.json +41 -0
@@ -0,0 +1,280 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { cached, tracked } from '@norith/glimmer-tracking';
8
+ export class Tom {
9
+ constructor() {
10
+ this.firstName = 'Tom';
11
+ }
12
+ }
13
+ __decorate([
14
+ tracked
15
+ ], Tom.prototype, "firstName", void 0);
16
+ export class Toran {
17
+ constructor() {
18
+ this.firstName = 'Toran';
19
+ this.lastName = 'Billups';
20
+ }
21
+ }
22
+ __decorate([
23
+ tracked
24
+ ], Toran.prototype, "firstName", void 0);
25
+ class FrozenToran {
26
+ constructor() {
27
+ this.firstName = 'Toran';
28
+ this.lastName = 'Billups';
29
+ }
30
+ }
31
+ __decorate([
32
+ tracked
33
+ ], FrozenToran.prototype, "firstName", void 0);
34
+ Object.freeze(FrozenToran);
35
+ export { FrozenToran };
36
+ export class PersonWithCount {
37
+ constructor() {
38
+ this._firstName = 'Tom';
39
+ this._count = 0;
40
+ }
41
+ get firstName() {
42
+ return this._firstName + this._count++;
43
+ }
44
+ set firstName(value) {
45
+ this._firstName = value;
46
+ }
47
+ }
48
+ __decorate([
49
+ tracked
50
+ ], PersonWithCount.prototype, "_firstName", void 0);
51
+ export class PersonWithSalutation {
52
+ constructor() {
53
+ this.firstName = 'Tom';
54
+ this.lastName = 'Dale';
55
+ }
56
+ get salutation() {
57
+ return `Hello, ${this.fullName}!`;
58
+ }
59
+ get fullName() {
60
+ return `${this.firstName} ${this.lastName}`;
61
+ }
62
+ set fullName(fullName) {
63
+ const [firstName, lastName] = fullName.split(' ');
64
+ this.firstName = firstName;
65
+ this.lastName = lastName;
66
+ }
67
+ }
68
+ __decorate([
69
+ tracked
70
+ ], PersonWithSalutation.prototype, "firstName", void 0);
71
+ __decorate([
72
+ tracked
73
+ ], PersonWithSalutation.prototype, "lastName", void 0);
74
+ export class Contact {
75
+ constructor(person, email) {
76
+ this.person = person;
77
+ this.email = email;
78
+ }
79
+ get contact() {
80
+ return `${this.person} @ ${this.email}`;
81
+ }
82
+ }
83
+ __decorate([
84
+ tracked
85
+ ], Contact.prototype, "email", void 0);
86
+ __decorate([
87
+ tracked
88
+ ], Contact.prototype, "person", void 0);
89
+ export class PersonForContact {
90
+ constructor() {
91
+ this.firstName = 'Tom';
92
+ this.lastName = 'Dale';
93
+ }
94
+ get salutation() {
95
+ return `Hello, ${this.fullName}!`;
96
+ }
97
+ get fullName() {
98
+ return `${this.firstName} ${this.lastName}`;
99
+ }
100
+ set fullName(fullName) {
101
+ const [firstName, lastName] = fullName.split(' ');
102
+ this.firstName = firstName;
103
+ this.lastName = lastName;
104
+ }
105
+ toString() {
106
+ return this.fullName;
107
+ }
108
+ }
109
+ __decorate([
110
+ tracked
111
+ ], PersonForContact.prototype, "firstName", void 0);
112
+ __decorate([
113
+ tracked
114
+ ], PersonForContact.prototype, "lastName", void 0);
115
+ export function createClassWithTrackedGetter() {
116
+ class PersonWithTrackedGetter {
117
+ constructor() {
118
+ this.firstName = 'Tom';
119
+ }
120
+ get salutation() {
121
+ return `Hello, ${this.firstName} ${this.lastName}!`;
122
+ }
123
+ }
124
+ __decorate([
125
+ tracked
126
+ ], PersonWithTrackedGetter.prototype, "firstName", void 0);
127
+ __decorate([
128
+ tracked
129
+ ], PersonWithTrackedGetter.prototype, "lastName", void 0);
130
+ __decorate([
131
+ tracked
132
+ ], PersonWithTrackedGetter.prototype, "salutation", null);
133
+ return new PersonWithTrackedGetter();
134
+ }
135
+ export function createClassWithCachedProperty() {
136
+ class PersonWithCachedProperty {
137
+ constructor() {
138
+ this.firstName = 'Tom';
139
+ }
140
+ }
141
+ __decorate([
142
+ cached
143
+ ], PersonWithCachedProperty.prototype, "firstName", void 0);
144
+ return new PersonWithCachedProperty();
145
+ }
146
+ export function createClassWithTrackedSetter() {
147
+ class PersonWithTrackedSetter {
148
+ constructor() {
149
+ this.firstName = 'Tom';
150
+ }
151
+ // @ts-ignore
152
+ set fullName(fullName) {
153
+ const [firstName, lastName] = fullName.split(' ');
154
+ this.firstName = firstName;
155
+ this.lastName = lastName;
156
+ }
157
+ }
158
+ __decorate([
159
+ tracked
160
+ ], PersonWithTrackedSetter.prototype, "firstName", void 0);
161
+ __decorate([
162
+ tracked
163
+ ], PersonWithTrackedSetter.prototype, "lastName", void 0);
164
+ __decorate([
165
+ tracked
166
+ ], PersonWithTrackedSetter.prototype, "fullName", null);
167
+ return new PersonWithTrackedSetter();
168
+ }
169
+ export function createClassWithCachedSetter() {
170
+ class PersonWithCachedSetter {
171
+ constructor() {
172
+ this.firstName = 'Tom';
173
+ }
174
+ // @ts-ignore
175
+ set fullName(fullName) {
176
+ const [firstName, lastName] = fullName.split(' ');
177
+ this.firstName = firstName;
178
+ this.lastName = lastName;
179
+ }
180
+ }
181
+ __decorate([
182
+ tracked
183
+ ], PersonWithCachedSetter.prototype, "firstName", void 0);
184
+ __decorate([
185
+ tracked
186
+ ], PersonWithCachedSetter.prototype, "lastName", void 0);
187
+ __decorate([
188
+ cached
189
+ ], PersonWithCachedSetter.prototype, "fullName", null);
190
+ return new PersonWithCachedSetter();
191
+ }
192
+ export function createClassWithTrackedDependentKeys() {
193
+ class DependentKeysAreCool {
194
+ constructor() {
195
+ this.firstName = 'Tom';
196
+ this.lastName = 'Dale';
197
+ }
198
+ // @ts-ignore
199
+ fullName() {
200
+ return `${this.firstName} ${this.lastName}`;
201
+ }
202
+ }
203
+ __decorate([
204
+ tracked('firstName', 'lastName')
205
+ ], DependentKeysAreCool.prototype, "fullName", null);
206
+ __decorate([
207
+ tracked
208
+ ], DependentKeysAreCool.prototype, "firstName", void 0);
209
+ __decorate([
210
+ tracked
211
+ ], DependentKeysAreCool.prototype, "lastName", void 0);
212
+ return new DependentKeysAreCool();
213
+ }
214
+ export function createClassWithCachedDependentKeys() {
215
+ class DependentKeysAreCool {
216
+ constructor() {
217
+ this.firstName = 'Tom';
218
+ this.lastName = 'Dale';
219
+ }
220
+ // @ts-ignore
221
+ fullName() {
222
+ return `${this.firstName} ${this.lastName}`;
223
+ }
224
+ }
225
+ __decorate([
226
+ cached('firstName', 'lastName')
227
+ ], DependentKeysAreCool.prototype, "fullName", null);
228
+ __decorate([
229
+ tracked
230
+ ], DependentKeysAreCool.prototype, "firstName", void 0);
231
+ __decorate([
232
+ tracked
233
+ ], DependentKeysAreCool.prototype, "lastName", void 0);
234
+ return new DependentKeysAreCool();
235
+ }
236
+ export function createClassWithTrackedAsDecoratorFactory() {
237
+ class DependentKeysAreCool {
238
+ constructor() {
239
+ this.firstName = 'Tom';
240
+ this.lastName = 'Dale';
241
+ }
242
+ // @ts-ignore
243
+ fullName() {
244
+ return `${this.firstName} ${this.lastName}`;
245
+ }
246
+ }
247
+ __decorate([
248
+ tracked()
249
+ ], DependentKeysAreCool.prototype, "fullName", null);
250
+ __decorate([
251
+ tracked
252
+ ], DependentKeysAreCool.prototype, "firstName", void 0);
253
+ __decorate([
254
+ tracked
255
+ ], DependentKeysAreCool.prototype, "lastName", void 0);
256
+ return new DependentKeysAreCool();
257
+ }
258
+ export function createClassWithCachedAsDecoratorFactory() {
259
+ class DependentKeysAreCool {
260
+ constructor() {
261
+ this.firstName = 'Tom';
262
+ this.lastName = 'Dale';
263
+ }
264
+ // @ts-ignore
265
+ fullName() {
266
+ return `${this.firstName} ${this.lastName}`;
267
+ }
268
+ }
269
+ __decorate([
270
+ cached()
271
+ ], DependentKeysAreCool.prototype, "fullName", null);
272
+ __decorate([
273
+ tracked
274
+ ], DependentKeysAreCool.prototype, "firstName", void 0);
275
+ __decorate([
276
+ tracked
277
+ ], DependentKeysAreCool.prototype, "lastName", void 0);
278
+ return new DependentKeysAreCool();
279
+ }
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3RyYWNraW5nL3Rlc3QvZml4dHVyZXMvdHlwZXNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTNELE1BQU0sT0FBTyxHQUFHO0lBQWhCO1FBQ1csY0FBUyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0NBQUE7QUFEVTtJQUFSLE9BQU87c0NBQW1CO0FBRzdCLE1BQU0sT0FBTyxLQUFLO0lBQWxCO1FBQ1csY0FBUyxHQUFHLE9BQU8sQ0FBQztRQUM3QixhQUFRLEdBQUcsU0FBUyxDQUFDO0lBQ3ZCLENBQUM7Q0FBQTtBQUZVO0lBQVIsT0FBTzt3Q0FBcUI7QUFJL0IsTUFBTSxXQUFXO0lBQWpCO1FBQ1csY0FBUyxHQUFHLE9BQU8sQ0FBQztRQUM3QixhQUFRLEdBQUcsU0FBUyxDQUFDO0lBQ3ZCLENBQUM7Q0FBQTtBQUZVO0lBQVIsT0FBTzs4Q0FBcUI7QUFJL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUUzQixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFFdkIsTUFBTSxPQUFPLGVBQWU7SUFBNUI7UUFDVyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQzVCLFdBQU0sR0FBRyxDQUFDLENBQUM7SUFTYixDQUFDO0lBUEMsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsS0FBSztRQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFWVTtJQUFSLE9BQU87bURBQW9CO0FBWTlCLE1BQU0sT0FBTyxvQkFBb0I7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O1lBQ2hCLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxDQUFDO0tBSUY7SUFOVztRQUFULE1BQU0sRUFBRTt3REFFUjtJQUVRO1FBQVIsT0FBTzsyREFBbUI7SUFDbEI7UUFBUixPQUFPOzBEQUFtQjtJQUU3QixPQUFPLElBQUksb0JBQW9CLEVBQUUsQ0FBQztBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FjaGVkLCB0cmFja2VkIH0gZnJvbSAnQG5vcml0aC9nbGltbWVyLXRyYWNraW5nJztcblxuZXhwb3J0IGNsYXNzIFRvbSB7XG4gIEB0cmFja2VkIGZpcnN0TmFtZSA9ICdUb20nO1xufVxuXG5leHBvcnQgY2xhc3MgVG9yYW4ge1xuICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9yYW4nO1xuICBsYXN0TmFtZSA9ICdCaWxsdXBzJztcbn1cblxuY2xhc3MgRnJvemVuVG9yYW4ge1xuICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9yYW4nO1xuICBsYXN0TmFtZSA9ICdCaWxsdXBzJztcbn1cblxuT2JqZWN0LmZyZWV6ZShGcm96ZW5Ub3Jhbik7XG5cbmV4cG9ydCB7IEZyb3plblRvcmFuIH07XG5cbmV4cG9ydCBjbGFzcyBQZXJzb25XaXRoQ291bnQge1xuICBAdHJhY2tlZCBfZmlyc3ROYW1lID0gJ1RvbSc7XG4gIF9jb3VudCA9IDA7XG5cbiAgZ2V0IGZpcnN0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlyc3ROYW1lICsgdGhpcy5fY291bnQrKztcbiAgfVxuXG4gIHNldCBmaXJzdE5hbWUodmFsdWUpIHtcbiAgICB0aGlzLl9maXJzdE5hbWUgPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGVyc29uV2l0aFNhbHV0YXRpb24ge1xuICBnZXQgc2FsdXRhdGlvbigpIHtcbiAgICByZXR1cm4gYEhlbGxvLCAke3RoaXMuZnVsbE5hbWV9IWA7XG4gIH1cblxuICBnZXQgZnVsbE5hbWUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuZmlyc3ROYW1lfSAke3RoaXMubGFzdE5hbWV9YDtcbiAgfVxuXG4gIHNldCBmdWxsTmFtZShmdWxsTmFtZSkge1xuICAgIGNvbnN0IFtmaXJzdE5hbWUsIGxhc3ROYW1lXSA9IGZ1bGxOYW1lLnNwbGl0KCcgJyk7XG4gICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7XG4gICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lO1xuICB9XG5cbiAgQHRyYWNrZWQgZmlyc3ROYW1lID0gJ1RvbSc7XG4gIEB0cmFja2VkIGxhc3ROYW1lID0gJ0RhbGUnO1xufVxuXG5leHBvcnQgY2xhc3MgQ29udGFjdCB7XG4gIEB0cmFja2VkIGVtYWlsOiBzdHJpbmc7XG4gIEB0cmFja2VkIHBlcnNvbjogUGVyc29uRm9yQ29udGFjdDtcblxuICBjb25zdHJ1Y3RvcihwZXJzb246IFBlcnNvbkZvckNvbnRhY3QsIGVtYWlsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBlcnNvbiA9IHBlcnNvbjtcbiAgICB0aGlzLmVtYWlsID0gZW1haWw7XG4gIH1cblxuICBnZXQgY29udGFjdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnBlcnNvbn0gQCAke3RoaXMuZW1haWx9YDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGVyc29uRm9yQ29udGFjdCB7XG4gIGdldCBzYWx1dGF0aW9uKCkge1xuICAgIHJldHVybiBgSGVsbG8sICR7dGhpcy5mdWxsTmFtZX0hYDtcbiAgfVxuXG4gIGdldCBmdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmZpcnN0TmFtZX0gJHt0aGlzLmxhc3ROYW1lfWA7XG4gIH1cblxuICBzZXQgZnVsbE5hbWUoZnVsbE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IFtmaXJzdE5hbWUsIGxhc3ROYW1lXSA9IGZ1bGxOYW1lLnNwbGl0KCcgJyk7XG4gICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7XG4gICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVsbE5hbWU7XG4gIH1cblxuICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9tJztcbiAgQHRyYWNrZWQgbGFzdE5hbWUgPSAnRGFsZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGFzc1dpdGhUcmFja2VkR2V0dGVyKCk6IGFueSB7XG4gIGNsYXNzIFBlcnNvbldpdGhUcmFja2VkR2V0dGVyIHtcbiAgICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9tJztcbiAgICBAdHJhY2tlZCBsYXN0TmFtZTogYW55O1xuXG4gICAgQHRyYWNrZWQgZ2V0IHNhbHV0YXRpb24oKSB7XG4gICAgICByZXR1cm4gYEhlbGxvLCAke3RoaXMuZmlyc3ROYW1lfSAke3RoaXMubGFzdE5hbWV9IWA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQZXJzb25XaXRoVHJhY2tlZEdldHRlcigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xhc3NXaXRoQ2FjaGVkUHJvcGVydHkoKTogYW55IHtcbiAgY2xhc3MgUGVyc29uV2l0aENhY2hlZFByb3BlcnR5IHtcbiAgICBAY2FjaGVkIGZpcnN0TmFtZSA9ICdUb20nO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQZXJzb25XaXRoQ2FjaGVkUHJvcGVydHkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsYXNzV2l0aFRyYWNrZWRTZXR0ZXIoKTogYW55IHtcbiAgY2xhc3MgUGVyc29uV2l0aFRyYWNrZWRTZXR0ZXIge1xuICAgIEB0cmFja2VkIGZpcnN0TmFtZSA9ICdUb20nO1xuICAgIEB0cmFja2VkIGxhc3ROYW1lOiBhbnk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgQHRyYWNrZWQgc2V0IGZ1bGxOYW1lKGZ1bGxOYW1lKSB7XG4gICAgICBjb25zdCBbZmlyc3ROYW1lLCBsYXN0TmFtZV0gPSBmdWxsTmFtZS5zcGxpdCgnICcpO1xuICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7XG4gICAgICB0aGlzLmxhc3ROYW1lID0gbGFzdE5hbWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQZXJzb25XaXRoVHJhY2tlZFNldHRlcigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xhc3NXaXRoQ2FjaGVkU2V0dGVyKCk6IGFueSB7XG4gIGNsYXNzIFBlcnNvbldpdGhDYWNoZWRTZXR0ZXIge1xuICAgIEB0cmFja2VkIGZpcnN0TmFtZSA9ICdUb20nO1xuICAgIEB0cmFja2VkIGxhc3ROYW1lOiBhbnk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgQGNhY2hlZCBzZXQgZnVsbE5hbWUoZnVsbE5hbWUpIHtcbiAgICAgIGNvbnN0IFtmaXJzdE5hbWUsIGxhc3ROYW1lXSA9IGZ1bGxOYW1lLnNwbGl0KCcgJyk7XG4gICAgICB0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTtcbiAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFBlcnNvbldpdGhDYWNoZWRTZXR0ZXIoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsYXNzV2l0aFRyYWNrZWREZXBlbmRlbnRLZXlzKCk6IGFueSB7XG4gIGNsYXNzIERlcGVuZGVudEtleXNBcmVDb29sIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgQHRyYWNrZWQoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScpIGZ1bGxOYW1lKCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZmlyc3ROYW1lfSAke3RoaXMubGFzdE5hbWV9YDtcbiAgICB9XG5cbiAgICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9tJztcbiAgICBAdHJhY2tlZCBsYXN0TmFtZSA9ICdEYWxlJztcbiAgfVxuICByZXR1cm4gbmV3IERlcGVuZGVudEtleXNBcmVDb29sKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGFzc1dpdGhDYWNoZWREZXBlbmRlbnRLZXlzKCk6IGFueSB7XG4gIGNsYXNzIERlcGVuZGVudEtleXNBcmVDb29sIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgQGNhY2hlZCgnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJykgZnVsbE5hbWUoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5maXJzdE5hbWV9ICR7dGhpcy5sYXN0TmFtZX1gO1xuICAgIH1cblxuICAgIEB0cmFja2VkIGZpcnN0TmFtZSA9ICdUb20nO1xuICAgIEB0cmFja2VkIGxhc3ROYW1lID0gJ0RhbGUnO1xuICB9XG4gIHJldHVybiBuZXcgRGVwZW5kZW50S2V5c0FyZUNvb2woKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsYXNzV2l0aFRyYWNrZWRBc0RlY29yYXRvckZhY3RvcnkoKTogYW55IHtcbiAgY2xhc3MgRGVwZW5kZW50S2V5c0FyZUNvb2wge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBAdHJhY2tlZCgpIGZ1bGxOYW1lKCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZmlyc3ROYW1lfSAke3RoaXMubGFzdE5hbWV9YDtcbiAgICB9XG5cbiAgICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9tJztcbiAgICBAdHJhY2tlZCBsYXN0TmFtZSA9ICdEYWxlJztcbiAgfVxuICByZXR1cm4gbmV3IERlcGVuZGVudEtleXNBcmVDb29sKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGFzc1dpdGhDYWNoZWRBc0RlY29yYXRvckZhY3RvcnkoKTogYW55IHtcbiAgY2xhc3MgRGVwZW5kZW50S2V5c0FyZUNvb2wge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBAY2FjaGVkKCkgZnVsbE5hbWUoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5maXJzdE5hbWV9ICR7dGhpcy5sYXN0TmFtZX1gO1xuICAgIH1cblxuICAgIEB0cmFja2VkIGZpcnN0TmFtZSA9ICdUb20nO1xuICAgIEB0cmFja2VkIGxhc3ROYW1lID0gJ0RhbGUnO1xuICB9XG4gIHJldHVybiBuZXcgRGVwZW5kZW50S2V5c0FyZUNvb2woKTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import { Tag } from '@glimmer/validator';
2
+ export declare function assertValidAfterUnrelatedBump(tag: Tag, snapshot: number): void;
@@ -0,0 +1,6 @@
1
+ import { bump, validateTag } from '@glimmer/validator';
2
+ export function assertValidAfterUnrelatedBump(tag, snapshot) {
3
+ bump();
4
+ QUnit.assert.strictEqual(validateTag(tag, snapshot), true, 'tag is still valid after an unrelated bump');
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3RyYWNraW5nL3Rlc3QvaGVscGVycy90YWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQU8sV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUQsTUFBTSxVQUFVLDZCQUE2QixDQUFDLEdBQVEsRUFBRSxRQUFnQjtJQUN0RSxJQUFJLEVBQUUsQ0FBQztJQUVQLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUN0QixXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUMxQixJQUFJLEVBQ0osNENBQTRDLENBQzdDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVtcCwgVGFnLCB2YWxpZGF0ZVRhZyB9IGZyb20gJ0BnbGltbWVyL3ZhbGlkYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZEFmdGVyVW5yZWxhdGVkQnVtcCh0YWc6IFRhZywgc25hcHNob3Q6IG51bWJlcik6IHZvaWQge1xuICBidW1wKCk7XG5cbiAgUVVuaXQuYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgIHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLFxuICAgIHRydWUsXG4gICAgJ3RhZyBpcyBzdGlsbCB2YWxpZCBhZnRlciBhbiB1bnJlbGF0ZWQgYnVtcCdcbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import './tracked-decorator-test';
2
+ import './cached-decorator-test';
@@ -0,0 +1,3 @@
1
+ import './tracked-decorator-test';
2
+ import './cached-decorator-test';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci90cmFja2luZy90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnLi90cmFja2VkLWRlY29yYXRvci10ZXN0JztcbmltcG9ydCAnLi9jYWNoZWQtZGVjb3JhdG9yLXRlc3QnO1xuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,161 @@
1
+ /* tslint:disable:no-unused-expression */
2
+ const { test } = QUnit;
3
+ import { DEBUG } from '@glimmer/env';
4
+ import { track, valueForTag, validateTag } from '@glimmer/validator';
5
+ import * as TSFixtures from './fixtures/typescript';
6
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
7
+ // @ts-ignore
8
+ import * as BabelFixtures from './fixtures/babel';
9
+ import { assertValidAfterUnrelatedBump } from './helpers/tags';
10
+ [
11
+ ['Babel', BabelFixtures],
12
+ ['TypeScript', TSFixtures],
13
+ ].forEach(([compiler, F]) => {
14
+ QUnit.module(`[@glimmer/tracking] Tracked Property Decorators with ${compiler}`);
15
+ test('tracked properties can be read and written to', (assert) => {
16
+ const obj = new F.Tom();
17
+ assert.strictEqual(obj.firstName, 'Tom');
18
+ obj.firstName = 'Edsger';
19
+ assert.strictEqual(obj.firstName, 'Edsger');
20
+ });
21
+ test('can request a tag for a property', (assert) => {
22
+ const obj = new F.Tom();
23
+ assert.strictEqual(obj.firstName, 'Tom');
24
+ const tag = track(() => {
25
+ obj.firstName;
26
+ });
27
+ let snapshot = valueForTag(tag);
28
+ assert.ok(validateTag(tag, snapshot), 'tag should be valid to start');
29
+ obj.firstName = 'Edsger';
30
+ assert.strictEqual(validateTag(tag, snapshot), false, 'tag is invalidated after property is set');
31
+ snapshot = valueForTag(tag);
32
+ assert.strictEqual(validateTag(tag, snapshot), true, 'tag is valid on the second check');
33
+ assertValidAfterUnrelatedBump(tag, snapshot);
34
+ });
35
+ test('can request a tag from a frozen class instance', (assert) => {
36
+ const obj = Object.freeze(new F.Toran());
37
+ assert.strictEqual(obj.firstName, 'Toran');
38
+ assert.strictEqual(obj.lastName, 'Billups');
39
+ // Explicitly annotated tracked properties
40
+ let tag = track(() => {
41
+ obj.firstName;
42
+ });
43
+ let snapshot = valueForTag(tag);
44
+ assert.ok(validateTag(tag, snapshot), 'tag should be valid to start');
45
+ snapshot = valueForTag(tag);
46
+ assert.strictEqual(validateTag(tag, snapshot), true, 'tag is still valid');
47
+ // Non-tracked data properties
48
+ tag = track(() => {
49
+ obj.lastName;
50
+ });
51
+ snapshot = valueForTag(tag);
52
+ assert.ok(validateTag(tag, snapshot), 'tag should be valid to start');
53
+ snapshot = valueForTag(tag);
54
+ assert.strictEqual(validateTag(tag, snapshot), true, 'tag is still valid');
55
+ assertValidAfterUnrelatedBump(tag, snapshot);
56
+ });
57
+ test('can request a tag from an instance of a frozen class', (assert) => {
58
+ const obj = Object.freeze(new F.FrozenToran());
59
+ assert.strictEqual(obj.firstName, 'Toran');
60
+ const tag = track(() => {
61
+ obj.firstName;
62
+ });
63
+ let snapshot = valueForTag(tag);
64
+ assert.ok(validateTag(tag, snapshot), 'tag should be valid to start');
65
+ snapshot = valueForTag(tag);
66
+ assert.strictEqual(validateTag(tag, snapshot), true, 'tag is still valid');
67
+ assertValidAfterUnrelatedBump(tag, snapshot);
68
+ });
69
+ test('can track a getter', (assert) => {
70
+ const obj = new F.PersonWithCount();
71
+ assert.strictEqual(obj.firstName, 'Tom0');
72
+ assert.strictEqual(obj.firstName, 'Tom1');
73
+ const tag = track(() => {
74
+ obj.firstName;
75
+ });
76
+ let snapshot = valueForTag(tag);
77
+ assert.ok(validateTag(tag, snapshot), 'tag should be valid to start');
78
+ assert.strictEqual(obj.firstName, 'Tom3');
79
+ assert.ok(validateTag(tag, snapshot), 'reading from property does not invalidate the tag');
80
+ obj.firstName = 'Edsger';
81
+ assert.strictEqual(validateTag(tag, snapshot), false, 'tag is invalidated after property is set');
82
+ snapshot = valueForTag(tag);
83
+ assertValidAfterUnrelatedBump(tag, snapshot);
84
+ });
85
+ test('getters are invalidated when their dependencies are invalidated', (assert) => {
86
+ const obj = new F.PersonWithSalutation();
87
+ assert.strictEqual(obj.salutation, 'Hello, Tom Dale!', `the saluation field is valid`);
88
+ assert.strictEqual(obj.fullName, 'Tom Dale', `the fullName field is valid`);
89
+ const tag = track(() => {
90
+ obj.salutation;
91
+ });
92
+ let snapshot = valueForTag(tag);
93
+ assert.ok(validateTag(tag, snapshot), 'tag should be valid to start');
94
+ obj.firstName = 'Edsger';
95
+ obj.lastName = 'Dijkstra';
96
+ assert.strictEqual(validateTag(tag, snapshot), false, 'tag is invalidated after chained dependency is set');
97
+ assert.strictEqual(obj.fullName, 'Edsger Dijkstra');
98
+ assert.strictEqual(obj.salutation, 'Hello, Edsger Dijkstra!');
99
+ snapshot = valueForTag(tag);
100
+ assert.strictEqual(validateTag(tag, snapshot), true);
101
+ obj.fullName = 'Alan Kay';
102
+ assert.strictEqual(validateTag(tag, snapshot), false, 'tag is invalidated after chained dependency is set');
103
+ assert.strictEqual(obj.fullName, 'Alan Kay');
104
+ assert.strictEqual(obj.firstName, 'Alan');
105
+ assert.strictEqual(obj.lastName, 'Kay');
106
+ assert.strictEqual(obj.salutation, 'Hello, Alan Kay!');
107
+ snapshot = valueForTag(tag);
108
+ assert.strictEqual(validateTag(tag, snapshot), true);
109
+ assertValidAfterUnrelatedBump(tag, snapshot);
110
+ });
111
+ test('nested @tracked in multiple objects', (assert) => {
112
+ const obj = new F.Contact(new F.PersonForContact(), 'tom@example.com');
113
+ assert.strictEqual(obj.contact, 'Tom Dale @ tom@example.com', `the contact field is valid`);
114
+ assert.strictEqual(obj.person.fullName, 'Tom Dale', `the fullName field is valid`);
115
+ const person = obj.person;
116
+ const tag = track(() => {
117
+ obj.contact;
118
+ });
119
+ let snapshot = valueForTag(tag);
120
+ assert.ok(validateTag(tag, snapshot), 'tag should be valid to start');
121
+ person.firstName = 'Edsger';
122
+ person.lastName = 'Dijkstra';
123
+ assert.strictEqual(validateTag(tag, snapshot), false, 'tag is invalidated after nested dependency is set');
124
+ assert.strictEqual(person.fullName, 'Edsger Dijkstra');
125
+ assert.strictEqual(obj.contact, 'Edsger Dijkstra @ tom@example.com');
126
+ snapshot = valueForTag(tag);
127
+ assert.strictEqual(validateTag(tag, snapshot), true);
128
+ person.fullName = 'Alan Kay';
129
+ assert.strictEqual(validateTag(tag, snapshot), false, 'tag is invalidated after chained dependency is set');
130
+ assert.strictEqual(person.fullName, 'Alan Kay');
131
+ assert.strictEqual(person.firstName, 'Alan');
132
+ assert.strictEqual(person.lastName, 'Kay');
133
+ assert.strictEqual(obj.contact, 'Alan Kay @ tom@example.com');
134
+ snapshot = valueForTag(tag);
135
+ assert.strictEqual(validateTag(tag, snapshot), true);
136
+ obj.email = 'alan@example.com';
137
+ assert.strictEqual(validateTag(tag, snapshot), false, 'tag is invalidated after chained dependency is set');
138
+ assert.strictEqual(person.fullName, 'Alan Kay');
139
+ assert.strictEqual(person.firstName, 'Alan');
140
+ assert.strictEqual(person.lastName, 'Kay');
141
+ assert.strictEqual(obj.contact, 'Alan Kay @ alan@example.com');
142
+ snapshot = valueForTag(tag);
143
+ assert.strictEqual(validateTag(tag, snapshot), true);
144
+ assertValidAfterUnrelatedBump(tag, snapshot);
145
+ });
146
+ if (DEBUG) {
147
+ test('Tracked decorator with a getter throws an error', (assert) => {
148
+ assert.throws(F.createClassWithTrackedGetter);
149
+ });
150
+ test('Tracked decorator with a setter throws an error', (assert) => {
151
+ assert.throws(F.createClassWithTrackedSetter);
152
+ });
153
+ test('Tracked decorator with arguments throws an error', function (assert) {
154
+ assert.throws(F.createClassWithTrackedDependentKeys, /@tracked\('firstName', 'lastName'\)/, 'the correct error is thrown');
155
+ });
156
+ test('Using @tracked as a decorator factory throws an error', function (assert) {
157
+ assert.throws(F.createClassWithTrackedAsDecoratorFactory, /@tracked\(\)/, 'The correct error is thrown');
158
+ });
159
+ }
160
+ });
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tlZC1kZWNvcmF0b3ItdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3RyYWNraW5nL3Rlc3QvdHJhY2tlZC1kZWNvcmF0b3ItdGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUV2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJFLE9BQU8sS0FBSyxVQUFVLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsNkRBQTZEO0FBQzdELGFBQWE7QUFDYixPQUFPLEtBQUssYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9EO0lBQ0UsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDO0lBQ3hCLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQztDQUMzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyx3REFBd0QsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUVqRixJQUFJLENBQUMsK0NBQStDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUMvRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekMsR0FBRyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDekIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFB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QUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFFL0QsUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFckQsNkJBQTZCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxLQUFLLEVBQUU7UUFDVCxJQUFJLENBQUMsaURBQWlELEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlEQUFpRCxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrREFBa0QsRUFBRSxVQUFVLE1BQU07WUFDdkUsTUFBTSxDQUFDLE1BQU0sQ0FDWCxDQUFDLENBQUMsbUNBQW1DLEVBQ3JDLHFDQUFxQyxFQUNyQyw2QkFBNkIsQ0FDOUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHVEQUF1RCxFQUFFLFVBQVUsTUFBTTtZQUM1RSxNQUFNLENBQUMsTUFBTSxDQUNYLENBQUMsQ0FBQyx3Q0FBd0MsRUFDMUMsY0FBYyxFQUNkLDZCQUE2QixDQUM5QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7S0FDSjtBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLWV4cHJlc3Npb24gKi9cbmNvbnN0IHsgdGVzdCB9ID0gUVVuaXQ7XG5cbmltcG9ydCB7IERFQlVHIH0gZnJvbSAnQGdsaW1tZXIvZW52JztcbmltcG9ydCB7IHRyYWNrLCB2YWx1ZUZvclRhZywgdmFsaWRhdGVUYWcgfSBmcm9tICdAZ2xpbW1lci92YWxpZGF0b3InO1xuXG5pbXBvcnQgKiBhcyBUU0ZpeHR1cmVzIGZyb20gJy4vZml4dHVyZXMvdHlwZXNjcmlwdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgKiBhcyBCYWJlbEZpeHR1cmVzIGZyb20gJy4vZml4dHVyZXMvYmFiZWwnO1xuaW1wb3J0IHsgYXNzZXJ0VmFsaWRBZnRlclVucmVsYXRlZEJ1bXAgfSBmcm9tICcuL2hlbHBlcnMvdGFncyc7XG5cbltcbiAgWydCYWJlbCcsIEJhYmVsRml4dHVyZXNdLFxuICBbJ1R5cGVTY3JpcHQnLCBUU0ZpeHR1cmVzXSxcbl0uZm9yRWFjaCgoW2NvbXBpbGVyLCBGXSkgPT4ge1xuICBRVW5pdC5tb2R1bGUoYFtAZ2xpbW1lci90cmFja2luZ10gVHJhY2tlZCBQcm9wZXJ0eSBEZWNvcmF0b3JzIHdpdGggJHtjb21waWxlcn1gKTtcblxuICB0ZXN0KCd0cmFja2VkIHByb3BlcnRpZXMgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4gdG8nLCAoYXNzZXJ0KSA9PiB7XG4gICAgY29uc3Qgb2JqID0gbmV3IEYuVG9tKCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5maXJzdE5hbWUsICdUb20nKTtcbiAgICBvYmouZmlyc3ROYW1lID0gJ0Vkc2dlcic7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5maXJzdE5hbWUsICdFZHNnZXInKTtcbiAgfSk7XG5cbiAgdGVzdCgnY2FuIHJlcXVlc3QgYSB0YWcgZm9yIGEgcHJvcGVydHknLCAoYXNzZXJ0KSA9PiB7XG4gICAgY29uc3Qgb2JqID0gbmV3IEYuVG9tKCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5maXJzdE5hbWUsICdUb20nKTtcblxuICAgIGNvbnN0IHRhZyA9IHRyYWNrKCgpID0+IHtcbiAgICAgIG9iai5maXJzdE5hbWU7XG4gICAgfSk7XG4gICAgbGV0IHNuYXBzaG90ID0gdmFsdWVGb3JUYWcodGFnKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksICd0YWcgc2hvdWxkIGJlIHZhbGlkIHRvIHN0YXJ0Jyk7XG5cbiAgICBvYmouZmlyc3ROYW1lID0gJ0Vkc2dlcic7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgdmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksXG4gICAgICBmYWxzZSxcbiAgICAgICd0YWcgaXMgaW52YWxpZGF0ZWQgYWZ0ZXIgcHJvcGVydHkgaXMgc2V0J1xuICAgICk7XG4gICAgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgdHJ1ZSwgJ3RhZyBpcyB2YWxpZCBvbiB0aGUgc2Vjb25kIGNoZWNrJyk7XG5cbiAgICBhc3NlcnRWYWxpZEFmdGVyVW5yZWxhdGVkQnVtcCh0YWcsIHNuYXBzaG90KTtcbiAgfSk7XG5cbiAgdGVzdCgnY2FuIHJlcXVlc3QgYSB0YWcgZnJvbSBhIGZyb3plbiBjbGFzcyBpbnN0YW5jZScsIChhc3NlcnQpID0+IHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuZnJlZXplKG5ldyBGLlRvcmFuKCkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouZmlyc3ROYW1lLCAnVG9yYW4nKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmxhc3ROYW1lLCAnQmlsbHVwcycpO1xuXG4gICAgLy8gRXhwbGljaXRseSBhbm5vdGF0ZWQgdHJhY2tlZCBwcm9wZXJ0aWVzXG4gICAgbGV0IHRhZyA9IHRyYWNrKCgpID0+IHtcbiAgICAgIG9iai5maXJzdE5hbWU7XG4gICAgfSk7XG4gICAgbGV0IHNuYXBzaG90ID0gdmFsdWVGb3JUYWcodGFnKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksICd0YWcgc2hvdWxkIGJlIHZhbGlkIHRvIHN0YXJ0Jyk7XG4gICAgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgdHJ1ZSwgJ3RhZyBpcyBzdGlsbCB2YWxpZCcpO1xuXG4gICAgLy8gTm9uLXRyYWNrZWQgZGF0YSBwcm9wZXJ0aWVzXG4gICAgdGFnID0gdHJhY2soKCkgPT4ge1xuICAgICAgb2JqLmxhc3ROYW1lO1xuICAgIH0pO1xuICAgIHNuYXBzaG90ID0gdmFsdWVGb3JUYWcodGFnKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksICd0YWcgc2hvdWxkIGJlIHZhbGlkIHRvIHN0YXJ0Jyk7XG4gICAgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgdHJ1ZSwgJ3RhZyBpcyBzdGlsbCB2YWxpZCcpO1xuXG4gICAgYXNzZXJ0VmFsaWRBZnRlclVucmVsYXRlZEJ1bXAodGFnLCBzbmFwc2hvdCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NhbiByZXF1ZXN0IGEgdGFnIGZyb20gYW4gaW5zdGFuY2Ugb2YgYSBmcm96ZW4gY2xhc3MnLCAoYXNzZXJ0KSA9PiB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmZyZWV6ZShuZXcgRi5Gcm96ZW5Ub3JhbigpKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouZmlyc3ROYW1lLCAnVG9yYW4nKTtcblxuICAgIGNvbnN0IHRhZyA9IHRyYWNrKCgpID0+IHtcbiAgICAgIG9iai5maXJzdE5hbWU7XG4gICAgfSk7XG4gICAgbGV0IHNuYXBzaG90ID0gdmFsdWVGb3JUYWcodGFnKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksICd0YWcgc2hvdWxkIGJlIHZhbGlkIHRvIHN0YXJ0Jyk7XG4gICAgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgdHJ1ZSwgJ3RhZyBpcyBzdGlsbCB2YWxpZCcpO1xuXG4gICAgYXNzZXJ0VmFsaWRBZnRlclVucmVsYXRlZEJ1bXAodGFnLCBzbmFwc2hvdCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NhbiB0cmFjayBhIGdldHRlcicsIChhc3NlcnQpID0+IHtcbiAgICBjb25zdCBvYmogPSBuZXcgRi5QZXJzb25XaXRoQ291bnQoKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmZpcnN0TmFtZSwgJ1RvbTAnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmZpcnN0TmFtZSwgJ1RvbTEnKTtcblxuICAgIGNvbnN0IHRhZyA9IHRyYWNrKCgpID0+IHtcbiAgICAgIG9iai5maXJzdE5hbWU7XG4gICAgfSk7XG4gICAgbGV0IHNuYXBzaG90ID0gdmFsdWVGb3JUYWcodGFnKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksICd0YWcgc2hvdWxkIGJlIHZhbGlkIHRvIHN0YXJ0Jyk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmZpcnN0TmFtZSwgJ1RvbTMnKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksICdyZWFkaW5nIGZyb20gcHJvcGVydHkgZG9lcyBub3QgaW52YWxpZGF0ZSB0aGUgdGFnJyk7XG5cbiAgICBvYmouZmlyc3ROYW1lID0gJ0Vkc2dlcic7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgdmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksXG4gICAgICBmYWxzZSxcbiAgICAgICd0YWcgaXMgaW52YWxpZGF0ZWQgYWZ0ZXIgcHJvcGVydHkgaXMgc2V0J1xuICAgICk7XG4gICAgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuXG4gICAgYXNzZXJ0VmFsaWRBZnRlclVucmVsYXRlZEJ1bXAodGFnLCBzbmFwc2hvdCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2dldHRlcnMgYXJlIGludmFsaWRhdGVkIHdoZW4gdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBpbnZhbGlkYXRlZCcsIChhc3NlcnQpID0+IHtcbiAgICBjb25zdCBvYmogPSBuZXcgRi5QZXJzb25XaXRoU2FsdXRhdGlvbigpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouc2FsdXRhdGlvbiwgJ0hlbGxvLCBUb20gRGFsZSEnLCBgdGhlIHNhbHVhdGlvbiBmaWVsZCBpcyB2YWxpZGApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouZnVsbE5hbWUsICdUb20gRGFsZScsIGB0aGUgZnVsbE5hbWUgZmllbGQgaXMgdmFsaWRgKTtcblxuICAgIGNvbnN0IHRhZyA9IHRyYWNrKCgpID0+IHtcbiAgICAgIG9iai5zYWx1dGF0aW9uO1xuICAgIH0pO1xuICAgIGxldCBzbmFwc2hvdCA9IHZhbHVlRm9yVGFnKHRhZyk7XG4gICAgYXNzZXJ0Lm9rKHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLCAndGFnIHNob3VsZCBiZSB2YWxpZCB0byBzdGFydCcpO1xuXG4gICAgb2JqLmZpcnN0TmFtZSA9ICdFZHNnZXInO1xuICAgIG9iai5sYXN0TmFtZSA9ICdEaWprc3RyYSc7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgdmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksXG4gICAgICBmYWxzZSxcbiAgICAgICd0YWcgaXMgaW52YWxpZGF0ZWQgYWZ0ZXIgY2hhaW5lZCBkZXBlbmRlbmN5IGlzIHNldCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouZnVsbE5hbWUsICdFZHNnZXIgRGlqa3N0cmEnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLnNhbHV0YXRpb24sICdIZWxsbywgRWRzZ2VyIERpamtzdHJhIScpO1xuXG4gICAgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgdHJ1ZSk7XG5cbiAgICBvYmouZnVsbE5hbWUgPSAnQWxhbiBLYXknO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLFxuICAgICAgZmFsc2UsXG4gICAgICAndGFnIGlzIGludmFsaWRhdGVkIGFmdGVyIGNoYWluZWQgZGVwZW5kZW5jeSBpcyBzZXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmZ1bGxOYW1lLCAnQWxhbiBLYXknKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmZpcnN0TmFtZSwgJ0FsYW4nKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmxhc3ROYW1lLCAnS2F5Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5zYWx1dGF0aW9uLCAnSGVsbG8sIEFsYW4gS2F5IScpO1xuXG4gICAgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgdHJ1ZSk7XG5cbiAgICBhc3NlcnRWYWxpZEFmdGVyVW5yZWxhdGVkQnVtcCh0YWcsIHNuYXBzaG90KTtcbiAgfSk7XG5cbiAgdGVzdCgnbmVzdGVkIEB0cmFja2VkIGluIG11bHRpcGxlIG9iamVjdHMnLCAoYXNzZXJ0KSA9PiB7XG4gICAgY29uc3Qgb2JqID0gbmV3IEYuQ29udGFjdChuZXcgRi5QZXJzb25Gb3JDb250YWN0KCksICd0b21AZXhhbXBsZS5jb20nKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmNvbnRhY3QsICdUb20gRGFsZSBAIHRvbUBleGFtcGxlLmNvbScsIGB0aGUgY29udGFjdCBmaWVsZCBpcyB2YWxpZGApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmoucGVyc29uLmZ1bGxOYW1lLCAnVG9tIERhbGUnLCBgdGhlIGZ1bGxOYW1lIGZpZWxkIGlzIHZhbGlkYCk7XG4gICAgY29uc3QgcGVyc29uID0gb2JqLnBlcnNvbjtcblxuICAgIGNvbnN0IHRhZyA9IHRyYWNrKCgpID0+IHtcbiAgICAgIG9iai5jb250YWN0O1xuICAgIH0pO1xuICAgIGxldCBzbmFwc2hvdCA9IHZhbHVlRm9yVGFnKHRhZyk7XG4gICAgYXNzZXJ0Lm9rKHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLCAndGFnIHNob3VsZCBiZSB2YWxpZCB0byBzdGFydCcpO1xuXG4gICAgcGVyc29uLmZpcnN0TmFtZSA9ICdFZHNnZXInO1xuICAgIHBlcnNvbi5sYXN0TmFtZSA9ICdEaWprc3RyYSc7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgdmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksXG4gICAgICBmYWxzZSxcbiAgICAgICd0YWcgaXMgaW52YWxpZGF0ZWQgYWZ0ZXIgbmVzdGVkIGRlcGVuZGVuY3kgaXMgc2V0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBlcnNvbi5mdWxsTmFtZSwgJ0Vkc2dlciBEaWprc3RyYScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouY29udGFjdCwgJ0Vkc2dlciBEaWprc3RyYSBAIHRvbUBleGFtcGxlLmNvbScpO1xuXG4gICAgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgdHJ1ZSk7XG5cbiAgICBwZXJzb24uZnVsbE5hbWUgPSAnQWxhbiBLYXknO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLFxuICAgICAgZmFsc2UsXG4gICAgICAndGFnIGlzIGludmFsaWRhdGVkIGFmdGVyIGNoYWluZWQgZGVwZW5kZW5jeSBpcyBzZXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGVyc29uLmZ1bGxOYW1lLCAnQWxhbiBLYXknKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGVyc29uLmZpcnN0TmFtZSwgJ0FsYW4nKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGVyc29uLmxhc3ROYW1lLCAnS2F5Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5jb250YWN0LCAnQWxhbiBLYXkgQCB0b21AZXhhbXBsZS5jb20nKTtcblxuICAgIHNuYXBzaG90ID0gdmFsdWVGb3JUYWcodGFnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksIHRydWUpO1xuXG4gICAgb2JqLmVtYWlsID0gJ2FsYW5AZXhhbXBsZS5jb20nO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLFxuICAgICAgZmFsc2UsXG4gICAgICAndGFnIGlzIGludmFsaWRhdGVkIGFmdGVyIGNoYWluZWQgZGVwZW5kZW5jeSBpcyBzZXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGVyc29uLmZ1bGxOYW1lLCAnQWxhbiBLYXknKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGVyc29uLmZpcnN0TmFtZSwgJ0FsYW4nKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGVyc29uLmxhc3ROYW1lLCAnS2F5Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5jb250YWN0LCAnQWxhbiBLYXkgQCBhbGFuQGV4YW1wbGUuY29tJyk7XG5cbiAgICBzbmFwc2hvdCA9IHZhbHVlRm9yVGFnKHRhZyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLCB0cnVlKTtcblxuICAgIGFzc2VydFZhbGlkQWZ0ZXJVbnJlbGF0ZWRCdW1wKHRhZywgc25hcHNob3QpO1xuICB9KTtcblxuICBpZiAoREVCVUcpIHtcbiAgICB0ZXN0KCdUcmFja2VkIGRlY29yYXRvciB3aXRoIGEgZ2V0dGVyIHRocm93cyBhbiBlcnJvcicsIChhc3NlcnQpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoRi5jcmVhdGVDbGFzc1dpdGhUcmFja2VkR2V0dGVyKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ1RyYWNrZWQgZGVjb3JhdG9yIHdpdGggYSBzZXR0ZXIgdGhyb3dzIGFuIGVycm9yJywgKGFzc2VydCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhGLmNyZWF0ZUNsYXNzV2l0aFRyYWNrZWRTZXR0ZXIpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnVHJhY2tlZCBkZWNvcmF0b3Igd2l0aCBhcmd1bWVudHMgdGhyb3dzIGFuIGVycm9yJywgZnVuY3Rpb24gKGFzc2VydCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgRi5jcmVhdGVDbGFzc1dpdGhUcmFja2VkRGVwZW5kZW50S2V5cyxcbiAgICAgICAgL0B0cmFja2VkXFwoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZSdcXCkvLFxuICAgICAgICAndGhlIGNvcnJlY3QgZXJyb3IgaXMgdGhyb3duJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ1VzaW5nIEB0cmFja2VkIGFzIGEgZGVjb3JhdG9yIGZhY3RvcnkgdGhyb3dzIGFuIGVycm9yJywgZnVuY3Rpb24gKGFzc2VydCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgRi5jcmVhdGVDbGFzc1dpdGhUcmFja2VkQXNEZWNvcmF0b3JGYWN0b3J5LFxuICAgICAgICAvQHRyYWNrZWRcXChcXCkvLFxuICAgICAgICAnVGhlIGNvcnJlY3QgZXJyb3IgaXMgdGhyb3duJ1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ name: '@norith/glimmer-tracking',
5
+ };
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@norith/glimmer-tracking",
3
+ "version": "1.0.0",
4
+ "description": "Glimmer property tracking library",
5
+ "keywords": [
6
+ "ember-addon"
7
+ ],
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/snorith/glimmer.js.git"
11
+ },
12
+ "license": "MIT",
13
+ "contributors": [
14
+ "Dan Gebhardt <dan@cerebris.com>",
15
+ "Tom Dale <tom@tomdale.net>"
16
+ ],
17
+ "main": "dist/commonjs/index.js",
18
+ "module": "dist/modules/index.js",
19
+ "files": [
20
+ "dist",
21
+ "ember-addon-main.js"
22
+ ],
23
+ "dependencies": {
24
+ "@glimmer/env": "^0.1.7",
25
+ "@glimmer/validator": "0.84.0"
26
+ },
27
+ "devDependencies": {
28
+ "@glimmer/application-test-helpers": "^1.0.0",
29
+ "@glimmer/compiler": "0.84.0",
30
+ "@glimmer/interfaces": "0.84.0",
31
+ "@glimmer/resolver": "^0.4.3",
32
+ "@glimmer/wire-format": "0.84.0"
33
+ },
34
+ "ember-addon": {
35
+ "main": "ember-addon-main.js"
36
+ },
37
+ "publishConfig": {
38
+ "access": "public",
39
+ "registry": "https://registry.npmjs.org"
40
+ }
41
+ }