@dxos/async 0.5.4-next.70d721e → 0.5.4
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/lib/browser/index.mjs +0 -14
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +0 -15
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/trigger.d.ts +1 -9
- package/dist/types/src/trigger.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/trigger.test.ts +2 -33
- package/src/trigger.ts +1 -16
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/async",
|
|
3
|
-
"version": "0.5.4
|
|
3
|
+
"version": "0.5.4",
|
|
4
4
|
"description": "Async utilities.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -18,12 +18,12 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"zen-observable": "^0.10.0",
|
|
20
20
|
"zen-push": "^0.3.1",
|
|
21
|
-
"@dxos/context": "0.5.4
|
|
22
|
-
"@dxos/
|
|
23
|
-
"@dxos/
|
|
24
|
-
"@dxos/
|
|
25
|
-
"@dxos/
|
|
26
|
-
"@dxos/util": "0.5.4
|
|
21
|
+
"@dxos/context": "0.5.4",
|
|
22
|
+
"@dxos/debug": "0.5.4",
|
|
23
|
+
"@dxos/invariant": "0.5.4",
|
|
24
|
+
"@dxos/log": "0.5.4",
|
|
25
|
+
"@dxos/node-std": "0.5.4",
|
|
26
|
+
"@dxos/util": "0.5.4"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/zen-observable": "^0.8.3"
|
package/src/trigger.test.ts
CHANGED
|
@@ -2,15 +2,12 @@
|
|
|
2
2
|
// Copyright 2020 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
6
|
-
import chaiAsPromised from 'chai-as-promised';
|
|
5
|
+
import { expect } from 'chai';
|
|
7
6
|
|
|
8
7
|
import { describe, test } from '@dxos/test';
|
|
9
8
|
|
|
10
9
|
import { sleep } from './timeout';
|
|
11
|
-
import { Trigger,
|
|
12
|
-
|
|
13
|
-
chai.use(chaiAsPromised);
|
|
10
|
+
import { Trigger, trigger } from './trigger';
|
|
14
11
|
|
|
15
12
|
describe('trigger', () => {
|
|
16
13
|
test('trigger', async () => {
|
|
@@ -30,32 +27,4 @@ describe('trigger', () => {
|
|
|
30
27
|
trigger.reset();
|
|
31
28
|
await sleep(10);
|
|
32
29
|
});
|
|
33
|
-
|
|
34
|
-
test('states are set correctly', async () => {
|
|
35
|
-
const trigger = new Trigger<string>();
|
|
36
|
-
|
|
37
|
-
expect(trigger.state).to.equal(TriggerState.WAITING);
|
|
38
|
-
|
|
39
|
-
{
|
|
40
|
-
const promise = trigger.wait();
|
|
41
|
-
trigger.wake('test');
|
|
42
|
-
expect(await promise).to.equal('test');
|
|
43
|
-
expect(trigger.state).to.equal(TriggerState.RESOLVED);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
{
|
|
47
|
-
trigger.reset();
|
|
48
|
-
expect(trigger.state).to.equal(TriggerState.WAITING);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
{
|
|
52
|
-
const error = new Error('Test error');
|
|
53
|
-
const promise = trigger.wait();
|
|
54
|
-
trigger.throw(error);
|
|
55
|
-
await expect(promise).to.be.rejectedWith(error);
|
|
56
|
-
expect(trigger.state).to.equal(TriggerState.REJECTED);
|
|
57
|
-
trigger.reset();
|
|
58
|
-
expect(trigger.state).to.equal(TriggerState.WAITING);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
30
|
});
|
package/src/trigger.ts
CHANGED
|
@@ -31,19 +31,12 @@ export type TriggerOptions = {
|
|
|
31
31
|
autoReset: boolean;
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
export enum TriggerState {
|
|
35
|
-
WAITING = 'WAITING',
|
|
36
|
-
RESOLVED = 'RESOLVED',
|
|
37
|
-
REJECTED = 'REJECTED',
|
|
38
|
-
}
|
|
39
|
-
|
|
40
34
|
/**
|
|
41
35
|
* Enables blocked listeners to be awakened with optional timeouts.
|
|
42
36
|
*
|
|
43
37
|
* Has two states:
|
|
44
38
|
* - WAITING: promise is in pending state and will be resolved once `wake()` is called.
|
|
45
|
-
* -
|
|
46
|
-
* - REJECTED: promise is rejected, and all calls to `wait()` return rejected promise.
|
|
39
|
+
* - READY: promise is already resolved, and all calls to `wait()` resolve immediately.
|
|
47
40
|
*
|
|
48
41
|
* Trigger starts in WAITING state initially.
|
|
49
42
|
* Use `reset()` to switch resolved trigger back to WAITING state.
|
|
@@ -52,16 +45,11 @@ export class Trigger<T = void> {
|
|
|
52
45
|
private _promise!: Promise<T>;
|
|
53
46
|
private _resolve!: (value: T | PromiseLike<T>) => void;
|
|
54
47
|
private _reject!: (error: Error) => void;
|
|
55
|
-
private _state: TriggerState = TriggerState.WAITING;
|
|
56
48
|
|
|
57
49
|
constructor(private _options: TriggerOptions = { autoReset: false }) {
|
|
58
50
|
this.reset();
|
|
59
51
|
}
|
|
60
52
|
|
|
61
|
-
get state() {
|
|
62
|
-
return this._state;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
53
|
/**
|
|
66
54
|
* Wait until wake is called, with optional timeout.
|
|
67
55
|
*/
|
|
@@ -78,7 +66,6 @@ export class Trigger<T = void> {
|
|
|
78
66
|
* NOOP if the trigger is already resolved.
|
|
79
67
|
*/
|
|
80
68
|
wake(value: T) {
|
|
81
|
-
this._state = TriggerState.RESOLVED;
|
|
82
69
|
this._resolve(value);
|
|
83
70
|
if (this._options.autoReset) {
|
|
84
71
|
return this.reset();
|
|
@@ -91,7 +78,6 @@ export class Trigger<T = void> {
|
|
|
91
78
|
* Reset promise (new waiters will wait).
|
|
92
79
|
*/
|
|
93
80
|
reset() {
|
|
94
|
-
this._state = TriggerState.WAITING;
|
|
95
81
|
this._promise = new Promise<T>((resolve, reject) => {
|
|
96
82
|
this._resolve = resolve;
|
|
97
83
|
this._reject = reject;
|
|
@@ -106,7 +92,6 @@ export class Trigger<T = void> {
|
|
|
106
92
|
* NOOP if the trigger is already resolved.
|
|
107
93
|
*/
|
|
108
94
|
throw(error: Error) {
|
|
109
|
-
this._state = TriggerState.REJECTED;
|
|
110
95
|
this._reject(error);
|
|
111
96
|
if (this._options.autoReset) {
|
|
112
97
|
return this.reset();
|