proxy-facades 1.3.0 → 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/dist/commonjs/retsync.d.ts +9 -0
- package/dist/commonjs/retsync.d.ts.map +1 -1
- package/dist/commonjs/retsync.js +19 -11
- package/dist/commonjs/retsync.js.map +1 -1
- package/dist/esm/retsync.d.ts +9 -0
- package/dist/esm/retsync.d.ts.map +1 -1
- package/dist/esm/retsync.js +18 -10
- package/dist/esm/retsync.js.map +1 -1
- package/package.json +1 -1
- package/retsync.ts +19 -10
|
@@ -4,6 +4,15 @@ type Retsync2promiseOptions = {
|
|
|
4
4
|
*/
|
|
5
5
|
checkSaved?: boolean;
|
|
6
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
|
+
};
|
|
7
16
|
/**
|
|
8
17
|
* Let's you run retsync code and wait, till it is finished.
|
|
9
18
|
* @param repeatableFn
|
|
@@ -1 +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;
|
|
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"}
|
package/dist/commonjs/retsync.js
CHANGED
|
@@ -5,14 +5,22 @@
|
|
|
5
5
|
// Semantics: Retsync code must be repeatable. It can change state, as long as that leads to the same result when repeated.
|
|
6
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
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.RetsyncWaitsForPromiseException = void 0;
|
|
8
|
+
exports.RetsyncWaitsForPromiseException = exports._global = void 0;
|
|
9
9
|
exports.retsync2promise = retsync2promise;
|
|
10
10
|
exports.promise2retsync = promise2retsync;
|
|
11
11
|
exports.asyncResource2retsync = asyncResource2retsync;
|
|
12
12
|
exports.checkThatCallerHandlesRetsync = checkThatCallerHandlesRetsync;
|
|
13
13
|
const Util_1 = require("./Util");
|
|
14
|
-
|
|
15
|
-
|
|
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
|
+
};
|
|
16
24
|
/**
|
|
17
25
|
* Let's you run retsync code and wait, till it is finished.
|
|
18
26
|
* @param repeatableFn
|
|
@@ -20,16 +28,16 @@ let callerHandlesRetsync = false;
|
|
|
20
28
|
*/
|
|
21
29
|
async function retsync2promise(repeatableFn, options = {}) {
|
|
22
30
|
/**
|
|
23
|
-
* ...while
|
|
31
|
+
* ...while indicating that it is being called
|
|
24
32
|
*/
|
|
25
33
|
function runRepeatableFn() {
|
|
26
|
-
const
|
|
34
|
+
const orig_retsync2promiseCall = exports._global.retsync2promiseCall;
|
|
27
35
|
try {
|
|
28
|
-
|
|
36
|
+
exports._global.retsync2promiseCall = new Retsync2promiseCall();
|
|
29
37
|
return repeatableFn();
|
|
30
38
|
}
|
|
31
39
|
finally {
|
|
32
|
-
|
|
40
|
+
exports._global.retsync2promiseCall = orig_retsync2promiseCall;
|
|
33
41
|
}
|
|
34
42
|
}
|
|
35
43
|
while (true) {
|
|
@@ -59,7 +67,7 @@ async function retsync2promise(repeatableFn, options = {}) {
|
|
|
59
67
|
}
|
|
60
68
|
}
|
|
61
69
|
}
|
|
62
|
-
resolvedPromiseValues.set(e.promise, await e.promise);
|
|
70
|
+
exports._global.resolvedPromiseValues.set(e.promise, await e.promise);
|
|
63
71
|
// Try again. Now it will hit the resolved value
|
|
64
72
|
}
|
|
65
73
|
else {
|
|
@@ -80,8 +88,8 @@ async function retsync2promise(repeatableFn, options = {}) {
|
|
|
80
88
|
* @param savedPromise You must save/fix the promise somewhere, so you reuse it the next time you encounter it.
|
|
81
89
|
*/
|
|
82
90
|
function promise2retsync(savedPromise) {
|
|
83
|
-
if (resolvedPromiseValues.has(savedPromise)) {
|
|
84
|
-
return resolvedPromiseValues.get(savedPromise);
|
|
91
|
+
if (exports._global.resolvedPromiseValues.has(savedPromise)) {
|
|
92
|
+
return exports._global.resolvedPromiseValues.get(savedPromise);
|
|
85
93
|
}
|
|
86
94
|
throw new RetsyncWaitsForPromiseException(savedPromise);
|
|
87
95
|
}
|
|
@@ -126,7 +134,7 @@ class RetsyncWaitsForPromiseException extends Error {
|
|
|
126
134
|
}
|
|
127
135
|
exports.RetsyncWaitsForPromiseException = RetsyncWaitsForPromiseException;
|
|
128
136
|
function checkThatCallerHandlesRetsync() {
|
|
129
|
-
if (!
|
|
137
|
+
if (!exports._global.retsync2promiseCall) {
|
|
130
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...}});");
|
|
131
139
|
}
|
|
132
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retsync.js","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,0JAA0J;AAC1J,2CAA2C;AAC3C,2HAA2H;AAC3H,8SAA8S;;;
|
|
1
|
+
{"version":3,"file":"retsync.js","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/retsync.d.ts
CHANGED
|
@@ -4,6 +4,15 @@ type Retsync2promiseOptions = {
|
|
|
4
4
|
*/
|
|
5
5
|
checkSaved?: boolean;
|
|
6
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
|
+
};
|
|
7
16
|
/**
|
|
8
17
|
* Let's you run retsync code and wait, till it is finished.
|
|
9
18
|
* @param repeatableFn
|
|
@@ -1 +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;
|
|
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"}
|
package/dist/esm/retsync.js
CHANGED
|
@@ -4,8 +4,16 @@
|
|
|
4
4
|
// Semantics: Retsync code must be repeatable. It can change state, as long as that leads to the same result when repeated.
|
|
5
5
|
// 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.
|
|
6
6
|
import { newDefaultWeakMap } from "./Util";
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
class Retsync2promiseCall {
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Global state. Shared with frameworks.
|
|
11
|
+
*/
|
|
12
|
+
export const _global = new class {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.resolvedPromiseValues = new WeakMap();
|
|
15
|
+
}
|
|
16
|
+
};
|
|
9
17
|
/**
|
|
10
18
|
* Let's you run retsync code and wait, till it is finished.
|
|
11
19
|
* @param repeatableFn
|
|
@@ -13,16 +21,16 @@ let callerHandlesRetsync = false;
|
|
|
13
21
|
*/
|
|
14
22
|
export async function retsync2promise(repeatableFn, options = {}) {
|
|
15
23
|
/**
|
|
16
|
-
* ...while
|
|
24
|
+
* ...while indicating that it is being called
|
|
17
25
|
*/
|
|
18
26
|
function runRepeatableFn() {
|
|
19
|
-
const
|
|
27
|
+
const orig_retsync2promiseCall = _global.retsync2promiseCall;
|
|
20
28
|
try {
|
|
21
|
-
|
|
29
|
+
_global.retsync2promiseCall = new Retsync2promiseCall();
|
|
22
30
|
return repeatableFn();
|
|
23
31
|
}
|
|
24
32
|
finally {
|
|
25
|
-
|
|
33
|
+
_global.retsync2promiseCall = orig_retsync2promiseCall;
|
|
26
34
|
}
|
|
27
35
|
}
|
|
28
36
|
while (true) {
|
|
@@ -52,7 +60,7 @@ export async function retsync2promise(repeatableFn, options = {}) {
|
|
|
52
60
|
}
|
|
53
61
|
}
|
|
54
62
|
}
|
|
55
|
-
resolvedPromiseValues.set(e.promise, await e.promise);
|
|
63
|
+
_global.resolvedPromiseValues.set(e.promise, await e.promise);
|
|
56
64
|
// Try again. Now it will hit the resolved value
|
|
57
65
|
}
|
|
58
66
|
else {
|
|
@@ -73,8 +81,8 @@ export async function retsync2promise(repeatableFn, options = {}) {
|
|
|
73
81
|
* @param savedPromise You must save/fix the promise somewhere, so you reuse it the next time you encounter it.
|
|
74
82
|
*/
|
|
75
83
|
export function promise2retsync(savedPromise) {
|
|
76
|
-
if (resolvedPromiseValues.has(savedPromise)) {
|
|
77
|
-
return resolvedPromiseValues.get(savedPromise);
|
|
84
|
+
if (_global.resolvedPromiseValues.has(savedPromise)) {
|
|
85
|
+
return _global.resolvedPromiseValues.get(savedPromise);
|
|
78
86
|
}
|
|
79
87
|
throw new RetsyncWaitsForPromiseException(savedPromise);
|
|
80
88
|
}
|
|
@@ -118,7 +126,7 @@ export class RetsyncWaitsForPromiseException extends Error {
|
|
|
118
126
|
}
|
|
119
127
|
}
|
|
120
128
|
export function checkThatCallerHandlesRetsync() {
|
|
121
|
-
if (!
|
|
129
|
+
if (!_global.retsync2promiseCall) {
|
|
122
130
|
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...}});");
|
|
123
131
|
}
|
|
124
132
|
}
|
package/dist/esm/retsync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retsync.js","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,0JAA0J;AAC1J,2CAA2C;AAC3C,2HAA2H;AAC3H,8SAA8S;AAG9S,OAAO,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AASzC,MAAM,
|
|
1
|
+
{"version":3,"file":"retsync.js","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/retsync.ts
CHANGED
|
@@ -14,9 +14,18 @@ type Retsync2promiseOptions = {
|
|
|
14
14
|
checkSaved?: boolean
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
class Retsync2promiseCall {
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Global state. Shared with frameworks.
|
|
23
|
+
*/
|
|
24
|
+
export const _global = new class {
|
|
25
|
+
resolvedPromiseValues = new WeakMap<Promise<any>, unknown>();
|
|
26
|
+
retsync2promiseCall?: Retsync2promiseCall;
|
|
27
|
+
}
|
|
18
28
|
|
|
19
|
-
let callerHandlesRetsync = false
|
|
20
29
|
/**
|
|
21
30
|
* Let's you run retsync code and wait, till it is finished.
|
|
22
31
|
* @param repeatableFn
|
|
@@ -24,16 +33,16 @@ let callerHandlesRetsync = false
|
|
|
24
33
|
*/
|
|
25
34
|
export async function retsync2promise<T>(repeatableFn: () => T, options: Retsync2promiseOptions = {}): Promise<T> {
|
|
26
35
|
/**
|
|
27
|
-
* ...while
|
|
36
|
+
* ...while indicating that it is being called
|
|
28
37
|
*/
|
|
29
38
|
function runRepeatableFn() {
|
|
30
|
-
const
|
|
39
|
+
const orig_retsync2promiseCall = _global.retsync2promiseCall;
|
|
31
40
|
try {
|
|
32
|
-
|
|
41
|
+
_global.retsync2promiseCall = new Retsync2promiseCall();
|
|
33
42
|
return repeatableFn();
|
|
34
43
|
}
|
|
35
44
|
finally {
|
|
36
|
-
|
|
45
|
+
_global.retsync2promiseCall = orig_retsync2promiseCall;
|
|
37
46
|
}
|
|
38
47
|
}
|
|
39
48
|
|
|
@@ -65,7 +74,7 @@ export async function retsync2promise<T>(repeatableFn: () => T, options: Retsync
|
|
|
65
74
|
}
|
|
66
75
|
}
|
|
67
76
|
|
|
68
|
-
resolvedPromiseValues.set(e.promise, await e.promise);
|
|
77
|
+
_global.resolvedPromiseValues.set(e.promise, await e.promise);
|
|
69
78
|
// Try again. Now it will hit the resolved value
|
|
70
79
|
} else {
|
|
71
80
|
throw e;
|
|
@@ -87,8 +96,8 @@ export async function retsync2promise<T>(repeatableFn: () => T, options: Retsync
|
|
|
87
96
|
* @param savedPromise You must save/fix the promise somewhere, so you reuse it the next time you encounter it.
|
|
88
97
|
*/
|
|
89
98
|
export function promise2retsync<T>(savedPromise: Promise<T>): T {
|
|
90
|
-
if(resolvedPromiseValues.has(savedPromise)) {
|
|
91
|
-
return resolvedPromiseValues.get(savedPromise) as T;
|
|
99
|
+
if(_global.resolvedPromiseValues.has(savedPromise)) {
|
|
100
|
+
return _global.resolvedPromiseValues.get(savedPromise) as T;
|
|
92
101
|
}
|
|
93
102
|
|
|
94
103
|
throw new RetsyncWaitsForPromiseException(savedPromise)
|
|
@@ -147,7 +156,7 @@ export class RetsyncWaitsForPromiseException extends Error {
|
|
|
147
156
|
}
|
|
148
157
|
|
|
149
158
|
export function checkThatCallerHandlesRetsync() {
|
|
150
|
-
if(!
|
|
159
|
+
if(!_global.retsync2promiseCall) {
|
|
151
160
|
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...}});");
|
|
152
161
|
}
|
|
153
162
|
}
|