grainjs 0.1.0 → 1.0.2

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 (164) hide show
  1. package/README.md +54 -9
  2. package/dist/cjs/index.d.ts +6 -2
  3. package/dist/cjs/index.js +24 -17
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/lib/PriorityQueue.d.ts +1 -1
  6. package/dist/cjs/lib/PriorityQueue.js +1 -0
  7. package/dist/cjs/lib/PriorityQueue.js.map +1 -1
  8. package/dist/cjs/lib/_computed_queue.d.ts +18 -0
  9. package/dist/cjs/lib/_computed_queue.js +6 -1
  10. package/dist/cjs/lib/_computed_queue.js.map +1 -1
  11. package/dist/cjs/lib/binding.d.ts +16 -10
  12. package/dist/cjs/lib/binding.js +22 -27
  13. package/dist/cjs/lib/binding.js.map +1 -1
  14. package/dist/cjs/lib/browserGlobals.d.ts +4 -1
  15. package/dist/cjs/lib/browserGlobals.js +2 -0
  16. package/dist/cjs/lib/browserGlobals.js.map +1 -1
  17. package/dist/cjs/lib/computed.d.ts +11 -7
  18. package/dist/cjs/lib/computed.js +16 -0
  19. package/dist/cjs/lib/computed.js.map +1 -1
  20. package/dist/cjs/lib/dispose.d.ts +106 -14
  21. package/dist/cjs/lib/dispose.js +76 -11
  22. package/dist/cjs/lib/dispose.js.map +1 -1
  23. package/dist/cjs/lib/dom.d.ts +21 -17
  24. package/dist/cjs/lib/dom.js +33 -26
  25. package/dist/cjs/lib/dom.js.map +1 -1
  26. package/dist/cjs/lib/domComponent.d.ts +71 -0
  27. package/dist/cjs/lib/domComponent.js +15 -0
  28. package/dist/cjs/lib/domComponent.js.map +1 -0
  29. package/dist/cjs/lib/domComputed.d.ts +89 -0
  30. package/dist/cjs/lib/domComputed.js +92 -0
  31. package/dist/cjs/lib/domComputed.js.map +1 -0
  32. package/dist/cjs/lib/{_domDispose.d.ts → domDispose.d.ts} +12 -2
  33. package/dist/cjs/lib/{_domDispose.js → domDispose.js} +21 -8
  34. package/dist/cjs/lib/domDispose.js.map +1 -0
  35. package/dist/cjs/lib/{_domForEach.d.ts → domForEach.d.ts} +2 -2
  36. package/dist/cjs/lib/domForEach.js +72 -0
  37. package/dist/cjs/lib/domForEach.js.map +1 -0
  38. package/dist/cjs/lib/{_domImpl.d.ts → domImpl.d.ts} +15 -12
  39. package/dist/cjs/lib/{_domImpl.js → domImpl.js} +23 -6
  40. package/dist/cjs/lib/domImpl.js.map +1 -0
  41. package/dist/cjs/lib/{_domMethods.d.ts → domMethods.d.ts} +27 -62
  42. package/dist/cjs/lib/{_domMethods.js → domMethods.js} +21 -76
  43. package/dist/cjs/lib/domMethods.js.map +1 -0
  44. package/dist/cjs/lib/domevent.d.ts +32 -21
  45. package/dist/cjs/lib/domevent.js +33 -12
  46. package/dist/cjs/lib/domevent.js.map +1 -1
  47. package/dist/cjs/lib/emit.d.ts +25 -2
  48. package/dist/cjs/lib/emit.js +3 -1
  49. package/dist/cjs/lib/emit.js.map +1 -1
  50. package/dist/cjs/lib/kowrap.d.ts +45 -3
  51. package/dist/cjs/lib/kowrap.js +93 -10
  52. package/dist/cjs/lib/kowrap.js.map +1 -1
  53. package/dist/cjs/lib/obsArray.d.ts +8 -8
  54. package/dist/cjs/lib/obsArray.js +1 -0
  55. package/dist/cjs/lib/obsArray.js.map +1 -1
  56. package/dist/cjs/lib/observable.d.ts +6 -1
  57. package/dist/cjs/lib/observable.js +11 -2
  58. package/dist/cjs/lib/observable.js.map +1 -1
  59. package/dist/cjs/lib/pureComputed.d.ts +3 -3
  60. package/dist/cjs/lib/pureComputed.js +2 -1
  61. package/dist/cjs/lib/pureComputed.js.map +1 -1
  62. package/dist/cjs/lib/styled.d.ts +76 -11
  63. package/dist/cjs/lib/styled.js +55 -23
  64. package/dist/cjs/lib/styled.js.map +1 -1
  65. package/dist/cjs/lib/subscribe.d.ts +15 -6
  66. package/dist/cjs/lib/subscribe.js +6 -2
  67. package/dist/cjs/lib/subscribe.js.map +1 -1
  68. package/dist/cjs/lib/util.js +1 -0
  69. package/dist/cjs/lib/util.js.map +1 -1
  70. package/dist/cjs/lib/widgets/input.d.ts +2 -2
  71. package/dist/cjs/lib/widgets/input.js +2 -2
  72. package/dist/cjs/lib/widgets/input.js.map +1 -1
  73. package/dist/cjs/lib/widgets/select.d.ts +1 -1
  74. package/dist/cjs/lib/widgets/select.js +1 -0
  75. package/dist/cjs/lib/widgets/select.js.map +1 -1
  76. package/dist/esm/index.js +6 -2
  77. package/dist/esm/index.js.map +1 -1
  78. package/dist/esm/lib/PriorityQueue.js.map +1 -1
  79. package/dist/esm/lib/_computed_queue.js +5 -1
  80. package/dist/esm/lib/_computed_queue.js.map +1 -1
  81. package/dist/esm/lib/binding.js +20 -27
  82. package/dist/esm/lib/binding.js.map +1 -1
  83. package/dist/esm/lib/browserGlobals.js +1 -0
  84. package/dist/esm/lib/browserGlobals.js.map +1 -1
  85. package/dist/esm/lib/computed.js +15 -0
  86. package/dist/esm/lib/computed.js.map +1 -1
  87. package/dist/esm/lib/dispose.js +74 -11
  88. package/dist/esm/lib/dispose.js.map +1 -1
  89. package/dist/esm/lib/dom.js +21 -17
  90. package/dist/esm/lib/dom.js.map +1 -1
  91. package/dist/esm/lib/domComponent.js +11 -0
  92. package/dist/esm/lib/domComponent.js.map +1 -0
  93. package/dist/esm/lib/domComputed.js +84 -0
  94. package/dist/esm/lib/domComputed.js.map +1 -0
  95. package/dist/esm/lib/{_domDispose.js → domDispose.js} +19 -8
  96. package/dist/esm/lib/domDispose.js.map +1 -0
  97. package/dist/esm/lib/domForEach.js +68 -0
  98. package/dist/esm/lib/domForEach.js.map +1 -0
  99. package/dist/esm/lib/{_domImpl.js → domImpl.js} +20 -4
  100. package/dist/esm/lib/domImpl.js.map +1 -0
  101. package/dist/esm/lib/{_domMethods.js → domMethods.js} +8 -63
  102. package/dist/esm/lib/domMethods.js.map +1 -0
  103. package/dist/esm/lib/domevent.js +30 -11
  104. package/dist/esm/lib/domevent.js.map +1 -1
  105. package/dist/esm/lib/emit.js +2 -1
  106. package/dist/esm/lib/emit.js.map +1 -1
  107. package/dist/esm/lib/kowrap.js +90 -10
  108. package/dist/esm/lib/kowrap.js.map +1 -1
  109. package/dist/esm/lib/obsArray.js.map +1 -1
  110. package/dist/esm/lib/observable.js +9 -1
  111. package/dist/esm/lib/observable.js.map +1 -1
  112. package/dist/esm/lib/pureComputed.js +1 -1
  113. package/dist/esm/lib/pureComputed.js.map +1 -1
  114. package/dist/esm/lib/styled.js +52 -22
  115. package/dist/esm/lib/styled.js.map +1 -1
  116. package/dist/esm/lib/subscribe.js +5 -2
  117. package/dist/esm/lib/subscribe.js.map +1 -1
  118. package/dist/esm/lib/util.js.map +1 -1
  119. package/dist/esm/lib/widgets/input.js +1 -2
  120. package/dist/esm/lib/widgets/input.js.map +1 -1
  121. package/dist/esm/lib/widgets/select.js.map +1 -1
  122. package/dist/grain-full.debug.js +1627 -1222
  123. package/dist/grain-full.min.js +1 -1
  124. package/dist/grain-full.min.js.map +1 -1
  125. package/index.ts +6 -2
  126. package/lib/_computed_queue.ts +7 -1
  127. package/lib/binding.ts +33 -28
  128. package/lib/browserGlobals.ts +3 -1
  129. package/lib/computed.ts +37 -7
  130. package/lib/dispose.ts +81 -33
  131. package/lib/dom.ts +24 -18
  132. package/lib/domComponent.ts +89 -0
  133. package/lib/domComputed.ts +146 -0
  134. package/lib/{_domDispose.ts → domDispose.ts} +26 -8
  135. package/lib/{_domForEach.ts → domForEach.ts} +12 -11
  136. package/lib/{_domImpl.ts → domImpl.ts} +36 -30
  137. package/lib/{_domMethods.ts → domMethods.ts} +33 -103
  138. package/lib/domevent.ts +59 -22
  139. package/lib/emit.ts +2 -1
  140. package/lib/kowrap.ts +109 -11
  141. package/lib/obsArray.ts +2 -2
  142. package/lib/observable.ts +10 -2
  143. package/lib/pureComputed.ts +7 -6
  144. package/lib/styled.ts +65 -39
  145. package/lib/subscribe.ts +24 -8
  146. package/lib/widgets/input.ts +9 -7
  147. package/lib/widgets/select.ts +3 -3
  148. package/package.json +41 -42
  149. package/dist/cjs/lib/_domComponent.d.ts +0 -84
  150. package/dist/cjs/lib/_domComponent.js +0 -160
  151. package/dist/cjs/lib/_domComponent.js.map +0 -1
  152. package/dist/cjs/lib/_domDispose.js.map +0 -1
  153. package/dist/cjs/lib/_domForEach.js +0 -71
  154. package/dist/cjs/lib/_domForEach.js.map +0 -1
  155. package/dist/cjs/lib/_domImpl.js.map +0 -1
  156. package/dist/cjs/lib/_domMethods.js.map +0 -1
  157. package/dist/esm/lib/_domComponent.js +0 -155
  158. package/dist/esm/lib/_domComponent.js.map +0 -1
  159. package/dist/esm/lib/_domDispose.js.map +0 -1
  160. package/dist/esm/lib/_domForEach.js +0 -68
  161. package/dist/esm/lib/_domForEach.js.map +0 -1
  162. package/dist/esm/lib/_domImpl.js.map +0 -1
  163. package/dist/esm/lib/_domMethods.js.map +0 -1
  164. package/lib/_domComponent.ts +0 -167
package/README.md CHANGED
@@ -15,7 +15,7 @@ GrainJS is in part inspired by [React](https://reactjs.org/), but based on obser
15
15
  virtual dom, and with a convenient way to build DOM without JSX. It is lighter weight, and has
16
16
  less magic happening under the covers.
17
17
 
18
- The focus is on performance and conciseness. The library has no dependencies and is only 25K
18
+ The focus is on performance and conciseness. The library has no dependencies and is only 31K.
19
19
  minified.
20
20
 
21
21
  ## Installation
@@ -24,18 +24,63 @@ minified.
24
24
  npm install --save grainjs
25
25
  ```
26
26
 
27
- ## Usage
28
-
29
- Until proper documentation pages are created, see documentation in individual code files under the
30
- `lib` directory.
31
-
32
- Example:
27
+ ## Basic Example
33
28
 
34
29
  ```typescript
35
30
  const name = observable("");
36
31
 
37
32
  dom.update(document.body,
38
- input(name, {onInput: true}, {type: "text", placeholder: "Your name..."),
39
- dom("div.name-class", "Hello, ", dom.text(name), "!"),
33
+ dom('input', {type: 'text', placeholder: 'Enter your name'},
34
+ dom.on('input', (ev, elem) => name.set(elem.value)),
35
+ ),
36
+ dom('div', 'Hello, ',
37
+ dom.text((use) => use(name).toUpperCase() || 'Stranger'),
38
+ '!',
39
+ ),
40
40
  );
41
41
  ```
42
+
43
+ # Documentation
44
+
45
+ At a basic level, GrainJS allows you to describe DOM structure in one place, using Javascript (or
46
+ TypeScript), and to keep the dynamic aspects of it separated into variables called "observables".
47
+ These observables serve as the model of the UI; other code can update them to cause UI to update,
48
+ without knowing the details of the DOM construction.
49
+
50
+ In addition, the library provides approaches to create and dispose resources (important for
51
+ long-lived single-page applications), and an assortment of other related tools.
52
+
53
+ - [DOM & Observables](docs/basics.md)
54
+ - [DOM Construction](docs/basics.md#dom-construction)
55
+ - [Observables](docs/basics.md#observables)
56
+ - [Computed Observables](docs/basics.md#computed-observables)
57
+ - [DOM Bindings](docs/basics.md#dom-bindings)
58
+ - [Conditional DOM](docs/basics.md#conditional-dom)
59
+ - [Repeating DOM](docs/basics.md#repeating-dom)
60
+ - [DOM Events](docs/basics.md#dom-events)
61
+ - [Styling DOM](docs/basics.md#styling-dom)
62
+
63
+ - [Disposables](docs/dispose.md)
64
+ - [Class Disposable](docs/dispose.md#class-disposable)
65
+ - [Taking Ownership](docs/dispose.md#taking-ownership)
66
+ - [Holders](docs/dispose.md#holders)
67
+ - [Further Notes](docs/dispose.md#further-notes)
68
+
69
+ - [More on Observables](docs/more-observables.md)
70
+ - [Subscribe](docs/more-observables.md#subscribe)
71
+ - [Disposable Values](docs/more-observables.md#disposable-values)
72
+ - [ObsArray](docs/more-observables.md#obsarray)
73
+ - [PureComputed](docs/more-observables.md#purecomputed)
74
+ - [Order of Evaluation](docs/more-observables.md#order-of-evaluation)
75
+
76
+ - [Miscellaneous](docs/misc.md)
77
+ - [Event Emitters](docs/misc.md#event-emitters)
78
+ - [Disposing DOM](docs/misc.md#disposing-dom)
79
+ - [DOM Components](docs/misc.md#dom-components)
80
+ - [Functional Components](docs/misc.md#functional-components)
81
+ - [Knockout Integration](docs/misc.md#knockout-integration)
82
+
83
+ - [Reference](docs/reference.md)
84
+ - [DOM Reference](docs/reference.md#dom-reference)
85
+ - [Disposables Reference](docs/reference.md#disposables-reference)
86
+ - [Observables Reference](docs/reference.md#observables-reference)
@@ -1,10 +1,14 @@
1
- export { Computed, computed } from './lib/computed';
1
+ export * from './lib/binding';
2
+ export * from './lib/computed';
2
3
  export * from './lib/dispose';
3
4
  export * from './lib/dom';
4
5
  export * from './lib/emit';
5
6
  export * from './lib/kowrap';
6
7
  export * from './lib/obsArray';
7
8
  export * from './lib/observable';
9
+ export * from './lib/pureComputed';
8
10
  export * from './lib/styled';
9
- export { ISubscribable, Subscription, subscribe } from './lib/subscribe';
11
+ export * from './lib/subscribe';
10
12
  export * from './lib/util';
13
+ export * from './lib/widgets/input';
14
+ export * from './lib/widgets/select';
package/dist/cjs/index.js CHANGED
@@ -1,20 +1,27 @@
1
1
  "use strict";
2
- function __export(m) {
3
- for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
4
- }
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
5
12
  Object.defineProperty(exports, "__esModule", { value: true });
6
- var computed_1 = require("./lib/computed");
7
- exports.Computed = computed_1.Computed;
8
- exports.computed = computed_1.computed;
9
- __export(require("./lib/dispose"));
10
- __export(require("./lib/dom"));
11
- __export(require("./lib/emit"));
12
- __export(require("./lib/kowrap"));
13
- __export(require("./lib/obsArray"));
14
- __export(require("./lib/observable"));
15
- __export(require("./lib/styled"));
16
- var subscribe_1 = require("./lib/subscribe");
17
- exports.Subscription = subscribe_1.Subscription;
18
- exports.subscribe = subscribe_1.subscribe;
19
- __export(require("./lib/util"));
13
+ __exportStar(require("./lib/binding"), exports);
14
+ __exportStar(require("./lib/computed"), exports);
15
+ __exportStar(require("./lib/dispose"), exports);
16
+ __exportStar(require("./lib/dom"), exports);
17
+ __exportStar(require("./lib/emit"), exports);
18
+ __exportStar(require("./lib/kowrap"), exports);
19
+ __exportStar(require("./lib/obsArray"), exports);
20
+ __exportStar(require("./lib/observable"), exports);
21
+ __exportStar(require("./lib/pureComputed"), exports);
22
+ __exportStar(require("./lib/styled"), exports);
23
+ __exportStar(require("./lib/subscribe"), exports);
24
+ __exportStar(require("./lib/util"), exports);
25
+ __exportStar(require("./lib/widgets/input"), exports);
26
+ __exportStar(require("./lib/widgets/select"), exports);
20
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":";;;;;AAAA,2CAAkD;AAA1C,8BAAA,QAAQ,CAAA;AAAE,8BAAA,QAAQ,CAAA;AAC1B,mCAA8B;AAC9B,+BAA0B;AAC1B,gCAA2B;AAC3B,kCAA6B;AAC7B,oCAA+B;AAC/B,sCAAiC;AACjC,kCAA6B;AAC7B,6CAAuE;AAAhD,mCAAA,YAAY,CAAA;AAAE,gCAAA,SAAS,CAAA;AAC9C,gCAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gDAA8B;AAC9B,iDAA+B;AAC/B,gDAA8B;AAC9B,4CAA0B;AAC1B,6CAA2B;AAC3B,+CAA6B;AAC7B,iDAA+B;AAC/B,mDAAiC;AACjC,qDAAmC;AACnC,+CAA6B;AAC7B,kDAAgC;AAChC,6CAA2B;AAC3B,sDAAoC;AACpC,uDAAqC"}
@@ -11,7 +11,7 @@ export declare class PriorityQueue<T> {
11
11
  private _isPrior;
12
12
  private _items;
13
13
  constructor(_isPrior: IsPriorFunc<T>);
14
- readonly size: number;
14
+ get size(): number;
15
15
  push(item: T): void;
16
16
  peek(): T | undefined;
17
17
  pop(): T | undefined;
@@ -8,6 +8,7 @@
8
8
  * returns the most-prior element.
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.PriorityQueue = void 0;
11
12
  class PriorityQueue {
12
13
  constructor(_isPrior) {
13
14
  this._isPrior = _isPrior;
@@ -1 +1 @@
1
- {"version":3,"file":"PriorityQueue.js","sourceRoot":"","sources":["../../../lib/PriorityQueue.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAIH;IAME,YAAoB,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;QAL5C,4FAA4F;QAC5F,8FAA8F;QAC9F,8CAA8C;QACtC,WAAM,GAAQ,EAAE,CAAC;IAEsB,CAAC;IAEhD,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjD,IAAI,CAAC,IAAO;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC,OAAO,MAAM,GAAG,CAAC,EAAE;YACjB,wFAAwF;YACxF,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAG,iCAAiC;YACrE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBAC1B,MAAM;aACP;YACD,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;YACxB,MAAM,GAAG,MAAM,CAAC;SACjB;QACD,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACvB,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAEM,GAAG;QACR,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;SAAE;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAExB,gDAAgD;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,OAAO,OAAO,GAAG,IAAI,EAAE;YACrB,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,CAAC,QAAQ,GAAG,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7E,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE;gBACjC,MAAM;aACP;YACD,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,GAAG,OAAO,CAAC;YACjB,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;SAC/B;QACD,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAzDD,sCAyDC"}
1
+ {"version":3,"file":"PriorityQueue.js","sourceRoot":"","sources":["../../../lib/PriorityQueue.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAIH,MAAa,aAAa;IAMxB,YAAoB,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;QAL5C,4FAA4F;QAC5F,8FAA8F;QAC9F,8CAA8C;QACtC,WAAM,GAAQ,EAAE,CAAC;IAEsB,CAAC;IAEhD,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjD,IAAI,CAAC,IAAO;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC,OAAO,MAAM,GAAG,CAAC,EAAE;YACjB,wFAAwF;YACxF,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAG,iCAAiC;YACrE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBAC1B,MAAM;aACP;YACD,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;YACxB,MAAM,GAAG,MAAM,CAAC;SACjB;QACD,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACvB,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAEM,GAAG;QACR,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;SAAE;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAExB,gDAAgD;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,OAAO,OAAO,GAAG,IAAI,EAAE;YACrB,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,CAAC,QAAQ,GAAG,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7E,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE;gBACjC,MAAM;aACP;YACD,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,GAAG,OAAO,CAAC;YACjB,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;SAC/B;QACD,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAzDD,sCAyDC"}
@@ -1,3 +1,20 @@
1
+ /**
2
+ * This module supports computed observables, organizing them into a priority queue, so that
3
+ * computeds can be updated just once after multiple bundled changes.
4
+ *
5
+ * This module is for internal use only (hence the leading underscore in the name). The only
6
+ * function useful outside is exposed via the `observable` module as `observable.bundleChanges()`.
7
+ *
8
+ * Changes may come together because multiple observables are changed synchronously, or because
9
+ * multiple computeds depend on a single changed observable. In either case, if a computed depends
10
+ * on multiple observables that are being changed, we want it to just get updated once when the
11
+ * changes are complete.
12
+ *
13
+ * This is done by maintaining a _priority in each computed, where greater values get evaluated
14
+ * later (computed with greater values depend on those with smaller values). When a computed needs
15
+ * updating, it adds itself to the queue using enqueue() method. At the end of an observable.set()
16
+ * call, or of bundleChanges() call, the queue gets processed in order of _priority.
17
+ */
1
18
  /**
2
19
  * DepItem is an item in a dependency relationship. It may depend on other DepItems. It is used
3
20
  * for subscriptions and computed observables.
@@ -8,6 +25,7 @@ export declare class DepItem {
8
25
  private _enqueued;
9
26
  private _callback;
10
27
  private _context?;
28
+ private _creation;
11
29
  /**
12
30
  * Callback should call depItem.useDep(dep) for each DepInput it depends on.
13
31
  */
@@ -17,6 +17,7 @@
17
17
  * call, or of bundleChanges() call, the queue gets processed in order of _priority.
18
18
  */
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.bundleChanges = exports.compute = exports._getPriority = exports.DepItem = void 0;
20
21
  const PriorityQueue_1 = require("./PriorityQueue");
21
22
  /**
22
23
  * DepItem is an item in a dependency relationship. It may depend on other DepItems. It is used
@@ -29,11 +30,13 @@ class DepItem {
29
30
  constructor(callback, optContext) {
30
31
  this._priority = 0;
31
32
  this._enqueued = false;
33
+ // Order of creation, used for ordering items at same priority.
34
+ this._creation = ++_nextCreationNum;
32
35
  this._callback = callback;
33
36
  this._context = optContext;
34
37
  }
35
38
  static isPrioritySmaller(a, b) {
36
- return a._priority < b._priority;
39
+ return a._priority < b._priority || (a._priority === b._priority && a._creation < b._creation);
37
40
  }
38
41
  /**
39
42
  * Mark depItem as a dependency of this DepItem. The argument may be null to indicate a leaf (an
@@ -65,6 +68,8 @@ class DepItem {
65
68
  exports.DepItem = DepItem;
66
69
  // The main compute queue.
67
70
  const queue = new PriorityQueue_1.PriorityQueue(DepItem.isPrioritySmaller);
71
+ // Counter for creation order, used to create a stable ordering of DepItems at same priority.
72
+ let _nextCreationNum = 0;
68
73
  // Array to keep track of items recomputed during this call to compute(). It could be a local
69
74
  // variable in compute(), but is made global to minimize allocations.
70
75
  const _seen = [];
@@ -1 +1 @@
1
- {"version":3,"file":"_computed_queue.js","sourceRoot":"","sources":["../../../lib/_computed_queue.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;AAEH,mDAA8C;AAE9C;;;GAGG;AACH;IAUE;;OAEG;IACH,YAAY,QAAoB,EAAE,UAAmB;QAR7C,cAAS,GAAW,CAAC,CAAC;QACtB,cAAS,GAAY,KAAK,CAAC;QAQjC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC7B,CAAC;IAfM,MAAM,CAAC,iBAAiB,CAAC,CAAU,EAAE,CAAU;QACpD,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;IACnC,CAAC;IAeD;;;OAGG;IACI,MAAM,CAAC,OAAqB;QACjC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YACvB,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;SACxB;IACH,CAAC;IAED;;OAEG;IACI,SAAS;QACd,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClB;IACH,CAAC;CACF;AA9CD,0BA8CC;AAED,0BAA0B;AAC1B,MAAM,KAAK,GAAG,IAAI,6BAAa,CAAU,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEpE,6FAA6F;AAC7F,qEAAqE;AACrE,MAAM,KAAK,GAAU,EAAE,CAAC;AAExB,kEAAkE;AAClE,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB;;GAEG;AACH,sBAA6B,GAAQ;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAHD,oCAGC;AAED;;;;GAIG;AACH;IACE,IAAI,WAAW,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE;QACvC,4FAA4F;QAC5F,WAAW,EAAE,CAAC;QACd,IAAI;YACF,2EAA2E;YAC3E,GAAG;gBACD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,IAAI,CAAC,SAAS,EAAE,CAAC;aAClB,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE;SAC1B;gBAAS;YACR,2FAA2F;YAC3F,0DAA0D;YAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aACxB;YACD,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACjB,WAAW,EAAE,CAAC;SACf;KACF;AACH,CAAC;AArBD,0BAqBC;AAED;;;;;;;GAOG;AACH,uBAAiC,IAAa;IAC5C,IAAI;QACF,WAAW,EAAE,CAAC;QACd,OAAO,IAAI,EAAE,CAAC;KACf;YAAS;QACR,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;KACX;AACH,CAAC;AARD,sCAQC"}
1
+ {"version":3,"file":"_computed_queue.js","sourceRoot":"","sources":["../../../lib/_computed_queue.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAEH,mDAA8C;AAE9C;;;GAGG;AACH,MAAa,OAAO;IAalB;;OAEG;IACH,YAAY,QAAoB,EAAE,UAAmB;QAX7C,cAAS,GAAW,CAAC,CAAC;QACtB,cAAS,GAAY,KAAK,CAAC;QAInC,+DAA+D;QACvD,cAAS,GAAW,EAAE,gBAAgB,CAAC;QAM7C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC7B,CAAC;IAlBM,MAAM,CAAC,iBAAiB,CAAC,CAAU,EAAE,CAAU;QACpD,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IACjG,CAAC;IAkBD;;;OAGG;IACI,MAAM,CAAC,OAAqB;QACjC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YACvB,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;SACxB;IACH,CAAC;IAED;;OAEG;IACI,SAAS;QACd,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClB;IACH,CAAC;CACF;AAjDD,0BAiDC;AAED,0BAA0B;AAC1B,MAAM,KAAK,GAAG,IAAI,6BAAa,CAAU,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEpE,6FAA6F;AAC7F,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB,6FAA6F;AAC7F,qEAAqE;AACrE,MAAM,KAAK,GAAU,EAAE,CAAC;AAExB,kEAAkE;AAClE,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB;;GAEG;AACH,SAAgB,YAAY,CAAC,GAAQ;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAHD,oCAGC;AAED;;;;GAIG;AACH,SAAgB,OAAO;IACrB,IAAI,WAAW,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE;QACvC,4FAA4F;QAC5F,WAAW,EAAE,CAAC;QACd,IAAI;YACF,2EAA2E;YAC3E,GAAG;gBACD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,IAAI,CAAC,SAAS,EAAE,CAAC;aAClB,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE;SAC1B;gBAAS;YACR,2FAA2F;YAC3F,0DAA0D;YAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aACxB;YACD,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACjB,WAAW,EAAE,CAAC;SACf;KACF;AACH,CAAC;AArBD,0BAqBC;AAED;;;;;;;GAOG;AACH,SAAgB,aAAa,CAAI,IAAa;IAC5C,IAAI;QACF,WAAW,EAAE,CAAC;QACd,OAAO,IAAI,EAAE,CAAC;KACf;YAAS;QACR,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;KACX;AACH,CAAC;AARD,sCAQC"}
@@ -1,13 +1,13 @@
1
+ /**
2
+ * binding.ts offers a convenient subscribe() function that creates a binding to an observable, a
3
+ * a plain value, or a function from which it builds a computed.
4
+ */
1
5
  import { IDisposable } from './dispose';
2
- import { Observable } from './observable';
3
- import { UseCB } from './subscribe';
4
- export declare type BindableValue<T> = Observable<T> | ComputedCallback<T> | T | IKnockoutObservable<T>;
5
- export declare type ComputedCallback<T> = (use: UseCB, ...args: any[]) => T;
6
- export interface IKnockoutObservable<T> {
7
- (): T;
8
- peek(): T;
9
- subscribe(callback: (newValue: T) => void, target?: any, event?: "change"): IDisposable;
10
- }
6
+ import { IKnockoutReadObservable, InferKoType } from './kowrap';
7
+ import { BaseObservable } from './observable';
8
+ import { UseCBOwner } from './subscribe';
9
+ export declare type BindableValue<T> = BaseObservable<T> | ComputedCallback<T> | T | IKnockoutReadObservable<T>;
10
+ export declare type ComputedCallback<T> = (use: UseCBOwner, ...args: any[]) => T;
11
11
  /**
12
12
  * Subscribes a callback to valueObs, which may be one a plain value, an observable, a knockout
13
13
  * observable, or a function. If a function, it's used to create a computed() and will be called
@@ -19,4 +19,10 @@ export interface IKnockoutObservable<T> {
19
19
  *
20
20
  * Returns an object which should be disposed to remove the created subscriptions, or null.
21
21
  */
22
- export declare function subscribe<T>(valueObs: BindableValue<T>, callback: (newVal: T, oldVal?: T) => void): IDisposable | null;
22
+ export declare function subscribeBindable<KObs extends IKnockoutReadObservable<any>>(valueObs: KObs, callback: (val: InferKoType<KObs>) => void): IDisposable | null;
23
+ export declare function subscribeBindable<T>(valueObs: BindableValue<T>, callback: (val: T) => void): IDisposable | null;
24
+ /**
25
+ * Subscribes a callback to valueObs (which may be a value, observable, or function) using
26
+ * subscribe(), and disposes the subscription with the passed-in element.
27
+ */
28
+ export declare function subscribeElem<T>(elem: Node, valueObs: BindableValue<T>, callback: (newVal: T, oldVal?: T) => void): void;
@@ -4,32 +4,19 @@
4
4
  * a plain value, or a function from which it builds a computed.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.subscribeElem = exports.subscribeBindable = void 0;
7
8
  const computed_1 = require("./computed");
9
+ const domDispose_1 = require("./domDispose");
8
10
  const observable_1 = require("./observable");
9
- /**
10
- * Subscribes a callback to valueObs, which may be one a plain value, an observable, a knockout
11
- * observable, or a function. If a function, it's used to create a computed() and will be called
12
- * with a context function `use`, allowing it to depend on other observable values (see
13
- * documentation for `computed`).
14
- *
15
- * In all cases, `callback(newValue, oldValue)` is called immediately and whenever the value
16
- * changes. On the initial call, oldValue is undefined.
17
- *
18
- * Returns an object which should be disposed to remove the created subscriptions, or null.
19
- */
20
- function subscribe(valueObs, callback) {
11
+ const subscribe_1 = require("./subscribe");
12
+ function subscribeBindable(valueObs, callback) {
21
13
  // A plain function (to make a computed from), or a knockout observable.
22
14
  if (typeof valueObs === 'function') {
23
15
  // Knockout observable.
24
16
  const koValue = valueObs;
25
17
  if (typeof koValue.peek === 'function') {
26
- let savedValue = koValue.peek();
27
- const sub = koValue.subscribe((val) => {
28
- const old = savedValue;
29
- savedValue = val;
30
- callback(val, old);
31
- });
32
- callback(savedValue, undefined);
18
+ const sub = koValue.subscribe((val) => callback(val));
19
+ callback(koValue.peek());
33
20
  return sub;
34
21
  }
35
22
  // Function from which to make a computed. Note that this is also reasonable:
@@ -37,18 +24,26 @@ function subscribe(valueObs, callback) {
37
24
  // The difference is that when valueObs() evaluates to unchanged value, callback would be
38
25
  // called in the version above, but not in the version below.
39
26
  const comp = computed_1.computed(valueObs);
40
- comp.addListener(callback);
41
- callback(comp.get(), undefined);
27
+ comp.addListener((val) => callback(val));
28
+ callback(comp.get());
42
29
  return comp; // Disposing this will dispose its one listener.
43
30
  }
44
31
  // An observable.
45
- if (valueObs instanceof observable_1.Observable) {
46
- const sub = valueObs.addListener(callback);
47
- callback(valueObs.get(), undefined);
48
- return sub;
32
+ if (valueObs instanceof observable_1.BaseObservable) {
33
+ // Use subscribe() rather than addListener(), so that bundling of changes (implicit and with
34
+ // bundleChanges()) is respected. This matters when callback also uses observables.
35
+ return subscribe_1.subscribe(valueObs, (use, val) => callback(val));
49
36
  }
50
- callback(valueObs, undefined);
37
+ callback(valueObs);
51
38
  return null;
52
39
  }
53
- exports.subscribe = subscribe;
40
+ exports.subscribeBindable = subscribeBindable;
41
+ /**
42
+ * Subscribes a callback to valueObs (which may be a value, observable, or function) using
43
+ * subscribe(), and disposes the subscription with the passed-in element.
44
+ */
45
+ function subscribeElem(elem, valueObs, callback) {
46
+ domDispose_1.autoDisposeElem(elem, subscribeBindable(valueObs, callback));
47
+ }
48
+ exports.subscribeElem = subscribeElem;
54
49
  //# sourceMappingURL=binding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../../lib/binding.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,yCAAoC;AAEpC,6CAAwC;AAaxC;;;;;;;;;;GAUG;AACH,mBAA6B,QAA0B,EAC1B,QAAyC;IACpE,wEAAwE;IACxE,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;QAClC,uBAAuB;QACvB,MAAM,OAAO,GAAG,QAAkC,CAAC;QACnD,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;YACtC,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAM,EAAE,EAAE;gBACvC,MAAM,GAAG,GAAG,UAAU,CAAC;gBACvB,UAAU,GAAG,GAAG,CAAC;gBACjB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAChC,OAAO,GAAG,CAAC;SACZ;QAED,6EAA6E;QAC7E,0DAA0D;QAC1D,yFAAyF;QACzF,6DAA6D;QAC7D,MAAM,IAAI,GAAG,mBAAQ,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,CAAM,gDAAgD;KACnE;IAED,iBAAiB;IACjB,IAAI,QAAQ,YAAY,uBAAU,EAAE;QAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC;KACZ;IAED,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC;AApCD,8BAoCC"}
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../../lib/binding.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,yCAAoC;AAEpC,6CAA6C;AAE7C,6CAA4C;AAC5C,2CAAkD;AAsBlD,SAAgB,iBAAiB,CAC7B,QAA0B,EAAE,QAA0B;IACxD,wEAAwE;IACxE,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;QAClC,uBAAuB;QACvB,MAAM,OAAO,GAAG,QAAsC,CAAC;QACvD,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;YACtC,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,OAAO,GAAG,CAAC;SACZ;QAED,6EAA6E;QAC7E,0DAA0D;QAC1D,yFAAyF;QACzF,6DAA6D;QAC7D,MAAM,IAAI,GAAG,mBAAQ,CAAC,QAA+B,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC,CAAM,gDAAgD;KACnE;IAED,iBAAiB;IACjB,IAAI,QAAQ,YAAY,2BAAc,EAAE;QACtC,4FAA4F;QAC5F,mFAAmF;QACnF,OAAO,qBAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;KACzD;IAED,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC;AA/BD,8CA+BC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAI,IAAU,EAAE,QAA0B,EACtC,QAAyC;IACxE,4BAAe,CAAC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/D,CAAC;AAHD,sCAGC"}
@@ -25,11 +25,14 @@ export interface IBrowserGlobals {
25
25
  document: typeof document;
26
26
  window: typeof window;
27
27
  }
28
+ export interface IBrowserGlobalsLax extends IBrowserGlobals {
29
+ window: any;
30
+ }
28
31
  export declare const G: IBrowserGlobals;
29
32
  /**
30
33
  * Replace globals with those from the given object. Use popGlobals() to restore previous values.
31
34
  */
32
- export declare function pushGlobals(globals: IBrowserGlobals): void;
35
+ export declare function pushGlobals(globals: IBrowserGlobalsLax): void;
33
36
  /**
34
37
  * Restore the values of globals to undo the preceding pushGlobals() call.
35
38
  */
@@ -20,6 +20,8 @@
20
20
  * });
21
21
  */
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.popGlobals = exports.pushGlobals = exports.G = void 0;
24
+ ;
23
25
  function _updateGlobals(dest, source) {
24
26
  dest.DocumentFragment = source.DocumentFragment;
25
27
  dest.Element = source.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"browserGlobals.js","sourceRoot":"","sources":["../../../lib/browserGlobals.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;AAUH,wBAAwB,IAAqB,EAAE,MAAuB;IACpE,IAAI,CAAC,gBAAgB,GAAI,MAAM,CAAC,gBAAgB,CAAC;IACjD,IAAI,CAAC,OAAO,GAAa,MAAM,CAAC,OAAO,CAAC;IACxC,IAAI,CAAC,IAAI,GAAgB,MAAM,CAAC,IAAI,CAAC;IACrC,IAAI,CAAC,QAAQ,GAAY,MAAM,CAAC,QAAQ,CAAC;IACzC,IAAI,CAAC,MAAM,GAAc,MAAM,CAAC,MAAM,CAAC;AACzC,CAAC;AAED,sCAAsC;AACtC,MAAM,OAAO,GAAoB,EAAqB,CAAC;AACvD,cAAc,CAAC,OAAO,EAAE,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE9E,4DAA4D;AAC/C,QAAA,CAAC,qBAAyB,OAAO,EAAG;AAEjD,uFAAuF;AACvF,MAAM,aAAa,GAAsB,CAAC,OAAO,CAAC,CAAC;AAEnD;;GAEG;AACH,qBAA4B,OAAwB;IAClD,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,cAAc,CAAC,SAAC,EAAE,OAAO,CAAC,CAAC;AAC7B,CAAC;AAHD,kCAGC;AAED;;GAEG;AACH;IACE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5B,aAAa,CAAC,GAAG,EAAE,CAAC;KACrB;IACD,cAAc,CAAC,SAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AALD,gCAKC"}
1
+ {"version":3,"file":"browserGlobals.js","sourceRoot":"","sources":["../../../lib/browserGlobals.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAUsE,CAAC;AAE1E,SAAS,cAAc,CAAC,IAAqB,EAAE,MAAuB;IACpE,IAAI,CAAC,gBAAgB,GAAI,MAAM,CAAC,gBAAgB,CAAC;IACjD,IAAI,CAAC,OAAO,GAAa,MAAM,CAAC,OAAO,CAAC;IACxC,IAAI,CAAC,IAAI,GAAgB,MAAM,CAAC,IAAI,CAAC;IACrC,IAAI,CAAC,QAAQ,GAAY,MAAM,CAAC,QAAQ,CAAC;IACzC,IAAI,CAAC,MAAM,GAAc,MAAM,CAAC,MAAM,CAAC;AACzC,CAAC;AAED,sCAAsC;AACtC,MAAM,OAAO,GAAoB,EAAqB,CAAC;AACvD,cAAc,CAAC,OAAO,EAAE,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE9E,4DAA4D;AAC/C,QAAA,CAAC,qBAAyB,OAAO,EAAG;AAEjD,uFAAuF;AACvF,MAAM,aAAa,GAAsB,CAAC,OAAO,CAAC,CAAC;AAEnD;;GAEG;AACH,SAAgB,WAAW,CAAC,OAA2B;IACrD,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,cAAc,CAAC,SAAC,EAAE,OAAO,CAAC,CAAC;AAC7B,CAAC;AAHD,kCAGC;AAED;;GAEG;AACH,SAAgB,UAAU;IACxB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5B,aAAa,CAAC,GAAG,EAAE,CAAC;KACrB;IACD,cAAc,CAAC,SAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AALD,gCAKC"}
@@ -34,14 +34,17 @@
34
34
  * ownership of the same disposable that the callback returns.
35
35
  */
36
36
  import { DepItem } from './_computed_queue';
37
- import { IDisposableOwner } from './dispose';
37
+ import { IDisposableOwnerT } from './dispose';
38
38
  import { BaseObservable as Obs, Observable } from './observable';
39
- import { ISubscribable } from './subscribe';
40
- export interface UseCB {
41
- <U>(obs: Obs<U>): U;
42
- owner: IDisposableOwner;
43
- }
39
+ import { ISubscribable, UseCBOwner as UseCB } from './subscribe';
40
+ declare type Owner<T> = IDisposableOwnerT<Computed<T>> | null;
44
41
  export declare class Computed<T> extends Observable<T> {
42
+ static create<T>(owner: Owner<T>, cb: (use: UseCB) => T): Computed<T>;
43
+ static create<T, A>(owner: Owner<T>, a: Obs<A>, cb: (use: UseCB, a: A) => T): Computed<T>;
44
+ static create<T, A, B>(owner: Owner<T>, a: Obs<A>, b: Obs<B>, cb: (use: UseCB, a: A, b: B) => T): Computed<T>;
45
+ static create<T, A, B, C>(owner: Owner<T>, a: Obs<A>, b: Obs<B>, c: Obs<C>, cb: (use: UseCB, a: A, b: B, c: C) => T): Computed<T>;
46
+ static create<T, A, B, C, D>(owner: Owner<T>, a: Obs<A>, b: Obs<B>, c: Obs<C>, d: Obs<D>, cb: (use: UseCB, a: A, b: B, c: C, d: D) => T): Computed<T>;
47
+ static create<T, A, B, C, D, E>(owner: Owner<T>, a: Obs<A>, b: Obs<B>, c: Obs<C>, d: Obs<D>, e: Obs<E>, cb: (use: UseCB, a: A, b: B, c: C, d: D, e: E) => T): Computed<T>;
45
48
  private _callback;
46
49
  private _write;
47
50
  private _sub;
@@ -68,7 +71,7 @@ export declare class Computed<T> extends Observable<T> {
68
71
  * Disposes the computed, unsubscribing it from all observables it depends on.
69
72
  */
70
73
  dispose(): void;
71
- private _read(use, ...args);
74
+ private _read;
72
75
  }
73
76
  /**
74
77
  * This is the type-checking interface for computed(), which allows TypeScript to do helpful
@@ -81,3 +84,4 @@ export declare function computed<T, A, B>(a: Obs<A>, b: Obs<B>, cb: (use: UseCB,
81
84
  export declare function computed<T, A, B, C>(a: Obs<A>, b: Obs<B>, c: Obs<C>, cb: (use: UseCB, a: A, b: B, c: C) => T): Computed<T>;
82
85
  export declare function computed<T, A, B, C, D>(a: Obs<A>, b: Obs<B>, c: Obs<C>, d: Obs<D>, cb: (use: UseCB, a: A, b: B, c: C, d: D) => T): Computed<T>;
83
86
  export declare function computed<T, A, B, C, D, E>(a: Obs<A>, b: Obs<B>, c: Obs<C>, d: Obs<D>, e: Obs<E>, cb: (use: UseCB, a: A, b: B, c: C, d: D, e: E) => T): Computed<T>;
87
+ export {};
@@ -35,6 +35,8 @@
35
35
  * ownership of the same disposable that the callback returns.
36
36
  */
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.computed = exports.Computed = void 0;
39
+ const dispose_1 = require("./dispose");
38
40
  const observable_1 = require("./observable");
39
41
  const subscribe_1 = require("./subscribe");
40
42
  function _noWrite() {
@@ -52,6 +54,20 @@ class Computed extends observable_1.Observable {
52
54
  this._write = _noWrite;
53
55
  this._sub = new subscribe_1.Subscription(this._read.bind(this), dependencies, this);
54
56
  }
57
+ /**
58
+ * Creates a new Computed, owned by the given owner.
59
+ * @param owner: Object to own this Computed, or null to handle disposal manually.
60
+ * @param ...observables: Zero or more observables on which this computes depends. The callback
61
+ * will get called when any of these changes.
62
+ * @param callback: Read callback that will be called with (use, ...values),
63
+ * i.e. the `use` function and values for all of the ...observables. The callback is called
64
+ * immediately and whenever any dependency changes.
65
+ * @returns {Computed} The newly created computed observable.
66
+ */
67
+ static create(owner, ...args) {
68
+ const readCb = args.pop();
69
+ return dispose_1.setDisposeOwner(owner, new Computed(readCb, args));
70
+ }
55
71
  /**
56
72
  * Used by subscriptions to keep track of dependencies.
57
73
  */
@@ -1 +1 @@
1
- {"version":3,"file":"computed.js","sourceRoot":"","sources":["../../../lib/computed.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;;AAIH,6CAA+D;AAC/D,2CAAwD;AAExD;IACE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAC1D,CAAC;AAQD,cAAyB,SAAQ,uBAAa;IAK5C;;OAEG;IACH,YAAY,QAA2C,EAAE,YAA6B;QACpF,4FAA4F;QAC5F,qFAAqF;QACrF,KAAK,CAAC,SAAgB,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,KAAQ,IAAU,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAElD;;;OAGG;IACI,OAAO,CAAC,SAA6B;QAC1C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,GAAQ,EAAE,GAAG,IAAW;QACpC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAY,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;CACF;AAnDD,4BAmDC;AA6BD;;;;;;;;;GASG;AACH,kBAAyB,GAAG,IAAW;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC1B,OAAO,IAAI,QAAQ,CAAM,MAAM,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAHD,4BAGC;AAED,kDAAkD;AAClD,2FAA2F;AAC3F,4FAA4F;AAC5F,+EAA+E;AAC/E,EAAE;AACF,yDAAyD;AACzD,wFAAwF;AACxF,oEAAoE;AACpE,qEAAqE;AACrE,uFAAuF;AACvF,kGAAkG;AAClG,oCAAoC"}
1
+ {"version":3,"file":"computed.js","sourceRoot":"","sources":["../../../lib/computed.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;;;AAGH,uCAA6D;AAC7D,6CAA+D;AAC/D,2CAA6E;AAE7E,SAAS,QAAQ;IACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAC1D,CAAC;AAID,MAAa,QAAY,SAAQ,uBAAa;IAuC5C;;OAEG;IACH,YAAY,QAA2C,EAAE,YAA6B;QACpF,4FAA4F;QAC5F,qFAAqF;QACrF,KAAK,CAAC,SAAgB,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;IA7BD;;;;;;;;;OASG;IACI,MAAM,CAAC,MAAM,CAAI,KAA0C,EAAE,GAAG,IAAW;QAChF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,OAAO,yBAAe,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAI,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IAkBD;;OAEG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,KAAQ,IAAU,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAElD;;;OAGG;IACI,OAAO,CAAC,SAA6B;QAC1C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,GAAQ,EAAE,GAAG,IAAW;QACpC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAY,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;CACF;AArFD,4BAqFC;AA6BD;;;;;;;;;GASG;AACH,SAAgB,QAAQ,CAAC,GAAG,IAAW;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC1B,OAAO,IAAI,QAAQ,CAAM,MAAM,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAHD,4BAGC;AAED,kDAAkD;AAClD,2FAA2F;AAC3F,4FAA4F;AAC5F,+EAA+E;AAC/E,EAAE;AACF,yDAAyD;AACzD,wFAAwF;AACxF,oEAAoE;AACpE,qEAAqE;AACrE,uFAAuF;AACvF,kGAAkG;AAClG,oCAAoC"}