watchable-promise 2.0.0 → 2.1.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/README.md +21 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +24 -8
- package/dist/index.js.map +2 -2
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -67,6 +67,27 @@ npm install watchable-promise
|
|
|
67
67
|
console.log(promise.value); // "foo"
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
+
- You can call `.resolve()` or `.reject()` on a `WatchablePromise` instance to resolve or reject it externally:
|
|
71
|
+
|
|
72
|
+
```javascript
|
|
73
|
+
import WatchablePromise from "watchable-promise";
|
|
74
|
+
|
|
75
|
+
// Resolving
|
|
76
|
+
const p1 = new WatchablePromise(resolve => {});
|
|
77
|
+
p1.resolve("foo");
|
|
78
|
+
const val = await p1;
|
|
79
|
+
console.log(val) // "foo"
|
|
80
|
+
|
|
81
|
+
// Rejecting
|
|
82
|
+
const p2 = new WatchablePromise((resolve, reject) => {});
|
|
83
|
+
p2.reject("bar");
|
|
84
|
+
try {
|
|
85
|
+
await p2;
|
|
86
|
+
} catch (err) {
|
|
87
|
+
console.log(err) // "bar"
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
70
91
|
## License
|
|
71
92
|
|
|
72
93
|
`watchable-promise` is released under the Apache 2.0 License. See the enclosed [`LICENSE`](./LICENSE) for details.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
declare class WatchablePromise<T> extends Promise<T> {
|
|
2
2
|
#private;
|
|
3
3
|
constructor(executor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void);
|
|
4
|
+
resolve(value: T): void;
|
|
5
|
+
reject(reason?: any): void;
|
|
4
6
|
get settled(): boolean;
|
|
5
|
-
get
|
|
7
|
+
get state(): "pending" | "fulfilled" | "rejected";
|
|
8
|
+
get value(): any;
|
|
6
9
|
static from<T>(existingPromise: Promise<T>): WatchablePromise<T>;
|
|
7
10
|
static withResolvers<T>(): {
|
|
8
11
|
promise: WatchablePromise<T>;
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
var WatchablePromise = class _WatchablePromise extends Promise {
|
|
3
3
|
#settled = false;
|
|
4
|
-
#
|
|
4
|
+
#state = "pending";
|
|
5
|
+
#value;
|
|
6
|
+
#resolve;
|
|
7
|
+
#reject;
|
|
5
8
|
constructor(executor) {
|
|
6
9
|
let resolve;
|
|
7
10
|
let reject;
|
|
@@ -9,23 +12,36 @@ var WatchablePromise = class _WatchablePromise extends Promise {
|
|
|
9
12
|
resolve = res;
|
|
10
13
|
reject = rej;
|
|
11
14
|
});
|
|
15
|
+
this.#resolve = resolve;
|
|
16
|
+
this.#reject = reject;
|
|
12
17
|
this.then(
|
|
13
|
-
() => {
|
|
14
|
-
this.#
|
|
18
|
+
(value) => {
|
|
19
|
+
this.#state = "fulfilled";
|
|
20
|
+
this.#value = value;
|
|
15
21
|
this.#settled = true;
|
|
16
22
|
},
|
|
17
|
-
() => {
|
|
18
|
-
this.#
|
|
23
|
+
(reason) => {
|
|
24
|
+
this.#state = "rejected";
|
|
25
|
+
this.#value = reason;
|
|
19
26
|
this.#settled = true;
|
|
20
27
|
}
|
|
21
28
|
);
|
|
22
|
-
executor(resolve, reject);
|
|
29
|
+
executor(this.#resolve, this.#reject);
|
|
30
|
+
}
|
|
31
|
+
resolve(value) {
|
|
32
|
+
this.#resolve(value);
|
|
33
|
+
}
|
|
34
|
+
reject(reason) {
|
|
35
|
+
this.#reject(reason);
|
|
23
36
|
}
|
|
24
37
|
get settled() {
|
|
25
38
|
return this.#settled;
|
|
26
39
|
}
|
|
27
|
-
get
|
|
28
|
-
return this.#
|
|
40
|
+
get state() {
|
|
41
|
+
return this.#state;
|
|
42
|
+
}
|
|
43
|
+
get value() {
|
|
44
|
+
return this.#value;
|
|
29
45
|
}
|
|
30
46
|
static from(existingPromise) {
|
|
31
47
|
return new _WatchablePromise((resolve, reject) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["class WatchablePromise<T> extends Promise<T> {\n #settled = false;\n #
|
|
5
|
-
"mappings": ";AAAA,IAAM,mBAAN,MAAM,0BAA4B,QAAW;AAAA,EAC3C,WAAW;AAAA,EACX,
|
|
4
|
+
"sourcesContent": ["class WatchablePromise<T> extends Promise<T> {\n #settled = false;\n #state: \"pending\" | \"fulfilled\" | \"rejected\" = \"pending\";\n #value: T | any;\n #resolve: (value: T | PromiseLike<T>) => void;\n #reject: (reason?: any) => void;\n\n constructor(\n executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void,\n ) => void,\n ) {\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: any) => void;\n\n super((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n // @ts-ignore\n this.#resolve = resolve;\n // @ts-ignore\n this.#reject = reject;\n\n this.then(\n (value) => {\n this.#state = \"fulfilled\";\n this.#value = value;\n this.#settled = true;\n },\n (reason) => {\n this.#state = \"rejected\";\n this.#value = reason;\n this.#settled = true;\n },\n );\n\n executor(this.#resolve, this.#reject);\n }\n\n resolve(value: T) {\n this.#resolve(value);\n }\n\n reject(reason?: any) {\n this.#reject(reason);\n }\n\n get settled() {\n return this.#settled;\n }\n\n get state() {\n return this.#state;\n }\n\n get value() {\n return this.#value;\n }\n\n static from<T>(existingPromise: Promise<T>): WatchablePromise<T> {\n return new WatchablePromise<T>((resolve, reject) => {\n existingPromise.then(resolve, reject);\n });\n }\n\n static withResolvers<T>() {\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: any) => void;\n const promise = new WatchablePromise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n // @ts-ignore\n return { promise, resolve, reject };\n }\n\n static get [Symbol.species]() {\n return Promise;\n }\n\n get [Symbol.toStringTag]() {\n return \"WatchablePromise\";\n }\n}\n\nexport default WatchablePromise;\n"],
|
|
5
|
+
"mappings": ";AAAA,IAAM,mBAAN,MAAM,0BAA4B,QAAW;AAAA,EAC3C,WAAW;AAAA,EACX,SAA+C;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YACE,UAIA;AACA,QAAI;AACJ,QAAI;AAEJ,UAAM,CAAC,KAAK,QAAQ;AAClB,gBAAU;AACV,eAAS;AAAA,IACX,CAAC;AAGD,SAAK,WAAW;AAEhB,SAAK,UAAU;AAEf,SAAK;AAAA,MACH,CAAC,UAAU;AACT,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,WAAW;AAAA,MAClB;AAAA,MACA,CAAC,WAAW;AACV,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,WAAW;AAAA,MAClB;AAAA,IACF;AAEA,aAAS,KAAK,UAAU,KAAK,OAAO;AAAA,EACtC;AAAA,EAEA,QAAQ,OAAU;AAChB,SAAK,SAAS,KAAK;AAAA,EACrB;AAAA,EAEA,OAAO,QAAc;AACnB,SAAK,QAAQ,MAAM;AAAA,EACrB;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,OAAO,KAAQ,iBAAkD;AAC/D,WAAO,IAAI,kBAAoB,CAAC,SAAS,WAAW;AAClD,sBAAgB,KAAK,SAAS,MAAM;AAAA,IACtC,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,gBAAmB;AACxB,QAAI;AACJ,QAAI;AACJ,UAAM,UAAU,IAAI,kBAAoB,CAAC,KAAK,QAAQ;AACpD,gBAAU;AACV,eAAS;AAAA,IACX,CAAC;AAED,WAAO,EAAE,SAAS,SAAS,OAAO;AAAA,EACpC;AAAA,EAEA,YAAY,OAAO,OAAO,IAAI;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,OAAO,WAAW,IAAI;AACzB,WAAO;AAAA,EACT;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "watchable-promise",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "A Promise whose state and value you can read",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -18,8 +18,7 @@
|
|
|
18
18
|
"start": "echo 'There is nothing to start. I think you may just want to run the tests instead' && exit 1",
|
|
19
19
|
"test": "vitest",
|
|
20
20
|
"test-once": "vitest run",
|
|
21
|
-
"prepack": "npm run require-pristine-tree && npm run test-once",
|
|
22
|
-
"prepublish": "npm run build",
|
|
21
|
+
"prepack": "npm run require-pristine-tree && npm run test-once && npm run build",
|
|
23
22
|
"preversion": "npm run require-pristine-tree && npm run test-once",
|
|
24
23
|
"prepare": "husky install",
|
|
25
24
|
"require-pristine-tree": "exit $(git status --porcelain | wc -l)"
|