@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,297 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createClassWithCachedAsDecoratorFactory = exports.createClassWithTrackedAsDecoratorFactory = exports.createClassWithCachedDependentKeys = exports.createClassWithTrackedDependentKeys = exports.createClassWithCachedSetter = exports.createClassWithTrackedSetter = exports.createClassWithCachedProperty = exports.createClassWithTrackedGetter = exports.PersonForContact = exports.Contact = exports.PersonWithSalutation = exports.PersonWithCount = exports.FrozenToran = exports.Toran = exports.Tom = void 0;
10
+ const glimmer_tracking_1 = require("@norith/glimmer-tracking");
11
+ class Tom {
12
+ constructor() {
13
+ this.firstName = 'Tom';
14
+ }
15
+ }
16
+ __decorate([
17
+ glimmer_tracking_1.tracked
18
+ ], Tom.prototype, "firstName", void 0);
19
+ exports.Tom = Tom;
20
+ class Toran {
21
+ constructor() {
22
+ this.firstName = 'Toran';
23
+ this.lastName = 'Billups';
24
+ }
25
+ }
26
+ __decorate([
27
+ glimmer_tracking_1.tracked
28
+ ], Toran.prototype, "firstName", void 0);
29
+ exports.Toran = Toran;
30
+ class FrozenToran {
31
+ constructor() {
32
+ this.firstName = 'Toran';
33
+ this.lastName = 'Billups';
34
+ }
35
+ }
36
+ __decorate([
37
+ glimmer_tracking_1.tracked
38
+ ], FrozenToran.prototype, "firstName", void 0);
39
+ exports.FrozenToran = FrozenToran;
40
+ Object.freeze(FrozenToran);
41
+ class PersonWithCount {
42
+ constructor() {
43
+ this._firstName = 'Tom';
44
+ this._count = 0;
45
+ }
46
+ get firstName() {
47
+ return this._firstName + this._count++;
48
+ }
49
+ set firstName(value) {
50
+ this._firstName = value;
51
+ }
52
+ }
53
+ __decorate([
54
+ glimmer_tracking_1.tracked
55
+ ], PersonWithCount.prototype, "_firstName", void 0);
56
+ exports.PersonWithCount = PersonWithCount;
57
+ class PersonWithSalutation {
58
+ constructor() {
59
+ this.firstName = 'Tom';
60
+ this.lastName = 'Dale';
61
+ }
62
+ get salutation() {
63
+ return `Hello, ${this.fullName}!`;
64
+ }
65
+ get fullName() {
66
+ return `${this.firstName} ${this.lastName}`;
67
+ }
68
+ set fullName(fullName) {
69
+ const [firstName, lastName] = fullName.split(' ');
70
+ this.firstName = firstName;
71
+ this.lastName = lastName;
72
+ }
73
+ }
74
+ __decorate([
75
+ glimmer_tracking_1.tracked
76
+ ], PersonWithSalutation.prototype, "firstName", void 0);
77
+ __decorate([
78
+ glimmer_tracking_1.tracked
79
+ ], PersonWithSalutation.prototype, "lastName", void 0);
80
+ exports.PersonWithSalutation = PersonWithSalutation;
81
+ class Contact {
82
+ constructor(person, email) {
83
+ this.person = person;
84
+ this.email = email;
85
+ }
86
+ get contact() {
87
+ return `${this.person} @ ${this.email}`;
88
+ }
89
+ }
90
+ __decorate([
91
+ glimmer_tracking_1.tracked
92
+ ], Contact.prototype, "email", void 0);
93
+ __decorate([
94
+ glimmer_tracking_1.tracked
95
+ ], Contact.prototype, "person", void 0);
96
+ exports.Contact = Contact;
97
+ class PersonForContact {
98
+ constructor() {
99
+ this.firstName = 'Tom';
100
+ this.lastName = 'Dale';
101
+ }
102
+ get salutation() {
103
+ return `Hello, ${this.fullName}!`;
104
+ }
105
+ get fullName() {
106
+ return `${this.firstName} ${this.lastName}`;
107
+ }
108
+ set fullName(fullName) {
109
+ const [firstName, lastName] = fullName.split(' ');
110
+ this.firstName = firstName;
111
+ this.lastName = lastName;
112
+ }
113
+ toString() {
114
+ return this.fullName;
115
+ }
116
+ }
117
+ __decorate([
118
+ glimmer_tracking_1.tracked
119
+ ], PersonForContact.prototype, "firstName", void 0);
120
+ __decorate([
121
+ glimmer_tracking_1.tracked
122
+ ], PersonForContact.prototype, "lastName", void 0);
123
+ exports.PersonForContact = PersonForContact;
124
+ function createClassWithTrackedGetter() {
125
+ class PersonWithTrackedGetter {
126
+ constructor() {
127
+ this.firstName = 'Tom';
128
+ }
129
+ get salutation() {
130
+ return `Hello, ${this.firstName} ${this.lastName}!`;
131
+ }
132
+ }
133
+ __decorate([
134
+ glimmer_tracking_1.tracked
135
+ ], PersonWithTrackedGetter.prototype, "firstName", void 0);
136
+ __decorate([
137
+ glimmer_tracking_1.tracked
138
+ ], PersonWithTrackedGetter.prototype, "lastName", void 0);
139
+ __decorate([
140
+ glimmer_tracking_1.tracked
141
+ ], PersonWithTrackedGetter.prototype, "salutation", null);
142
+ return new PersonWithTrackedGetter();
143
+ }
144
+ exports.createClassWithTrackedGetter = createClassWithTrackedGetter;
145
+ function createClassWithCachedProperty() {
146
+ class PersonWithCachedProperty {
147
+ constructor() {
148
+ this.firstName = 'Tom';
149
+ }
150
+ }
151
+ __decorate([
152
+ glimmer_tracking_1.cached
153
+ ], PersonWithCachedProperty.prototype, "firstName", void 0);
154
+ return new PersonWithCachedProperty();
155
+ }
156
+ exports.createClassWithCachedProperty = createClassWithCachedProperty;
157
+ function createClassWithTrackedSetter() {
158
+ class PersonWithTrackedSetter {
159
+ constructor() {
160
+ this.firstName = 'Tom';
161
+ }
162
+ // @ts-ignore
163
+ set fullName(fullName) {
164
+ const [firstName, lastName] = fullName.split(' ');
165
+ this.firstName = firstName;
166
+ this.lastName = lastName;
167
+ }
168
+ }
169
+ __decorate([
170
+ glimmer_tracking_1.tracked
171
+ ], PersonWithTrackedSetter.prototype, "firstName", void 0);
172
+ __decorate([
173
+ glimmer_tracking_1.tracked
174
+ ], PersonWithTrackedSetter.prototype, "lastName", void 0);
175
+ __decorate([
176
+ glimmer_tracking_1.tracked
177
+ ], PersonWithTrackedSetter.prototype, "fullName", null);
178
+ return new PersonWithTrackedSetter();
179
+ }
180
+ exports.createClassWithTrackedSetter = createClassWithTrackedSetter;
181
+ function createClassWithCachedSetter() {
182
+ class PersonWithCachedSetter {
183
+ constructor() {
184
+ this.firstName = 'Tom';
185
+ }
186
+ // @ts-ignore
187
+ set fullName(fullName) {
188
+ const [firstName, lastName] = fullName.split(' ');
189
+ this.firstName = firstName;
190
+ this.lastName = lastName;
191
+ }
192
+ }
193
+ __decorate([
194
+ glimmer_tracking_1.tracked
195
+ ], PersonWithCachedSetter.prototype, "firstName", void 0);
196
+ __decorate([
197
+ glimmer_tracking_1.tracked
198
+ ], PersonWithCachedSetter.prototype, "lastName", void 0);
199
+ __decorate([
200
+ glimmer_tracking_1.cached
201
+ ], PersonWithCachedSetter.prototype, "fullName", null);
202
+ return new PersonWithCachedSetter();
203
+ }
204
+ exports.createClassWithCachedSetter = createClassWithCachedSetter;
205
+ function createClassWithTrackedDependentKeys() {
206
+ class DependentKeysAreCool {
207
+ constructor() {
208
+ this.firstName = 'Tom';
209
+ this.lastName = 'Dale';
210
+ }
211
+ // @ts-ignore
212
+ fullName() {
213
+ return `${this.firstName} ${this.lastName}`;
214
+ }
215
+ }
216
+ __decorate([
217
+ glimmer_tracking_1.tracked('firstName', 'lastName')
218
+ ], DependentKeysAreCool.prototype, "fullName", null);
219
+ __decorate([
220
+ glimmer_tracking_1.tracked
221
+ ], DependentKeysAreCool.prototype, "firstName", void 0);
222
+ __decorate([
223
+ glimmer_tracking_1.tracked
224
+ ], DependentKeysAreCool.prototype, "lastName", void 0);
225
+ return new DependentKeysAreCool();
226
+ }
227
+ exports.createClassWithTrackedDependentKeys = createClassWithTrackedDependentKeys;
228
+ function createClassWithCachedDependentKeys() {
229
+ class DependentKeysAreCool {
230
+ constructor() {
231
+ this.firstName = 'Tom';
232
+ this.lastName = 'Dale';
233
+ }
234
+ // @ts-ignore
235
+ fullName() {
236
+ return `${this.firstName} ${this.lastName}`;
237
+ }
238
+ }
239
+ __decorate([
240
+ glimmer_tracking_1.cached('firstName', 'lastName')
241
+ ], DependentKeysAreCool.prototype, "fullName", null);
242
+ __decorate([
243
+ glimmer_tracking_1.tracked
244
+ ], DependentKeysAreCool.prototype, "firstName", void 0);
245
+ __decorate([
246
+ glimmer_tracking_1.tracked
247
+ ], DependentKeysAreCool.prototype, "lastName", void 0);
248
+ return new DependentKeysAreCool();
249
+ }
250
+ exports.createClassWithCachedDependentKeys = createClassWithCachedDependentKeys;
251
+ function createClassWithTrackedAsDecoratorFactory() {
252
+ class DependentKeysAreCool {
253
+ constructor() {
254
+ this.firstName = 'Tom';
255
+ this.lastName = 'Dale';
256
+ }
257
+ // @ts-ignore
258
+ fullName() {
259
+ return `${this.firstName} ${this.lastName}`;
260
+ }
261
+ }
262
+ __decorate([
263
+ glimmer_tracking_1.tracked()
264
+ ], DependentKeysAreCool.prototype, "fullName", null);
265
+ __decorate([
266
+ glimmer_tracking_1.tracked
267
+ ], DependentKeysAreCool.prototype, "firstName", void 0);
268
+ __decorate([
269
+ glimmer_tracking_1.tracked
270
+ ], DependentKeysAreCool.prototype, "lastName", void 0);
271
+ return new DependentKeysAreCool();
272
+ }
273
+ exports.createClassWithTrackedAsDecoratorFactory = createClassWithTrackedAsDecoratorFactory;
274
+ function createClassWithCachedAsDecoratorFactory() {
275
+ class DependentKeysAreCool {
276
+ constructor() {
277
+ this.firstName = 'Tom';
278
+ this.lastName = 'Dale';
279
+ }
280
+ // @ts-ignore
281
+ fullName() {
282
+ return `${this.firstName} ${this.lastName}`;
283
+ }
284
+ }
285
+ __decorate([
286
+ glimmer_tracking_1.cached()
287
+ ], DependentKeysAreCool.prototype, "fullName", null);
288
+ __decorate([
289
+ glimmer_tracking_1.tracked
290
+ ], DependentKeysAreCool.prototype, "firstName", void 0);
291
+ __decorate([
292
+ glimmer_tracking_1.tracked
293
+ ], DependentKeysAreCool.prototype, "lastName", void 0);
294
+ return new DependentKeysAreCool();
295
+ }
296
+ exports.createClassWithCachedAsDecoratorFactory = createClassWithCachedAsDecoratorFactory;
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3RyYWNraW5nL3Rlc3QvZml4dHVyZXMvdHlwZXNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSwrREFBMkQ7QUFFM0QsTUFBYSxHQUFHO0lBQWhCO1FBQ1csY0FBUyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0NBQUE7QUFEVTtJQUFSLDBCQUFPO3NDQUFtQjtBQUQ3QixrQkFFQztBQUVELE1BQWEsS0FBSztJQUFsQjtRQUNXLGNBQVMsR0FBRyxPQUFPLENBQUM7UUFDN0IsYUFBUSxHQUFHLFNBQVMsQ0FBQztJQUN2QixDQUFDO0NBQUE7QUFGVTtJQUFSLDBCQUFPO3dDQUFxQjtBQUQvQixzQkFHQztBQUVELE1BQU0sV0FBVztJQUFqQjtRQUNXLGNBQVMsR0FBRyxPQUFPLENBQUM7UUFDN0IsYUFBUSxHQUFHLFNBQVMsQ0FBQztJQUN2QixDQUFDO0NBQUE7QUFGVTtJQUFSLDBCQUFPOzhDQUFxQjtBQU10QixrQ0FBVztBQUZwQixNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBSTNCLE1BQWEsZUFBZTtJQUE1QjtRQUNXLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDNUIsV0FBTSxHQUFHLENBQUMsQ0FBQztJQVNiLENBQUM7SUFQQyxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFLO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQVZVO0lBQVIsMEJBQU87bURBQW9CO0FBRDlCLDBDQVdDO0FBRUQsTUFBYSxvQkFBb0I7SUFBakM7UUFlVyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGFB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QztZQUNsQixhQUFRLEdBQUcsTUFBTSxDQUFDO1FBQzdCLENBQUM7UUFQQyxhQUFhO1FBQ0gsUUFBUTtZQUNoQixPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUMsQ0FBQztLQUlGO0lBTlc7UUFBVCx5QkFBTSxFQUFFO3dEQUVSO0lBRVE7UUFBUiwwQkFBTzsyREFBbUI7SUFDbEI7UUFBUiwwQkFBTzswREFBbUI7SUFFN0IsT0FBTyxJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFDcEMsQ0FBQztBQVhELDBGQVdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FjaGVkLCB0cmFja2VkIH0gZnJvbSAnQG5vcml0aC9nbGltbWVyLXRyYWNraW5nJztcblxuZXhwb3J0IGNsYXNzIFRvbSB7XG4gIEB0cmFja2VkIGZpcnN0TmFtZSA9ICdUb20nO1xufVxuXG5leHBvcnQgY2xhc3MgVG9yYW4ge1xuICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9yYW4nO1xuICBsYXN0TmFtZSA9ICdCaWxsdXBzJztcbn1cblxuY2xhc3MgRnJvemVuVG9yYW4ge1xuICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9yYW4nO1xuICBsYXN0TmFtZSA9ICdCaWxsdXBzJztcbn1cblxuT2JqZWN0LmZyZWV6ZShGcm96ZW5Ub3Jhbik7XG5cbmV4cG9ydCB7IEZyb3plblRvcmFuIH07XG5cbmV4cG9ydCBjbGFzcyBQZXJzb25XaXRoQ291bnQge1xuICBAdHJhY2tlZCBfZmlyc3ROYW1lID0gJ1RvbSc7XG4gIF9jb3VudCA9IDA7XG5cbiAgZ2V0IGZpcnN0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlyc3ROYW1lICsgdGhpcy5fY291bnQrKztcbiAgfVxuXG4gIHNldCBmaXJzdE5hbWUodmFsdWUpIHtcbiAgICB0aGlzLl9maXJzdE5hbWUgPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGVyc29uV2l0aFNhbHV0YXRpb24ge1xuICBnZXQgc2FsdXRhdGlvbigpIHtcbiAgICByZXR1cm4gYEhlbGxvLCAke3RoaXMuZnVsbE5hbWV9IWA7XG4gIH1cblxuICBnZXQgZnVsbE5hbWUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuZmlyc3ROYW1lfSAke3RoaXMubGFzdE5hbWV9YDtcbiAgfVxuXG4gIHNldCBmdWxsTmFtZShmdWxsTmFtZSkge1xuICAgIGNvbnN0IFtmaXJzdE5hbWUsIGxhc3ROYW1lXSA9IGZ1bGxOYW1lLnNwbGl0KCcgJyk7XG4gICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7XG4gICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lO1xuICB9XG5cbiAgQHRyYWNrZWQgZmlyc3ROYW1lID0gJ1RvbSc7XG4gIEB0cmFja2VkIGxhc3ROYW1lID0gJ0RhbGUnO1xufVxuXG5leHBvcnQgY2xhc3MgQ29udGFjdCB7XG4gIEB0cmFja2VkIGVtYWlsOiBzdHJpbmc7XG4gIEB0cmFja2VkIHBlcnNvbjogUGVyc29uRm9yQ29udGFjdDtcblxuICBjb25zdHJ1Y3RvcihwZXJzb246IFBlcnNvbkZvckNvbnRhY3QsIGVtYWlsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBlcnNvbiA9IHBlcnNvbjtcbiAgICB0aGlzLmVtYWlsID0gZW1haWw7XG4gIH1cblxuICBnZXQgY29udGFjdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnBlcnNvbn0gQCAke3RoaXMuZW1haWx9YDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGVyc29uRm9yQ29udGFjdCB7XG4gIGdldCBzYWx1dGF0aW9uKCkge1xuICAgIHJldHVybiBgSGVsbG8sICR7dGhpcy5mdWxsTmFtZX0hYDtcbiAgfVxuXG4gIGdldCBmdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmZpcnN0TmFtZX0gJHt0aGlzLmxhc3ROYW1lfWA7XG4gIH1cblxuICBzZXQgZnVsbE5hbWUoZnVsbE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IFtmaXJzdE5hbWUsIGxhc3ROYW1lXSA9IGZ1bGxOYW1lLnNwbGl0KCcgJyk7XG4gICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7XG4gICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVsbE5hbWU7XG4gIH1cblxuICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9tJztcbiAgQHRyYWNrZWQgbGFzdE5hbWUgPSAnRGFsZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGFzc1dpdGhUcmFja2VkR2V0dGVyKCk6IGFueSB7XG4gIGNsYXNzIFBlcnNvbldpdGhUcmFja2VkR2V0dGVyIHtcbiAgICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9tJztcbiAgICBAdHJhY2tlZCBsYXN0TmFtZTogYW55O1xuXG4gICAgQHRyYWNrZWQgZ2V0IHNhbHV0YXRpb24oKSB7XG4gICAgICByZXR1cm4gYEhlbGxvLCAke3RoaXMuZmlyc3ROYW1lfSAke3RoaXMubGFzdE5hbWV9IWA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQZXJzb25XaXRoVHJhY2tlZEdldHRlcigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xhc3NXaXRoQ2FjaGVkUHJvcGVydHkoKTogYW55IHtcbiAgY2xhc3MgUGVyc29uV2l0aENhY2hlZFByb3BlcnR5IHtcbiAgICBAY2FjaGVkIGZpcnN0TmFtZSA9ICdUb20nO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQZXJzb25XaXRoQ2FjaGVkUHJvcGVydHkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsYXNzV2l0aFRyYWNrZWRTZXR0ZXIoKTogYW55IHtcbiAgY2xhc3MgUGVyc29uV2l0aFRyYWNrZWRTZXR0ZXIge1xuICAgIEB0cmFja2VkIGZpcnN0TmFtZSA9ICdUb20nO1xuICAgIEB0cmFja2VkIGxhc3ROYW1lOiBhbnk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgQHRyYWNrZWQgc2V0IGZ1bGxOYW1lKGZ1bGxOYW1lKSB7XG4gICAgICBjb25zdCBbZmlyc3ROYW1lLCBsYXN0TmFtZV0gPSBmdWxsTmFtZS5zcGxpdCgnICcpO1xuICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7XG4gICAgICB0aGlzLmxhc3ROYW1lID0gbGFzdE5hbWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQZXJzb25XaXRoVHJhY2tlZFNldHRlcigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xhc3NXaXRoQ2FjaGVkU2V0dGVyKCk6IGFueSB7XG4gIGNsYXNzIFBlcnNvbldpdGhDYWNoZWRTZXR0ZXIge1xuICAgIEB0cmFja2VkIGZpcnN0TmFtZSA9ICdUb20nO1xuICAgIEB0cmFja2VkIGxhc3ROYW1lOiBhbnk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgQGNhY2hlZCBzZXQgZnVsbE5hbWUoZnVsbE5hbWUpIHtcbiAgICAgIGNvbnN0IFtmaXJzdE5hbWUsIGxhc3ROYW1lXSA9IGZ1bGxOYW1lLnNwbGl0KCcgJyk7XG4gICAgICB0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTtcbiAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFBlcnNvbldpdGhDYWNoZWRTZXR0ZXIoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsYXNzV2l0aFRyYWNrZWREZXBlbmRlbnRLZXlzKCk6IGFueSB7XG4gIGNsYXNzIERlcGVuZGVudEtleXNBcmVDb29sIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgQHRyYWNrZWQoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScpIGZ1bGxOYW1lKCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZmlyc3ROYW1lfSAke3RoaXMubGFzdE5hbWV9YDtcbiAgICB9XG5cbiAgICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9tJztcbiAgICBAdHJhY2tlZCBsYXN0TmFtZSA9ICdEYWxlJztcbiAgfVxuICByZXR1cm4gbmV3IERlcGVuZGVudEtleXNBcmVDb29sKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGFzc1dpdGhDYWNoZWREZXBlbmRlbnRLZXlzKCk6IGFueSB7XG4gIGNsYXNzIERlcGVuZGVudEtleXNBcmVDb29sIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgQGNhY2hlZCgnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJykgZnVsbE5hbWUoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5maXJzdE5hbWV9ICR7dGhpcy5sYXN0TmFtZX1gO1xuICAgIH1cblxuICAgIEB0cmFja2VkIGZpcnN0TmFtZSA9ICdUb20nO1xuICAgIEB0cmFja2VkIGxhc3ROYW1lID0gJ0RhbGUnO1xuICB9XG4gIHJldHVybiBuZXcgRGVwZW5kZW50S2V5c0FyZUNvb2woKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsYXNzV2l0aFRyYWNrZWRBc0RlY29yYXRvckZhY3RvcnkoKTogYW55IHtcbiAgY2xhc3MgRGVwZW5kZW50S2V5c0FyZUNvb2wge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBAdHJhY2tlZCgpIGZ1bGxOYW1lKCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZmlyc3ROYW1lfSAke3RoaXMubGFzdE5hbWV9YDtcbiAgICB9XG5cbiAgICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnVG9tJztcbiAgICBAdHJhY2tlZCBsYXN0TmFtZSA9ICdEYWxlJztcbiAgfVxuICByZXR1cm4gbmV3IERlcGVuZGVudEtleXNBcmVDb29sKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGFzc1dpdGhDYWNoZWRBc0RlY29yYXRvckZhY3RvcnkoKTogYW55IHtcbiAgY2xhc3MgRGVwZW5kZW50S2V5c0FyZUNvb2wge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBAY2FjaGVkKCkgZnVsbE5hbWUoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5maXJzdE5hbWV9ICR7dGhpcy5sYXN0TmFtZX1gO1xuICAgIH1cblxuICAgIEB0cmFja2VkIGZpcnN0TmFtZSA9ICdUb20nO1xuICAgIEB0cmFja2VkIGxhc3ROYW1lID0gJ0RhbGUnO1xuICB9XG4gIHJldHVybiBuZXcgRGVwZW5kZW50S2V5c0FyZUNvb2woKTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import { Tag } from '@glimmer/validator';
2
+ export declare function assertValidAfterUnrelatedBump(tag: Tag, snapshot: number): void;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertValidAfterUnrelatedBump = void 0;
4
+ const validator_1 = require("@glimmer/validator");
5
+ function assertValidAfterUnrelatedBump(tag, snapshot) {
6
+ validator_1.bump();
7
+ QUnit.assert.strictEqual(validator_1.validateTag(tag, snapshot), true, 'tag is still valid after an unrelated bump');
8
+ }
9
+ exports.assertValidAfterUnrelatedBump = assertValidAfterUnrelatedBump;
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3RyYWNraW5nL3Rlc3QvaGVscGVycy90YWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGtEQUE0RDtBQUU1RCxTQUFnQiw2QkFBNkIsQ0FBQyxHQUFRLEVBQUUsUUFBZ0I7SUFDdEUsZ0JBQUksRUFBRSxDQUFDO0lBRVAsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ3RCLHVCQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUMxQixJQUFJLEVBQ0osNENBQTRDLENBQzdDLENBQUM7QUFDSixDQUFDO0FBUkQsc0VBUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBidW1wLCBUYWcsIHZhbGlkYXRlVGFnIH0gZnJvbSAnQGdsaW1tZXIvdmFsaWRhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkQWZ0ZXJVbnJlbGF0ZWRCdW1wKHRhZzogVGFnLCBzbmFwc2hvdDogbnVtYmVyKTogdm9pZCB7XG4gIGJ1bXAoKTtcblxuICBRVW5pdC5hc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgdmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksXG4gICAgdHJ1ZSxcbiAgICAndGFnIGlzIHN0aWxsIHZhbGlkIGFmdGVyIGFuIHVucmVsYXRlZCBidW1wJ1xuICApO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ import './tracked-decorator-test';
2
+ import './cached-decorator-test';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("./tracked-decorator-test");
4
+ require("./cached-decorator-test");
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci90cmFja2luZy90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsb0NBQWtDO0FBQ2xDLG1DQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnLi90cmFja2VkLWRlY29yYXRvci10ZXN0JztcbmltcG9ydCAnLi9jYWNoZWQtZGVjb3JhdG9yLXRlc3QnO1xuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ /* tslint:disable:no-unused-expression */
23
+ const { test } = QUnit;
24
+ const env_1 = require("@glimmer/env");
25
+ const validator_1 = require("@glimmer/validator");
26
+ const TSFixtures = __importStar(require("./fixtures/typescript"));
27
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
28
+ // @ts-ignore
29
+ const BabelFixtures = __importStar(require("./fixtures/babel"));
30
+ const tags_1 = require("./helpers/tags");
31
+ [
32
+ ['Babel', BabelFixtures],
33
+ ['TypeScript', TSFixtures],
34
+ ].forEach(([compiler, F]) => {
35
+ QUnit.module(`[@glimmer/tracking] Tracked Property Decorators with ${compiler}`);
36
+ test('tracked properties can be read and written to', (assert) => {
37
+ const obj = new F.Tom();
38
+ assert.strictEqual(obj.firstName, 'Tom');
39
+ obj.firstName = 'Edsger';
40
+ assert.strictEqual(obj.firstName, 'Edsger');
41
+ });
42
+ test('can request a tag for a property', (assert) => {
43
+ const obj = new F.Tom();
44
+ assert.strictEqual(obj.firstName, 'Tom');
45
+ const tag = validator_1.track(() => {
46
+ obj.firstName;
47
+ });
48
+ let snapshot = validator_1.valueForTag(tag);
49
+ assert.ok(validator_1.validateTag(tag, snapshot), 'tag should be valid to start');
50
+ obj.firstName = 'Edsger';
51
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), false, 'tag is invalidated after property is set');
52
+ snapshot = validator_1.valueForTag(tag);
53
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), true, 'tag is valid on the second check');
54
+ tags_1.assertValidAfterUnrelatedBump(tag, snapshot);
55
+ });
56
+ test('can request a tag from a frozen class instance', (assert) => {
57
+ const obj = Object.freeze(new F.Toran());
58
+ assert.strictEqual(obj.firstName, 'Toran');
59
+ assert.strictEqual(obj.lastName, 'Billups');
60
+ // Explicitly annotated tracked properties
61
+ let tag = validator_1.track(() => {
62
+ obj.firstName;
63
+ });
64
+ let snapshot = validator_1.valueForTag(tag);
65
+ assert.ok(validator_1.validateTag(tag, snapshot), 'tag should be valid to start');
66
+ snapshot = validator_1.valueForTag(tag);
67
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), true, 'tag is still valid');
68
+ // Non-tracked data properties
69
+ tag = validator_1.track(() => {
70
+ obj.lastName;
71
+ });
72
+ snapshot = validator_1.valueForTag(tag);
73
+ assert.ok(validator_1.validateTag(tag, snapshot), 'tag should be valid to start');
74
+ snapshot = validator_1.valueForTag(tag);
75
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), true, 'tag is still valid');
76
+ tags_1.assertValidAfterUnrelatedBump(tag, snapshot);
77
+ });
78
+ test('can request a tag from an instance of a frozen class', (assert) => {
79
+ const obj = Object.freeze(new F.FrozenToran());
80
+ assert.strictEqual(obj.firstName, 'Toran');
81
+ const tag = validator_1.track(() => {
82
+ obj.firstName;
83
+ });
84
+ let snapshot = validator_1.valueForTag(tag);
85
+ assert.ok(validator_1.validateTag(tag, snapshot), 'tag should be valid to start');
86
+ snapshot = validator_1.valueForTag(tag);
87
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), true, 'tag is still valid');
88
+ tags_1.assertValidAfterUnrelatedBump(tag, snapshot);
89
+ });
90
+ test('can track a getter', (assert) => {
91
+ const obj = new F.PersonWithCount();
92
+ assert.strictEqual(obj.firstName, 'Tom0');
93
+ assert.strictEqual(obj.firstName, 'Tom1');
94
+ const tag = validator_1.track(() => {
95
+ obj.firstName;
96
+ });
97
+ let snapshot = validator_1.valueForTag(tag);
98
+ assert.ok(validator_1.validateTag(tag, snapshot), 'tag should be valid to start');
99
+ assert.strictEqual(obj.firstName, 'Tom3');
100
+ assert.ok(validator_1.validateTag(tag, snapshot), 'reading from property does not invalidate the tag');
101
+ obj.firstName = 'Edsger';
102
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), false, 'tag is invalidated after property is set');
103
+ snapshot = validator_1.valueForTag(tag);
104
+ tags_1.assertValidAfterUnrelatedBump(tag, snapshot);
105
+ });
106
+ test('getters are invalidated when their dependencies are invalidated', (assert) => {
107
+ const obj = new F.PersonWithSalutation();
108
+ assert.strictEqual(obj.salutation, 'Hello, Tom Dale!', `the saluation field is valid`);
109
+ assert.strictEqual(obj.fullName, 'Tom Dale', `the fullName field is valid`);
110
+ const tag = validator_1.track(() => {
111
+ obj.salutation;
112
+ });
113
+ let snapshot = validator_1.valueForTag(tag);
114
+ assert.ok(validator_1.validateTag(tag, snapshot), 'tag should be valid to start');
115
+ obj.firstName = 'Edsger';
116
+ obj.lastName = 'Dijkstra';
117
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), false, 'tag is invalidated after chained dependency is set');
118
+ assert.strictEqual(obj.fullName, 'Edsger Dijkstra');
119
+ assert.strictEqual(obj.salutation, 'Hello, Edsger Dijkstra!');
120
+ snapshot = validator_1.valueForTag(tag);
121
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), true);
122
+ obj.fullName = 'Alan Kay';
123
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), false, 'tag is invalidated after chained dependency is set');
124
+ assert.strictEqual(obj.fullName, 'Alan Kay');
125
+ assert.strictEqual(obj.firstName, 'Alan');
126
+ assert.strictEqual(obj.lastName, 'Kay');
127
+ assert.strictEqual(obj.salutation, 'Hello, Alan Kay!');
128
+ snapshot = validator_1.valueForTag(tag);
129
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), true);
130
+ tags_1.assertValidAfterUnrelatedBump(tag, snapshot);
131
+ });
132
+ test('nested @tracked in multiple objects', (assert) => {
133
+ const obj = new F.Contact(new F.PersonForContact(), 'tom@example.com');
134
+ assert.strictEqual(obj.contact, 'Tom Dale @ tom@example.com', `the contact field is valid`);
135
+ assert.strictEqual(obj.person.fullName, 'Tom Dale', `the fullName field is valid`);
136
+ const person = obj.person;
137
+ const tag = validator_1.track(() => {
138
+ obj.contact;
139
+ });
140
+ let snapshot = validator_1.valueForTag(tag);
141
+ assert.ok(validator_1.validateTag(tag, snapshot), 'tag should be valid to start');
142
+ person.firstName = 'Edsger';
143
+ person.lastName = 'Dijkstra';
144
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), false, 'tag is invalidated after nested dependency is set');
145
+ assert.strictEqual(person.fullName, 'Edsger Dijkstra');
146
+ assert.strictEqual(obj.contact, 'Edsger Dijkstra @ tom@example.com');
147
+ snapshot = validator_1.valueForTag(tag);
148
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), true);
149
+ person.fullName = 'Alan Kay';
150
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), false, 'tag is invalidated after chained dependency is set');
151
+ assert.strictEqual(person.fullName, 'Alan Kay');
152
+ assert.strictEqual(person.firstName, 'Alan');
153
+ assert.strictEqual(person.lastName, 'Kay');
154
+ assert.strictEqual(obj.contact, 'Alan Kay @ tom@example.com');
155
+ snapshot = validator_1.valueForTag(tag);
156
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), true);
157
+ obj.email = 'alan@example.com';
158
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), false, 'tag is invalidated after chained dependency is set');
159
+ assert.strictEqual(person.fullName, 'Alan Kay');
160
+ assert.strictEqual(person.firstName, 'Alan');
161
+ assert.strictEqual(person.lastName, 'Kay');
162
+ assert.strictEqual(obj.contact, 'Alan Kay @ alan@example.com');
163
+ snapshot = validator_1.valueForTag(tag);
164
+ assert.strictEqual(validator_1.validateTag(tag, snapshot), true);
165
+ tags_1.assertValidAfterUnrelatedBump(tag, snapshot);
166
+ });
167
+ if (env_1.DEBUG) {
168
+ test('Tracked decorator with a getter throws an error', (assert) => {
169
+ assert.throws(F.createClassWithTrackedGetter);
170
+ });
171
+ test('Tracked decorator with a setter throws an error', (assert) => {
172
+ assert.throws(F.createClassWithTrackedSetter);
173
+ });
174
+ test('Tracked decorator with arguments throws an error', function (assert) {
175
+ assert.throws(F.createClassWithTrackedDependentKeys, /@tracked\('firstName', 'lastName'\)/, 'the correct error is thrown');
176
+ });
177
+ test('Using @tracked as a decorator factory throws an error', function (assert) {
178
+ assert.throws(F.createClassWithTrackedAsDecoratorFactory, /@tracked\(\)/, 'The correct error is thrown');
179
+ });
180
+ }
181
+ });
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tlZC1kZWNvcmF0b3ItdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3RyYWNraW5nL3Rlc3QvdHJhY2tlZC1kZWNvcmF0b3ItdGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBeUM7QUFDekMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUV2QixzQ0FBcUM7QUFDckMsa0RBQXFFO0FBRXJFLGtFQUFvRDtBQUNwRCw2REFBNkQ7QUFDN0QsYUFBYTtBQUNiLGdFQUFrRDtBQUNsRCx5Q0FBK0Q7QUFFL0Q7SUFDRSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7SUFDeEIsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDO0NBQzNCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUMxQixLQUFLLENBQUMsTUFBTSxDQUFDLHdEQUF3RCxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRWpGLElBQUksQ0FBQywrQ0FBK0MsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQy9ELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxHQUFHLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUN6QixNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixN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UUFDNUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyx1QkFBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVyRCxvQ0FBNkIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLFdBQUssRUFBRTtRQUNULElBQUksQ0FBQyxpREFBaUQsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaURBQWlELEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLFVBQVUsTUFBTTtZQUN2RSxNQUFNLENBQUMsTUFBTSxDQUNYLENBQUMsQ0FBQyxtQ0FBbUMsRUFDckMscUNBQXFDLEVBQ3JDLDZCQUE2QixDQUM5QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsdURBQXVELEVBQUUsVUFBVSxNQUFNO1lBQzVFLE1BQU0sQ0FBQyxNQUFNLENBQ1gsQ0FBQyxDQUFDLHdDQUF3QyxFQUMxQyxjQUFjLEVBQ2QsNkJBQTZCLENBQzlCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtZXhwcmVzc2lvbiAqL1xuY29uc3QgeyB0ZXN0IH0gPSBRVW5pdDtcblxuaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgdHJhY2ssIHZhbHVlRm9yVGFnLCB2YWxpZGF0ZVRhZyB9IGZyb20gJ0BnbGltbWVyL3ZhbGlkYXRvcic7XG5cbmltcG9ydCAqIGFzIFRTRml4dHVyZXMgZnJvbSAnLi9maXh0dXJlcy90eXBlc2NyaXB0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCAqIGFzIEJhYmVsRml4dHVyZXMgZnJvbSAnLi9maXh0dXJlcy9iYWJlbCc7XG5pbXBvcnQgeyBhc3NlcnRWYWxpZEFmdGVyVW5yZWxhdGVkQnVtcCB9IGZyb20gJy4vaGVscGVycy90YWdzJztcblxuW1xuICBbJ0JhYmVsJywgQmFiZWxGaXh0dXJlc10sXG4gIFsnVHlwZVNjcmlwdCcsIFRTRml4dHVyZXNdLFxuXS5mb3JFYWNoKChbY29tcGlsZXIsIEZdKSA9PiB7XG4gIFFVbml0Lm1vZHVsZShgW0BnbGltbWVyL3RyYWNraW5nXSBUcmFja2VkIFByb3BlcnR5IERlY29yYXRvcnMgd2l0aCAke2NvbXBpbGVyfWApO1xuXG4gIHRlc3QoJ3RyYWNrZWQgcHJvcGVydGllcyBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbiB0bycsIChhc3NlcnQpID0+IHtcbiAgICBjb25zdCBvYmogPSBuZXcgRi5Ub20oKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmZpcnN0TmFtZSwgJ1RvbScpO1xuICAgIG9iai5maXJzdE5hbWUgPSAnRWRzZ2VyJztcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmZpcnN0TmFtZSwgJ0Vkc2dlcicpO1xuICB9KTtcblxuICB0ZXN0KCdjYW4gcmVxdWVzdCBhIHRhZyBmb3IgYSBwcm9wZXJ0eScsIChhc3NlcnQpID0+IHtcbiAgICBjb25zdCBvYmogPSBuZXcgRi5Ub20oKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmZpcnN0TmFtZSwgJ1RvbScpO1xuXG4gICAgY29uc3QgdGFnID0gdHJhY2soKCkgPT4ge1xuICAgICAgb2JqLmZpcnN0TmFtZTtcbiAgICB9KTtcbiAgICBsZXQgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgJ3RhZyBzaG91bGQgYmUgdmFsaWQgdG8gc3RhcnQnKTtcblxuICAgIG9iai5maXJzdE5hbWUgPSAnRWRzZ2VyJztcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICB2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSxcbiAgICAgIGZhbHNlLFxuICAgICAgJ3RhZyBpcyBpbnZhbGlkYXRlZCBhZnRlciBwcm9wZXJ0eSBpcyBzZXQnXG4gICAgKTtcbiAgICBzbmFwc2hvdCA9IHZhbHVlRm9yVGFnKHRhZyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLCB0cnVlLCAndGFnIGlzIHZhbGlkIG9uIHRoZSBzZWNvbmQgY2hlY2snKTtcblxuICAgIGFzc2VydFZhbGlkQWZ0ZXJVbnJlbGF0ZWRCdW1wKHRhZywgc25hcHNob3QpO1xuICB9KTtcblxuICB0ZXN0KCdjYW4gcmVxdWVzdCBhIHRhZyBmcm9tIGEgZnJvemVuIGNsYXNzIGluc3RhbmNlJywgKGFzc2VydCkgPT4ge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5mcmVlemUobmV3IEYuVG9yYW4oKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5maXJzdE5hbWUsICdUb3JhbicpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmoubGFzdE5hbWUsICdCaWxsdXBzJyk7XG5cbiAgICAvLyBFeHBsaWNpdGx5IGFubm90YXRlZCB0cmFja2VkIHByb3BlcnRpZXNcbiAgICBsZXQgdGFnID0gdHJhY2soKCkgPT4ge1xuICAgICAgb2JqLmZpcnN0TmFtZTtcbiAgICB9KTtcbiAgICBsZXQgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgJ3RhZyBzaG91bGQgYmUgdmFsaWQgdG8gc3RhcnQnKTtcbiAgICBzbmFwc2hvdCA9IHZhbHVlRm9yVGFnKHRhZyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLCB0cnVlLCAndGFnIGlzIHN0aWxsIHZhbGlkJyk7XG5cbiAgICAvLyBOb24tdHJhY2tlZCBkYXRhIHByb3BlcnRpZXNcbiAgICB0YWcgPSB0cmFjaygoKSA9PiB7XG4gICAgICBvYmoubGFzdE5hbWU7XG4gICAgfSk7XG4gICAgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgJ3RhZyBzaG91bGQgYmUgdmFsaWQgdG8gc3RhcnQnKTtcbiAgICBzbmFwc2hvdCA9IHZhbHVlRm9yVGFnKHRhZyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLCB0cnVlLCAndGFnIGlzIHN0aWxsIHZhbGlkJyk7XG5cbiAgICBhc3NlcnRWYWxpZEFmdGVyVW5yZWxhdGVkQnVtcCh0YWcsIHNuYXBzaG90KTtcbiAgfSk7XG5cbiAgdGVzdCgnY2FuIHJlcXVlc3QgYSB0YWcgZnJvbSBhbiBpbnN0YW5jZSBvZiBhIGZyb3plbiBjbGFzcycsIChhc3NlcnQpID0+IHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuZnJlZXplKG5ldyBGLkZyb3plblRvcmFuKCkpO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5maXJzdE5hbWUsICdUb3JhbicpO1xuXG4gICAgY29uc3QgdGFnID0gdHJhY2soKCkgPT4ge1xuICAgICAgb2JqLmZpcnN0TmFtZTtcbiAgICB9KTtcbiAgICBsZXQgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgJ3RhZyBzaG91bGQgYmUgdmFsaWQgdG8gc3RhcnQnKTtcbiAgICBzbmFwc2hvdCA9IHZhbHVlRm9yVGFnKHRhZyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLCB0cnVlLCAndGFnIGlzIHN0aWxsIHZhbGlkJyk7XG5cbiAgICBhc3NlcnRWYWxpZEFmdGVyVW5yZWxhdGVkQnVtcCh0YWcsIHNuYXBzaG90KTtcbiAgfSk7XG5cbiAgdGVzdCgnY2FuIHRyYWNrIGEgZ2V0dGVyJywgKGFzc2VydCkgPT4ge1xuICAgIGNvbnN0IG9iaiA9IG5ldyBGLlBlcnNvbldpdGhDb3VudCgpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouZmlyc3ROYW1lLCAnVG9tMCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouZmlyc3ROYW1lLCAnVG9tMScpO1xuXG4gICAgY29uc3QgdGFnID0gdHJhY2soKCkgPT4ge1xuICAgICAgb2JqLmZpcnN0TmFtZTtcbiAgICB9KTtcbiAgICBsZXQgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgJ3RhZyBzaG91bGQgYmUgdmFsaWQgdG8gc3RhcnQnKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouZmlyc3ROYW1lLCAnVG9tMycpO1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgJ3JlYWRpbmcgZnJvbSBwcm9wZXJ0eSBkb2VzIG5vdCBpbnZhbGlkYXRlIHRoZSB0YWcnKTtcblxuICAgIG9iai5maXJzdE5hbWUgPSAnRWRzZ2VyJztcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICB2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSxcbiAgICAgIGZhbHNlLFxuICAgICAgJ3RhZyBpcyBpbnZhbGlkYXRlZCBhZnRlciBwcm9wZXJ0eSBpcyBzZXQnXG4gICAgKTtcbiAgICBzbmFwc2hvdCA9IHZhbHVlRm9yVGFnKHRhZyk7XG5cbiAgICBhc3NlcnRWYWxpZEFmdGVyVW5yZWxhdGVkQnVtcCh0YWcsIHNuYXBzaG90KTtcbiAgfSk7XG5cbiAgdGVzdCgnZ2V0dGVycyBhcmUgaW52YWxpZGF0ZWQgd2hlbiB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGludmFsaWRhdGVkJywgKGFzc2VydCkgPT4ge1xuICAgIGNvbnN0IG9iaiA9IG5ldyBGLlBlcnNvbldpdGhTYWx1dGF0aW9uKCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5zYWx1dGF0aW9uLCAnSGVsbG8sIFRvbSBEYWxlIScsIGB0aGUgc2FsdWF0aW9uIGZpZWxkIGlzIHZhbGlkYCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5mdWxsTmFtZSwgJ1RvbSBEYWxlJywgYHRoZSBmdWxsTmFtZSBmaWVsZCBpcyB2YWxpZGApO1xuXG4gICAgY29uc3QgdGFnID0gdHJhY2soKCkgPT4ge1xuICAgICAgb2JqLnNhbHV0YXRpb247XG4gICAgfSk7XG4gICAgbGV0IHNuYXBzaG90ID0gdmFsdWVGb3JUYWcodGFnKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksICd0YWcgc2hvdWxkIGJlIHZhbGlkIHRvIHN0YXJ0Jyk7XG5cbiAgICBvYmouZmlyc3ROYW1lID0gJ0Vkc2dlcic7XG4gICAgb2JqLmxhc3ROYW1lID0gJ0RpamtzdHJhJztcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICB2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSxcbiAgICAgIGZhbHNlLFxuICAgICAgJ3RhZyBpcyBpbnZhbGlkYXRlZCBhZnRlciBjaGFpbmVkIGRlcGVuZGVuY3kgaXMgc2V0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5mdWxsTmFtZSwgJ0Vkc2dlciBEaWprc3RyYScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouc2FsdXRhdGlvbiwgJ0hlbGxvLCBFZHNnZXIgRGlqa3N0cmEhJyk7XG5cbiAgICBzbmFwc2hvdCA9IHZhbHVlRm9yVGFnKHRhZyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLCB0cnVlKTtcblxuICAgIG9iai5mdWxsTmFtZSA9ICdBbGFuIEtheSc7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgdmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksXG4gICAgICBmYWxzZSxcbiAgICAgICd0YWcgaXMgaW52YWxpZGF0ZWQgYWZ0ZXIgY2hhaW5lZCBkZXBlbmRlbmN5IGlzIHNldCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouZnVsbE5hbWUsICdBbGFuIEtheScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouZmlyc3ROYW1lLCAnQWxhbicpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmoubGFzdE5hbWUsICdLYXknKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLnNhbHV0YXRpb24sICdIZWxsbywgQWxhbiBLYXkhJyk7XG5cbiAgICBzbmFwc2hvdCA9IHZhbHVlRm9yVGFnKHRhZyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLCB0cnVlKTtcblxuICAgIGFzc2VydFZhbGlkQWZ0ZXJVbnJlbGF0ZWRCdW1wKHRhZywgc25hcHNob3QpO1xuICB9KTtcblxuICB0ZXN0KCduZXN0ZWQgQHRyYWNrZWQgaW4gbXVsdGlwbGUgb2JqZWN0cycsIChhc3NlcnQpID0+IHtcbiAgICBjb25zdCBvYmogPSBuZXcgRi5Db250YWN0KG5ldyBGLlBlcnNvbkZvckNvbnRhY3QoKSwgJ3RvbUBleGFtcGxlLmNvbScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmouY29udGFjdCwgJ1RvbSBEYWxlIEAgdG9tQGV4YW1wbGUuY29tJywgYHRoZSBjb250YWN0IGZpZWxkIGlzIHZhbGlkYCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5wZXJzb24uZnVsbE5hbWUsICdUb20gRGFsZScsIGB0aGUgZnVsbE5hbWUgZmllbGQgaXMgdmFsaWRgKTtcbiAgICBjb25zdCBwZXJzb24gPSBvYmoucGVyc29uO1xuXG4gICAgY29uc3QgdGFnID0gdHJhY2soKCkgPT4ge1xuICAgICAgb2JqLmNvbnRhY3Q7XG4gICAgfSk7XG4gICAgbGV0IHNuYXBzaG90ID0gdmFsdWVGb3JUYWcodGFnKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksICd0YWcgc2hvdWxkIGJlIHZhbGlkIHRvIHN0YXJ0Jyk7XG5cbiAgICBwZXJzb24uZmlyc3ROYW1lID0gJ0Vkc2dlcic7XG4gICAgcGVyc29uLmxhc3ROYW1lID0gJ0RpamtzdHJhJztcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICB2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSxcbiAgICAgIGZhbHNlLFxuICAgICAgJ3RhZyBpcyBpbnZhbGlkYXRlZCBhZnRlciBuZXN0ZWQgZGVwZW5kZW5jeSBpcyBzZXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGVyc29uLmZ1bGxOYW1lLCAnRWRzZ2VyIERpamtzdHJhJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5jb250YWN0LCAnRWRzZ2VyIERpamtzdHJhIEAgdG9tQGV4YW1wbGUuY29tJyk7XG5cbiAgICBzbmFwc2hvdCA9IHZhbHVlRm9yVGFnKHRhZyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRlVGFnKHRhZywgc25hcHNob3QpLCB0cnVlKTtcblxuICAgIHBlcnNvbi5mdWxsTmFtZSA9ICdBbGFuIEtheSc7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgdmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksXG4gICAgICBmYWxzZSxcbiAgICAgICd0YWcgaXMgaW52YWxpZGF0ZWQgYWZ0ZXIgY2hhaW5lZCBkZXBlbmRlbmN5IGlzIHNldCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwZXJzb24uZnVsbE5hbWUsICdBbGFuIEtheScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwZXJzb24uZmlyc3ROYW1lLCAnQWxhbicpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwZXJzb24ubGFzdE5hbWUsICdLYXknKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmNvbnRhY3QsICdBbGFuIEtheSBAIHRvbUBleGFtcGxlLmNvbScpO1xuXG4gICAgc25hcHNob3QgPSB2YWx1ZUZvclRhZyh0YWcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2YWxpZGF0ZVRhZyh0YWcsIHNuYXBzaG90KSwgdHJ1ZSk7XG5cbiAgICBvYmouZW1haWwgPSAnYWxhbkBleGFtcGxlLmNvbSc7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgdmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksXG4gICAgICBmYWxzZSxcbiAgICAgICd0YWcgaXMgaW52YWxpZGF0ZWQgYWZ0ZXIgY2hhaW5lZCBkZXBlbmRlbmN5IGlzIHNldCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwZXJzb24uZnVsbE5hbWUsICdBbGFuIEtheScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwZXJzb24uZmlyc3ROYW1lLCAnQWxhbicpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwZXJzb24ubGFzdE5hbWUsICdLYXknKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLmNvbnRhY3QsICdBbGFuIEtheSBAIGFsYW5AZXhhbXBsZS5jb20nKTtcblxuICAgIHNuYXBzaG90ID0gdmFsdWVGb3JUYWcodGFnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmFsaWRhdGVUYWcodGFnLCBzbmFwc2hvdCksIHRydWUpO1xuXG4gICAgYXNzZXJ0VmFsaWRBZnRlclVucmVsYXRlZEJ1bXAodGFnLCBzbmFwc2hvdCk7XG4gIH0pO1xuXG4gIGlmIChERUJVRykge1xuICAgIHRlc3QoJ1RyYWNrZWQgZGVjb3JhdG9yIHdpdGggYSBnZXR0ZXIgdGhyb3dzIGFuIGVycm9yJywgKGFzc2VydCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhGLmNyZWF0ZUNsYXNzV2l0aFRyYWNrZWRHZXR0ZXIpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnVHJhY2tlZCBkZWNvcmF0b3Igd2l0aCBhIHNldHRlciB0aHJvd3MgYW4gZXJyb3InLCAoYXNzZXJ0KSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKEYuY3JlYXRlQ2xhc3NXaXRoVHJhY2tlZFNldHRlcik7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdUcmFja2VkIGRlY29yYXRvciB3aXRoIGFyZ3VtZW50cyB0aHJvd3MgYW4gZXJyb3InLCBmdW5jdGlvbiAoYXNzZXJ0KSB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICBGLmNyZWF0ZUNsYXNzV2l0aFRyYWNrZWREZXBlbmRlbnRLZXlzLFxuICAgICAgICAvQHRyYWNrZWRcXCgnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJ1xcKS8sXG4gICAgICAgICd0aGUgY29ycmVjdCBlcnJvciBpcyB0aHJvd24nXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnVXNpbmcgQHRyYWNrZWQgYXMgYSBkZWNvcmF0b3IgZmFjdG9yeSB0aHJvd3MgYW4gZXJyb3InLCBmdW5jdGlvbiAoYXNzZXJ0KSB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICBGLmNyZWF0ZUNsYXNzV2l0aFRyYWNrZWRBc0RlY29yYXRvckZhY3RvcnksXG4gICAgICAgIC9AdHJhY2tlZFxcKFxcKS8sXG4gICAgICAgICdUaGUgY29ycmVjdCBlcnJvciBpcyB0aHJvd24nXG4gICAgICApO1xuICAgIH0pO1xuICB9XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export { cached } from './src/cached';
2
+ export { tracked } from './src/tracked';
@@ -0,0 +1,3 @@
1
+ export { cached } from './src/cached';
2
+ export { tracked } from './src/tracked';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci90cmFja2luZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBjYWNoZWQgfSBmcm9tICcuL3NyYy9jYWNoZWQnO1xuZXhwb3J0IHsgdHJhY2tlZCB9IGZyb20gJy4vc3JjL3RyYWNrZWQnO1xuIl19
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @decorator
3
+ *
4
+ * The `@cached` decorator can be used on getters in order to cache the return
5
+ * value of the getter. This is useful when a getter is expensive and used very
6
+ * often.
7
+ *
8
+ *
9
+ * @example
10
+ *
11
+ * in this guest list class, we have the `sortedGuests`
12
+ * getter that sorts the guests alphabetically:
13
+ *
14
+ * ```js
15
+ * import { tracked } from '@norith/glimmer-tracking';
16
+ *
17
+ * class GuestList {
18
+ * @tracked guests = ['Zoey', 'Tomster'];
19
+ *
20
+ * get sortedGuests() {
21
+ * return this.guests.slice().sort()
22
+ * }
23
+ * }
24
+ * ```
25
+ *
26
+ * Every time `sortedGuests` is accessed, a new array will be created and sorted,
27
+ * because JavaScript getters do not cache by default. When the guest list is
28
+ * small, like the one in the example, this is not a problem. However, if the guest
29
+ * list were to grow very large, it would mean that we would be doing a large
30
+ * amount of work each time we accessed `sortedGetters`. With `@cached`, we can
31
+ * cache the value instead:
32
+ *
33
+ * ```js
34
+ * import { tracked, cached } from '@norith/glimmer-tracking';
35
+ *
36
+ * class GuestList {
37
+ * @tracked guests = ['Zoey', 'Tomster'];
38
+ *
39
+ * @cached
40
+ * get sortedGuests() {
41
+ * return this.guests.slice().sort()
42
+ * }
43
+ * }
44
+ * ```
45
+ *
46
+ * Now the `sortedGuests` getter will be cached based on _autotracking_. It will
47
+ * only rerun and create a new sorted array when the `guests` tracked property is
48
+ * updated.
49
+ *
50
+ * In general, you should avoid using `@cached` unless you have confirmed that the
51
+ * getter you are decorating is computationally expensive. `@cached` adds a small
52
+ * amount of overhead to the getter, making it more expensive. While this overhead
53
+ * is small, if `@cached` is overused it can add up to a large impact overall in
54
+ * your app. Many getters and tracked properties are only accessed once, rendered,
55
+ * and then never rerendered, so adding `@cached` when it is unnecessary can
56
+ * negatively impact performance.
57
+ */
58
+ export declare const cached: PropertyDecorator;