proxy-facades 1.2.9 → 1.4.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/Util.ts +35 -6
- package/dist/{browser → commonjs}/Util.d.ts +15 -2
- package/dist/commonjs/Util.d.ts.map +1 -0
- package/dist/{default → commonjs}/Util.js +31 -4
- package/dist/commonjs/Util.js.map +1 -0
- package/dist/commonjs/retsync.d.ts +53 -0
- package/dist/commonjs/retsync.d.ts.map +1 -0
- package/dist/commonjs/retsync.js +147 -0
- package/dist/commonjs/retsync.js.map +1 -0
- package/dist/{default → esm}/Util.d.ts +15 -2
- package/dist/esm/Util.d.ts.map +1 -0
- package/dist/{browser → esm}/Util.js +28 -3
- package/dist/esm/Util.js.map +1 -0
- package/dist/esm/retsync.d.ts +53 -0
- package/dist/esm/retsync.d.ts.map +1 -0
- package/dist/esm/retsync.js +139 -0
- package/dist/esm/retsync.js.map +1 -0
- package/package.json +9 -5
- package/readme.md +1 -1
- package/retsync.ts +171 -0
- package/dist/browser/Util.d.ts.map +0 -1
- package/dist/browser/Util.js.map +0 -1
- package/dist/default/Util.d.ts.map +0 -1
- package/dist/default/Util.js.map +0 -1
- package/index_esm.mjs +0 -46
- /package/dist/{browser → commonjs}/RecordedReadOnProxiedObjectExt.d.ts +0 -0
- /package/dist/{browser → commonjs}/RecordedReadOnProxiedObjectExt.d.ts.map +0 -0
- /package/dist/{default → commonjs}/RecordedReadOnProxiedObjectExt.js +0 -0
- /package/dist/{default → commonjs}/RecordedReadOnProxiedObjectExt.js.map +0 -0
- /package/dist/{browser → commonjs}/class-trackers/Array.d.ts +0 -0
- /package/dist/{browser → commonjs}/class-trackers/Array.d.ts.map +0 -0
- /package/dist/{default → commonjs}/class-trackers/Array.js +0 -0
- /package/dist/{default → commonjs}/class-trackers/Array.js.map +0 -0
- /package/dist/{browser → commonjs}/class-trackers/Iterator.d.ts +0 -0
- /package/dist/{browser → commonjs}/class-trackers/Iterator.d.ts.map +0 -0
- /package/dist/{default → commonjs}/class-trackers/Iterator.js +0 -0
- /package/dist/{default → commonjs}/class-trackers/Iterator.js.map +0 -0
- /package/dist/{browser → commonjs}/class-trackers/Map.d.ts +0 -0
- /package/dist/{browser → commonjs}/class-trackers/Map.d.ts.map +0 -0
- /package/dist/{default → commonjs}/class-trackers/Map.js +0 -0
- /package/dist/{default → commonjs}/class-trackers/Map.js.map +0 -0
- /package/dist/{browser → commonjs}/class-trackers/Set.d.ts +0 -0
- /package/dist/{browser → commonjs}/class-trackers/Set.d.ts.map +0 -0
- /package/dist/{default → commonjs}/class-trackers/Set.js +0 -0
- /package/dist/{default → commonjs}/class-trackers/Set.js.map +0 -0
- /package/dist/{browser → commonjs}/class-trackers/index.d.ts +0 -0
- /package/dist/{browser → commonjs}/class-trackers/index.d.ts.map +0 -0
- /package/dist/{default → commonjs}/class-trackers/index.js +0 -0
- /package/dist/{default → commonjs}/class-trackers/index.js.map +0 -0
- /package/dist/{browser → commonjs}/common.d.ts +0 -0
- /package/dist/{browser → commonjs}/common.d.ts.map +0 -0
- /package/dist/{default → commonjs}/common.js +0 -0
- /package/dist/{default → commonjs}/common.js.map +0 -0
- /package/dist/{browser → commonjs}/dev_generateEsRuntimeBehaviourCheckerCode.d.ts +0 -0
- /package/dist/{browser → commonjs}/dev_generateEsRuntimeBehaviourCheckerCode.d.ts.map +0 -0
- /package/dist/{browser → commonjs}/dev_generateEsRuntimeBehaviourCheckerCode.js +0 -0
- /package/dist/{browser → commonjs}/dev_generateEsRuntimeBehaviourCheckerCode.js.map +0 -0
- /package/dist/{browser → commonjs}/index.d.ts +0 -0
- /package/dist/{browser → commonjs}/index.d.ts.map +0 -0
- /package/dist/{default → commonjs}/index.js +0 -0
- /package/dist/{default → commonjs}/index.js.map +0 -0
- /package/dist/{browser → commonjs}/objectChangeTracking.d.ts +0 -0
- /package/dist/{browser → commonjs}/objectChangeTracking.d.ts.map +0 -0
- /package/dist/{default → commonjs}/objectChangeTracking.js +0 -0
- /package/dist/{default → commonjs}/objectChangeTracking.js.map +0 -0
- /package/dist/{browser → commonjs}/origChangeTracking.d.ts +0 -0
- /package/dist/{browser → commonjs}/origChangeTracking.d.ts.map +0 -0
- /package/dist/{default → commonjs}/origChangeTracking.js +0 -0
- /package/dist/{default → commonjs}/origChangeTracking.js.map +0 -0
- /package/dist/{browser → commonjs}/proxyFacade.d.ts +0 -0
- /package/dist/{browser → commonjs}/proxyFacade.d.ts.map +0 -0
- /package/dist/{default → commonjs}/proxyFacade.js +0 -0
- /package/dist/{default → commonjs}/proxyFacade.js.map +0 -0
- /package/dist/{browser → commonjs}/watchedProxyFacade.d.ts +0 -0
- /package/dist/{browser → commonjs}/watchedProxyFacade.d.ts.map +0 -0
- /package/dist/{default → commonjs}/watchedProxyFacade.js +0 -0
- /package/dist/{default → commonjs}/watchedProxyFacade.js.map +0 -0
- /package/dist/{default → esm}/RecordedReadOnProxiedObjectExt.d.ts +0 -0
- /package/dist/{default → esm}/RecordedReadOnProxiedObjectExt.d.ts.map +0 -0
- /package/dist/{browser → esm}/RecordedReadOnProxiedObjectExt.js +0 -0
- /package/dist/{browser → esm}/RecordedReadOnProxiedObjectExt.js.map +0 -0
- /package/dist/{default → esm}/class-trackers/Array.d.ts +0 -0
- /package/dist/{default → esm}/class-trackers/Array.d.ts.map +0 -0
- /package/dist/{browser → esm}/class-trackers/Array.js +0 -0
- /package/dist/{browser → esm}/class-trackers/Array.js.map +0 -0
- /package/dist/{default → esm}/class-trackers/Iterator.d.ts +0 -0
- /package/dist/{default → esm}/class-trackers/Iterator.d.ts.map +0 -0
- /package/dist/{browser → esm}/class-trackers/Iterator.js +0 -0
- /package/dist/{browser → esm}/class-trackers/Iterator.js.map +0 -0
- /package/dist/{default → esm}/class-trackers/Map.d.ts +0 -0
- /package/dist/{default → esm}/class-trackers/Map.d.ts.map +0 -0
- /package/dist/{browser → esm}/class-trackers/Map.js +0 -0
- /package/dist/{browser → esm}/class-trackers/Map.js.map +0 -0
- /package/dist/{default → esm}/class-trackers/Set.d.ts +0 -0
- /package/dist/{default → esm}/class-trackers/Set.d.ts.map +0 -0
- /package/dist/{browser → esm}/class-trackers/Set.js +0 -0
- /package/dist/{browser → esm}/class-trackers/Set.js.map +0 -0
- /package/dist/{default → esm}/class-trackers/index.d.ts +0 -0
- /package/dist/{default → esm}/class-trackers/index.d.ts.map +0 -0
- /package/dist/{browser → esm}/class-trackers/index.js +0 -0
- /package/dist/{browser → esm}/class-trackers/index.js.map +0 -0
- /package/dist/{default → esm}/common.d.ts +0 -0
- /package/dist/{default → esm}/common.d.ts.map +0 -0
- /package/dist/{browser → esm}/common.js +0 -0
- /package/dist/{browser → esm}/common.js.map +0 -0
- /package/dist/{default → esm}/dev_generateEsRuntimeBehaviourCheckerCode.d.ts +0 -0
- /package/dist/{default → esm}/dev_generateEsRuntimeBehaviourCheckerCode.d.ts.map +0 -0
- /package/dist/{default → esm}/dev_generateEsRuntimeBehaviourCheckerCode.js +0 -0
- /package/dist/{default → esm}/dev_generateEsRuntimeBehaviourCheckerCode.js.map +0 -0
- /package/dist/{default → esm}/index.d.ts +0 -0
- /package/dist/{default → esm}/index.d.ts.map +0 -0
- /package/dist/{browser → esm}/index.js +0 -0
- /package/dist/{browser → esm}/index.js.map +0 -0
- /package/dist/{default → esm}/objectChangeTracking.d.ts +0 -0
- /package/dist/{default → esm}/objectChangeTracking.d.ts.map +0 -0
- /package/dist/{browser → esm}/objectChangeTracking.js +0 -0
- /package/dist/{browser → esm}/objectChangeTracking.js.map +0 -0
- /package/dist/{default → esm}/origChangeTracking.d.ts +0 -0
- /package/dist/{default → esm}/origChangeTracking.d.ts.map +0 -0
- /package/dist/{browser → esm}/origChangeTracking.js +0 -0
- /package/dist/{browser → esm}/origChangeTracking.js.map +0 -0
- /package/dist/{default → esm}/proxyFacade.d.ts +0 -0
- /package/dist/{default → esm}/proxyFacade.d.ts.map +0 -0
- /package/dist/{browser → esm}/proxyFacade.js +0 -0
- /package/dist/{browser → esm}/proxyFacade.js.map +0 -0
- /package/dist/{default → esm}/watchedProxyFacade.d.ts +0 -0
- /package/dist/{default → esm}/watchedProxyFacade.d.ts.map +0 -0
- /package/dist/{browser → esm}/watchedProxyFacade.js +0 -0
- /package/dist/{browser → esm}/watchedProxyFacade.js.map +0 -0
package/Util.ts
CHANGED
|
@@ -86,12 +86,28 @@ export class MapSet<K, V> {
|
|
|
86
86
|
* This Map does not return empty values, so there's always a default value created
|
|
87
87
|
*/
|
|
88
88
|
export abstract class DefaultMap<K, V> extends Map<K,V>{
|
|
89
|
-
abstract createDefaultValue(): V;
|
|
89
|
+
abstract createDefaultValue(key: K): V;
|
|
90
90
|
|
|
91
91
|
get(key: K): V {
|
|
92
92
|
let result = super.get(key);
|
|
93
93
|
if(result === undefined) {
|
|
94
|
-
result = this.createDefaultValue();
|
|
94
|
+
result = this.createDefaultValue(key);
|
|
95
|
+
this.set(key, result);
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* This Map does not return empty values, so there's always a default value created
|
|
103
|
+
*/
|
|
104
|
+
export abstract class DefaultWeakMap<K extends Object, V> extends WeakMap<K,V>{
|
|
105
|
+
abstract createDefaultValue(key: K): V;
|
|
106
|
+
|
|
107
|
+
get(key: K): V {
|
|
108
|
+
let result = super.get(key);
|
|
109
|
+
if(result === undefined) {
|
|
110
|
+
result = this.createDefaultValue(key);
|
|
95
111
|
this.set(key, result);
|
|
96
112
|
}
|
|
97
113
|
return result;
|
|
@@ -103,11 +119,24 @@ export abstract class DefaultMap<K, V> extends Map<K,V>{
|
|
|
103
119
|
* @param createDefaultValueFn
|
|
104
120
|
* @returns a Map that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
105
121
|
*/
|
|
106
|
-
export function newDefaultMap<K,V>(createDefaultValueFn: () => V): DefaultMap<K, V> {
|
|
122
|
+
export function newDefaultMap<K,V>(createDefaultValueFn: (key: K) => V): DefaultMap<K, V> {
|
|
107
123
|
return new class extends DefaultMap<K, V> {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
124
|
+
createDefaultValue(key: K): V {
|
|
125
|
+
return createDefaultValueFn(key);
|
|
126
|
+
}
|
|
127
|
+
}()
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
*
|
|
132
|
+
* @param createDefaultValueFn
|
|
133
|
+
* @returns a WeakMap that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
134
|
+
*/
|
|
135
|
+
export function newDefaultWeakMap<K,V>(createDefaultValueFn: (key: K) => V): DefaultMap<K, V> {
|
|
136
|
+
return new class extends DefaultMap<K, V> {
|
|
137
|
+
createDefaultValue(key: K): V {
|
|
138
|
+
return createDefaultValueFn(key);
|
|
139
|
+
}
|
|
111
140
|
}()
|
|
112
141
|
}
|
|
113
142
|
|
|
@@ -21,7 +21,14 @@ export declare class MapSet<K, V> {
|
|
|
21
21
|
* This Map does not return empty values, so there's always a default value created
|
|
22
22
|
*/
|
|
23
23
|
export declare abstract class DefaultMap<K, V> extends Map<K, V> {
|
|
24
|
-
abstract createDefaultValue(): V;
|
|
24
|
+
abstract createDefaultValue(key: K): V;
|
|
25
|
+
get(key: K): V;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* This Map does not return empty values, so there's always a default value created
|
|
29
|
+
*/
|
|
30
|
+
export declare abstract class DefaultWeakMap<K extends Object, V> extends WeakMap<K, V> {
|
|
31
|
+
abstract createDefaultValue(key: K): V;
|
|
25
32
|
get(key: K): V;
|
|
26
33
|
}
|
|
27
34
|
/**
|
|
@@ -29,7 +36,13 @@ export declare abstract class DefaultMap<K, V> extends Map<K, V> {
|
|
|
29
36
|
* @param createDefaultValueFn
|
|
30
37
|
* @returns a Map that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
31
38
|
*/
|
|
32
|
-
export declare function newDefaultMap<K, V>(createDefaultValueFn: () => V): DefaultMap<K, V>;
|
|
39
|
+
export declare function newDefaultMap<K, V>(createDefaultValueFn: (key: K) => V): DefaultMap<K, V>;
|
|
40
|
+
/**
|
|
41
|
+
*
|
|
42
|
+
* @param createDefaultValueFn
|
|
43
|
+
* @returns a WeakMap that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
44
|
+
*/
|
|
45
|
+
export declare function newDefaultWeakMap<K, V>(createDefaultValueFn: (key: K) => V): DefaultMap<K, V>;
|
|
33
46
|
/**
|
|
34
47
|
* A WeakMap<K, Set<V>>. But automatically add a new Set if needed
|
|
35
48
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Util.d.ts","sourceRoot":"","sources":["../../Util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WeakMapSet = exports.DefaultMap = exports.MapSet = void 0;
|
|
3
|
+
exports.WeakMapSet = exports.DefaultWeakMap = exports.DefaultMap = exports.MapSet = void 0;
|
|
4
4
|
exports.throwError = throwError;
|
|
5
5
|
exports.reThrowWithHint = reThrowWithHint;
|
|
6
6
|
exports.isObject = isObject;
|
|
7
7
|
exports.newDefaultMap = newDefaultMap;
|
|
8
|
+
exports.newDefaultWeakMap = newDefaultWeakMap;
|
|
8
9
|
exports.arraysAreEqualsByPredicateFn = arraysAreEqualsByPredicateFn;
|
|
9
10
|
exports.visitReplace = visitReplace;
|
|
10
11
|
exports.read = read;
|
|
@@ -95,13 +96,27 @@ class DefaultMap extends Map {
|
|
|
95
96
|
get(key) {
|
|
96
97
|
let result = super.get(key);
|
|
97
98
|
if (result === undefined) {
|
|
98
|
-
result = this.createDefaultValue();
|
|
99
|
+
result = this.createDefaultValue(key);
|
|
99
100
|
this.set(key, result);
|
|
100
101
|
}
|
|
101
102
|
return result;
|
|
102
103
|
}
|
|
103
104
|
}
|
|
104
105
|
exports.DefaultMap = DefaultMap;
|
|
106
|
+
/**
|
|
107
|
+
* This Map does not return empty values, so there's always a default value created
|
|
108
|
+
*/
|
|
109
|
+
class DefaultWeakMap extends WeakMap {
|
|
110
|
+
get(key) {
|
|
111
|
+
let result = super.get(key);
|
|
112
|
+
if (result === undefined) {
|
|
113
|
+
result = this.createDefaultValue(key);
|
|
114
|
+
this.set(key, result);
|
|
115
|
+
}
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exports.DefaultWeakMap = DefaultWeakMap;
|
|
105
120
|
/**
|
|
106
121
|
*
|
|
107
122
|
* @param createDefaultValueFn
|
|
@@ -109,8 +124,20 @@ exports.DefaultMap = DefaultMap;
|
|
|
109
124
|
*/
|
|
110
125
|
function newDefaultMap(createDefaultValueFn) {
|
|
111
126
|
return new class extends DefaultMap {
|
|
112
|
-
createDefaultValue() {
|
|
113
|
-
return createDefaultValueFn();
|
|
127
|
+
createDefaultValue(key) {
|
|
128
|
+
return createDefaultValueFn(key);
|
|
129
|
+
}
|
|
130
|
+
}();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
*
|
|
134
|
+
* @param createDefaultValueFn
|
|
135
|
+
* @returns a WeakMap that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
136
|
+
*/
|
|
137
|
+
function newDefaultWeakMap(createDefaultValueFn) {
|
|
138
|
+
return new class extends DefaultMap {
|
|
139
|
+
createDefaultValue(key) {
|
|
140
|
+
return createDefaultValueFn(key);
|
|
114
141
|
}
|
|
115
142
|
}();
|
|
116
143
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Util.js","sourceRoot":"","sources":["../../Util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
type Retsync2promiseOptions = {
|
|
2
|
+
/**
|
|
3
|
+
* Whenever retsyncFn hits a promise2retsync. it is run again and checked, if it behaves fine and repeatable and hits that same promise again (saves it properly)
|
|
4
|
+
*/
|
|
5
|
+
checkSaved?: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare class Retsync2promiseCall {
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Global state. Shared with frameworks.
|
|
11
|
+
*/
|
|
12
|
+
export declare const _global: {
|
|
13
|
+
resolvedPromiseValues: WeakMap<Promise<any>, unknown>;
|
|
14
|
+
retsync2promiseCall?: Retsync2promiseCall;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Let's you run retsync code and wait, till it is finished.
|
|
18
|
+
* @param repeatableFn
|
|
19
|
+
* @param options
|
|
20
|
+
*/
|
|
21
|
+
export declare function retsync2promise<T>(repeatableFn: () => T, options?: Retsync2promiseOptions): Promise<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Makes a promise usable in retsync code.
|
|
24
|
+
* @param savedPromise You must save/fix the promise somewhere, so you reuse it the next time you encounter it.
|
|
25
|
+
*/
|
|
26
|
+
export declare function promise2retsync<T>(savedPromise: Promise<T>): T;
|
|
27
|
+
/**
|
|
28
|
+
* Makes async code usable in retsync code.
|
|
29
|
+
* <p>
|
|
30
|
+
* Because retsync code is repeatable. This call must be associated a certain **identifiable resource**, so we know if that resource is already at loading progress.
|
|
31
|
+
* Therefore, you have the idObj and idKey parameters. Example:
|
|
32
|
+
* <code>asyncResource2retsync( async() => {...load the avatar...}, myUser, "getAvatar");</code>
|
|
33
|
+
* So the User#getAvatar is, what uniquely identifies the loaderFn here.
|
|
34
|
+
* </p>
|
|
35
|
+
* @param loaderFn
|
|
36
|
+
* @param idObj object to associate this call to. undefined means globally and the idKey primitive value is the only key.
|
|
37
|
+
* @param idKey Additional primitive key under idObj.
|
|
38
|
+
*/
|
|
39
|
+
export declare function asyncResource2retsync<T>(loaderFn: () => Promise<T>, idObj: object | undefined, idKey?: (string | number)): T;
|
|
40
|
+
export declare class RetsyncWaitsForPromiseException extends Error {
|
|
41
|
+
promise: Promise<any>;
|
|
42
|
+
/**
|
|
43
|
+
* Overrides {@link Retsync2promiseOptions#checkSaved}
|
|
44
|
+
*/
|
|
45
|
+
checkSaved?: boolean;
|
|
46
|
+
constructor(promise: Promise<any>);
|
|
47
|
+
}
|
|
48
|
+
export declare function checkThatCallerHandlesRetsync(): void;
|
|
49
|
+
export {};
|
|
50
|
+
/**
|
|
51
|
+
* Makes a an async function usable in retsync code.
|
|
52
|
+
*/
|
|
53
|
+
//# sourceMappingURL=retsync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retsync.d.ts","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"AASA,KAAK,sBAAsB,GAAG;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,cAAM,mBAAmB;CAExB;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;0BAEM,mBAAmB;CAC5C,CAAA;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,CAAC,CAAC,CA0DhH;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAM9D;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAK,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,GAAC,MAAM,CAAC,GAAG,CAAC,CAoBzH;AAID,qBAAa,+BAAgC,SAAQ,KAAK;IACtD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;gBAET,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;CAIpC;AAED,wBAAgB,6BAA6B,SAI5C;;AAID;;GAEG"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Retsync means: retryable-synchronous.
|
|
3
|
+
// retsync code is synchronous code, which when deep inside, it needs to wait for some Promise, it makes the ancestor await it and re-run that code again.
|
|
4
|
+
// The "ancestor" is a retsync2promise call
|
|
5
|
+
// Semantics: Retsync code must be repeatable. It can change state, as long as that leads to the same result when repeated.
|
|
6
|
+
// It does not mean strictly deterministic (may be for while in the same sync block??) because resources that are fetched, can change over time. Therefore some inner user's retsync code might subscribe to change events and invalidate asyncResource2retsync's cached promises when there are such changes.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.RetsyncWaitsForPromiseException = exports._global = void 0;
|
|
9
|
+
exports.retsync2promise = retsync2promise;
|
|
10
|
+
exports.promise2retsync = promise2retsync;
|
|
11
|
+
exports.asyncResource2retsync = asyncResource2retsync;
|
|
12
|
+
exports.checkThatCallerHandlesRetsync = checkThatCallerHandlesRetsync;
|
|
13
|
+
const Util_1 = require("./Util");
|
|
14
|
+
class Retsync2promiseCall {
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Global state. Shared with frameworks.
|
|
18
|
+
*/
|
|
19
|
+
exports._global = new class {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.resolvedPromiseValues = new WeakMap();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Let's you run retsync code and wait, till it is finished.
|
|
26
|
+
* @param repeatableFn
|
|
27
|
+
* @param options
|
|
28
|
+
*/
|
|
29
|
+
async function retsync2promise(repeatableFn, options = {}) {
|
|
30
|
+
/**
|
|
31
|
+
* ...while indicating that it is being called
|
|
32
|
+
*/
|
|
33
|
+
function runRepeatableFn() {
|
|
34
|
+
const orig_retsync2promiseCall = exports._global.retsync2promiseCall;
|
|
35
|
+
try {
|
|
36
|
+
exports._global.retsync2promiseCall = new Retsync2promiseCall();
|
|
37
|
+
return repeatableFn();
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
exports._global.retsync2promiseCall = orig_retsync2promiseCall;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
while (true) {
|
|
44
|
+
try {
|
|
45
|
+
return runRepeatableFn();
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
if (e instanceof RetsyncWaitsForPromiseException) {
|
|
49
|
+
if (e.checkSaved || (e.checkSaved === undefined && options.checkSaved !== false)) {
|
|
50
|
+
const optionHint = `Hint: See also: Retsync2promiseOptions#checkSaved`;
|
|
51
|
+
// Check if repeatableFn is behaving in repeatable symantics and saves the promise
|
|
52
|
+
try {
|
|
53
|
+
runRepeatableFn();
|
|
54
|
+
throw new Error(`repeatableFn is not repeatable. On the first run, it was waiting for a Promise by calling promise2retsync (see cause). After a second immediate test run, it returned successful without such.\n${optionHint}`, { cause: e });
|
|
55
|
+
}
|
|
56
|
+
catch (eChecked) {
|
|
57
|
+
if (!(eChecked !== null && eChecked instanceof RetsyncWaitsForPromiseException)) {
|
|
58
|
+
throw new Error(`repeatableFn is not repeatable. On the first run, it was waiting for a Promise by calling promise2retsync. After a second immediate test run, it threw.\n ${optionHint}\n First run's stack: \n${e.stack}\n 2nd run's stack: See cause`, { cause: eChecked });
|
|
59
|
+
}
|
|
60
|
+
eChecked.promise.then().catch(); // Make sure, that promise is caught once, to prevent unhandledRejections, just because of our checking functionality.
|
|
61
|
+
if (fixStack(eChecked.stack) !== fixStack(e.stack)) {
|
|
62
|
+
throw new Error(`repeatableFn is not repeatable. On the first run, it was waiting for a Promise by calling promise2retsync. After a second immediate test run, it behaved diffently.\n ${optionHint}\n First run's stack: \n${e.stack}\n 2nd run's stack: See cause`, { cause: eChecked });
|
|
63
|
+
}
|
|
64
|
+
if (eChecked.promise !== e.promise) {
|
|
65
|
+
e.message = `The savedPromise was not saved = you provided a different instance on a second run,... \n ${optionHint}`, { cause: new Error("...or repeatableFn does not behave repeatable") };
|
|
66
|
+
throw e;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports._global.resolvedPromiseValues.set(e.promise, await e.promise);
|
|
71
|
+
// Try again. Now it will hit the resolved value
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
throw e;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* removes the retsync2promise lines. Cause we call repeatableFn from multiple lines here
|
|
80
|
+
* @param stack
|
|
81
|
+
*/
|
|
82
|
+
function fixStack(stack) {
|
|
83
|
+
return stack === null || stack === void 0 ? void 0 : stack.replaceAll(/^.*retsync2promise.*$/gm, "");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Makes a promise usable in retsync code.
|
|
88
|
+
* @param savedPromise You must save/fix the promise somewhere, so you reuse it the next time you encounter it.
|
|
89
|
+
*/
|
|
90
|
+
function promise2retsync(savedPromise) {
|
|
91
|
+
if (exports._global.resolvedPromiseValues.has(savedPromise)) {
|
|
92
|
+
return exports._global.resolvedPromiseValues.get(savedPromise);
|
|
93
|
+
}
|
|
94
|
+
throw new RetsyncWaitsForPromiseException(savedPromise);
|
|
95
|
+
}
|
|
96
|
+
const globalObj = {};
|
|
97
|
+
const resourcePromises = (0, Util_1.newDefaultWeakMap)((key) => new Map());
|
|
98
|
+
/**
|
|
99
|
+
* Makes async code usable in retsync code.
|
|
100
|
+
* <p>
|
|
101
|
+
* Because retsync code is repeatable. This call must be associated a certain **identifiable resource**, so we know if that resource is already at loading progress.
|
|
102
|
+
* Therefore, you have the idObj and idKey parameters. Example:
|
|
103
|
+
* <code>asyncResource2retsync( async() => {...load the avatar...}, myUser, "getAvatar");</code>
|
|
104
|
+
* So the User#getAvatar is, what uniquely identifies the loaderFn here.
|
|
105
|
+
* </p>
|
|
106
|
+
* @param loaderFn
|
|
107
|
+
* @param idObj object to associate this call to. undefined means globally and the idKey primitive value is the only key.
|
|
108
|
+
* @param idKey Additional primitive key under idObj.
|
|
109
|
+
*/
|
|
110
|
+
function asyncResource2retsync(loaderFn, idObj, idKey) {
|
|
111
|
+
idObj = idObj || globalObj;
|
|
112
|
+
const promisesForIdObj = resourcePromises.get(idObj);
|
|
113
|
+
let promise = promisesForIdObj.get(idKey);
|
|
114
|
+
if (!promise) {
|
|
115
|
+
promise = loaderFn();
|
|
116
|
+
promisesForIdObj.set(idKey, promise);
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
return promise2retsync(promise);
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
// Flag as no-check-needed to save time (it's not necessary):
|
|
123
|
+
if (e instanceof RetsyncWaitsForPromiseException) {
|
|
124
|
+
e.checkSaved = false;
|
|
125
|
+
}
|
|
126
|
+
throw e;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
class RetsyncWaitsForPromiseException extends Error {
|
|
130
|
+
constructor(promise) {
|
|
131
|
+
super("Some retsync style code (see call stack / caller of promise2retsync) wants to await an async operation. To make this possible, you need to wrapt it at some ancestor caller level with retsync2promise. I.e. 'const result = await retsync2promise(() => {...your **retryable*** - synchronous code...}});");
|
|
132
|
+
this.promise = promise;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.RetsyncWaitsForPromiseException = RetsyncWaitsForPromiseException;
|
|
136
|
+
function checkThatCallerHandlesRetsync() {
|
|
137
|
+
if (!exports._global.retsync2promiseCall) {
|
|
138
|
+
throw new Error("The method, you are calling uses retsync code and needs to be wrapped at some ancestor caller level with retsync2promise. I.e. 'const result = await retsync2promise(() => {...call the function that (deep inside) uses **retryable*** - synchronous code...}});");
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Makes a an async function usable in retsync code.
|
|
143
|
+
*/
|
|
144
|
+
//export function asyncFn2retsync<T>(asyncFn: () => Promise<T>): T {
|
|
145
|
+
// The call must be re-identified. It's only possible, when all reads were recorded, like with react-deepwatch. See react-deepwatch.txt
|
|
146
|
+
//}
|
|
147
|
+
//# sourceMappingURL=retsync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retsync.js","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,14 @@ export declare class MapSet<K, V> {
|
|
|
21
21
|
* This Map does not return empty values, so there's always a default value created
|
|
22
22
|
*/
|
|
23
23
|
export declare abstract class DefaultMap<K, V> extends Map<K, V> {
|
|
24
|
-
abstract createDefaultValue(): V;
|
|
24
|
+
abstract createDefaultValue(key: K): V;
|
|
25
|
+
get(key: K): V;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* This Map does not return empty values, so there's always a default value created
|
|
29
|
+
*/
|
|
30
|
+
export declare abstract class DefaultWeakMap<K extends Object, V> extends WeakMap<K, V> {
|
|
31
|
+
abstract createDefaultValue(key: K): V;
|
|
25
32
|
get(key: K): V;
|
|
26
33
|
}
|
|
27
34
|
/**
|
|
@@ -29,7 +36,13 @@ export declare abstract class DefaultMap<K, V> extends Map<K, V> {
|
|
|
29
36
|
* @param createDefaultValueFn
|
|
30
37
|
* @returns a Map that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
31
38
|
*/
|
|
32
|
-
export declare function newDefaultMap<K, V>(createDefaultValueFn: () => V): DefaultMap<K, V>;
|
|
39
|
+
export declare function newDefaultMap<K, V>(createDefaultValueFn: (key: K) => V): DefaultMap<K, V>;
|
|
40
|
+
/**
|
|
41
|
+
*
|
|
42
|
+
* @param createDefaultValueFn
|
|
43
|
+
* @returns a WeakMap that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
44
|
+
*/
|
|
45
|
+
export declare function newDefaultWeakMap<K, V>(createDefaultValueFn: (key: K) => V): DefaultMap<K, V>;
|
|
33
46
|
/**
|
|
34
47
|
* A WeakMap<K, Set<V>>. But automatically add a new Set if needed
|
|
35
48
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Util.d.ts","sourceRoot":"","sources":["../../Util.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,7 +81,20 @@ export class DefaultMap extends Map {
|
|
|
81
81
|
get(key) {
|
|
82
82
|
let result = super.get(key);
|
|
83
83
|
if (result === undefined) {
|
|
84
|
-
result = this.createDefaultValue();
|
|
84
|
+
result = this.createDefaultValue(key);
|
|
85
|
+
this.set(key, result);
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* This Map does not return empty values, so there's always a default value created
|
|
92
|
+
*/
|
|
93
|
+
export class DefaultWeakMap extends WeakMap {
|
|
94
|
+
get(key) {
|
|
95
|
+
let result = super.get(key);
|
|
96
|
+
if (result === undefined) {
|
|
97
|
+
result = this.createDefaultValue(key);
|
|
85
98
|
this.set(key, result);
|
|
86
99
|
}
|
|
87
100
|
return result;
|
|
@@ -94,8 +107,20 @@ export class DefaultMap extends Map {
|
|
|
94
107
|
*/
|
|
95
108
|
export function newDefaultMap(createDefaultValueFn) {
|
|
96
109
|
return new class extends DefaultMap {
|
|
97
|
-
createDefaultValue() {
|
|
98
|
-
return createDefaultValueFn();
|
|
110
|
+
createDefaultValue(key) {
|
|
111
|
+
return createDefaultValueFn(key);
|
|
112
|
+
}
|
|
113
|
+
}();
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
*
|
|
117
|
+
* @param createDefaultValueFn
|
|
118
|
+
* @returns a WeakMap that creates and inserts a default value when that value does not exist. So the #get method always returns something.
|
|
119
|
+
*/
|
|
120
|
+
export function newDefaultWeakMap(createDefaultValueFn) {
|
|
121
|
+
return new class extends DefaultMap {
|
|
122
|
+
createDefaultValue(key) {
|
|
123
|
+
return createDefaultValueFn(key);
|
|
99
124
|
}
|
|
100
125
|
}();
|
|
101
126
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Util.js","sourceRoot":"","sources":["../../Util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
type Retsync2promiseOptions = {
|
|
2
|
+
/**
|
|
3
|
+
* Whenever retsyncFn hits a promise2retsync. it is run again and checked, if it behaves fine and repeatable and hits that same promise again (saves it properly)
|
|
4
|
+
*/
|
|
5
|
+
checkSaved?: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare class Retsync2promiseCall {
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Global state. Shared with frameworks.
|
|
11
|
+
*/
|
|
12
|
+
export declare const _global: {
|
|
13
|
+
resolvedPromiseValues: WeakMap<Promise<any>, unknown>;
|
|
14
|
+
retsync2promiseCall?: Retsync2promiseCall;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Let's you run retsync code and wait, till it is finished.
|
|
18
|
+
* @param repeatableFn
|
|
19
|
+
* @param options
|
|
20
|
+
*/
|
|
21
|
+
export declare function retsync2promise<T>(repeatableFn: () => T, options?: Retsync2promiseOptions): Promise<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Makes a promise usable in retsync code.
|
|
24
|
+
* @param savedPromise You must save/fix the promise somewhere, so you reuse it the next time you encounter it.
|
|
25
|
+
*/
|
|
26
|
+
export declare function promise2retsync<T>(savedPromise: Promise<T>): T;
|
|
27
|
+
/**
|
|
28
|
+
* Makes async code usable in retsync code.
|
|
29
|
+
* <p>
|
|
30
|
+
* Because retsync code is repeatable. This call must be associated a certain **identifiable resource**, so we know if that resource is already at loading progress.
|
|
31
|
+
* Therefore, you have the idObj and idKey parameters. Example:
|
|
32
|
+
* <code>asyncResource2retsync( async() => {...load the avatar...}, myUser, "getAvatar");</code>
|
|
33
|
+
* So the User#getAvatar is, what uniquely identifies the loaderFn here.
|
|
34
|
+
* </p>
|
|
35
|
+
* @param loaderFn
|
|
36
|
+
* @param idObj object to associate this call to. undefined means globally and the idKey primitive value is the only key.
|
|
37
|
+
* @param idKey Additional primitive key under idObj.
|
|
38
|
+
*/
|
|
39
|
+
export declare function asyncResource2retsync<T>(loaderFn: () => Promise<T>, idObj: object | undefined, idKey?: (string | number)): T;
|
|
40
|
+
export declare class RetsyncWaitsForPromiseException extends Error {
|
|
41
|
+
promise: Promise<any>;
|
|
42
|
+
/**
|
|
43
|
+
* Overrides {@link Retsync2promiseOptions#checkSaved}
|
|
44
|
+
*/
|
|
45
|
+
checkSaved?: boolean;
|
|
46
|
+
constructor(promise: Promise<any>);
|
|
47
|
+
}
|
|
48
|
+
export declare function checkThatCallerHandlesRetsync(): void;
|
|
49
|
+
export {};
|
|
50
|
+
/**
|
|
51
|
+
* Makes a an async function usable in retsync code.
|
|
52
|
+
*/
|
|
53
|
+
//# sourceMappingURL=retsync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retsync.d.ts","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"AASA,KAAK,sBAAsB,GAAG;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,cAAM,mBAAmB;CAExB;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;0BAEM,mBAAmB;CAC5C,CAAA;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,CAAC,CAAC,CA0DhH;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAM9D;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAK,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,GAAC,MAAM,CAAC,GAAG,CAAC,CAoBzH;AAID,qBAAa,+BAAgC,SAAQ,KAAK;IACtD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;gBAET,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;CAIpC;AAED,wBAAgB,6BAA6B,SAI5C;;AAID;;GAEG"}
|