mage-obsidian 2.5.0 → 2.6.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.
@@ -0,0 +1,31 @@
1
+ export declare const ActivityPhase: {
2
+ readonly Begin: "begin";
3
+ readonly End: "end";
4
+ };
5
+ export type ActivityPhase = (typeof ActivityPhase)[keyof typeof ActivityPhase];
6
+ export interface ActivityMatch {
7
+ phase: ActivityPhase;
8
+ scopes: string[];
9
+ }
10
+ export interface ActivityTrackerDeps {
11
+ onChange?(scope: string, pending: number): void;
12
+ schedule?(callback: () => void, ms: number): () => void;
13
+ timeoutMs?: number;
14
+ onStuck?(scope: string): void;
15
+ }
16
+ export declare function matchActivity(event: string): ActivityMatch | null;
17
+ export declare class ActivityTracker {
18
+ private readonly counts;
19
+ private readonly timers;
20
+ private readonly deps;
21
+ constructor(deps?: ActivityTrackerDeps);
22
+ begin(scope: string): void;
23
+ end(scope: string): void;
24
+ pending(scope: string): number;
25
+ isBusy(scope: string): boolean;
26
+ busyScopes(): string[];
27
+ private arm;
28
+ private disarm;
29
+ }
30
+ export declare function createActivityTracker(deps?: ActivityTrackerDeps): ActivityTracker;
31
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/runtime/activity.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;;CAGhB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAWD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAiBjE;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IAEpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IAExD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;gBAE/B,IAAI,GAAE,mBAAwB;IAI1C,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS1B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAaxB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI9B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9B,UAAU,IAAI,MAAM,EAAE;IAItB,OAAO,CAAC,GAAG;IAoBX,OAAO,CAAC,MAAM;CAIjB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,mBAAwB,GAAG,eAAe,CAErF"}
@@ -0,0 +1,89 @@
1
+ import { MutationPhase, MUTATION_PHASES } from "./mutationEvent.js";
2
+ export const ActivityPhase = {
3
+ Begin: "begin",
4
+ End: "end",
5
+ };
6
+ const PHASE_ACTIVITY = {
7
+ [MutationPhase.Before]: ActivityPhase.Begin,
8
+ [MutationPhase.After]: ActivityPhase.End,
9
+ [MutationPhase.Failed]: ActivityPhase.End,
10
+ };
11
+ const SEPARATOR = "_";
12
+ const DEFAULT_TIMEOUT_MS = 15_000;
13
+ export function matchActivity(event) {
14
+ for (const phase of MUTATION_PHASES) {
15
+ const suffix = `${SEPARATOR}${phase}`;
16
+ if (!event.endsWith(suffix)) {
17
+ continue;
18
+ }
19
+ const operation = event.slice(0, -suffix.length);
20
+ const domain = operation.split(SEPARATOR)[0];
21
+ if (!domain || !operation) {
22
+ return null;
23
+ }
24
+ return {
25
+ phase: PHASE_ACTIVITY[phase],
26
+ scopes: domain === operation ? [domain] : [domain, operation],
27
+ };
28
+ }
29
+ return null;
30
+ }
31
+ export class ActivityTracker {
32
+ counts = new Map();
33
+ timers = new Map();
34
+ deps;
35
+ constructor(deps = {}) {
36
+ this.deps = deps;
37
+ }
38
+ begin(scope) {
39
+ const next = this.pending(scope) + 1;
40
+ this.counts.set(scope, next);
41
+ if (next === 1) {
42
+ this.arm(scope);
43
+ }
44
+ this.deps.onChange?.(scope, next);
45
+ }
46
+ end(scope) {
47
+ const current = this.pending(scope);
48
+ if (current === 0) {
49
+ return;
50
+ }
51
+ const next = current - 1;
52
+ this.counts.set(scope, next);
53
+ if (next === 0) {
54
+ this.disarm(scope);
55
+ }
56
+ this.deps.onChange?.(scope, next);
57
+ }
58
+ pending(scope) {
59
+ return this.counts.get(scope) ?? 0;
60
+ }
61
+ isBusy(scope) {
62
+ return this.pending(scope) > 0;
63
+ }
64
+ busyScopes() {
65
+ return [...this.counts.entries()].filter(([, count]) => count > 0).map(([scope]) => scope);
66
+ }
67
+ arm(scope) {
68
+ const timeout = this.deps.timeoutMs ?? DEFAULT_TIMEOUT_MS;
69
+ const schedule = this.deps.schedule ??
70
+ ((callback, ms) => {
71
+ const id = setTimeout(callback, ms);
72
+ return () => clearTimeout(id);
73
+ });
74
+ this.timers.set(scope, schedule(() => {
75
+ this.timers.delete(scope);
76
+ this.counts.set(scope, 0);
77
+ this.deps.onStuck?.(scope);
78
+ this.deps.onChange?.(scope, 0);
79
+ }, timeout));
80
+ }
81
+ disarm(scope) {
82
+ this.timers.get(scope)?.();
83
+ this.timers.delete(scope);
84
+ }
85
+ }
86
+ export function createActivityTracker(deps = {}) {
87
+ return new ActivityTracker(deps);
88
+ }
89
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/runtime/activity.ts"],"names":[],"mappings":"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"}
@@ -1,56 +1,49 @@
1
- /**
2
- * Storefront event manager — the front-end counterpart of Magento's observers,
3
- * next to the plugin system already ported in `interceptorManager.ts`.
4
- *
5
- * The two answer different questions and both exist for the same reason they do
6
- * in PHP: an interceptor wraps a specific function and can change what it does,
7
- * an observer subscribes to something that happened and cannot. Extending the
8
- * cart flow from another module should not require knowing which function to
9
- * wrap, so the flow announces what it did and anyone can listen.
10
- *
11
- * Observers run in `sortOrder` and receive one mutable data object (Magento
12
- * parity), so a `*_before` observer can amend the request the flow is about to
13
- * make. An observer that throws is reported and skipped: a failing analytics
14
- * hook must not take down an add-to-cart.
15
- *
16
- * No DOM and no framework, so it is unit-testable in Node. The concrete
17
- * storefront wiring (the singleton, the CustomEvent bridge) lives in the
18
- * module's `web/js/events.ts`.
19
- */
1
+ export interface StorefrontEventMap {
2
+ }
3
+ export type KnownEvent = keyof StorefrontEventMap & string;
20
4
  export type EventObserver<T = Record<string, unknown>> = (data: T) => void | Promise<void>;
5
+ export interface ObserverOptions {
6
+ name?: string;
7
+ sortOrder?: number;
8
+ }
21
9
  export interface ObserverEntry {
22
10
  name: string;
23
11
  observer: EventObserver<never>;
24
12
  sortOrder: number;
25
13
  }
14
+ export interface DispatchOptions {
15
+ sticky?: boolean;
16
+ mirror?: boolean;
17
+ }
18
+ export interface DispatchHook {
19
+ start?(event: string, data: object, options: DispatchOptions): void;
20
+ end?(event: string, data: object, options: DispatchOptions): void;
21
+ }
26
22
  export interface EventManagerDeps {
27
- /** Reporting sink for an observer that threw. Defaults to `console.error`. */
28
23
  onError?(event: string, name: string, error: unknown): void;
24
+ now?(): number;
25
+ debug?: boolean;
29
26
  }
30
27
  export declare class EventManager {
31
28
  private readonly observers;
29
+ private readonly hooks;
30
+ private readonly stickyData;
32
31
  private readonly deps;
32
+ private debugging;
33
33
  constructor(deps?: EventManagerDeps);
34
- /**
35
- * Subscribe to an event.
36
- *
37
- * @returns A function that removes this observer.
38
- */
39
- observe<T = Record<string, unknown>>(event: string, observer: EventObserver<T>, { name, sortOrder }?: {
40
- name?: string;
41
- sortOrder?: number;
42
- }): () => void;
43
- /**
44
- * Notify every observer of an event, in order, awaiting each.
45
- *
46
- * @returns The same data object the observers were given, after any of them
47
- * amended it — so a dispatcher can read back what they changed.
48
- */
49
- dispatch<T extends object>(event: string, data: T): Promise<T>;
50
- /**
51
- * Names of the observers registered for an event, in execution order.
52
- */
34
+ observe<K extends KnownEvent>(event: K, observer: EventObserver<StorefrontEventMap[K]>, options?: ObserverOptions): () => void;
35
+ observe<T = Record<string, unknown>>(event: string, observer: EventObserver<T>, options?: ObserverOptions): () => void;
36
+ observeOnce<K extends KnownEvent>(event: K, observer: EventObserver<StorefrontEventMap[K]>, options?: ObserverOptions): () => void;
37
+ observeOnce<T = Record<string, unknown>>(event: string, observer: EventObserver<T>, options?: ObserverOptions): () => void;
38
+ dispatch<K extends KnownEvent>(event: K, data: StorefrontEventMap[K], options?: DispatchOptions): Promise<StorefrontEventMap[K]>;
39
+ dispatch<T extends object>(event: string, data: T, options?: DispatchOptions): Promise<T>;
40
+ sticky(event: string): object | undefined;
41
+ onDispatch(hook: DispatchHook): () => void;
42
+ debug(enabled?: boolean): void;
53
43
  observersOf(event: string): string[];
44
+ private invoke;
45
+ private runHooks;
46
+ private clock;
54
47
  private report;
55
48
  }
56
49
  //# sourceMappingURL=eventManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventManager.d.ts","sourceRoot":"","sources":["../../src/runtime/eventManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3F,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,8EAA8E;IAC9E,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/D;AAID,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IAEjE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;gBAE5B,IAAI,GAAE,gBAAqB;IAIvC;;;;OAIG;IACH,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,EAAE,IAAI,EAAE,SAA8B,EAAE,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GACrF,MAAM,IAAI;IAmBb;;;;;OAKG;IACG,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAcpE;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAIpC,OAAO,CAAC,MAAM;CAUjB"}
1
+ {"version":3,"file":"eventManager.d.ts","sourceRoot":"","sources":["../../src/runtime/eventManager.ts"],"names":[],"mappings":"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"}
@@ -1,43 +1,28 @@
1
- /**
2
- * Storefront event manager — the front-end counterpart of Magento's observers,
3
- * next to the plugin system already ported in `interceptorManager.ts`.
4
- *
5
- * The two answer different questions and both exist for the same reason they do
6
- * in PHP: an interceptor wraps a specific function and can change what it does,
7
- * an observer subscribes to something that happened and cannot. Extending the
8
- * cart flow from another module should not require knowing which function to
9
- * wrap, so the flow announces what it did and anyone can listen.
10
- *
11
- * Observers run in `sortOrder` and receive one mutable data object (Magento
12
- * parity), so a `*_before` observer can amend the request the flow is about to
13
- * make. An observer that throws is reported and skipped: a failing analytics
14
- * hook must not take down an add-to-cart.
15
- *
16
- * No DOM and no framework, so it is unit-testable in Node. The concrete
17
- * storefront wiring (the singleton, the CustomEvent bridge) lives in the
18
- * module's `web/js/events.ts`.
19
- */
20
1
  const DEFAULT_SORT_ORDER = 10;
2
+ const SLOW_OBSERVER_MS = 16;
21
3
  export class EventManager {
22
4
  observers = {};
5
+ hooks = [];
6
+ stickyData = new Map();
23
7
  deps;
8
+ debugging;
24
9
  constructor(deps = {}) {
25
10
  this.deps = deps;
11
+ this.debugging = deps.debug ?? false;
26
12
  }
27
- /**
28
- * Subscribe to an event.
29
- *
30
- * @returns A function that removes this observer.
31
- */
32
13
  observe(event, observer, { name, sortOrder = DEFAULT_SORT_ORDER } = {}) {
33
14
  const entry = {
34
15
  name: name ?? `${event}_${(this.observers[event]?.length ?? 0) + 1}`,
35
- observer: observer,
16
+ observer,
36
17
  sortOrder,
37
18
  };
38
19
  const entries = (this.observers[event] ??= []);
39
20
  entries.push(entry);
40
21
  entries.sort((a, b) => a.sortOrder - b.sortOrder);
22
+ const remembered = this.stickyData.get(event);
23
+ if (remembered) {
24
+ void this.invoke(event, entry, remembered);
25
+ }
41
26
  return () => {
42
27
  const at = entries.indexOf(entry);
43
28
  if (at > -1) {
@@ -45,30 +30,88 @@ export class EventManager {
45
30
  }
46
31
  };
47
32
  }
48
- /**
49
- * Notify every observer of an event, in order, awaiting each.
50
- *
51
- * @returns The same data object the observers were given, after any of them
52
- * amended it — so a dispatcher can read back what they changed.
53
- */
54
- async dispatch(event, data) {
33
+ observeOnce(event, observer, options = {}) {
34
+ let spent = false;
35
+ let off = () => {
36
+ spent = true;
37
+ };
38
+ const remove = this.observe(event, ((data) => {
39
+ off();
40
+ return observer(data);
41
+ }), options);
42
+ if (spent) {
43
+ remove();
44
+ }
45
+ off = remove;
46
+ return remove;
47
+ }
48
+ async dispatch(event, data, options = {}) {
49
+ if (options.sticky) {
50
+ this.stickyData.set(event, data);
51
+ }
52
+ this.runHooks("start", event, data, options);
53
+ if (this.debugging) {
54
+ console.debug(`[MageObsidian] → ${event}`, data);
55
+ }
55
56
  // Snapshot: an observer may unsubscribe mid-dispatch, and splicing the
56
57
  // live array would make the loop skip the entry that follows it.
57
58
  for (const entry of (this.observers[event] ?? []).slice()) {
59
+ await this.invoke(event, entry, data);
60
+ }
61
+ this.runHooks("end", event, data, options);
62
+ return data;
63
+ }
64
+ sticky(event) {
65
+ return this.stickyData.get(event);
66
+ }
67
+ onDispatch(hook) {
68
+ this.hooks.push(hook);
69
+ return () => {
70
+ const at = this.hooks.indexOf(hook);
71
+ if (at > -1) {
72
+ this.hooks.splice(at, 1);
73
+ }
74
+ };
75
+ }
76
+ debug(enabled = true) {
77
+ this.debugging = enabled;
78
+ }
79
+ observersOf(event) {
80
+ return (this.observers[event] ?? []).map((entry) => entry.name);
81
+ }
82
+ async invoke(event, entry, data) {
83
+ const startedAt = this.debugging ? this.clock() : 0;
84
+ try {
85
+ await entry.observer(data);
86
+ }
87
+ catch (error) {
88
+ this.report(event, entry.name, error);
89
+ return;
90
+ }
91
+ if (!this.debugging) {
92
+ return;
93
+ }
94
+ const elapsed = this.clock() - startedAt;
95
+ if (elapsed > SLOW_OBSERVER_MS) {
96
+ console.warn(`[MageObsidian] Observer "${entry.name}" of "${event}" took ` +
97
+ `${elapsed.toFixed(1)}ms and delayed the interaction that dispatched it.`);
98
+ }
99
+ }
100
+ runHooks(phase, event, data, options) {
101
+ for (const hook of this.hooks.slice()) {
58
102
  try {
59
- await entry.observer(data);
103
+ hook[phase]?.(event, data, options);
60
104
  }
61
105
  catch (error) {
62
- this.report(event, entry.name, error);
106
+ this.report(event, `hook:${phase}`, error);
63
107
  }
64
108
  }
65
- return data;
66
109
  }
67
- /**
68
- * Names of the observers registered for an event, in execution order.
69
- */
70
- observersOf(event) {
71
- return (this.observers[event] ?? []).map((entry) => entry.name);
110
+ clock() {
111
+ if (this.deps.now) {
112
+ return this.deps.now();
113
+ }
114
+ return typeof performance !== "undefined" ? performance.now() : 0;
72
115
  }
73
116
  report(event, name, error) {
74
117
  if (this.deps.onError) {
@@ -1 +1 @@
1
- {"version":3,"file":"eventManager.js","sourceRoot":"","sources":["../../src/runtime/eventManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAeH,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,MAAM,OAAO,YAAY;IACJ,SAAS,GAAoC,EAAE,CAAC;IAEhD,IAAI,CAAmB;IAExC,YAAY,OAAyB,EAAE;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,OAAO,CACH,KAAa,EACb,QAA0B,EAC1B,EAAE,IAAI,EAAE,SAAS,GAAG,kBAAkB,KAA4C,EAAE;QAEpF,MAAM,KAAK,GAAkB;YACzB,IAAI,EAAE,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;YACpE,QAAQ,EAAE,QAAgC;YAC1C,SAAS;SACZ,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAElD,OAAO,GAAG,EAAE;YACR,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;gBACV,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1B,CAAC;QACL,CAAC,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAmB,KAAa,EAAE,IAAO;QACnD,uEAAuE;QACvE,iEAAiE;QACjE,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC;gBACD,MAAO,KAAK,CAAC,QAA6B,CAAC,IAAI,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAa;QACrB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAEO,MAAM,CAAC,KAAa,EAAE,IAAY,EAAE,KAAc;QACtD,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACtC,OAAO;QACX,CAAC;QACD,OAAO,CAAC,KAAK,CACT,4BAA4B,IAAI,SAAS,KAAK,0BAA0B,EACxE,KAAK,CACR,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"eventManager.js","sourceRoot":"","sources":["../../src/runtime/eventManager.ts"],"names":[],"mappings":"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"}
@@ -14,12 +14,25 @@
14
14
  * in Node without a DOM, a bundler, or Vue. The concrete wiring lives in the
15
15
  * module's `web/js/islands.ts`.
16
16
  */
17
- interface IslandElement {
17
+ import { MutationPhase } from "./mutationEvent.ts";
18
+ export declare const IslandStrategy: {
19
+ readonly Eager: "eager";
20
+ readonly Visible: "visible";
21
+ };
22
+ export type IslandStrategy = (typeof IslandStrategy)[keyof typeof IslandStrategy];
23
+ export interface IslandElement {
18
24
  dataset: Record<string, string | undefined>;
19
25
  }
20
26
  interface AppLike {
21
27
  mount(el: unknown): unknown;
22
28
  }
29
+ export interface IslandAnnouncement {
30
+ component: string;
31
+ strategy: string;
32
+ element: IslandElement;
33
+ durationMs?: number;
34
+ error?: unknown;
35
+ }
23
36
  interface HydrateDeps {
24
37
  importComponent(source: string): Promise<{
25
38
  default?: unknown;
@@ -35,6 +48,8 @@ interface HydrateDeps {
35
48
  /** Opaque state captured before mounting, handed back to `onMounted`. */
36
49
  snapshot?(element: IslandElement): unknown;
37
50
  onMounted?(element: IslandElement, snapshot: unknown): void;
51
+ announce?(phase: MutationPhase, detail: IslandAnnouncement): void;
52
+ now?(): number;
38
53
  }
39
54
  interface DiscoverDeps extends HydrateDeps {
40
55
  observe(element: IslandElement, onVisible: () => void): void;
@@ -1 +1 @@
1
- {"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,UAAU,aAAa;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC/C;AAED,UAAU,OAAO;IACb,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC;CAC/B;AAED,UAAU,WAAW;IACjB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChE;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IACzF,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,cAAc,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9C,yEAAyE;IACzE,QAAQ,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;IAC3C,SAAS,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/D;AAED,UAAU,YAAa,SAAQ,WAAW;IACtC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAChE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CA8B9B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAWtF"}
1
+ {"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMnD,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAElF,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC/C;AAED,UAAU,OAAO;IACb,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,WAAW;IACjB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChE;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IACzF,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,cAAc,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9C,yEAAyE;IACzE,QAAQ,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;IAC3C,SAAS,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5D,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAClE,GAAG,CAAC,IAAI,MAAM,CAAC;CAClB;AAED,UAAU,YAAa,SAAQ,WAAW;IACtC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAChE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAgD9B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAWtF"}
@@ -14,9 +14,14 @@
14
14
  * in Node without a DOM, a bundler, or Vue. The concrete wiring lives in the
15
15
  * module's `web/js/islands.ts`.
16
16
  */
17
+ import { MutationPhase } from "./mutationEvent.js";
17
18
  // Set synchronously before the async import so a second observer callback for
18
19
  // the same element is a no-op (dataset key for `data-mage-island-mounted`).
19
20
  const MOUNTED_FLAG = "mageIslandMounted";
21
+ export const IslandStrategy = {
22
+ Eager: "eager",
23
+ Visible: "visible",
24
+ };
20
25
  /**
21
26
  * Mount a single island. Idempotent: the first call claims the element and
22
27
  * later calls return immediately, so re-observation never double-mounts.
@@ -32,22 +37,39 @@ export async function hydrateIsland(element, deps) {
32
37
  if (!source) {
33
38
  throw new Error("Island marker is missing data-component.");
34
39
  }
35
- const module = await deps.importComponent(source);
36
- const component = module.default ?? module;
37
- const props = element.dataset.props ? JSON.parse(element.dataset.props) : {};
38
- const hydrate = Boolean(element.dataset.hydrate);
39
- // Captured before the container is cleared: the baseline is what the page
40
- // painted, not what is left after a placeholder is thrown away.
41
- const snapshot = deps.snapshot?.(element);
42
- if (!hydrate) {
43
- deps.clearContainer?.(element);
40
+ const strategy = element.dataset.strategy ?? IslandStrategy.Visible;
41
+ const clock = deps.now ?? (() => (typeof performance !== "undefined" ? performance.now() : 0));
42
+ const startedAt = deps.announce ? clock() : 0;
43
+ deps.announce?.(MutationPhase.Before, { component: source, strategy, element });
44
+ let app;
45
+ try {
46
+ const module = await deps.importComponent(source);
47
+ const component = module.default ?? module;
48
+ const props = element.dataset.props ? JSON.parse(element.dataset.props) : {};
49
+ const hydrate = Boolean(element.dataset.hydrate);
50
+ // Captured before the container is cleared: the baseline is what the page
51
+ // painted, not what is left after a placeholder is thrown away.
52
+ const snapshot = deps.snapshot?.(element);
53
+ if (!hydrate) {
54
+ deps.clearContainer?.(element);
55
+ }
56
+ app = deps.createApp(component, props, hydrate);
57
+ deps.configureApp(app);
58
+ app.mount(element);
59
+ // Read back before yielding to the event loop, so what is compared is what
60
+ // hydration did and not what a later reactive effect changed.
61
+ deps.onMounted?.(element, snapshot);
62
+ }
63
+ catch (error) {
64
+ deps.announce?.(MutationPhase.Failed, { component: source, strategy, element, error });
65
+ throw error;
44
66
  }
45
- const app = deps.createApp(component, props, hydrate);
46
- deps.configureApp(app);
47
- app.mount(element);
48
- // Read back before yielding to the event loop, so what is compared is what
49
- // hydration did and not what a later reactive effect changed.
50
- deps.onMounted?.(element, snapshot);
67
+ deps.announce?.(MutationPhase.After, {
68
+ component: source,
69
+ strategy,
70
+ element,
71
+ durationMs: clock() - startedAt,
72
+ });
51
73
  return app;
52
74
  }
53
75
  /**
@@ -56,8 +78,8 @@ export async function hydrateIsland(element, deps) {
56
78
  */
57
79
  export function hydrateAll(elements, deps) {
58
80
  for (const element of elements) {
59
- const strategy = element.dataset.strategy ?? "visible";
60
- if (strategy === "eager") {
81
+ const strategy = element.dataset.strategy ?? IslandStrategy.Visible;
82
+ if (strategy === IslandStrategy.Eager) {
61
83
  void hydrateIsland(element, deps);
62
84
  }
63
85
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"islands.js","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,8EAA8E;AAC9E,4EAA4E;AAC5E,MAAM,YAAY,GAAG,mBAAmB,CAAC;AA6BzC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,OAAsB,EACtB,IAAiB;IAEjB,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,0EAA0E;IAC1E,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACvB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnB,2EAA2E;IAC3E,8DAA8D;IAC9D,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAiC,EAAE,IAAkB;IAC5E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;QACvD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACvB,KAAK,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,KAAK,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"islands.js","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ export declare const LifecycleEvent: {
2
+ readonly IslandMountBefore: "island_mount_before";
3
+ readonly IslandMountAfter: "island_mount_after";
4
+ readonly IslandMountFailed: "island_mount_failed";
5
+ readonly PageReady: "page_ready";
6
+ readonly PageHidden: "page_hidden";
7
+ readonly PageVisible: "page_visible";
8
+ readonly PageLeave: "page_leave";
9
+ readonly SectionReloadBefore: "section_reload_before";
10
+ readonly SectionReloadAfter: "section_reload_after";
11
+ readonly SectionReloadFailed: "section_reload_failed";
12
+ };
13
+ export type LifecycleEvent = (typeof LifecycleEvent)[keyof typeof LifecycleEvent];
14
+ export interface IslandEvent {
15
+ component: string;
16
+ strategy: string;
17
+ element: unknown;
18
+ durationMs?: number;
19
+ error?: unknown;
20
+ }
21
+ export interface PageEvent {
22
+ url: string;
23
+ islands?: number;
24
+ persisted?: boolean;
25
+ }
26
+ export interface SectionEvent {
27
+ names: string[];
28
+ changed?: string[];
29
+ }
30
+ declare module "./eventManager.ts" {
31
+ interface StorefrontEventMap {
32
+ [LifecycleEvent.IslandMountBefore]: IslandEvent;
33
+ [LifecycleEvent.IslandMountAfter]: IslandEvent;
34
+ [LifecycleEvent.IslandMountFailed]: IslandEvent;
35
+ [LifecycleEvent.PageReady]: PageEvent;
36
+ [LifecycleEvent.PageHidden]: PageEvent;
37
+ [LifecycleEvent.PageVisible]: PageEvent;
38
+ [LifecycleEvent.PageLeave]: PageEvent;
39
+ [LifecycleEvent.SectionReloadBefore]: SectionEvent;
40
+ [LifecycleEvent.SectionReloadAfter]: SectionEvent;
41
+ [LifecycleEvent.SectionReloadFailed]: SectionEvent;
42
+ }
43
+ }
44
+ //# sourceMappingURL=lifecycleEvents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycleEvents.d.ts","sourceRoot":"","sources":["../../src/runtime/lifecycleEvents.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;;;;;;;;;CAWjB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAElF,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,OAAO,QAAQ,mBAAmB,CAAC;IAC/B,UAAU,kBAAkB;QACxB,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC;QAChD,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC;QAC/C,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC;QAChD,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;QACtC,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;QACvC,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;QACxC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;QACtC,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE,YAAY,CAAC;QACnD,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,YAAY,CAAC;QAClD,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE,YAAY,CAAC;KACtD;CACJ"}
@@ -0,0 +1,13 @@
1
+ export const LifecycleEvent = {
2
+ IslandMountBefore: "island_mount_before",
3
+ IslandMountAfter: "island_mount_after",
4
+ IslandMountFailed: "island_mount_failed",
5
+ PageReady: "page_ready",
6
+ PageHidden: "page_hidden",
7
+ PageVisible: "page_visible",
8
+ PageLeave: "page_leave",
9
+ SectionReloadBefore: "section_reload_before",
10
+ SectionReloadAfter: "section_reload_after",
11
+ SectionReloadFailed: "section_reload_failed",
12
+ };
13
+ //# sourceMappingURL=lifecycleEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycleEvents.js","sourceRoot":"","sources":["../../src/runtime/lifecycleEvents.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,iBAAiB,EAAE,qBAAqB;IACxC,gBAAgB,EAAE,oBAAoB;IACtC,iBAAiB,EAAE,qBAAqB;IACxC,SAAS,EAAE,YAAY;IACvB,UAAU,EAAE,aAAa;IACzB,WAAW,EAAE,cAAc;IAC3B,SAAS,EAAE,YAAY;IACvB,mBAAmB,EAAE,uBAAuB;IAC5C,kBAAkB,EAAE,sBAAsB;IAC1C,mBAAmB,EAAE,uBAAuB;CACtC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare const MutationPhase: {
2
+ readonly Before: "before";
3
+ readonly After: "after";
4
+ readonly Failed: "failed";
5
+ };
6
+ export type MutationPhase = (typeof MutationPhase)[keyof typeof MutationPhase];
7
+ export declare const MUTATION_PHASES: readonly MutationPhase[];
8
+ export interface FlowEvent<Operation extends string = string, Result = unknown> {
9
+ operation: Operation;
10
+ cancelled: boolean;
11
+ message?: string;
12
+ result?: Result;
13
+ }
14
+ export interface MutationEvent<Operation extends string = string, Result = unknown> extends FlowEvent<Operation, Result> {
15
+ action: string;
16
+ body: FormData;
17
+ }
18
+ export type MutationEventName<Domain extends string, Operation extends string, Phase extends MutationPhase = MutationPhase> = `${Domain}_${Operation}_${Phase}`;
19
+ export declare function mutationEvent<Domain extends string, Operation extends string, Phase extends MutationPhase>(domain: Domain, operation: Operation, phase: Phase): MutationEventName<Domain, Operation, Phase>;
20
+ //# sourceMappingURL=mutationEvent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutationEvent.d.ts","sourceRoot":"","sources":["../../src/runtime/mutationEvent.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE/E,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAAiC,CAAC;AAEtF,MAAM,WAAW,SAAS,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,OAAO;IAC1E,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,OAAO,CAC9E,SAAQ,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,CACzB,MAAM,SAAS,MAAM,EACrB,SAAS,SAAS,MAAM,EACxB,KAAK,SAAS,aAAa,GAAG,aAAa,IAC3C,GAAG,MAAM,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;AAEtC,wBAAgB,aAAa,CACzB,MAAM,SAAS,MAAM,EACrB,SAAS,SAAS,MAAM,EACxB,KAAK,SAAS,aAAa,EAC7B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAEjG"}
@@ -0,0 +1,10 @@
1
+ export const MutationPhase = {
2
+ Before: "before",
3
+ After: "after",
4
+ Failed: "failed",
5
+ };
6
+ export const MUTATION_PHASES = Object.values(MutationPhase);
7
+ export function mutationEvent(domain, operation, phase) {
8
+ return `${domain}_${operation}_${phase}`;
9
+ }
10
+ //# sourceMappingURL=mutationEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutationEvent.js","sourceRoot":"","sources":["../../src/runtime/mutationEvent.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;CACV,CAAC;AAIX,MAAM,CAAC,MAAM,eAAe,GAA6B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAqBtF,MAAM,UAAU,aAAa,CAI3B,MAAc,EAAE,SAAoB,EAAE,KAAY;IAChD,OAAO,GAAG,MAAM,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;AAC7C,CAAC"}
@@ -50,6 +50,7 @@ export declare function selectSection(sections: SectionMap | null | undefined, n
50
50
  * merges per section; non-object values are ignored).
51
51
  */
52
52
  export declare function mergeSections(current: SectionMap | null | undefined, incoming: SectionMap | null | undefined): SectionMap;
53
+ export declare function patchSection(sections: SectionMap | null | undefined, name: string, partial: SectionData): SectionMap;
53
54
  /**
54
55
  * Whether a section should be (re)fetched. A missing section is stale; a
55
56
  * section without a positive `data_id` is a client-side section that never
@@ -1 +1 @@
1
- {"version":3,"file":"sectionStoreCore.d.ts","sourceRoot":"","sources":["../../src/runtime/sectionStoreCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAClD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAErD,MAAM,WAAW,kBAAkB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,UAAU,mBAAmB;IACzB,0BAA0B,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5E;AAGD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,0BAA0B,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;YAAC,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;KAC5E;CACJ;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAa9E;AAED;;GAEG;AACH,wBAAgB,aAAa,CACzB,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,IAAI,EAAE,MAAM,GACb,WAAW,GAAG,IAAI,CAQpB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CACzB,OAAO,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACtC,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GACxC,UAAU,CAEZ;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACvC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,GACnB,OAAO,CAcT;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,GAAE,kBAAuB,GACjC,MAAM,CAaR;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAcxF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC1B,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACvB,OAAO,CAKT;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,iBAAiB,EAAE,MAAM,GAC1B,OAAO,CAKT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,EAAE,EACxB,UAAU,EAAE,MAAM,GACnB,MAAM,EAAE,CAiBV;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACpC,KAAK,GAAE,mBAAmB,GAAG,SAA8D,GAC5F,oBAAoB,CAUtB"}
1
+ {"version":3,"file":"sectionStoreCore.d.ts","sourceRoot":"","sources":["../../src/runtime/sectionStoreCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAClD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAErD,MAAM,WAAW,kBAAkB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,UAAU,mBAAmB;IACzB,0BAA0B,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5E;AAGD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,0BAA0B,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;YAAC,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;KAC5E;CACJ;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAa9E;AAED;;GAEG;AACH,wBAAgB,aAAa,CACzB,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,IAAI,EAAE,MAAM,GACb,WAAW,GAAG,IAAI,CAQpB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CACzB,OAAO,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACtC,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GACxC,UAAU,CAEZ;AAED,wBAAgB,YAAY,CACxB,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,GACrB,UAAU,CAMZ;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACvC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,GACnB,OAAO,CAcT;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,GAAE,kBAAuB,GACjC,MAAM,CAaR;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAcxF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC1B,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACvB,OAAO,CAKT;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,iBAAiB,EAAE,MAAM,GAC1B,OAAO,CAKT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,EAAE,EACxB,UAAU,EAAE,MAAM,GACnB,MAAM,EAAE,CAiBV;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACpC,KAAK,GAAE,mBAAmB,GAAG,SAA8D,GAC5F,oBAAoB,CAUtB"}
@@ -48,6 +48,13 @@ export function selectSection(sections, name) {
48
48
  export function mergeSections(current, incoming) {
49
49
  return { ...pickObjectEntries(current), ...pickObjectEntries(incoming) };
50
50
  }
51
+ export function patchSection(sections, name, partial) {
52
+ const current = pickObjectEntries(sections);
53
+ if (!name) {
54
+ return current;
55
+ }
56
+ return { ...current, [name]: { ...(selectSection(current, name) ?? {}), ...partial } };
57
+ }
51
58
  /**
52
59
  * Whether a section should be (re)fetched. A missing section is stale; a
53
60
  * section without a positive `data_id` is a client-side section that never
@@ -1 +1 @@
1
- {"version":3,"file":"sectionStoreCore.js","sourceRoot":"","sources":["../../src/runtime/sectionStoreCore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sectionStoreCore.js","sourceRoot":"","sources":["../../src/runtime/sectionStoreCore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface UxRuntimeConfig {
2
+ optimistic: boolean;
3
+ summaryCountsQty: boolean;
4
+ }
5
+ type UxRuntimeGlobal = {
6
+ optimistic?: unknown;
7
+ summaryCountsQty?: unknown;
8
+ };
9
+ interface UxRuntimeScope {
10
+ __MAGE_OBSIDIAN_UX__?: UxRuntimeGlobal;
11
+ }
12
+ declare global {
13
+ interface Window {
14
+ __MAGE_OBSIDIAN_UX__?: UxRuntimeGlobal;
15
+ }
16
+ }
17
+ export declare function readUxRuntimeConfig(scope?: UxRuntimeScope | undefined): UxRuntimeConfig;
18
+ export {};
19
+ //# sourceMappingURL=uxConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uxConfig.d.ts","sourceRoot":"","sources":["../../src/runtime/uxConfig.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED,KAAK,eAAe,GAAG;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5E,UAAU,cAAc;IACpB,oBAAoB,CAAC,EAAE,eAAe,CAAC;CAC1C;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,oBAAoB,CAAC,EAAE,eAAe,CAAC;KAC1C;CACJ;AAID,wBAAgB,mBAAmB,CAC/B,KAAK,GAAE,cAAc,GAAG,SAA8D,GACvF,eAAe,CASjB"}
@@ -0,0 +1,15 @@
1
+ const DEFAULTS = { optimistic: true, summaryCountsQty: true };
2
+ export function readUxRuntimeConfig(scope = typeof window !== "undefined" ? window : undefined) {
3
+ const config = scope && scope.__MAGE_OBSIDIAN_UX__;
4
+ if (!config || typeof config !== "object") {
5
+ return DEFAULTS;
6
+ }
7
+ return {
8
+ optimistic: bool(config.optimistic, DEFAULTS.optimistic),
9
+ summaryCountsQty: bool(config.summaryCountsQty, DEFAULTS.summaryCountsQty),
10
+ };
11
+ }
12
+ function bool(value, fallback) {
13
+ return typeof value === "boolean" ? value : fallback;
14
+ }
15
+ //# sourceMappingURL=uxConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uxConfig.js","sourceRoot":"","sources":["../../src/runtime/uxConfig.ts"],"names":[],"mappings":"AAiBA,MAAM,QAAQ,GAAoB,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAE/E,MAAM,UAAU,mBAAmB,CAC/B,QAAoC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;IAEtF,MAAM,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC,oBAAoB,CAAC;IACnD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,OAAO;QACH,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;QACxD,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC;KAC7E,CAAC;AACN,CAAC;AAED,SAAS,IAAI,CAAC,KAAc,EAAE,QAAiB;IAC3C,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACzD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mage-obsidian",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "description": "The MageObsidian JS build engine for Magento 2 frontends: theme inheritance resolution, precompilation and JS interceptors for Vite builds.",
5
5
  "homepage": "https://mage-obsidian.jeanmarcos.dev/",
6
6
  "bugs": {