@thomas-siegfried/tapout 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1206 -0
  3. package/dist/applyBindings.d.ts +10 -0
  4. package/dist/applyBindings.d.ts.map +1 -0
  5. package/dist/applyBindings.js +261 -0
  6. package/dist/applyBindings.js.map +1 -0
  7. package/dist/arrayToDomMapping.d.ts +14 -0
  8. package/dist/arrayToDomMapping.d.ts.map +1 -0
  9. package/dist/arrayToDomMapping.js +219 -0
  10. package/dist/arrayToDomMapping.js.map +1 -0
  11. package/dist/attributeInterpolationMarkup.d.ts +6 -0
  12. package/dist/attributeInterpolationMarkup.d.ts.map +1 -0
  13. package/dist/attributeInterpolationMarkup.js +70 -0
  14. package/dist/attributeInterpolationMarkup.js.map +1 -0
  15. package/dist/bindingContext.d.ts +38 -0
  16. package/dist/bindingContext.d.ts.map +1 -0
  17. package/dist/bindingContext.js +138 -0
  18. package/dist/bindingContext.js.map +1 -0
  19. package/dist/bindingEvent.d.ts +33 -0
  20. package/dist/bindingEvent.d.ts.map +1 -0
  21. package/dist/bindingEvent.js +144 -0
  22. package/dist/bindingEvent.js.map +1 -0
  23. package/dist/bindingProvider.d.ts +38 -0
  24. package/dist/bindingProvider.d.ts.map +1 -0
  25. package/dist/bindingProvider.js +145 -0
  26. package/dist/bindingProvider.js.map +1 -0
  27. package/dist/bindings.d.ts +2 -0
  28. package/dist/bindings.d.ts.map +1 -0
  29. package/dist/bindings.js +862 -0
  30. package/dist/bindings.js.map +1 -0
  31. package/dist/compareArrays.d.ts +13 -0
  32. package/dist/compareArrays.d.ts.map +1 -0
  33. package/dist/compareArrays.js +91 -0
  34. package/dist/compareArrays.js.map +1 -0
  35. package/dist/componentBinding.d.ts +4 -0
  36. package/dist/componentBinding.d.ts.map +1 -0
  37. package/dist/componentBinding.js +240 -0
  38. package/dist/componentBinding.js.map +1 -0
  39. package/dist/componentDecorator.d.ts +22 -0
  40. package/dist/componentDecorator.d.ts.map +1 -0
  41. package/dist/componentDecorator.js +32 -0
  42. package/dist/componentDecorator.js.map +1 -0
  43. package/dist/components.d.ts +34 -0
  44. package/dist/components.d.ts.map +1 -0
  45. package/dist/components.js +256 -0
  46. package/dist/components.js.map +1 -0
  47. package/dist/computed.d.ts +54 -0
  48. package/dist/computed.d.ts.map +1 -0
  49. package/dist/computed.js +376 -0
  50. package/dist/computed.js.map +1 -0
  51. package/dist/configure.d.ts +4 -0
  52. package/dist/configure.d.ts.map +1 -0
  53. package/dist/configure.js +48 -0
  54. package/dist/configure.js.map +1 -0
  55. package/dist/controlFlowBindings.d.ts +2 -0
  56. package/dist/controlFlowBindings.d.ts.map +1 -0
  57. package/dist/controlFlowBindings.js +151 -0
  58. package/dist/controlFlowBindings.js.map +1 -0
  59. package/dist/core.d.ts +29 -0
  60. package/dist/core.d.ts.map +1 -0
  61. package/dist/core.js +27 -0
  62. package/dist/core.js.map +1 -0
  63. package/dist/decorators.d.ts +40 -0
  64. package/dist/decorators.d.ts.map +1 -0
  65. package/dist/decorators.js +276 -0
  66. package/dist/decorators.js.map +1 -0
  67. package/dist/dependencyDetection.d.ts +21 -0
  68. package/dist/dependencyDetection.d.ts.map +1 -0
  69. package/dist/dependencyDetection.js +53 -0
  70. package/dist/dependencyDetection.js.map +1 -0
  71. package/dist/disposable.d.ts +12 -0
  72. package/dist/disposable.d.ts.map +1 -0
  73. package/dist/disposable.js +29 -0
  74. package/dist/disposable.js.map +1 -0
  75. package/dist/domData.d.ts +6 -0
  76. package/dist/domData.d.ts.map +1 -0
  77. package/dist/domData.js +40 -0
  78. package/dist/domData.js.map +1 -0
  79. package/dist/domNodeDisposal.d.ts +7 -0
  80. package/dist/domNodeDisposal.d.ts.map +1 -0
  81. package/dist/domNodeDisposal.js +78 -0
  82. package/dist/domNodeDisposal.js.map +1 -0
  83. package/dist/effects.d.ts +13 -0
  84. package/dist/effects.d.ts.map +1 -0
  85. package/dist/effects.js +24 -0
  86. package/dist/effects.js.map +1 -0
  87. package/dist/event.d.ts +38 -0
  88. package/dist/event.d.ts.map +1 -0
  89. package/dist/event.js +138 -0
  90. package/dist/event.js.map +1 -0
  91. package/dist/expressionRewriting.d.ts +22 -0
  92. package/dist/expressionRewriting.d.ts.map +1 -0
  93. package/dist/expressionRewriting.js +169 -0
  94. package/dist/expressionRewriting.js.map +1 -0
  95. package/dist/extenders.d.ts +17 -0
  96. package/dist/extenders.d.ts.map +1 -0
  97. package/dist/extenders.js +75 -0
  98. package/dist/extenders.js.map +1 -0
  99. package/dist/filters.d.ts +5 -0
  100. package/dist/filters.d.ts.map +1 -0
  101. package/dist/filters.js +81 -0
  102. package/dist/filters.js.map +1 -0
  103. package/dist/index.d.ts +45 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +35 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/interpolationMarkup.d.ts +6 -0
  108. package/dist/interpolationMarkup.d.ts.map +1 -0
  109. package/dist/interpolationMarkup.js +110 -0
  110. package/dist/interpolationMarkup.js.map +1 -0
  111. package/dist/memoization.d.ts +7 -0
  112. package/dist/memoization.d.ts.map +1 -0
  113. package/dist/memoization.js +59 -0
  114. package/dist/memoization.js.map +1 -0
  115. package/dist/namespacedBindings.d.ts +7 -0
  116. package/dist/namespacedBindings.d.ts.map +1 -0
  117. package/dist/namespacedBindings.js +81 -0
  118. package/dist/namespacedBindings.js.map +1 -0
  119. package/dist/observable.d.ts +13 -0
  120. package/dist/observable.d.ts.map +1 -0
  121. package/dist/observable.js +39 -0
  122. package/dist/observable.js.map +1 -0
  123. package/dist/observableArray.d.ts +58 -0
  124. package/dist/observableArray.d.ts.map +1 -0
  125. package/dist/observableArray.js +328 -0
  126. package/dist/observableArray.js.map +1 -0
  127. package/dist/options.d.ts +14 -0
  128. package/dist/options.d.ts.map +1 -0
  129. package/dist/options.js +12 -0
  130. package/dist/options.js.map +1 -0
  131. package/dist/selectExtensions.d.ts +4 -0
  132. package/dist/selectExtensions.d.ts.map +1 -0
  133. package/dist/selectExtensions.js +67 -0
  134. package/dist/selectExtensions.js.map +1 -0
  135. package/dist/slotBinding.d.ts +2 -0
  136. package/dist/slotBinding.d.ts.map +1 -0
  137. package/dist/slotBinding.js +63 -0
  138. package/dist/slotBinding.js.map +1 -0
  139. package/dist/subscribable.d.ts +57 -0
  140. package/dist/subscribable.d.ts.map +1 -0
  141. package/dist/subscribable.js +211 -0
  142. package/dist/subscribable.js.map +1 -0
  143. package/dist/tasks.d.ts +8 -0
  144. package/dist/tasks.d.ts.map +1 -0
  145. package/dist/tasks.js +68 -0
  146. package/dist/tasks.js.map +1 -0
  147. package/dist/templateEngine.d.ts +37 -0
  148. package/dist/templateEngine.d.ts.map +1 -0
  149. package/dist/templateEngine.js +60 -0
  150. package/dist/templateEngine.js.map +1 -0
  151. package/dist/templateRendering.d.ts +8 -0
  152. package/dist/templateRendering.d.ts.map +1 -0
  153. package/dist/templateRendering.js +322 -0
  154. package/dist/templateRendering.js.map +1 -0
  155. package/dist/templateRewriting.d.ts +7 -0
  156. package/dist/templateRewriting.d.ts.map +1 -0
  157. package/dist/templateRewriting.js +63 -0
  158. package/dist/templateRewriting.js.map +1 -0
  159. package/dist/templateSources.d.ts +19 -0
  160. package/dist/templateSources.d.ts.map +1 -0
  161. package/dist/templateSources.js +110 -0
  162. package/dist/templateSources.js.map +1 -0
  163. package/dist/utils.d.ts +8 -0
  164. package/dist/utils.d.ts.map +1 -0
  165. package/dist/utils.js +100 -0
  166. package/dist/utils.js.map +1 -0
  167. package/dist/utilsDom.d.ts +8 -0
  168. package/dist/utilsDom.d.ts.map +1 -0
  169. package/dist/utilsDom.js +81 -0
  170. package/dist/utilsDom.js.map +1 -0
  171. package/dist/virtualElements.d.ts +12 -0
  172. package/dist/virtualElements.d.ts.map +1 -0
  173. package/dist/virtualElements.js +141 -0
  174. package/dist/virtualElements.js.map +1 -0
  175. package/dist/wireParams.d.ts +6 -0
  176. package/dist/wireParams.d.ts.map +1 -0
  177. package/dist/wireParams.js +39 -0
  178. package/dist/wireParams.js.map +1 -0
  179. package/package.json +55 -0
  180. package/src/applyBindings.ts +372 -0
  181. package/src/arrayToDomMapping.ts +300 -0
  182. package/src/attributeInterpolationMarkup.ts +91 -0
  183. package/src/bindingContext.ts +207 -0
  184. package/src/bindingEvent.ts +198 -0
  185. package/src/bindingProvider.ts +260 -0
  186. package/src/bindings.ts +963 -0
  187. package/src/compareArrays.ts +122 -0
  188. package/src/componentBinding.ts +318 -0
  189. package/src/componentDecorator.ts +62 -0
  190. package/src/components.ts +367 -0
  191. package/src/computed.ts +439 -0
  192. package/src/configure.ts +52 -0
  193. package/src/controlFlowBindings.ts +206 -0
  194. package/src/core.ts +60 -0
  195. package/src/decorators.ts +407 -0
  196. package/src/dependencyDetection.ts +76 -0
  197. package/src/disposable.ts +36 -0
  198. package/src/domData.ts +42 -0
  199. package/src/domNodeDisposal.ts +94 -0
  200. package/src/effects.ts +29 -0
  201. package/src/event.ts +173 -0
  202. package/src/expressionRewriting.ts +219 -0
  203. package/src/extenders.ts +102 -0
  204. package/src/filters.ts +91 -0
  205. package/src/index.ts +150 -0
  206. package/src/interpolationMarkup.ts +130 -0
  207. package/src/memoization.ts +71 -0
  208. package/src/namespacedBindings.ts +132 -0
  209. package/src/observable.ts +48 -0
  210. package/src/observableArray.ts +397 -0
  211. package/src/options.ts +25 -0
  212. package/src/selectExtensions.ts +68 -0
  213. package/src/slotBinding.ts +84 -0
  214. package/src/subscribable.ts +266 -0
  215. package/src/tasks.ts +79 -0
  216. package/src/templateEngine.ts +108 -0
  217. package/src/templateRendering.ts +399 -0
  218. package/src/templateRewriting.ts +94 -0
  219. package/src/templateSources.ts +134 -0
  220. package/src/utils.ts +123 -0
  221. package/src/utilsDom.ts +87 -0
  222. package/src/virtualElements.ts +153 -0
  223. package/src/wireParams.ts +49 -0
@@ -0,0 +1,78 @@
1
+ import { domDataGet, domDataSet, domDataClear, domDataNextKey } from './domData.js';
2
+ import { ignore } from './dependencyDetection.js';
3
+ const disposeCallbacksKey = domDataNextKey();
4
+ const CLEANABLE = { 1: true, 8: true, 9: true };
5
+ const CLEANABLE_WITH_DESCENDANTS = { 1: true, 9: true };
6
+ function getCallbacks(node, create) {
7
+ let callbacks = domDataGet(node, disposeCallbacksKey);
8
+ if (!callbacks && create) {
9
+ callbacks = [];
10
+ domDataSet(node, disposeCallbacksKey, callbacks);
11
+ }
12
+ return callbacks;
13
+ }
14
+ function destroyCallbacks(node) {
15
+ domDataSet(node, disposeCallbacksKey, undefined);
16
+ }
17
+ function cleanSingleNode(node) {
18
+ const callbacks = getCallbacks(node, false);
19
+ if (callbacks) {
20
+ const snapshot = callbacks.slice(0);
21
+ for (let i = 0; i < snapshot.length; i++) {
22
+ snapshot[i](node);
23
+ }
24
+ }
25
+ domDataClear(node);
26
+ if (CLEANABLE_WITH_DESCENDANTS[node.nodeType]) {
27
+ cleanNodesInList(node.childNodes, true);
28
+ }
29
+ }
30
+ function cleanNodesInList(nodeList, onlyComments) {
31
+ const cleaned = [];
32
+ let lastCleaned;
33
+ for (let i = 0; i < nodeList.length; i++) {
34
+ if (!onlyComments || nodeList[i].nodeType === 8) {
35
+ cleanSingleNode(cleaned[cleaned.length] = lastCleaned = nodeList[i]);
36
+ if (nodeList[i] !== lastCleaned) {
37
+ while (i-- && cleaned.indexOf(nodeList[i]) === -1) { /* adjust index */ }
38
+ }
39
+ }
40
+ }
41
+ }
42
+ export function addDisposeCallback(node, callback) {
43
+ if (typeof callback !== 'function') {
44
+ throw new Error('Callback must be a function');
45
+ }
46
+ getCallbacks(node, true).push(callback);
47
+ }
48
+ export function removeDisposeCallback(node, callback) {
49
+ const callbacks = getCallbacks(node, false);
50
+ if (callbacks) {
51
+ const index = callbacks.indexOf(callback);
52
+ if (index >= 0) {
53
+ callbacks.splice(index, 1);
54
+ if (callbacks.length === 0) {
55
+ destroyCallbacks(node);
56
+ }
57
+ }
58
+ }
59
+ }
60
+ export function cleanNode(node) {
61
+ ignore(() => {
62
+ if (CLEANABLE[node.nodeType]) {
63
+ cleanSingleNode(node);
64
+ if (CLEANABLE_WITH_DESCENDANTS[node.nodeType]) {
65
+ const descendants = node.getElementsByTagName('*');
66
+ cleanNodesInList(descendants);
67
+ }
68
+ }
69
+ });
70
+ return node;
71
+ }
72
+ export function removeNode(node) {
73
+ cleanNode(node);
74
+ if (node.parentNode) {
75
+ node.parentNode.removeChild(node);
76
+ }
77
+ }
78
+ //# sourceMappingURL=domNodeDisposal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domNodeDisposal.js","sourceRoot":"","sources":["../src/domNodeDisposal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface EffectHandle {
2
+ dispose(): void;
3
+ }
4
+ /**
5
+ * Track reactive dependencies in `fn` and call `act` whenever they change.
6
+ * Returns a handle to stop the effect.
7
+ */
8
+ export declare function observe<T>(fn: () => T, act: (val: T) => void): EffectHandle;
9
+ /**
10
+ * Same as `observe`, but also runs `act` immediately with the current value.
11
+ */
12
+ export declare function effect<T>(fn: () => T, act: (val: T) => void): EffectHandle;
13
+ //# sourceMappingURL=effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../src/effects.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,YAAY,CAU3E;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,YAAY,CAG1E"}
@@ -0,0 +1,24 @@
1
+ import { PureComputed } from './computed.js';
2
+ /**
3
+ * Track reactive dependencies in `fn` and call `act` whenever they change.
4
+ * Returns a handle to stop the effect.
5
+ */
6
+ export function observe(fn, act) {
7
+ const computed = new PureComputed(fn);
8
+ computed.extend({ notify: 'always' });
9
+ const subscription = computed.subscribe(act);
10
+ return {
11
+ dispose() {
12
+ subscription.dispose();
13
+ computed.dispose();
14
+ },
15
+ };
16
+ }
17
+ /**
18
+ * Same as `observe`, but also runs `act` immediately with the current value.
19
+ */
20
+ export function effect(fn, act) {
21
+ act(fn());
22
+ return observe(fn, act);
23
+ }
24
+ //# sourceMappingURL=effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.js","sourceRoot":"","sources":["../src/effects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAM7C;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAI,EAAW,EAAE,GAAqB;IAC3D,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO;QACL,OAAO;YACL,YAAY,CAAC,OAAO,EAAE,CAAC;YACvB,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAI,EAAW,EAAE,GAAqB;IAC1D,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACV,OAAO,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,38 @@
1
+ export type EventCallback<T> = (value: T) => void;
2
+ export type Constructor<T> = abstract new (...args: any[]) => T;
3
+ export declare class EventSubscription {
4
+ private _disposeCallback;
5
+ private _isDisposed;
6
+ constructor(disposeCallback: () => void);
7
+ dispose(): void;
8
+ get closed(): boolean;
9
+ disposeWhenNodeIsRemoved(node: Node): void;
10
+ }
11
+ export declare class EventSubscribable<T = unknown> {
12
+ #private;
13
+ subscribe(callback: EventCallback<T>): EventSubscription;
14
+ on<U extends T>(type: Constructor<U>): EventSubscribable<U>;
15
+ get subscriberCount(): number;
16
+ /** @internal */
17
+ _emit(value: T): void;
18
+ /** @internal */
19
+ _dispose(): void;
20
+ }
21
+ export declare class Event<T = unknown> {
22
+ private _subscribable;
23
+ private _isDisposed;
24
+ constructor();
25
+ get subscribable(): EventSubscribable<T>;
26
+ emit(value: T): void;
27
+ dispose(): void;
28
+ get isDisposed(): boolean;
29
+ }
30
+ export declare class AggregateEvent<T = unknown> extends Event<T> {
31
+ private _pipedSubscriptions;
32
+ pipe(...sources: EventSubscribable<T>[]): EventSubscription[];
33
+ dispose(): void;
34
+ }
35
+ export declare function isEvent(value: unknown): value is Event;
36
+ export declare function isEventSubscribable(value: unknown): value is EventSubscribable;
37
+ export declare function isAggregateEvent(value: unknown): value is AggregateEvent;
38
+ //# sourceMappingURL=event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAGlD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAOhE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,WAAW,CAAS;gBAEhB,eAAe,EAAE,MAAM,IAAI;IAIvC,OAAO,IAAI,IAAI;IAQf,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAG3C;AAED,qBAAa,iBAAiB,CAAC,CAAC,GAAG,OAAO;;IAIxC,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,iBAAiB;IAexD,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAI3D,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,gBAAgB;IAChB,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAUrB,gBAAgB;IAChB,QAAQ,IAAI,IAAI;CAIjB;AAyBD,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO;IAC5B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,WAAW,CAAS;;IAM5B,IAAI,YAAY,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAEvC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAOpB,OAAO,IAAI,IAAI;IAOf,IAAI,UAAU,IAAI,OAAO,CAExB;CACF;AAED,qBAAa,cAAc,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,mBAAmB,CAA2B;IAEtD,IAAI,CAAC,GAAG,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,iBAAiB,EAAE;IAYpD,OAAO,IAAI,IAAI;CASzB;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAEtD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAE9E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE"}
package/dist/event.js ADDED
@@ -0,0 +1,138 @@
1
+ import { addDisposeCallback } from './domNodeDisposal.js';
2
+ export class EventSubscription {
3
+ _disposeCallback;
4
+ _isDisposed = false;
5
+ constructor(disposeCallback) {
6
+ this._disposeCallback = disposeCallback;
7
+ }
8
+ dispose() {
9
+ if (!this._isDisposed) {
10
+ this._isDisposed = true;
11
+ this._disposeCallback();
12
+ this._disposeCallback = null;
13
+ }
14
+ }
15
+ get closed() {
16
+ return this._isDisposed;
17
+ }
18
+ disposeWhenNodeIsRemoved(node) {
19
+ addDisposeCallback(node, () => this.dispose());
20
+ }
21
+ }
22
+ export class EventSubscribable {
23
+ #entries = [];
24
+ #isDisposed = false;
25
+ subscribe(callback) {
26
+ if (this.#isDisposed) {
27
+ throw new Error('EventSubscribable is disposed');
28
+ }
29
+ const entry = { callback, disposed: false };
30
+ this.#entries.push(entry);
31
+ return new EventSubscription(() => {
32
+ entry.disposed = true;
33
+ const idx = this.#entries.indexOf(entry);
34
+ if (idx !== -1) {
35
+ this.#entries.splice(idx, 1);
36
+ }
37
+ });
38
+ }
39
+ on(type) {
40
+ return new FilteredEventSubscribable(this, type);
41
+ }
42
+ get subscriberCount() {
43
+ return this.#entries.length;
44
+ }
45
+ /** @internal */
46
+ _emit(value) {
47
+ if (this.#isDisposed)
48
+ return;
49
+ const snapshot = this.#entries.slice();
50
+ for (let i = 0; i < snapshot.length; i++) {
51
+ if (!snapshot[i].disposed) {
52
+ snapshot[i].callback(value);
53
+ }
54
+ }
55
+ }
56
+ /** @internal */
57
+ _dispose() {
58
+ this.#isDisposed = true;
59
+ this.#entries.length = 0;
60
+ }
61
+ }
62
+ class FilteredEventSubscribable extends EventSubscribable {
63
+ _parent;
64
+ _type;
65
+ constructor(parent, type) {
66
+ super();
67
+ this._parent = parent;
68
+ this._type = type;
69
+ }
70
+ subscribe(callback) {
71
+ return this._parent.subscribe((value) => {
72
+ if (value instanceof this._type) {
73
+ callback(value);
74
+ }
75
+ });
76
+ }
77
+ on(type) {
78
+ return new FilteredEventSubscribable(this._parent, type);
79
+ }
80
+ }
81
+ export class Event {
82
+ _subscribable;
83
+ _isDisposed = false;
84
+ constructor() {
85
+ this._subscribable = new EventSubscribable();
86
+ }
87
+ get subscribable() {
88
+ return this._subscribable;
89
+ }
90
+ emit(value) {
91
+ if (this._isDisposed) {
92
+ throw new Error('Event is disposed');
93
+ }
94
+ this._subscribable._emit(value);
95
+ }
96
+ dispose() {
97
+ if (!this._isDisposed) {
98
+ this._isDisposed = true;
99
+ this._subscribable._dispose();
100
+ }
101
+ }
102
+ get isDisposed() {
103
+ return this._isDisposed;
104
+ }
105
+ }
106
+ export class AggregateEvent extends Event {
107
+ _pipedSubscriptions = [];
108
+ pipe(...sources) {
109
+ const newSubs = [];
110
+ for (const source of sources) {
111
+ const sub = source.subscribe((value) => {
112
+ this.emit(value);
113
+ });
114
+ this._pipedSubscriptions.push(sub);
115
+ newSubs.push(sub);
116
+ }
117
+ return newSubs;
118
+ }
119
+ dispose() {
120
+ for (const sub of this._pipedSubscriptions) {
121
+ if (!sub.closed) {
122
+ sub.dispose();
123
+ }
124
+ }
125
+ this._pipedSubscriptions.length = 0;
126
+ super.dispose();
127
+ }
128
+ }
129
+ export function isEvent(value) {
130
+ return value instanceof Event;
131
+ }
132
+ export function isEventSubscribable(value) {
133
+ return value instanceof EventSubscribable;
134
+ }
135
+ export function isAggregateEvent(value) {
136
+ return value instanceof AggregateEvent;
137
+ }
138
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface KeyValuePair {
2
+ key?: string;
3
+ value?: string;
4
+ unknown?: string;
5
+ }
6
+ export interface PreProcessOptions {
7
+ valueAccessors?: boolean;
8
+ bindingParams?: boolean;
9
+ getBindingHandler?: (key: string) => {
10
+ preprocess?(val: string, key: string, addBinding: (key: string, val: string) => void): string | void;
11
+ } | undefined;
12
+ }
13
+ export interface AllBindingsAccessor {
14
+ get(key: string): unknown;
15
+ has(key: string): boolean;
16
+ }
17
+ export declare const twoWayBindings: Record<string, boolean | string>;
18
+ export declare function parseObjectLiteral(objectLiteralString: string): KeyValuePair[];
19
+ export declare function preProcessBindings(bindingsStringOrKeyValueArray: string | KeyValuePair[], options?: PreProcessOptions): string;
20
+ export declare function keyValueArrayContainsKey(keyValueArray: KeyValuePair[], key: string): boolean;
21
+ export declare function writeValueToProperty(property: unknown, allBindings: AllBindingsAccessor, key: string, value: unknown, checkIfDifferent?: boolean): void;
22
+ //# sourceMappingURL=expressionRewriting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressionRewriting.d.ts","sourceRoot":"","sources":["../src/expressionRewriting.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;QAAE,UAAU,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;CAC3J;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAID,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAM,CAAC;AAiCnE,wBAAgB,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,GAAG,YAAY,EAAE,CAyE9E;AAED,wBAAgB,kBAAkB,CAChC,6BAA6B,EAAE,MAAM,GAAG,YAAY,EAAE,EACtD,OAAO,CAAC,EAAE,iBAAiB,GAC1B,MAAM,CAoDR;AAED,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAK5F;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,OAAO,EACjB,WAAW,EAAE,mBAAmB,EAChC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,gBAAgB,CAAC,EAAE,OAAO,GACzB,IAAI,CASN"}
@@ -0,0 +1,169 @@
1
+ import { Observable } from './observable.js';
2
+ import { Computed } from './computed.js';
3
+ import { isSubscribable } from './subscribable.js';
4
+ // ---- Two-way binding registry ----
5
+ export const twoWayBindings = {};
6
+ // ---- Token regex ----
7
+ const javaScriptReservedWords = ['true', 'false', 'null', 'undefined'];
8
+ // Matches something assignable: an isolated identifier or something ending with a property accessor.
9
+ const javaScriptAssignmentTarget = /^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i;
10
+ const specials = ',"\'`{}()/:[\\]';
11
+ const bindingToken = RegExp([
12
+ '"(?:\\\\.|[^"])*"', // double-quoted string
13
+ "'(?:\\\\.|[^'])*'", // single-quoted string
14
+ '`(?:\\\\.|[^`])*`', // template literal
15
+ '/\\*(?:[^*]|\\*+[^*/])*\\*+/', // block comment
16
+ '//.*\n', // line comment
17
+ '/(?:\\\\.|[^/])+/\\w*', // regex literal
18
+ '[^\\s:,/][^' + specials + ']*[^\\s' + specials + ']', // multi-char token
19
+ '[^\\s]', // single char
20
+ ].join('|'), 'g');
21
+ const divisionLookBehind = /[\])"'A-Za-z0-9_$]+$/;
22
+ const keywordRegexLookBehind = { 'in': 1, 'return': 1, 'typeof': 1 };
23
+ // ---- Core functions ----
24
+ function getWriteableValue(expression) {
25
+ if (javaScriptReservedWords.indexOf(expression) >= 0)
26
+ return false;
27
+ const match = expression.match(javaScriptAssignmentTarget);
28
+ if (match === null)
29
+ return false;
30
+ return match[1] ? ('Object(' + match[1] + ')' + match[2]) : expression;
31
+ }
32
+ export function parseObjectLiteral(objectLiteralString) {
33
+ let str = objectLiteralString.trim();
34
+ // Strip surrounding braces
35
+ if (str.charCodeAt(0) === 123 /* { */)
36
+ str = str.slice(1, -1);
37
+ // Append newline + comma so the last pair terminates uniformly
38
+ str += '\n,';
39
+ const toks = str.match(bindingToken);
40
+ const result = [];
41
+ if (!toks || toks.length <= 1)
42
+ return result;
43
+ let key;
44
+ let values = [];
45
+ let depth = 0;
46
+ for (let i = 0, tok; (tok = toks[i]); ++i) {
47
+ const c = tok.charCodeAt(0);
48
+ if (c === 44 /* , */) {
49
+ if (depth <= 0) {
50
+ result.push((key && values.length)
51
+ ? { key, value: values.join('') }
52
+ : { unknown: key || values.join('') });
53
+ key = undefined;
54
+ depth = 0;
55
+ values = [];
56
+ continue;
57
+ }
58
+ }
59
+ else if (c === 58 /* : */) {
60
+ if (!depth && !key && values.length === 1) {
61
+ key = values.pop();
62
+ continue;
63
+ }
64
+ }
65
+ else if (c === 47 /* / */ && tok.length > 1 && (tok.charCodeAt(1) === 47 || tok.charCodeAt(1) === 42)) {
66
+ // Line or block comment — skip
67
+ continue;
68
+ }
69
+ else if (c === 47 /* / */ && i && tok.length > 1) {
70
+ // Disambiguate regex vs division
71
+ const prevMatch = toks[i - 1].match(divisionLookBehind);
72
+ if (prevMatch && !keywordRegexLookBehind[prevMatch[0]]) {
73
+ str = str.substr(str.indexOf(tok) + 1);
74
+ const newToks = str.match(bindingToken);
75
+ if (newToks) {
76
+ toks.length = 0;
77
+ toks.push(...newToks);
78
+ }
79
+ i = -1;
80
+ tok = '/';
81
+ }
82
+ }
83
+ else if (c === 40 || c === 123 || c === 91) {
84
+ // ( { [
85
+ ++depth;
86
+ }
87
+ else if (c === 41 || c === 125 || c === 93) {
88
+ // ) } ]
89
+ --depth;
90
+ }
91
+ else if (!key && !values.length && (c === 34 || c === 39)) {
92
+ // Quoted key — strip quotes
93
+ tok = tok.slice(1, -1);
94
+ }
95
+ values.push(tok);
96
+ }
97
+ if (depth > 0) {
98
+ throw new Error('Unbalanced parentheses, braces, or brackets');
99
+ }
100
+ return result;
101
+ }
102
+ export function preProcessBindings(bindingsStringOrKeyValueArray, options) {
103
+ options = options || {};
104
+ const resultStrings = [];
105
+ const propertyAccessorResultStrings = [];
106
+ const makeValueAccessors = options.valueAccessors;
107
+ const bindingParams = options.bindingParams;
108
+ const getBindingHandler = options.getBindingHandler;
109
+ const keyValueArray = typeof bindingsStringOrKeyValueArray === 'string'
110
+ ? parseObjectLiteral(bindingsStringOrKeyValueArray)
111
+ : bindingsStringOrKeyValueArray;
112
+ function processKeyValue(key, val) {
113
+ let writableVal;
114
+ function callPreprocessHook(obj) {
115
+ if (obj && obj.preprocess) {
116
+ const result = obj.preprocess(val, key, processKeyValue);
117
+ if (result !== undefined)
118
+ val = result;
119
+ return result !== undefined;
120
+ }
121
+ return true;
122
+ }
123
+ if (!bindingParams) {
124
+ if (getBindingHandler && !callPreprocessHook(getBindingHandler(key)))
125
+ return;
126
+ if (twoWayBindings[key] && (writableVal = getWriteableValue(val))) {
127
+ const writeKey = typeof twoWayBindings[key] === 'string' ? twoWayBindings[key] : key;
128
+ propertyAccessorResultStrings.push("'" + writeKey + "':function(_z){" + writableVal + '=_z}');
129
+ }
130
+ }
131
+ if (makeValueAccessors) {
132
+ val = 'function(){return ' + val + ' }';
133
+ }
134
+ resultStrings.push("'" + key + "':" + val);
135
+ }
136
+ for (const kv of keyValueArray) {
137
+ processKeyValue(kv.key || kv.unknown || '', kv.value || '');
138
+ }
139
+ if (propertyAccessorResultStrings.length) {
140
+ processKeyValue('_tap_property_writers', '{' + propertyAccessorResultStrings.join(',') + ' }');
141
+ }
142
+ return resultStrings.join(',');
143
+ }
144
+ export function keyValueArrayContainsKey(keyValueArray, key) {
145
+ for (const kv of keyValueArray) {
146
+ if (kv.key === key)
147
+ return true;
148
+ }
149
+ return false;
150
+ }
151
+ export function writeValueToProperty(property, allBindings, key, value, checkIfDifferent) {
152
+ if (!property || !isSubscribable(property)) {
153
+ const propWriters = allBindings.get('_tap_property_writers');
154
+ if (propWriters && propWriters[key]) {
155
+ propWriters[key](value);
156
+ }
157
+ }
158
+ else if (isWritable(property) && (!checkIfDifferent || property.peek() !== value)) {
159
+ property.set(value);
160
+ }
161
+ }
162
+ function isWritable(value) {
163
+ if (value instanceof Observable)
164
+ return true;
165
+ if (value instanceof Computed)
166
+ return value.hasWriteFunction;
167
+ return false;
168
+ }
169
+ //# sourceMappingURL=expressionRewriting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressionRewriting.js","sourceRoot":"","sources":["../src/expressionRewriting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Subscribable } from './subscribable.js';
2
+ export type ExtenderHandler = (target: Subscribable, value: unknown) => Subscribable | void;
3
+ export interface ExtenderMap {
4
+ notify: 'always';
5
+ rateLimit: number | RateLimitOptions;
6
+ deferred: true;
7
+ }
8
+ export type ExtenderOptions = Partial<ExtenderMap> & Record<string, unknown>;
9
+ export declare function registerExtender(name: string, handler: ExtenderHandler): void;
10
+ export declare function getExtenderHandler(name: string): ExtenderHandler | undefined;
11
+ export declare function throttle(callback: () => void, timeout: number): () => void;
12
+ export declare function debounce(callback: () => void, timeout: number): () => void;
13
+ export interface RateLimitOptions {
14
+ timeout: number;
15
+ method?: 'notifyWhenChangesStop' | ((callback: () => void, timeout: number) => () => void);
16
+ }
17
+ //# sourceMappingURL=extenders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extenders.d.ts","sourceRoot":"","sources":["../src/extenders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,KAAK,YAAY,GAAG,IAAI,CAAC;AAG5F,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACrC,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAI7E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE5E;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,IAAI,CAU1E;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,IAAI,CAM1E;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,uBAAuB,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC;CAC5F"}
@@ -0,0 +1,75 @@
1
+ import { valuesArePrimitiveAndEqual } from './subscribable.js';
2
+ import { schedule, cancel } from './tasks.js';
3
+ const registry = {};
4
+ export function registerExtender(name, handler) {
5
+ registry[name] = handler;
6
+ }
7
+ export function getExtenderHandler(name) {
8
+ return registry[name];
9
+ }
10
+ export function throttle(callback, timeout) {
11
+ let timeoutInstance;
12
+ return function () {
13
+ if (!timeoutInstance) {
14
+ timeoutInstance = setTimeout(function () {
15
+ timeoutInstance = undefined;
16
+ callback();
17
+ }, timeout);
18
+ }
19
+ };
20
+ }
21
+ export function debounce(callback, timeout) {
22
+ let timeoutInstance;
23
+ return function () {
24
+ clearTimeout(timeoutInstance);
25
+ timeoutInstance = setTimeout(callback, timeout);
26
+ };
27
+ }
28
+ registerExtender('notify', (target, notifyWhen) => {
29
+ target.equalityComparer = notifyWhen === 'always'
30
+ ? undefined
31
+ : valuesArePrimitiveAndEqual;
32
+ });
33
+ registerExtender('rateLimit', (target, options) => {
34
+ let timeout;
35
+ let method;
36
+ if (typeof options === 'number') {
37
+ timeout = options;
38
+ }
39
+ else {
40
+ const opts = options;
41
+ timeout = opts.timeout;
42
+ method = opts.method;
43
+ }
44
+ target._deferUpdates = false;
45
+ const limitFunction = typeof method === 'function'
46
+ ? method
47
+ : method === 'notifyWhenChangesStop' ? debounce : throttle;
48
+ target.limit((callback) => limitFunction(callback, timeout));
49
+ });
50
+ registerExtender('deferred', (target, options) => {
51
+ if (options !== true) {
52
+ throw new Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");
53
+ }
54
+ if (!target._deferUpdates) {
55
+ target._deferUpdates = true;
56
+ target.limit((callback) => {
57
+ let handle;
58
+ let ignoreUpdates = false;
59
+ return () => {
60
+ if (!ignoreUpdates) {
61
+ cancel(handle);
62
+ handle = schedule(callback);
63
+ try {
64
+ ignoreUpdates = true;
65
+ target.notifySubscribers(undefined, 'dirty');
66
+ }
67
+ finally {
68
+ ignoreUpdates = false;
69
+ }
70
+ }
71
+ };
72
+ });
73
+ }
74
+ });
75
+ //# sourceMappingURL=extenders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extenders.js","sourceRoot":"","sources":["../src/extenders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { PreprocessFn } from './bindingProvider.js';
2
+ export declare const filters: Record<string, Function>;
3
+ export declare const filterPreprocessor: PreprocessFn;
4
+ export declare function enableTextFilter(bindingKeyOrHandler: string): void;
5
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../src/filters.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMzD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAM,CAAC;AAapD,eAAO,MAAM,kBAAkB,EAAE,YAsChC,CAAC;AAGF,wBAAgB,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAElE"}