proxy-facades 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 (136) hide show
  1. package/.idea/.name +1 -0
  2. package/.idea/modules.xml +8 -0
  3. package/.idea/proxy-facades.iml +8 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/DEVELOPMENT.md +15 -0
  6. package/LICENSE +21 -0
  7. package/RecordedReadOnProxiedObjectExt.d.ts +22 -0
  8. package/RecordedReadOnProxiedObjectExt.d.ts.map +1 -0
  9. package/RecordedReadOnProxiedObjectExt.js +41 -0
  10. package/RecordedReadOnProxiedObjectExt.js.map +1 -0
  11. package/RecordedReadOnProxiedObjectExt.ts +41 -0
  12. package/Util.d.ts +85 -0
  13. package/Util.d.ts.map +1 -0
  14. package/Util.js +239 -0
  15. package/Util.js.map +1 -0
  16. package/Util.ts +254 -0
  17. package/class-trackers/Array.d.ts +93 -0
  18. package/class-trackers/Array.d.ts.map +1 -0
  19. package/class-trackers/Array.js +193 -0
  20. package/class-trackers/Array.js.map +1 -0
  21. package/class-trackers/Array.ts +245 -0
  22. package/class-trackers/Iterator.d.ts +38 -0
  23. package/class-trackers/Iterator.d.ts.map +1 -0
  24. package/class-trackers/Iterator.js +69 -0
  25. package/class-trackers/Iterator.js.map +1 -0
  26. package/class-trackers/Iterator.ts +73 -0
  27. package/class-trackers/Map.d.ts +128 -0
  28. package/class-trackers/Map.d.ts.map +1 -0
  29. package/class-trackers/Map.js +310 -0
  30. package/class-trackers/Map.js.map +1 -0
  31. package/class-trackers/Map.ts +403 -0
  32. package/class-trackers/Set.d.ts +85 -0
  33. package/class-trackers/Set.d.ts.map +1 -0
  34. package/class-trackers/Set.js +197 -0
  35. package/class-trackers/Set.js.map +1 -0
  36. package/class-trackers/Set.ts +245 -0
  37. package/class-trackers/index.d.ts +7 -0
  38. package/class-trackers/index.d.ts.map +1 -0
  39. package/class-trackers/index.js +36 -0
  40. package/class-trackers/index.js.map +1 -0
  41. package/class-trackers/index.ts +38 -0
  42. package/class-trackers/readme.md +2 -0
  43. package/common.d.ts +235 -0
  44. package/common.d.ts.map +1 -0
  45. package/common.js +378 -0
  46. package/common.js.map +1 -0
  47. package/common.ts +501 -0
  48. package/dev_generateEsRuntimeBehaviourCheckerCode.d.ts +10 -0
  49. package/dev_generateEsRuntimeBehaviourCheckerCode.d.ts.map +1 -0
  50. package/dev_generateEsRuntimeBehaviourCheckerCode.js +76 -0
  51. package/dev_generateEsRuntimeBehaviourCheckerCode.js.map +1 -0
  52. package/dev_generateEsRuntimeBehaviourCheckerCode.ts +85 -0
  53. package/dist/mjs/RecordedReadOnProxiedObjectExt.d.ts +22 -0
  54. package/dist/mjs/RecordedReadOnProxiedObjectExt.d.ts.map +1 -0
  55. package/dist/mjs/RecordedReadOnProxiedObjectExt.js +37 -0
  56. package/dist/mjs/RecordedReadOnProxiedObjectExt.js.map +1 -0
  57. package/dist/mjs/Util.d.ts +85 -0
  58. package/dist/mjs/Util.d.ts.map +1 -0
  59. package/dist/mjs/Util.js +223 -0
  60. package/dist/mjs/Util.js.map +1 -0
  61. package/dist/mjs/class-trackers/Array.d.ts +93 -0
  62. package/dist/mjs/class-trackers/Array.d.ts.map +1 -0
  63. package/dist/mjs/class-trackers/Array.js +186 -0
  64. package/dist/mjs/class-trackers/Array.js.map +1 -0
  65. package/dist/mjs/class-trackers/Iterator.d.ts +38 -0
  66. package/dist/mjs/class-trackers/Iterator.d.ts.map +1 -0
  67. package/dist/mjs/class-trackers/Iterator.js +65 -0
  68. package/dist/mjs/class-trackers/Iterator.js.map +1 -0
  69. package/dist/mjs/class-trackers/Map.d.ts +128 -0
  70. package/dist/mjs/class-trackers/Map.d.ts.map +1 -0
  71. package/dist/mjs/class-trackers/Map.js +299 -0
  72. package/dist/mjs/class-trackers/Map.js.map +1 -0
  73. package/dist/mjs/class-trackers/Set.d.ts +85 -0
  74. package/dist/mjs/class-trackers/Set.d.ts.map +1 -0
  75. package/dist/mjs/class-trackers/Set.js +189 -0
  76. package/dist/mjs/class-trackers/Set.js.map +1 -0
  77. package/dist/mjs/class-trackers/index.d.ts +7 -0
  78. package/dist/mjs/class-trackers/index.d.ts.map +1 -0
  79. package/dist/mjs/class-trackers/index.js +32 -0
  80. package/dist/mjs/class-trackers/index.js.map +1 -0
  81. package/dist/mjs/common.d.ts +235 -0
  82. package/dist/mjs/common.d.ts.map +1 -0
  83. package/dist/mjs/common.js +361 -0
  84. package/dist/mjs/common.js.map +1 -0
  85. package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.d.ts +10 -0
  86. package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.d.ts.map +1 -0
  87. package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.js +76 -0
  88. package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.js.map +1 -0
  89. package/dist/mjs/index.d.ts +8 -0
  90. package/dist/mjs/index.d.ts.map +1 -0
  91. package/dist/mjs/index.js +8 -0
  92. package/dist/mjs/index.js.map +1 -0
  93. package/dist/mjs/objectChangeTracking.d.ts +43 -0
  94. package/dist/mjs/objectChangeTracking.d.ts.map +1 -0
  95. package/dist/mjs/objectChangeTracking.js +209 -0
  96. package/dist/mjs/objectChangeTracking.js.map +1 -0
  97. package/dist/mjs/origChangeTracking.d.ts +14 -0
  98. package/dist/mjs/origChangeTracking.d.ts.map +1 -0
  99. package/dist/mjs/origChangeTracking.js +58 -0
  100. package/dist/mjs/origChangeTracking.js.map +1 -0
  101. package/dist/mjs/proxyFacade.d.ts +45 -0
  102. package/dist/mjs/proxyFacade.d.ts.map +1 -0
  103. package/dist/mjs/proxyFacade.js +179 -0
  104. package/dist/mjs/proxyFacade.js.map +1 -0
  105. package/dist/mjs/watchedProxyFacade.d.ts +84 -0
  106. package/dist/mjs/watchedProxyFacade.d.ts.map +1 -0
  107. package/dist/mjs/watchedProxyFacade.js +300 -0
  108. package/dist/mjs/watchedProxyFacade.js.map +1 -0
  109. package/index.d.ts +8 -0
  110. package/index.d.ts.map +1 -0
  111. package/index.js +36 -0
  112. package/index.js.map +1 -0
  113. package/index.ts +7 -0
  114. package/index_esm.mjs +44 -0
  115. package/objectChangeTracking.d.ts +43 -0
  116. package/objectChangeTracking.d.ts.map +1 -0
  117. package/objectChangeTracking.js +214 -0
  118. package/objectChangeTracking.js.map +1 -0
  119. package/objectChangeTracking.ts +251 -0
  120. package/origChangeTracking.d.ts +14 -0
  121. package/origChangeTracking.d.ts.map +1 -0
  122. package/origChangeTracking.js +63 -0
  123. package/origChangeTracking.js.map +1 -0
  124. package/origChangeTracking.ts +72 -0
  125. package/package.json +52 -0
  126. package/proxyFacade.d.ts +45 -0
  127. package/proxyFacade.d.ts.map +1 -0
  128. package/proxyFacade.js +187 -0
  129. package/proxyFacade.js.map +1 -0
  130. package/proxyFacade.ts +222 -0
  131. package/readme.md +111 -0
  132. package/watchedProxyFacade.d.ts +84 -0
  133. package/watchedProxyFacade.d.ts.map +1 -0
  134. package/watchedProxyFacade.js +312 -0
  135. package/watchedProxyFacade.js.map +1 -0
  136. package/watchedProxyFacade.ts +369 -0
@@ -0,0 +1,186 @@
1
+ import { ClassTrackingConfiguration, makeIteratorTranslateValue, runChangeOperation, UnspecificObjectChange } from "../common";
2
+ import { arraysAreShallowlyEqual } from "../Util";
3
+ import { getChangeHooksForObject } from "../objectChangeTracking";
4
+ import { RecordedReadOnProxiedObjectExt } from "../RecordedReadOnProxiedObjectExt";
5
+ /**
6
+ * Listeners for one array.
7
+ * Note for specificity: There will be only one of the **change** events fired. The Recorded...Read.onChange handler will add the listeners to all possible candidates. It's this way around.
8
+ * {@link ObjectChangeHooks} are also subscribed on Arrays
9
+ */
10
+ class ArrayChangeHooks {
11
+ }
12
+ export const changeHooksForArray = new WeakMap();
13
+ export function getChangeHooksForArray(array) {
14
+ let result = changeHooksForArray.get(array);
15
+ if (result === undefined) {
16
+ changeHooksForArray.set(array, result = new ArrayChangeHooks());
17
+ }
18
+ return result;
19
+ }
20
+ /**
21
+ * Can be either used as a supervisor-class in a WatchedProxyHandler, or installed on the non-proxied object via Object.setPrototypeOf
22
+ * The "this" may be different in these cases.
23
+ */
24
+ export class ArrayChangeTracker extends Array {
25
+ // TODO: In the future, implement more fine granular change listeners that act on change of a certain index.
26
+ get _watchedProxyHandler() {
27
+ return undefined;
28
+ }
29
+ _withUnspecificChange(changeFn) {
30
+ return runChangeOperation(this, new UnspecificObjectChange(this), [getChangeHooksForObject(this).unspecificChange], changeFn);
31
+ }
32
+ //push(...items: any[]): number //already calls set
33
+ pop(...args) {
34
+ return this._withUnspecificChange(() => super.pop());
35
+ }
36
+ /**
37
+ * Will return the original object when this class is used as supervisor class in the WatchedProxyHandler
38
+ */
39
+ get _target() {
40
+ return this;
41
+ }
42
+ /**
43
+ * Pretend that this is an array
44
+ */
45
+ get ["constructor"]() {
46
+ return Array;
47
+ }
48
+ shift(...args) {
49
+ return this._withUnspecificChange(() => super.shift());
50
+ }
51
+ //@ts-ignore
52
+ sort(...args) {
53
+ return this._withUnspecificChange(() => super.sort());
54
+ }
55
+ //@ts-ignore
56
+ fill(...args) {
57
+ return this._withUnspecificChange(() => super.fill(...args));
58
+ }
59
+ }
60
+ export class RecordedArrayValuesRead extends RecordedReadOnProxiedObjectExt {
61
+ get origObj() {
62
+ return this.obj;
63
+ }
64
+ constructor(values) {
65
+ super();
66
+ this.values = values;
67
+ }
68
+ getAffectingChangeHooks(target) {
69
+ return [
70
+ getChangeHooksForObject(target).changeOwnKeys,
71
+ getChangeHooksForObject(target).changeAnyProperty,
72
+ getChangeHooksForObject(target).unspecificChange,
73
+ ];
74
+ }
75
+ equals(other) {
76
+ if (!(other instanceof RecordedArrayValuesRead)) {
77
+ return false;
78
+ }
79
+ return this.proxyHandler === other.proxyHandler && this.obj === other.obj && arraysAreShallowlyEqual(this.values, other.values);
80
+ }
81
+ get isChanged() {
82
+ return !arraysAreShallowlyEqual(this.values, this.origObj);
83
+ }
84
+ }
85
+ /**
86
+ * Patches methods / accessors
87
+ */
88
+ export class ArrayReadTracker extends Array {
89
+ get _watchedProxyHandler() {
90
+ throw new Error("not calling from inside a WatchedProxyHandler"); // Will return the handler when called through the handler
91
+ }
92
+ get _target() {
93
+ throw new Error("not calling from inside a WatchedProxyHandler"); // Will return the value when called through the handler
94
+ }
95
+ _fireAfterValuesRead() {
96
+ var _a;
97
+ let recordedArrayValuesRead = new RecordedArrayValuesRead([...this._target]);
98
+ (_a = this._watchedProxyHandler) === null || _a === void 0 ? void 0 : _a.fireAfterRead(recordedArrayValuesRead);
99
+ }
100
+ /**
101
+ * Pretend that this is an array
102
+ */
103
+ get ["constructor"]() {
104
+ return Array;
105
+ }
106
+ values() {
107
+ const result = this._target.values();
108
+ this._fireAfterValuesRead();
109
+ return makeIteratorTranslateValue(result, (value) => this._watchedProxyHandler.getFacade().getProxyFor(value));
110
+ }
111
+ entries() {
112
+ const result = this._target.entries();
113
+ this._fireAfterValuesRead();
114
+ return makeIteratorTranslateValue(result, ([index, value]) => [index, this._watchedProxyHandler.getFacade().getProxyFor(value)]);
115
+ }
116
+ [Symbol.iterator]() {
117
+ const result = this._target[Symbol.iterator]();
118
+ this._fireAfterValuesRead();
119
+ return makeIteratorTranslateValue(result, (value) => this._watchedProxyHandler.getFacade().getProxyFor(value));
120
+ }
121
+ get length() {
122
+ const result = this._target.length;
123
+ this._fireAfterValuesRead();
124
+ return result;
125
+ }
126
+ //@ts-ignore
127
+ shift(...args) {
128
+ if (this.length == 0) {
129
+ return undefined;
130
+ }
131
+ return runChangeOperation(this, new UnspecificObjectChange(this), [getChangeHooksForObject(this).changeOwnKeys, getChangeHooksForObject(this).unspecificChange], () => {
132
+ //@ts-ignore
133
+ const result = super.shift(...args);
134
+ this._fireAfterValuesRead();
135
+ return result;
136
+ });
137
+ }
138
+ /**
139
+ * Keep this method so it it treated as handled and not as making-unspecific-reads
140
+ * @param args
141
+ */
142
+ forEach(...args) {
143
+ //@ts-ignore
144
+ return super.forEach(...args); //reads "length" an thererfore triggers the read
145
+ }
146
+ //@ts-ignore
147
+ pop(...args) {
148
+ if (this.length == 0) {
149
+ return undefined;
150
+ }
151
+ return runChangeOperation(this, new UnspecificObjectChange(this), [getChangeHooksForObject(this).changeOwnKeys, getChangeHooksForObject(this).unspecificChange], () => {
152
+ //@ts-ignore
153
+ const result = super.pop(...args);
154
+ this._fireAfterValuesRead();
155
+ return result;
156
+ });
157
+ }
158
+ }
159
+ export const config = new class extends ClassTrackingConfiguration {
160
+ constructor() {
161
+ super(...arguments);
162
+ this.clazz = Array;
163
+ this.readTracker = ArrayReadTracker;
164
+ this.changeTracker = ArrayChangeTracker;
165
+ /**
166
+ * Built-in Methods, which are using fields / calling methods on the proxy transparently/loyally, so those methods don't call/use internal stuff directly.
167
+ * Tested with, see dev_generateEsRuntimeBehaviourCheckerCode.ts
168
+ * May include read-only / reader methods
169
+ */
170
+ this.knownHighLevelMethods = new Set(["at", "concat", "map", "forEach", "join", "slice", "some", "filter", "find", "every", "findIndex", "includes", "indexOf", Symbol.iterator, "lastIndexOf", "push", "reduce", "reduceRight", "toLocaleString", "toString", "unshift", "splice", "copyWithin", "reverse"]);
171
+ /**
172
+ * Non-high level. These fire `RecordedUnspecificRead`s then. So better implement them instead to fire i.e RecordedArrayValuesRead.
173
+ */
174
+ this.readOnlyMethods = new Set(["keys" /* TODO: Implement .keys, mind, that it is different to RecordedOwnKeysRead which allows gaps*/]);
175
+ /**
176
+ * Non-high level. Same as above: better implement them
177
+ */
178
+ this.readOnlyFields = new Set([Symbol.unscopables]);
179
+ /**
180
+ *
181
+ */
182
+ this.receiverMustBeNonProxied = false;
183
+ this.trackSettingObjectProperties = true;
184
+ }
185
+ };
186
+ //# sourceMappingURL=Array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Array.js","sourceRoot":"","sources":["../../../class-trackers/Array.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { Clazz, ForWatchedProxyHandler, GetIteratorValueProxiedFn } from "../common";
2
+ import { WatchedProxyHandler } from "../watchedProxyFacade";
3
+ export declare class IteratorReadTracker<T> extends Iterator<T> implements ForWatchedProxyHandler<Iterator<T>> {
4
+ /**
5
+ * This field should be set by the method that returns the Iterator. I.e. Array#values
6
+ */
7
+ _getValueProxied?: GetIteratorValueProxiedFn<T>;
8
+ get _watchedProxyHandler(): WatchedProxyHandler;
9
+ get _target(): Iterator<T>;
10
+ constructor();
11
+ /**
12
+ * Pretend that this is an Iterator
13
+ */
14
+ get ["constructor"](): IteratorConstructor;
15
+ next(...args: unknown[]): IteratorResult<T, any>;
16
+ }
17
+ export declare const IteratorConfig: {
18
+ clazz: Clazz;
19
+ worksForSubclasses: boolean;
20
+ readTracker: typeof IteratorReadTracker;
21
+ changeTracker: undefined;
22
+ /**
23
+ * The methods, not implemented in readTracker, are high-level
24
+ */
25
+ receiverMustBeNonProxied: boolean;
26
+ /**
27
+ * The Array/Set/Map's [Symbol.Iterator]/keys/values methods already fires a read of **all** values (simply stupid). So the Iterator/IteratorResult does not need to fire any more. The tests also don't expect this to fire.
28
+ * Still could be enabled in the future for really fine granular behaviour tracking
29
+ */
30
+ trackTreads: boolean;
31
+ proxyUnhandledMethodResults: boolean;
32
+ knownHighLevelMethods: Set<import("../common").ObjKey>;
33
+ readOnlyMethods: Set<import("../common").ObjKey>;
34
+ readOnlyFields: Set<import("../common").ObjKey>;
35
+ trackSettingObjectProperties: boolean;
36
+ getTrackerClasses(): Clazz[];
37
+ };
38
+ //# sourceMappingURL=Iterator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Iterator.d.ts","sourceRoot":"","sources":["../../../class-trackers/Iterator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,EAAE,sBAAsB,EAAE,yBAAyB,EAAC,MAAM,WAAW,CAAC;AAC/G,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAqB1D,qBAAa,mBAAmB,CAAC,CAAC,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAE,YAAW,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClG;;OAEG;IACH,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAEhD,IAAI,oBAAoB,IAAI,mBAAmB,CAE9C;IAED,IAAI,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAEzB;;IAMD;;OAEG;IACH,IAAI,CAAC,aAAa,CAAC,wBAElB;IAED,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC;CAQnD;AAED,eAAO,MAAM,cAAc;WACE,KAAK;;;;IAI9B;;OAEG;;IAEH;;;OAGG;;;;;;;;CAGN,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { ClassTrackingConfiguration } from "../common";
2
+ // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3
+ // ******** THIS FILE IS NOT USED !!!!!! *********
4
+ // ***********************************************
5
+ // Currently we use a much simpler way to translate the iteration values to proxies, see common.ts/makeIteratorTranslateValue
6
+ // Still we leave this file, cause may be in the future there will be super fine per-iteration read tracking
7
+ // ---------------------------------------------------------------------------------------------------------
8
+ // Supplying a proxy with ReadTracker for to
9
+ // - easily handle all kinds of Subclasses (Array/Set/Map-Iterator)
10
+ // - easily allow high-level methods like forEach, filter, ... This would be difficult when subclassing these
11
+ //
12
+ // TO make it work:
13
+ //inside class ArrayReadTacker {
14
+ // values(): ArrayIterator<T> {
15
+ // const result = this._target.values();
16
+ // this._fireAfterValuesRead();
17
+ // result._getValueProxied = (value) => this._watchedProxyHandler.getFacade().getProxyFor(value)
18
+ // return this._watchedProxyHandler.getFacade().getProxyFor(result); // Wrap in proxy. There's special handling for proxied iterators to return the iteration value proxied.
19
+ // }
20
+ //}
21
+ export class IteratorReadTracker extends Iterator {
22
+ get _watchedProxyHandler() {
23
+ throw new Error("not calling from inside a WatchedProxyHandler"); // Will return the handler when called through the handler
24
+ }
25
+ get _target() {
26
+ throw new Error("not calling from inside a WatchedProxyHandler"); // Will return the value when called through the handler
27
+ }
28
+ constructor() {
29
+ super();
30
+ }
31
+ /**
32
+ * Pretend that this is an Iterator
33
+ */
34
+ get ["constructor"]() {
35
+ return Iterator; // TODO: subclass
36
+ }
37
+ next(...args) {
38
+ const { value, done } = this._target.next(...args);
39
+ //@ts-ignore
40
+ return {
41
+ value: this._watchedProxyHandler.getFacade().getProxyFor(value),
42
+ done
43
+ };
44
+ }
45
+ }
46
+ export const IteratorConfig = new class extends ClassTrackingConfiguration {
47
+ constructor() {
48
+ super(...arguments);
49
+ this.clazz = Iterator;
50
+ this.worksForSubclasses = true;
51
+ this.readTracker = IteratorReadTracker;
52
+ this.changeTracker = undefined;
53
+ /**
54
+ * The methods, not implemented in readTracker, are high-level
55
+ */
56
+ this.receiverMustBeNonProxied = false;
57
+ /**
58
+ * The Array/Set/Map's [Symbol.Iterator]/keys/values methods already fires a read of **all** values (simply stupid). So the Iterator/IteratorResult does not need to fire any more. The tests also don't expect this to fire.
59
+ * Still could be enabled in the future for really fine granular behaviour tracking
60
+ */
61
+ this.trackTreads = false;
62
+ this.proxyUnhandledMethodResults = false;
63
+ }
64
+ };
65
+ //# sourceMappingURL=Iterator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Iterator.js","sourceRoot":"","sources":["../../../class-trackers/Iterator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAA2D,MAAM,WAAW,CAAC;AAG/G,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,6HAA6H;AAC7H,4GAA4G;AAC5G,4GAA4G;AAC5G,4CAA4C;AAC5C,mEAAmE;AACnE,6GAA6G;AAC7G,EAAE;AACF,mBAAmB;AACnB,gCAAgC;AAChC,kCAAkC;AAClC,+CAA+C;AAC/C,sCAAsC;AACtC,uGAAuG;AACvG,mLAAmL;AACnL,KAAK;AACL,GAAG;AACH,MAAM,OAAO,mBAAuB,SAAQ,QAAW;IAMnD,IAAI,oBAAoB;QACpB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC,0DAA0D;IAChI,CAAC;IAED,IAAI,OAAO;QACP,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC,wDAAwD;IAC9H,CAAC;IAED;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,aAAa,CAAC;QACf,OAAO,QAAQ,CAAC,CAAC,iBAAiB;IACtC,CAAC;IAED,IAAI,CAAC,GAAG,IAAe;QACnB,MAAM,EAAC,KAAK,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAW,CAAC,CAAC;QACxD,YAAY;QACZ,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;YAC/D,IAAI;SACP,CAAA;IACL,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,KAAM,SAAQ,0BAA0B;IAAxC;;QAC9B,UAAK,GAAC,QAAwB,CAAC;QAC/B,uBAAkB,GAAC,IAAI,CAAC;QACxB,gBAAW,GAAE,mBAAmB,CAAC;QACjC,kBAAa,GAAG,SAAS,CAAC;QAC1B;;WAEG;QACH,6BAAwB,GAAG,KAAK,CAAC;QACjC;;;WAGG;QACH,gBAAW,GAAG,KAAK,CAAC;QACpB,gCAA2B,GAAG,KAAK,CAAC;IACxC,CAAC;CAAA,CAAA"}
@@ -0,0 +1,128 @@
1
+ import { EventHook, DualUseTracker, ForWatchedProxyHandler, IWatchedProxyHandler_common, ObjKey, RecordedRead } from "../common";
2
+ import { WatchedProxyHandler } from "../watchedProxyFacade";
3
+ import { RecordedReadOnProxiedObjectExt } from "../RecordedReadOnProxiedObjectExt";
4
+ /**
5
+ * Hooks for one map.
6
+ * Note for specificity: There will be only one of the **change** events fired. The Recorded...Read.onChange handler will add the listeners to all possible candidates. It's this way around.
7
+ * {@link ObjectChangeHooks} are also subscribed on Maps
8
+ */
9
+ declare class MapChangeHooks {
10
+ specificKeyAddedOrRemoved: import("../Util").DefaultMap<unknown, EventHook>;
11
+ anyKeyAddedOrRemoved: EventHook;
12
+ specificValueChanged: import("../Util").DefaultMap<unknown, EventHook>;
13
+ anyValueChanged: EventHook;
14
+ }
15
+ export declare const changeHooksForMap: WeakMap<Map<unknown, unknown>, MapChangeHooks>;
16
+ export declare function getChangeHooksForMap(map: Map<unknown, unknown>): MapChangeHooks;
17
+ /**
18
+ * Can be either used as a supervisor-class in a WatchedProxyHandler, or installed on the non-proxied object via Object.setPrototypeOf
19
+ * The "this" may be different in these cases.
20
+ */
21
+ export declare class MapChangeTracker<K, V> extends Map<K, V> implements DualUseTracker<Map<K, V>> {
22
+ get _watchedProxyHandler(): IWatchedProxyHandler_common | undefined;
23
+ protected _withUnspecificChange<R>(changeFn: () => R): R;
24
+ /**
25
+ * Will return the original object when this class is used as supervisor class in the WatchedProxyHandler
26
+ */
27
+ get _target(): Map<K, V>;
28
+ /**
29
+ * Pretend that this is a Map
30
+ */
31
+ get ["constructor"](): MapConstructor;
32
+ set(key: K, value: V): this;
33
+ delete(key: K): boolean;
34
+ clear(): void;
35
+ }
36
+ export declare class RecordedMap_get extends RecordedReadOnProxiedObjectExt {
37
+ key: unknown;
38
+ keyExists: boolean;
39
+ /**
40
+ * Result of the .get call
41
+ */
42
+ value: unknown;
43
+ obj: Map<unknown, unknown>;
44
+ constructor(key: unknown, keyExists: boolean, value: unknown);
45
+ get isChanged(): boolean;
46
+ getAffectingChangeHooks(target: this["obj"]): EventHook[];
47
+ equals(other: RecordedRead): boolean;
48
+ }
49
+ export declare class RecordedMap_has extends RecordedReadOnProxiedObjectExt {
50
+ key: unknown;
51
+ /**
52
+ * Result of the .has call
53
+ */
54
+ keyExists: boolean;
55
+ obj: Map<unknown, unknown>;
56
+ constructor(key: unknown, keyExists: boolean);
57
+ get isChanged(): boolean;
58
+ getAffectingChangeHooks(target: this["obj"]): EventHook[];
59
+ equals(other: RecordedRead): boolean;
60
+ }
61
+ export declare class RecordedMapKeysRead extends RecordedReadOnProxiedObjectExt {
62
+ keys: Array<unknown>;
63
+ obj: Map<unknown, unknown>;
64
+ constructor(keys: Array<unknown>);
65
+ getAffectingChangeHooks(target: this["obj"]): EventHook[];
66
+ equals(other: RecordedRead): boolean;
67
+ get isChanged(): boolean;
68
+ }
69
+ export declare class RecordedMapValuesRead extends RecordedReadOnProxiedObjectExt {
70
+ values: Array<unknown>;
71
+ obj: Map<unknown, unknown>;
72
+ constructor(values: Array<unknown>);
73
+ getAffectingChangeHooks(target: this["obj"]): EventHook[];
74
+ equals(other: RecordedRead): boolean;
75
+ get isChanged(): boolean;
76
+ }
77
+ export declare class RecordedMapEntriesRead extends RecordedReadOnProxiedObjectExt {
78
+ values: Array<[unknown, unknown]>;
79
+ obj: Map<unknown, unknown>;
80
+ constructor(values: Array<[unknown, unknown]>);
81
+ getAffectingChangeHooks(target: this["obj"]): EventHook[];
82
+ equals(other: RecordedRead): boolean;
83
+ get isChanged(): boolean;
84
+ }
85
+ export declare class MapReadTracker<K, V> extends Map<K, V> implements ForWatchedProxyHandler<Map<K, V>> {
86
+ get _watchedProxyHandler(): WatchedProxyHandler;
87
+ get _target(): Map<K, V>;
88
+ protected _fireAfterEntriesRead(): void;
89
+ /**
90
+ * Pretend that this is a Map
91
+ */
92
+ get ["constructor"](): MapConstructor;
93
+ get(key: K): V | undefined;
94
+ has(key: K): boolean;
95
+ values(): MapIterator<V>;
96
+ entries(): MapIterator<[K, V]>;
97
+ keys(): MapIterator<K>;
98
+ forEach(callbackfn: (value: V, key: K, map: Map<K, V>, ...restOfArgs: unknown[]) => void, ...restOfArgs: unknown[]): void;
99
+ [Symbol.iterator](): MapIterator<[K, V]>;
100
+ get size(): number;
101
+ }
102
+ export declare const config: {
103
+ clazz: MapConstructor;
104
+ readTracker: typeof MapReadTracker;
105
+ changeTracker: typeof MapChangeTracker;
106
+ /**
107
+ * Built-in Methods, which are using fields / calling methods on the proxy transparently/loyally, so those methods don't call/use internal stuff directly.
108
+ * Tested with, see dev_generateEsRuntimeBehaviourCheckerCode.ts
109
+ * May include read-only / reader methods
110
+ */
111
+ knownHighLevelMethods: Set<ObjKey>;
112
+ /**
113
+ * Non-high level
114
+ */
115
+ readOnlyMethods: Set<ObjKey>;
116
+ /**
117
+ * Non-high level
118
+ */
119
+ readOnlyFields: Set<ObjKey>;
120
+ receiverMustBeNonProxied: boolean;
121
+ worksForSubclasses: boolean;
122
+ trackTreads: boolean;
123
+ trackSettingObjectProperties: boolean;
124
+ proxyUnhandledMethodResults: boolean;
125
+ getTrackerClasses(): import("../common").Clazz[];
126
+ };
127
+ export {};
128
+ //# sourceMappingURL=Map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Map.d.ts","sourceRoot":"","sources":["../../../class-trackers/Map.ts"],"names":[],"mappings":"AAAA,OAAO,EACa,SAAS,EACzB,cAAc,EACd,sBAAsB,EAAE,2BAA2B,EACnD,MAAM,EACN,YAAY,EAGf,MAAM,WAAW,CAAC;AAInB,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AAGjF;;;;GAIG;AACH,cAAM,cAAc;IAChB,yBAAyB,mDAA6D;IACtF,oBAAoB,YAAmB;IAEvC,oBAAoB,mDAA6D;IACjF,eAAe,YAAmB;CACrC;AAED,eAAO,MAAM,iBAAiB,gDAAsD,CAAC;AACrF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAC,OAAO,CAAC,kBAM7D;AAED;;;GAGG;AACH,qBAAa,gBAAgB,CAAC,CAAC,EAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,EAAC,CAAC,CAAE,YAAW,cAAc,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;IAEnF,IAAI,oBAAoB,IAAI,2BAA2B,GAAG,SAAS,CAElE;IAED,SAAS,CAAC,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAIxD;;OAEG;IACH,IAAI,OAAO,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAEvB;IAED;;OAEG;IACH,IAAI,CAAC,aAAa,CAAC,mBAElB;IAED,GAAG,CAAC,GAAG,EAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAsB1B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAcvB,KAAK;CAOR;AAED,qBAAa,eAAgB,SAAQ,8BAA8B;IAC/D,GAAG,EAAG,OAAO,CAAC;IAEd,SAAS,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAG,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAGhB,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IAO5D,IAAI,SAAS,YAEZ;IAED,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;IAQ3C,MAAM,CAAC,KAAK,EAAE,YAAY;CAO7B;AAED,qBAAa,eAAgB,SAAQ,8BAA8B;IAC/D,GAAG,EAAG,OAAO,CAAC;IAEd;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAG,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAGhB,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO;IAM5C,IAAI,SAAS,YAEZ;IAED,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;IAO3C,MAAM,CAAC,KAAK,EAAE,YAAY;CAO7B;AAED,qBAAa,mBAAoB,SAAQ,8BAA8B;IACnE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACrB,GAAG,EAAG,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAGhB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;IAKhC,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;IAO3C,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;IAQpC,IAAI,SAAS,IAAI,OAAO,CAEvB;CACJ;AAED,qBAAa,qBAAsB,SAAQ,8BAA8B;IACrE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAEvB,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAEf,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;IAKlC,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;IAO3C,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;IAQpC,IAAI,SAAS,IAAI,OAAO,CAEvB;CACJ;AAED,qBAAa,sBAAuB,SAAQ,8BAA8B;IACtE,MAAM,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAElC,GAAG,EAAG,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAGhB,MAAM,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAK7C,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;IAQ3C,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;IAQpC,IAAI,SAAS,IAAI,OAAO,CAEvB;CACJ;AAED,qBAAa,cAAc,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAE,YAAW,sBAAsB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,IAAI,oBAAoB,IAAI,mBAAmB,CAE9C;IAED,IAAI,OAAO,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAEvB;IAED,SAAS,CAAC,qBAAqB;IAK/B;;OAEG;IACH,IAAI,CAAC,aAAa,CAAC,mBAElB;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAW1B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAUpB,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IASxB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAQ9B,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;IAStB,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE;IAelH,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAQxC,IAAI,IAAI,IAAI,MAAM,CAOjB;CACJ;AAED,eAAO,MAAM,MAAM;;;;IAKf;;;;OAIG;2BACgE,GAAG,CAAC,MAAM,CAAC;IAE9E;;OAEG;qBAC0D,GAAG,CAAC,MAAM,CAAC;IAExE;;OAEG;oBAC+D,GAAG,CAAC,MAAM,CAAC;;;;;;;CAGhF,CAAA"}