grainjs 1.0.1 → 1.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 +23 -26
- package/dist/cjs/index.js +28 -17
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/PriorityQueue.d.ts +2 -2
- package/dist/cjs/lib/PriorityQueue.js +1 -0
- package/dist/cjs/lib/PriorityQueue.js.map +1 -1
- package/dist/cjs/lib/_computed_queue.js +4 -3
- package/dist/cjs/lib/_computed_queue.js.map +1 -1
- package/dist/cjs/lib/binding.d.ts +11 -4
- package/dist/cjs/lib/binding.js +6 -5
- package/dist/cjs/lib/binding.js.map +1 -1
- package/dist/cjs/lib/browserGlobals.d.ts +4 -1
- package/dist/cjs/lib/browserGlobals.js +2 -0
- package/dist/cjs/lib/browserGlobals.js.map +1 -1
- package/dist/cjs/lib/computed.d.ts +49 -28
- package/dist/cjs/lib/computed.js +38 -51
- package/dist/cjs/lib/computed.js.map +1 -1
- package/dist/cjs/lib/dispose.d.ts +109 -96
- package/dist/cjs/lib/dispose.js +106 -79
- package/dist/cjs/lib/dispose.js.map +1 -1
- package/dist/cjs/lib/dom.d.ts +40 -18
- package/dist/cjs/lib/dom.js +63 -29
- package/dist/cjs/lib/dom.js.map +1 -1
- package/dist/cjs/lib/domComponent.d.ts +56 -51
- package/dist/cjs/lib/domComponent.js +46 -44
- package/dist/cjs/lib/domComponent.js.map +1 -1
- package/dist/cjs/lib/domComputed.d.ts +50 -20
- package/dist/cjs/lib/domComputed.js +37 -7
- package/dist/cjs/lib/domComputed.js.map +1 -1
- package/dist/cjs/lib/domDispose.d.ts +27 -12
- package/dist/cjs/lib/domDispose.js +27 -11
- package/dist/cjs/lib/domDispose.js.map +1 -1
- package/dist/cjs/lib/domForEach.d.ts +5 -4
- package/dist/cjs/lib/domForEach.js +41 -41
- package/dist/cjs/lib/domForEach.js.map +1 -1
- package/dist/cjs/lib/domImpl.d.ts +33 -10
- package/dist/cjs/lib/domImpl.js +29 -9
- package/dist/cjs/lib/domImpl.js.map +1 -1
- package/dist/cjs/lib/domMethods.d.ts +93 -47
- package/dist/cjs/lib/domMethods.js +91 -47
- package/dist/cjs/lib/domMethods.js.map +1 -1
- package/dist/cjs/lib/domevent.d.ts +87 -62
- package/dist/cjs/lib/domevent.js +85 -59
- package/dist/cjs/lib/domevent.js.map +1 -1
- package/dist/cjs/lib/emit.d.ts +62 -32
- package/dist/cjs/lib/emit.js +68 -53
- package/dist/cjs/lib/emit.js.map +1 -1
- package/dist/cjs/lib/kowrap.d.ts +6 -3
- package/dist/cjs/lib/kowrap.js +7 -3
- package/dist/cjs/lib/kowrap.js.map +1 -1
- package/dist/cjs/lib/obsArray.d.ts +91 -53
- package/dist/cjs/lib/obsArray.js +87 -54
- package/dist/cjs/lib/obsArray.js.map +1 -1
- package/dist/cjs/lib/observable.d.ts +25 -15
- package/dist/cjs/lib/observable.js +31 -19
- package/dist/cjs/lib/observable.js.map +1 -1
- package/dist/cjs/lib/pureComputed.d.ts +12 -15
- package/dist/cjs/lib/pureComputed.js +16 -18
- package/dist/cjs/lib/pureComputed.js.map +1 -1
- package/dist/cjs/lib/styled.d.ts +78 -61
- package/dist/cjs/lib/styled.js +27 -79
- package/dist/cjs/lib/styled.js.map +1 -1
- package/dist/cjs/lib/subscribe.d.ts +41 -37
- package/dist/cjs/lib/subscribe.js +31 -39
- package/dist/cjs/lib/subscribe.js.map +1 -1
- package/dist/cjs/lib/util.js +2 -0
- package/dist/cjs/lib/util.js.map +1 -1
- package/dist/cjs/lib/widgets/input.d.ts +3 -1
- package/dist/cjs/lib/widgets/input.js +7 -4
- package/dist/cjs/lib/widgets/input.js.map +1 -1
- package/dist/cjs/lib/widgets/select.d.ts +4 -2
- package/dist/cjs/lib/widgets/select.js +8 -5
- package/dist/cjs/lib/widgets/select.js.map +1 -1
- package/dist/esm/lib/_computed_queue.js +3 -3
- package/dist/esm/lib/_computed_queue.js.map +1 -1
- package/dist/esm/lib/binding.js +2 -2
- package/dist/esm/lib/binding.js.map +1 -1
- package/dist/esm/lib/browserGlobals.js +1 -0
- package/dist/esm/lib/browserGlobals.js.map +1 -1
- package/dist/esm/lib/computed.js +36 -50
- package/dist/esm/lib/computed.js.map +1 -1
- package/dist/esm/lib/dispose.js +104 -78
- package/dist/esm/lib/dispose.js.map +1 -1
- package/dist/esm/lib/dom.js +40 -18
- package/dist/esm/lib/dom.js.map +1 -1
- package/dist/esm/lib/domComponent.js +45 -44
- package/dist/esm/lib/domComponent.js.map +1 -1
- package/dist/esm/lib/domComputed.js +32 -5
- package/dist/esm/lib/domComputed.js.map +1 -1
- package/dist/esm/lib/domDispose.js +26 -11
- package/dist/esm/lib/domDispose.js.map +1 -1
- package/dist/esm/lib/domForEach.js +40 -41
- package/dist/esm/lib/domForEach.js.map +1 -1
- package/dist/esm/lib/domImpl.js +26 -7
- package/dist/esm/lib/domImpl.js.map +1 -1
- package/dist/esm/lib/domMethods.js +77 -35
- package/dist/esm/lib/domMethods.js.map +1 -1
- package/dist/esm/lib/domevent.js +84 -59
- package/dist/esm/lib/domevent.js.map +1 -1
- package/dist/esm/lib/emit.js +67 -53
- package/dist/esm/lib/emit.js.map +1 -1
- package/dist/esm/lib/kowrap.js +5 -2
- package/dist/esm/lib/kowrap.js.map +1 -1
- package/dist/esm/lib/obsArray.js +82 -50
- package/dist/esm/lib/obsArray.js.map +1 -1
- package/dist/esm/lib/observable.js +26 -15
- package/dist/esm/lib/observable.js.map +1 -1
- package/dist/esm/lib/pureComputed.js +15 -18
- package/dist/esm/lib/pureComputed.js.map +1 -1
- package/dist/esm/lib/styled.js +24 -77
- package/dist/esm/lib/styled.js.map +1 -1
- package/dist/esm/lib/subscribe.js +27 -36
- package/dist/esm/lib/subscribe.js.map +1 -1
- package/dist/esm/lib/util.js +1 -0
- package/dist/esm/lib/util.js.map +1 -1
- package/dist/esm/lib/widgets/input.js +3 -1
- package/dist/esm/lib/widgets/input.js.map +1 -1
- package/dist/esm/lib/widgets/select.js +3 -1
- package/dist/esm/lib/widgets/select.js.map +1 -1
- package/dist/grain-full.debug.js +2138 -3052
- package/dist/grain-full.debug.js.map +7 -0
- package/dist/grain-full.min.js +6 -2
- package/dist/grain-full.min.js.map +7 -1
- package/lib/binding.ts +9 -2
- package/lib/browserGlobals.ts +3 -1
- package/lib/computed.ts +56 -56
- package/lib/dispose.ts +110 -85
- package/lib/dom.ts +41 -20
- package/lib/domComponent.ts +68 -70
- package/lib/domComputed.ts +66 -21
- package/lib/domDispose.ts +28 -11
- package/lib/domForEach.ts +13 -12
- package/lib/domImpl.ts +30 -7
- package/lib/domMethods.ts +101 -46
- package/lib/domevent.ts +86 -61
- package/lib/emit.ts +64 -50
- package/lib/kowrap.ts +5 -2
- package/lib/obsArray.ts +89 -54
- package/lib/observable.ts +26 -15
- package/lib/pureComputed.ts +16 -22
- package/lib/styled.ts +85 -71
- package/lib/subscribe.ts +41 -45
- package/lib/util.ts +1 -0
- package/lib/widgets/input.ts +3 -1
- package/lib/widgets/select.ts +3 -1
- package/package.json +48 -38
package/dist/cjs/lib/obsArray.js
CHANGED
|
@@ -1,44 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LiveIndex = exports.makeLiveIndex = exports.computedArray = exports.ComputedArray = exports.obsArray = exports.MutableObsArray = exports.ObsArray = void 0;
|
|
4
|
+
const dispose_1 = require("./dispose");
|
|
5
|
+
const observable_1 = require("./observable");
|
|
6
|
+
const subscribe_1 = require("./subscribe");
|
|
2
7
|
/**
|
|
3
|
-
* ObsArray extends a plain Observable to allow
|
|
8
|
+
* `ObsArray<T>` is essentially an array-valued observable. It extends a plain Observable to allow
|
|
9
|
+
* for more efficient observation of array changes. It also may be
|
|
10
|
+
* used as an owner for disposable array elements.
|
|
4
11
|
*
|
|
5
|
-
* As for any array-valued Observable
|
|
12
|
+
* As for any array-valued `Observable`, when the contents of the observed array changes, the
|
|
6
13
|
* listeners get called with new and previous values which are the same array. For simple changes,
|
|
7
|
-
* such as those made with
|
|
14
|
+
* such as those made with `.push()` and `.splice()` methods, `ObsArray` allows for more efficient
|
|
8
15
|
* handling of the change by calling listeners with splice info in the third argument.
|
|
9
16
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* Both ObsArray and ComputedArray may be used with disposable elements as their owners. E.g.
|
|
17
|
+
* `ObsArray` may be used with disposable elements as their owner. E.g.
|
|
18
|
+
* ```ts
|
|
19
|
+
* const arr = obsArray<D>();
|
|
20
|
+
* arr.push(D.create(arr, "x"), D.create(arr, "y"));
|
|
21
|
+
* arr.pop(); // Element "y" gets disposed.
|
|
22
|
+
* arr.dispose(); // Element "x" gets disposed.
|
|
23
|
+
* ```
|
|
19
24
|
*
|
|
20
|
-
*
|
|
21
|
-
* arr.push(D.create(arr, "x"), D.create(arr, "y"));
|
|
22
|
-
* arr.pop(); // Element "y" gets disposed.
|
|
23
|
-
* arr.dispose(); // Element "x" gets disposed.
|
|
24
|
-
*
|
|
25
|
-
* const values = obsArray<string>();
|
|
26
|
-
* const compArr = computedArray<D>(values, (val, i, compArr) => D.create(compArr, val));
|
|
27
|
-
* values.push("foo", "bar"); // D("foo") and D("bar") get created
|
|
28
|
-
* values.pop(); // D("bar") gets disposed.
|
|
29
|
-
* compArr.dispose(); // D("foo") gets disposed.
|
|
30
|
-
*
|
|
31
|
-
* Note that only the pattern above works: obsArray (or compArray) may only be used to take
|
|
25
|
+
* Note that only the pattern above works: `obsArray` may only be used to take
|
|
32
26
|
* ownership of those disposables that are added to it as array elements.
|
|
33
27
|
*/
|
|
34
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
const dispose_1 = require("./dispose");
|
|
36
|
-
const observable_1 = require("./observable");
|
|
37
|
-
const subscribe_1 = require("./subscribe");
|
|
38
|
-
/**
|
|
39
|
-
* ObsArray<T> is essentially an array-valued observable. The main difference is that it may be
|
|
40
|
-
* used as an owner for disposable array elements.
|
|
41
|
-
*/
|
|
42
28
|
class ObsArray extends observable_1.BaseObservable {
|
|
43
29
|
constructor() {
|
|
44
30
|
super(...arguments);
|
|
@@ -47,6 +33,10 @@ class ObsArray extends observable_1.BaseObservable {
|
|
|
47
33
|
addListener(callback, optContext) {
|
|
48
34
|
return super.addListener(callback, optContext);
|
|
49
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Take ownership of an item added to this array. This should _only_ be used for array elements,
|
|
38
|
+
* not any unrelated items.
|
|
39
|
+
*/
|
|
50
40
|
autoDispose(value) {
|
|
51
41
|
if (!this._ownedItems) {
|
|
52
42
|
this._ownedItems = new Set();
|
|
@@ -54,6 +44,7 @@ class ObsArray extends observable_1.BaseObservable {
|
|
|
54
44
|
this._ownedItems.add(value);
|
|
55
45
|
return value;
|
|
56
46
|
}
|
|
47
|
+
/** @override */
|
|
57
48
|
dispose() {
|
|
58
49
|
if (this._ownedItems) {
|
|
59
50
|
for (const item of this.get()) {
|
|
@@ -65,9 +56,11 @@ class ObsArray extends observable_1.BaseObservable {
|
|
|
65
56
|
}
|
|
66
57
|
super.dispose();
|
|
67
58
|
}
|
|
59
|
+
/** @internal */
|
|
68
60
|
_setWithSplice(value, splice) {
|
|
69
61
|
return this._setWithArg(value, splice);
|
|
70
62
|
}
|
|
63
|
+
/** @internal */
|
|
71
64
|
_disposeOwned(splice) {
|
|
72
65
|
if (!this._ownedItems) {
|
|
73
66
|
return;
|
|
@@ -97,10 +90,11 @@ class ObsArray extends observable_1.BaseObservable {
|
|
|
97
90
|
}
|
|
98
91
|
exports.ObsArray = ObsArray;
|
|
99
92
|
/**
|
|
100
|
-
* MutableObsArray<T
|
|
101
|
-
* allow more efficient processing of such changes. It is created with obsArray<T>()
|
|
93
|
+
* `MutableObsArray<T>` adds array-like mutation methods which emit events with splice info, to
|
|
94
|
+
* allow more efficient processing of such changes. It is created with `obsArray<T>()`.
|
|
102
95
|
*/
|
|
103
96
|
class MutableObsArray extends ObsArray {
|
|
97
|
+
/** Appends elements to the end and returns the new length (like `Array#push`). */
|
|
104
98
|
push(...args) {
|
|
105
99
|
const value = this.get();
|
|
106
100
|
const start = value.length;
|
|
@@ -108,6 +102,7 @@ class MutableObsArray extends ObsArray {
|
|
|
108
102
|
this._setWithSplice(value, { start, numAdded: args.length, deleted: [] });
|
|
109
103
|
return newLen;
|
|
110
104
|
}
|
|
105
|
+
/** Removes and returns the last element (like `Array#pop`). */
|
|
111
106
|
pop() {
|
|
112
107
|
const value = this.get();
|
|
113
108
|
if (value.length === 0) {
|
|
@@ -117,12 +112,14 @@ class MutableObsArray extends ObsArray {
|
|
|
117
112
|
this._setWithSplice(value, { start: value.length, numAdded: 0, deleted: [ret] });
|
|
118
113
|
return ret;
|
|
119
114
|
}
|
|
115
|
+
/** Prepends elements to the start and returns the new length (like `Array#unshift`). */
|
|
120
116
|
unshift(...args) {
|
|
121
117
|
const value = this.get();
|
|
122
118
|
const newLen = value.unshift(...args);
|
|
123
119
|
this._setWithSplice(value, { start: 0, numAdded: args.length, deleted: [] });
|
|
124
120
|
return newLen;
|
|
125
121
|
}
|
|
122
|
+
/** Removes and returns the first element (like `Array#shift`). */
|
|
126
123
|
shift() {
|
|
127
124
|
const value = this.get();
|
|
128
125
|
if (value.length === 0) {
|
|
@@ -132,6 +129,10 @@ class MutableObsArray extends ObsArray {
|
|
|
132
129
|
this._setWithSplice(value, { start: 0, numAdded: 0, deleted: [ret] });
|
|
133
130
|
return ret;
|
|
134
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Removes and/or inserts elements at a given index and returns the removed elements (like
|
|
134
|
+
* `Array#splice`).
|
|
135
|
+
*/
|
|
135
136
|
splice(start, deleteCount = Infinity, ...newValues) {
|
|
136
137
|
const value = this.get();
|
|
137
138
|
const len = value.length;
|
|
@@ -144,7 +145,7 @@ class MutableObsArray extends ObsArray {
|
|
|
144
145
|
exports.MutableObsArray = MutableObsArray;
|
|
145
146
|
/**
|
|
146
147
|
* Creates a new MutableObsArray with an optional initial value, defaulting to the empty array.
|
|
147
|
-
* It is essentially the same as observable<T[]
|
|
148
|
+
* It is essentially the same as `observable<T[]>`, but with array-like mutation methods.
|
|
148
149
|
*/
|
|
149
150
|
function obsArray(value = []) {
|
|
150
151
|
return new MutableObsArray(value);
|
|
@@ -157,16 +158,17 @@ function isObsArray(val) {
|
|
|
157
158
|
return Array.isArray(val.get());
|
|
158
159
|
}
|
|
159
160
|
/**
|
|
160
|
-
* See computedArray()
|
|
161
|
+
* See [`computedArray()`](#computedArray) for documentation.
|
|
161
162
|
*/
|
|
162
163
|
class ComputedArray extends ObsArray {
|
|
163
164
|
constructor(obsArr, _mapper) {
|
|
164
165
|
super([]);
|
|
165
166
|
this._mapper = _mapper;
|
|
166
167
|
this._sub = isObsArray(obsArr) ?
|
|
167
|
-
subscribe_1.subscribe(obsArr, (use) => this._syncMap(obsArr)) :
|
|
168
|
-
subscribe_1.subscribe(obsArr, (use, obsArrayValue) => { use(obsArrayValue); return this._syncMap(obsArrayValue); });
|
|
168
|
+
(0, subscribe_1.subscribe)(obsArr, (use) => this._syncMap(obsArr)) :
|
|
169
|
+
(0, subscribe_1.subscribe)(obsArr, (use, obsArrayValue) => { use(obsArrayValue); return this._syncMap(obsArrayValue); });
|
|
169
170
|
}
|
|
171
|
+
/** @internal */
|
|
170
172
|
dispose() {
|
|
171
173
|
this._unsync();
|
|
172
174
|
this._sub.dispose();
|
|
@@ -223,25 +225,43 @@ class ComputedArray extends ObsArray {
|
|
|
223
225
|
}
|
|
224
226
|
exports.ComputedArray = ComputedArray;
|
|
225
227
|
/**
|
|
226
|
-
* Returns an ObsArray that maps all elements of the passed-in ObsArray through a mapper
|
|
227
|
-
* Also accepts an observable (e.g. a computed) whose value is an ObsArray
|
|
228
|
+
* Returns an `ObsArray` that maps all elements of the passed-in `ObsArray` through a mapper
|
|
229
|
+
* function. Also accepts an observable (e.g. a computed) whose value is an `ObsArray`.
|
|
230
|
+
* ```ts
|
|
231
|
+
* computedArray(obsArray, mapper)
|
|
232
|
+
* ```
|
|
228
233
|
*
|
|
229
|
-
*
|
|
234
|
+
* The result is analogous to:
|
|
235
|
+
* ```ts
|
|
236
|
+
* computed((use) => use(obsArray).map(mapper)) // for ObsArray
|
|
237
|
+
* computed((use) => use(use(obsArray)).map(mapper)) // for Observable<ObsArray>
|
|
238
|
+
* ```
|
|
230
239
|
*
|
|
231
|
-
* The
|
|
232
|
-
*
|
|
233
|
-
* computed((use) => use(obsArray).map(mapper)) // for ObsArray
|
|
234
|
-
* computed((use) => use(use(obsArray)).map(mapper)) // for Observable<ObsArray>
|
|
235
|
-
*
|
|
236
|
-
* The benefit of computedArray() is that a small change to the source array (e.g. one item
|
|
240
|
+
* The benefit of `computedArray()` is that a small change to the source array (e.g. one item
|
|
237
241
|
* added or removed), causes a small change to the mapped array, rather than a full rebuild.
|
|
238
242
|
*
|
|
239
|
-
* This is useful with an ObsArray or with an observable whose value is an ObsArray
|
|
240
|
-
* when the computed array
|
|
243
|
+
* This is useful with an `ObsArray` or with an observable whose value is an `ObsArray`, and also
|
|
244
|
+
* when the computed array's items are disposable and it owns them.
|
|
245
|
+
*
|
|
246
|
+
* There is no need or benefit to using `computedArray()` if you have a `computed()` that returns
|
|
247
|
+
* a plain array. It is specifically for the case when you want to preserve the efficiency of
|
|
248
|
+
* `ObsArray` when you map its values.
|
|
241
249
|
*
|
|
242
|
-
* Note that the mapper function is called with (item, index, array) as for a standard
|
|
243
|
-
* array.map()
|
|
250
|
+
* Note that the mapper function is called with `(item, index, array)` as for a standard
|
|
251
|
+
* `array.map()`, but that the index is only accurate at the time of the call, and will stop
|
|
244
252
|
* reflecting the true index if more items are inserted into the array later.
|
|
253
|
+
*
|
|
254
|
+
* As with `ObsArray`, a `ComputedArray` may be used with disposable elements as their owners. E.g.
|
|
255
|
+
* ```ts
|
|
256
|
+
* const values = obsArray<string>();
|
|
257
|
+
* const compArr = computedArray<D>(values, (val, i, compArr) => D.create(compArr, val));
|
|
258
|
+
* values.push("foo", "bar"); // D("foo") and D("bar") get created
|
|
259
|
+
* values.pop(); // D("bar") gets disposed.
|
|
260
|
+
* compArr.dispose(); // D("foo") gets disposed.
|
|
261
|
+
* ```
|
|
262
|
+
*
|
|
263
|
+
* Note that only the pattern above works: obsArray (or compArray) may only be used to take
|
|
264
|
+
* ownership of those disposables that are added to it as array elements.
|
|
245
265
|
*/
|
|
246
266
|
function computedArray(obsArr, mapper) {
|
|
247
267
|
return new ComputedArray(obsArr, mapper);
|
|
@@ -258,9 +278,12 @@ exports.computedArray = computedArray;
|
|
|
258
278
|
* observable will not be adjusted as the array changes, except to keep it valid.
|
|
259
279
|
*/
|
|
260
280
|
function makeLiveIndex(owner, obsArr, initialIndex = 0) {
|
|
261
|
-
return dispose_1.setDisposeOwner(owner, new LiveIndex(obsArr, initialIndex));
|
|
281
|
+
return (0, dispose_1.setDisposeOwner)(owner, new LiveIndex(obsArr, initialIndex));
|
|
262
282
|
}
|
|
263
283
|
exports.makeLiveIndex = makeLiveIndex;
|
|
284
|
+
/**
|
|
285
|
+
* An Observable that represents an index into an `ObsArray`, clamped to be in the valid range.
|
|
286
|
+
*/
|
|
264
287
|
class LiveIndex extends observable_1.Observable {
|
|
265
288
|
constructor(_obsArray, initialIndex = 0) {
|
|
266
289
|
super(null);
|
|
@@ -269,16 +292,26 @@ class LiveIndex extends observable_1.Observable {
|
|
|
269
292
|
this.set(initialIndex);
|
|
270
293
|
this._listener = _obsArray.addListener(this._onArrayChange, this);
|
|
271
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Set the index, clamping it to a valid value.
|
|
297
|
+
*/
|
|
272
298
|
set(index) {
|
|
273
299
|
// Clamp to [0, len) range of the observable array.
|
|
274
300
|
const len = this._obsArray.get().length;
|
|
275
301
|
super.set(len === 0 ? null : Math.max(0, Math.min(len - 1, index || 0)));
|
|
276
302
|
}
|
|
277
|
-
|
|
278
|
-
|
|
303
|
+
/**
|
|
304
|
+
* Turn "liveness" on or off. While set to false, the observable will not be adjusted as the
|
|
305
|
+
* array changes, except to keep it valid.
|
|
306
|
+
*
|
|
307
|
+
* @privateRemarks
|
|
308
|
+
* Note that this feature comes from a rather obscure need, and it would be better if something
|
|
309
|
+
* similar were possible without making it an explicit feature.
|
|
310
|
+
*/
|
|
279
311
|
setLive(value) {
|
|
280
312
|
this._isLive = value;
|
|
281
313
|
}
|
|
314
|
+
/** @override */
|
|
282
315
|
dispose() {
|
|
283
316
|
this._listener.dispose();
|
|
284
317
|
super.dispose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"obsArray.js","sourceRoot":"","sources":["../../../lib/obsArray.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"obsArray.js","sourceRoot":"","sources":["../../../lib/obsArray.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,23 +24,23 @@ import { DepItem } from './_computed_queue';
|
|
|
24
24
|
import { IDisposable, IDisposableOwnerT } from './dispose';
|
|
25
25
|
import { Listener } from './emit';
|
|
26
26
|
export { bundleChanges } from './_computed_queue';
|
|
27
|
+
/**
|
|
28
|
+
* Base class for several variants of observable values.
|
|
29
|
+
*/
|
|
27
30
|
export declare class BaseObservable<T> {
|
|
28
31
|
private _onChange;
|
|
29
32
|
private _value;
|
|
30
|
-
/**
|
|
31
|
-
* Internal constructor for an Observable. You should use observable() function instead.
|
|
32
|
-
*/
|
|
33
33
|
constructor(value: T);
|
|
34
34
|
/**
|
|
35
35
|
* Returns the value of the observable. It is fast and does not create a subscription.
|
|
36
36
|
* (It is similar to knockout's peek()).
|
|
37
|
-
* @returns
|
|
37
|
+
* @returns The current value of the observable.
|
|
38
38
|
*/
|
|
39
39
|
get(): T;
|
|
40
40
|
/**
|
|
41
41
|
* Sets the value of the observable. If the value differs from the previously set one, then
|
|
42
42
|
* listeners to this observable will get called with (newValue, oldValue) as arguments.
|
|
43
|
-
* @param
|
|
43
|
+
* @param value - The new value to set.
|
|
44
44
|
*/
|
|
45
45
|
set(value: T): void;
|
|
46
46
|
/**
|
|
@@ -49,9 +49,9 @@ export declare class BaseObservable<T> {
|
|
|
49
49
|
setAndTrigger(value: T): void;
|
|
50
50
|
/**
|
|
51
51
|
* Adds a callback to listen to changes in the observable.
|
|
52
|
-
* @param
|
|
53
|
-
* @param
|
|
54
|
-
* @returns
|
|
52
|
+
* @param callback - Function, called on changes with (newValue, oldValue) arguments.
|
|
53
|
+
* @param optContext - Context for the function.
|
|
54
|
+
* @returns Listener object. Its dispose() method removes the callback.
|
|
55
55
|
*/
|
|
56
56
|
addListener(callback: (val: T, prev: T) => void, optContext?: object): Listener;
|
|
57
57
|
/**
|
|
@@ -61,7 +61,7 @@ export declare class BaseObservable<T> {
|
|
|
61
61
|
/**
|
|
62
62
|
* Sets a single callback to be called when a listener is added or removed. It overwrites any
|
|
63
63
|
* previously-set such callback.
|
|
64
|
-
* @param
|
|
64
|
+
* @param changeCB - Function to call after a listener is added or
|
|
65
65
|
* removed. It's called with a boolean indicating whether this observable has any listeners.
|
|
66
66
|
* Pass in `null` to unset the callback. Note that it can be called multiple times in a row
|
|
67
67
|
* with hasListeners `true`.
|
|
@@ -70,6 +70,7 @@ export declare class BaseObservable<T> {
|
|
|
70
70
|
/**
|
|
71
71
|
* Used by subscriptions to keep track of dependencies. An observable that has dependnecies,
|
|
72
72
|
* such as a computed observable, would override this method.
|
|
73
|
+
* @internal
|
|
73
74
|
*/
|
|
74
75
|
_getDepItem(): DepItem | null;
|
|
75
76
|
/**
|
|
@@ -80,14 +81,20 @@ export declare class BaseObservable<T> {
|
|
|
80
81
|
* Returns whether this observable is disposed.
|
|
81
82
|
*/
|
|
82
83
|
isDisposed(): boolean;
|
|
84
|
+
/** @internal */
|
|
83
85
|
protected _disposeOwned(arg?: any): void;
|
|
84
86
|
/**
|
|
85
87
|
* Allow derived classes to emit change events with an additional third argument describing the
|
|
86
88
|
* change. It always emits the event without checking for value equality.
|
|
89
|
+
* @internal
|
|
87
90
|
*/
|
|
88
91
|
protected _setWithArg(value: T, arg: any): void;
|
|
89
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* An Observable holds a value and allows subscribing to changes.
|
|
95
|
+
*/
|
|
90
96
|
export declare class Observable<T> extends BaseObservable<T> implements IDisposableOwnerT<T & IDisposable> {
|
|
97
|
+
/** @internal */
|
|
91
98
|
static holder<T>(value: T & IDisposable): Observable<T>;
|
|
92
99
|
/**
|
|
93
100
|
* Creates a new Observable with the given initial value, and owned by owner.
|
|
@@ -104,25 +111,28 @@ export declare class Observable<T> extends BaseObservable<T> implements IDisposa
|
|
|
104
111
|
* will dispose the owned value when it's set to another value, or when it itself is disposed.
|
|
105
112
|
*/
|
|
106
113
|
autoDispose(value: T & IDisposable): T & IDisposable;
|
|
114
|
+
/** @internal */
|
|
107
115
|
protected _disposeOwned(): void;
|
|
108
116
|
}
|
|
109
117
|
/**
|
|
110
118
|
* Creates a new Observable with the initial value of optValue if given or undefined if omitted.
|
|
111
|
-
* @param
|
|
112
|
-
* @returns
|
|
119
|
+
* @param optValue - The initial value to set.
|
|
120
|
+
* @returns The newly created observable.
|
|
113
121
|
*/
|
|
114
122
|
export declare function observable<T>(value: T): Observable<T>;
|
|
115
123
|
/**
|
|
116
124
|
* Creates a new Observable with an initial disposable value owned by this observable, e.g.
|
|
117
|
-
*
|
|
125
|
+
* ```
|
|
118
126
|
* const obs = obsHolder<D>(D.create(null, ...args));
|
|
127
|
+
* ```
|
|
119
128
|
*
|
|
120
|
-
* This is needed because using simply observable<D>(value) would not cause the observable to take
|
|
129
|
+
* This is needed because using simply `observable<D>(value)` would not cause the observable to take
|
|
121
130
|
* ownership of value (i.e. to dispose it later). This function is a less hacky equivalent to:
|
|
122
|
-
*
|
|
131
|
+
* ```
|
|
123
132
|
* const obs = observable<D>(null as any);
|
|
124
133
|
* D.create(obs, ...args);
|
|
134
|
+
* ```
|
|
125
135
|
*
|
|
126
|
-
* To allow nulls, use observable<D|null>(null)
|
|
136
|
+
* To allow nulls, use `observable<D|null>(null)`; then the obsHolder() constructor is not needed.
|
|
127
137
|
*/
|
|
128
138
|
export declare function obsHolder<T>(value: T & IDisposable): Observable<T>;
|
|
@@ -22,15 +22,17 @@
|
|
|
22
22
|
* dependency is created, and which observables the dependency connects.
|
|
23
23
|
*/
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.obsHolder = exports.observable = exports.Observable = exports.BaseObservable = exports.bundleChanges = void 0;
|
|
25
26
|
const _computed_queue_1 = require("./_computed_queue");
|
|
26
27
|
const dispose_1 = require("./dispose");
|
|
27
28
|
const emit_1 = require("./emit");
|
|
28
29
|
var _computed_queue_2 = require("./_computed_queue");
|
|
29
|
-
exports
|
|
30
|
+
Object.defineProperty(exports, "bundleChanges", { enumerable: true, get: function () { return _computed_queue_2.bundleChanges; } });
|
|
31
|
+
/**
|
|
32
|
+
* Base class for several variants of observable values.
|
|
33
|
+
*/
|
|
30
34
|
class BaseObservable {
|
|
31
|
-
|
|
32
|
-
* Internal constructor for an Observable. You should use observable() function instead.
|
|
33
|
-
*/
|
|
35
|
+
// Internal constructor for an Observable. You should use observable() function instead.
|
|
34
36
|
constructor(value) {
|
|
35
37
|
this._onChange = new emit_1.Emitter();
|
|
36
38
|
this._value = value;
|
|
@@ -38,13 +40,13 @@ class BaseObservable {
|
|
|
38
40
|
/**
|
|
39
41
|
* Returns the value of the observable. It is fast and does not create a subscription.
|
|
40
42
|
* (It is similar to knockout's peek()).
|
|
41
|
-
* @returns
|
|
43
|
+
* @returns The current value of the observable.
|
|
42
44
|
*/
|
|
43
45
|
get() { return this._value; }
|
|
44
46
|
/**
|
|
45
47
|
* Sets the value of the observable. If the value differs from the previously set one, then
|
|
46
48
|
* listeners to this observable will get called with (newValue, oldValue) as arguments.
|
|
47
|
-
* @param
|
|
49
|
+
* @param value - The new value to set.
|
|
48
50
|
*/
|
|
49
51
|
set(value) {
|
|
50
52
|
if (value !== this._value) {
|
|
@@ -59,13 +61,13 @@ class BaseObservable {
|
|
|
59
61
|
this._value = value;
|
|
60
62
|
this._onChange.emit(value, prev);
|
|
61
63
|
this._disposeOwned();
|
|
62
|
-
_computed_queue_1.compute();
|
|
64
|
+
(0, _computed_queue_1.compute)();
|
|
63
65
|
}
|
|
64
66
|
/**
|
|
65
67
|
* Adds a callback to listen to changes in the observable.
|
|
66
|
-
* @param
|
|
67
|
-
* @param
|
|
68
|
-
* @returns
|
|
68
|
+
* @param callback - Function, called on changes with (newValue, oldValue) arguments.
|
|
69
|
+
* @param optContext - Context for the function.
|
|
70
|
+
* @returns Listener object. Its dispose() method removes the callback.
|
|
69
71
|
*/
|
|
70
72
|
addListener(callback, optContext) {
|
|
71
73
|
return this._onChange.addListener(callback, optContext);
|
|
@@ -79,7 +81,7 @@ class BaseObservable {
|
|
|
79
81
|
/**
|
|
80
82
|
* Sets a single callback to be called when a listener is added or removed. It overwrites any
|
|
81
83
|
* previously-set such callback.
|
|
82
|
-
* @param
|
|
84
|
+
* @param changeCB - Function to call after a listener is added or
|
|
83
85
|
* removed. It's called with a boolean indicating whether this observable has any listeners.
|
|
84
86
|
* Pass in `null` to unset the callback. Note that it can be called multiple times in a row
|
|
85
87
|
* with hasListeners `true`.
|
|
@@ -90,6 +92,7 @@ class BaseObservable {
|
|
|
90
92
|
/**
|
|
91
93
|
* Used by subscriptions to keep track of dependencies. An observable that has dependnecies,
|
|
92
94
|
* such as a computed observable, would override this method.
|
|
95
|
+
* @internal
|
|
93
96
|
*/
|
|
94
97
|
_getDepItem() {
|
|
95
98
|
return null;
|
|
@@ -108,25 +111,31 @@ class BaseObservable {
|
|
|
108
111
|
isDisposed() {
|
|
109
112
|
return this._onChange.isDisposed();
|
|
110
113
|
}
|
|
114
|
+
/** @internal */
|
|
111
115
|
_disposeOwned(arg) { }
|
|
112
116
|
/**
|
|
113
117
|
* Allow derived classes to emit change events with an additional third argument describing the
|
|
114
118
|
* change. It always emits the event without checking for value equality.
|
|
119
|
+
* @internal
|
|
115
120
|
*/
|
|
116
121
|
_setWithArg(value, arg) {
|
|
117
122
|
const prev = this._value;
|
|
118
123
|
this._value = value;
|
|
119
124
|
this._onChange.emit(value, prev, arg);
|
|
120
125
|
this._disposeOwned(arg);
|
|
121
|
-
_computed_queue_1.compute();
|
|
126
|
+
(0, _computed_queue_1.compute)();
|
|
122
127
|
}
|
|
123
128
|
}
|
|
124
129
|
exports.BaseObservable = BaseObservable;
|
|
130
|
+
/**
|
|
131
|
+
* An Observable holds a value and allows subscribing to changes.
|
|
132
|
+
*/
|
|
125
133
|
class Observable extends BaseObservable {
|
|
126
134
|
constructor() {
|
|
127
135
|
super(...arguments);
|
|
128
136
|
this._owned = undefined;
|
|
129
137
|
}
|
|
138
|
+
/** @internal */
|
|
130
139
|
// See module-level holder() function below for documentation.
|
|
131
140
|
static holder(value) {
|
|
132
141
|
const obs = new Observable(value);
|
|
@@ -137,7 +146,7 @@ class Observable extends BaseObservable {
|
|
|
137
146
|
* Creates a new Observable with the given initial value, and owned by owner.
|
|
138
147
|
*/
|
|
139
148
|
static create(owner, value) {
|
|
140
|
-
return dispose_1.setDisposeOwner(owner, new Observable(value));
|
|
149
|
+
return (0, dispose_1.setDisposeOwner)(owner, new Observable(value));
|
|
141
150
|
}
|
|
142
151
|
/**
|
|
143
152
|
* The use an observable for a disposable object, use it a DisposableOwner:
|
|
@@ -153,6 +162,7 @@ class Observable extends BaseObservable {
|
|
|
153
162
|
this._owned = value;
|
|
154
163
|
return value;
|
|
155
164
|
}
|
|
165
|
+
/** @internal */
|
|
156
166
|
_disposeOwned() {
|
|
157
167
|
if (this._owned) {
|
|
158
168
|
this._owned.dispose();
|
|
@@ -163,8 +173,8 @@ class Observable extends BaseObservable {
|
|
|
163
173
|
exports.Observable = Observable;
|
|
164
174
|
/**
|
|
165
175
|
* Creates a new Observable with the initial value of optValue if given or undefined if omitted.
|
|
166
|
-
* @param
|
|
167
|
-
* @returns
|
|
176
|
+
* @param optValue - The initial value to set.
|
|
177
|
+
* @returns The newly created observable.
|
|
168
178
|
*/
|
|
169
179
|
function observable(value) {
|
|
170
180
|
return new Observable(value);
|
|
@@ -172,16 +182,18 @@ function observable(value) {
|
|
|
172
182
|
exports.observable = observable;
|
|
173
183
|
/**
|
|
174
184
|
* Creates a new Observable with an initial disposable value owned by this observable, e.g.
|
|
175
|
-
*
|
|
185
|
+
* ```
|
|
176
186
|
* const obs = obsHolder<D>(D.create(null, ...args));
|
|
187
|
+
* ```
|
|
177
188
|
*
|
|
178
|
-
* This is needed because using simply observable<D>(value) would not cause the observable to take
|
|
189
|
+
* This is needed because using simply `observable<D>(value)` would not cause the observable to take
|
|
179
190
|
* ownership of value (i.e. to dispose it later). This function is a less hacky equivalent to:
|
|
180
|
-
*
|
|
191
|
+
* ```
|
|
181
192
|
* const obs = observable<D>(null as any);
|
|
182
193
|
* D.create(obs, ...args);
|
|
194
|
+
* ```
|
|
183
195
|
*
|
|
184
|
-
* To allow nulls, use observable<D|null>(null)
|
|
196
|
+
* To allow nulls, use `observable<D|null>(null)`; then the obsHolder() constructor is not needed.
|
|
185
197
|
*/
|
|
186
198
|
function obsHolder(value) {
|
|
187
199
|
return Observable.holder(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable.js","sourceRoot":"","sources":["../../../lib/observable.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG
|
|
1
|
+
{"version":3,"file":"observable.js","sourceRoot":"","sources":["../../../lib/observable.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +1,32 @@
|
|
|
1
|
+
import { DepItem } from './_computed_queue';
|
|
2
|
+
import { Observable } from './observable';
|
|
3
|
+
import { ISubscribable, UseCB } from './subscribe';
|
|
1
4
|
/**
|
|
2
|
-
*
|
|
3
|
-
* (free of side-effects). A
|
|
5
|
+
* `PureComputed` is a variant of `Computed` suitable for use with a pure read function
|
|
6
|
+
* (free of side-effects). A `PureComputed` is only subscribed to its dependencies when something is
|
|
4
7
|
* subscribed to it. At other times, it is not subscribed to anything, and calls to `get()` will
|
|
5
|
-
* recompute its value each time by calling its read() function.
|
|
8
|
+
* recompute its value each time by calling its `read()` function.
|
|
6
9
|
*
|
|
7
|
-
* Its syntax and usage are otherwise exactly as for a
|
|
10
|
+
* Its syntax and usage are otherwise exactly as for a `Computed`.
|
|
8
11
|
*
|
|
9
|
-
* In addition to being cheaper when unused, a
|
|
12
|
+
* In addition to being cheaper when unused, a `PureComputed` also avoids leaking memory when
|
|
10
13
|
* unused (since it's not registered with dependencies), so it is not necessary to dispose it.
|
|
11
14
|
*/
|
|
12
|
-
import { DepItem } from './_computed_queue';
|
|
13
|
-
import { Observable } from './observable';
|
|
14
|
-
import { ISubscribable, UseCB } from './subscribe';
|
|
15
15
|
export declare class PureComputed<T> extends Observable<T> {
|
|
16
16
|
private _callback;
|
|
17
17
|
private _write;
|
|
18
18
|
private _sub;
|
|
19
19
|
private readonly _dependencies;
|
|
20
20
|
private _inCall;
|
|
21
|
-
/**
|
|
22
|
-
* Internal constructor for a PureComputed. You should use pureComputed() function instead.
|
|
23
|
-
*/
|
|
24
21
|
constructor(callback: (use: UseCB, ...args: any[]) => T, dependencies: ReadonlyArray<ISubscribable>);
|
|
22
|
+
/** @internal */
|
|
25
23
|
_getDepItem(): DepItem;
|
|
24
|
+
/** @override */
|
|
26
25
|
get(): T;
|
|
27
26
|
/**
|
|
28
27
|
* "Sets" the value of the pure computed by calling the write() callback if one was provided in
|
|
29
28
|
* the constructor. Throws an error if there was no such callback (not a "writable" computed).
|
|
30
|
-
* @param
|
|
29
|
+
* @param value - The value to pass to the write() callback.
|
|
31
30
|
*/
|
|
32
31
|
set(value: T): void;
|
|
33
32
|
/**
|
|
@@ -44,9 +43,7 @@ export declare class PureComputed<T> extends Observable<T> {
|
|
|
44
43
|
private _read;
|
|
45
44
|
}
|
|
46
45
|
/**
|
|
47
|
-
*
|
|
48
|
-
* type-checking when using it. We can only support a fixed number of argumnets (explicit
|
|
49
|
-
* dependencies), but 5 should almost always be enough.
|
|
46
|
+
* Creates and returns a new PureComputed. The interface is identical to that of a Computed.
|
|
50
47
|
*/
|
|
51
48
|
export declare function pureComputed<T>(cb: (use: UseCB) => T): PureComputed<T>;
|
|
52
49
|
export declare function pureComputed<A, T>(a: Observable<A>, cb: (use: UseCB, a: A) => T): PureComputed<T>;
|