@repobit/dex-store-elements 1.7.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -905
- package/README.md +9 -7
- package/dist/src/actions/action.adapter.d.ts +36 -0
- package/dist/src/actions/action.adapter.js +183 -0
- package/dist/src/actions/action.adapter.js.map +1 -0
- package/dist/src/actions/action.attributes.d.ts +15 -0
- package/dist/src/actions/action.attributes.js +137 -0
- package/dist/src/actions/action.attributes.js.map +1 -0
- package/dist/src/actions/action.registry.d.ts +4 -0
- package/dist/src/actions/action.registry.js +119 -0
- package/dist/src/actions/action.registry.js.map +1 -0
- package/dist/src/actions/index.d.ts +3 -2
- package/dist/src/actions/index.js +3 -80
- package/dist/src/actions/index.js.map +1 -1
- package/dist/src/compute/compute.expand.d.ts +70 -0
- package/dist/src/compute/compute.expand.js +319 -0
- package/dist/src/compute/compute.expand.js.map +1 -0
- package/dist/src/compute/compute.scan.d.ts +54 -0
- package/dist/src/compute/compute.scan.js +160 -0
- package/dist/src/compute/compute.scan.js.map +1 -0
- package/dist/src/compute/option-resolver.d.ts +31 -0
- package/dist/src/compute/option-resolver.js +147 -0
- package/dist/src/compute/option-resolver.js.map +1 -0
- package/dist/src/contexts/context.compute.d.ts +12 -0
- package/dist/src/contexts/context.compute.js +4 -0
- package/dist/src/contexts/context.compute.js.map +1 -0
- package/dist/src/contexts/context.scope.d.ts +139 -0
- package/dist/src/contexts/context.scope.js +48 -0
- package/dist/src/contexts/context.scope.js.map +1 -0
- package/dist/src/controllers/controller.action-resolve.d.ts +110 -0
- package/dist/src/controllers/controller.action-resolve.js +203 -0
- package/dist/src/controllers/controller.action-resolve.js.map +1 -0
- package/dist/src/controllers/controller.action-topology.d.ts +59 -0
- package/dist/src/controllers/controller.action-topology.js +130 -0
- package/dist/src/controllers/controller.action-topology.js.map +1 -0
- package/dist/src/controllers/controller.compute.d.ts +72 -0
- package/dist/src/controllers/controller.compute.js +110 -0
- package/dist/src/controllers/controller.compute.js.map +1 -0
- package/dist/src/controllers/controller.resolve.d.ts +78 -0
- package/dist/src/controllers/controller.resolve.js +205 -0
- package/dist/src/controllers/controller.resolve.js.map +1 -0
- package/dist/src/core/action-topology.d.ts +62 -0
- package/dist/src/core/action-topology.js +67 -0
- package/dist/src/core/action-topology.js.map +1 -0
- package/dist/src/core/actions.d.ts +64 -0
- package/dist/src/core/actions.js +47 -0
- package/dist/src/core/actions.js.map +1 -0
- package/dist/src/core/node.element.d.ts +179 -0
- package/dist/src/core/node.element.js +573 -0
- package/dist/src/core/node.element.js.map +1 -0
- package/dist/src/core/node.scope.d.ts +374 -0
- package/dist/src/core/node.scope.js +558 -0
- package/dist/src/core/node.scope.js.map +1 -0
- package/dist/src/core/option-update.d.ts +11 -0
- package/dist/src/core/option-update.js +59 -0
- package/dist/src/core/option-update.js.map +1 -0
- package/dist/src/dsl/compilers/array/compiler.js +13 -14
- package/dist/src/dsl/compilers/array/compiler.js.map +1 -1
- package/dist/src/dsl/compilers/boolean/compiler.d.ts +1 -1
- package/dist/src/dsl/compilers/boolean/compiler.js +14 -27
- package/dist/src/dsl/compilers/boolean/compiler.js.map +1 -1
- package/dist/src/dsl/compilers/enum/compiler.js +7 -10
- package/dist/src/dsl/compilers/enum/compiler.js.map +1 -1
- package/dist/src/dsl/compilers/index.d.ts +1 -1
- package/dist/src/dsl/compilers/index.js +5 -5
- package/dist/src/dsl/compilers/index.js.map +1 -1
- package/dist/src/dsl/utilty.d.ts +0 -4
- package/dist/src/dsl/utilty.js +3 -30
- package/dist/src/dsl/utilty.js.map +1 -1
- package/dist/src/eta/batch.d.ts +123 -0
- package/dist/src/eta/batch.js +162 -0
- package/dist/src/eta/batch.js.map +1 -0
- package/dist/src/eta/batcher.d.ts +184 -0
- package/dist/src/eta/batcher.js +335 -0
- package/dist/src/eta/batcher.js.map +1 -0
- package/dist/src/eta/cache.d.ts +36 -0
- package/dist/src/eta/cache.js +56 -0
- package/dist/src/eta/cache.js.map +1 -0
- package/dist/src/eta/controller.d.ts +608 -0
- package/dist/src/eta/controller.js +1036 -0
- package/dist/src/eta/controller.js.map +1 -0
- package/dist/src/eta/factory.d.ts +74 -0
- package/dist/src/eta/factory.js +121 -0
- package/dist/src/eta/factory.js.map +1 -0
- package/dist/src/eta/idle.d.ts +39 -0
- package/dist/src/eta/idle.js +52 -0
- package/dist/src/eta/idle.js.map +1 -0
- package/dist/src/eta/index.d.ts +52 -0
- package/dist/src/eta/index.js +13 -0
- package/dist/src/eta/index.js.map +1 -0
- package/dist/src/eta/observer.d.ts +263 -0
- package/dist/src/eta/observer.js +263 -0
- package/dist/src/eta/observer.js.map +1 -0
- package/dist/src/eta/operations.d.ts +41 -0
- package/dist/src/eta/operations.js +59 -0
- package/dist/src/eta/operations.js.map +1 -0
- package/dist/src/eta/source-registry.d.ts +198 -0
- package/dist/src/eta/source-registry.js +267 -0
- package/dist/src/eta/source-registry.js.map +1 -0
- package/dist/src/eta/template-index.d.ts +285 -0
- package/dist/src/eta/template-index.js +642 -0
- package/dist/src/eta/template-index.js.map +1 -0
- package/dist/src/eta/types.d.ts +529 -0
- package/dist/src/eta/types.js +2 -0
- package/dist/src/eta/types.js.map +1 -0
- package/dist/src/index.d.ts +21 -9
- package/dist/src/index.js +22 -11
- package/dist/src/index.js.map +1 -1
- package/dist/src/nodes/node.context.d.ts +5 -3
- package/dist/src/nodes/node.context.js +48 -3
- package/dist/src/nodes/node.context.js.map +1 -1
- package/dist/src/nodes/node.option.d.ts +11 -31
- package/dist/src/nodes/node.option.js +158 -222
- package/dist/src/nodes/node.option.js.map +1 -1
- package/dist/src/nodes/node.product.d.ts +7 -11
- package/dist/src/nodes/node.product.js +85 -64
- package/dist/src/nodes/node.product.js.map +1 -1
- package/dist/src/renders/attributes/buyLink.d.ts +2 -2
- package/dist/src/renders/attributes/buyLink.js +14 -11
- package/dist/src/renders/attributes/buyLink.js.map +1 -1
- package/dist/src/renders/attributes/devices.d.ts +2 -2
- package/dist/src/renders/attributes/devices.js +9 -19
- package/dist/src/renders/attributes/devices.js.map +1 -1
- package/dist/src/renders/attributes/discount.d.ts +2 -2
- package/dist/src/renders/attributes/discount.js +56 -44
- package/dist/src/renders/attributes/discount.js.map +1 -1
- package/dist/src/renders/attributes/hide.d.ts +2 -2
- package/dist/src/renders/attributes/hide.js +49 -14
- package/dist/src/renders/attributes/hide.js.map +1 -1
- package/dist/src/renders/attributes/index.d.ts +3 -3
- package/dist/src/renders/attributes/index.js +2 -4
- package/dist/src/renders/attributes/index.js.map +1 -1
- package/dist/src/renders/attributes/price.d.ts +2 -2
- package/dist/src/renders/attributes/price.js +30 -44
- package/dist/src/renders/attributes/price.js.map +1 -1
- package/dist/src/renders/attributes/subscription.d.ts +2 -2
- package/dist/src/renders/attributes/subscription.js +14 -20
- package/dist/src/renders/attributes/subscription.js.map +1 -1
- package/dist/src/renders/attributes/utilty.d.ts +2 -0
- package/dist/src/renders/attributes/utilty.js +17 -4
- package/dist/src/renders/attributes/utilty.js.map +1 -1
- package/dist/src/renders/context.d.ts +122 -10
- package/dist/src/renders/context.js +140 -80
- package/dist/src/renders/context.js.map +1 -1
- package/dist/src/renders/format.js +2 -2
- package/dist/src/renders/format.js.map +1 -1
- package/dist/src/renders/index.d.ts +6 -2
- package/dist/src/renders/index.js +67 -29
- package/dist/src/renders/index.js.map +1 -1
- package/dist/src/renders/observe.d.ts +1 -4
- package/dist/src/renders/observe.js +10 -24
- package/dist/src/renders/observe.js.map +1 -1
- package/dist/src/renders/render.wrapper.d.ts +37 -0
- package/dist/src/renders/render.wrapper.js +147 -0
- package/dist/src/renders/render.wrapper.js.map +1 -0
- package/dist/src/templating/eta.js +1 -4
- package/dist/src/templating/eta.js.map +1 -1
- package/package.json +4 -5
- package/dist/src/actions/action.button.d.ts +0 -2
- package/dist/src/actions/action.button.js +0 -8
- package/dist/src/actions/action.button.js.map +0 -1
- package/dist/src/actions/action.input.d.ts +0 -2
- package/dist/src/actions/action.input.js +0 -43
- package/dist/src/actions/action.input.js.map +0 -1
- package/dist/src/actions/action.select.d.ts +0 -2
- package/dist/src/actions/action.select.js +0 -14
- package/dist/src/actions/action.select.js.map +0 -1
- package/dist/src/actions/utilty.d.ts +0 -16
- package/dist/src/actions/utilty.js +0 -149
- package/dist/src/actions/utilty.js.map +0 -1
- package/dist/src/contexts/context.datalayer.d.ts +0 -9
- package/dist/src/contexts/context.datalayer.js +0 -3
- package/dist/src/contexts/context.datalayer.js.map +0 -1
- package/dist/src/contexts/context.derived.d.ts +0 -12
- package/dist/src/contexts/context.derived.js +0 -3
- package/dist/src/contexts/context.derived.js.map +0 -1
- package/dist/src/contexts/context.option.d.ts +0 -5
- package/dist/src/contexts/context.option.js +0 -3
- package/dist/src/contexts/context.option.js.map +0 -1
- package/dist/src/contexts/context.product.d.ts +0 -5
- package/dist/src/contexts/context.product.js +0 -3
- package/dist/src/contexts/context.product.js.map +0 -1
- package/dist/src/contexts/context.state.d.ts +0 -28
- package/dist/src/contexts/context.state.js +0 -3
- package/dist/src/contexts/context.state.js.map +0 -1
- package/dist/src/contexts/context.store.d.ts +0 -5
- package/dist/src/contexts/context.store.js +0 -3
- package/dist/src/contexts/context.store.js.map +0 -1
- package/dist/src/controllers/collect-controller.d.ts +0 -39
- package/dist/src/controllers/collect-controller.js +0 -161
- package/dist/src/controllers/collect-controller.js.map +0 -1
- package/dist/src/controllers/compute-controller.d.ts +0 -55
- package/dist/src/controllers/compute-controller.js +0 -350
- package/dist/src/controllers/compute-controller.js.map +0 -1
- package/dist/src/controllers/eta-renderer/eta-dom-renderer.d.ts +0 -25
- package/dist/src/controllers/eta-renderer/eta-dom-renderer.js +0 -192
- package/dist/src/controllers/eta-renderer/eta-dom-renderer.js.map +0 -1
- package/dist/src/controllers/eta-renderer/eta-mutation-observer.d.ts +0 -28
- package/dist/src/controllers/eta-renderer/eta-mutation-observer.js +0 -206
- package/dist/src/controllers/eta-renderer/eta-mutation-observer.js.map +0 -1
- package/dist/src/controllers/eta-renderer/eta-renderer.d.ts +0 -21
- package/dist/src/controllers/eta-renderer/eta-renderer.js +0 -77
- package/dist/src/controllers/eta-renderer/eta-renderer.js.map +0 -1
- package/dist/src/controllers/eta-renderer/eta-template-cache.d.ts +0 -24
- package/dist/src/controllers/eta-renderer/eta-template-cache.js +0 -61
- package/dist/src/controllers/eta-renderer/eta-template-cache.js.map +0 -1
- package/dist/src/controllers/eta-renderer/eta-types.d.ts +0 -11
- package/dist/src/controllers/eta-renderer/eta-types.js +0 -1
- package/dist/src/controllers/eta-renderer/eta-types.js.map +0 -1
- package/dist/src/controllers/eta-renderer/index.d.ts +0 -2
- package/dist/src/controllers/eta-renderer/index.js +0 -2
- package/dist/src/controllers/eta-renderer/index.js.map +0 -1
- package/dist/src/controllers/event-pipeline-controller.d.ts +0 -28
- package/dist/src/controllers/event-pipeline-controller.js +0 -72
- package/dist/src/controllers/event-pipeline-controller.js.map +0 -1
- package/dist/src/events/events.d.ts +0 -75
- package/dist/src/events/events.js +0 -78
- package/dist/src/events/events.js.map +0 -1
- package/dist/src/nodes/node.root.d.ts +0 -16
- package/dist/src/nodes/node.root.js +0 -49
- package/dist/src/nodes/node.root.js.map +0 -1
- package/dist/src/nodes/node.state.d.ts +0 -88
- package/dist/src/nodes/node.state.js +0 -330
- package/dist/src/nodes/node.state.js.map +0 -1
- package/dist/src/renders/utility.d.ts +0 -32
- package/dist/src/renders/utility.js +0 -191
- package/dist/src/renders/utility.js.map +0 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export const BD_ACTION_REQUEST_EVENT = 'bd-action-request';
|
|
2
|
+
let bdTransitionSeq = 0;
|
|
3
|
+
export function createBdTransition(detail, originNode) {
|
|
4
|
+
return {
|
|
5
|
+
seq: ++bdTransitionSeq,
|
|
6
|
+
command: detail.command,
|
|
7
|
+
originNode,
|
|
8
|
+
createdAt: Date.now()
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export function dispatchBdActionRequest(eventTarget, detail) {
|
|
12
|
+
return eventTarget.dispatchEvent(new CustomEvent(BD_ACTION_REQUEST_EVENT, {
|
|
13
|
+
bubbles: true,
|
|
14
|
+
composed: true,
|
|
15
|
+
cancelable: true,
|
|
16
|
+
detail
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
export function isBdActionRequestEvent(event) {
|
|
20
|
+
if (event.type !== BD_ACTION_REQUEST_EVENT) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const detail = event.detail;
|
|
24
|
+
return (typeof detail === 'object' &&
|
|
25
|
+
detail !== null &&
|
|
26
|
+
'command' in detail);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Pulls the optional `eventId` off the command carried by a transition.
|
|
30
|
+
*
|
|
31
|
+
* `eventId` is set on the action element via `data-store-event-id="…"` and
|
|
32
|
+
* is the matching key for the `ignore-events="…"` attribute on `bd-*`
|
|
33
|
+
* provider elements. Returns `undefined` for commands that did not declare
|
|
34
|
+
* one.
|
|
35
|
+
*/
|
|
36
|
+
export function getCommandEventId(command) {
|
|
37
|
+
return command.kind === 'set-action'
|
|
38
|
+
? command.action.eventId
|
|
39
|
+
: command.update.eventId;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Convenience wrapper around {@link getCommandEventId} for transitions.
|
|
43
|
+
*/
|
|
44
|
+
export function getTransitionEventId(transition) {
|
|
45
|
+
return getCommandEventId(transition.command);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/core/actions.ts"],"names":[],"mappings":"AA6CA,MAAM,CAAC,MAAM,uBAAuB,GAClC,mBAA4B,CAAC;AAY/B,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,MAAM,UAAU,kBAAkB,CAChC,MAA6B,EAC7B,UAA+B;IAE/B,OAAO;QACL,GAAG,EAAQ,EAAE,eAAe;QAC5B,OAAO,EAAI,MAAM,CAAC,OAAO;QACzB,UAAU;QACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,WAAwB,EACxB,MAA6B;IAE7B,OAAO,WAAW,CAAC,aAAa,CAC9B,IAAI,WAAW,CACb,uBAAuB,EACvB;QACE,OAAO,EAAK,IAAI;QAChB,QAAQ,EAAI,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,MAAM;KACP,CACF,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAAY;IAEZ,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAI,KAA8B,CAAC,MAAM,CAAC;IAEtD,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,SAAS,IAAI,MAAM,CACpB,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAwB;IAExB,OAAO,OAAO,CAAC,IAAI,KAAK,YAAY;QAClC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;QACxB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAwB;IAExB,OAAO,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["export type UpdateByDelta = Readonly<{\n type : 'devices' | 'subscription';\n delta : number | 'next' | 'prev';\n min? : number;\n max? : number;\n useAsValue?: boolean;\n /**\n * Optional identifier for the action source element\n * (`data-store-event-id`). Consumers filter against this id via the\n * `ignore-events` attribute on `bd-*` provider elements.\n */\n eventId? : string;\n}>;\n\nexport type Action = Readonly<{\n id? : string;\n campaign? : string;\n bundle? : boolean;\n devices? : number;\n subscription?: number;\n /**\n * Optional identifier for the action source element\n * (`data-store-event-id`). Consumers filter against this id via the\n * `ignore-events` attribute on `bd-*` provider elements.\n */\n eventId? : string;\n}>;\n\nexport type BdActionCommand =\n | Readonly<{\n kind : 'update-by-delta';\n update: UpdateByDelta;\n }>\n | Readonly<{\n kind : 'set-action';\n action: Action;\n }>;\n\nexport type BdTransition = Readonly<{\n seq : number;\n command : BdActionCommand;\n originNode?: EventTarget | null;\n createdAt : number;\n}>;\n\nexport const BD_ACTION_REQUEST_EVENT =\n 'bd-action-request' as const;\n\nexport type BdActionRequestDetail = Readonly<{\n command: BdActionCommand;\n}>;\n\ndeclare global {\n interface HTMLElementEventMap {\n [BD_ACTION_REQUEST_EVENT]: CustomEvent<BdActionRequestDetail>;\n }\n}\n\nlet bdTransitionSeq = 0;\n\nexport function createBdTransition(\n detail: BdActionRequestDetail,\n originNode?: EventTarget | null\n): BdTransition {\n return {\n seq : ++bdTransitionSeq,\n command : detail.command,\n originNode,\n createdAt: Date.now()\n };\n}\n\nexport function dispatchBdActionRequest(\n eventTarget: EventTarget,\n detail: BdActionRequestDetail\n): boolean {\n return eventTarget.dispatchEvent(\n new CustomEvent<BdActionRequestDetail>(\n BD_ACTION_REQUEST_EVENT,\n {\n bubbles : true,\n composed : true,\n cancelable: true,\n detail\n }\n )\n );\n}\n\nexport function isBdActionRequestEvent(\n event: Event\n): event is CustomEvent<BdActionRequestDetail> {\n if (event.type !== BD_ACTION_REQUEST_EVENT) {\n return false;\n }\n\n const detail = (event as CustomEvent<unknown>).detail;\n\n return (\n typeof detail === 'object' &&\n detail !== null &&\n 'command' in detail\n );\n}\n\n/**\n * Pulls the optional `eventId` off the command carried by a transition.\n *\n * `eventId` is set on the action element via `data-store-event-id=\"…\"` and\n * is the matching key for the `ignore-events=\"…\"` attribute on `bd-*`\n * provider elements. Returns `undefined` for commands that did not declare\n * one.\n */\nexport function getCommandEventId(\n command: BdActionCommand\n): string | undefined {\n return command.kind === 'set-action'\n ? command.action.eventId\n : command.update.eventId;\n}\n\n/**\n * Convenience wrapper around {@link getCommandEventId} for transitions.\n */\nexport function getTransitionEventId(\n transition: BdTransition\n): string | undefined {\n return getCommandEventId(transition.command);\n}\n"]}
|
|
@@ -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
|
+
}
|