@repobit/dex-store-elements 1.7.3 → 2.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 (227) hide show
  1. package/CHANGELOG.md +6 -906
  2. package/README.md +308 -283
  3. package/dist/src/actions/action.adapter.d.ts +36 -0
  4. package/dist/src/actions/action.adapter.js +183 -0
  5. package/dist/src/actions/action.adapter.js.map +1 -0
  6. package/dist/src/actions/action.attributes.d.ts +15 -0
  7. package/dist/src/actions/action.attributes.js +137 -0
  8. package/dist/src/actions/action.attributes.js.map +1 -0
  9. package/dist/src/actions/action.registry.d.ts +4 -0
  10. package/dist/src/actions/action.registry.js +119 -0
  11. package/dist/src/actions/action.registry.js.map +1 -0
  12. package/dist/src/actions/index.d.ts +3 -2
  13. package/dist/src/actions/index.js +3 -80
  14. package/dist/src/actions/index.js.map +1 -1
  15. package/dist/src/compute/compute.expand.d.ts +70 -0
  16. package/dist/src/compute/compute.expand.js +319 -0
  17. package/dist/src/compute/compute.expand.js.map +1 -0
  18. package/dist/src/compute/compute.scan.d.ts +54 -0
  19. package/dist/src/compute/compute.scan.js +160 -0
  20. package/dist/src/compute/compute.scan.js.map +1 -0
  21. package/dist/src/compute/option-resolver.d.ts +31 -0
  22. package/dist/src/compute/option-resolver.js +147 -0
  23. package/dist/src/compute/option-resolver.js.map +1 -0
  24. package/dist/src/contexts/context.compute.d.ts +12 -0
  25. package/dist/src/contexts/context.compute.js +4 -0
  26. package/dist/src/contexts/context.compute.js.map +1 -0
  27. package/dist/src/contexts/context.scope.d.ts +139 -0
  28. package/dist/src/contexts/context.scope.js +48 -0
  29. package/dist/src/contexts/context.scope.js.map +1 -0
  30. package/dist/src/controllers/controller.action-resolve.d.ts +110 -0
  31. package/dist/src/controllers/controller.action-resolve.js +203 -0
  32. package/dist/src/controllers/controller.action-resolve.js.map +1 -0
  33. package/dist/src/controllers/controller.action-topology.d.ts +59 -0
  34. package/dist/src/controllers/controller.action-topology.js +130 -0
  35. package/dist/src/controllers/controller.action-topology.js.map +1 -0
  36. package/dist/src/controllers/controller.compute.d.ts +72 -0
  37. package/dist/src/controllers/controller.compute.js +110 -0
  38. package/dist/src/controllers/controller.compute.js.map +1 -0
  39. package/dist/src/controllers/controller.resolve.d.ts +78 -0
  40. package/dist/src/controllers/controller.resolve.js +205 -0
  41. package/dist/src/controllers/controller.resolve.js.map +1 -0
  42. package/dist/src/core/action-topology.d.ts +62 -0
  43. package/dist/src/core/action-topology.js +67 -0
  44. package/dist/src/core/action-topology.js.map +1 -0
  45. package/dist/src/core/actions.d.ts +64 -0
  46. package/dist/src/core/actions.js +47 -0
  47. package/dist/src/core/actions.js.map +1 -0
  48. package/dist/src/core/node.element.d.ts +179 -0
  49. package/dist/src/core/node.element.js +573 -0
  50. package/dist/src/core/node.element.js.map +1 -0
  51. package/dist/src/core/node.scope.d.ts +374 -0
  52. package/dist/src/core/node.scope.js +558 -0
  53. package/dist/src/core/node.scope.js.map +1 -0
  54. package/dist/src/core/option-update.d.ts +11 -0
  55. package/dist/src/core/option-update.js +59 -0
  56. package/dist/src/core/option-update.js.map +1 -0
  57. package/dist/src/dsl/compilers/array/compiler.js +13 -14
  58. package/dist/src/dsl/compilers/array/compiler.js.map +1 -1
  59. package/dist/src/dsl/compilers/boolean/compiler.d.ts +1 -1
  60. package/dist/src/dsl/compilers/boolean/compiler.js +14 -27
  61. package/dist/src/dsl/compilers/boolean/compiler.js.map +1 -1
  62. package/dist/src/dsl/compilers/enum/compiler.js +7 -10
  63. package/dist/src/dsl/compilers/enum/compiler.js.map +1 -1
  64. package/dist/src/dsl/compilers/index.d.ts +1 -1
  65. package/dist/src/dsl/compilers/index.js +5 -5
  66. package/dist/src/dsl/compilers/index.js.map +1 -1
  67. package/dist/src/dsl/utilty.d.ts +0 -4
  68. package/dist/src/dsl/utilty.js +3 -30
  69. package/dist/src/dsl/utilty.js.map +1 -1
  70. package/dist/src/eta/batch.d.ts +123 -0
  71. package/dist/src/eta/batch.js +162 -0
  72. package/dist/src/eta/batch.js.map +1 -0
  73. package/dist/src/eta/batcher.d.ts +184 -0
  74. package/dist/src/eta/batcher.js +335 -0
  75. package/dist/src/eta/batcher.js.map +1 -0
  76. package/dist/src/eta/cache.d.ts +36 -0
  77. package/dist/src/eta/cache.js +56 -0
  78. package/dist/src/eta/cache.js.map +1 -0
  79. package/dist/src/eta/controller.d.ts +608 -0
  80. package/dist/src/eta/controller.js +1036 -0
  81. package/dist/src/eta/controller.js.map +1 -0
  82. package/dist/src/eta/factory.d.ts +74 -0
  83. package/dist/src/eta/factory.js +121 -0
  84. package/dist/src/eta/factory.js.map +1 -0
  85. package/dist/src/eta/idle.d.ts +39 -0
  86. package/dist/src/eta/idle.js +52 -0
  87. package/dist/src/eta/idle.js.map +1 -0
  88. package/dist/src/eta/index.d.ts +52 -0
  89. package/dist/src/eta/index.js +13 -0
  90. package/dist/src/eta/index.js.map +1 -0
  91. package/dist/src/eta/observer.d.ts +263 -0
  92. package/dist/src/eta/observer.js +263 -0
  93. package/dist/src/eta/observer.js.map +1 -0
  94. package/dist/src/eta/operations.d.ts +41 -0
  95. package/dist/src/eta/operations.js +59 -0
  96. package/dist/src/eta/operations.js.map +1 -0
  97. package/dist/src/eta/source-registry.d.ts +198 -0
  98. package/dist/src/eta/source-registry.js +267 -0
  99. package/dist/src/eta/source-registry.js.map +1 -0
  100. package/dist/src/eta/template-index.d.ts +285 -0
  101. package/dist/src/eta/template-index.js +642 -0
  102. package/dist/src/eta/template-index.js.map +1 -0
  103. package/dist/src/eta/types.d.ts +529 -0
  104. package/dist/src/eta/types.js +2 -0
  105. package/dist/src/eta/types.js.map +1 -0
  106. package/dist/src/index.d.ts +21 -9
  107. package/dist/src/index.js +22 -11
  108. package/dist/src/index.js.map +1 -1
  109. package/dist/src/nodes/node.context.d.ts +5 -3
  110. package/dist/src/nodes/node.context.js +48 -3
  111. package/dist/src/nodes/node.context.js.map +1 -1
  112. package/dist/src/nodes/node.option.d.ts +11 -31
  113. package/dist/src/nodes/node.option.js +158 -222
  114. package/dist/src/nodes/node.option.js.map +1 -1
  115. package/dist/src/nodes/node.product.d.ts +7 -11
  116. package/dist/src/nodes/node.product.js +85 -64
  117. package/dist/src/nodes/node.product.js.map +1 -1
  118. package/dist/src/renders/attributes/buyLink.d.ts +2 -2
  119. package/dist/src/renders/attributes/buyLink.js +14 -11
  120. package/dist/src/renders/attributes/buyLink.js.map +1 -1
  121. package/dist/src/renders/attributes/devices.d.ts +2 -2
  122. package/dist/src/renders/attributes/devices.js +9 -19
  123. package/dist/src/renders/attributes/devices.js.map +1 -1
  124. package/dist/src/renders/attributes/discount.d.ts +2 -2
  125. package/dist/src/renders/attributes/discount.js +56 -44
  126. package/dist/src/renders/attributes/discount.js.map +1 -1
  127. package/dist/src/renders/attributes/hide.d.ts +2 -2
  128. package/dist/src/renders/attributes/hide.js +49 -14
  129. package/dist/src/renders/attributes/hide.js.map +1 -1
  130. package/dist/src/renders/attributes/index.d.ts +3 -3
  131. package/dist/src/renders/attributes/index.js +2 -4
  132. package/dist/src/renders/attributes/index.js.map +1 -1
  133. package/dist/src/renders/attributes/price.d.ts +2 -2
  134. package/dist/src/renders/attributes/price.js +30 -44
  135. package/dist/src/renders/attributes/price.js.map +1 -1
  136. package/dist/src/renders/attributes/subscription.d.ts +2 -2
  137. package/dist/src/renders/attributes/subscription.js +14 -20
  138. package/dist/src/renders/attributes/subscription.js.map +1 -1
  139. package/dist/src/renders/attributes/utilty.d.ts +2 -0
  140. package/dist/src/renders/attributes/utilty.js +17 -4
  141. package/dist/src/renders/attributes/utilty.js.map +1 -1
  142. package/dist/src/renders/context.d.ts +122 -10
  143. package/dist/src/renders/context.js +140 -80
  144. package/dist/src/renders/context.js.map +1 -1
  145. package/dist/src/renders/format.js +2 -2
  146. package/dist/src/renders/format.js.map +1 -1
  147. package/dist/src/renders/index.d.ts +6 -2
  148. package/dist/src/renders/index.js +67 -29
  149. package/dist/src/renders/index.js.map +1 -1
  150. package/dist/src/renders/observe.d.ts +1 -4
  151. package/dist/src/renders/observe.js +10 -24
  152. package/dist/src/renders/observe.js.map +1 -1
  153. package/dist/src/renders/render.wrapper.d.ts +37 -0
  154. package/dist/src/renders/render.wrapper.js +147 -0
  155. package/dist/src/renders/render.wrapper.js.map +1 -0
  156. package/dist/src/templating/eta.js +1 -4
  157. package/dist/src/templating/eta.js.map +1 -1
  158. package/package.json +4 -5
  159. package/dist/src/actions/action.button.d.ts +0 -2
  160. package/dist/src/actions/action.button.js +0 -8
  161. package/dist/src/actions/action.button.js.map +0 -1
  162. package/dist/src/actions/action.input.d.ts +0 -2
  163. package/dist/src/actions/action.input.js +0 -43
  164. package/dist/src/actions/action.input.js.map +0 -1
  165. package/dist/src/actions/action.select.d.ts +0 -2
  166. package/dist/src/actions/action.select.js +0 -14
  167. package/dist/src/actions/action.select.js.map +0 -1
  168. package/dist/src/actions/utilty.d.ts +0 -16
  169. package/dist/src/actions/utilty.js +0 -149
  170. package/dist/src/actions/utilty.js.map +0 -1
  171. package/dist/src/contexts/context.datalayer.d.ts +0 -9
  172. package/dist/src/contexts/context.datalayer.js +0 -3
  173. package/dist/src/contexts/context.datalayer.js.map +0 -1
  174. package/dist/src/contexts/context.derived.d.ts +0 -12
  175. package/dist/src/contexts/context.derived.js +0 -3
  176. package/dist/src/contexts/context.derived.js.map +0 -1
  177. package/dist/src/contexts/context.option.d.ts +0 -5
  178. package/dist/src/contexts/context.option.js +0 -3
  179. package/dist/src/contexts/context.option.js.map +0 -1
  180. package/dist/src/contexts/context.product.d.ts +0 -5
  181. package/dist/src/contexts/context.product.js +0 -3
  182. package/dist/src/contexts/context.product.js.map +0 -1
  183. package/dist/src/contexts/context.state.d.ts +0 -28
  184. package/dist/src/contexts/context.state.js +0 -3
  185. package/dist/src/contexts/context.state.js.map +0 -1
  186. package/dist/src/contexts/context.store.d.ts +0 -5
  187. package/dist/src/contexts/context.store.js +0 -3
  188. package/dist/src/contexts/context.store.js.map +0 -1
  189. package/dist/src/controllers/collect-controller.d.ts +0 -39
  190. package/dist/src/controllers/collect-controller.js +0 -161
  191. package/dist/src/controllers/collect-controller.js.map +0 -1
  192. package/dist/src/controllers/compute-controller.d.ts +0 -55
  193. package/dist/src/controllers/compute-controller.js +0 -350
  194. package/dist/src/controllers/compute-controller.js.map +0 -1
  195. package/dist/src/controllers/eta-renderer/eta-dom-renderer.d.ts +0 -25
  196. package/dist/src/controllers/eta-renderer/eta-dom-renderer.js +0 -192
  197. package/dist/src/controllers/eta-renderer/eta-dom-renderer.js.map +0 -1
  198. package/dist/src/controllers/eta-renderer/eta-mutation-observer.d.ts +0 -28
  199. package/dist/src/controllers/eta-renderer/eta-mutation-observer.js +0 -206
  200. package/dist/src/controllers/eta-renderer/eta-mutation-observer.js.map +0 -1
  201. package/dist/src/controllers/eta-renderer/eta-renderer.d.ts +0 -21
  202. package/dist/src/controllers/eta-renderer/eta-renderer.js +0 -77
  203. package/dist/src/controllers/eta-renderer/eta-renderer.js.map +0 -1
  204. package/dist/src/controllers/eta-renderer/eta-template-cache.d.ts +0 -24
  205. package/dist/src/controllers/eta-renderer/eta-template-cache.js +0 -61
  206. package/dist/src/controllers/eta-renderer/eta-template-cache.js.map +0 -1
  207. package/dist/src/controllers/eta-renderer/eta-types.d.ts +0 -11
  208. package/dist/src/controllers/eta-renderer/eta-types.js +0 -1
  209. package/dist/src/controllers/eta-renderer/eta-types.js.map +0 -1
  210. package/dist/src/controllers/eta-renderer/index.d.ts +0 -2
  211. package/dist/src/controllers/eta-renderer/index.js +0 -2
  212. package/dist/src/controllers/eta-renderer/index.js.map +0 -1
  213. package/dist/src/controllers/event-pipeline-controller.d.ts +0 -28
  214. package/dist/src/controllers/event-pipeline-controller.js +0 -72
  215. package/dist/src/controllers/event-pipeline-controller.js.map +0 -1
  216. package/dist/src/events/events.d.ts +0 -75
  217. package/dist/src/events/events.js +0 -78
  218. package/dist/src/events/events.js.map +0 -1
  219. package/dist/src/nodes/node.root.d.ts +0 -16
  220. package/dist/src/nodes/node.root.js +0 -49
  221. package/dist/src/nodes/node.root.js.map +0 -1
  222. package/dist/src/nodes/node.state.d.ts +0 -88
  223. package/dist/src/nodes/node.state.js +0 -330
  224. package/dist/src/nodes/node.state.js.map +0 -1
  225. package/dist/src/renders/utility.d.ts +0 -32
  226. package/dist/src/renders/utility.js +0 -191
  227. package/dist/src/renders/utility.js.map +0 -1
@@ -0,0 +1,179 @@
1
+ import type { BdComputeScan } from '../compute/compute.scan.js';
2
+ import type { ProductOption } from '@repobit/dex-store';
3
+ import { LitElement, type PropertyValues, type TemplateResult } from 'lit';
4
+ export declare const BD_NODE_REGISTER_EVENT: "bd-node-register";
5
+ export declare const BD_NODE_TRACK_WORK_EVENT: "bd-node-track-work";
6
+ /**
7
+ * String brand used as a fallback in case instanceof is not enough.
8
+ * For example, this can help if the package is bundled more than once.
9
+ */
10
+ export declare const BD_NODE_ELEMENT_BRAND: "__bdNodeElement__";
11
+ export interface BdNodeRegisterEventDetail {
12
+ node: BdNodeElement;
13
+ }
14
+ export interface BdNodeTrackWorkEventDetail<T = unknown> {
15
+ key: unknown;
16
+ work: PromiseLike<T>;
17
+ }
18
+ export declare function dispatchBdNodeTrackWork<T>(target: EventTarget, key: unknown, work: PromiseLike<T>): boolean;
19
+ declare global {
20
+ interface HTMLElementEventMap {
21
+ [BD_NODE_REGISTER_EVENT]: CustomEvent<BdNodeRegisterEventDetail>;
22
+ [BD_NODE_TRACK_WORK_EVENT]: CustomEvent<BdNodeTrackWorkEventDetail>;
23
+ }
24
+ }
25
+ export declare function isBdNodeElement(value: unknown): value is BdNodeElement;
26
+ /**
27
+ * Base class for all bd-* nodes.
28
+ *
29
+ * Responsibilities:
30
+ * - discovers the nearest logical BdNodeElement parent;
31
+ * - keeps a set of logical BdNodeElement children;
32
+ * - tracks local async work;
33
+ * - makes updateComplete wait for the whole logical subtree;
34
+ * - owns the set of native action elements in its logical subtree
35
+ * (topology), fed incrementally by BdActionElementAdapter announcements.
36
+ *
37
+ * It does NOT know about:
38
+ * - product ids;
39
+ * - price clients;
40
+ * - scope;
41
+ * - @consume / @provide;
42
+ * - binding data attributes.
43
+ *
44
+ * Those belong in BdScopedElement, controllers, or concrete nodes.
45
+ */
46
+ export declare abstract class BdNodeElement extends LitElement {
47
+ readonly [BD_NODE_ELEMENT_BRAND] = true;
48
+ topologyBoundary: boolean;
49
+ private readonly _bdChildren;
50
+ private _bdParent?;
51
+ /**
52
+ * Latest local work per key.
53
+ *
54
+ * If the same key is tracked again, the new promise replaces the old one.
55
+ * This is important for @lit/task-like flows where old work can be aborted
56
+ * or made obsolete by newer args.
57
+ */
58
+ private readonly _localWork;
59
+ private _childrenRevision;
60
+ private readonly _childrenRevisionWaiters;
61
+ private _workRevision;
62
+ private readonly _workRevisionWaiters;
63
+ private readonly _actionTopology;
64
+ /**
65
+ * Default render for infrastructure bd-* nodes.
66
+ *
67
+ * Subclasses can override this if they need their own template.
68
+ */
69
+ protected render(): TemplateResult;
70
+ protected willUpdate(changedProperties: PropertyValues<this>): void;
71
+ connectedCallback(): void;
72
+ disconnectedCallback(): void;
73
+ protected get bdParent(): BdNodeElement | undefined;
74
+ protected get bdChildren(): ReadonlySet<BdNodeElement>;
75
+ /**
76
+ * Revision that changes whenever the set of action elements anywhere in this
77
+ * node's logical subtree changes. Use this as a compute input.
78
+ */
79
+ get actionTopologyRevision(): number;
80
+ /**
81
+ * Action elements owned directly by this node (not descendants).
82
+ */
83
+ get localActionElements(): readonly HTMLElement[];
84
+ /**
85
+ * All action elements reachable from this node, unioned across the logical
86
+ * bd subtree. Walks the bd tree (tiny), not arbitrary DOM.
87
+ */
88
+ collectActionElements(): HTMLElement[];
89
+ /**
90
+ * Collected compute declarations for action elements reachable from this
91
+ * node. These are owned by topology so compute does not rescan DOM actions.
92
+ */
93
+ collectActionScans(): BdComputeScan[];
94
+ /**
95
+ * Resolved option seeds reachable from this node, unioned across the logical
96
+ * bd subtree. Each option carries its product via option.getProduct().
97
+ */
98
+ collectOptionSeeds(): ProductOption[];
99
+ protected setLocalOptionSeed(option: ProductOption | undefined): void;
100
+ protected get hasLocalWork(): boolean;
101
+ protected get localWorkCount(): number;
102
+ /**
103
+ * Promise that resolves when all CURRENT local work is complete.
104
+ *
105
+ * This is intentionally separate from updateComplete.
106
+ *
107
+ * localComplete:
108
+ * current node async work only
109
+ *
110
+ * updateComplete:
111
+ * current node + local work + logical children
112
+ *
113
+ * Loops while a newer `trackLocalWork` replaces tracked work
114
+ * (`_awaitCurrentLocalWorkComplete` returns `false` on revision
115
+ * change). The mirror of `getUpdateComplete`'s contract — a
116
+ * single `await` cannot catch the replacement because the
117
+ * replacement bumps `_workRevision` and clears the existing
118
+ * slot, so the earlier await's "all stable" signal is no
119
+ * longer trustworthy.
120
+ */
121
+ protected get localComplete(): Promise<void>;
122
+ private _awaitLocalCompleteLoop;
123
+ /**
124
+ * Tracks local async work.
125
+ *
126
+ * Use this from Task / BdResolveController:
127
+ *
128
+ * task: (args, context) => {
129
+ * const work = this.resolveAndPublish(args, context.signal);
130
+ * return this.trackLocalWork(this._workKey, work);
131
+ * }
132
+ *
133
+ * Important:
134
+ * - the promise should include resolve + commit/publish;
135
+ * - do not await this.updateComplete inside this promise;
136
+ * - old work with the same key is replaced by newer work.
137
+ */
138
+ trackLocalWork<T>(key: unknown, work: PromiseLike<T>): Promise<T>;
139
+ /**
140
+ * Hook for subclasses that need to react when a logical child is adopted.
141
+ */
142
+ protected onBdChildConnected(_child: BdNodeElement): void;
143
+ /**
144
+ * Hook for subclasses that need to react when a logical child is removed.
145
+ */
146
+ protected onBdChildDisconnected(_child: BdNodeElement): void;
147
+ /**
148
+ * This is the important part.
149
+ *
150
+ * Awaiting updateComplete on any bd node means:
151
+ *
152
+ * 1. this element's Lit update is complete;
153
+ * 2. this element's local async work is complete;
154
+ * 3. any update caused by local work / publishScope is complete;
155
+ * 4. all logical bd children are updateComplete;
156
+ * 5. the tree did not change while we were waiting.
157
+ */
158
+ protected getUpdateComplete(): Promise<boolean>;
159
+ private _registerWithNearestBdParent;
160
+ private readonly _onBdNodeRegister;
161
+ private readonly _onBdNodeTrackWork;
162
+ private _adoptBdChild;
163
+ private _removeBdChild;
164
+ private _clearBdChildren;
165
+ /**
166
+ * Fallback adoption for already-upgraded descendants in light DOM.
167
+ *
168
+ * This does not cross arbitrary shadow roots. The event-based registration
169
+ * handles the composed/shadow case.
170
+ */
171
+ private _adoptExistingLightDomBdChildren;
172
+ private _isNearestLightDomBdParentOf;
173
+ private _awaitCurrentLocalWorkComplete;
174
+ private _awaitCurrentBdChildrenComplete;
175
+ private _createChildrenRevisionWait;
176
+ private _createWorkRevisionWait;
177
+ private _bumpChildrenRevision;
178
+ private _bumpWorkRevision;
179
+ }