react-deepwatch 1.0.0 → 1.1.1
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/Util.d.ts +13 -0
- package/Util.d.ts.map +1 -1
- package/Util.js +31 -4
- package/Util.js.map +1 -1
- package/Util.ts +32 -3
- package/dist/mjs/Util.d.ts +13 -0
- package/dist/mjs/Util.d.ts.map +1 -1
- package/dist/mjs/Util.js +28 -3
- package/dist/mjs/Util.js.map +1 -1
- package/dist/mjs/index.d.ts +30 -11
- package/dist/mjs/index.d.ts.map +1 -1
- package/dist/mjs/index.js +65 -21
- package/dist/mjs/index.js.map +1 -1
- package/index.d.ts +30 -11
- package/index.d.ts.map +1 -1
- package/index.js +66 -19
- package/index.js.map +1 -1
- package/index.ts +103 -26
- package/index_esm.mjs +12 -2
- package/package.json +5 -5
- package/readme.md +29 -1
package/Util.d.ts
CHANGED
|
@@ -62,5 +62,18 @@ export declare function arraysAreShallowlyEqual(a: unknown[], b: unknown[]): boo
|
|
|
62
62
|
*/
|
|
63
63
|
export declare function arraysWithEntriesAreShallowlyEqual(a: Array<[unknown, unknown]>, b: Array<[unknown, unknown]>): boolean;
|
|
64
64
|
export declare function recordedReadsArraysAreEqual(a: RecordedRead[], b: RecordedRead[]): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* This Map does not return empty values, so there's always a default value created
|
|
67
|
+
*/
|
|
68
|
+
export declare abstract class DefaultMap<K, V> extends Map<K, V> {
|
|
69
|
+
abstract createDefaultValue(): V;
|
|
70
|
+
get(key: K): V;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
*
|
|
74
|
+
* @param createDefaultValueFn
|
|
75
|
+
* @returns a Map that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
76
|
+
*/
|
|
77
|
+
export declare function newDefaultMap<K, V>(createDefaultValueFn: () => V): DefaultMap<K, V>;
|
|
65
78
|
export {};
|
|
66
79
|
//# sourceMappingURL=Util.d.ts.map
|
package/Util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Util.d.ts","sourceRoot":"","sources":["Util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAE3C,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,QAK3C;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAUvD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,mBAEtC;AAED;;GAEG;AACH,qBAAa,MAAM,CAAC,CAAC,EAAE,CAAC;IACpB,GAAG,iBAAuB;IAE1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IASpB,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAUvB,GAAG,CAAC,GAAG,EAAE,CAAC;CAGb;AAED;;GAEG;AACH,qBAAa,UAAU,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAE9C,GAAG,qBAA4B;CAClC;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAE,CAAC,KAAK,OAAO,WAUlG;AACD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CAAC,GAAG;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,CAAC,CAAA;CAAC,GAAG;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,GAAG,CAAA;CAAC,CAAC;AAGvJ,KAAK,mBAAmB,GAAG;IACvB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,EAAG,SAAS,GAAE,OAAO,GAAG,SAAiB,GAAG,CAAC,CAqChO;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,QAI9B;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,WAUjE;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,WAa5G;AAED,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,WAE/E"}
|
|
1
|
+
{"version":3,"file":"Util.d.ts","sourceRoot":"","sources":["Util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAE3C,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,QAK3C;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAUvD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,mBAEtC;AAED;;GAEG;AACH,qBAAa,MAAM,CAAC,CAAC,EAAE,CAAC;IACpB,GAAG,iBAAuB;IAE1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IASpB,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAUvB,GAAG,CAAC,GAAG,EAAE,CAAC;CAGb;AAED;;GAEG;AACH,qBAAa,UAAU,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAE9C,GAAG,qBAA4B;CAClC;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAE,CAAC,KAAK,OAAO,WAUlG;AACD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CAAC,GAAG;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,CAAC,CAAA;CAAC,GAAG;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,GAAG,CAAA;CAAC,CAAC;AAGvJ,KAAK,mBAAmB,GAAG;IACvB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,EAAG,SAAS,GAAE,OAAO,GAAG,SAAiB,GAAG,CAAC,CAqChO;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,QAI9B;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,WAUjE;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,WAa5G;AAED,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,WAE/E;AAED;;GAEG;AACH,8BAAsB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,kBAAkB,IAAI,CAAC;IAEhC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;CAQjB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAC,CAAC,EAAE,oBAAoB,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAMlF"}
|
package/Util.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WeakMapSet = exports.MapSet = void 0;
|
|
3
|
+
exports.DefaultMap = exports.WeakMapSet = exports.MapSet = void 0;
|
|
4
4
|
exports.throwError = throwError;
|
|
5
5
|
exports.reThrowWithHint = reThrowWithHint;
|
|
6
6
|
exports.isObject = isObject;
|
|
@@ -10,6 +10,7 @@ exports.read = read;
|
|
|
10
10
|
exports.arraysAreShallowlyEqual = arraysAreShallowlyEqual;
|
|
11
11
|
exports.arraysWithEntriesAreShallowlyEqual = arraysWithEntriesAreShallowlyEqual;
|
|
12
12
|
exports.recordedReadsArraysAreEqual = recordedReadsArraysAreEqual;
|
|
13
|
+
exports.newDefaultMap = newDefaultMap;
|
|
13
14
|
function throwError(e) {
|
|
14
15
|
if (e !== null && e instanceof Error) {
|
|
15
16
|
throw e;
|
|
@@ -147,7 +148,7 @@ function arraysAreShallowlyEqual(a, b) {
|
|
|
147
148
|
return false;
|
|
148
149
|
}
|
|
149
150
|
for (let i = 0; i < a.length; i++) {
|
|
150
|
-
if (a[i] !== b[i]) {
|
|
151
|
+
if (a[i] !== b[i]) {
|
|
151
152
|
return false;
|
|
152
153
|
}
|
|
153
154
|
}
|
|
@@ -163,10 +164,10 @@ function arraysWithEntriesAreShallowlyEqual(a, b) {
|
|
|
163
164
|
return false;
|
|
164
165
|
}
|
|
165
166
|
for (let i = 0; i < a.length; i++) {
|
|
166
|
-
if (a[i][0] !== b[i][0]) {
|
|
167
|
+
if (a[i][0] !== b[i][0]) {
|
|
167
168
|
return false;
|
|
168
169
|
}
|
|
169
|
-
if (a[i][1] !== b[i][1]) {
|
|
170
|
+
if (a[i][1] !== b[i][1]) {
|
|
170
171
|
return false;
|
|
171
172
|
}
|
|
172
173
|
}
|
|
@@ -175,4 +176,30 @@ function arraysWithEntriesAreShallowlyEqual(a, b) {
|
|
|
175
176
|
function recordedReadsArraysAreEqual(a, b) {
|
|
176
177
|
return arraysAreEqualsByPredicateFn(a, b, (a, b) => a.equals(b));
|
|
177
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* This Map does not return empty values, so there's always a default value created
|
|
181
|
+
*/
|
|
182
|
+
class DefaultMap extends Map {
|
|
183
|
+
get(key) {
|
|
184
|
+
let result = super.get(key);
|
|
185
|
+
if (result === undefined) {
|
|
186
|
+
result = this.createDefaultValue();
|
|
187
|
+
this.set(key, result);
|
|
188
|
+
}
|
|
189
|
+
return result;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.DefaultMap = DefaultMap;
|
|
193
|
+
/**
|
|
194
|
+
*
|
|
195
|
+
* @param createDefaultValueFn
|
|
196
|
+
* @returns a Map that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
197
|
+
*/
|
|
198
|
+
function newDefaultMap(createDefaultValueFn) {
|
|
199
|
+
return new class extends DefaultMap {
|
|
200
|
+
createDefaultValue() {
|
|
201
|
+
return createDefaultValueFn();
|
|
202
|
+
}
|
|
203
|
+
}();
|
|
204
|
+
}
|
|
178
205
|
//# sourceMappingURL=Util.js.map
|
package/Util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Util.js","sourceRoot":"","sources":["Util.ts"],"names":[],"mappings":";;;AAEA,gCAKC;AAED,0CAUC;AAED,4BAEC;AAwCD,oEAUC;AAiCD,oCAqCC;AAMD,oBAIC;AAED,0DAUC;AAOD,gFAaC;AAED,kEAEC;
|
|
1
|
+
{"version":3,"file":"Util.js","sourceRoot":"","sources":["Util.ts"],"names":[],"mappings":"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"}
|
package/Util.ts
CHANGED
|
@@ -158,7 +158,7 @@ export function arraysAreShallowlyEqual(a: unknown[], b: unknown[]) {
|
|
|
158
158
|
return false;
|
|
159
159
|
}
|
|
160
160
|
for(let i = 0;i<a.length;i++) {
|
|
161
|
-
if(a[i] !== b[i]) {
|
|
161
|
+
if(a[i] !== b[i]) {
|
|
162
162
|
return false;
|
|
163
163
|
}
|
|
164
164
|
}
|
|
@@ -175,10 +175,10 @@ export function arraysWithEntriesAreShallowlyEqual(a: Array<[unknown, unknown]>,
|
|
|
175
175
|
return false;
|
|
176
176
|
}
|
|
177
177
|
for(let i = 0;i<a.length;i++) {
|
|
178
|
-
if(a[i][0] !== b[i][0]) {
|
|
178
|
+
if(a[i][0] !== b[i][0]) {
|
|
179
179
|
return false;
|
|
180
180
|
}
|
|
181
|
-
if(a[i][1] !== b[i][1]) {
|
|
181
|
+
if(a[i][1] !== b[i][1]) {
|
|
182
182
|
return false;
|
|
183
183
|
}
|
|
184
184
|
}
|
|
@@ -187,4 +187,33 @@ export function arraysWithEntriesAreShallowlyEqual(a: Array<[unknown, unknown]>,
|
|
|
187
187
|
|
|
188
188
|
export function recordedReadsArraysAreEqual(a: RecordedRead[], b: RecordedRead[]) {
|
|
189
189
|
return arraysAreEqualsByPredicateFn(a, b, (a, b) => a.equals(b));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* This Map does not return empty values, so there's always a default value created
|
|
194
|
+
*/
|
|
195
|
+
export abstract class DefaultMap<K, V> extends Map<K,V>{
|
|
196
|
+
abstract createDefaultValue(): V;
|
|
197
|
+
|
|
198
|
+
get(key: K): V {
|
|
199
|
+
let result = super.get(key);
|
|
200
|
+
if(result === undefined) {
|
|
201
|
+
result = this.createDefaultValue();
|
|
202
|
+
this.set(key, result);
|
|
203
|
+
}
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
*
|
|
210
|
+
* @param createDefaultValueFn
|
|
211
|
+
* @returns a Map that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
212
|
+
*/
|
|
213
|
+
export function newDefaultMap<K,V>(createDefaultValueFn: () => V): DefaultMap<K, V> {
|
|
214
|
+
return new class extends DefaultMap<K, V> {
|
|
215
|
+
createDefaultValue(): V {
|
|
216
|
+
return createDefaultValueFn();
|
|
217
|
+
}
|
|
218
|
+
}()
|
|
190
219
|
}
|
package/dist/mjs/Util.d.ts
CHANGED
|
@@ -62,5 +62,18 @@ export declare function arraysAreShallowlyEqual(a: unknown[], b: unknown[]): boo
|
|
|
62
62
|
*/
|
|
63
63
|
export declare function arraysWithEntriesAreShallowlyEqual(a: Array<[unknown, unknown]>, b: Array<[unknown, unknown]>): boolean;
|
|
64
64
|
export declare function recordedReadsArraysAreEqual(a: RecordedRead[], b: RecordedRead[]): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* This Map does not return empty values, so there's always a default value created
|
|
67
|
+
*/
|
|
68
|
+
export declare abstract class DefaultMap<K, V> extends Map<K, V> {
|
|
69
|
+
abstract createDefaultValue(): V;
|
|
70
|
+
get(key: K): V;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
*
|
|
74
|
+
* @param createDefaultValueFn
|
|
75
|
+
* @returns a Map that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
76
|
+
*/
|
|
77
|
+
export declare function newDefaultMap<K, V>(createDefaultValueFn: () => V): DefaultMap<K, V>;
|
|
65
78
|
export {};
|
|
66
79
|
//# sourceMappingURL=Util.d.ts.map
|
package/dist/mjs/Util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Util.d.ts","sourceRoot":"","sources":["../../Util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAE3C,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,QAK3C;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAUvD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,mBAEtC;AAED;;GAEG;AACH,qBAAa,MAAM,CAAC,CAAC,EAAE,CAAC;IACpB,GAAG,iBAAuB;IAE1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IASpB,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAUvB,GAAG,CAAC,GAAG,EAAE,CAAC;CAGb;AAED;;GAEG;AACH,qBAAa,UAAU,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAE9C,GAAG,qBAA4B;CAClC;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAE,CAAC,KAAK,OAAO,WAUlG;AACD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CAAC,GAAG;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,CAAC,CAAA;CAAC,GAAG;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,GAAG,CAAA;CAAC,CAAC;AAGvJ,KAAK,mBAAmB,GAAG;IACvB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,EAAG,SAAS,GAAE,OAAO,GAAG,SAAiB,GAAG,CAAC,CAqChO;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,QAI9B;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,WAUjE;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,WAa5G;AAED,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,WAE/E"}
|
|
1
|
+
{"version":3,"file":"Util.d.ts","sourceRoot":"","sources":["../../Util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAE3C,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,QAK3C;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAUvD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,mBAEtC;AAED;;GAEG;AACH,qBAAa,MAAM,CAAC,CAAC,EAAE,CAAC;IACpB,GAAG,iBAAuB;IAE1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IASpB,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAUvB,GAAG,CAAC,GAAG,EAAE,CAAC;CAGb;AAED;;GAEG;AACH,qBAAa,UAAU,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAE9C,GAAG,qBAA4B;CAClC;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAE,CAAC,KAAK,OAAO,WAUlG;AACD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CAAC,GAAG;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,CAAC,CAAA;CAAC,GAAG;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,GAAG,CAAA;CAAC,CAAC;AAGvJ,KAAK,mBAAmB,GAAG;IACvB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,EAAG,SAAS,GAAE,OAAO,GAAG,SAAiB,GAAG,CAAC,CAqChO;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,QAI9B;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,WAUjE;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,WAa5G;AAED,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,WAE/E;AAED;;GAEG;AACH,8BAAsB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,kBAAkB,IAAI,CAAC;IAEhC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;CAQjB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAC,CAAC,EAAE,oBAAoB,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAMlF"}
|
package/dist/mjs/Util.js
CHANGED
|
@@ -133,7 +133,7 @@ export function arraysAreShallowlyEqual(a, b) {
|
|
|
133
133
|
return false;
|
|
134
134
|
}
|
|
135
135
|
for (let i = 0; i < a.length; i++) {
|
|
136
|
-
if (a[i] !== b[i]) {
|
|
136
|
+
if (a[i] !== b[i]) {
|
|
137
137
|
return false;
|
|
138
138
|
}
|
|
139
139
|
}
|
|
@@ -149,10 +149,10 @@ export function arraysWithEntriesAreShallowlyEqual(a, b) {
|
|
|
149
149
|
return false;
|
|
150
150
|
}
|
|
151
151
|
for (let i = 0; i < a.length; i++) {
|
|
152
|
-
if (a[i][0] !== b[i][0]) {
|
|
152
|
+
if (a[i][0] !== b[i][0]) {
|
|
153
153
|
return false;
|
|
154
154
|
}
|
|
155
|
-
if (a[i][1] !== b[i][1]) {
|
|
155
|
+
if (a[i][1] !== b[i][1]) {
|
|
156
156
|
return false;
|
|
157
157
|
}
|
|
158
158
|
}
|
|
@@ -161,4 +161,29 @@ export function arraysWithEntriesAreShallowlyEqual(a, b) {
|
|
|
161
161
|
export function recordedReadsArraysAreEqual(a, b) {
|
|
162
162
|
return arraysAreEqualsByPredicateFn(a, b, (a, b) => a.equals(b));
|
|
163
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* This Map does not return empty values, so there's always a default value created
|
|
166
|
+
*/
|
|
167
|
+
export class DefaultMap extends Map {
|
|
168
|
+
get(key) {
|
|
169
|
+
let result = super.get(key);
|
|
170
|
+
if (result === undefined) {
|
|
171
|
+
result = this.createDefaultValue();
|
|
172
|
+
this.set(key, result);
|
|
173
|
+
}
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
*
|
|
179
|
+
* @param createDefaultValueFn
|
|
180
|
+
* @returns a Map that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
181
|
+
*/
|
|
182
|
+
export function newDefaultMap(createDefaultValueFn) {
|
|
183
|
+
return new class extends DefaultMap {
|
|
184
|
+
createDefaultValue() {
|
|
185
|
+
return createDefaultValueFn();
|
|
186
|
+
}
|
|
187
|
+
}();
|
|
188
|
+
}
|
|
164
189
|
//# sourceMappingURL=Util.js.map
|
package/dist/mjs/Util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Util.js","sourceRoot":"","sources":["../../Util.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Util.js","sourceRoot":"","sources":["../../Util.ts"],"names":[],"mappings":"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"}
|
package/dist/mjs/index.d.ts
CHANGED
|
@@ -16,12 +16,10 @@ type WatchedComponentOptions = {
|
|
|
16
16
|
*/
|
|
17
17
|
memo?: boolean;
|
|
18
18
|
/**
|
|
19
|
-
* TODO
|
|
20
19
|
* Normally, everything that's **taken** from props, {@link useWatchedState} or {@link watched} or load(...)'s result will be returned, wrapped in a proxy that watches for modifications.
|
|
21
|
-
* So far, so good, this can handle all stuff that's happening inside your component, but the outside world does not have these proxies. For example, when a parent component is not a watchedComponent, and passed in an object (i.e. the model) into this component via props.
|
|
20
|
+
* So far, so good, this can handle all stuff that's happening **inside** your component, but the outside world does not have these proxies. For example, when a parent component is not a watchedComponent, and passed in an object (i.e. the model) into this component via props.
|
|
22
21
|
* Therefore this component can also **patch** these objects to make them watchable.
|
|
23
22
|
*
|
|
24
|
-
*
|
|
25
23
|
* <p>Default: true</p>
|
|
26
24
|
*/
|
|
27
25
|
watchOutside?: boolean;
|
|
@@ -38,21 +36,42 @@ type WatchedComponentOptions = {
|
|
|
38
36
|
* </p>
|
|
39
37
|
*/
|
|
40
38
|
preserveProps?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Shares a global proxy facade instance for all watchedComponents. This is the more tested and easier to think about option.
|
|
41
|
+
* Disabling this creates a layer of new proxies for every of your child components. Object instances **inside** your component may still be consistent, but there could be: objInsideMyComponent !== myObjectHandedOverGloballyInSomeOtherWay. Real world use cases have to prove, if this is good way.
|
|
42
|
+
* Note:
|
|
43
|
+
* <p>
|
|
44
|
+
* Default: true
|
|
45
|
+
* </p>
|
|
46
|
+
*/
|
|
47
|
+
useGlobalSharedProxyFacade?: boolean;
|
|
41
48
|
};
|
|
42
49
|
export declare function watchedComponent<PROPS extends object>(componentFn: (props: PROPS) => any, options?: WatchedComponentOptions): ((props: PROPS) => any) | import("react").MemoExoticComponent<(props: PROPS) => any>;
|
|
43
50
|
type WatchedOptions = {
|
|
44
51
|
/**
|
|
45
|
-
* TODO: Implement
|
|
46
52
|
* Called, when a deep property was changed through the proxy.
|
|
53
|
+
* Setting this, will create a new proxy-facade for the purpuse of watching changes only (deep) under that proxy.
|
|
54
|
+
* <p>
|
|
55
|
+
* <a href="https://github.com/bogeeee/react-deepwatch/blob/main/readme.md#and-less-handing-onchange-listeners-to-child-components">Usage</a>
|
|
56
|
+
* </p>
|
|
47
57
|
*/
|
|
48
58
|
onChange?: () => void;
|
|
49
|
-
/**
|
|
50
|
-
* TODO: Implement
|
|
51
|
-
* Called on a change to one of those properties, that were read-recorded in the component function (through the proxy of course).
|
|
52
|
-
* Reacts also on external changes / not done through the proxy.
|
|
53
|
-
*/
|
|
54
|
-
onRecordedChange?: () => void;
|
|
55
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Watches any (external) object and tracks reads to it's deep childs. Changes to these tracked reads will result in a re-render or re-load the load(...) statements that depend on it.
|
|
62
|
+
* <p>
|
|
63
|
+
* Also you can use it with the onChange option, see the <a href="https://github.com/bogeeee/react-deepwatch/blob/main/readme.md#and-less-handing-onchange-listeners-to-child-components">"And less... handing onChange listeners to child components"</a> use case.
|
|
64
|
+
* </p>
|
|
65
|
+
* @param obj original object to watch
|
|
66
|
+
* @param options
|
|
67
|
+
* @returns a proxy for the original object.
|
|
68
|
+
*/
|
|
69
|
+
export declare function watched<T extends object>(obj: T, options?: WatchedOptions): T;
|
|
70
|
+
/**
|
|
71
|
+
* Saves the state like with useState(...) and watches and tracks reads to it's deep childs. Changes to these tracked reads will result in a re-render or re-load the load(...) statements that depend on it.
|
|
72
|
+
* @param initial
|
|
73
|
+
* @param options
|
|
74
|
+
*/
|
|
56
75
|
export declare function useWatchedState(initial: object, options?: WatchedOptions): object;
|
|
57
76
|
type LoadOptions = {
|
|
58
77
|
/**
|
|
@@ -214,5 +233,5 @@ export declare function poll<T, FALLBACK>(loaderFn: (oldResult?: T) => Promise<T
|
|
|
214
233
|
fallback: FALLBACK;
|
|
215
234
|
} & PollOptions): T | FALLBACK;
|
|
216
235
|
export declare function debug_tagComponent(name: string): void;
|
|
217
|
-
export {};
|
|
236
|
+
export { preserve, PreserveOptions } from "./preserve";
|
|
218
237
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/mjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"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"}
|
package/dist/mjs/index.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { RecordedReadOnProxiedObject, RecordedValueRead, WatchedProxyFacade, installChangeTracker } from "proxy-facades";
|
|
2
|
-
import { isObject, recordedReadsArraysAreEqual, throwError } from "./Util";
|
|
2
|
+
import { isObject, newDefaultMap, recordedReadsArraysAreEqual, throwError } from "./Util";
|
|
3
3
|
import { useState, createElement, Fragment, useEffect, useContext, memo } from "react";
|
|
4
4
|
import { ErrorBoundaryContext, useErrorBoundary } from "react-error-boundary";
|
|
5
5
|
import { _preserve } from "./preserve";
|
|
6
|
-
let
|
|
7
|
-
function getWatchedProxyFacade() {
|
|
8
|
-
return watchedProxyFacade || (watchedProxyFacade = new WatchedProxyFacade()); // Lazy initialize global variable
|
|
9
|
-
}
|
|
6
|
+
let sharedWatchedProxyFacade;
|
|
10
7
|
let debug_idGenerator = 0;
|
|
11
8
|
/**
|
|
12
9
|
* Contains the preconditions and the state / polling state for a load(...) statement.
|
|
@@ -177,6 +174,13 @@ class LoadCall {
|
|
|
177
174
|
* Fields that persist across re-render and across frames
|
|
178
175
|
*/
|
|
179
176
|
class WatchedComponentPersistent {
|
|
177
|
+
get watchedProxyFacade() {
|
|
178
|
+
if (this.options.useGlobalSharedProxyFacade === false) {
|
|
179
|
+
return this._nonSharedWatchedProxyFacade || (this._nonSharedWatchedProxyFacade = new WatchedProxyFacade());
|
|
180
|
+
}
|
|
181
|
+
// Use a global shared instance
|
|
182
|
+
return sharedWatchedProxyFacade || (sharedWatchedProxyFacade = new WatchedProxyFacade()); // Lazy initialize global variable
|
|
183
|
+
}
|
|
180
184
|
doReRender() {
|
|
181
185
|
// Call listeners:
|
|
182
186
|
this.onceOnReRenderListeners.forEach(fn => fn());
|
|
@@ -222,10 +226,6 @@ class WatchedComponentPersistent {
|
|
|
222
226
|
return ((_a = this.currentFrame) === null || _a === void 0 ? void 0 : _a.recentRenderRun) !== undefined && this.reRenderRequested === this.currentFrame.recentRenderRun;
|
|
223
227
|
}
|
|
224
228
|
constructor(options) {
|
|
225
|
-
/**
|
|
226
|
-
* props of the component. These are saved here in the state (in a non changing object instance), so code inside load call can watch **shallow** props changes on it.
|
|
227
|
-
*/
|
|
228
|
-
this.watchedProps = getWatchedProxyFacade().getProxyFor({});
|
|
229
229
|
/**
|
|
230
230
|
* id -> loadCall. Null when there are multiple for that id
|
|
231
231
|
*/
|
|
@@ -246,7 +246,13 @@ class WatchedComponentPersistent {
|
|
|
246
246
|
*/
|
|
247
247
|
this.onceOnReRenderListeners = [];
|
|
248
248
|
this.onceOnEffectCleanupListeners = [];
|
|
249
|
+
/**
|
|
250
|
+
* For the <a href="https://github.com/bogeeee/react-deepwatch/blob/main/readme.md#and-less-handing-onchange-listeners-to-child-components">"And less... handing onChange listeners to child components"</a> use case.
|
|
251
|
+
* We don't want new object instances created, every time watched(..., {onChange:....}) is called. So we assign the proxy facade (see watched function) to the object
|
|
252
|
+
*/
|
|
253
|
+
this.object_to_childProxyFacade = newDefaultMap(() => new WatchedProxyFacade());
|
|
249
254
|
this.options = options;
|
|
255
|
+
this.watchedProps = this.watchedProxyFacade.getProxyFor({});
|
|
250
256
|
}
|
|
251
257
|
/**
|
|
252
258
|
*
|
|
@@ -272,11 +278,6 @@ class WatchedComponentPersistent {
|
|
|
272
278
|
*
|
|
273
279
|
*/
|
|
274
280
|
class Frame {
|
|
275
|
-
//watchedProxyFacade= new WatchedProxyFacade();
|
|
276
|
-
get watchedProxyFacade() {
|
|
277
|
-
// Use a global shared instance. Because there's no exclusive state inside the graph/handlers. And state.someObj = state.someObj does not cause us multiple nesting layers of proxies. Still this may not the final choice. When changing this mind also the `this.proxyHandler === other.proxyHandler` in RecordedPropertyRead#equals
|
|
278
|
-
return getWatchedProxyFacade();
|
|
279
|
-
}
|
|
280
281
|
constructor() {
|
|
281
282
|
this.isListeningForChanges = false;
|
|
282
283
|
this.startPropChangeListeningFns = [];
|
|
@@ -313,6 +314,7 @@ class Frame {
|
|
|
313
314
|
this.persistent.handleChangeEvent();
|
|
314
315
|
}
|
|
315
316
|
watchPropertyChange(read) {
|
|
317
|
+
var _a;
|
|
316
318
|
//Diagnosis: Provoke errors early, cause the code at the bottom of this method looses the stacktrace to the user's jsx
|
|
317
319
|
if (this.persistent.options.watchOutside !== false) {
|
|
318
320
|
try {
|
|
@@ -321,7 +323,11 @@ class Frame {
|
|
|
321
323
|
}
|
|
322
324
|
}
|
|
323
325
|
catch (e) {
|
|
324
|
-
|
|
326
|
+
if ((_a = e.message) === null || _a === void 0 ? void 0 : _a.startsWith("Cannot install change tracker on a proxy")) { // Hacky way to catch this. TODO: Expose a proper API for it.
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
throw new Error(`Could not enhance the original object to track reads. This can fail, if it was created with some unsupported language constructs (defining read only properties; subclassing Array, Set or Map; ...). You can switch it off via the WatchedComponentOptions#watchOutside flag. I.e: const MyComponent = watchedComponent(props => {...}, {watchOutside: false})`, { cause: e });
|
|
330
|
+
}
|
|
325
331
|
}
|
|
326
332
|
}
|
|
327
333
|
// Re-render on a change of the read value:
|
|
@@ -350,6 +356,15 @@ class RenderRun {
|
|
|
350
356
|
this.loadCallIndex = 0;
|
|
351
357
|
this.onFinallyAfterUsersComponentFnListeners = [];
|
|
352
358
|
this.somePendingAreCritical = false;
|
|
359
|
+
/**
|
|
360
|
+
* (Additional) effect functions (run after mount. Like with useEffect)
|
|
361
|
+
*/
|
|
362
|
+
this.effectFns = [];
|
|
363
|
+
/**
|
|
364
|
+
* (Additional) effect cleanup functions
|
|
365
|
+
*/
|
|
366
|
+
this.effectCleanupFns = [];
|
|
367
|
+
this.diagnosis_objectsWatchedWithOnChange = new Set();
|
|
353
368
|
}
|
|
354
369
|
handleRenderFinishedSuccessfully() {
|
|
355
370
|
if (!this.isPassive) {
|
|
@@ -370,12 +385,14 @@ class RenderRun {
|
|
|
370
385
|
handleEffectSetup() {
|
|
371
386
|
this.frame.persistent.hadASuccessfullMount = true;
|
|
372
387
|
this.frame.startListeningForChanges();
|
|
388
|
+
this.effectFns.forEach(fn => fn());
|
|
373
389
|
}
|
|
374
390
|
/**
|
|
375
391
|
* Called by useEffect before the next render oder before unmount(for suspense, for error or forever)
|
|
376
392
|
*/
|
|
377
393
|
handleEffectCleanup() {
|
|
378
394
|
// Call listeners:
|
|
395
|
+
this.effectCleanupFns.forEach(fn => fn());
|
|
379
396
|
this.frame.persistent.onceOnEffectCleanupListeners.forEach(fn => fn());
|
|
380
397
|
this.frame.persistent.onceOnEffectCleanupListeners = [];
|
|
381
398
|
let currentFrame = this.frame.persistent.currentFrame;
|
|
@@ -437,7 +454,7 @@ export function watchedComponent(componentFn, options = {}) {
|
|
|
437
454
|
}
|
|
438
455
|
renderRun.recordedReads.push(read);
|
|
439
456
|
};
|
|
440
|
-
|
|
457
|
+
persistent.watchedProxyFacade.onAfterRead(readListener);
|
|
441
458
|
try {
|
|
442
459
|
try {
|
|
443
460
|
let result = componentFn(persistent.watchedProps); // Run the user's component function
|
|
@@ -473,7 +490,7 @@ export function watchedComponent(componentFn, options = {}) {
|
|
|
473
490
|
throw e;
|
|
474
491
|
}
|
|
475
492
|
finally {
|
|
476
|
-
|
|
493
|
+
persistent.watchedProxyFacade.offAfterRead(readListener);
|
|
477
494
|
}
|
|
478
495
|
}
|
|
479
496
|
finally {
|
|
@@ -486,14 +503,40 @@ export function watchedComponent(componentFn, options = {}) {
|
|
|
486
503
|
}
|
|
487
504
|
return memo(outerResult);
|
|
488
505
|
}
|
|
489
|
-
|
|
506
|
+
/**
|
|
507
|
+
* Watches any (external) object and tracks reads to it's deep childs. Changes to these tracked reads will result in a re-render or re-load the load(...) statements that depend on it.
|
|
508
|
+
* <p>
|
|
509
|
+
* Also you can use it with the onChange option, see the <a href="https://github.com/bogeeee/react-deepwatch/blob/main/readme.md#and-less-handing-onchange-listeners-to-child-components">"And less... handing onChange listeners to child components"</a> use case.
|
|
510
|
+
* </p>
|
|
511
|
+
* @param obj original object to watch
|
|
512
|
+
* @param options
|
|
513
|
+
* @returns a proxy for the original object.
|
|
514
|
+
*/
|
|
515
|
+
export function watched(obj, options) {
|
|
490
516
|
currentRenderRun || throwError("watched is not used from inside a watchedComponent");
|
|
491
|
-
|
|
517
|
+
let result = currentRenderRun.frame.persistent.watchedProxyFacade.getProxyFor(obj);
|
|
518
|
+
if (options === null || options === void 0 ? void 0 : options.onChange) {
|
|
519
|
+
// Safety check:
|
|
520
|
+
!currentRenderRun.diagnosis_objectsWatchedWithOnChange.has(result) || throwError("You have called watched(someObject, {onChange:...}) 2 times for the same someObj. This is not supported, since for keeping as much object instance consitency as possible, there is one fixed proxyfacade-for-change-tracking assiciated to it. If you really have a valid use case for watching the same object twice for changes, submit an issue.");
|
|
521
|
+
currentRenderRun.diagnosis_objectsWatchedWithOnChange.add(result);
|
|
522
|
+
const facadeForChangeWatching = currentRenderRun.frame.persistent.object_to_childProxyFacade.get(obj);
|
|
523
|
+
// Listen for changes and call options.onChange during component mount:
|
|
524
|
+
const changeHandler = (changeOperation) => options.onChange();
|
|
525
|
+
currentRenderRun.effectFns.push(() => { facadeForChangeWatching.onAfterChange(changeHandler); });
|
|
526
|
+
currentRenderRun.effectCleanupFns.push(() => { facadeForChangeWatching.offAfterChange(changeHandler); });
|
|
527
|
+
result = facadeForChangeWatching.getProxyFor(result);
|
|
528
|
+
}
|
|
529
|
+
return result;
|
|
492
530
|
}
|
|
531
|
+
/**
|
|
532
|
+
* Saves the state like with useState(...) and watches and tracks reads to it's deep childs. Changes to these tracked reads will result in a re-render or re-load the load(...) statements that depend on it.
|
|
533
|
+
* @param initial
|
|
534
|
+
* @param options
|
|
535
|
+
*/
|
|
493
536
|
export function useWatchedState(initial, options) {
|
|
494
537
|
currentRenderRun || throwError("useWatchedState is not used from inside a watchedComponent");
|
|
495
538
|
const [state] = useState(initial);
|
|
496
|
-
return watched(state);
|
|
539
|
+
return watched(state, options);
|
|
497
540
|
}
|
|
498
541
|
/**
|
|
499
542
|
* Records the values, that are **immediately** accessed in the loader function. Treats them as dependencies and re-executes the loader when any of these change.
|
|
@@ -707,7 +750,7 @@ export function load(loaderFn, options = {}) {
|
|
|
707
750
|
}
|
|
708
751
|
}
|
|
709
752
|
}
|
|
710
|
-
function watched(value) { return (value !== null && typeof value === "object") ?
|
|
753
|
+
function watched(value) { return (value !== null && typeof value === "object") ? persistent.watchedProxyFacade.getProxyFor(value) : value; }
|
|
711
754
|
/**
|
|
712
755
|
*
|
|
713
756
|
* @param callStack
|
|
@@ -818,4 +861,5 @@ function probe(probeFn, defaultResult) {
|
|
|
818
861
|
export function debug_tagComponent(name) {
|
|
819
862
|
currentRenderRun.frame.persistent.debug_tag = name;
|
|
820
863
|
}
|
|
864
|
+
export { preserve } from "./preserve";
|
|
821
865
|
//# sourceMappingURL=index.js.map
|