proxy-facades 1.7.1 → 1.7.4
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.
- package/class-trackers/Array.ts +21 -4
- package/dist/commonjs/class-trackers/Array.d.ts +2 -2
- package/dist/commonjs/class-trackers/Array.d.ts.map +1 -1
- package/dist/commonjs/class-trackers/Array.js +19 -4
- package/dist/commonjs/class-trackers/Array.js.map +1 -1
- package/dist/commonjs/objectChangeTracking.d.ts.map +1 -1
- package/dist/commonjs/objectChangeTracking.js +38 -8
- package/dist/commonjs/objectChangeTracking.js.map +1 -1
- package/dist/esm/class-trackers/Array.d.ts +2 -2
- package/dist/esm/class-trackers/Array.d.ts.map +1 -1
- package/dist/esm/class-trackers/Array.js +19 -4
- package/dist/esm/class-trackers/Array.js.map +1 -1
- package/dist/esm/objectChangeTracking.d.ts.map +1 -1
- package/dist/esm/objectChangeTracking.js +38 -8
- package/dist/esm/objectChangeTracking.js.map +1 -1
- package/objectChangeTracking.ts +42 -10
- package/package.json +1 -1
package/class-trackers/Array.ts
CHANGED
|
@@ -41,6 +41,20 @@ export function getChangeHooksForArray(array: unknown[]) {
|
|
|
41
41
|
return result;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Bug workaround for `Array.prototype.forEach.apply(arr, [callbackfn, thisArg])`
|
|
46
|
+
* <p>The mentioned method causes a stackoverflow error when used with arrays with gaps (with holes), somewhere internal in v8, chrome and firefox when the array's prototype is a proxy (like we are using it here)</p>
|
|
47
|
+
* @param arr
|
|
48
|
+
* @param callbackfn
|
|
49
|
+
* @param thisArg
|
|
50
|
+
*/
|
|
51
|
+
function fixed_forEach<T>(arr: Array<T>, callbackfn: (value: any, index: number, array: Array<T>) => void, thisArg?: any) {
|
|
52
|
+
for(const index in arr) {
|
|
53
|
+
const value = arr[index];
|
|
54
|
+
callbackfn.apply(thisArg, [value, Number(index), arr])
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
44
58
|
/**
|
|
45
59
|
* Can be either used as a supervisor-class in a WatchedProxyHandler, or installed on the non-proxied object via Object.setPrototypeOf
|
|
46
60
|
* The "this" may be different in these cases.
|
|
@@ -90,6 +104,10 @@ export class ArrayChangeTracker<T> extends Array<T> implements DualUseTracker<Ar
|
|
|
90
104
|
return this._withUnspecificChange(() => super.fill(...args as [any, any, any]));
|
|
91
105
|
}
|
|
92
106
|
|
|
107
|
+
forEach(callbackfn: (value: T, index: number, array: this) => void, thisArg?: any) {
|
|
108
|
+
return fixed_forEach(this, callbackfn as any, thisArg);
|
|
109
|
+
}
|
|
110
|
+
|
|
93
111
|
}
|
|
94
112
|
|
|
95
113
|
export class RecordedArrayValuesRead extends RecordedReadOnProxiedObjectExt {
|
|
@@ -191,11 +209,10 @@ export class ArrayReadTracker<T> extends Array<T> implements ForWatchedProxyHand
|
|
|
191
209
|
|
|
192
210
|
/**
|
|
193
211
|
* Keep this method so it it treated as handled and not as making-unspecific-reads
|
|
194
|
-
* @param args
|
|
195
212
|
*/
|
|
196
|
-
forEach(
|
|
197
|
-
|
|
198
|
-
|
|
213
|
+
forEach(callbackfn: (value: T, index: number, array: this) => void, thisArg?: any) {
|
|
214
|
+
this._fireAfterValuesRead();
|
|
215
|
+
fixed_forEach(this, callbackfn as any, thisArg); // TODO: Showing that the bugfixed function is required couldn't be proved by unit tests yet. Here's a real world scenario that does it: https://github.com/bogeeee/pve-manager-electrified/commit/822c30e686521c73ac7d8593a50ef72cc8e6f2c3
|
|
199
216
|
}
|
|
200
217
|
|
|
201
218
|
|
|
@@ -30,6 +30,7 @@ export declare class ArrayChangeTracker<T> extends Array<T> implements DualUseTr
|
|
|
30
30
|
shift(...args: any[]): T | undefined;
|
|
31
31
|
sort(...args: any[]): this;
|
|
32
32
|
fill(...args: any[]): this;
|
|
33
|
+
forEach(callbackfn: (value: T, index: number, array: this) => void, thisArg?: any): void;
|
|
33
34
|
}
|
|
34
35
|
export declare class RecordedArrayValuesRead extends RecordedReadOnProxiedObjectExt {
|
|
35
36
|
values: unknown[];
|
|
@@ -57,9 +58,8 @@ export declare class ArrayReadTracker<T> extends Array<T> implements ForWatchedP
|
|
|
57
58
|
shift(...args: any[]): T | undefined;
|
|
58
59
|
/**
|
|
59
60
|
* Keep this method so it it treated as handled and not as making-unspecific-reads
|
|
60
|
-
* @param args
|
|
61
61
|
*/
|
|
62
|
-
forEach(
|
|
62
|
+
forEach(callbackfn: (value: T, index: number, array: this) => void, thisArg?: any): void;
|
|
63
63
|
pop(...args: any[]): T | undefined;
|
|
64
64
|
}
|
|
65
65
|
export declare const config: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../../../class-trackers/Array.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,MAAM,EACN,YAAY,EAEf,MAAM,WAAW,CAAC;AAOnB,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AACjF,OAAO,EACH,cAAc,EACd,sBAAsB,EACtB,2BAA2B,EAG9B,MAAM,gBAAgB,CAAC;AAGxB;;;;GAIG;AACH,cAAM,gBAAgB;CAErB;AAED,eAAO,MAAM,mBAAmB,sCAA6C,CAAC;AAC9E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,oBAMtD;
|
|
1
|
+
{"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../../../class-trackers/Array.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,MAAM,EACN,YAAY,EAEf,MAAM,WAAW,CAAC;AAOnB,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AACjF,OAAO,EACH,cAAc,EACd,sBAAsB,EACtB,2BAA2B,EAG9B,MAAM,gBAAgB,CAAC;AAGxB;;;;GAIG;AACH,cAAM,gBAAgB;CAErB;AAED,eAAO,MAAM,mBAAmB,sCAA6C,CAAC;AAC9E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,oBAMtD;AAgBD;;;GAGG;AACH,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAE,YAAW,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAKnF,IAAI,oBAAoB,IAAI,2BAA2B,GAAG,SAAS,CAElE;IAED,SAAS,CAAC,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAMxD,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IAIlB;;OAEG;IACH,IAAI,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAEtB;IAED;;OAEG;IACH,IAAI,CAAC,aAAa,CAAC,qBAElB;IAED,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS;IAIpC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI1B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI1B,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG;CAIpF;AAED,qBAAa,uBAAwB,SAAQ,8BAA8B;IACvE,MAAM,EAAE,OAAO,EAAE,CAAC;IAEV,OAAO,EAAE,OAAO,EAAE,CAAC;gBAGf,MAAM,EAAE,OAAO,EAAE;IAK7B,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC;IAQ/C,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;IAQpC,IAAI,SAAS,IAAI,OAAO,CAEvB;CAGJ;AAED;;GAEG;AACH,qBAAa,gBAAgB,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAE,YAAW,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzF,IAAI,oBAAoB,IAAI,mBAAmB,CAE9C;IAED,IAAI,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAEtB;IAED,SAAS,CAAC,oBAAoB;IAK9B;;OAEG;IACH,IAAI,CAAC,aAAa,CAAC,qBAElB;IAED,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC;IAM1B,OAAO,IAAI,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAMrC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IAMrC,IAAI,MAAM,IAAI,MAAM,CAInB;IAGD,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IAcpB;;OAEG;IACH,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG;IAOjF,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS;CAcrC;AAED,eAAO,MAAM,MAAM;;;;IAIf;;;;OAIG;2BAC+T,GAAG,CAAC,MAAM,CAAC;IAE7U;;OAEG;qBAC0J,GAAG,CAAC,MAAM,CAAC;IAExK;;OAEG;oBACqE,GAAG,CAAC,MAAM,CAAC;IAEnF;;OAEG;;;;;;;CAIN,CAAA"}
|
|
@@ -22,6 +22,19 @@ function getChangeHooksForArray(array) {
|
|
|
22
22
|
}
|
|
23
23
|
return result;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Bug workaround for `Array.prototype.forEach.apply(arr, [callbackfn, thisArg])`
|
|
27
|
+
* <p>The mentioned method causes a stackoverflow error when used with arrays with gaps (with holes), somewhere internal in v8, chrome and firefox when the array's prototype is a proxy (like we are using it here)</p>
|
|
28
|
+
* @param arr
|
|
29
|
+
* @param callbackfn
|
|
30
|
+
* @param thisArg
|
|
31
|
+
*/
|
|
32
|
+
function fixed_forEach(arr, callbackfn, thisArg) {
|
|
33
|
+
for (const index in arr) {
|
|
34
|
+
const value = arr[index];
|
|
35
|
+
callbackfn.apply(thisArg, [value, Number(index), arr]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
25
38
|
/**
|
|
26
39
|
* Can be either used as a supervisor-class in a WatchedProxyHandler, or installed on the non-proxied object via Object.setPrototypeOf
|
|
27
40
|
* The "this" may be different in these cases.
|
|
@@ -59,6 +72,9 @@ class ArrayChangeTracker extends Array {
|
|
|
59
72
|
fill(...args) {
|
|
60
73
|
return this._withUnspecificChange(() => super.fill(...args));
|
|
61
74
|
}
|
|
75
|
+
forEach(callbackfn, thisArg) {
|
|
76
|
+
return fixed_forEach(this, callbackfn, thisArg);
|
|
77
|
+
}
|
|
62
78
|
}
|
|
63
79
|
exports.ArrayChangeTracker = ArrayChangeTracker;
|
|
64
80
|
class RecordedArrayValuesRead extends RecordedReadOnProxiedObjectExt_1.RecordedReadOnProxiedObjectExt {
|
|
@@ -139,11 +155,10 @@ class ArrayReadTracker extends Array {
|
|
|
139
155
|
}
|
|
140
156
|
/**
|
|
141
157
|
* Keep this method so it it treated as handled and not as making-unspecific-reads
|
|
142
|
-
* @param args
|
|
143
158
|
*/
|
|
144
|
-
forEach(
|
|
145
|
-
|
|
146
|
-
|
|
159
|
+
forEach(callbackfn, thisArg) {
|
|
160
|
+
this._fireAfterValuesRead();
|
|
161
|
+
fixed_forEach(this, callbackfn, thisArg); // TODO: Showing that the bugfixed function is required couldn't be proved by unit tests yet. Here's a real world scenario that does it: https://github.com/bogeeee/pve-manager-electrified/commit/822c30e686521c73ac7d8593a50ef72cc8e6f2c3
|
|
147
162
|
}
|
|
148
163
|
//@ts-ignore
|
|
149
164
|
pop(...args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Array.js","sourceRoot":"","sources":["../../../class-trackers/Array.ts"],"names":[],"mappings":";;;AAmCA,wDAMC;AAzCD,sCAOmB;AACnB,kCAAgD;AAChD,kEAGiC;AAGjC,sFAAiF;AACjF,gDAMwB;AAGxB;;;;GAIG;AACH,MAAM,gBAAgB;CAErB;AAEY,QAAA,mBAAmB,GAAG,IAAI,OAAO,EAA+B,CAAC;AAC9E,SAAgB,sBAAsB,CAAC,KAAgB;IACnD,IAAI,MAAM,GAAG,2BAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAG,MAAM,KAAK,SAAS,EAAE,CAAC;QACtB,2BAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAa,kBAAsB,SAAQ,KAAQ;IAG/C,4GAA4G;IAE5G,IAAI,oBAAoB;QACpB,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,qBAAqB,CAAI,QAAiB;QAChD,OAAO,IAAA,gCAAkB,EAAC,IAAI,EAAE,IAAI,+BAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAA,8CAAuB,EAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC,CAAA;IACjI,CAAC;IAED,mDAAmD;IAEnD,GAAG,CAAC,GAAG,IAAW;QACd,OAAQ,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;IACzD,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,aAAa,CAAC;QACf,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,GAAG,IAAW;QAChB,OAAQ,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,IAAI,CAAC,GAAG,IAAW;QACf,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,GAAG,IAAW;QACf,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAuB,CAAC,CAAC,CAAC;IACpF,CAAC;CAEJ;
|
|
1
|
+
{"version":3,"file":"Array.js","sourceRoot":"","sources":["../../../class-trackers/Array.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectChangeTracking.d.ts","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,0BAA0B,EAC1B,SAAS,EAGT,MAAM,EAGT,MAAM,UAAU,CAAC;AAGlB;;;;GAIG;AACH,cAAM,iBAAiB;IACnB;;OAEG;IACH,YAAY,iDAA4D;IACxE,sBAAsB,iDAA4D;IAClF,iBAAiB,YAAmB;IAEpC;;OAEG;IACH,aAAa,YAAmB;IAChC;;OAEG;IACH,SAAS,YAAmB;IAE5B;;OAEG;IACH,gBAAgB,YAAmB;CACtC;AAID,eAAO,MAAM,oBAAoB,oCAA2C,CAAC;AAC7E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,qBAMlD;AAED,qBAAa,kBAAmB,YAAW,YAAY,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,0BAA0B,CAAA;gBAE/B,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,0BAA0B,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"objectChangeTracking.d.ts","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,0BAA0B,EAC1B,SAAS,EAGT,MAAM,EAGT,MAAM,UAAU,CAAC;AAGlB;;;;GAIG;AACH,cAAM,iBAAiB;IACnB;;OAEG;IACH,YAAY,iDAA4D;IACxE,sBAAsB,iDAA4D;IAClF,iBAAiB,YAAmB;IAEpC;;OAEG;IACH,aAAa,YAAmB;IAChC;;OAEG;IACH,SAAS,YAAmB;IAE5B;;OAEG;IACH,gBAAgB,YAAmB;CACtC;AAID,eAAO,MAAM,oBAAoB,oCAA2C,CAAC;AAC7E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,qBAMlD;AAED,qBAAa,kBAAmB,YAAW,YAAY,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,0BAA0B,CAAA;gBAE/B,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,0BAA0B,GAAG,SAAS;IA0BlF,iBAAiB,CAAC,GAAG,EAAE,MAAM;IA2F7B,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAIvD,GAAG,CAAC,WAAW,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAC,GAAG,GAAG,GAAG;IA2EvD,GAAG,CAAC,WAAW,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAC,GAAG,EAAE,QAAQ,EAAC,GAAG;IAkB5D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI7C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,OAAO;CAIrG"}
|
|
@@ -52,7 +52,13 @@ class ObjectProxyHandler {
|
|
|
52
52
|
if (key === "length" && Array.isArray(target)) {
|
|
53
53
|
return; // Leave the length property as is. It won't be set directly anyway
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
const descriptor = Object.getOwnPropertyDescriptor(target, key);
|
|
56
|
+
if (!descriptor.set) {
|
|
57
|
+
this.installSetterTrap(key);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Treat existing setters as white-box and leave them as they are
|
|
61
|
+
}
|
|
56
62
|
});
|
|
57
63
|
// Create proxy:
|
|
58
64
|
//const targetForProxy = {}; // The virtual way
|
|
@@ -62,8 +68,16 @@ class ObjectProxyHandler {
|
|
|
62
68
|
installSetterTrap(key) {
|
|
63
69
|
let target = this.target;
|
|
64
70
|
let origDescriptor = (0, common_1.getPropertyDescriptor)(target, key);
|
|
65
|
-
|
|
66
|
-
let
|
|
71
|
+
// Retrieve current:
|
|
72
|
+
let current = (() => {
|
|
73
|
+
try {
|
|
74
|
+
//@ts-ignore
|
|
75
|
+
return { isErrored: false, value: (origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.value /* performance */) || target[key] };
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
return { isErrored: true };
|
|
79
|
+
}
|
|
80
|
+
})();
|
|
67
81
|
const origSetter = origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.set;
|
|
68
82
|
const origGetter = origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.get;
|
|
69
83
|
let origOwnDescriptor = Object.getOwnPropertyDescriptor(target, key);
|
|
@@ -83,11 +97,18 @@ class ObjectProxyHandler {
|
|
|
83
97
|
return;
|
|
84
98
|
}
|
|
85
99
|
if (origGetter !== undefined) {
|
|
86
|
-
|
|
100
|
+
// call the getter. Is this a good idea to refresh the value here?
|
|
101
|
+
try {
|
|
102
|
+
current = { isErrored: false, value: origGetter.apply(target) };
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
current = { isErrored: true };
|
|
106
|
+
throw e;
|
|
107
|
+
}
|
|
87
108
|
throw new TypeError("Target originally had a getter and no setter but the property is set.");
|
|
88
109
|
}
|
|
89
110
|
//@ts-ignore
|
|
90
|
-
if (newValue !==
|
|
111
|
+
if (current.isErrored || newValue !== current.value) { // modify ?
|
|
91
112
|
// run change operation and call listeners:
|
|
92
113
|
const hooksToServe = [];
|
|
93
114
|
if (Array.isArray(target)) {
|
|
@@ -97,16 +118,25 @@ class ObjectProxyHandler {
|
|
|
97
118
|
hooksToServe.push(changeHooksForTarget.changeAnyProperty);
|
|
98
119
|
(0, proxyFacade_1.runChangeOperation)(target, new common_1.UnspecificObjectChange(target), hooksToServe, () => {
|
|
99
120
|
//@ts-ignore
|
|
100
|
-
|
|
121
|
+
current = { isErrored: false, value: newValue };
|
|
101
122
|
});
|
|
102
123
|
}
|
|
103
124
|
}
|
|
104
125
|
newSetter.origHadSetter = origSetter !== undefined;
|
|
105
126
|
function newGetter() {
|
|
106
127
|
if (origGetter !== undefined) {
|
|
107
|
-
|
|
128
|
+
// Retrieve value from getter:
|
|
129
|
+
try {
|
|
130
|
+
current = { isErrored: false, value: origGetter.apply(this) }; // call the getter
|
|
131
|
+
}
|
|
132
|
+
catch (e) {
|
|
133
|
+
current = { isErrored: true };
|
|
134
|
+
throw e;
|
|
135
|
+
}
|
|
108
136
|
}
|
|
109
|
-
|
|
137
|
+
if (current.isErrored)
|
|
138
|
+
throw new Error("Illegal state");
|
|
139
|
+
return current.value;
|
|
110
140
|
}
|
|
111
141
|
newGetter.origHadGetter = origGetter !== undefined;
|
|
112
142
|
Object.defineProperty(target, key, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectChangeTracking.js","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":";;;AA8CA,0DAMC;AApDD;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"objectChangeTracking.js","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,7 @@ export declare class ArrayChangeTracker<T> extends Array<T> implements DualUseTr
|
|
|
30
30
|
shift(...args: any[]): T | undefined;
|
|
31
31
|
sort(...args: any[]): this;
|
|
32
32
|
fill(...args: any[]): this;
|
|
33
|
+
forEach(callbackfn: (value: T, index: number, array: this) => void, thisArg?: any): void;
|
|
33
34
|
}
|
|
34
35
|
export declare class RecordedArrayValuesRead extends RecordedReadOnProxiedObjectExt {
|
|
35
36
|
values: unknown[];
|
|
@@ -57,9 +58,8 @@ export declare class ArrayReadTracker<T> extends Array<T> implements ForWatchedP
|
|
|
57
58
|
shift(...args: any[]): T | undefined;
|
|
58
59
|
/**
|
|
59
60
|
* Keep this method so it it treated as handled and not as making-unspecific-reads
|
|
60
|
-
* @param args
|
|
61
61
|
*/
|
|
62
|
-
forEach(
|
|
62
|
+
forEach(callbackfn: (value: T, index: number, array: this) => void, thisArg?: any): void;
|
|
63
63
|
pop(...args: any[]): T | undefined;
|
|
64
64
|
}
|
|
65
65
|
export declare const config: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../../../class-trackers/Array.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,MAAM,EACN,YAAY,EAEf,MAAM,WAAW,CAAC;AAOnB,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AACjF,OAAO,EACH,cAAc,EACd,sBAAsB,EACtB,2BAA2B,EAG9B,MAAM,gBAAgB,CAAC;AAGxB;;;;GAIG;AACH,cAAM,gBAAgB;CAErB;AAED,eAAO,MAAM,mBAAmB,sCAA6C,CAAC;AAC9E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,oBAMtD;
|
|
1
|
+
{"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../../../class-trackers/Array.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,19 @@ export function getChangeHooksForArray(array) {
|
|
|
18
18
|
}
|
|
19
19
|
return result;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Bug workaround for `Array.prototype.forEach.apply(arr, [callbackfn, thisArg])`
|
|
23
|
+
* <p>The mentioned method causes a stackoverflow error when used with arrays with gaps (with holes), somewhere internal in v8, chrome and firefox when the array's prototype is a proxy (like we are using it here)</p>
|
|
24
|
+
* @param arr
|
|
25
|
+
* @param callbackfn
|
|
26
|
+
* @param thisArg
|
|
27
|
+
*/
|
|
28
|
+
function fixed_forEach(arr, callbackfn, thisArg) {
|
|
29
|
+
for (const index in arr) {
|
|
30
|
+
const value = arr[index];
|
|
31
|
+
callbackfn.apply(thisArg, [value, Number(index), arr]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
21
34
|
/**
|
|
22
35
|
* Can be either used as a supervisor-class in a WatchedProxyHandler, or installed on the non-proxied object via Object.setPrototypeOf
|
|
23
36
|
* The "this" may be different in these cases.
|
|
@@ -55,6 +68,9 @@ export class ArrayChangeTracker extends Array {
|
|
|
55
68
|
fill(...args) {
|
|
56
69
|
return this._withUnspecificChange(() => super.fill(...args));
|
|
57
70
|
}
|
|
71
|
+
forEach(callbackfn, thisArg) {
|
|
72
|
+
return fixed_forEach(this, callbackfn, thisArg);
|
|
73
|
+
}
|
|
58
74
|
}
|
|
59
75
|
export class RecordedArrayValuesRead extends RecordedReadOnProxiedObjectExt {
|
|
60
76
|
constructor(values) {
|
|
@@ -133,11 +149,10 @@ export class ArrayReadTracker extends Array {
|
|
|
133
149
|
}
|
|
134
150
|
/**
|
|
135
151
|
* Keep this method so it it treated as handled and not as making-unspecific-reads
|
|
136
|
-
* @param args
|
|
137
152
|
*/
|
|
138
|
-
forEach(
|
|
139
|
-
|
|
140
|
-
|
|
153
|
+
forEach(callbackfn, thisArg) {
|
|
154
|
+
this._fireAfterValuesRead();
|
|
155
|
+
fixed_forEach(this, callbackfn, thisArg); // TODO: Showing that the bugfixed function is required couldn't be proved by unit tests yet. Here's a real world scenario that does it: https://github.com/bogeeee/pve-manager-electrified/commit/822c30e686521c73ac7d8593a50ef72cc8e6f2c3
|
|
141
156
|
}
|
|
142
157
|
//@ts-ignore
|
|
143
158
|
pop(...args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Array.js","sourceRoot":"","sources":["../../../class-trackers/Array.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Array.js","sourceRoot":"","sources":["../../../class-trackers/Array.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectChangeTracking.d.ts","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,0BAA0B,EAC1B,SAAS,EAGT,MAAM,EAGT,MAAM,UAAU,CAAC;AAGlB;;;;GAIG;AACH,cAAM,iBAAiB;IACnB;;OAEG;IACH,YAAY,iDAA4D;IACxE,sBAAsB,iDAA4D;IAClF,iBAAiB,YAAmB;IAEpC;;OAEG;IACH,aAAa,YAAmB;IAChC;;OAEG;IACH,SAAS,YAAmB;IAE5B;;OAEG;IACH,gBAAgB,YAAmB;CACtC;AAID,eAAO,MAAM,oBAAoB,oCAA2C,CAAC;AAC7E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,qBAMlD;AAED,qBAAa,kBAAmB,YAAW,YAAY,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,0BAA0B,CAAA;gBAE/B,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,0BAA0B,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"objectChangeTracking.d.ts","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,0BAA0B,EAC1B,SAAS,EAGT,MAAM,EAGT,MAAM,UAAU,CAAC;AAGlB;;;;GAIG;AACH,cAAM,iBAAiB;IACnB;;OAEG;IACH,YAAY,iDAA4D;IACxE,sBAAsB,iDAA4D;IAClF,iBAAiB,YAAmB;IAEpC;;OAEG;IACH,aAAa,YAAmB;IAChC;;OAEG;IACH,SAAS,YAAmB;IAE5B;;OAEG;IACH,gBAAgB,YAAmB;CACtC;AAID,eAAO,MAAM,oBAAoB,oCAA2C,CAAC;AAC7E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,qBAMlD;AAED,qBAAa,kBAAmB,YAAW,YAAY,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,0BAA0B,CAAA;gBAE/B,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,0BAA0B,GAAG,SAAS;IA0BlF,iBAAiB,CAAC,GAAG,EAAE,MAAM;IA2F7B,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAIvD,GAAG,CAAC,WAAW,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAC,GAAG,GAAG,GAAG;IA2EvD,GAAG,CAAC,WAAW,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAC,GAAG,EAAE,QAAQ,EAAC,GAAG;IAkB5D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI7C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,OAAO;CAIrG"}
|
|
@@ -48,7 +48,13 @@ export class ObjectProxyHandler {
|
|
|
48
48
|
if (key === "length" && Array.isArray(target)) {
|
|
49
49
|
return; // Leave the length property as is. It won't be set directly anyway
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
const descriptor = Object.getOwnPropertyDescriptor(target, key);
|
|
52
|
+
if (!descriptor.set) {
|
|
53
|
+
this.installSetterTrap(key);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Treat existing setters as white-box and leave them as they are
|
|
57
|
+
}
|
|
52
58
|
});
|
|
53
59
|
// Create proxy:
|
|
54
60
|
//const targetForProxy = {}; // The virtual way
|
|
@@ -58,8 +64,16 @@ export class ObjectProxyHandler {
|
|
|
58
64
|
installSetterTrap(key) {
|
|
59
65
|
let target = this.target;
|
|
60
66
|
let origDescriptor = getPropertyDescriptor(target, key);
|
|
61
|
-
|
|
62
|
-
let
|
|
67
|
+
// Retrieve current:
|
|
68
|
+
let current = (() => {
|
|
69
|
+
try {
|
|
70
|
+
//@ts-ignore
|
|
71
|
+
return { isErrored: false, value: (origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.value /* performance */) || target[key] };
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
return { isErrored: true };
|
|
75
|
+
}
|
|
76
|
+
})();
|
|
63
77
|
const origSetter = origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.set;
|
|
64
78
|
const origGetter = origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.get;
|
|
65
79
|
let origOwnDescriptor = Object.getOwnPropertyDescriptor(target, key);
|
|
@@ -79,11 +93,18 @@ export class ObjectProxyHandler {
|
|
|
79
93
|
return;
|
|
80
94
|
}
|
|
81
95
|
if (origGetter !== undefined) {
|
|
82
|
-
|
|
96
|
+
// call the getter. Is this a good idea to refresh the value here?
|
|
97
|
+
try {
|
|
98
|
+
current = { isErrored: false, value: origGetter.apply(target) };
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
current = { isErrored: true };
|
|
102
|
+
throw e;
|
|
103
|
+
}
|
|
83
104
|
throw new TypeError("Target originally had a getter and no setter but the property is set.");
|
|
84
105
|
}
|
|
85
106
|
//@ts-ignore
|
|
86
|
-
if (newValue !==
|
|
107
|
+
if (current.isErrored || newValue !== current.value) { // modify ?
|
|
87
108
|
// run change operation and call listeners:
|
|
88
109
|
const hooksToServe = [];
|
|
89
110
|
if (Array.isArray(target)) {
|
|
@@ -93,16 +114,25 @@ export class ObjectProxyHandler {
|
|
|
93
114
|
hooksToServe.push(changeHooksForTarget.changeAnyProperty);
|
|
94
115
|
runChangeOperation(target, new UnspecificObjectChange(target), hooksToServe, () => {
|
|
95
116
|
//@ts-ignore
|
|
96
|
-
|
|
117
|
+
current = { isErrored: false, value: newValue };
|
|
97
118
|
});
|
|
98
119
|
}
|
|
99
120
|
}
|
|
100
121
|
newSetter.origHadSetter = origSetter !== undefined;
|
|
101
122
|
function newGetter() {
|
|
102
123
|
if (origGetter !== undefined) {
|
|
103
|
-
|
|
124
|
+
// Retrieve value from getter:
|
|
125
|
+
try {
|
|
126
|
+
current = { isErrored: false, value: origGetter.apply(this) }; // call the getter
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
current = { isErrored: true };
|
|
130
|
+
throw e;
|
|
131
|
+
}
|
|
104
132
|
}
|
|
105
|
-
|
|
133
|
+
if (current.isErrored)
|
|
134
|
+
throw new Error("Illegal state");
|
|
135
|
+
return current.value;
|
|
106
136
|
}
|
|
107
137
|
newGetter.origHadGetter = origGetter !== undefined;
|
|
108
138
|
Object.defineProperty(target, key, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectChangeTracking.js","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"objectChangeTracking.js","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"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"}
|
package/objectChangeTracking.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Listeners for one object
|
|
3
3
|
*/
|
|
4
|
-
import {newDefaultMap} from "./Util";
|
|
4
|
+
import {newDefaultMap, throwError} from "./Util";
|
|
5
5
|
import {
|
|
6
6
|
ClassTrackingConfiguration,
|
|
7
7
|
EventHook,
|
|
@@ -68,7 +68,14 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
68
68
|
if(key === "length" && Array.isArray(target)) {
|
|
69
69
|
return; // Leave the length property as is. It won't be set directly anyway
|
|
70
70
|
}
|
|
71
|
-
|
|
71
|
+
|
|
72
|
+
const descriptor = Object.getOwnPropertyDescriptor(target, key)!;
|
|
73
|
+
if(!descriptor.set) {
|
|
74
|
+
this.installSetterTrap(key)
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Treat existing setters as white-box and leave them as they are
|
|
78
|
+
}
|
|
72
79
|
});
|
|
73
80
|
|
|
74
81
|
// Create proxy:
|
|
@@ -80,8 +87,18 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
80
87
|
installSetterTrap(key: ObjKey) {
|
|
81
88
|
let target = this.target;
|
|
82
89
|
let origDescriptor = getPropertyDescriptor(target, key);
|
|
83
|
-
|
|
84
|
-
|
|
90
|
+
|
|
91
|
+
// Retrieve current:
|
|
92
|
+
let current: {isErrored: false, value: unknown} | {/* Note: isErrored is currently useless, cause proxy-facades treats accessors as white-box */ isErrored: true} = (()=> {
|
|
93
|
+
try {
|
|
94
|
+
//@ts-ignore
|
|
95
|
+
return {isErrored: false, value: origDescriptor?.value /* performance */ || target[key]};
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
return {isErrored: true} as any
|
|
99
|
+
}
|
|
100
|
+
})();
|
|
101
|
+
|
|
85
102
|
const origSetter = origDescriptor?.set;
|
|
86
103
|
const origGetter = origDescriptor?.get;
|
|
87
104
|
|
|
@@ -94,7 +111,7 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
94
111
|
delete target[key]; // delete the old, or the following Object.defineProperty will conflict
|
|
95
112
|
}
|
|
96
113
|
|
|
97
|
-
function newSetter(this:any, newValue:
|
|
114
|
+
function newSetter(this:any, newValue: unknown) {
|
|
98
115
|
const changeHooksForTarget = getChangeHooksForObject(target);
|
|
99
116
|
|
|
100
117
|
if(origSetter !== undefined) {
|
|
@@ -105,12 +122,19 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
105
122
|
}
|
|
106
123
|
|
|
107
124
|
if(origGetter !== undefined) {
|
|
108
|
-
|
|
125
|
+
// call the getter. Is this a good idea to refresh the value here?
|
|
126
|
+
try {
|
|
127
|
+
current = {isErrored: false, value: origGetter.apply(target)};
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
current = {isErrored: true};
|
|
131
|
+
throw e;
|
|
132
|
+
}
|
|
109
133
|
throw new TypeError("Target originally had a getter and no setter but the property is set.");
|
|
110
134
|
}
|
|
111
135
|
|
|
112
136
|
//@ts-ignore
|
|
113
|
-
if (newValue !==
|
|
137
|
+
if (current.isErrored || newValue !== current.value) { // modify ?
|
|
114
138
|
// run change operation and call listeners:
|
|
115
139
|
const hooksToServe: EventHook[] = [];
|
|
116
140
|
if(Array.isArray(target)) {
|
|
@@ -120,7 +144,7 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
120
144
|
hooksToServe.push(changeHooksForTarget.changeAnyProperty)
|
|
121
145
|
runChangeOperation(target, new UnspecificObjectChange(target),hooksToServe,() => {
|
|
122
146
|
//@ts-ignore
|
|
123
|
-
|
|
147
|
+
current = {isErrored: false, value: newValue};
|
|
124
148
|
});
|
|
125
149
|
}
|
|
126
150
|
|
|
@@ -129,9 +153,17 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
129
153
|
|
|
130
154
|
function newGetter(this: any) {
|
|
131
155
|
if(origGetter !== undefined) {
|
|
132
|
-
|
|
156
|
+
// Retrieve value from getter:
|
|
157
|
+
try {
|
|
158
|
+
current = {isErrored: false, value: origGetter.apply(this)}; // call the getter
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
current = {isErrored: true}
|
|
162
|
+
throw e;
|
|
163
|
+
}
|
|
133
164
|
}
|
|
134
|
-
|
|
165
|
+
if(current.isErrored) throw new Error("Illegal state");
|
|
166
|
+
return current.value;
|
|
135
167
|
}
|
|
136
168
|
(newGetter as GetterFlags).origHadGetter = origGetter !== undefined;
|
|
137
169
|
|