@furystack/utils 2.0.5 → 3.0.1
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/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/package.json +6 -6
- package/src/observable-value.spec.ts +12 -0
- package/src/observable-value.ts +13 -0
- 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 -0
- package/{dist → types}/sleep-async.d.ts.map +0 -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/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/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/utils",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.1",
|
|
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.
|
|
37
|
+
"@types/jest": "^27.5.0"
|
|
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) {
|
|
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
|
|
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
|
|
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"}
|