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.
- package/.idea/.name +1 -0
- package/.idea/modules.xml +8 -0
- package/.idea/proxy-facades.iml +8 -0
- package/.idea/vcs.xml +6 -0
- package/DEVELOPMENT.md +15 -0
- package/LICENSE +21 -0
- package/RecordedReadOnProxiedObjectExt.d.ts +22 -0
- package/RecordedReadOnProxiedObjectExt.d.ts.map +1 -0
- package/RecordedReadOnProxiedObjectExt.js +41 -0
- package/RecordedReadOnProxiedObjectExt.js.map +1 -0
- package/RecordedReadOnProxiedObjectExt.ts +41 -0
- package/Util.d.ts +85 -0
- package/Util.d.ts.map +1 -0
- package/Util.js +239 -0
- package/Util.js.map +1 -0
- package/Util.ts +254 -0
- package/class-trackers/Array.d.ts +93 -0
- package/class-trackers/Array.d.ts.map +1 -0
- package/class-trackers/Array.js +193 -0
- package/class-trackers/Array.js.map +1 -0
- package/class-trackers/Array.ts +245 -0
- package/class-trackers/Iterator.d.ts +38 -0
- package/class-trackers/Iterator.d.ts.map +1 -0
- package/class-trackers/Iterator.js +69 -0
- package/class-trackers/Iterator.js.map +1 -0
- package/class-trackers/Iterator.ts +73 -0
- package/class-trackers/Map.d.ts +128 -0
- package/class-trackers/Map.d.ts.map +1 -0
- package/class-trackers/Map.js +310 -0
- package/class-trackers/Map.js.map +1 -0
- package/class-trackers/Map.ts +403 -0
- package/class-trackers/Set.d.ts +85 -0
- package/class-trackers/Set.d.ts.map +1 -0
- package/class-trackers/Set.js +197 -0
- package/class-trackers/Set.js.map +1 -0
- package/class-trackers/Set.ts +245 -0
- package/class-trackers/index.d.ts +7 -0
- package/class-trackers/index.d.ts.map +1 -0
- package/class-trackers/index.js +36 -0
- package/class-trackers/index.js.map +1 -0
- package/class-trackers/index.ts +38 -0
- package/class-trackers/readme.md +2 -0
- package/common.d.ts +235 -0
- package/common.d.ts.map +1 -0
- package/common.js +378 -0
- package/common.js.map +1 -0
- package/common.ts +501 -0
- package/dev_generateEsRuntimeBehaviourCheckerCode.d.ts +10 -0
- package/dev_generateEsRuntimeBehaviourCheckerCode.d.ts.map +1 -0
- package/dev_generateEsRuntimeBehaviourCheckerCode.js +76 -0
- package/dev_generateEsRuntimeBehaviourCheckerCode.js.map +1 -0
- package/dev_generateEsRuntimeBehaviourCheckerCode.ts +85 -0
- package/dist/mjs/RecordedReadOnProxiedObjectExt.d.ts +22 -0
- package/dist/mjs/RecordedReadOnProxiedObjectExt.d.ts.map +1 -0
- package/dist/mjs/RecordedReadOnProxiedObjectExt.js +37 -0
- package/dist/mjs/RecordedReadOnProxiedObjectExt.js.map +1 -0
- package/dist/mjs/Util.d.ts +85 -0
- package/dist/mjs/Util.d.ts.map +1 -0
- package/dist/mjs/Util.js +223 -0
- package/dist/mjs/Util.js.map +1 -0
- package/dist/mjs/class-trackers/Array.d.ts +93 -0
- package/dist/mjs/class-trackers/Array.d.ts.map +1 -0
- package/dist/mjs/class-trackers/Array.js +186 -0
- package/dist/mjs/class-trackers/Array.js.map +1 -0
- package/dist/mjs/class-trackers/Iterator.d.ts +38 -0
- package/dist/mjs/class-trackers/Iterator.d.ts.map +1 -0
- package/dist/mjs/class-trackers/Iterator.js +65 -0
- package/dist/mjs/class-trackers/Iterator.js.map +1 -0
- package/dist/mjs/class-trackers/Map.d.ts +128 -0
- package/dist/mjs/class-trackers/Map.d.ts.map +1 -0
- package/dist/mjs/class-trackers/Map.js +299 -0
- package/dist/mjs/class-trackers/Map.js.map +1 -0
- package/dist/mjs/class-trackers/Set.d.ts +85 -0
- package/dist/mjs/class-trackers/Set.d.ts.map +1 -0
- package/dist/mjs/class-trackers/Set.js +189 -0
- package/dist/mjs/class-trackers/Set.js.map +1 -0
- package/dist/mjs/class-trackers/index.d.ts +7 -0
- package/dist/mjs/class-trackers/index.d.ts.map +1 -0
- package/dist/mjs/class-trackers/index.js +32 -0
- package/dist/mjs/class-trackers/index.js.map +1 -0
- package/dist/mjs/common.d.ts +235 -0
- package/dist/mjs/common.d.ts.map +1 -0
- package/dist/mjs/common.js +361 -0
- package/dist/mjs/common.js.map +1 -0
- package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.d.ts +10 -0
- package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.d.ts.map +1 -0
- package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.js +76 -0
- package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.js.map +1 -0
- package/dist/mjs/index.d.ts +8 -0
- package/dist/mjs/index.d.ts.map +1 -0
- package/dist/mjs/index.js +8 -0
- package/dist/mjs/index.js.map +1 -0
- package/dist/mjs/objectChangeTracking.d.ts +43 -0
- package/dist/mjs/objectChangeTracking.d.ts.map +1 -0
- package/dist/mjs/objectChangeTracking.js +209 -0
- package/dist/mjs/objectChangeTracking.js.map +1 -0
- package/dist/mjs/origChangeTracking.d.ts +14 -0
- package/dist/mjs/origChangeTracking.d.ts.map +1 -0
- package/dist/mjs/origChangeTracking.js +58 -0
- package/dist/mjs/origChangeTracking.js.map +1 -0
- package/dist/mjs/proxyFacade.d.ts +45 -0
- package/dist/mjs/proxyFacade.d.ts.map +1 -0
- package/dist/mjs/proxyFacade.js +179 -0
- package/dist/mjs/proxyFacade.js.map +1 -0
- package/dist/mjs/watchedProxyFacade.d.ts +84 -0
- package/dist/mjs/watchedProxyFacade.d.ts.map +1 -0
- package/dist/mjs/watchedProxyFacade.js +300 -0
- package/dist/mjs/watchedProxyFacade.js.map +1 -0
- package/index.d.ts +8 -0
- package/index.d.ts.map +1 -0
- package/index.js +36 -0
- package/index.js.map +1 -0
- package/index.ts +7 -0
- package/index_esm.mjs +44 -0
- package/objectChangeTracking.d.ts +43 -0
- package/objectChangeTracking.d.ts.map +1 -0
- package/objectChangeTracking.js +214 -0
- package/objectChangeTracking.js.map +1 -0
- package/objectChangeTracking.ts +251 -0
- package/origChangeTracking.d.ts +14 -0
- package/origChangeTracking.d.ts.map +1 -0
- package/origChangeTracking.js +63 -0
- package/origChangeTracking.js.map +1 -0
- package/origChangeTracking.ts +72 -0
- package/package.json +52 -0
- package/proxyFacade.d.ts +45 -0
- package/proxyFacade.d.ts.map +1 -0
- package/proxyFacade.js +187 -0
- package/proxyFacade.js.map +1 -0
- package/proxyFacade.ts +222 -0
- package/readme.md +111 -0
- package/watchedProxyFacade.d.ts +84 -0
- package/watchedProxyFacade.d.ts.map +1 -0
- package/watchedProxyFacade.js +312 -0
- package/watchedProxyFacade.js.map +1 -0
- package/watchedProxyFacade.ts +369 -0
package/.idea/.name
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
proxy-facades
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="ProjectModuleManager">
|
|
4
|
+
<modules>
|
|
5
|
+
<module fileurl="file://$PROJECT_DIR$/.idea/proxy-facades.iml" filepath="$PROJECT_DIR$/.idea/proxy-facades.iml" />
|
|
6
|
+
</modules>
|
|
7
|
+
</component>
|
|
8
|
+
</project>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<module type="WEB_MODULE" version="4">
|
|
3
|
+
<component name="NewModuleRootManager">
|
|
4
|
+
<content url="file://$MODULE_DIR$" />
|
|
5
|
+
<orderEntry type="inheritedJdk" />
|
|
6
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
|
7
|
+
</component>
|
|
8
|
+
</module>
|
package/.idea/vcs.xml
ADDED
package/DEVELOPMENT.md
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024-present Boris Gingold
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { EventHook, RecordedReadOnProxiedObject } from "./common";
|
|
2
|
+
/**
|
|
3
|
+
* Offers a more convenient method: getAffectingChangeHooks
|
|
4
|
+
*/
|
|
5
|
+
export declare abstract class RecordedReadOnProxiedObjectExt extends RecordedReadOnProxiedObject {
|
|
6
|
+
/**
|
|
7
|
+
* @param listener
|
|
8
|
+
* @param trackOriginal
|
|
9
|
+
*/
|
|
10
|
+
onAfterChange(listener: () => void, trackOriginal?: boolean): void;
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
offAfterChange(listener: () => void): void;
|
|
15
|
+
/**
|
|
16
|
+
*
|
|
17
|
+
* @param target The target for which... This method might be called for multiple targets from different watchedproxyfacade layers or at last layer for the original unproxied object
|
|
18
|
+
* @returns the sets where to add/remove listeners by the onChange/offChange methods
|
|
19
|
+
*/
|
|
20
|
+
getAffectingChangeHooks(target: object): EventHook[];
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=RecordedReadOnProxiedObjectExt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecordedReadOnProxiedObjectExt.d.ts","sourceRoot":"","sources":["RecordedReadOnProxiedObjectExt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAE,2BAA2B,EAAC,MAAM,UAAU,CAAC;AAKhF;;GAEG;AACH,8BAAsB,8BAA+B,SAAQ,2BAA2B;IAEpF;;;OAGG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,aAAa,UAAQ;IAUzD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI;IAKnC;;;;OAIG;IACH,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;CAGvD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RecordedReadOnProxiedObjectExt = void 0;
|
|
4
|
+
const common_1 = require("./common");
|
|
5
|
+
const origChangeTracking_1 = require("./origChangeTracking");
|
|
6
|
+
const proxyFacade_1 = require("./proxyFacade");
|
|
7
|
+
/**
|
|
8
|
+
* Offers a more convenient method: getAffectingChangeHooks
|
|
9
|
+
*/
|
|
10
|
+
class RecordedReadOnProxiedObjectExt extends common_1.RecordedReadOnProxiedObject {
|
|
11
|
+
/**
|
|
12
|
+
* @param listener
|
|
13
|
+
* @param trackOriginal
|
|
14
|
+
*/
|
|
15
|
+
onAfterChange(listener, trackOriginal = false) {
|
|
16
|
+
this.getAffectingChangeHooks(this.proxyHandler.proxy).forEach(eventHook => eventHook.afterListeners.add(listener));
|
|
17
|
+
if (trackOriginal) {
|
|
18
|
+
if (!(0, proxyFacade_1.isProxyForAFacade)(this.obj)) {
|
|
19
|
+
(0, origChangeTracking_1.installChangeTracker)(this.obj);
|
|
20
|
+
}
|
|
21
|
+
this.getAffectingChangeHooks(this.obj).forEach(eventHook => eventHook.afterListeners.add(listener));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
offAfterChange(listener) {
|
|
28
|
+
this.getAffectingChangeHooks(this.obj).forEach(eventHook => eventHook.afterListeners.delete(listener));
|
|
29
|
+
this.getAffectingChangeHooks(this.proxyHandler.proxy).forEach(eventHook => eventHook.afterListeners.delete(listener));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
*
|
|
33
|
+
* @param target The target for which... This method might be called for multiple targets from different watchedproxyfacade layers or at last layer for the original unproxied object
|
|
34
|
+
* @returns the sets where to add/remove listeners by the onChange/offChange methods
|
|
35
|
+
*/
|
|
36
|
+
getAffectingChangeHooks(target) {
|
|
37
|
+
throw new Error("TODO");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.RecordedReadOnProxiedObjectExt = RecordedReadOnProxiedObjectExt;
|
|
41
|
+
//# sourceMappingURL=RecordedReadOnProxiedObjectExt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecordedReadOnProxiedObjectExt.js","sourceRoot":"","sources":["RecordedReadOnProxiedObjectExt.ts"],"names":[],"mappings":";;;AAAA,qCAAgF;AAChF,6DAA0D;AAC1D,+CAAgD;AAGhD;;GAEG;AACH,MAAsB,8BAA+B,SAAQ,oCAA2B;IAEpF;;;OAGG;IACH,aAAa,CAAC,QAAoB,EAAE,aAAa,GAAG,KAAK;QACrD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnH,IAAI,aAAa,EAAE,CAAC;YAChB,IAAG,CAAC,IAAA,+BAAiB,EAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAA,yCAAoB,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxG,CAAC;IACL,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAoB;QAC/B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1H,CAAC;IAED;;;;OAIG;IACH,uBAAuB,CAAC,MAAc;QAClC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;CACJ;AAhCD,wEAgCC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {ChangeListener, EventHook, RecordedReadOnProxiedObject} from "./common";
|
|
2
|
+
import {installChangeTracker} from "./origChangeTracking";
|
|
3
|
+
import {isProxyForAFacade} from "./proxyFacade";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Offers a more convenient method: getAffectingChangeHooks
|
|
8
|
+
*/
|
|
9
|
+
export abstract class RecordedReadOnProxiedObjectExt extends RecordedReadOnProxiedObject {
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @param listener
|
|
13
|
+
* @param trackOriginal
|
|
14
|
+
*/
|
|
15
|
+
onAfterChange(listener: () => void, trackOriginal = false) {
|
|
16
|
+
this.getAffectingChangeHooks(this.proxyHandler.proxy).forEach(eventHook => eventHook.afterListeners.add(listener));
|
|
17
|
+
if (trackOriginal) {
|
|
18
|
+
if(!isProxyForAFacade(this.obj)) {
|
|
19
|
+
installChangeTracker(this.obj);
|
|
20
|
+
}
|
|
21
|
+
this.getAffectingChangeHooks(this.obj).forEach(eventHook => eventHook.afterListeners.add(listener));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
28
|
+
offAfterChange(listener: () => void) {
|
|
29
|
+
this.getAffectingChangeHooks(this.obj).forEach(eventHook => eventHook.afterListeners.delete(listener));
|
|
30
|
+
this.getAffectingChangeHooks(this.proxyHandler.proxy).forEach(eventHook => eventHook.afterListeners.delete(listener));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
*
|
|
35
|
+
* @param target The target for which... This method might be called for multiple targets from different watchedproxyfacade layers or at last layer for the original unproxied object
|
|
36
|
+
* @returns the sets where to add/remove listeners by the onChange/offChange methods
|
|
37
|
+
*/
|
|
38
|
+
getAffectingChangeHooks(target: object): EventHook[] {
|
|
39
|
+
throw new Error("TODO")
|
|
40
|
+
}
|
|
41
|
+
}
|
package/Util.d.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Clazz } from "./common";
|
|
2
|
+
export declare function throwError(e: string | Error): void;
|
|
3
|
+
export declare function reThrowWithHint(e: unknown, hint: string): void;
|
|
4
|
+
export declare function isObject(value: unknown): value is object;
|
|
5
|
+
/**
|
|
6
|
+
* A Map<K, Set<V>>. But automatically add a new Set if needed
|
|
7
|
+
*/
|
|
8
|
+
export declare class MapSet<K, V> {
|
|
9
|
+
map: Map<K, Set<V>>;
|
|
10
|
+
add(key: K, value: V): void;
|
|
11
|
+
delete(key: K, value: V): void;
|
|
12
|
+
get(key: K): Set<V> | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* @param key
|
|
15
|
+
* @return the set for the specified key (an empty one will be created if needed) on which you should call `add` or `delete` **immediately**, so no empty set is left there consuming memory.
|
|
16
|
+
* It is automatically cleaned up after the last delete
|
|
17
|
+
*/
|
|
18
|
+
get4use(key: K): Set<V>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* This Map does not return empty values, so there's always a default value created
|
|
22
|
+
*/
|
|
23
|
+
export declare abstract class DefaultMap<K, V> extends Map<K, V> {
|
|
24
|
+
abstract createDefaultValue(): V;
|
|
25
|
+
get(key: K): V;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* @param createDefaultValueFn
|
|
30
|
+
* @returns a Map that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
31
|
+
*/
|
|
32
|
+
export declare function newDefaultMap<K, V>(createDefaultValueFn: () => V): DefaultMap<K, V>;
|
|
33
|
+
/**
|
|
34
|
+
* A WeakMap<K, Set<V>>. But automatically add a new Set if needed
|
|
35
|
+
*/
|
|
36
|
+
export declare class WeakMapSet<K, V> extends MapSet<K, V> {
|
|
37
|
+
map: WeakMap<K, Set<V>>;
|
|
38
|
+
}
|
|
39
|
+
export declare function arraysAreEqualsByPredicateFn<A, B>(a: A[], b: B[], equalsFn: (a: A, b: B) => boolean): boolean;
|
|
40
|
+
export type PromiseState<T> = {
|
|
41
|
+
state: "pending";
|
|
42
|
+
promise: Promise<T>;
|
|
43
|
+
} | {
|
|
44
|
+
state: "resolved";
|
|
45
|
+
resolvedValue: T;
|
|
46
|
+
} | {
|
|
47
|
+
state: "rejected";
|
|
48
|
+
rejectReason: any;
|
|
49
|
+
};
|
|
50
|
+
type VisitReplaceContext = {
|
|
51
|
+
/**
|
|
52
|
+
* Not safely escaped. Should be used for diag only !
|
|
53
|
+
*/
|
|
54
|
+
diagnosis_path?: string;
|
|
55
|
+
parentObject?: object;
|
|
56
|
+
key?: unknown;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Usage:
|
|
60
|
+
* <pre><code>
|
|
61
|
+
* const result = visitReplace(target, (value, visitChilds, context) => {
|
|
62
|
+
* return value === 'needle' ? 'replaced' : visitChilds(value, context)
|
|
63
|
+
* });
|
|
64
|
+
* </code></pre>
|
|
65
|
+
*
|
|
66
|
+
* @param value
|
|
67
|
+
* @param visitor
|
|
68
|
+
* @param trackPath whether to pass on the context object. This hurts performance because the path is concatted every time, so use it only when needed. Setting this to "onError" re-executes the visitprelace with the concetxt when an error was thrown
|
|
69
|
+
*/
|
|
70
|
+
export declare function visitReplace<O>(value: O, visitor: (value: unknown, visitChilds: (value: unknown, context: VisitReplaceContext) => unknown, context: VisitReplaceContext) => unknown, trackPath?: boolean | "onError"): O;
|
|
71
|
+
/**
|
|
72
|
+
* Just do something the runtime can't optimize away
|
|
73
|
+
* @param value
|
|
74
|
+
*/
|
|
75
|
+
export declare function read(value: any): void;
|
|
76
|
+
export declare function arraysAreShallowlyEqual(a: unknown[], b: unknown[]): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Like arraysAreShallowlyEqual but this time for an array of entries (tuple of 2 values) like from Map#entries()
|
|
79
|
+
* @param a
|
|
80
|
+
* @param b
|
|
81
|
+
*/
|
|
82
|
+
export declare function arraysWithEntriesAreShallowlyEqual(a: Array<[unknown, unknown]>, b: Array<[unknown, unknown]>): boolean;
|
|
83
|
+
export declare function classIsSubclassOf(clazz: Clazz, superClass: Clazz): boolean;
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=Util.d.ts.map
|
package/Util.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Util.d.ts","sourceRoot":"","sources":["Util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,UAAU,CAAC;AAE/B,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;IAIV;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,CAAC;CAuBjB;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;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;AAGD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,WAOhE"}
|
package/Util.js
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WeakMapSet = exports.DefaultMap = exports.MapSet = void 0;
|
|
4
|
+
exports.throwError = throwError;
|
|
5
|
+
exports.reThrowWithHint = reThrowWithHint;
|
|
6
|
+
exports.isObject = isObject;
|
|
7
|
+
exports.newDefaultMap = newDefaultMap;
|
|
8
|
+
exports.arraysAreEqualsByPredicateFn = arraysAreEqualsByPredicateFn;
|
|
9
|
+
exports.visitReplace = visitReplace;
|
|
10
|
+
exports.read = read;
|
|
11
|
+
exports.arraysAreShallowlyEqual = arraysAreShallowlyEqual;
|
|
12
|
+
exports.arraysWithEntriesAreShallowlyEqual = arraysWithEntriesAreShallowlyEqual;
|
|
13
|
+
exports.classIsSubclassOf = classIsSubclassOf;
|
|
14
|
+
function throwError(e) {
|
|
15
|
+
if (e !== null && e instanceof Error) {
|
|
16
|
+
throw e;
|
|
17
|
+
}
|
|
18
|
+
throw new Error(e);
|
|
19
|
+
}
|
|
20
|
+
function reThrowWithHint(e, hint) {
|
|
21
|
+
try {
|
|
22
|
+
if (e instanceof Error) {
|
|
23
|
+
// Add hint to error:
|
|
24
|
+
e.message += `\n${hint}`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (x) {
|
|
28
|
+
}
|
|
29
|
+
throw e;
|
|
30
|
+
}
|
|
31
|
+
function isObject(value) {
|
|
32
|
+
return value !== null && typeof value === "object";
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A Map<K, Set<V>>. But automatically add a new Set if needed
|
|
36
|
+
*/
|
|
37
|
+
class MapSet {
|
|
38
|
+
constructor() {
|
|
39
|
+
this.map = new Map();
|
|
40
|
+
}
|
|
41
|
+
add(key, value) {
|
|
42
|
+
let set = this.map.get(key);
|
|
43
|
+
if (set === undefined) {
|
|
44
|
+
set = new Set();
|
|
45
|
+
this.map.set(key, set);
|
|
46
|
+
}
|
|
47
|
+
set.add(value);
|
|
48
|
+
}
|
|
49
|
+
delete(key, value) {
|
|
50
|
+
let set = this.map.get(key);
|
|
51
|
+
if (set !== undefined) {
|
|
52
|
+
set.delete(value);
|
|
53
|
+
if (set.size === 0) {
|
|
54
|
+
this.map.delete(key); // Clean up
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
get(key) {
|
|
59
|
+
return this.map.get(key);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @param key
|
|
63
|
+
* @return the set for the specified key (an empty one will be created if needed) on which you should call `add` or `delete` **immediately**, so no empty set is left there consuming memory.
|
|
64
|
+
* It is automatically cleaned up after the last delete
|
|
65
|
+
*/
|
|
66
|
+
get4use(key) {
|
|
67
|
+
const thisMapSet = this;
|
|
68
|
+
let set = this.map.get(key);
|
|
69
|
+
if (set === undefined) {
|
|
70
|
+
set = new class extends Set {
|
|
71
|
+
delete(value) {
|
|
72
|
+
const result = super.delete(value);
|
|
73
|
+
if (this.size === 0) {
|
|
74
|
+
thisMapSet.map.delete(key); // Clean up
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
add(value) {
|
|
79
|
+
if (thisMapSet.map.get(key) !== this) {
|
|
80
|
+
throw new Error("This set is invalid. You must add/delete immediately after calling get4modify");
|
|
81
|
+
}
|
|
82
|
+
return super.add(value);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
this.map.set(key, set);
|
|
86
|
+
}
|
|
87
|
+
return set;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.MapSet = MapSet;
|
|
91
|
+
/**
|
|
92
|
+
* This Map does not return empty values, so there's always a default value created
|
|
93
|
+
*/
|
|
94
|
+
class DefaultMap extends Map {
|
|
95
|
+
get(key) {
|
|
96
|
+
let result = super.get(key);
|
|
97
|
+
if (result === undefined) {
|
|
98
|
+
result = this.createDefaultValue();
|
|
99
|
+
this.set(key, result);
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.DefaultMap = DefaultMap;
|
|
105
|
+
/**
|
|
106
|
+
*
|
|
107
|
+
* @param createDefaultValueFn
|
|
108
|
+
* @returns a Map that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
109
|
+
*/
|
|
110
|
+
function newDefaultMap(createDefaultValueFn) {
|
|
111
|
+
return new class extends DefaultMap {
|
|
112
|
+
createDefaultValue() {
|
|
113
|
+
return createDefaultValueFn();
|
|
114
|
+
}
|
|
115
|
+
}();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* A WeakMap<K, Set<V>>. But automatically add a new Set if needed
|
|
119
|
+
*/
|
|
120
|
+
class WeakMapSet extends MapSet {
|
|
121
|
+
constructor() {
|
|
122
|
+
super(...arguments);
|
|
123
|
+
//@ts-ignore
|
|
124
|
+
this.map = new WeakMap();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.WeakMapSet = WeakMapSet;
|
|
128
|
+
function arraysAreEqualsByPredicateFn(a, b, equalsFn) {
|
|
129
|
+
if (a.length !== b.length) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
for (const k in a) {
|
|
133
|
+
if (!equalsFn(a[k], b[k])) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
function diagnosis_jsonPath(key) {
|
|
140
|
+
if (!Number.isNaN(Number(key))) {
|
|
141
|
+
return `[${key}]`;
|
|
142
|
+
}
|
|
143
|
+
return `.${key}`;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Usage:
|
|
147
|
+
* <pre><code>
|
|
148
|
+
* const result = visitReplace(target, (value, visitChilds, context) => {
|
|
149
|
+
* return value === 'needle' ? 'replaced' : visitChilds(value, context)
|
|
150
|
+
* });
|
|
151
|
+
* </code></pre>
|
|
152
|
+
*
|
|
153
|
+
* @param value
|
|
154
|
+
* @param visitor
|
|
155
|
+
* @param trackPath whether to pass on the context object. This hurts performance because the path is concatted every time, so use it only when needed. Setting this to "onError" re-executes the visitprelace with the concetxt when an error was thrown
|
|
156
|
+
*/
|
|
157
|
+
function visitReplace(value, visitor, trackPath = false) {
|
|
158
|
+
const visisitedObjects = new Set();
|
|
159
|
+
function visitChilds(value, context) {
|
|
160
|
+
if (value === null) {
|
|
161
|
+
return value;
|
|
162
|
+
}
|
|
163
|
+
else if (typeof value === "object") {
|
|
164
|
+
const obj = value;
|
|
165
|
+
if (visisitedObjects.has(obj)) {
|
|
166
|
+
return value; // don't iterate again
|
|
167
|
+
}
|
|
168
|
+
visisitedObjects.add(obj);
|
|
169
|
+
for (let k in obj) {
|
|
170
|
+
const keyInParent = k;
|
|
171
|
+
const childValue = obj[keyInParent];
|
|
172
|
+
let newValue = visitor(childValue, visitChilds, Object.assign(Object.assign({}, context), { parentObject: value, key: keyInParent, diagnosis_path: (context.diagnosis_path !== undefined ? `${context.diagnosis_path}${diagnosis_jsonPath(keyInParent)}` : undefined) }));
|
|
173
|
+
if (newValue !== childValue) { // Only if childValue really has changed. We don't want to interfer with setting a readonly property and trigger a proxy
|
|
174
|
+
// @ts-ignore
|
|
175
|
+
obj[keyInParent] = newValue;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return value;
|
|
180
|
+
}
|
|
181
|
+
if (trackPath === "onError") {
|
|
182
|
+
try {
|
|
183
|
+
return visitor(value, visitChilds, {}); // Fast try without context
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
return visitReplace(value, visitor, true); // Try again with context
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return visitor(value, visitChilds, { diagnosis_path: trackPath ? "" : undefined });
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Just do something the runtime can't optimize away
|
|
193
|
+
* @param value
|
|
194
|
+
*/
|
|
195
|
+
function read(value) {
|
|
196
|
+
if (("" + value) == "blaaxyxzzzsdf") {
|
|
197
|
+
throw new Error("should never get here");
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function arraysAreShallowlyEqual(a, b) {
|
|
201
|
+
if (a.length !== b.length) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
for (let i = 0; i < a.length; i++) {
|
|
205
|
+
if (a[i] !== b[i]) {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Like arraysAreShallowlyEqual but this time for an array of entries (tuple of 2 values) like from Map#entries()
|
|
213
|
+
* @param a
|
|
214
|
+
* @param b
|
|
215
|
+
*/
|
|
216
|
+
function arraysWithEntriesAreShallowlyEqual(a, b) {
|
|
217
|
+
if (a.length !== b.length) {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
for (let i = 0; i < a.length; i++) {
|
|
221
|
+
if (a[i][0] !== b[i][0]) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
if (a[i][1] !== b[i][1]) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
function classIsSubclassOf(clazz, superClass) {
|
|
231
|
+
var _a, _b;
|
|
232
|
+
do {
|
|
233
|
+
if (clazz === superClass) {
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
} while ((clazz = (_b = (_a = clazz.prototype) === null || _a === void 0 ? void 0 : _a.prototype) === null || _b === void 0 ? void 0 : _b.constructor) !== undefined);
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=Util.js.map
|
package/Util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Util.js","sourceRoot":"","sources":["Util.ts"],"names":[],"mappings":"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"}
|