grainjs 1.0.2 → 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 -71
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/PriorityQueue.d.ts +1 -1
- package/dist/cjs/lib/_computed_queue.js +3 -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 +5 -5
- package/dist/cjs/lib/binding.js.map +1 -1
- package/dist/cjs/lib/computed.d.ts +49 -28
- package/dist/cjs/lib/computed.js +38 -52
- 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 -80
- package/dist/cjs/lib/dispose.js.map +1 -1
- package/dist/cjs/lib/dom.d.ts +38 -18
- package/dist/cjs/lib/dom.js +44 -20
- package/dist/cjs/lib/dom.js.map +1 -1
- package/dist/cjs/lib/domComponent.d.ts +56 -48
- package/dist/cjs/lib/domComponent.js +66 -1
- package/dist/cjs/lib/domComponent.js.map +1 -1
- package/dist/cjs/lib/domComputed.d.ts +31 -21
- package/dist/cjs/lib/domComputed.js +14 -11
- package/dist/cjs/lib/domComputed.js.map +1 -1
- package/dist/cjs/lib/domDispose.d.ts +27 -12
- package/dist/cjs/lib/domDispose.js +26 -11
- package/dist/cjs/lib/domDispose.js.map +1 -1
- package/dist/cjs/lib/domForEach.d.ts +4 -3
- package/dist/cjs/lib/domForEach.js +10 -9
- package/dist/cjs/lib/domForEach.js.map +1 -1
- package/dist/cjs/lib/domImpl.d.ts +33 -10
- package/dist/cjs/lib/domImpl.js +28 -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 +88 -46
- package/dist/cjs/lib/domMethods.js.map +1 -1
- package/dist/cjs/lib/domevent.d.ts +87 -62
- package/dist/cjs/lib/domevent.js +84 -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 +67 -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 +6 -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 -55
- package/dist/cjs/lib/obsArray.js.map +1 -1
- package/dist/cjs/lib/observable.d.ts +25 -15
- package/dist/cjs/lib/observable.js +29 -18
- package/dist/cjs/lib/observable.js.map +1 -1
- package/dist/cjs/lib/pureComputed.d.ts +12 -15
- package/dist/cjs/lib/pureComputed.js +15 -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 +26 -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 -40
- package/dist/cjs/lib/subscribe.js.map +1 -1
- package/dist/cjs/lib/util.js +1 -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 +6 -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 +7 -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/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 +38 -18
- package/dist/esm/lib/dom.js.map +1 -1
- package/dist/esm/lib/domComponent.js +65 -0
- package/dist/esm/lib/domComponent.js.map +1 -1
- package/dist/esm/lib/domComputed.js +10 -7
- 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 +3 -2
- 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 +2146 -3062
- 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/computed.ts +56 -56
- package/lib/dispose.ts +110 -85
- package/lib/dom.ts +39 -20
- package/lib/domComponent.ts +66 -57
- package/lib/domComputed.ts +29 -19
- package/lib/domDispose.ts +28 -11
- package/lib/domForEach.ts +7 -3
- package/lib/domImpl.ts +30 -7
- package/lib/domMethods.ts +101 -46
- package/lib/domevent.ts +85 -60
- 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 +38 -27
package/dist/cjs/lib/domevent.js
CHANGED
|
@@ -1,44 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* domevent provides a way to listen to DOM events, similar to JQuery's `on()` function. Its
|
|
4
|
-
* methods are also exposed via the dom.js module, as `dom.on()`, etc.
|
|
5
|
-
*
|
|
6
|
-
* It is typically used as an argument to the dom() function:
|
|
7
|
-
*
|
|
8
|
-
* dom('div', dom.on('click', (event, elem) => { ... }));
|
|
9
|
-
*
|
|
10
|
-
* When the div is disposed, the listener is automatically removed.
|
|
11
|
-
*
|
|
12
|
-
* The underlying interface to listen to an event is this:
|
|
13
|
-
*
|
|
14
|
-
* let listener = dom.onElem(elem, 'click', (event, elem) => { ... });
|
|
15
|
-
*
|
|
16
|
-
* The callback is called with the event and the element to which it was attached. Unlike in
|
|
17
|
-
* JQuery, the callback's return value is ignored. Use event.stopPropagation() and
|
|
18
|
-
* event.preventDefault() explicitly if needed.
|
|
19
|
-
*
|
|
20
|
-
* To stop listening:
|
|
21
|
-
*
|
|
22
|
-
* listener.dispose();
|
|
23
|
-
*
|
|
24
|
-
* Disposing the listener returned by .onElem() is the only way to stop listening to an event. You
|
|
25
|
-
* can use autoDispose to stop listening automatically when subscribing in a Disposable object:
|
|
26
|
-
*
|
|
27
|
-
* this.autoDispose(domevent.onElem(document, 'mouseup', callback));
|
|
28
|
-
*
|
|
29
|
-
* To listen to descendants of an element matching the given selector (what JQuery calls
|
|
30
|
-
* "delegated events", see http://api.jquery.com/on/):
|
|
31
|
-
*
|
|
32
|
-
* dom('div', dom.onMatch('.selector', 'click', (event, elem) => { ... }));
|
|
33
|
-
* or
|
|
34
|
-
* let lis = domevent.onMatchElem(elem, '.selector', 'click', (event, el) => { ... });
|
|
35
|
-
*
|
|
36
|
-
* In this usage, the element passed to the callback will be a DOM element matching the given
|
|
37
|
-
* selector. If there are multiple matches, the callback is only called for the innermost one.
|
|
38
|
-
*
|
|
39
|
-
* If you need to remove the callback on first call, here's a useful pattern:
|
|
40
|
-
* let lis = domevent.onElem(elem, 'mouseup', e => { lis.dispose(); other_work(); });
|
|
41
|
-
*/
|
|
42
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
3
|
exports.onKeyDown = exports.onKeyPress = exports.onKeyElem = exports.onMatch = exports.onMatchElem = exports.on = exports.onElem = void 0;
|
|
44
4
|
function _findMatch(inner, outer, selector) {
|
|
@@ -76,43 +36,103 @@ class DomEventMatchListener extends DomEventListener {
|
|
|
76
36
|
}
|
|
77
37
|
}
|
|
78
38
|
/**
|
|
79
|
-
* Listen to a DOM event
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
39
|
+
* Listen to a DOM event, returning the listener object.
|
|
40
|
+
* ```ts
|
|
41
|
+
* const listener = dom.onElem(elem, 'click', (event, elem) => { ... });
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* To stop listening:
|
|
45
|
+
* ```ts
|
|
46
|
+
* listener.dispose();
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* Disposing the listener returned by `onElem()` is the only way to stop listening to an event. You
|
|
50
|
+
* can use `autoDispose` to stop listening automatically when subscribing in a `Disposable` object:
|
|
51
|
+
* ```ts
|
|
52
|
+
* this.autoDispose(domevent.onElem(document, 'mouseup', callback));
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* If you need "once" semantics, i.e. to remove the callback on first call, here's a useful pattern:
|
|
56
|
+
* ```ts
|
|
57
|
+
* const lis = domevent.onElem(elem, 'mouseup', e => { lis.dispose(); other_work(); });
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* @param elem - DOM Element to listen to.
|
|
61
|
+
* @param eventType - Event type to listen for (e.g. `'click'`).
|
|
62
|
+
* @param callback - Callback to call as `callback(event, elem)`, where elem is `elem`.
|
|
63
|
+
* @param options - `useCapture: boolean`: Add the listener in the capture phase. This should very
|
|
85
64
|
* rarely be useful (e.g. JQuery doesn't even offer it as an option).
|
|
86
|
-
* @returns
|
|
65
|
+
* @returns Listener object whose `.dispose()` method will remove the event listener.
|
|
87
66
|
*/
|
|
88
67
|
function onElem(elem, eventType, callback, { useCapture = false } = {}) {
|
|
89
68
|
return new DomEventListener(elem, eventType, callback, useCapture);
|
|
90
69
|
}
|
|
91
70
|
exports.onElem = onElem;
|
|
71
|
+
/**
|
|
72
|
+
* Listen to a DOM event. It is typically used as an argument to the `dom()` function:
|
|
73
|
+
* ```ts
|
|
74
|
+
* dom('div', dom.on('click', (event, elem) => { ... }));
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* When the div is disposed, the listener is automatically removed.
|
|
78
|
+
*
|
|
79
|
+
* The callback is called with the event and the element to which it was attached. Unlike in, say,
|
|
80
|
+
* JQuery, the callback's return value is ignored. Use `event.stopPropagation()` and
|
|
81
|
+
* `event.preventDefault()` explicitly if needed.
|
|
82
|
+
*
|
|
83
|
+
* To listen to descendants of an element matching the given selector (what JQuery calls
|
|
84
|
+
* "delegated events", see http://api.jquery.com/on/), see [`onMatch`](#onMatch).
|
|
85
|
+
*
|
|
86
|
+
* @param eventType - Event type to listen for (e.g. `'click'`).
|
|
87
|
+
* @param callback - Callback to call as `callback(event, elem)`, where `elem` is the element this
|
|
88
|
+
* listener is attached to.
|
|
89
|
+
* @param options - `useCapture?: boolean`: Add the listener in the capture phase.
|
|
90
|
+
*/
|
|
92
91
|
function on(eventType, callback, { useCapture = false } = {}) {
|
|
93
92
|
// tslint:disable-next-line:no-unused-expression
|
|
94
93
|
return (elem) => { new DomEventListener(elem, eventType, callback, useCapture); };
|
|
95
94
|
}
|
|
96
95
|
exports.on = on;
|
|
97
96
|
/**
|
|
98
|
-
* Listen to a DOM event on descendants of the given elem matching the given selector.
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
97
|
+
* Listen to a DOM event on descendants of the given elem matching the given selector.
|
|
98
|
+
*
|
|
99
|
+
* ```ts
|
|
100
|
+
* const let lis = domevent.onMatchElem(elem, '.selector', 'click', (event, el) => { ... });
|
|
101
|
+
* ```
|
|
102
|
+
*
|
|
103
|
+
* @param elem - DOM Element to whose descendants to listen.
|
|
104
|
+
* @param selector - CSS selector string to filter elements that trigger this event.
|
|
102
105
|
* JQuery calls it "delegated events" (http://api.jquery.com/on/). The callback will only be
|
|
103
106
|
* called when the event occurs for an element matching the given selector. If there are
|
|
104
107
|
* multiple elements matching the selector, the callback is only called for the innermost one.
|
|
105
|
-
* @param
|
|
106
|
-
* @param
|
|
108
|
+
* @param eventType - Event type to listen for (e.g. 'click').
|
|
109
|
+
* @param callback - Callback to call as `callback(event, elem)`, where elem is a
|
|
107
110
|
* descendent of `elem` which matches `selector`.
|
|
108
|
-
* @param
|
|
109
|
-
*
|
|
110
|
-
* @returns {Object} Listener object whose .dispose() method will remove the event listener.
|
|
111
|
+
* @param options - `useCapture?: boolean`: Add the listener in the capture phase.
|
|
112
|
+
* @returns Listener object whose `.dispose()` method will remove the event listener.
|
|
111
113
|
*/
|
|
112
114
|
function onMatchElem(elem, selector, eventType, callback, { useCapture = false } = {}) {
|
|
113
115
|
return new DomEventMatchListener(elem, eventType, callback, useCapture, selector);
|
|
114
116
|
}
|
|
115
117
|
exports.onMatchElem = onMatchElem;
|
|
118
|
+
/**
|
|
119
|
+
* Listen to a DOM event on descendants of the given element matching the given selector.
|
|
120
|
+
*
|
|
121
|
+
* This is similar to JQuery's [delegated events](https://api.jquery.com/on/#direct-and-delegated-events)
|
|
122
|
+
*
|
|
123
|
+
* ```ts
|
|
124
|
+
* dom('div', dom.onMatch('.selector', 'click', (event, elem) => { ... }));
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* In this usage, the element passed to the callback will be a DOM element matching the given
|
|
128
|
+
* selector. If there are multiple matches, the callback is only called for the innermost one.
|
|
129
|
+
*
|
|
130
|
+
* @param selector - CSS selector string to filter elements that trigger this event.
|
|
131
|
+
* @param eventType - Event type to listen for (e.g. `'click'`).
|
|
132
|
+
* @param callback - Callback to call as `callback(event, elem)`, where `elem` is an element
|
|
133
|
+
* matching `selector`.
|
|
134
|
+
* @param options - `useCapture?: boolean`: Add the listener in the capture phase.
|
|
135
|
+
*/
|
|
116
136
|
function onMatch(selector, eventType, callback, { useCapture = false } = {}) {
|
|
117
137
|
// tslint:disable-next-line:no-unused-expression
|
|
118
138
|
return (elem) => { new DomEventMatchListener(elem, eventType, callback, useCapture, selector); };
|
|
@@ -122,8 +142,6 @@ exports.onMatch = onMatch;
|
|
|
122
142
|
* Listen to key events (typically 'keydown' or 'keypress'), with specified per-key callbacks.
|
|
123
143
|
* Key names are listed at https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values
|
|
124
144
|
*
|
|
125
|
-
* Methods onKeyPress() and onKeyDown() are intended to be used as arguments to dom().
|
|
126
|
-
*
|
|
127
145
|
* By default, handled events are stopped from bubbling with stopPropagation() and
|
|
128
146
|
* preventDefault(). If, however, you register a key with a "$" suffix (i.e. "Enter$" instead of
|
|
129
147
|
* "Enter"), then the event is allowed to bubble normally.
|
|
@@ -132,7 +150,7 @@ exports.onMatch = onMatch;
|
|
|
132
150
|
* to allow this element to receive keyboard events.
|
|
133
151
|
*
|
|
134
152
|
* For example:
|
|
135
|
-
*
|
|
153
|
+
* ```
|
|
136
154
|
* dom('input', ...
|
|
137
155
|
* dom.onKeyDown({
|
|
138
156
|
* Enter: (e, elem) => console.log("Enter pressed"),
|
|
@@ -140,6 +158,7 @@ exports.onMatch = onMatch;
|
|
|
140
158
|
* Delete$: (e, elem) => console.log("Delete pressed, will bubble"),
|
|
141
159
|
* })
|
|
142
160
|
* )
|
|
161
|
+
* ```
|
|
143
162
|
*/
|
|
144
163
|
function onKeyElem(elem, evType, keyHandlers) {
|
|
145
164
|
if (!(elem.tabIndex >= 0)) { // If tabIndex property is undefined or -1,
|
|
@@ -158,10 +177,16 @@ function onKeyElem(elem, evType, keyHandlers) {
|
|
|
158
177
|
});
|
|
159
178
|
}
|
|
160
179
|
exports.onKeyElem = onKeyElem;
|
|
180
|
+
/**
|
|
181
|
+
* Add listeners to `"keypress"` events. See [`onKeyElem`](#onKeyElem) for details.
|
|
182
|
+
*/
|
|
161
183
|
function onKeyPress(keyHandlers) {
|
|
162
184
|
return (elem) => { onKeyElem(elem, 'keypress', keyHandlers); };
|
|
163
185
|
}
|
|
164
186
|
exports.onKeyPress = onKeyPress;
|
|
187
|
+
/**
|
|
188
|
+
* Add listeners to `"keydown"` events. See [`onKeyElem`](#onKeyElem) for details.
|
|
189
|
+
*/
|
|
165
190
|
function onKeyDown(keyHandlers) {
|
|
166
191
|
return (elem) => { onKeyElem(elem, 'keydown', keyHandlers); };
|
|
167
192
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domevent.js","sourceRoot":"","sources":["../../../lib/domevent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"domevent.js","sourceRoot":"","sources":["../../../lib/domevent.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/lib/emit.d.ts
CHANGED
|
@@ -1,29 +1,12 @@
|
|
|
1
|
+
export type ListenerCB<T> = (this: T, ...args: any[]) => void;
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* This is similar to Backbone events, with more focus on efficiency. Both inserting and removing
|
|
6
|
-
* listeners is constant time.
|
|
7
|
-
*
|
|
8
|
-
* To create an emitter:
|
|
9
|
-
* let emitter = new Emitter();
|
|
10
|
-
*
|
|
11
|
-
* To add a listener:
|
|
12
|
-
* let listener = fooEmitter.addListener(callback);
|
|
13
|
-
* To remove a listener:
|
|
14
|
-
* listener.dispose();
|
|
15
|
-
*
|
|
16
|
-
* The only way to remove a listener is to dispose the Listener object returned by addListener().
|
|
17
|
-
* You can often use autoDispose to do this automatically when subscribing in a constructor:
|
|
18
|
-
* this.autoDispose(fooEmitter.addListener(this.onFoo, this));
|
|
19
|
-
*
|
|
20
|
-
* To emit an event, call emit() with any number of arguments:
|
|
21
|
-
* emitter.emit("hello", "world");
|
|
3
|
+
* A callback that listens to _changes_ in the Emitter listeners. This is mainly used for
|
|
4
|
+
* internal purposes.
|
|
22
5
|
*/
|
|
23
|
-
export
|
|
24
|
-
export declare type ChangeCB = (hasListeners: boolean) => void;
|
|
6
|
+
export type ChangeCB = (hasListeners: boolean) => void;
|
|
25
7
|
/**
|
|
26
8
|
* This is an implementation of a doubly-linked list, with just the minimal functionality we need.
|
|
9
|
+
* @internal
|
|
27
10
|
*/
|
|
28
11
|
export declare class LLink {
|
|
29
12
|
protected _next: LLink | null;
|
|
@@ -34,18 +17,62 @@ export declare class LLink {
|
|
|
34
17
|
protected _removeNode(node: LLink): void;
|
|
35
18
|
protected _disposeList(): void;
|
|
36
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* An `Emitter` emits events to a list of listeners. Listeners are
|
|
22
|
+
* simply functions to call, and "emitting an event" just calls those functions.
|
|
23
|
+
*
|
|
24
|
+
* This is similar to Backbone events, with more focus on efficiency. Both inserting and removing
|
|
25
|
+
* listeners is constant time.
|
|
26
|
+
*
|
|
27
|
+
* To create an emitter:
|
|
28
|
+
* ```ts
|
|
29
|
+
* const emitter = new Emitter();
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* To add a listener:
|
|
33
|
+
* ```ts
|
|
34
|
+
* const listener = fooEmitter.addListener(callback);
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* To remove a listener:
|
|
38
|
+
* ```ts
|
|
39
|
+
* listener.dispose();
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* The only way to remove a listener is to dispose the `Listener` object returned by `addListener()`.
|
|
43
|
+
* You can often use autoDispose to do this automatically when subscribing in a constructor:
|
|
44
|
+
* ```ts
|
|
45
|
+
* this.autoDispose(fooEmitter.addListener(this.onFoo, this));
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* To emit an event, call `emit()` with any number of arguments:
|
|
49
|
+
* ```ts
|
|
50
|
+
* emitter.emit("hello", "world");
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @privateRemarks
|
|
54
|
+
*
|
|
55
|
+
* Note about a possible alternative implementation.
|
|
56
|
+
*
|
|
57
|
+
* We could implement the same interface using an array of listeners. Certain issues apply, in
|
|
58
|
+
* particular with removing listeners from inside emit(), and in ensuring that removals are
|
|
59
|
+
* constant time on average. Such an implementation was attempted and timed. The result is that
|
|
60
|
+
* compared to the linked-list implementation here, add/remove combination could be made nearly
|
|
61
|
+
* twice faster (on average), while emit and add/remove/emit are consistently slightly slower.
|
|
62
|
+
*
|
|
63
|
+
* The implementation here was chosen based on those timings, and as the simpler one. For example,
|
|
64
|
+
* on one setup (macbook, node4, 5-listener queue), add+remove take 0.1us, while add+remove+emit
|
|
65
|
+
* take 3.82us. (In array-based implementation with same set up, add+remove is 0.06us, while
|
|
66
|
+
* add+remove+emit is 4.80us.)
|
|
67
|
+
*/
|
|
37
68
|
export declare class Emitter extends LLink {
|
|
38
69
|
private _changeCB;
|
|
39
70
|
private _changeCBContext;
|
|
40
|
-
/**
|
|
41
|
-
* Constructs an Emitter object.
|
|
42
|
-
*/
|
|
43
|
-
constructor();
|
|
44
71
|
/**
|
|
45
72
|
* Adds a listening callback to the list of functions to call on emit().
|
|
46
|
-
* @param
|
|
47
|
-
* @param
|
|
48
|
-
* @returns
|
|
73
|
+
* @param callback - Function to call.
|
|
74
|
+
* @param optContext - Context for the function.
|
|
75
|
+
* @returns Listener object. Its dispose() method removes the callback from the list.
|
|
49
76
|
*/
|
|
50
77
|
addListener<T>(callback: ListenerCB<T>, optContext?: T): Listener;
|
|
51
78
|
/**
|
|
@@ -54,7 +81,7 @@ export declare class Emitter extends LLink {
|
|
|
54
81
|
emit(...args: any[]): void;
|
|
55
82
|
/**
|
|
56
83
|
* Sets the single callback that would get called when a listener is added or removed.
|
|
57
|
-
* @param
|
|
84
|
+
* @param changeCB - Function to call after a listener is added or
|
|
58
85
|
* removed. It's called with a boolean indicating whether this Emitter has any listeners.
|
|
59
86
|
* Pass in `null` to unset the callback. Note that it can be called multiple times in a row
|
|
60
87
|
* with hasListeners `true`.
|
|
@@ -62,6 +89,7 @@ export declare class Emitter extends LLink {
|
|
|
62
89
|
setChangeCB(changeCB: ChangeCB, optContext?: any): void;
|
|
63
90
|
/**
|
|
64
91
|
* Helper used by Listener class, but not intended for public usage.
|
|
92
|
+
* @internal
|
|
65
93
|
*/
|
|
66
94
|
_triggerChangeCB(): void;
|
|
67
95
|
/**
|
|
@@ -75,14 +103,16 @@ export declare class Emitter extends LLink {
|
|
|
75
103
|
dispose(): void;
|
|
76
104
|
}
|
|
77
105
|
/**
|
|
78
|
-
* Listener object wraps a callback added to an Emitter, allowing for O(1) removal when the
|
|
79
|
-
* listener is disposed.
|
|
106
|
+
* The `Listener` object wraps a callback added to an Emitter, allowing for O(1) removal when the
|
|
107
|
+
* listener is disposed. It implements `IDisposable`.
|
|
80
108
|
*/
|
|
81
109
|
export declare class Listener extends LLink {
|
|
82
110
|
private emitter;
|
|
83
111
|
private callback;
|
|
84
112
|
private context?;
|
|
113
|
+
/** @internal */
|
|
85
114
|
static callAll(begin: LLink, end: LLink, args: any[]): void;
|
|
86
115
|
constructor(emitter: Emitter, callback: ListenerCB<any>, context?: any);
|
|
116
|
+
/** @internal */
|
|
87
117
|
dispose(): void;
|
|
88
118
|
}
|
package/dist/cjs/lib/emit.js
CHANGED
|
@@ -1,44 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* emit.js implements an Emitter class which emits events to a list of listeners. Listeners are
|
|
4
|
-
* simply functions to call, and "emitting an event" just calls those functions.
|
|
5
|
-
*
|
|
6
|
-
* This is similar to Backbone events, with more focus on efficiency. Both inserting and removing
|
|
7
|
-
* listeners is constant time.
|
|
8
|
-
*
|
|
9
|
-
* To create an emitter:
|
|
10
|
-
* let emitter = new Emitter();
|
|
11
|
-
*
|
|
12
|
-
* To add a listener:
|
|
13
|
-
* let listener = fooEmitter.addListener(callback);
|
|
14
|
-
* To remove a listener:
|
|
15
|
-
* listener.dispose();
|
|
16
|
-
*
|
|
17
|
-
* The only way to remove a listener is to dispose the Listener object returned by addListener().
|
|
18
|
-
* You can often use autoDispose to do this automatically when subscribing in a constructor:
|
|
19
|
-
* this.autoDispose(fooEmitter.addListener(this.onFoo, this));
|
|
20
|
-
*
|
|
21
|
-
* To emit an event, call emit() with any number of arguments:
|
|
22
|
-
* emitter.emit("hello", "world");
|
|
23
|
-
*/
|
|
24
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
3
|
exports.Listener = exports.Emitter = exports.LLink = void 0;
|
|
26
|
-
// Note about a possible alternative implementation.
|
|
27
|
-
//
|
|
28
|
-
// We could implement the same interface using an array of listeners. Certain issues apply, in
|
|
29
|
-
// particular with removing listeners from inside emit(), and in ensuring that removals are
|
|
30
|
-
// constant time on average. Such an implementation was attempted and timed. The result is that
|
|
31
|
-
// compared to the linked-list implementation here, add/remove combination could be made nearly
|
|
32
|
-
// twice faster (on average), while emit and add/remove/emit are consistently slightly slower.
|
|
33
|
-
//
|
|
34
|
-
// The implementation here was chosen based on those timings, and as the simpler one. For example,
|
|
35
|
-
// on one setup (macbook, node4, 5-listener queue), add+remove take 0.1us, while add+remove+emit
|
|
36
|
-
// take 3.82us. (In array-based implementation with same set up, add+remove is 0.06us, while
|
|
37
|
-
// add+remove+emit is 4.80us.)
|
|
38
|
-
// The private property name to hold next/prev pointers.
|
|
39
4
|
function _noop() { }
|
|
40
5
|
/**
|
|
41
6
|
* This is an implementation of a doubly-linked list, with just the minimal functionality we need.
|
|
7
|
+
* @internal
|
|
42
8
|
*/
|
|
43
9
|
class LLink {
|
|
44
10
|
constructor() {
|
|
@@ -67,7 +33,7 @@ class LLink {
|
|
|
67
33
|
node._prev = node._next = null;
|
|
68
34
|
}
|
|
69
35
|
_disposeList() {
|
|
70
|
-
let node = this;
|
|
36
|
+
let node = this; // eslint-disable-line @typescript-eslint/no-this-alias
|
|
71
37
|
let next = node._next;
|
|
72
38
|
while (next !== null) {
|
|
73
39
|
node._next = node._prev = null;
|
|
@@ -77,20 +43,65 @@ class LLink {
|
|
|
77
43
|
}
|
|
78
44
|
}
|
|
79
45
|
exports.LLink = LLink;
|
|
46
|
+
/**
|
|
47
|
+
* An `Emitter` emits events to a list of listeners. Listeners are
|
|
48
|
+
* simply functions to call, and "emitting an event" just calls those functions.
|
|
49
|
+
*
|
|
50
|
+
* This is similar to Backbone events, with more focus on efficiency. Both inserting and removing
|
|
51
|
+
* listeners is constant time.
|
|
52
|
+
*
|
|
53
|
+
* To create an emitter:
|
|
54
|
+
* ```ts
|
|
55
|
+
* const emitter = new Emitter();
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* To add a listener:
|
|
59
|
+
* ```ts
|
|
60
|
+
* const listener = fooEmitter.addListener(callback);
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* To remove a listener:
|
|
64
|
+
* ```ts
|
|
65
|
+
* listener.dispose();
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* The only way to remove a listener is to dispose the `Listener` object returned by `addListener()`.
|
|
69
|
+
* You can often use autoDispose to do this automatically when subscribing in a constructor:
|
|
70
|
+
* ```ts
|
|
71
|
+
* this.autoDispose(fooEmitter.addListener(this.onFoo, this));
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* To emit an event, call `emit()` with any number of arguments:
|
|
75
|
+
* ```ts
|
|
76
|
+
* emitter.emit("hello", "world");
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @privateRemarks
|
|
80
|
+
*
|
|
81
|
+
* Note about a possible alternative implementation.
|
|
82
|
+
*
|
|
83
|
+
* We could implement the same interface using an array of listeners. Certain issues apply, in
|
|
84
|
+
* particular with removing listeners from inside emit(), and in ensuring that removals are
|
|
85
|
+
* constant time on average. Such an implementation was attempted and timed. The result is that
|
|
86
|
+
* compared to the linked-list implementation here, add/remove combination could be made nearly
|
|
87
|
+
* twice faster (on average), while emit and add/remove/emit are consistently slightly slower.
|
|
88
|
+
*
|
|
89
|
+
* The implementation here was chosen based on those timings, and as the simpler one. For example,
|
|
90
|
+
* on one setup (macbook, node4, 5-listener queue), add+remove take 0.1us, while add+remove+emit
|
|
91
|
+
* take 3.82us. (In array-based implementation with same set up, add+remove is 0.06us, while
|
|
92
|
+
* add+remove+emit is 4.80us.)
|
|
93
|
+
*/
|
|
80
94
|
class Emitter extends LLink {
|
|
81
|
-
/**
|
|
82
|
-
* Constructs an Emitter object.
|
|
83
|
-
*/
|
|
84
95
|
constructor() {
|
|
85
|
-
super();
|
|
96
|
+
super(...arguments);
|
|
86
97
|
this._changeCB = _noop;
|
|
87
98
|
this._changeCBContext = undefined;
|
|
88
99
|
}
|
|
89
100
|
/**
|
|
90
101
|
* Adds a listening callback to the list of functions to call on emit().
|
|
91
|
-
* @param
|
|
92
|
-
* @param
|
|
93
|
-
* @returns
|
|
102
|
+
* @param callback - Function to call.
|
|
103
|
+
* @param optContext - Context for the function.
|
|
104
|
+
* @returns Listener object. Its dispose() method removes the callback from the list.
|
|
94
105
|
*/
|
|
95
106
|
addListener(callback, optContext) {
|
|
96
107
|
return new Listener(this, callback, optContext);
|
|
@@ -103,7 +114,7 @@ class Emitter extends LLink {
|
|
|
103
114
|
}
|
|
104
115
|
/**
|
|
105
116
|
* Sets the single callback that would get called when a listener is added or removed.
|
|
106
|
-
* @param
|
|
117
|
+
* @param changeCB - Function to call after a listener is added or
|
|
107
118
|
* removed. It's called with a boolean indicating whether this Emitter has any listeners.
|
|
108
119
|
* Pass in `null` to unset the callback. Note that it can be called multiple times in a row
|
|
109
120
|
* with hasListeners `true`.
|
|
@@ -114,6 +125,7 @@ class Emitter extends LLink {
|
|
|
114
125
|
}
|
|
115
126
|
/**
|
|
116
127
|
* Helper used by Listener class, but not intended for public usage.
|
|
128
|
+
* @internal
|
|
117
129
|
*/
|
|
118
130
|
_triggerChangeCB() {
|
|
119
131
|
this._changeCB.call(this._changeCBContext, this.hasListeners());
|
|
@@ -136,10 +148,18 @@ class Emitter extends LLink {
|
|
|
136
148
|
}
|
|
137
149
|
exports.Emitter = Emitter;
|
|
138
150
|
/**
|
|
139
|
-
* Listener object wraps a callback added to an Emitter, allowing for O(1) removal when the
|
|
140
|
-
* listener is disposed.
|
|
151
|
+
* The `Listener` object wraps a callback added to an Emitter, allowing for O(1) removal when the
|
|
152
|
+
* listener is disposed. It implements `IDisposable`.
|
|
141
153
|
*/
|
|
142
154
|
class Listener extends LLink {
|
|
155
|
+
/** @internal */
|
|
156
|
+
static callAll(begin, end, args) {
|
|
157
|
+
while (begin !== end) {
|
|
158
|
+
const lis = begin;
|
|
159
|
+
lis.callback.call(lis.context, ...args);
|
|
160
|
+
begin = lis._next;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
143
163
|
constructor(emitter, callback, context) {
|
|
144
164
|
super();
|
|
145
165
|
this.emitter = emitter;
|
|
@@ -148,13 +168,7 @@ class Listener extends LLink {
|
|
|
148
168
|
this._insertBefore(emitter, this);
|
|
149
169
|
emitter._triggerChangeCB();
|
|
150
170
|
}
|
|
151
|
-
|
|
152
|
-
while (begin !== end) {
|
|
153
|
-
const lis = begin;
|
|
154
|
-
lis.callback.call(lis.context, ...args);
|
|
155
|
-
begin = lis._next;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
171
|
+
/** @internal */
|
|
158
172
|
dispose() {
|
|
159
173
|
if (this.isDisposed()) {
|
|
160
174
|
return;
|
package/dist/cjs/lib/emit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../lib/emit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../lib/emit.ts"],"names":[],"mappings":";;;AAAA,SAAS,KAAK,KAAe,CAAC;AAU9B;;;GAGG;AACH,MAAa,KAAK;IAIhB;QAHU,UAAK,GAAe,IAAI,CAAC;QACzB,UAAK,GAAe,IAAI,CAAC;QAGjC,2FAA2F;QAC3F,2DAA2D;QAC3D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAEM,UAAU;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IACrB,CAAC;IAES,aAAa,CAAC,IAAW,EAAE,IAAW;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAES,WAAW,CAAC,IAAW;QAC/B,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,KAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;SAChC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACjC,CAAC;IAES,YAAY;QACpB,IAAI,IAAI,GAAU,IAAI,CAAC,CAAK,uDAAuD;QACnF,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACtB,OAAO,IAAI,KAAK,IAAI,EAAE;YACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAC/B,IAAI,GAAG,IAAI,CAAC;YACZ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;SACnB;IACH,CAAC;CACF;AAxCD,sBAwCC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAa,OAAQ,SAAQ,KAAK;IAAlC;;QACU,cAAS,GAAa,KAAK,CAAC;QAC5B,qBAAgB,GAAQ,SAAS,CAAC;IAuD5C,CAAC;IArDC;;;;;OAKG;IACI,WAAW,CAAI,QAAuB,EAAE,UAAc;QAC3D,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,GAAG,IAAW;QACxB,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;OAMG;IACI,WAAW,CAAC,QAAkB,EAAE,UAAgB;QACrD,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,KAAK,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;IACrC,CAAC;IAED;;;OAGG;IACI,gBAAgB;QACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACI,YAAY;QACjB,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACI,OAAO;QACZ,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACpC,CAAC;CACF;AAzDD,0BAyDC;AAED;;;GAGG;AACH,MAAa,QAAS,SAAQ,KAAK;IACjC,gBAAgB;IACT,MAAM,CAAC,OAAO,CAAC,KAAY,EAAE,GAAU,EAAE,IAAW;QACzD,OAAO,KAAK,KAAK,GAAG,EAAE;YACpB,MAAM,GAAG,GAAG,KAAiB,CAAC;YAC9B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YACxC,KAAK,GAAG,GAAG,CAAC,KAAM,CAAC;SACpB;IACH,CAAC;IAED,YAAoB,OAAgB,EAChB,QAAyB,EACzB,OAAa;QAC/B,KAAK,EAAE,CAAC;QAHU,YAAO,GAAP,OAAO,CAAS;QAChB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,YAAO,GAAP,OAAO,CAAM;QAE/B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAC7B,CAAC;IAED,gBAAgB;IACT,OAAO;QACZ,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YAAE,OAAO;SAAE;QAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAClC,CAAC;CACF;AAxBD,4BAwBC"}
|
package/dist/cjs/lib/kowrap.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export interface IKnockoutReadObservable<T> {
|
|
|
32
32
|
subscribe(callback: (newValue: T) => void, target?: any, event?: "change"): any;
|
|
33
33
|
getSubscriptionsCount(): number;
|
|
34
34
|
}
|
|
35
|
-
export
|
|
35
|
+
export type InferKoType<KObs extends IKnockoutReadObservable<any>> = KObs extends {
|
|
36
36
|
peek(): infer T;
|
|
37
37
|
} ? T : never;
|
|
38
38
|
/**
|
|
@@ -44,18 +44,21 @@ export declare type InferKoType<KObs extends IKnockoutReadObservable<any>> = KOb
|
|
|
44
44
|
*/
|
|
45
45
|
export declare function fromKo<KObs extends IKnockoutObservable<any>>(koObs: KObs): Observable<InferKoType<KObs>>;
|
|
46
46
|
/**
|
|
47
|
-
* An Observable that wraps a Knockout observable, created via fromKo()
|
|
47
|
+
* An Observable that wraps a Knockout observable, created via `fromKo()`. It keeps minimal overhead
|
|
48
48
|
* when unused by only subscribing to the wrapped observable while it itself has subscriptions.
|
|
49
49
|
*
|
|
50
|
-
* This way, when unused, the only reference is from the wrapper to the wrapped object. KoWrapObs
|
|
50
|
+
* This way, when unused, the only reference is from the wrapper to the wrapped object. `KoWrapObs`
|
|
51
51
|
* should not be disposed; its lifetime is tied to that of the wrapped object.
|
|
52
52
|
*/
|
|
53
53
|
export declare class KoWrapObs<T> extends Observable<T> {
|
|
54
54
|
private _koObs;
|
|
55
55
|
private _koSub;
|
|
56
56
|
constructor(_koObs: IKnockoutObservable<T>);
|
|
57
|
+
/** @override */
|
|
57
58
|
get(): T;
|
|
59
|
+
/** @override */
|
|
58
60
|
set(value: T): void;
|
|
61
|
+
/** @override */
|
|
59
62
|
dispose(): void;
|
|
60
63
|
}
|
|
61
64
|
export interface IKnockoutModule {
|
package/dist/cjs/lib/kowrap.js
CHANGED
|
@@ -41,10 +41,10 @@ function fromKo(koObs) {
|
|
|
41
41
|
}
|
|
42
42
|
exports.fromKo = fromKo;
|
|
43
43
|
/**
|
|
44
|
-
* An Observable that wraps a Knockout observable, created via fromKo()
|
|
44
|
+
* An Observable that wraps a Knockout observable, created via `fromKo()`. It keeps minimal overhead
|
|
45
45
|
* when unused by only subscribing to the wrapped observable while it itself has subscriptions.
|
|
46
46
|
*
|
|
47
|
-
* This way, when unused, the only reference is from the wrapper to the wrapped object. KoWrapObs
|
|
47
|
+
* This way, when unused, the only reference is from the wrapper to the wrapped object. `KoWrapObs`
|
|
48
48
|
* should not be disposed; its lifetime is tied to that of the wrapped object.
|
|
49
49
|
*/
|
|
50
50
|
class KoWrapObs extends observable_1.Observable {
|
|
@@ -65,8 +65,11 @@ class KoWrapObs extends observable_1.Observable {
|
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
|
+
/** @override */
|
|
68
69
|
get() { return this._koObs.peek(); }
|
|
69
|
-
|
|
70
|
+
/** @override */
|
|
71
|
+
set(value) { (0, observable_1.bundleChanges)(() => this._koObs(value)); }
|
|
72
|
+
/** @override */
|
|
70
73
|
dispose() { throw new Error("KoWrapObs should not be disposed"); }
|
|
71
74
|
}
|
|
72
75
|
exports.KoWrapObs = KoWrapObs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kowrap.js","sourceRoot":"","sources":["../../../lib/kowrap.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAEH,6CAA6C;AAC7C,6CAAuD;AA0BvD,MAAM,cAAc,GAAuD,IAAI,OAAO,EAAE,CAAC;AACzF,MAAM,YAAY,GAAuD,IAAI,OAAO,EAAE,CAAC;AAEvF;;;;;;GAMG;AACH,SAAgB,MAAM,CAAwC,KAAW;IACvE,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;AAClG,CAAC;AAFD,wBAEC;AAED;;;;;;GAMG;AACH,MAAa,SAAa,SAAQ,uBAAa;IAG7C,YAAoB,MAA8B;QAChD,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QADH,WAAM,GAAN,MAAM,CAAwB;QAF1C,WAAM,GAAQ,IAAI,CAAC;QAIzB,IAAI,CAAC,mBAAmB,CAAC,CAAC,YAAY,EAAE,EAAE;YACxC,IAAI,CAAC,YAAY,EAAE;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;aACpB;iBAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACvB,0FAA0F;gBAC1F,wDAAwD;gBACvD,IAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;aACvE;QACH,CAAC,CAAC,CAAC;IACL,CAAC;
|
|
1
|
+
{"version":3,"file":"kowrap.js","sourceRoot":"","sources":["../../../lib/kowrap.ts"],"names":[],"mappings":"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"}
|