@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
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # @glimmer/tracking
2
+
3
+ [![npm version](https://badge.fury.io/js/%40glimmer%2Ftracking.svg)](https://badge.fury.io/js/%40glimmer%2Ftracking)
4
+ [![CI](https://github.com/glimmerjs/glimmer.js/workflows/CI/badge.svg)](https://github.com/glimmerjs/glimmer.js/actions?query=workflow%3ACI)
5
+
6
+ ## Installation
7
+
8
+ Add this package to your project with Yarn:
9
+
10
+ ```bash
11
+ yarn add -D @glimmer/tracking
12
+ ```
13
+
14
+ Or alternatively with npm:
15
+
16
+ ```bash
17
+ npm install --save-dev @glimmer/tracking
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ To use this in a Glimmer application, import the package and export an extended class:
23
+
24
+ ```ts
25
+ import Component from '@glimmer/component';
26
+ import { tracked } from '@glimmer/tracking';
27
+
28
+ export default class MyComponent extends Component {
29
+ @tracked foo;
30
+ }
31
+ ```
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/glimmerjs/glimmer.js.
36
+
37
+ ## Acknowledgements
38
+
39
+ Thanks to [Monegraph](http://monegraph.com) for funding the initial development
40
+ of this library.
41
+
42
+ ## License
43
+
44
+ MIT License.
@@ -0,0 +1,2 @@
1
+ export { cached } from './src/cached';
2
+ export { tracked } from './src/tracked';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tracked = exports.cached = void 0;
4
+ var cached_1 = require("./src/cached");
5
+ Object.defineProperty(exports, "cached", { enumerable: true, get: function () { return cached_1.cached; } });
6
+ var tracked_1 = require("./src/tracked");
7
+ Object.defineProperty(exports, "tracked", { enumerable: true, get: function () { return tracked_1.tracked; } });
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci90cmFja2luZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBc0M7QUFBN0IsZ0dBQUEsTUFBTSxPQUFBO0FBQ2YseUNBQXdDO0FBQS9CLGtHQUFBLE9BQU8sT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGNhY2hlZCB9IGZyb20gJy4vc3JjL2NhY2hlZCc7XG5leHBvcnQgeyB0cmFja2VkIH0gZnJvbSAnLi9zcmMvdHJhY2tlZCc7XG4iXX0=
@@ -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;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cached = void 0;
4
+ const env_1 = require("@glimmer/env");
5
+ const validator_1 = require("@glimmer/validator");
6
+ /**
7
+ * @decorator
8
+ *
9
+ * The `@cached` decorator can be used on getters in order to cache the return
10
+ * value of the getter. This is useful when a getter is expensive and used very
11
+ * often.
12
+ *
13
+ *
14
+ * @example
15
+ *
16
+ * in this guest list class, we have the `sortedGuests`
17
+ * getter that sorts the guests alphabetically:
18
+ *
19
+ * ```js
20
+ * import { tracked } from '@norith/glimmer-tracking';
21
+ *
22
+ * class GuestList {
23
+ * @tracked guests = ['Zoey', 'Tomster'];
24
+ *
25
+ * get sortedGuests() {
26
+ * return this.guests.slice().sort()
27
+ * }
28
+ * }
29
+ * ```
30
+ *
31
+ * Every time `sortedGuests` is accessed, a new array will be created and sorted,
32
+ * because JavaScript getters do not cache by default. When the guest list is
33
+ * small, like the one in the example, this is not a problem. However, if the guest
34
+ * list were to grow very large, it would mean that we would be doing a large
35
+ * amount of work each time we accessed `sortedGetters`. With `@cached`, we can
36
+ * cache the value instead:
37
+ *
38
+ * ```js
39
+ * import { tracked, cached } from '@norith/glimmer-tracking';
40
+ *
41
+ * class GuestList {
42
+ * @tracked guests = ['Zoey', 'Tomster'];
43
+ *
44
+ * @cached
45
+ * get sortedGuests() {
46
+ * return this.guests.slice().sort()
47
+ * }
48
+ * }
49
+ * ```
50
+ *
51
+ * Now the `sortedGuests` getter will be cached based on _autotracking_. It will
52
+ * only rerun and create a new sorted array when the `guests` tracked property is
53
+ * updated.
54
+ *
55
+ * In general, you should avoid using `@cached` unless you have confirmed that the
56
+ * getter you are decorating is computationally expensive. `@cached` adds a small
57
+ * amount of overhead to the getter, making it more expensive. While this overhead
58
+ * is small, if `@cached` is overused it can add up to a large impact overall in
59
+ * your app. Many getters and tracked properties are only accessed once, rendered,
60
+ * and then never rerendered, so adding `@cached` when it is unnecessary can
61
+ * negatively impact performance.
62
+ */
63
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
+ const cached = (...args) => {
65
+ const [target, key, descriptor] = args;
66
+ // Error on `@cached()`, `@cached(...args)`, and `@cached propName = value;`
67
+ if (env_1.DEBUG && target === undefined)
68
+ throwCachedExtraneousParens();
69
+ if (env_1.DEBUG &&
70
+ (typeof target !== 'object' ||
71
+ typeof key !== 'string' ||
72
+ typeof descriptor !== 'object' ||
73
+ args.length !== 3)) {
74
+ throwCachedInvalidArgsError(args);
75
+ }
76
+ if (env_1.DEBUG && (!('get' in descriptor) || typeof descriptor.get !== 'function')) {
77
+ throwCachedGetterOnlyError(key);
78
+ }
79
+ const caches = new WeakMap();
80
+ const getter = descriptor.get;
81
+ descriptor.get = function () {
82
+ if (!caches.has(this)) {
83
+ caches.set(this, validator_1.createCache(getter.bind(this)));
84
+ }
85
+ return validator_1.getValue(caches.get(this));
86
+ };
87
+ };
88
+ exports.cached = cached;
89
+ function throwCachedExtraneousParens() {
90
+ throw new Error('You attempted to use @cached(), which is not necessary nor supported. Remove the parentheses and you will be good to go!');
91
+ }
92
+ function throwCachedGetterOnlyError(key) {
93
+ throw new Error(`The @cached decorator must be applied to getters. '${key}' is not a getter.`);
94
+ }
95
+ function throwCachedInvalidArgsError(args = []) {
96
+ throw new Error(`You attempted to use @cached on with ${args.length > 1 ? 'arguments' : 'an argument'} ( @cached(${args
97
+ .map((d) => `'${d}'`)
98
+ .join(', ')}), which is not supported. Dependencies are automatically tracked, so you can just use ${'`@cached`'}`);
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvdHJhY2tpbmcvc3JjL2NhY2hlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzQ0FBcUM7QUFDckMsa0RBQTJEO0FBRTNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdERztBQUNILDhEQUE4RDtBQUN2RCxNQUFNLE1BQU0sR0FBc0IsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO0lBQzFELE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUV2Qyw0RUFBNEU7SUFDNUUsSUFBSSxXQUFLLElBQUksTUFBTSxLQUFLLFNBQVM7UUFBRSwyQkFBMkIsRUFBRSxDQUFDO0lBQ2pFLElBQ0UsV0FBSztRQUNMLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUTtZQUN6QixPQUFPLEdBQUcsS0FBSyxRQUFRO1lBQ3ZCLE9BQU8sVUFBVSxLQUFLLFFBQVE7WUFDOUIsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFDcEI7UUFDQSwyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNuQztJQUNELElBQUksV0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsSUFBSSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEtBQUssVUFBVSxDQUFDLEVBQUU7UUFDN0UsMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDakM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzdCLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFFOUIsVUFBVSxDQUFDLEdBQUcsR0FBRztRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLHVCQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7UUFFRCxPQUFPLG9CQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQTVCVyxRQUFBLE1BQU0sVUE0QmpCO0FBRUYsU0FBUywyQkFBMkI7SUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FDYiwwSEFBMEgsQ0FDM0gsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLEdBQVc7SUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ2pHLENBQUM7QUFFRCxTQUFTLDJCQUEyQixDQUFDLE9BQWtCLEVBQUU7SUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FDYix3Q0FDRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUNsQyxjQUFjLElBQUk7U0FDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDcEIsSUFBSSxDQUNILElBQUksQ0FDTCwwRkFBMEYsV0FBVyxFQUFFLENBQzNHLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgY3JlYXRlQ2FjaGUsIGdldFZhbHVlIH0gZnJvbSAnQGdsaW1tZXIvdmFsaWRhdG9yJztcblxuLyoqXG4gKiBAZGVjb3JhdG9yXG4gKlxuICogVGhlIGBAY2FjaGVkYCBkZWNvcmF0b3IgY2FuIGJlIHVzZWQgb24gZ2V0dGVycyBpbiBvcmRlciB0byBjYWNoZSB0aGUgcmV0dXJuXG4gKiB2YWx1ZSBvZiB0aGUgZ2V0dGVyLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgZ2V0dGVyIGlzIGV4cGVuc2l2ZSBhbmQgdXNlZCB2ZXJ5XG4gKiBvZnRlbi5cbiAqXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBpbiB0aGlzIGd1ZXN0IGxpc3QgY2xhc3MsIHdlIGhhdmUgdGhlIGBzb3J0ZWRHdWVzdHNgXG4gKiBnZXR0ZXIgdGhhdCBzb3J0cyB0aGUgZ3Vlc3RzIGFscGhhYmV0aWNhbGx5OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyB0cmFja2VkIH0gZnJvbSAnQG5vcml0aC9nbGltbWVyLXRyYWNraW5nJztcbiAqXG4gKiBjbGFzcyBHdWVzdExpc3Qge1xuICogICBAdHJhY2tlZCBndWVzdHMgPSBbJ1pvZXknLCAnVG9tc3RlciddO1xuICpcbiAqICAgZ2V0IHNvcnRlZEd1ZXN0cygpIHtcbiAqICAgICByZXR1cm4gdGhpcy5ndWVzdHMuc2xpY2UoKS5zb3J0KClcbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogRXZlcnkgdGltZSBgc29ydGVkR3Vlc3RzYCBpcyBhY2Nlc3NlZCwgYSBuZXcgYXJyYXkgd2lsbCBiZSBjcmVhdGVkIGFuZCBzb3J0ZWQsXG4gKiBiZWNhdXNlIEphdmFTY3JpcHQgZ2V0dGVycyBkbyBub3QgY2FjaGUgYnkgZGVmYXVsdC4gV2hlbiB0aGUgZ3Vlc3QgbGlzdCBpc1xuICogc21hbGwsIGxpa2UgdGhlIG9uZSBpbiB0aGUgZXhhbXBsZSwgdGhpcyBpcyBub3QgYSBwcm9ibGVtLiBIb3dldmVyLCBpZiB0aGUgZ3Vlc3RcbiAqIGxpc3Qgd2VyZSB0byBncm93IHZlcnkgbGFyZ2UsIGl0IHdvdWxkIG1lYW4gdGhhdCB3ZSB3b3VsZCBiZSBkb2luZyBhIGxhcmdlXG4gKiBhbW91bnQgb2Ygd29yayBlYWNoIHRpbWUgd2UgYWNjZXNzZWQgYHNvcnRlZEdldHRlcnNgLiBXaXRoIGBAY2FjaGVkYCwgd2UgY2FuXG4gKiBjYWNoZSB0aGUgdmFsdWUgaW5zdGVhZDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHsgdHJhY2tlZCwgY2FjaGVkIH0gZnJvbSAnQG5vcml0aC9nbGltbWVyLXRyYWNraW5nJztcbiAqXG4gKiBjbGFzcyBHdWVzdExpc3Qge1xuICogICBAdHJhY2tlZCBndWVzdHMgPSBbJ1pvZXknLCAnVG9tc3RlciddO1xuICpcbiAqICAgQGNhY2hlZFxuICogICBnZXQgc29ydGVkR3Vlc3RzKCkge1xuICogICAgIHJldHVybiB0aGlzLmd1ZXN0cy5zbGljZSgpLnNvcnQoKVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBOb3cgdGhlIGBzb3J0ZWRHdWVzdHNgIGdldHRlciB3aWxsIGJlIGNhY2hlZCBiYXNlZCBvbiBfYXV0b3RyYWNraW5nXy4gSXQgd2lsbFxuICogb25seSByZXJ1biBhbmQgY3JlYXRlIGEgbmV3IHNvcnRlZCBhcnJheSB3aGVuIHRoZSBgZ3Vlc3RzYCB0cmFja2VkIHByb3BlcnR5IGlzXG4gKiB1cGRhdGVkLlxuICpcbiAqIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgYXZvaWQgdXNpbmcgYEBjYWNoZWRgIHVubGVzcyB5b3UgaGF2ZSBjb25maXJtZWQgdGhhdCB0aGVcbiAqIGdldHRlciB5b3UgYXJlIGRlY29yYXRpbmcgaXMgY29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZS4gYEBjYWNoZWRgIGFkZHMgYSBzbWFsbFxuICogYW1vdW50IG9mIG92ZXJoZWFkIHRvIHRoZSBnZXR0ZXIsIG1ha2luZyBpdCBtb3JlIGV4cGVuc2l2ZS4gV2hpbGUgdGhpcyBvdmVyaGVhZFxuICogaXMgc21hbGwsIGlmIGBAY2FjaGVkYCBpcyBvdmVydXNlZCBpdCBjYW4gYWRkIHVwIHRvIGEgbGFyZ2UgaW1wYWN0IG92ZXJhbGwgaW5cbiAqIHlvdXIgYXBwLiBNYW55IGdldHRlcnMgYW5kIHRyYWNrZWQgcHJvcGVydGllcyBhcmUgb25seSBhY2Nlc3NlZCBvbmNlLCByZW5kZXJlZCxcbiAqIGFuZCB0aGVuIG5ldmVyIHJlcmVuZGVyZWQsIHNvIGFkZGluZyBgQGNhY2hlZGAgd2hlbiBpdCBpcyB1bm5lY2Vzc2FyeSBjYW5cbiAqIG5lZ2F0aXZlbHkgaW1wYWN0IHBlcmZvcm1hbmNlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNvbnN0IGNhY2hlZDogUHJvcGVydHlEZWNvcmF0b3IgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgY29uc3QgW3RhcmdldCwga2V5LCBkZXNjcmlwdG9yXSA9IGFyZ3M7XG5cbiAgLy8gRXJyb3Igb24gYEBjYWNoZWQoKWAsIGBAY2FjaGVkKC4uLmFyZ3MpYCwgYW5kIGBAY2FjaGVkIHByb3BOYW1lID0gdmFsdWU7YFxuICBpZiAoREVCVUcgJiYgdGFyZ2V0ID09PSB1bmRlZmluZWQpIHRocm93Q2FjaGVkRXh0cmFuZW91c1BhcmVucygpO1xuICBpZiAoXG4gICAgREVCVUcgJiZcbiAgICAodHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcgfHxcbiAgICAgIHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnIHx8XG4gICAgICB0eXBlb2YgZGVzY3JpcHRvciAhPT0gJ29iamVjdCcgfHxcbiAgICAgIGFyZ3MubGVuZ3RoICE9PSAzKVxuICApIHtcbiAgICB0aHJvd0NhY2hlZEludmFsaWRBcmdzRXJyb3IoYXJncyk7XG4gIH1cbiAgaWYgKERFQlVHICYmICghKCdnZXQnIGluIGRlc2NyaXB0b3IpIHx8IHR5cGVvZiBkZXNjcmlwdG9yLmdldCAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvd0NhY2hlZEdldHRlck9ubHlFcnJvcihrZXkpO1xuICB9XG5cbiAgY29uc3QgY2FjaGVzID0gbmV3IFdlYWtNYXAoKTtcbiAgY29uc3QgZ2V0dGVyID0gZGVzY3JpcHRvci5nZXQ7XG5cbiAgZGVzY3JpcHRvci5nZXQgPSBmdW5jdGlvbiAoKTogdW5rbm93biB7XG4gICAgaWYgKCFjYWNoZXMuaGFzKHRoaXMpKSB7XG4gICAgICBjYWNoZXMuc2V0KHRoaXMsIGNyZWF0ZUNhY2hlKGdldHRlci5iaW5kKHRoaXMpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFZhbHVlKGNhY2hlcy5nZXQodGhpcykpO1xuICB9O1xufTtcblxuZnVuY3Rpb24gdGhyb3dDYWNoZWRFeHRyYW5lb3VzUGFyZW5zKCk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICdZb3UgYXR0ZW1wdGVkIHRvIHVzZSBAY2FjaGVkKCksIHdoaWNoIGlzIG5vdCBuZWNlc3Nhcnkgbm9yIHN1cHBvcnRlZC4gUmVtb3ZlIHRoZSBwYXJlbnRoZXNlcyBhbmQgeW91IHdpbGwgYmUgZ29vZCB0byBnbyEnXG4gICk7XG59XG5cbmZ1bmN0aW9uIHRocm93Q2FjaGVkR2V0dGVyT25seUVycm9yKGtleTogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBAY2FjaGVkIGRlY29yYXRvciBtdXN0IGJlIGFwcGxpZWQgdG8gZ2V0dGVycy4gJyR7a2V5fScgaXMgbm90IGEgZ2V0dGVyLmApO1xufVxuXG5mdW5jdGlvbiB0aHJvd0NhY2hlZEludmFsaWRBcmdzRXJyb3IoYXJnczogdW5rbm93bltdID0gW10pOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgWW91IGF0dGVtcHRlZCB0byB1c2UgQGNhY2hlZCBvbiB3aXRoICR7XG4gICAgICBhcmdzLmxlbmd0aCA+IDEgPyAnYXJndW1lbnRzJyA6ICdhbiBhcmd1bWVudCdcbiAgICB9ICggQGNhY2hlZCgke2FyZ3NcbiAgICAgIC5tYXAoKGQpID0+IGAnJHtkfSdgKVxuICAgICAgLmpvaW4oXG4gICAgICAgICcsICdcbiAgICAgICl9KSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4gRGVwZW5kZW5jaWVzIGFyZSBhdXRvbWF0aWNhbGx5IHRyYWNrZWQsIHNvIHlvdSBjYW4ganVzdCB1c2UgJHsnYEBjYWNoZWRgJ31gXG4gICk7XG59XG4iXX0=
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @decorator
3
+ *
4
+ * Marks a property as tracked.
5
+ *
6
+ * By default, a component's properties are expected to be static,
7
+ * meaning you are not able to update them and have the template update accordingly.
8
+ * Marking a property as tracked means that when that property changes,
9
+ * a rerender of the component is scheduled so the template is kept up to date.
10
+ *
11
+ * @example
12
+ *
13
+ * ```typescript
14
+ * import Component from '@norith/glimmer-component';
15
+ * import { tracked } from '@norith/glimmer-tracking';
16
+ *
17
+ * export default class MyComponent extends Component {
18
+ * @tracked
19
+ * remainingApples = 10
20
+ * }
21
+ * ```
22
+ *
23
+ * When something changes the component's `remainingApples` property, the rerender
24
+ * will be scheduled.
25
+ *
26
+ * @example Computed Properties
27
+ *
28
+ * In the case that you have a getter that depends on other properties, tracked
29
+ * properties accessed within the getter will automatically be tracked for you.
30
+ * That means when any of those dependent tracked properties is changed, a
31
+ * rerender of the component will be scheduled.
32
+ *
33
+ * In the following example we have two properties,
34
+ * `eatenApples`, and `remainingApples`.
35
+ *
36
+ *
37
+ * ```typescript
38
+ * import Component from '@norith/glimmer-component';
39
+ * import { tracked } from '@norith/glimmer-tracking';
40
+ *
41
+ * const totalApples = 100;
42
+ *
43
+ * export default class MyComponent extends Component {
44
+ * @tracked
45
+ * eatenApples = 0
46
+ *
47
+ * get remainingApples() {
48
+ * return totalApples - this.eatenApples;
49
+ * }
50
+ *
51
+ * increment() {
52
+ * this.eatenApples = this.eatenApples + 1;
53
+ * }
54
+ * }
55
+ * ```
56
+ */
57
+ export declare const tracked: PropertyDecorator;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tracked = void 0;
4
+ const env_1 = require("@glimmer/env");
5
+ const validator_1 = require("@glimmer/validator");
6
+ /**
7
+ * @decorator
8
+ *
9
+ * Marks a property as tracked.
10
+ *
11
+ * By default, a component's properties are expected to be static,
12
+ * meaning you are not able to update them and have the template update accordingly.
13
+ * Marking a property as tracked means that when that property changes,
14
+ * a rerender of the component is scheduled so the template is kept up to date.
15
+ *
16
+ * @example
17
+ *
18
+ * ```typescript
19
+ * import Component from '@norith/glimmer-component';
20
+ * import { tracked } from '@norith/glimmer-tracking';
21
+ *
22
+ * export default class MyComponent extends Component {
23
+ * @tracked
24
+ * remainingApples = 10
25
+ * }
26
+ * ```
27
+ *
28
+ * When something changes the component's `remainingApples` property, the rerender
29
+ * will be scheduled.
30
+ *
31
+ * @example Computed Properties
32
+ *
33
+ * In the case that you have a getter that depends on other properties, tracked
34
+ * properties accessed within the getter will automatically be tracked for you.
35
+ * That means when any of those dependent tracked properties is changed, a
36
+ * rerender of the component will be scheduled.
37
+ *
38
+ * In the following example we have two properties,
39
+ * `eatenApples`, and `remainingApples`.
40
+ *
41
+ *
42
+ * ```typescript
43
+ * import Component from '@norith/glimmer-component';
44
+ * import { tracked } from '@norith/glimmer-tracking';
45
+ *
46
+ * const totalApples = 100;
47
+ *
48
+ * export default class MyComponent extends Component {
49
+ * @tracked
50
+ * eatenApples = 0
51
+ *
52
+ * get remainingApples() {
53
+ * return totalApples - this.eatenApples;
54
+ * }
55
+ *
56
+ * increment() {
57
+ * this.eatenApples = this.eatenApples + 1;
58
+ * }
59
+ * }
60
+ * ```
61
+ */
62
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
63
+ const tracked = (...args) => {
64
+ const [target, key, descriptor] = args;
65
+ // Error on `@tracked()`, `@tracked(...args)`, and `@tracked get propName()`
66
+ if (env_1.DEBUG && typeof target === 'string')
67
+ throwTrackedWithArgumentsError(args);
68
+ if (env_1.DEBUG && target === undefined)
69
+ throwTrackedWithEmptyArgumentsError();
70
+ if (env_1.DEBUG && descriptor && descriptor.get)
71
+ throwTrackedComputedPropertyError();
72
+ if (descriptor) {
73
+ return descriptorForField(target, key, descriptor);
74
+ }
75
+ // In TypeScript's implementation, decorators on simple class fields do not
76
+ // receive a descriptor, so we define the property on the target directly.
77
+ Object.defineProperty(target, key, descriptorForField(target, key));
78
+ };
79
+ exports.tracked = tracked;
80
+ function throwTrackedComputedPropertyError() {
81
+ throw new Error(`The @tracked decorator does not need to be applied to getters. Properties implemented using a getter will recompute automatically when any tracked properties they access change.`);
82
+ }
83
+ function throwTrackedWithArgumentsError(args) {
84
+ throw new Error(`You attempted to use @tracked with ${args.length > 1 ? 'arguments' : 'an argument'} ( @tracked(${args
85
+ .map((d) => `'${d}'`)
86
+ .join(', ')}) ), which is no longer necessary nor supported. Dependencies are now automatically tracked, so you can just use ${'`@tracked`'}.`);
87
+ }
88
+ function throwTrackedWithEmptyArgumentsError() {
89
+ throw new Error('You attempted to use @tracked(), which is no longer necessary nor supported. Remove the parentheses and you will be good to go!');
90
+ }
91
+ function descriptorForField(_target, key, desc) {
92
+ if (env_1.DEBUG && desc && (desc.value || desc.get || desc.set)) {
93
+ throw new Error(`You attempted to use @tracked on ${String(key)}, but that element is not a class field. @tracked is only usable on class fields. Native getters and setters will autotrack add any tracked fields they encounter, so there is no need mark getters and setters with @tracked.`);
94
+ }
95
+ const { getter, setter } = validator_1.trackedData(key, desc && desc.initializer);
96
+ return {
97
+ enumerable: true,
98
+ configurable: true,
99
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
100
+ get() {
101
+ return getter(this);
102
+ },
103
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
104
+ set(newValue) {
105
+ setter(this, newValue);
106
+ },
107
+ };
108
+ }
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3RyYWNraW5nL3NyYy90cmFja2VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNDQUFxQztBQUNyQyxrREFBaUQ7QUFFakQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1REc7QUFDSCw4REFBOEQ7QUFDdkQsTUFBTSxPQUFPLEdBQXNCLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRTtJQUMzRCxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7SUFFdkMsNEVBQTRFO0lBQzVFLElBQUksV0FBSyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RSxJQUFJLFdBQUssSUFBSSxNQUFNLEtBQUssU0FBUztRQUFFLG1DQUFtQyxFQUFFLENBQUM7SUFDekUsSUFBSSxXQUFLLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxHQUFHO1FBQUUsaUNBQWlDLEVBQUUsQ0FBQztJQUUvRSxJQUFJLFVBQVUsRUFBRTtRQUNkLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNwRDtJQUNELDJFQUEyRTtJQUMzRSwwRUFBMEU7SUFDMUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQWRXLFFBQUEsT0FBTyxXQWNsQjtBQUVGLFNBQVMsaUNBQWlDO0lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUxBQW1MLENBQ3BMLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxJQUFlO0lBQ3JELE1BQU0sSUFBSSxLQUFLLENBQ2Isc0NBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFDbEMsZUFBZSxJQUFJO1NBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUNwQixJQUFJLENBQ0gsSUFBSSxDQUNMLG9IQUFvSCxZQUFZLEdBQUcsQ0FDdkksQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG1DQUFtQztJQUMxQyxNQUFNLElBQUksS0FBSyxDQUNiLGlJQUFpSSxDQUNsSSxDQUFDO0FBQ0osQ0FBQztBQWtCRCxTQUFTLGtCQUFrQixDQUN6QixPQUFVLEVBQ1YsR0FBTSxFQUNOLElBQWtDO0lBRWxDLElBQUksV0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDekQsTUFBTSxJQUFJLEtBQUssQ0FDYixvQ0FBb0MsTUFBTSxDQUN4QyxHQUFHLENBQ0osZ09BQWdPLENBQ2xPLENBQUM7S0FDSDtJQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsdUJBQVcsQ0FBTyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU1RSxPQUFPO1FBQ0wsVUFBVSxFQUFFLElBQUk7UUFDaEIsWUFBWSxFQUFFLElBQUk7UUFFbEIsOERBQThEO1FBQzlELEdBQUc7WUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBRUQsOERBQThEO1FBQzlELEdBQUcsQ0FBVSxRQUFhO1lBQ3hCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgdHJhY2tlZERhdGEgfSBmcm9tICdAZ2xpbW1lci92YWxpZGF0b3InO1xuXG4vKipcbiAqIEBkZWNvcmF0b3JcbiAqXG4gKiBNYXJrcyBhIHByb3BlcnR5IGFzIHRyYWNrZWQuXG4gKlxuICogQnkgZGVmYXVsdCwgYSBjb21wb25lbnQncyBwcm9wZXJ0aWVzIGFyZSBleHBlY3RlZCB0byBiZSBzdGF0aWMsXG4gKiBtZWFuaW5nIHlvdSBhcmUgbm90IGFibGUgdG8gdXBkYXRlIHRoZW0gYW5kIGhhdmUgdGhlIHRlbXBsYXRlIHVwZGF0ZSBhY2NvcmRpbmdseS5cbiAqIE1hcmtpbmcgYSBwcm9wZXJ0eSBhcyB0cmFja2VkIG1lYW5zIHRoYXQgd2hlbiB0aGF0IHByb3BlcnR5IGNoYW5nZXMsXG4gKiBhIHJlcmVuZGVyIG9mIHRoZSBjb21wb25lbnQgaXMgc2NoZWR1bGVkIHNvIHRoZSB0ZW1wbGF0ZSBpcyBrZXB0IHVwIHRvIGRhdGUuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgQ29tcG9uZW50IGZyb20gJ0Bub3JpdGgvZ2xpbW1lci1jb21wb25lbnQnO1xuICogaW1wb3J0IHsgdHJhY2tlZCB9IGZyb20gJ0Bub3JpdGgvZ2xpbW1lci10cmFja2luZyc7XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXlDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICogICAgQHRyYWNrZWRcbiAqICAgIHJlbWFpbmluZ0FwcGxlcyA9IDEwXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHNvbWV0aGluZyBjaGFuZ2VzIHRoZSBjb21wb25lbnQncyBgcmVtYWluaW5nQXBwbGVzYCBwcm9wZXJ0eSwgdGhlIHJlcmVuZGVyXG4gKiB3aWxsIGJlIHNjaGVkdWxlZC5cbiAqXG4gKiBAZXhhbXBsZSBDb21wdXRlZCBQcm9wZXJ0aWVzXG4gKlxuICogSW4gdGhlIGNhc2UgdGhhdCB5b3UgaGF2ZSBhIGdldHRlciB0aGF0IGRlcGVuZHMgb24gb3RoZXIgcHJvcGVydGllcywgdHJhY2tlZFxuICogcHJvcGVydGllcyBhY2Nlc3NlZCB3aXRoaW4gdGhlIGdldHRlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgdHJhY2tlZCBmb3IgeW91LlxuICogVGhhdCBtZWFucyB3aGVuIGFueSBvZiB0aG9zZSBkZXBlbmRlbnQgdHJhY2tlZCBwcm9wZXJ0aWVzIGlzIGNoYW5nZWQsIGFcbiAqIHJlcmVuZGVyIG9mIHRoZSBjb21wb25lbnQgd2lsbCBiZSBzY2hlZHVsZWQuXG4gKlxuICogSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIHdlIGhhdmUgdHdvIHByb3BlcnRpZXMsXG4gKiBgZWF0ZW5BcHBsZXNgLCBhbmQgYHJlbWFpbmluZ0FwcGxlc2AuXG4gKlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCBDb21wb25lbnQgZnJvbSAnQG5vcml0aC9nbGltbWVyLWNvbXBvbmVudCc7XG4gKiBpbXBvcnQgeyB0cmFja2VkIH0gZnJvbSAnQG5vcml0aC9nbGltbWVyLXRyYWNraW5nJztcbiAqXG4gKiBjb25zdCB0b3RhbEFwcGxlcyA9IDEwMDtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjbGFzcyBNeUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudCB7XG4gKiAgICBAdHJhY2tlZFxuICogICAgZWF0ZW5BcHBsZXMgPSAwXG4gKlxuICogICAgZ2V0IHJlbWFpbmluZ0FwcGxlcygpIHtcbiAqICAgICAgcmV0dXJuIHRvdGFsQXBwbGVzIC0gdGhpcy5lYXRlbkFwcGxlcztcbiAqICAgIH1cbiAqXG4gKiAgICBpbmNyZW1lbnQoKSB7XG4gKiAgICAgIHRoaXMuZWF0ZW5BcHBsZXMgPSB0aGlzLmVhdGVuQXBwbGVzICsgMTtcbiAqICAgIH1cbiAqICB9XG4gKiBgYGBcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjb25zdCB0cmFja2VkOiBQcm9wZXJ0eURlY29yYXRvciA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICBjb25zdCBbdGFyZ2V0LCBrZXksIGRlc2NyaXB0b3JdID0gYXJncztcblxuICAvLyBFcnJvciBvbiBgQHRyYWNrZWQoKWAsIGBAdHJhY2tlZCguLi5hcmdzKWAsIGFuZCBgQHRyYWNrZWQgZ2V0IHByb3BOYW1lKClgXG4gIGlmIChERUJVRyAmJiB0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJykgdGhyb3dUcmFja2VkV2l0aEFyZ3VtZW50c0Vycm9yKGFyZ3MpO1xuICBpZiAoREVCVUcgJiYgdGFyZ2V0ID09PSB1bmRlZmluZWQpIHRocm93VHJhY2tlZFdpdGhFbXB0eUFyZ3VtZW50c0Vycm9yKCk7XG4gIGlmIChERUJVRyAmJiBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZ2V0KSB0aHJvd1RyYWNrZWRDb21wdXRlZFByb3BlcnR5RXJyb3IoKTtcblxuICBpZiAoZGVzY3JpcHRvcikge1xuICAgIHJldHVybiBkZXNjcmlwdG9yRm9yRmllbGQodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuICB9XG4gIC8vIEluIFR5cGVTY3JpcHQncyBpbXBsZW1lbnRhdGlvbiwgZGVjb3JhdG9ycyBvbiBzaW1wbGUgY2xhc3MgZmllbGRzIGRvIG5vdFxuICAvLyByZWNlaXZlIGEgZGVzY3JpcHRvciwgc28gd2UgZGVmaW5lIHRoZSBwcm9wZXJ0eSBvbiB0aGUgdGFyZ2V0IGRpcmVjdGx5LlxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3JGb3JGaWVsZCh0YXJnZXQsIGtleSkpO1xufTtcblxuZnVuY3Rpb24gdGhyb3dUcmFja2VkQ29tcHV0ZWRQcm9wZXJ0eUVycm9yKCk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBUaGUgQHRyYWNrZWQgZGVjb3JhdG9yIGRvZXMgbm90IG5lZWQgdG8gYmUgYXBwbGllZCB0byBnZXR0ZXJzLiBQcm9wZXJ0aWVzIGltcGxlbWVudGVkIHVzaW5nIGEgZ2V0dGVyIHdpbGwgcmVjb21wdXRlIGF1dG9tYXRpY2FsbHkgd2hlbiBhbnkgdHJhY2tlZCBwcm9wZXJ0aWVzIHRoZXkgYWNjZXNzIGNoYW5nZS5gXG4gICk7XG59XG5cbmZ1bmN0aW9uIHRocm93VHJhY2tlZFdpdGhBcmd1bWVudHNFcnJvcihhcmdzOiB1bmtub3duW10pOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgWW91IGF0dGVtcHRlZCB0byB1c2UgQHRyYWNrZWQgd2l0aCAke1xuICAgICAgYXJncy5sZW5ndGggPiAxID8gJ2FyZ3VtZW50cycgOiAnYW4gYXJndW1lbnQnXG4gICAgfSAoIEB0cmFja2VkKCR7YXJnc1xuICAgICAgLm1hcCgoZCkgPT4gYCcke2R9J2ApXG4gICAgICAuam9pbihcbiAgICAgICAgJywgJ1xuICAgICAgKX0pICksIHdoaWNoIGlzIG5vIGxvbmdlciBuZWNlc3Nhcnkgbm9yIHN1cHBvcnRlZC4gRGVwZW5kZW5jaWVzIGFyZSBub3cgYXV0b21hdGljYWxseSB0cmFja2VkLCBzbyB5b3UgY2FuIGp1c3QgdXNlICR7J2BAdHJhY2tlZGAnfS5gXG4gICk7XG59XG5cbmZ1bmN0aW9uIHRocm93VHJhY2tlZFdpdGhFbXB0eUFyZ3VtZW50c0Vycm9yKCk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICdZb3UgYXR0ZW1wdGVkIHRvIHVzZSBAdHJhY2tlZCgpLCB3aGljaCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IG5vciBzdXBwb3J0ZWQuIFJlbW92ZSB0aGUgcGFyZW50aGVzZXMgYW5kIHlvdSB3aWxsIGJlIGdvb2QgdG8gZ28hJ1xuICApO1xufVxuXG4vKipcbiAqIFdoZW5ldmVyIGEgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0eSBpcyBlbnRlcmVkLCB0aGUgY3VycmVudCB0cmFja2VyIGlzXG4gKiBzYXZlZCBvZmYgYW5kIGEgbmV3IHRyYWNrZXIgaXMgcmVwbGFjZWQuXG4gKlxuICogQW55IHRyYWNrZWQgcHJvcGVydGllcyBjb25zdW1lZCBhcmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdHJhY2tlci5cbiAqXG4gKiBXaGVuIGEgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0eSBpcyBleGl0ZWQsIHRoZSB0cmFja2VyJ3MgdGFncyBhcmVcbiAqIGNvbWJpbmVkIGFuZCBhZGRlZCB0byB0aGUgcGFyZW50IHRyYWNrZXIuXG4gKlxuICogVGhlIGNvbnNlcXVlbmNlIGlzIHRoYXQgZWFjaCB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGhhcyBhIHRhZ1xuICogdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgdHJhY2tlZCBwcm9wZXJ0aWVzIGNvbnN1bWVkIGluc2lkZSBvZlxuICogaXRzZWxmLCBpbmNsdWRpbmcgY2hpbGQgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0aWVzLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxudHlwZSBEZWNvcmF0b3JQcm9wZXJ0eURlc2NyaXB0b3IgPSAoUHJvcGVydHlEZXNjcmlwdG9yICYgeyBpbml0aWFsaXplcj86IGFueSB9KSB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gZGVzY3JpcHRvckZvckZpZWxkPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihcbiAgX3RhcmdldDogVCxcbiAga2V5OiBLLFxuICBkZXNjPzogRGVjb3JhdG9yUHJvcGVydHlEZXNjcmlwdG9yXG4pOiBQcm9wZXJ0eURlc2NyaXB0b3Ige1xuICBpZiAoREVCVUcgJiYgZGVzYyAmJiAoZGVzYy52YWx1ZSB8fCBkZXNjLmdldCB8fCBkZXNjLnNldCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgWW91IGF0dGVtcHRlZCB0byB1c2UgQHRyYWNrZWQgb24gJHtTdHJpbmcoXG4gICAgICAgIGtleVxuICAgICAgKX0sIGJ1dCB0aGF0IGVsZW1lbnQgaXMgbm90IGEgY2xhc3MgZmllbGQuIEB0cmFja2VkIGlzIG9ubHkgdXNhYmxlIG9uIGNsYXNzIGZpZWxkcy4gTmF0aXZlIGdldHRlcnMgYW5kIHNldHRlcnMgd2lsbCBhdXRvdHJhY2sgYWRkIGFueSB0cmFja2VkIGZpZWxkcyB0aGV5IGVuY291bnRlciwgc28gdGhlcmUgaXMgbm8gbmVlZCBtYXJrIGdldHRlcnMgYW5kIHNldHRlcnMgd2l0aCBAdHJhY2tlZC5gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHsgZ2V0dGVyLCBzZXR0ZXIgfSA9IHRyYWNrZWREYXRhPFQsIEs+KGtleSwgZGVzYyAmJiBkZXNjLmluaXRpYWxpemVyKTtcblxuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBnZXQodGhpczogVCk6IGFueSB7XG4gICAgICByZXR1cm4gZ2V0dGVyKHRoaXMpO1xuICAgIH0sXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHNldCh0aGlzOiBULCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgICBzZXR0ZXIodGhpcywgbmV3VmFsdWUpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,137 @@
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ 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;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ };
20
+ var __importStar = (this && this.__importStar) || function (mod) {
21
+ if (mod && mod.__esModule) return mod;
22
+ var result = {};
23
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
24
+ __setModuleDefault(result, mod);
25
+ return result;
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ /* eslint-disable @typescript-eslint/explicit-function-return-type */
29
+ const { test } = QUnit;
30
+ const env_1 = require("@glimmer/env");
31
+ const glimmer_tracking_1 = require("@norith/glimmer-tracking");
32
+ const TSFixtures = __importStar(require("./fixtures/typescript"));
33
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
34
+ // @ts-ignore
35
+ const BabelFixtures = __importStar(require("./fixtures/babel"));
36
+ QUnit.module('[@glimmer/tracking] @cached Decorators');
37
+ test('it works', function (assert) {
38
+ class Person {
39
+ constructor() {
40
+ this.firstName = 'Jen';
41
+ this.lastName = 'Weber';
42
+ }
43
+ get fullName() {
44
+ const fullName = `${this.firstName} ${this.lastName}`;
45
+ assert.step(fullName);
46
+ return fullName;
47
+ }
48
+ }
49
+ __decorate([
50
+ glimmer_tracking_1.tracked
51
+ ], Person.prototype, "firstName", void 0);
52
+ __decorate([
53
+ glimmer_tracking_1.tracked
54
+ ], Person.prototype, "lastName", void 0);
55
+ __decorate([
56
+ glimmer_tracking_1.cached
57
+ ], Person.prototype, "fullName", null);
58
+ const person = new Person();
59
+ assert.verifySteps([], 'getter is not called after class initialization');
60
+ assert.strictEqual(person.fullName, 'Jen Weber');
61
+ assert.verifySteps(['Jen Weber'], 'getter was called after property access');
62
+ assert.strictEqual(person.fullName, 'Jen Weber');
63
+ assert.verifySteps([], 'getter was not called again after repeated property access');
64
+ person.firstName = 'Kenneth';
65
+ assert.verifySteps([], 'changing a property does not trigger an eager re-computation');
66
+ assert.strictEqual(person.fullName, 'Kenneth Weber');
67
+ assert.verifySteps(['Kenneth Weber'], 'accessing the property triggers a re-computation');
68
+ assert.strictEqual(person.fullName, 'Kenneth Weber');
69
+ assert.verifySteps([], 'getter was not called again after repeated property access');
70
+ person.lastName = 'Larsen';
71
+ assert.verifySteps([], 'changing a property does not trigger an eager re-computation');
72
+ assert.strictEqual(person.fullName, 'Kenneth Larsen');
73
+ assert.verifySteps(['Kenneth Larsen'], 'accessing the property triggers a re-computation');
74
+ });
75
+ // https://github.com/ember-polyfills/ember-cached-decorator-polyfill/issues/7
76
+ test('it has a separate cache per class instance', function (assert) {
77
+ class Person {
78
+ constructor(firstName, lastName) {
79
+ this.firstName = firstName;
80
+ this.lastName = lastName;
81
+ }
82
+ get fullName() {
83
+ const fullName = `${this.firstName} ${this.lastName}`;
84
+ assert.step(fullName);
85
+ return fullName;
86
+ }
87
+ }
88
+ __decorate([
89
+ glimmer_tracking_1.tracked
90
+ ], Person.prototype, "firstName", void 0);
91
+ __decorate([
92
+ glimmer_tracking_1.tracked
93
+ ], Person.prototype, "lastName", void 0);
94
+ __decorate([
95
+ glimmer_tracking_1.cached
96
+ ], Person.prototype, "fullName", null);
97
+ const jen = new Person('Jen', 'Weber');
98
+ const chris = new Person('Chris', 'Garrett');
99
+ assert.verifySteps([], 'getter is not called after class initialization');
100
+ assert.strictEqual(jen.fullName, 'Jen Weber');
101
+ assert.verifySteps(['Jen Weber'], 'getter was called after property access');
102
+ assert.strictEqual(jen.fullName, 'Jen Weber');
103
+ assert.verifySteps([], 'getter was not called again after repeated property access');
104
+ assert.strictEqual(chris.fullName, 'Chris Garrett', 'other instance has a different value');
105
+ assert.verifySteps(['Chris Garrett'], 'getter was called after property access');
106
+ assert.strictEqual(chris.fullName, 'Chris Garrett');
107
+ assert.verifySteps([], 'getter was not called again after repeated property access');
108
+ chris.lastName = 'Manson';
109
+ assert.verifySteps([], 'changing a property does not trigger an eager re-computation');
110
+ assert.strictEqual(jen.fullName, 'Jen Weber', 'other instance is unaffected');
111
+ assert.verifySteps([], 'getter was not called again after repeated property access');
112
+ assert.strictEqual(chris.fullName, 'Chris Manson');
113
+ assert.verifySteps(['Chris Manson'], 'getter was called after property access');
114
+ assert.strictEqual(jen.fullName, 'Jen Weber', 'other instance is unaffected');
115
+ assert.verifySteps([], 'getter was not called again after repeated property access');
116
+ });
117
+ [
118
+ ['Babel', BabelFixtures],
119
+ ['TypeScript', TSFixtures],
120
+ ].forEach(([compiler, F]) => {
121
+ QUnit.module(`[@glimmer/tracking] Cached Property Decorators with ${compiler}`);
122
+ if (env_1.DEBUG) {
123
+ test('Cached decorator on a property throws an error', (assert) => {
124
+ assert.throws(F.createClassWithCachedProperty);
125
+ });
126
+ test('Cached decorator with a setter throws an error', (assert) => {
127
+ assert.throws(F.createClassWithCachedSetter);
128
+ });
129
+ test('Cached decorator with arguments throws an error', function (assert) {
130
+ assert.throws(F.createClassWithCachedDependentKeys, /@cached\('firstName', 'lastName'\)/, 'the correct error is thrown');
131
+ });
132
+ test('Using @cached as a decorator factory throws an error', function (assert) {
133
+ assert.throws(F.createClassWithCachedAsDecoratorFactory, /@cached\(\)/, 'The correct error is thrown');
134
+ });
135
+ }
136
+ });
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVkLWRlY29yYXRvci10ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvdHJhY2tpbmcvdGVzdC9jYWNoZWQtZGVjb3JhdG9yLXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFFdkIsc0NBQXFDO0FBQ3JDLCtEQUEyRDtBQUUzRCxrRUFBb0Q7QUFDcEQsNkRBQTZEO0FBQzdELGFBQWE7QUFDYixnRUFBa0Q7QUFFbEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0FBRXZELElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxNQUFNO0lBQy9CLE1BQU0sTUFBTTtRQUFaO1lBQ1csY0FBUyxHQUFHLEtBQUssQ0FBQztZQUNsQixhQUFRLEdBQUcsT0FBTyxDQUFDO1FBUTlCLENBQUM7UUFMQyxJQUFJLFFBQVE7WUFDVixNQUFNLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEIsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztLQUNGO0lBVFU7UUFBUiwwQkFBTzs2Q0FBbUI7SUFDbEI7UUFBUiwwQkFBTzs0Q0FBb0I7SUFHNUI7UUFEQyx5QkFBTTswQ0FLTjtJQUdILE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7SUFDNUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsaURBQWlELENBQUMsQ0FBQztJQUUxRSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDakQsTUFBTSxDQUFDLFdBQVcsQ0FB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L0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaURBQWlELEVBQUUsVUFBVSxNQUFNO1lBQ3RFLE1BQU0sQ0FBQyxNQUFNLENBQ1gsQ0FBQyxDQUFDLGtDQUFrQyxFQUNwQyxvQ0FBb0MsRUFDcEMsNkJBQTZCLENBQzlCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxzREFBc0QsRUFBRSxVQUFVLE1BQU07WUFDM0UsTUFBTSxDQUFDLE1BQU0sQ0FDWCxDQUFDLENBQUMsdUNBQXVDLEVBQ3pDLGFBQWEsRUFDYiw2QkFBNkIsQ0FDOUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xuY29uc3QgeyB0ZXN0IH0gPSBRVW5pdDtcblxuaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgdHJhY2tlZCwgY2FjaGVkIH0gZnJvbSAnQG5vcml0aC9nbGltbWVyLXRyYWNraW5nJztcblxuaW1wb3J0ICogYXMgVFNGaXh0dXJlcyBmcm9tICcuL2ZpeHR1cmVzL3R5cGVzY3JpcHQnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0ICogYXMgQmFiZWxGaXh0dXJlcyBmcm9tICcuL2ZpeHR1cmVzL2JhYmVsJztcblxuUVVuaXQubW9kdWxlKCdbQGdsaW1tZXIvdHJhY2tpbmddIEBjYWNoZWQgRGVjb3JhdG9ycycpO1xuXG50ZXN0KCdpdCB3b3JrcycsIGZ1bmN0aW9uIChhc3NlcnQpIHtcbiAgY2xhc3MgUGVyc29uIHtcbiAgICBAdHJhY2tlZCBmaXJzdE5hbWUgPSAnSmVuJztcbiAgICBAdHJhY2tlZCBsYXN0TmFtZSA9ICdXZWJlcic7XG5cbiAgICBAY2FjaGVkXG4gICAgZ2V0IGZ1bGxOYW1lKCkge1xuICAgICAgY29uc3QgZnVsbE5hbWUgPSBgJHt0aGlzLmZpcnN0TmFtZX0gJHt0aGlzLmxhc3ROYW1lfWA7XG4gICAgICBhc3NlcnQuc3RlcChmdWxsTmFtZSk7XG4gICAgICByZXR1cm4gZnVsbE5hbWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGVyc29uID0gbmV3IFBlcnNvbigpO1xuICBhc3NlcnQudmVyaWZ5U3RlcHMoW10sICdnZXR0ZXIgaXMgbm90IGNhbGxlZCBhZnRlciBjbGFzcyBpbml0aWFsaXphdGlvbicpO1xuXG4gIGFzc2VydC5zdHJpY3RFcXVhbChwZXJzb24uZnVsbE5hbWUsICdKZW4gV2ViZXInKTtcbiAgYXNzZXJ0LnZlcmlmeVN0ZXBzKFsnSmVuIFdlYmVyJ10sICdnZXR0ZXIgd2FzIGNhbGxlZCBhZnRlciBwcm9wZXJ0eSBhY2Nlc3MnKTtcblxuICBhc3NlcnQuc3RyaWN0RXF1YWwocGVyc29uLmZ1bGxOYW1lLCAnSmVuIFdlYmVyJyk7XG4gIGFzc2VydC52ZXJpZnlTdGVwcyhbXSwgJ2dldHRlciB3YXMgbm90IGNhbGxlZCBhZ2FpbiBhZnRlciByZXBlYXRlZCBwcm9wZXJ0eSBhY2Nlc3MnKTtcblxuICBwZXJzb24uZmlyc3ROYW1lID0gJ0tlbm5ldGgnO1xuICBhc3NlcnQudmVyaWZ5U3RlcHMoW10sICdjaGFuZ2luZyBhIHByb3BlcnR5IGRvZXMgbm90IHRyaWdnZXIgYW4gZWFnZXIgcmUtY29tcHV0YXRpb24nKTtcblxuICBhc3NlcnQuc3RyaWN0RXF1YWwocGVyc29uLmZ1bGxOYW1lLCAnS2VubmV0aCBXZWJlcicpO1xuICBhc3NlcnQudmVyaWZ5U3RlcHMoWydLZW5uZXRoIFdlYmVyJ10sICdhY2Nlc3NpbmcgdGhlIHByb3BlcnR5IHRyaWdnZXJzIGEgcmUtY29tcHV0YXRpb24nKTtcblxuICBhc3NlcnQuc3RyaWN0RXF1YWwocGVyc29uLmZ1bGxOYW1lLCAnS2VubmV0aCBXZWJlcicpO1xuICBhc3NlcnQudmVyaWZ5U3RlcHMoW10sICdnZXR0ZXIgd2FzIG5vdCBjYWxsZWQgYWdhaW4gYWZ0ZXIgcmVwZWF0ZWQgcHJvcGVydHkgYWNjZXNzJyk7XG5cbiAgcGVyc29uLmxhc3ROYW1lID0gJ0xhcnNlbic7XG4gIGFzc2VydC52ZXJpZnlTdGVwcyhbXSwgJ2NoYW5naW5nIGEgcHJvcGVydHkgZG9lcyBub3QgdHJpZ2dlciBhbiBlYWdlciByZS1jb21wdXRhdGlvbicpO1xuXG4gIGFzc2VydC5zdHJpY3RFcXVhbChwZXJzb24uZnVsbE5hbWUsICdLZW5uZXRoIExhcnNlbicpO1xuICBhc3NlcnQudmVyaWZ5U3RlcHMoWydLZW5uZXRoIExhcnNlbiddLCAnYWNjZXNzaW5nIHRoZSBwcm9wZXJ0eSB0cmlnZ2VycyBhIHJlLWNvbXB1dGF0aW9uJyk7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2VtYmVyLXBvbHlmaWxscy9lbWJlci1jYWNoZWQtZGVjb3JhdG9yLXBvbHlmaWxsL2lzc3Vlcy83XG50ZXN0KCdpdCBoYXMgYSBzZXBhcmF0ZSBjYWNoZSBwZXIgY2xhc3MgaW5zdGFuY2UnLCBmdW5jdGlvbiAoYXNzZXJ0KSB7XG4gIGNsYXNzIFBlcnNvbiB7XG4gICAgQHRyYWNrZWQgZmlyc3ROYW1lOiBzdHJpbmc7XG4gICAgQHRyYWNrZWQgbGFzdE5hbWU6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGZpcnN0TmFtZTogc3RyaW5nLCBsYXN0TmFtZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTtcbiAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTtcbiAgICB9XG5cbiAgICBAY2FjaGVkXG4gICAgZ2V0IGZ1bGxOYW1lKCkge1xuICAgICAgY29uc3QgZnVsbE5hbWUgPSBgJHt0aGlzLmZpcnN0TmFtZX0gJHt0aGlzLmxhc3ROYW1lfWA7XG4gICAgICBhc3NlcnQuc3RlcChmdWxsTmFtZSk7XG4gICAgICByZXR1cm4gZnVsbE5hbWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgamVuID0gbmV3IFBlcnNvbignSmVuJywgJ1dlYmVyJyk7XG4gIGNvbnN0IGNocmlzID0gbmV3IFBlcnNvbignQ2hyaXMnLCAnR2FycmV0dCcpO1xuXG4gIGFzc2VydC52ZXJpZnlTdGVwcyhbXSwgJ2dldHRlciBpcyBub3QgY2FsbGVkIGFmdGVyIGNsYXNzIGluaXRpYWxpemF0aW9uJyk7XG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGplbi5mdWxsTmFtZSwgJ0plbiBXZWJlcicpO1xuICBhc3NlcnQudmVyaWZ5U3RlcHMoWydKZW4gV2ViZXInXSwgJ2dldHRlciB3YXMgY2FsbGVkIGFmdGVyIHByb3BlcnR5IGFjY2VzcycpO1xuXG4gIGFzc2VydC5zdHJpY3RFcXVhbChqZW4uZnVsbE5hbWUsICdKZW4gV2ViZXInKTtcbiAgYXNzZXJ0LnZlcmlmeVN0ZXBzKFtdLCAnZ2V0dGVyIHdhcyBub3QgY2FsbGVkIGFnYWluIGFmdGVyIHJlcGVhdGVkIHByb3BlcnR5IGFjY2VzcycpO1xuXG4gIGFzc2VydC5zdHJpY3RFcXVhbChjaHJpcy5mdWxsTmFtZSwgJ0NocmlzIEdhcnJldHQnLCAnb3RoZXIgaW5zdGFuY2UgaGFzIGEgZGlmZmVyZW50IHZhbHVlJyk7XG4gIGFzc2VydC52ZXJpZnlTdGVwcyhbJ0NocmlzIEdhcnJldHQnXSwgJ2dldHRlciB3YXMgY2FsbGVkIGFmdGVyIHByb3BlcnR5IGFjY2VzcycpO1xuXG4gIGFzc2VydC5zdHJpY3RFcXVhbChjaHJpcy5mdWxsTmFtZSwgJ0NocmlzIEdhcnJldHQnKTtcbiAgYXNzZXJ0LnZlcmlmeVN0ZXBzKFtdLCAnZ2V0dGVyIHdhcyBub3QgY2FsbGVkIGFnYWluIGFmdGVyIHJlcGVhdGVkIHByb3BlcnR5IGFjY2VzcycpO1xuXG4gIGNocmlzLmxhc3ROYW1lID0gJ01hbnNvbic7XG4gIGFzc2VydC52ZXJpZnlTdGVwcyhbXSwgJ2NoYW5naW5nIGEgcHJvcGVydHkgZG9lcyBub3QgdHJpZ2dlciBhbiBlYWdlciByZS1jb21wdXRhdGlvbicpO1xuXG4gIGFzc2VydC5zdHJpY3RFcXVhbChqZW4uZnVsbE5hbWUsICdKZW4gV2ViZXInLCAnb3RoZXIgaW5zdGFuY2UgaXMgdW5hZmZlY3RlZCcpO1xuICBhc3NlcnQudmVyaWZ5U3RlcHMoW10sICdnZXR0ZXIgd2FzIG5vdCBjYWxsZWQgYWdhaW4gYWZ0ZXIgcmVwZWF0ZWQgcHJvcGVydHkgYWNjZXNzJyk7XG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGNocmlzLmZ1bGxOYW1lLCAnQ2hyaXMgTWFuc29uJyk7XG4gIGFzc2VydC52ZXJpZnlTdGVwcyhbJ0NocmlzIE1hbnNvbiddLCAnZ2V0dGVyIHdhcyBjYWxsZWQgYWZ0ZXIgcHJvcGVydHkgYWNjZXNzJyk7XG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGplbi5mdWxsTmFtZSwgJ0plbiBXZWJlcicsICdvdGhlciBpbnN0YW5jZSBpcyB1bmFmZmVjdGVkJyk7XG4gIGFzc2VydC52ZXJpZnlTdGVwcyhbXSwgJ2dldHRlciB3YXMgbm90IGNhbGxlZCBhZ2FpbiBhZnRlciByZXBlYXRlZCBwcm9wZXJ0eSBhY2Nlc3MnKTtcbn0pO1xuXG5bXG4gIFsnQmFiZWwnLCBCYWJlbEZpeHR1cmVzXSxcbiAgWydUeXBlU2NyaXB0JywgVFNGaXh0dXJlc10sXG5dLmZvckVhY2goKFtjb21waWxlciwgRl0pID0+IHtcbiAgUVVuaXQubW9kdWxlKGBbQGdsaW1tZXIvdHJhY2tpbmddIENhY2hlZCBQcm9wZXJ0eSBEZWNvcmF0b3JzIHdpdGggJHtjb21waWxlcn1gKTtcblxuICBpZiAoREVCVUcpIHtcbiAgICB0ZXN0KCdDYWNoZWQgZGVjb3JhdG9yIG9uIGEgcHJvcGVydHkgdGhyb3dzIGFuIGVycm9yJywgKGFzc2VydCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhGLmNyZWF0ZUNsYXNzV2l0aENhY2hlZFByb3BlcnR5KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0NhY2hlZCBkZWNvcmF0b3Igd2l0aCBhIHNldHRlciB0aHJvd3MgYW4gZXJyb3InLCAoYXNzZXJ0KSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKEYuY3JlYXRlQ2xhc3NXaXRoQ2FjaGVkU2V0dGVyKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0NhY2hlZCBkZWNvcmF0b3Igd2l0aCBhcmd1bWVudHMgdGhyb3dzIGFuIGVycm9yJywgZnVuY3Rpb24gKGFzc2VydCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgRi5jcmVhdGVDbGFzc1dpdGhDYWNoZWREZXBlbmRlbnRLZXlzLFxuICAgICAgICAvQGNhY2hlZFxcKCdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnXFwpLyxcbiAgICAgICAgJ3RoZSBjb3JyZWN0IGVycm9yIGlzIHRocm93bidcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdVc2luZyBAY2FjaGVkIGFzIGEgZGVjb3JhdG9yIGZhY3RvcnkgdGhyb3dzIGFuIGVycm9yJywgZnVuY3Rpb24gKGFzc2VydCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgRi5jcmVhdGVDbGFzc1dpdGhDYWNoZWRBc0RlY29yYXRvckZhY3RvcnksXG4gICAgICAgIC9AY2FjaGVkXFwoXFwpLyxcbiAgICAgICAgJ1RoZSBjb3JyZWN0IGVycm9yIGlzIHRocm93bidcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn0pO1xuIl19
@@ -0,0 +1,47 @@
1
+ export declare class Tom {
2
+ firstName: string;
3
+ }
4
+ export declare class Toran {
5
+ firstName: string;
6
+ lastName: string;
7
+ }
8
+ declare class FrozenToran {
9
+ firstName: string;
10
+ lastName: string;
11
+ }
12
+ export { FrozenToran };
13
+ export declare class PersonWithCount {
14
+ _firstName: string;
15
+ _count: number;
16
+ get firstName(): string;
17
+ set firstName(value: string);
18
+ }
19
+ export declare class PersonWithSalutation {
20
+ get salutation(): string;
21
+ get fullName(): string;
22
+ set fullName(fullName: string);
23
+ firstName: string;
24
+ lastName: string;
25
+ }
26
+ export declare class Contact {
27
+ email: string;
28
+ person: PersonForContact;
29
+ constructor(person: PersonForContact, email: string);
30
+ get contact(): string;
31
+ }
32
+ export declare class PersonForContact {
33
+ get salutation(): string;
34
+ get fullName(): string;
35
+ set fullName(fullName: string);
36
+ toString(): string;
37
+ firstName: string;
38
+ lastName: string;
39
+ }
40
+ export declare function createClassWithTrackedGetter(): any;
41
+ export declare function createClassWithCachedProperty(): any;
42
+ export declare function createClassWithTrackedSetter(): any;
43
+ export declare function createClassWithCachedSetter(): any;
44
+ export declare function createClassWithTrackedDependentKeys(): any;
45
+ export declare function createClassWithCachedDependentKeys(): any;
46
+ export declare function createClassWithTrackedAsDecoratorFactory(): any;
47
+ export declare function createClassWithCachedAsDecoratorFactory(): any;