@furystack/utils 2.0.4 → 3.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/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/observable-value.js +11 -0
- package/dist/observable-value.js.map +1 -1
- package/dist/observable-value.spec.js +10 -0
- package/dist/observable-value.spec.js.map +1 -1
- package/dist/sleep-async.js +0 -1
- package/dist/sleep-async.js.map +1 -1
- package/package.json +6 -6
- package/src/observable-value.spec.ts +12 -0
- package/src/observable-value.ts +13 -0
- package/src/sleep-async.ts +0 -1
- package/{dist → types}/debounce.d.ts +0 -0
- package/{dist → types}/debounce.d.ts.map +0 -0
- package/{dist → types}/debounce.spec.d.ts +0 -0
- package/{dist → types}/debounce.spec.d.ts.map +0 -0
- package/{dist → types}/deep-merge.d.ts +0 -0
- package/{dist → types}/deep-merge.d.ts.map +0 -0
- package/{dist → types}/deep-merge.spec.d.ts +0 -0
- package/{dist → types}/deep-merge.spec.d.ts.map +0 -0
- package/{dist → types}/disposable.d.ts +0 -0
- package/{dist → types}/disposable.d.ts.map +0 -0
- package/{dist → types}/disposable.spec.d.ts +0 -0
- package/{dist → types}/disposable.spec.d.ts.map +0 -0
- package/{dist → types}/index.d.ts +0 -0
- package/{dist → types}/index.d.ts.map +0 -0
- package/{dist → types}/observable-value.d.ts +2 -0
- package/types/observable-value.d.ts.map +1 -0
- package/{dist → types}/observable-value.spec.d.ts +0 -0
- package/{dist → types}/observable-value.spec.d.ts.map +1 -1
- package/{dist → types}/path-helper.d.ts +0 -0
- package/{dist → types}/path-helper.d.ts.map +0 -0
- package/{dist → types}/path-helper.spec.d.ts +0 -0
- package/{dist → types}/path-helper.spec.d.ts.map +0 -0
- package/{dist → types}/sleep-async.d.ts +0 -1
- package/types/sleep-async.d.ts.map +1 -0
- package/{dist → types}/sleep-async.spec.d.ts +0 -0
- package/{dist → types}/sleep-async.spec.d.ts.map +0 -0
- package/{dist → types}/sort-by.d.ts +0 -0
- package/{dist → types}/sort-by.d.ts.map +0 -0
- package/{dist → types}/sort-by.spec.d.ts +0 -0
- package/{dist → types}/sort-by.spec.d.ts.map +0 -0
- package/{dist → types}/trace.d.ts +0 -0
- package/{dist → types}/trace.d.ts.map +0 -0
- package/{dist → types}/trace.spec.d.ts +0 -0
- package/{dist → types}/trace.spec.d.ts.map +0 -0
- package/{dist → types}/tuple.d.ts +0 -0
- package/{dist → types}/tuple.d.ts.map +0 -0
- package/{dist → types}/tuple.spec.d.ts +0 -0
- package/{dist → types}/tuple.spec.d.ts.map +0 -0
- package/{dist → types}/value-observer.d.ts +0 -0
- package/{dist → types}/value-observer.d.ts.map +0 -0
- package/dist/observable-value.d.ts.map +0 -1
- package/dist/sleep-async.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
4
|
+
tslib_1.__exportStar(require("./disposable"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./deep-merge"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./debounce"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./observable-value"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./value-observer"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./path-helper"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./sleep-async"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./sort-by"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./trace"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./tuple"), exports);
|
|
14
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uDAA4B;AAC5B,uDAA4B;AAC5B,qDAA0B;AAC1B,6DAAkC;AAClC,2DAAgC;AAChC,wDAA6B;AAC7B,wDAA6B;AAC7B,oDAAyB;AACzB,kDAAuB;AACvB,kDAAuB"}
|
package/dist/observable-value.js
CHANGED
|
@@ -28,16 +28,21 @@ class ObservableValue {
|
|
|
28
28
|
* @param initialValue Optional initial value
|
|
29
29
|
*/
|
|
30
30
|
constructor(initialValue) {
|
|
31
|
+
this._isDisposed = false;
|
|
31
32
|
this.observers = new Set();
|
|
32
33
|
if (initialValue !== undefined) {
|
|
33
34
|
this.currentValue = initialValue;
|
|
34
35
|
}
|
|
35
36
|
}
|
|
37
|
+
get isDisposed() {
|
|
38
|
+
return this._isDisposed;
|
|
39
|
+
}
|
|
36
40
|
/**
|
|
37
41
|
* Disposes the ObservableValue object, removes all observers
|
|
38
42
|
*/
|
|
39
43
|
dispose() {
|
|
40
44
|
this.observers.clear();
|
|
45
|
+
this._isDisposed = true;
|
|
41
46
|
}
|
|
42
47
|
/**
|
|
43
48
|
* Subscribes to a value changes
|
|
@@ -69,6 +74,9 @@ class ObservableValue {
|
|
|
69
74
|
* @returns The current value
|
|
70
75
|
*/
|
|
71
76
|
getValue() {
|
|
77
|
+
if (this._isDisposed) {
|
|
78
|
+
throw new Error('ObservableValue is already disposed');
|
|
79
|
+
}
|
|
72
80
|
return this.currentValue;
|
|
73
81
|
}
|
|
74
82
|
/**
|
|
@@ -77,6 +85,9 @@ class ObservableValue {
|
|
|
77
85
|
* @param newValue The new value to be set
|
|
78
86
|
*/
|
|
79
87
|
setValue(newValue) {
|
|
88
|
+
if (this._isDisposed) {
|
|
89
|
+
throw new Error('ObservableValue is already disposed');
|
|
90
|
+
}
|
|
80
91
|
if (this.currentValue !== newValue) {
|
|
81
92
|
this.currentValue = newValue;
|
|
82
93
|
for (const subscription of this.observers) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-value.js","sourceRoot":"","sources":["../src/observable-value.ts"],"names":[],"mappings":";;;AACA,qDAAgD;AAOhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAa,eAAe;
|
|
1
|
+
{"version":3,"file":"observable-value.js","sourceRoot":"","sources":["../src/observable-value.ts"],"names":[],"mappings":";;;AACA,qDAAgD;AAOhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAa,eAAe;IAiF1B;;OAEG;IACH,YAAY,YAAgB;QA/EpB,gBAAW,GAAG,KAAK,CAAA;QASnB,cAAS,GAA0B,IAAI,GAAG,EAAE,CAAA;QAuElD,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;SACjC;IACH,CAAC;IAvFD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAID;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;IACzB,CAAC;IAID;;;;;;OAMG;IACI,SAAS,CAAC,QAAgC,EAAE,OAAO,GAAG,KAAK;QAChE,MAAM,QAAQ,GAAG,IAAI,8BAAa,CAAI,IAAI,EAAE,QAAQ,CAAC,CAAA;QACrD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5B,IAAI,OAAO,EAAE;YACX,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;SAC5B;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;;;;OAKG;IACI,WAAW,CAAC,QAA0B;QAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACxC,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACb,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;SACvD;QACD,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,QAAW;QACzB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;SACvD;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAA;YAC5B,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;gBACzC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;aAChC;SACF;IACH,CAAC;IAED;;;;OAIG;IACI,YAAY;QACjB,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAoC,CAAA;IAC/D,CAAC;CAUF;AAzFD,0CAyFC"}
|
|
@@ -80,6 +80,16 @@ exports.observableTests = describe('Observable', () => {
|
|
|
80
80
|
observer.dispose();
|
|
81
81
|
expect(v.getObservers().length).toBe(0);
|
|
82
82
|
});
|
|
83
|
+
it('should throw an error for setValue() when the observer has been disposed', () => {
|
|
84
|
+
const v = new observable_value_1.ObservableValue(1);
|
|
85
|
+
v.dispose();
|
|
86
|
+
expect(() => v.setValue(3)).toThrowError('ObservableValue is already disposed');
|
|
87
|
+
});
|
|
88
|
+
it('should throw an error for setValue() when the observer has been disposed', () => {
|
|
89
|
+
const v = new observable_value_1.ObservableValue(1);
|
|
90
|
+
v.dispose();
|
|
91
|
+
expect(() => v.getValue()).toThrowError('ObservableValue is already disposed');
|
|
92
|
+
});
|
|
83
93
|
it('should remove the subscription only from the disposed Observer', (done) => {
|
|
84
94
|
class Alma {
|
|
85
95
|
Callback() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-value.spec.js","sourceRoot":"","sources":["../src/observable-value.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"observable-value.spec.js","sourceRoot":"","sources":["../src/observable-value.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/sleep-async.js
CHANGED
|
@@ -5,7 +5,6 @@ exports.sleepAsync = void 0;
|
|
|
5
5
|
* Returns a simple promise that will be resolved within a discrete timeout
|
|
6
6
|
*
|
|
7
7
|
* @param timeout The timeout in millisecs
|
|
8
|
-
* @returns a promise that will be resolved after the timeout
|
|
9
8
|
*/
|
|
10
9
|
const sleepAsync = (timeout = 250) => new Promise((resolve) => setTimeout(() => {
|
|
11
10
|
resolve();
|
package/dist/sleep-async.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sleep-async.js","sourceRoot":"","sources":["../src/sleep-async.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"sleep-async.js","sourceRoot":"","sources":["../src/sleep-async.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACI,MAAM,UAAU,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,EAAE,CAC1C,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAC5B,UAAU,CAAC,GAAG,EAAE;IACd,OAAO,EAAE,CAAA;AACX,CAAC,EAAE,OAAO,CAAC,CACZ,CAAA;AALU,QAAA,UAAU,cAKpB"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/utils",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "General utilities",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
|
-
"typings": "./
|
|
6
|
+
"typings": "./types/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
8
|
"dist",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
9
|
+
"types",
|
|
10
|
+
"src"
|
|
11
11
|
],
|
|
12
12
|
"scripts": {
|
|
13
13
|
"fix:prettier": "prettier \"{,!(dist|temp)/**/}*.{ts,tsx}\" --write",
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
"url": "https://github.com/furystack/furystack/issues"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"tslib": "^2.
|
|
33
|
+
"tslib": "^2.4.0"
|
|
34
34
|
},
|
|
35
35
|
"homepage": "https://github.com/furystack/furystack",
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@types/jest": "^27.4.
|
|
37
|
+
"@types/jest": "^27.4.1"
|
|
38
38
|
}
|
|
39
39
|
}
|
|
@@ -87,6 +87,18 @@ export const observableTests = describe('Observable', () => {
|
|
|
87
87
|
expect(v.getObservers().length).toBe(0)
|
|
88
88
|
})
|
|
89
89
|
|
|
90
|
+
it('should throw an error for setValue() when the observer has been disposed', () => {
|
|
91
|
+
const v = new ObservableValue(1)
|
|
92
|
+
v.dispose()
|
|
93
|
+
expect(() => v.setValue(3)).toThrowError('ObservableValue is already disposed')
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
it('should throw an error for setValue() when the observer has been disposed', () => {
|
|
97
|
+
const v = new ObservableValue(1)
|
|
98
|
+
v.dispose()
|
|
99
|
+
expect(() => v.getValue()).toThrowError('ObservableValue is already disposed')
|
|
100
|
+
})
|
|
101
|
+
|
|
90
102
|
it('should remove the subscription only from the disposed Observer', (done) => {
|
|
91
103
|
class Alma {
|
|
92
104
|
public Callback() {
|
package/src/observable-value.ts
CHANGED
|
@@ -28,11 +28,18 @@ export type ValueChangeCallback<T> = (next: T) => void
|
|
|
28
28
|
* @param T Generic argument to indicate the value type
|
|
29
29
|
*/
|
|
30
30
|
export class ObservableValue<T> implements Disposable {
|
|
31
|
+
public get isDisposed(): boolean {
|
|
32
|
+
return this._isDisposed
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private _isDisposed = false
|
|
36
|
+
|
|
31
37
|
/**
|
|
32
38
|
* Disposes the ObservableValue object, removes all observers
|
|
33
39
|
*/
|
|
34
40
|
public dispose() {
|
|
35
41
|
this.observers.clear()
|
|
42
|
+
this._isDisposed = true
|
|
36
43
|
}
|
|
37
44
|
private observers: Set<ValueObserver<T>> = new Set()
|
|
38
45
|
private currentValue!: T
|
|
@@ -69,6 +76,9 @@ export class ObservableValue<T> implements Disposable {
|
|
|
69
76
|
* @returns The current value
|
|
70
77
|
*/
|
|
71
78
|
public getValue(): T {
|
|
79
|
+
if (this._isDisposed) {
|
|
80
|
+
throw new Error('ObservableValue is already disposed')
|
|
81
|
+
}
|
|
72
82
|
return this.currentValue
|
|
73
83
|
}
|
|
74
84
|
|
|
@@ -78,6 +88,9 @@ export class ObservableValue<T> implements Disposable {
|
|
|
78
88
|
* @param newValue The new value to be set
|
|
79
89
|
*/
|
|
80
90
|
public setValue(newValue: T) {
|
|
91
|
+
if (this._isDisposed) {
|
|
92
|
+
throw new Error('ObservableValue is already disposed')
|
|
93
|
+
}
|
|
81
94
|
if (this.currentValue !== newValue) {
|
|
82
95
|
this.currentValue = newValue
|
|
83
96
|
for (const subscription of this.observers) {
|
package/src/sleep-async.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Returns a simple promise that will be resolved within a discrete timeout
|
|
3
3
|
*
|
|
4
4
|
* @param timeout The timeout in millisecs
|
|
5
|
-
* @returns a promise that will be resolved after the timeout
|
|
6
5
|
*/
|
|
7
6
|
export const sleepAsync = (timeout = 250) =>
|
|
8
7
|
new Promise<void>((resolve) =>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -26,6 +26,8 @@ export declare type ValueChangeCallback<T> = (next: T) => void;
|
|
|
26
26
|
* @param T Generic argument to indicate the value type
|
|
27
27
|
*/
|
|
28
28
|
export declare class ObservableValue<T> implements Disposable {
|
|
29
|
+
get isDisposed(): boolean;
|
|
30
|
+
private _isDisposed;
|
|
29
31
|
/**
|
|
30
32
|
* Disposes the ObservableValue object, removes all observers
|
|
31
33
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable-value.d.ts","sourceRoot":"","sources":["../src/observable-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD;;GAEG;AACH,oBAAY,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;AAEtD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe,CAAC,CAAC,CAAE,YAAW,UAAU;IACnD,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,OAAO,CAAC,WAAW,CAAQ;IAE3B;;OAEG;IACI,OAAO;IAId,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,YAAY,CAAI;IAExB;;;;;;OAMG;IACI,SAAS,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,OAAO,UAAQ;IASlE;;;;;OAKG;IACI,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAI7C;;;;OAIG;IACI,QAAQ,IAAI,CAAC;IAOpB;;;;OAIG;IACI,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAY3B;;;;OAIG;IACI,YAAY;IAInB;;OAEG;gBACS,YAAY,CAAC,EAAE,CAAC;CAK7B"}
|
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-value.spec.d.ts","sourceRoot":"","sources":["../src/observable-value.spec.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"observable-value.spec.d.ts","sourceRoot":"","sources":["../src/observable-value.spec.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,eAAe,MA+G1B,CAAA"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Returns a simple promise that will be resolved within a discrete timeout
|
|
3
3
|
*
|
|
4
4
|
* @param timeout The timeout in millisecs
|
|
5
|
-
* @returns a promise that will be resolved after the timeout
|
|
6
5
|
*/
|
|
7
6
|
export declare const sleepAsync: (timeout?: number) => Promise<void>;
|
|
8
7
|
//# sourceMappingURL=sleep-async.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep-async.d.ts","sourceRoot":"","sources":["../src/sleep-async.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,UAAU,qCAKpB,CAAA"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"observable-value.d.ts","sourceRoot":"","sources":["../src/observable-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD;;GAEG;AACH,oBAAY,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;AAEtD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe,CAAC,CAAC,CAAE,YAAW,UAAU;IACnD;;OAEG;IACI,OAAO;IAGd,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,YAAY,CAAI;IAExB;;;;;;OAMG;IACI,SAAS,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,OAAO,UAAQ;IASlE;;;;;OAKG;IACI,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAI7C;;;;OAIG;IACI,QAAQ,IAAI,CAAC;IAIpB;;;;OAIG;IACI,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAS3B;;;;OAIG;IACI,YAAY;IAInB;;OAEG;gBACS,YAAY,CAAC,EAAE,CAAC;CAK7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sleep-async.d.ts","sourceRoot":"","sources":["../src/sleep-async.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,UAAU,qCAKpB,CAAA"}
|