@braidlabs/core 0.6.0 → 0.7.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 (75) hide show
  1. package/package.json +1 -1
  2. package/src/adapters/adapter.d.ts +11 -0
  3. package/src/adapters/adapter.js.map +1 -1
  4. package/src/adapters/compat-adapter.js +2 -2
  5. package/src/adapters/compat-adapter.js.map +1 -1
  6. package/src/compat/born-inert-scripts.d.ts +2 -0
  7. package/src/compat/born-inert-scripts.js +39 -0
  8. package/src/compat/born-inert-scripts.js.map +1 -1
  9. package/src/compat/cookie-partition.d.ts +25 -0
  10. package/src/compat/cookie-partition.js +79 -0
  11. package/src/compat/cookie-partition.js.map +1 -0
  12. package/src/compat/document-member-classification.js +3 -2
  13. package/src/compat/document-member-classification.js.map +1 -1
  14. package/src/compat/document-overrides.d.ts +6 -6
  15. package/src/compat/document-overrides.js +23 -0
  16. package/src/compat/document-overrides.js.map +1 -1
  17. package/src/compat/fragment-boundary.d.ts +5 -0
  18. package/src/compat/fragment-boundary.js +291 -36
  19. package/src/compat/fragment-boundary.js.map +1 -1
  20. package/src/compat/html-policy.d.ts +50 -0
  21. package/src/compat/html-policy.js +155 -0
  22. package/src/compat/html-policy.js.map +1 -0
  23. package/src/compat/realm-patches.d.ts +2 -1
  24. package/src/compat/realm-patches.js +117 -3
  25. package/src/compat/realm-patches.js.map +1 -1
  26. package/src/compat/script-execution.d.ts +24 -0
  27. package/src/compat/script-execution.js +177 -10
  28. package/src/compat/script-execution.js.map +1 -1
  29. package/src/compat/storage-partition.d.ts +47 -0
  30. package/src/compat/storage-partition.js +291 -0
  31. package/src/compat/storage-partition.js.map +1 -0
  32. package/src/compat/subresource-urls.d.ts +41 -0
  33. package/src/compat/subresource-urls.js +133 -0
  34. package/src/compat/subresource-urls.js.map +1 -0
  35. package/src/config.d.ts +28 -0
  36. package/src/config.js +24 -0
  37. package/src/config.js.map +1 -1
  38. package/src/elements/boot-gate.d.ts +47 -0
  39. package/src/elements/boot-gate.js +207 -0
  40. package/src/elements/boot-gate.js.map +1 -0
  41. package/src/elements/fragment-slot.d.ts +62 -15
  42. package/src/elements/fragment-slot.js +388 -26
  43. package/src/elements/fragment-slot.js.map +1 -1
  44. package/src/elements/late-content.d.ts +44 -0
  45. package/src/elements/late-content.js +107 -0
  46. package/src/elements/late-content.js.map +1 -0
  47. package/src/elements/prefetch.d.ts +27 -0
  48. package/src/elements/prefetch.js +100 -0
  49. package/src/elements/prefetch.js.map +1 -0
  50. package/src/elements/prerequisites.d.ts +42 -0
  51. package/src/elements/prerequisites.js +133 -0
  52. package/src/elements/prerequisites.js.map +1 -0
  53. package/src/elements/recovery.d.ts +46 -0
  54. package/src/elements/recovery.js +59 -0
  55. package/src/elements/recovery.js.map +1 -0
  56. package/src/env/create-env.js +2 -1
  57. package/src/env/create-env.js.map +1 -1
  58. package/src/env/fragment-env.d.ts +6 -0
  59. package/src/errors.d.ts +4 -1
  60. package/src/errors.js +2 -0
  61. package/src/errors.js.map +1 -1
  62. package/src/index.d.ts +5 -1
  63. package/src/index.js +11 -1
  64. package/src/index.js.map +1 -1
  65. package/src/realm/realm-manager.js +23 -0
  66. package/src/realm/realm-manager.js.map +1 -1
  67. package/src/weave/capabilities.d.ts +35 -7
  68. package/src/weave/capabilities.js +17 -0
  69. package/src/weave/capabilities.js.map +1 -1
  70. package/src/weave/guest.d.ts +2 -0
  71. package/src/weave/guest.js +2 -1
  72. package/src/weave/guest.js.map +1 -1
  73. package/src/weave/messages.d.ts +24 -0
  74. package/src/weave/messages.js +22 -0
  75. package/src/weave/messages.js.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-partition.js","sourceRoot":"","sources":["../../../../../libs/core/src/compat/storage-partition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Subresource URLs that fragment *code* sets, resolved the way the gateway resolves the ones in
3
+ * fragment *markup*.
4
+ *
5
+ * A fragment's elements live in the host page's document, so a relative URL on one resolves
6
+ * against the host page. The gateway re-roots the subresource URLs in a fragment's markup into
7
+ * `/__braid/frag/<id>/…` for exactly that reason (`rewriteSubresourceUrls` in the gateway's
8
+ * `rewriter/transforms.ts`), but a URL set from script — `frame.src = 'silent-renew.html'`,
9
+ * `img.src = 'logo.png'` — arrives after the markup and loaded a host URL instead. This applies the
10
+ * same rule at the moment it is set, so a fragment behaves as it does standalone.
11
+ *
12
+ * The element/attribute table and the rule are duplicated from the gateway: the two packages share
13
+ * no modules. Navigation targets (`a[href]`, `form[action]`) are left alone, as there.
14
+ */
15
+ /** Attributes that point at a subresource the fragment owns, per element (as in the gateway). */
16
+ export declare const SUBRESOURCE_ATTRIBUTES: Readonly<Record<string, readonly string[]>>;
17
+ /**
18
+ * The fragment's namespace root (`/__braid/frag/<id>`, behind any gateway `basePath`), read off
19
+ * the realm document's base URL, which points into it. `null` when it does not.
20
+ */
21
+ export declare function fragmentRootOf(realmBaseUrl: string): string | null;
22
+ /**
23
+ * One URL mapped into the fragment's namespace — the gateway's `namespaceUrl`, exactly: resolved
24
+ * against the fragment's own `<base href>` (default `/`) as its document would, then re-rooted.
25
+ * Absolute URLs, protocol-relative ones, pure fragments and URLs already inside the namespace are
26
+ * returned as they are.
27
+ */
28
+ export declare function fragmentSubresourceUrl(value: string, fragmentRoot: string, fragmentBaseHref?: string): string;
29
+ /** Each candidate of a `srcset`, mapped, with its descriptor kept (split as the gateway splits). */
30
+ export declare function fragmentSrcset(value: string, fragmentRoot: string, fragmentBaseHref?: string): string;
31
+ /** Where a stamped element's URLs resolve: the namespace root, and the fragment's own base href. */
32
+ export interface FragmentUrlBase {
33
+ root: string | null;
34
+ baseHref: string;
35
+ }
36
+ /**
37
+ * Property descriptors for a stamped element's prototype: the element's subresource properties and
38
+ * `setAttribute`/`setAttributeNS` map relative URLs into the fragment's namespace. Empty for an
39
+ * element with no subresource attributes. Reading returns whatever the native getter does.
40
+ */
41
+ export declare function subresourceUrlOverrides(proto: object, localName: string, base: () => FragmentUrlBase): PropertyDescriptorMap;
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Subresource URLs that fragment *code* sets, resolved the way the gateway resolves the ones in
3
+ * fragment *markup*.
4
+ *
5
+ * A fragment's elements live in the host page's document, so a relative URL on one resolves
6
+ * against the host page. The gateway re-roots the subresource URLs in a fragment's markup into
7
+ * `/__braid/frag/<id>/…` for exactly that reason (`rewriteSubresourceUrls` in the gateway's
8
+ * `rewriter/transforms.ts`), but a URL set from script — `frame.src = 'silent-renew.html'`,
9
+ * `img.src = 'logo.png'` — arrives after the markup and loaded a host URL instead. This applies the
10
+ * same rule at the moment it is set, so a fragment behaves as it does standalone.
11
+ *
12
+ * The element/attribute table and the rule are duplicated from the gateway: the two packages share
13
+ * no modules. Navigation targets (`a[href]`, `form[action]`) are left alone, as there.
14
+ */
15
+ /** Attributes that point at a subresource the fragment owns, per element (as in the gateway). */
16
+ export const SUBRESOURCE_ATTRIBUTES = Object.assign(Object.create(null), {
17
+ audio: ['src'],
18
+ embed: ['src'],
19
+ iframe: ['src'],
20
+ img: ['src', 'srcset'],
21
+ input: ['src'],
22
+ link: ['href'],
23
+ object: ['data'],
24
+ script: ['src'],
25
+ source: ['src', 'srcset'],
26
+ track: ['src'],
27
+ use: ['href'],
28
+ video: ['src', 'poster'],
29
+ });
30
+ const NAMESPACE = /^(.*?\/__braid\/frag\/[^/]+)(\/.*)?$/;
31
+ /**
32
+ * The fragment's namespace root (`/__braid/frag/<id>`, behind any gateway `basePath`), read off
33
+ * the realm document's base URL, which points into it. `null` when it does not.
34
+ */
35
+ export function fragmentRootOf(realmBaseUrl) {
36
+ try {
37
+ return NAMESPACE.exec(new URL(realmBaseUrl).pathname)?.[1] ?? null;
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ /**
44
+ * One URL mapped into the fragment's namespace — the gateway's `namespaceUrl`, exactly: resolved
45
+ * against the fragment's own `<base href>` (default `/`) as its document would, then re-rooted.
46
+ * Absolute URLs, protocol-relative ones, pure fragments and URLs already inside the namespace are
47
+ * returned as they are.
48
+ */
49
+ export function fragmentSubresourceUrl(value, fragmentRoot, fragmentBaseHref = '/') {
50
+ const url = value.trim();
51
+ if (!url || url.startsWith('#') || url.startsWith('//') || /^[a-z][a-z0-9+.-]*:/i.test(url))
52
+ return value;
53
+ // already re-rooted — markup the gateway prepared, an attribute read back and set again
54
+ if (url === fragmentRoot || url.startsWith(`${fragmentRoot}/`))
55
+ return value;
56
+ const resolved = new URL(url, `http://braid.invalid${fragmentBaseHref.startsWith('/') ? fragmentBaseHref : `/${fragmentBaseHref}`}`);
57
+ return `${fragmentRoot}${resolved.pathname}${resolved.search}${resolved.hash}`;
58
+ }
59
+ /** Each candidate of a `srcset`, mapped, with its descriptor kept (split as the gateway splits). */
60
+ export function fragmentSrcset(value, fragmentRoot, fragmentBaseHref = '/') {
61
+ return value
62
+ .split(',')
63
+ .map((candidate) => {
64
+ const match = /^(\s*)(\S+)(\s*.*)$/.exec(candidate);
65
+ if (!match)
66
+ return candidate;
67
+ const [, leading, url, descriptor] = match;
68
+ return `${leading}${fragmentSubresourceUrl(url, fragmentRoot, fragmentBaseHref)}${descriptor}`;
69
+ })
70
+ .join(',');
71
+ }
72
+ /**
73
+ * Property descriptors for a stamped element's prototype: the element's subresource properties and
74
+ * `setAttribute`/`setAttributeNS` map relative URLs into the fragment's namespace. Empty for an
75
+ * element with no subresource attributes. Reading returns whatever the native getter does.
76
+ */
77
+ export function subresourceUrlOverrides(proto, localName, base) {
78
+ const attributes = Object.hasOwn(SUBRESOURCE_ATTRIBUTES, localName) ? SUBRESOURCE_ATTRIBUTES[localName] : undefined;
79
+ if (!attributes)
80
+ return {};
81
+ const rewrite = (name, value) => {
82
+ if (typeof value !== 'string' || !attributes.includes(name))
83
+ return value;
84
+ const { root, baseHref } = base();
85
+ if (root === null)
86
+ return value;
87
+ return name === 'srcset' ? fragmentSrcset(value, root, baseHref) : fragmentSubresourceUrl(value, root, baseHref);
88
+ };
89
+ const overrides = {};
90
+ for (const name of attributes) {
91
+ const descriptor = findDescriptor(proto, name);
92
+ // SVG's `href` is an SVGAnimatedString with no setter; setAttribute covers it
93
+ if (!descriptor?.set)
94
+ continue;
95
+ const { get, set } = descriptor;
96
+ overrides[name] = {
97
+ get,
98
+ set(value) {
99
+ set.call(this, rewrite(name, String(value)));
100
+ },
101
+ configurable: true,
102
+ enumerable: descriptor.enumerable ?? true,
103
+ };
104
+ }
105
+ const setAttribute = findDescriptor(proto, 'setAttribute').value;
106
+ const setAttributeNS = findDescriptor(proto, 'setAttributeNS').value;
107
+ overrides['setAttribute'] = {
108
+ value: function (qualifiedName, value) {
109
+ return setAttribute.call(this, qualifiedName, rewrite(String(qualifiedName).toLowerCase(), value));
110
+ },
111
+ writable: true,
112
+ configurable: true,
113
+ };
114
+ overrides['setAttributeNS'] = {
115
+ value: function (namespace, qualifiedName, value) {
116
+ // only un-namespaced attributes are the subresource ones; xlink:href is left as it is
117
+ const mapped = namespace === null || namespace === '' ? rewrite(String(qualifiedName).toLowerCase(), value) : value;
118
+ return setAttributeNS.call(this, namespace, qualifiedName, mapped);
119
+ },
120
+ writable: true,
121
+ configurable: true,
122
+ };
123
+ return overrides;
124
+ }
125
+ function findDescriptor(object, name) {
126
+ for (let current = object; current; current = Object.getPrototypeOf(current)) {
127
+ const descriptor = Object.getOwnPropertyDescriptor(current, name);
128
+ if (descriptor)
129
+ return descriptor;
130
+ }
131
+ return undefined;
132
+ }
133
+ //# sourceMappingURL=subresource-urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subresource-urls.js","sourceRoot":"","sources":["../../../../../libs/core/src/compat/subresource-urls.ts"],"names":[],"mappings":"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"}
package/src/config.d.ts CHANGED
@@ -8,7 +8,9 @@
8
8
  * names itself, which trusted fragments may then read and write.
9
9
  */
10
10
  import type { HostContract } from './weave/contract.js';
11
+ import { type RecoveryPolicy } from './elements/recovery.js';
11
12
  import type { FragmentCapabilities } from './weave/capabilities.js';
13
+ import type { PrerequisiteResolver } from './elements/prerequisites.js';
12
14
  export interface BraidOptions {
13
15
  /**
14
16
  * What this host offers fragments, as a contract they can require a range of.
@@ -91,6 +93,29 @@ export interface BraidOptions {
91
93
  * fragment documents from `/manage/__braid/…`. Call `initBraid` before any slot connects.
92
94
  */
93
95
  basePath?: string;
96
+ /**
97
+ * Resolvers for mount prerequisites: named things that must be ready before a fragment's code
98
+ * runs, such as a warm session for its authorization server. Keyed by exact key or by a
99
+ * `prefix*` pattern. A fragment declares the keys it needs with `<fragment-slot requires="…">`
100
+ * or its manifest's `requires`. See `elements/prerequisites.ts`.
101
+ *
102
+ * ```ts
103
+ * initBraid({ prerequisites: { 'session:*': (key, { signal }) => sessions.ensure(key, { signal }) } });
104
+ * ```
105
+ */
106
+ prerequisites?: Record<string, PrerequisiteResolver>;
107
+ /** How long a prerequisite may take before its fragment fails. Defaults to 15 seconds. */
108
+ prerequisiteTimeoutMs?: number;
109
+ /**
110
+ * Reboot a fragment that fails for a reason a retry can fix — its fetch, its realm, its
111
+ * handshake or mount failed, or it stopped answering (`gone`) — up to three times per mount, after
112
+ * 1, 4 and 16 seconds. Off by default. `true` takes those defaults; an object sets them. See
113
+ * `elements/recovery.ts` for what is and is not retried.
114
+ */
115
+ recover?: boolean | {
116
+ attempts?: number;
117
+ delayMs?: number;
118
+ };
94
119
  }
95
120
  /** See {@link BraidOptions.realmGlobals}. */
96
121
  export type RealmGlobalsHook = (fragment: {
@@ -106,6 +131,9 @@ interface ResolvedBraidConfig {
106
131
  sharedGlobals?: string[];
107
132
  realmGlobals?: RealmGlobalsHook;
108
133
  onHostNavigation?: (notify: () => void) => void;
134
+ prerequisites?: Record<string, PrerequisiteResolver>;
135
+ prerequisiteTimeoutMs?: number;
136
+ recover?: RecoveryPolicy;
109
137
  }
110
138
  export declare function setBraidConfig(options?: BraidOptions): void;
111
139
  export declare function getBraidConfig(): Readonly<ResolvedBraidConfig>;
package/src/config.js CHANGED
@@ -7,6 +7,7 @@
7
7
  * own realm and shadow DOM subtree. The one channel back is `sharedGlobals`: host globals the host
8
8
  * names itself, which trusted fragments may then read and write.
9
9
  */
10
+ import { DEFAULT_RECOVERY, MAX_RECOVERY_ATTEMPTS } from './elements/recovery.js';
10
11
  const config = {
11
12
  dev: false,
12
13
  basePath: '',
@@ -30,6 +31,29 @@ export function setBraidConfig(options = {}) {
30
31
  if (options.onHostNavigation) {
31
32
  config.onHostNavigation = options.onHostNavigation;
32
33
  }
34
+ if (options.prerequisites) {
35
+ config.prerequisites = options.prerequisites;
36
+ }
37
+ if (options.prerequisiteTimeoutMs !== undefined) {
38
+ if (!Number.isFinite(options.prerequisiteTimeoutMs) || options.prerequisiteTimeoutMs <= 0) {
39
+ throw new Error(`braid: prerequisiteTimeoutMs must be a positive number of milliseconds`);
40
+ }
41
+ config.prerequisiteTimeoutMs = options.prerequisiteTimeoutMs;
42
+ }
43
+ if (options.recover !== undefined) {
44
+ if (options.recover === false) {
45
+ delete config.recover;
46
+ }
47
+ else {
48
+ const given = options.recover === true ? {} : options.recover;
49
+ const attempts = given.attempts ?? DEFAULT_RECOVERY.attempts;
50
+ const delayMs = given.delayMs ?? DEFAULT_RECOVERY.delayMs;
51
+ if (!Number.isInteger(attempts) || attempts < 1 || attempts > MAX_RECOVERY_ATTEMPTS || !Number.isFinite(delayMs) || delayMs < 0) {
52
+ throw new Error(`braid: recover needs 1 to ${MAX_RECOVERY_ATTEMPTS} attempts and a delayMs of zero or more`);
53
+ }
54
+ config.recover = { attempts, delayMs };
55
+ }
56
+ }
33
57
  // Kept in sync with the gateway's normalizeBasePath: a path the URL parser would rewrite (`/café`,
34
58
  // a dot segment) could never match the parsed pathnames the gateway compares it to.
35
59
  if (options.basePath !== undefined) {
package/src/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../libs/core/src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgHH,MAAM,MAAM,GAAwB;IAClC,GAAG,EAAE,KAAK;IACV,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,UAAwB,EAAE;IACvD,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACrD,CAAC;IACD,mGAAmG;IACnG,oFAAoF;IACpF,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,QAAQ,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC;YACxH,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAC,QAAQ,8CAA8C,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC,GAAG,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../libs/core/src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * When a slot boots its fragment: at once (`eager`, the default), or on intent.
3
+ *
4
+ * - `idle` — once the page has loaded and the browser next has nothing better to do, or two
5
+ * seconds after load regardless.
6
+ * - `visible` — when the slot comes within one viewport of being on screen.
7
+ * - `interaction` — on the first hover, pointer, key, or focus inside a pierced slot. The content
8
+ * is already painted, so the user has something to interact with; the fragment's code is what
9
+ * waits. A slot that was not pierced has nothing on screen to interact with, so it boots when
10
+ * visible instead.
11
+ *
12
+ * Deferring a boot defers all of it — the realm iframe, the document fetch, the fragment's
13
+ * framework and app — which is more than lazy hydration can defer inside one framework.
14
+ */
15
+ export type BootMode = 'eager' | 'idle' | 'visible' | 'interaction';
16
+ export declare function parseBootMode(value: string | null, fragmentId: string): BootMode;
17
+ export interface BootGate {
18
+ /** Resolves when the slot should boot. Never rejects; never resolves after `dispose()`. */
19
+ readonly triggered: Promise<void>;
20
+ /**
21
+ * Re-dispatches the clicks and submits that arrived before the fragment could handle them, on
22
+ * their original targets, one per task, and stops holding. Called once the fragment is ready.
23
+ */
24
+ replay(): void;
25
+ /** Stops waiting and holding, and drops anything held — the fragment will not be handling it. */
26
+ dispose(): void;
27
+ }
28
+ /**
29
+ * Waits for a slot's boot trigger, holding what the user did in the meantime.
30
+ *
31
+ * Clicks and submits inside the slot are the events whose default action goes wrong without the
32
+ * fragment's code — a link followed, a form posted — so until the fragment is ready they are
33
+ * cancelled, kept, and replayed. At most one per element is kept, so three anxious clicks on "Pay"
34
+ * become one. Every other event is left alone, and listened to passively: typed text and focus are
35
+ * already in the DOM, which the fragment adopts in place.
36
+ *
37
+ * A replay is a synthetic event, some time after the real one, so what needs a fresh user gesture —
38
+ * `window.open`, a file picker, the clipboard — will not work from it.
39
+ *
40
+ * The listeners are on the slot's own shadow root, never on the host's `window` or `document`. The
41
+ * one exception is `idle`, which waits for the host window's `load` once, if the page has not
42
+ * loaded yet.
43
+ */
44
+ export declare function createBootGate(slot: HTMLElement, mode: BootMode, options: {
45
+ pierced: boolean;
46
+ fragmentId: string;
47
+ }): BootGate;
@@ -0,0 +1,207 @@
1
+ import { isDevMode } from '../config.js';
2
+ const BOOT_MODES = ['eager', 'idle', 'visible', 'interaction'];
3
+ /** Events that start an `interaction` boot. Only `click` and `submit` are ever cancelled. */
4
+ const PASSIVE_INTENT_EVENTS = ['pointerover', 'pointerdown', 'touchstart', 'keydown', 'focusin'];
5
+ const HELD_EVENTS = ['click', 'submit'];
6
+ /** Held at most this many, so a user hammering a dead button cannot queue an avalanche. */
7
+ const MAX_HELD = 10;
8
+ /**
9
+ * How far outside the viewport a `visible` slot starts booting. A boot is a network round trip and
10
+ * an iframe, so it needs more lead than an image does; a smaller margin shows the skeleton on any
11
+ * brisk scroll.
12
+ */
13
+ const VISIBLE_MARGIN = '100%';
14
+ /** The longest an `idle` boot waits, after load, for the browser to go idle. */
15
+ const IDLE_TIMEOUT_MS = 2_000;
16
+ export function parseBootMode(value, fragmentId) {
17
+ if (value === null || value === '')
18
+ return 'eager';
19
+ if (BOOT_MODES.includes(value))
20
+ return value;
21
+ console.warn(`[braid:${fragmentId}] unknown boot="${value}", booting eagerly; expected one of ${BOOT_MODES.join(', ')}`);
22
+ return 'eager';
23
+ }
24
+ /**
25
+ * Waits for a slot's boot trigger, holding what the user did in the meantime.
26
+ *
27
+ * Clicks and submits inside the slot are the events whose default action goes wrong without the
28
+ * fragment's code — a link followed, a form posted — so until the fragment is ready they are
29
+ * cancelled, kept, and replayed. At most one per element is kept, so three anxious clicks on "Pay"
30
+ * become one. Every other event is left alone, and listened to passively: typed text and focus are
31
+ * already in the DOM, which the fragment adopts in place.
32
+ *
33
+ * A replay is a synthetic event, some time after the real one, so what needs a fresh user gesture —
34
+ * `window.open`, a file picker, the clipboard — will not work from it.
35
+ *
36
+ * The listeners are on the slot's own shadow root, never on the host's `window` or `document`. The
37
+ * one exception is `idle`, which waits for the host window's `load` once, if the page has not
38
+ * loaded yet.
39
+ */
40
+ export function createBootGate(slot, mode, options) {
41
+ const held = [];
42
+ let stopTrigger = () => undefined;
43
+ let stopHolding = () => undefined;
44
+ let done = false;
45
+ let fire;
46
+ const triggered = new Promise((resolve) => {
47
+ fire = () => {
48
+ if (done)
49
+ return;
50
+ stopTrigger();
51
+ stopTrigger = () => undefined;
52
+ resolve();
53
+ };
54
+ });
55
+ const root = slot.shadowRoot;
56
+ const effective = mode === 'interaction' && !(options.pierced && root) ? 'visible' : mode;
57
+ if (effective === 'eager') {
58
+ fire();
59
+ }
60
+ else if (effective === 'idle') {
61
+ let cancel = () => undefined;
62
+ const whenIdle = () => {
63
+ if (typeof requestIdleCallback === 'function') {
64
+ const handle = requestIdleCallback(() => fire(), { timeout: IDLE_TIMEOUT_MS });
65
+ cancel = () => cancelIdleCallback(handle);
66
+ }
67
+ else {
68
+ // Safari has no requestIdleCallback: a moment after load is the closest equivalent
69
+ const handle = setTimeout(() => fire(), 200);
70
+ cancel = () => clearTimeout(handle);
71
+ }
72
+ };
73
+ // idle during page load is time the page's own content needs
74
+ if (document.readyState === 'complete')
75
+ whenIdle();
76
+ else {
77
+ addEventListener('load', whenIdle, { once: true });
78
+ cancel = () => removeEventListener('load', whenIdle);
79
+ }
80
+ stopTrigger = () => cancel();
81
+ }
82
+ else if (effective === 'visible') {
83
+ if (typeof IntersectionObserver !== 'function') {
84
+ fire();
85
+ }
86
+ else {
87
+ const observer = new IntersectionObserver((entries) => {
88
+ if (entries.some((entry) => entry.isIntersecting))
89
+ fire();
90
+ }, { rootMargin: VISIBLE_MARGIN });
91
+ observer.observe(slot);
92
+ stopTrigger = () => observer.disconnect();
93
+ }
94
+ }
95
+ else {
96
+ const shadow = root;
97
+ // After the next paint, so the boot's work does not land in the frame that answers the
98
+ // interaction that started it — which is the frame INP measures.
99
+ const fireAfterPaint = () => {
100
+ if (typeof requestAnimationFrame === 'function')
101
+ requestAnimationFrame(() => setTimeout(fire, 0));
102
+ else
103
+ setTimeout(fire, 0);
104
+ };
105
+ const onIntent = () => fireAfterPaint();
106
+ const onHeld = (event) => {
107
+ hold(event);
108
+ fireAfterPaint();
109
+ };
110
+ for (const type of PASSIVE_INTENT_EVENTS)
111
+ shadow.addEventListener(type, onIntent, { capture: true, passive: true });
112
+ // Kept until replay, not only until the trigger: a click while the fragment boots needs
113
+ // holding as much as the first.
114
+ for (const type of HELD_EVENTS)
115
+ shadow.addEventListener(type, onHeld, { capture: true });
116
+ stopHolding = () => {
117
+ for (const type of PASSIVE_INTENT_EVENTS)
118
+ shadow.removeEventListener(type, onIntent, { capture: true });
119
+ for (const type of HELD_EVENTS)
120
+ shadow.removeEventListener(type, onHeld, { capture: true });
121
+ };
122
+ }
123
+ function hold(event) {
124
+ const target = event.composedPath()[0];
125
+ if (!target)
126
+ return;
127
+ event.preventDefault();
128
+ // The fragment's own handlers do not exist yet, and the host's bubbling listeners should see
129
+ // this action once — when it is replayed — rather than once cancelled and again for real.
130
+ event.stopPropagation();
131
+ if (held.length >= MAX_HELD || held.some((entry) => entry.target === target))
132
+ return;
133
+ held.push(event.type === 'submit'
134
+ ? { target, submitter: event.submitter ?? null }
135
+ : { target, click: mouseInit(event) });
136
+ }
137
+ function finish() {
138
+ done = true;
139
+ stopTrigger();
140
+ stopHolding();
141
+ }
142
+ function replayOne(entry) {
143
+ if (!entry.target.isConnected) {
144
+ if (isDevMode()) {
145
+ console.warn(`[braid:${options.fragmentId}] an action taken before boot was dropped: its element left the ` +
146
+ `DOM while the fragment booted, so the fragment re-rendered instead of adopting its markup`);
147
+ }
148
+ return;
149
+ }
150
+ try {
151
+ if (entry.click) {
152
+ entry.target.dispatchEvent(new MouseEvent('click', entry.click));
153
+ }
154
+ else {
155
+ const form = entry.target;
156
+ // a submitter the fragment replaced is no longer this form's, and requestSubmit would throw
157
+ const submitter = entry.submitter?.isConnected && entry.submitter.form === form ? entry.submitter : undefined;
158
+ form.requestSubmit(submitter);
159
+ }
160
+ }
161
+ catch (error) {
162
+ console.warn(`[braid:${options.fragmentId}] replaying an action taken before boot failed`, error);
163
+ }
164
+ }
165
+ return {
166
+ triggered,
167
+ replay() {
168
+ if (done)
169
+ return;
170
+ finish();
171
+ const queue = held.splice(0);
172
+ // One per task, so each handler's own re-render — a button disabling itself — lands first.
173
+ const next = () => {
174
+ const entry = queue.shift();
175
+ if (!entry)
176
+ return;
177
+ replayOne(entry);
178
+ if (queue.length)
179
+ setTimeout(next, 0);
180
+ };
181
+ next();
182
+ },
183
+ dispose() {
184
+ finish();
185
+ held.length = 0;
186
+ },
187
+ };
188
+ }
189
+ function mouseInit(event) {
190
+ return {
191
+ bubbles: true,
192
+ cancelable: true,
193
+ composed: true,
194
+ detail: event.detail,
195
+ clientX: event.clientX,
196
+ clientY: event.clientY,
197
+ screenX: event.screenX,
198
+ screenY: event.screenY,
199
+ button: event.button,
200
+ buttons: event.buttons,
201
+ ctrlKey: event.ctrlKey,
202
+ shiftKey: event.shiftKey,
203
+ altKey: event.altKey,
204
+ metaKey: event.metaKey,
205
+ };
206
+ }
207
+ //# sourceMappingURL=boot-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boot-gate.js","sourceRoot":"","sources":["../../../../../libs/core/src/elements/boot-gate.ts"],"names":[],"mappings":"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"}