@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.
Files changed (54) hide show
  1. package/dist/index.js +10 -10
  2. package/dist/index.js.map +1 -1
  3. package/dist/observable-value.js +11 -0
  4. package/dist/observable-value.js.map +1 -1
  5. package/dist/observable-value.spec.js +10 -0
  6. package/dist/observable-value.spec.js.map +1 -1
  7. package/dist/sleep-async.js +0 -1
  8. package/dist/sleep-async.js.map +1 -1
  9. package/package.json +6 -6
  10. package/src/observable-value.spec.ts +12 -0
  11. package/src/observable-value.ts +13 -0
  12. package/src/sleep-async.ts +0 -1
  13. package/{dist → types}/debounce.d.ts +0 -0
  14. package/{dist → types}/debounce.d.ts.map +0 -0
  15. package/{dist → types}/debounce.spec.d.ts +0 -0
  16. package/{dist → types}/debounce.spec.d.ts.map +0 -0
  17. package/{dist → types}/deep-merge.d.ts +0 -0
  18. package/{dist → types}/deep-merge.d.ts.map +0 -0
  19. package/{dist → types}/deep-merge.spec.d.ts +0 -0
  20. package/{dist → types}/deep-merge.spec.d.ts.map +0 -0
  21. package/{dist → types}/disposable.d.ts +0 -0
  22. package/{dist → types}/disposable.d.ts.map +0 -0
  23. package/{dist → types}/disposable.spec.d.ts +0 -0
  24. package/{dist → types}/disposable.spec.d.ts.map +0 -0
  25. package/{dist → types}/index.d.ts +0 -0
  26. package/{dist → types}/index.d.ts.map +0 -0
  27. package/{dist → types}/observable-value.d.ts +2 -0
  28. package/types/observable-value.d.ts.map +1 -0
  29. package/{dist → types}/observable-value.spec.d.ts +0 -0
  30. package/{dist → types}/observable-value.spec.d.ts.map +1 -1
  31. package/{dist → types}/path-helper.d.ts +0 -0
  32. package/{dist → types}/path-helper.d.ts.map +0 -0
  33. package/{dist → types}/path-helper.spec.d.ts +0 -0
  34. package/{dist → types}/path-helper.spec.d.ts.map +0 -0
  35. package/{dist → types}/sleep-async.d.ts +0 -1
  36. package/types/sleep-async.d.ts.map +1 -0
  37. package/{dist → types}/sleep-async.spec.d.ts +0 -0
  38. package/{dist → types}/sleep-async.spec.d.ts.map +0 -0
  39. package/{dist → types}/sort-by.d.ts +0 -0
  40. package/{dist → types}/sort-by.d.ts.map +0 -0
  41. package/{dist → types}/sort-by.spec.d.ts +0 -0
  42. package/{dist → types}/sort-by.spec.d.ts.map +0 -0
  43. package/{dist → types}/trace.d.ts +0 -0
  44. package/{dist → types}/trace.d.ts.map +0 -0
  45. package/{dist → types}/trace.spec.d.ts +0 -0
  46. package/{dist → types}/trace.spec.d.ts.map +0 -0
  47. package/{dist → types}/tuple.d.ts +0 -0
  48. package/{dist → types}/tuple.d.ts.map +0 -0
  49. package/{dist → types}/tuple.spec.d.ts +0 -0
  50. package/{dist → types}/tuple.spec.d.ts.map +0 -0
  51. package/{dist → types}/value-observer.d.ts +0 -0
  52. package/{dist → types}/value-observer.d.ts.map +0 -0
  53. package/dist/observable-value.d.ts.map +0 -1
  54. 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
- (0, tslib_1.__exportStar)(require("./disposable"), exports);
5
- (0, tslib_1.__exportStar)(require("./deep-merge"), exports);
6
- (0, tslib_1.__exportStar)(require("./debounce"), exports);
7
- (0, tslib_1.__exportStar)(require("./observable-value"), exports);
8
- (0, tslib_1.__exportStar)(require("./value-observer"), exports);
9
- (0, tslib_1.__exportStar)(require("./path-helper"), exports);
10
- (0, tslib_1.__exportStar)(require("./sleep-async"), exports);
11
- (0, tslib_1.__exportStar)(require("./sort-by"), exports);
12
- (0, tslib_1.__exportStar)(require("./trace"), exports);
13
- (0, tslib_1.__exportStar)(require("./tuple"), exports);
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,4DAA4B;AAC5B,4DAA4B;AAC5B,0DAA0B;AAC1B,kEAAkC;AAClC,gEAAgC;AAChC,6DAA6B;AAC7B,6DAA6B;AAC7B,yDAAyB;AACzB,uDAAuB;AACvB,uDAAuB"}
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"}
@@ -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;IAoE1B;;OAEG;IACH,YAAY,YAAgB;QAhEpB,cAAS,GAA0B,IAAI,GAAG,EAAE,CAAA;QAiElD,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;SACjC;IACH,CAAC;IA1ED;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;IACxB,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,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,QAAW;QACzB,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;AA5ED,0CA4EC"}
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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"}
@@ -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();
@@ -1 +1 @@
1
- {"version":3,"file":"sleep-async.js","sourceRoot":"","sources":["../src/sleep-async.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;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"}
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": "2.0.4",
3
+ "version": "3.0.0",
4
4
  "description": "General utilities",
5
5
  "main": "dist/index.js",
6
- "typings": "./dist/index.d.ts",
6
+ "typings": "./types/index.d.ts",
7
7
  "files": [
8
8
  "dist",
9
- "src",
10
- "test"
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.3.1"
33
+ "tslib": "^2.4.0"
34
34
  },
35
35
  "homepage": "https://github.com/furystack/furystack",
36
36
  "devDependencies": {
37
- "@types/jest": "^27.4.0"
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() {
@@ -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) {
@@ -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,MAmG1B,CAAA"}
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"}