@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
@@ -1,9 +1,10 @@
1
1
  /* eslint-disable @typescript-eslint/no-unsafe-function-type, prefer-rest-params --
2
2
  * ported from the matrix-tested web-fragments fork: the wrappers must forward the exact
3
3
  * original `arguments` object to native DOM methods, and accept any native function shape. */
4
- import { compatDomInsertion, compatMultiNodeDomInsertion, executeInertScript, executeInertPreloadLink, restoreScriptType, alreadyExecutedScriptsAndLinks, } from './script-execution.js';
4
+ import { compatDomInsertion, compatMultiNodeDomInsertion, executeInertScript, executeInertPreloadLink, INERT_SELECTOR, isBraidInertLink, isRunnable, markBraidInertLink, markGatewayContent, markRunnable, markStartedInPlace, restoreScriptType, alreadyExecutedScriptsAndLinks, } from './script-execution.js';
5
5
  import { removeBornInertShadowing, unwrapBornInertScriptToLive } from './born-inert-scripts.js';
6
6
  import { isDevMode } from '../config.js';
7
+ import { fragmentRootOf, subresourceUrlOverrides } from './subresource-urls.js';
7
8
  /**
8
9
  * The fragment boundary: all main-realm interception is confined here — the
9
10
  * host page's `Node`/`Element` prototypes are never touched.
@@ -43,14 +44,116 @@ const native = {
43
44
  fragmentAppend: DocumentFragment.prototype.append,
44
45
  fragmentPrepend: DocumentFragment.prototype.prepend,
45
46
  fragmentReplaceChildren: DocumentFragment.prototype.replaceChildren,
47
+ elementBefore: Element.prototype.before,
48
+ elementAfter: Element.prototype.after,
46
49
  shadowRootInnerHTML: Object.getOwnPropertyDescriptor(ShadowRoot.prototype, 'innerHTML'),
47
50
  };
51
+ /**
52
+ * Every boundary's stamped prototypes and installed wrappers, page-wide. A node that moves between
53
+ * fragments carries a stamp from each, and delegation has to see past all of them.
54
+ */
55
+ const allStampedProtos = new WeakSet();
56
+ const allBoundaryWrappers = new WeakSet();
57
+ /**
58
+ * The built-in prototypes the intercepted methods are defined on. A method found on one of these is
59
+ * the platform's — or a host page's later patch of it, which fragment nodes have never run.
60
+ */
61
+ const PLATFORM_PROTOTYPES = new Set([Node.prototype, Element.prototype, HTMLElement.prototype, DocumentFragment.prototype]);
62
+ /**
63
+ * The method a node would have without any boundary's stamp: whatever its prototype chain defines
64
+ * below the lowest stamp, read at call time — or the native method, when that is the platform's.
65
+ *
66
+ * A custom element may override insertion on its own class — Stencil's scoped components do, to
67
+ * move light-DOM children into the element's inner slot. The stamp sits above that class, so
68
+ * calling the native method unconditionally would skip the override: children land on the host
69
+ * instead of in the slot, and an `insertBefore` whose reference the component had relocated throws
70
+ * `NotFoundError`.
71
+ *
72
+ * Past the *lowest* stamp, of any boundary, so a node stamped by fragment A, then B, then A again
73
+ * never delegates from one boundary's wrapper to another's and back. Unstamped receivers (a shadow
74
+ * root's own-property overrides) get the native method.
75
+ */
76
+ function unstampedMethod(node, name, nativeMethod) {
77
+ let belowStamps;
78
+ for (let proto = Object.getPrototypeOf(node); proto !== null; proto = Object.getPrototypeOf(proto)) {
79
+ if (allStampedProtos.has(proto))
80
+ belowStamps = Object.getPrototypeOf(proto);
81
+ }
82
+ for (let owner = belowStamps; owner; owner = Object.getPrototypeOf(owner)) {
83
+ if (!Object.hasOwn(owner, name))
84
+ continue;
85
+ if (PLATFORM_PROTOTYPES.has(owner))
86
+ return nativeMethod;
87
+ const method = Object.getOwnPropertyDescriptor(owner, name)?.value;
88
+ return typeof method === 'function' && !allBoundaryWrappers.has(method) ? method : nativeMethod;
89
+ }
90
+ return nativeMethod;
91
+ }
92
+ /**
93
+ * Custom elements stamped before their definition existed, page-wide by tag name, and what restamps
94
+ * each one.
95
+ *
96
+ * Upgrading an element replaces its prototype with the definition's, which drops the stamp. Most
97
+ * upgrades happen during an insertion the boundary stamps after anyway; this catches the rest — an
98
+ * element already in a fragment's DOM when its definition arrives *in the host's registry*, which is
99
+ * the one that upgrades fragment DOM: a shared component bundle the host loads. A compat fragment's
100
+ * own `customElements.define` goes to its realm's registry and never resolves here.
101
+ *
102
+ * Many dashed names are never defined at all (every Angular component host), so nothing here may
103
+ * keep a boundary alive: one `whenDefined` per name for the page, closing over only the waiting
104
+ * set, and each element's restamper held weakly by the element.
105
+ */
106
+ const awaitingDefinition = new Map();
107
+ const restampers = new WeakMap();
108
+ function restampWhenDefined(element, restamp) {
109
+ const alreadyWaiting = restampers.has(element);
110
+ restampers.set(element, restamp);
111
+ if (alreadyWaiting)
112
+ return;
113
+ const name = element.localName;
114
+ let waiting = awaitingDefinition.get(name);
115
+ if (!waiting) {
116
+ const entry = { elements: new Set(), pruneAt: 1024 };
117
+ awaitingDefinition.set(name, (waiting = entry));
118
+ customElements.whenDefined(name).then(() => {
119
+ awaitingDefinition.delete(name);
120
+ for (const ref of entry.elements) {
121
+ const defined = ref.deref();
122
+ if (defined)
123
+ restampers.get(defined)?.(defined);
124
+ }
125
+ }, () => awaitingDefinition.delete(name));
126
+ }
127
+ // a long-lived list of a never-defined element leaves dead refs behind; sweep them as it grows
128
+ if (waiting.elements.size >= waiting.pruneAt) {
129
+ for (const ref of waiting.elements)
130
+ if (!ref.deref())
131
+ waiting.elements.delete(ref);
132
+ waiting.pruneAt = Math.max(1024, waiting.elements.size * 2);
133
+ }
134
+ waiting.elements.add(new WeakRef(element));
135
+ }
48
136
  export function createFragmentBoundary(options) {
49
- const { realmDocument, shadowRoot, braidDocumentElement, abortSignal } = options;
137
+ const { realmDocument, shadowRoot, braidDocumentElement, abortSignal, htmlPolicy } = options;
50
138
  const stampedNodes = new WeakSet();
51
139
  const stampedProtos = new Map();
52
140
  const stampedProtoSet = new WeakSet();
53
141
  let warnedAboutUnstampedEntry = false;
142
+ /** Restamps an upgraded element, unless it has left this fragment or the fragment is gone. */
143
+ function restampIfStillInFragment(element) {
144
+ if (!abortSignal.aborted && isInFragmentDom(element))
145
+ stampNode(element);
146
+ }
147
+ /**
148
+ * Stamps what an insertion put in place: anything in the fragment's DOM, or in a detached tree,
149
+ * which may enter it later. Not a node a component's own insertion override placed in the host's
150
+ * DOM instead (a portal, an overlay) — that is the host's, and stays on pristine prototypes.
151
+ */
152
+ function stampInserted(node) {
153
+ if (node.isConnected && !isInFragmentDom(node))
154
+ return;
155
+ stampTree(node);
156
+ }
54
157
  /** A node is inside this fragment's DOM iff its plain root is the fragment's shadow root. */
55
158
  function isInFragmentDom(node) {
56
159
  return native.getRootNode.call(node) === shadowRoot;
@@ -65,10 +168,87 @@ export function createFragmentBoundary(options) {
65
168
  */
66
169
  function reviveInertScript(script) {
67
170
  unwrapBornInertScriptToLive(script);
68
- if (script.getAttribute('type') === 'inert' && !alreadyExecutedScriptsAndLinks.has(script)) {
171
+ // only a script that may run at all: one markup wrote as `type="inert"` stays exactly that
172
+ if (script.getAttribute('type') === 'inert' && !alreadyExecutedScriptsAndLinks.has(script) && isRunnable(script)) {
69
173
  restoreScriptType(script);
70
174
  }
71
175
  }
176
+ /**
177
+ * A clone carries its source's provenance, as the browser carries a script's started flag: a clone
178
+ * of a script that may run and has not yet may run, a clone of one that has run has run, and a
179
+ * clone of an inert link Braid made is Braid's. Matched by position: a deep clone has its source's
180
+ * shape. Only clones made through the boundary carry it — any other clone path (a `Range`, a
181
+ * fragment's own `DocumentFragment`) yields scripts that never run, which is the safe side.
182
+ */
183
+ function inheritProvenance(source, clone, deep) {
184
+ if (!(source instanceof Element) && !(source instanceof DocumentFragment))
185
+ return;
186
+ const select = 'script,link[rel^="inert-"]';
187
+ const sources = [...(source instanceof Element && source.matches(select) ? [source] : [])];
188
+ const clones = [...(clone instanceof Element && clone.matches(select) ? [clone] : [])];
189
+ if (deep) {
190
+ sources.push(...source.querySelectorAll(select));
191
+ clones.push(...clone.querySelectorAll(select));
192
+ }
193
+ sources.forEach((element, index) => {
194
+ const copy = clones[index];
195
+ if (!copy || copy.localName !== element.localName)
196
+ return;
197
+ if (element.localName === 'script') {
198
+ if (alreadyExecutedScriptsAndLinks.has(element))
199
+ alreadyExecutedScriptsAndLinks.add(copy);
200
+ else if (isRunnable(element))
201
+ markRunnable(copy);
202
+ }
203
+ else if (isBraidInertLink(element)) {
204
+ markBraidInertLink(copy);
205
+ }
206
+ });
207
+ if (deep)
208
+ inheritThroughTemplates(source, clone);
209
+ }
210
+ /**
211
+ * A template's content is copied with it, but no selector enters it: pair the templates up and
212
+ * carry provenance into each copied content, which can itself be instantiated later.
213
+ */
214
+ function inheritThroughTemplates(source, clone) {
215
+ const sources = [...(source instanceof Element && source.localName === 'template' ? [source] : []), ...source.querySelectorAll('template')];
216
+ const clones = [
217
+ ...(clone instanceof Element && clone.localName === 'template' ? [clone] : []),
218
+ ...(clone.querySelectorAll?.('template') ?? []),
219
+ ];
220
+ sources.forEach((template, index) => {
221
+ const copy = clones[index];
222
+ if (!copy)
223
+ return;
224
+ inheritProvenance(template.content, copy.content, true);
225
+ carryProvenanceOnClone(copy.content);
226
+ });
227
+ }
228
+ /**
229
+ * The gateway's templates hold scripts a fragment instantiates later, with
230
+ * `template.content.cloneNode(true)`. A template's content is a DocumentFragment, which the
231
+ * boundary does not stamp, so each one gets its own `cloneNode` that carries provenance — an own
232
+ * property of the fragment's DOM object, not a host prototype.
233
+ */
234
+ function carryProvenanceThroughTemplates(root) {
235
+ for (const template of root.querySelectorAll('template')) {
236
+ const content = template.content;
237
+ carryProvenanceOnClone(content);
238
+ carryProvenanceThroughTemplates(content);
239
+ }
240
+ }
241
+ function carryProvenanceOnClone(content) {
242
+ Object.defineProperty(content, 'cloneNode', {
243
+ configurable: true,
244
+ writable: true,
245
+ value: function templateContentCloneNode(deep) {
246
+ const clone = native.cloneNode.call(this, deep);
247
+ inheritProvenance(this, clone, Boolean(deep));
248
+ return clone;
249
+ },
250
+ });
251
+ }
72
252
  function prepareForInsertion(node) {
73
253
  if (node instanceof HTMLScriptElement) {
74
254
  reviveInertScript(node);
@@ -94,13 +274,13 @@ export function createFragmentBoundary(options) {
94
274
  * `compatDomInsertion`). In all cases the inserted subtree is stamped so the stamped set
95
275
  * stays closed.
96
276
  */
97
- function makeSingleNodeInsertion(nativeFn) {
277
+ function makeSingleNodeInsertion(name, nativeFn) {
98
278
  return function boundaryInsertion(childNode) {
99
279
  const args = arguments;
100
280
  const futureStamps = nodesToStampAfterInsertion(childNode);
101
281
  const doInsertTheNode = () => {
102
- const result = nativeFn.apply(this, args);
103
- futureStamps.forEach(stampTree);
282
+ const result = unstampedMethod(this, name, nativeFn).apply(this, args);
283
+ futureStamps.forEach(stampInserted);
104
284
  return result;
105
285
  };
106
286
  if (!isInFragmentDom(this)) {
@@ -115,8 +295,8 @@ export function createFragmentBoundary(options) {
115
295
  const args = arguments;
116
296
  const futureStamps = nodesToStampAfterInsertion(newChild);
117
297
  const doInsertTheNode = () => {
118
- const result = native.replaceChild.apply(this, args);
119
- futureStamps.forEach(stampTree);
298
+ const result = unstampedMethod(this, 'replaceChild', native.replaceChild).apply(this, args);
299
+ futureStamps.forEach(stampInserted);
120
300
  return result;
121
301
  };
122
302
  if (!isInFragmentDom(this)) {
@@ -130,8 +310,8 @@ export function createFragmentBoundary(options) {
130
310
  function boundaryInsertAdjacentElement(where, element) {
131
311
  const args = arguments;
132
312
  const doInsertTheNode = () => {
133
- const result = native.insertAdjacentElement.apply(this, args);
134
- stampTree(element);
313
+ const result = unstampedMethod(this, 'insertAdjacentElement', native.insertAdjacentElement).apply(this, args);
314
+ stampInserted(element);
135
315
  return result;
136
316
  };
137
317
  if (!isInFragmentDom(this)) {
@@ -144,14 +324,14 @@ export function createFragmentBoundary(options) {
144
324
  * replaceWith): the native insertion runs once, after every node argument has been
145
325
  * preprocessed.
146
326
  */
147
- function makeMultiNodeInsertion(nativeFn) {
327
+ function makeMultiNodeInsertion(name, nativeFn) {
148
328
  return function boundaryMultiInsertion(...nodes) {
149
329
  const args = arguments;
150
330
  const nodeArgs = nodes.filter((node) => typeof node !== 'string');
151
331
  const futureStamps = nodeArgs.flatMap(nodesToStampAfterInsertion);
152
332
  const doInsertTheNodes = () => {
153
- nativeFn.apply(this, args);
154
- futureStamps.forEach(stampTree);
333
+ unstampedMethod(this, name, nativeFn).apply(this, args);
334
+ futureStamps.forEach(stampInserted);
155
335
  };
156
336
  if (!isInFragmentDom(this)) {
157
337
  return doInsertTheNodes();
@@ -162,7 +342,9 @@ export function createFragmentBoundary(options) {
162
342
  }
163
343
  function makeHtmlParsingOverrides(innerHTMLDescriptor) {
164
344
  return {
165
- // scripts parsed from html never execute (per spec), so parsing only needs stamp propagation
345
+ // Scripts parsed from html never execute (per spec), so parsing only needs stamp propagation.
346
+ // A fragment with an HTML policy has the markup parsed and cleaned first (`html-policy.ts`),
347
+ // and the result inserted natively, so the write means what the native setter would have.
166
348
  innerHTML: {
167
349
  configurable: true,
168
350
  enumerable: true,
@@ -170,40 +352,79 @@ export function createFragmentBoundary(options) {
170
352
  return innerHTMLDescriptor.get.call(this);
171
353
  },
172
354
  set(value) {
173
- innerHTMLDescriptor.set.call(this, value);
355
+ // a shadow root's markup is parsed with its host for context, as the native setter does
356
+ const context = this instanceof ShadowRoot ? this.host : this;
357
+ const cleaned = htmlPolicy?.filter(value === null ? '' : value, context, 'innerHTML');
358
+ if (cleaned) {
359
+ // a template's markup is its content, not its children
360
+ const target = this instanceof HTMLTemplateElement ? this.content : this;
361
+ if (target instanceof Element)
362
+ native.elementReplaceChildren.call(target, cleaned);
363
+ else
364
+ native.fragmentReplaceChildren.call(target, cleaned);
365
+ }
366
+ else {
367
+ innerHTMLDescriptor.set.call(this, value);
368
+ }
174
369
  stampTree(this);
175
370
  },
176
371
  },
177
372
  };
178
373
  }
179
374
  const elementOverrides = {
180
- appendChild: { configurable: true, writable: true, value: makeSingleNodeInsertion(native.appendChild) },
181
- insertBefore: { configurable: true, writable: true, value: makeSingleNodeInsertion(native.insertBefore) },
375
+ appendChild: { configurable: true, writable: true, value: makeSingleNodeInsertion('appendChild', native.appendChild) },
376
+ insertBefore: { configurable: true, writable: true, value: makeSingleNodeInsertion('insertBefore', native.insertBefore) },
182
377
  replaceChild: { configurable: true, writable: true, value: boundaryReplaceChild },
183
378
  insertAdjacentElement: { configurable: true, writable: true, value: boundaryInsertAdjacentElement },
184
- append: { configurable: true, writable: true, value: makeMultiNodeInsertion(native.elementAppend) },
185
- prepend: { configurable: true, writable: true, value: makeMultiNodeInsertion(native.elementPrepend) },
379
+ append: { configurable: true, writable: true, value: makeMultiNodeInsertion('append', native.elementAppend) },
380
+ prepend: { configurable: true, writable: true, value: makeMultiNodeInsertion('prepend', native.elementPrepend) },
186
381
  replaceChildren: {
187
382
  configurable: true,
188
383
  writable: true,
189
- value: makeMultiNodeInsertion(native.elementReplaceChildren),
384
+ value: makeMultiNodeInsertion('replaceChildren', native.elementReplaceChildren),
190
385
  },
191
- replaceWith: { configurable: true, writable: true, value: makeMultiNodeInsertion(native.elementReplaceWith) },
386
+ replaceWith: { configurable: true, writable: true, value: makeMultiNodeInsertion('replaceWith', native.elementReplaceWith) },
192
387
  insertAdjacentHTML: {
193
388
  configurable: true,
194
389
  writable: true,
195
390
  value: function boundaryInsertAdjacentHTML(position, text) {
196
- const result = native.insertAdjacentHTML.call(this, position, text);
197
391
  const lowercasePosition = String(position).toLowerCase();
198
- stampTree(lowercasePosition === 'afterbegin' || lowercasePosition === 'beforeend' ? this : this.parentNode ?? this);
199
- return result;
392
+ const outside = lowercasePosition === 'beforebegin' || lowercasePosition === 'afterend';
393
+ const inside = lowercasePosition === 'afterbegin' || lowercasePosition === 'beforeend';
394
+ const parent = this.parentNode;
395
+ // the native method's context and errors, so a policy changes nothing but what is removed:
396
+ // outside the element, its parent is the context, or a <body> when the parent is no element
397
+ const context = inside
398
+ ? this
399
+ : parent instanceof Element
400
+ ? parent
401
+ : this.ownerDocument.createElement('body');
402
+ const cleaned = htmlPolicy && (inside || (outside && parent && parent.nodeType !== Node.DOCUMENT_NODE))
403
+ ? htmlPolicy.filter(text, context, 'insertAdjacentHTML')
404
+ : null;
405
+ if (cleaned) {
406
+ if (lowercasePosition === 'beforebegin')
407
+ native.elementBefore.call(this, cleaned);
408
+ else if (lowercasePosition === 'afterbegin')
409
+ native.elementPrepend.call(this, cleaned);
410
+ else if (lowercasePosition === 'beforeend')
411
+ native.elementAppend.call(this, cleaned);
412
+ else
413
+ native.elementAfter.call(this, cleaned);
414
+ }
415
+ else {
416
+ // also what throws for an unknown position, or outside an element with no parent
417
+ unstampedMethod(this, 'insertAdjacentHTML', native.insertAdjacentHTML).call(this, position, text);
418
+ }
419
+ stampTree(inside ? this : this.parentNode ?? this);
200
420
  },
201
421
  },
202
422
  cloneNode: {
203
423
  configurable: true,
204
424
  writable: true,
205
425
  value: function boundaryCloneNode(deep) {
206
- const clone = native.cloneNode.call(this, deep);
426
+ const clone = unstampedMethod(this, 'cloneNode', native.cloneNode).call(this, deep);
427
+ inheritProvenance(this, clone, Boolean(deep));
207
428
  stampTree(clone);
208
429
  return clone;
209
430
  },
@@ -229,21 +450,43 @@ export function createFragmentBoundary(options) {
229
450
  },
230
451
  ...makeHtmlParsingOverrides(native.elementInnerHTML),
231
452
  };
453
+ for (const descriptor of Object.values(elementOverrides)) {
454
+ if (typeof descriptor.value === 'function')
455
+ allBoundaryWrappers.add(descriptor.value);
456
+ }
457
+ /**
458
+ * What a URL set from fragment script resolves against, read when it is set: the namespace from
459
+ * the realm's base, and the fragment's own `<base href>` from its markup — the two the gateway
460
+ * uses for the same URL in markup, so markup and script agree on every route.
461
+ */
462
+ const urlBase = () => ({
463
+ root: fragmentRootOf(realmDocument.baseURI),
464
+ baseHref: braidDocumentElement.querySelector('base[href]')?.getAttribute('href') ?? '/',
465
+ });
232
466
  function stampNode(node) {
233
467
  if (node.nodeType !== Node.ELEMENT_NODE)
234
468
  return;
235
- if (stampedNodes.has(node))
236
- return;
469
+ // by prototype, not by membership: an upgrade replaces a stamped element's prototype, and the
470
+ // next stamping pass that reaches it should put the stamp back
237
471
  const proto = Object.getPrototypeOf(node);
238
472
  if (proto === null || stampedProtoSet.has(proto)) {
239
473
  stampedNodes.add(node);
240
474
  return;
241
475
  }
476
+ if (proto === HTMLElement.prototype && node.localName.includes('-')) {
477
+ restampWhenDefined(node, restampIfStillInFragment);
478
+ }
242
479
  let stampedProto = stampedProtos.get(proto);
243
480
  if (!stampedProto) {
244
- stampedProto = Object.create(proto, elementOverrides);
481
+ // a subresource URL the fragment's code sets resolves into its namespace, as one in its
482
+ // markup does (see subresource-urls.ts); keyed by prototype, which fixes the element type
483
+ stampedProto = Object.create(proto, {
484
+ ...elementOverrides,
485
+ ...subresourceUrlOverrides(proto, node.localName, urlBase),
486
+ });
245
487
  stampedProtos.set(proto, stampedProto);
246
488
  stampedProtoSet.add(stampedProto);
489
+ allStampedProtos.add(stampedProto);
247
490
  }
248
491
  Object.setPrototypeOf(node, stampedProto);
249
492
  stampedNodes.add(node);
@@ -264,21 +507,27 @@ export function createFragmentBoundary(options) {
264
507
  * (reporting the main document) — only insertions are intercepted.
265
508
  */
266
509
  Object.defineProperties(shadowRoot, {
267
- appendChild: { configurable: true, writable: true, value: makeSingleNodeInsertion(native.appendChild) },
268
- insertBefore: { configurable: true, writable: true, value: makeSingleNodeInsertion(native.insertBefore) },
510
+ appendChild: { configurable: true, writable: true, value: makeSingleNodeInsertion('appendChild', native.appendChild) },
511
+ insertBefore: { configurable: true, writable: true, value: makeSingleNodeInsertion('insertBefore', native.insertBefore) },
269
512
  replaceChild: { configurable: true, writable: true, value: boundaryReplaceChild },
270
- append: { configurable: true, writable: true, value: makeMultiNodeInsertion(native.fragmentAppend) },
271
- prepend: { configurable: true, writable: true, value: makeMultiNodeInsertion(native.fragmentPrepend) },
513
+ append: { configurable: true, writable: true, value: makeMultiNodeInsertion('append', native.fragmentAppend) },
514
+ prepend: { configurable: true, writable: true, value: makeMultiNodeInsertion('prepend', native.fragmentPrepend) },
272
515
  replaceChildren: {
273
516
  configurable: true,
274
517
  writable: true,
275
- value: makeMultiNodeInsertion(native.fragmentReplaceChildren),
518
+ value: makeMultiNodeInsertion('replaceChildren', native.fragmentReplaceChildren),
276
519
  },
277
520
  ...makeHtmlParsingOverrides(native.shadowRootInnerHTML),
278
521
  });
279
522
  // stamp the initial fragment DOM (for pierced fragments this includes the SSR'ed content;
280
523
  // for slot-fetched fragments this is the already-inserted, neutralized content)
281
524
  stampTree(braidDocumentElement);
525
+ // that content is the gateway's: its scripts may run and its inert links are the ones it
526
+ // neutralized, and nothing of the fragment's has run yet to have written any of its own
527
+ markGatewayContent(braidDocumentElement);
528
+ carryProvenanceThroughTemplates(braidDocumentElement);
529
+ // before the observer starts, so moving them out and back is not mistaken for an insertion
530
+ markStartedInPlace(braidDocumentElement);
282
531
  /**
283
532
  * The boundary observer: activates inert scripts/preload-links that entered the fragment's
284
533
  * DOM through unstamped paths, stamps stray subtrees, and reports bypasses in dev mode.
@@ -298,18 +547,23 @@ export function createFragmentBoundary(options) {
298
547
  }
299
548
  stampTree(addedElement);
300
549
  }
550
+ // scripts that arrived by a path the boundary did not intercept were not marked started
551
+ markStartedInPlace(addedElement);
301
552
  activateInertScriptsAndLinks(addedElement);
302
553
  }
303
554
  }
304
555
  });
305
556
  function activateInertScriptsAndLinks(root) {
306
- const inertSelector = 'script[type="inert"],link[rel="inert-preload"],link[rel="inert-prefetch"],link[rel="inert-modulepreload"]';
307
557
  const candidates = [];
308
- if (root.matches(inertSelector)) {
558
+ if (root.matches(INERT_SELECTOR)) {
309
559
  candidates.push(root);
310
560
  }
311
- candidates.push(...root.querySelectorAll(inertSelector));
561
+ candidates.push(...root.querySelectorAll(INERT_SELECTOR));
312
562
  for (const candidate of candidates) {
563
+ // a script that may not run, or a marker Braid did not set, is markup the fragment wrote, and
564
+ // it stays as inert as it would be natively — see `isRunnable`
565
+ if (candidate instanceof HTMLLinkElement ? !isBraidInertLink(candidate) : !isRunnable(candidate))
566
+ continue;
313
567
  if (candidate instanceof HTMLLinkElement) {
314
568
  executeInertPreloadLink(candidate, realmDocument);
315
569
  }
@@ -329,6 +583,7 @@ export function createFragmentBoundary(options) {
329
583
  return {
330
584
  stampNode,
331
585
  stampTree,
586
+ inheritProvenance,
332
587
  disconnect: () => observer.disconnect(),
333
588
  };
334
589
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fragment-boundary.js","sourceRoot":"","sources":["../../../../../libs/core/src/compat/fragment-boundary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fragment-boundary.js","sourceRoot":"","sources":["../../../../../libs/core/src/compat/fragment-boundary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { FragmentCapabilities } from '../weave/capabilities.js';
2
+ /**
3
+ * What a compat fragment's own HTML writes may put in the page: `capabilities.html`, opt-in.
4
+ *
5
+ * The gateway already neutralizes the markup a fragment *sends*: no handler, script, `javascript:`
6
+ * frame or meta refresh in server-rendered HTML runs in the host realm. Markup a fragment's code
7
+ * *writes* at runtime has had no such treatment. `el.innerHTML = userInput` with a stray
8
+ * `<img onerror>` compiles that handler in the host page's realm, because the element is the host
9
+ * document's — an XSS in one fragment becomes script in the shell.
10
+ *
11
+ * - `'sanitize'` removes what could run, or make Braid run something: every `<script>`, `on*`
12
+ * attributes, `javascript:` URLs, frame documents from anything but http(s) (the gateway's
13
+ * allowlist), SVG animation (which can set a link's `href`), meta refresh, `<base>`, Braid's own
14
+ * elements (a written `<fragment-slot entry>` would boot a realm), and the `inert-*` links and
15
+ * `data-script-type` markers only the gateway may write.
16
+ * - `'report'` writes the markup unchanged, and warns once per distinct finding with what
17
+ * `'sanitize'` would have removed. It parses every write a second time to know, so it is for
18
+ * development and staging.
19
+ *
20
+ * **Parsing is the native parse, somewhere harmless.** The markup is parsed by the browser's own
21
+ * fragment parser, with an element of the same name and namespace as the write's target for
22
+ * context, in a document with no browsing context — where nothing loads, runs or dispatches. So a
23
+ * write into an `<svg>` yields SVG, a `<tr>` into a `<table>` gets its `<tbody>`, exactly as the
24
+ * native setter would; only then are the cleaned nodes moved into the page. They are never
25
+ * serialized and parsed again: a second parse is how sanitizers get bypassed. Writes whose result
26
+ * is only ever text — into a `<textarea>`, `<style>`, `<script>`, `<title>` — and `TrustedHTML`
27
+ * values, which the host's own policy already vetted, are passed straight to the native setter.
28
+ * Any other value is converted to a string, as the native setter would, and cleaned.
29
+ *
30
+ * Not in scope: CSS. A written `<style>`, stylesheet link or `style` attribute can still restyle or
31
+ * overlay the host page.
32
+ *
33
+ * Covered: `innerHTML` on the fragment's elements and shadow root, and `insertAdjacentHTML` — the
34
+ * sinks the fragment boundary already stamps. Not covered: `outerHTML`, `setHTMLUnsafe`,
35
+ * `Range.createContextualFragment`, markup parsed elsewhere and then inserted (`DOMParser`,
36
+ * `document.implementation`, `jQuery.parseHTML`), `document.write`, captured native setters, and DOM
37
+ * a fragment builds attribute by attribute. A custom element the host defines upgrades wherever it
38
+ * is inserted, so its tag in written markup is as capable as the element is.
39
+ */
40
+ export type HtmlPolicyMode = 'report' | 'sanitize';
41
+ export declare function resolveHtmlPolicy(capabilities: FragmentCapabilities | undefined, fragmentId: string): HtmlPolicyMode | null;
42
+ export interface HtmlPolicy {
43
+ /**
44
+ * Parses `markup` as a write into `context` through `sink`. Returns the cleaned nodes to insert
45
+ * in its place under `'sanitize'`, or null to let the native setter write `markup` as it is:
46
+ * always under `'report'` (after warning), and for writes that cannot produce markup.
47
+ */
48
+ filter(markup: unknown, context: Element, sink: string): DocumentFragment | null;
49
+ }
50
+ export declare function createHtmlPolicy(mode: HtmlPolicyMode, fragmentId: string, mainDocument: Document): HtmlPolicy;