@reckona/mreact-compat 0.0.182 → 0.0.184

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.
@@ -1 +1 @@
1
- {"version":3,"file":"reactive-prop-cell.d.ts","sourceRoot":"","sources":["../src/reactive-prop-cell.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,MAAM,EACZ,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAQ3D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACvD,iBAAiB,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE,qBAAqB,CAAC,GAAG,SAAS,CAAC;CACzE;AAID,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB;IACnE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CACzC;AAKD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAEvF;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAW/D;AAuBD,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,CAAC,CAEnF;AAoBD,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CACpC;AAgFD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAuCN"}
1
+ {"version":3,"file":"reactive-prop-cell.d.ts","sourceRoot":"","sources":["../src/reactive-prop-cell.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,MAAM,EACZ,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAQ3D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACvD,iBAAiB,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE,qBAAqB,CAAC,GAAG,SAAS,CAAC;CACzE;AAID,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB;IACnE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CACzC;AAKD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAEvF;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAW/D;AAuBD,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,CAAC,CAEnF;AAoBD,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CACpC;AAoFD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAuCN"}
@@ -64,6 +64,9 @@ function rememberReactivePropObjectSnapshot(cell, property, value) {
64
64
  snapshots = new Map();
65
65
  cell.propertySnapshots = snapshots;
66
66
  }
67
+ if (snapshots.get(property)?.value === value) {
68
+ return;
69
+ }
67
70
  snapshots.set(property, createShallowObjectSnapshot(value));
68
71
  }
69
72
  function createShallowObjectSnapshot(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"reactive-prop-cell.js","sourceRoot":"","sources":["../src/reactive-prop-cell.ts"],"names":[],"mappings":"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","sourcesContent":["import { batch } from \"@reckona/mreact-reactive-core\";\nimport {\n flushQueuedComputations,\n notifySubscribers,\n trackSource,\n type Source,\n} from \"@reckona/mreact-reactive-core/internal\";\nimport type { ReactiveDomBlockResult } from \"./element.js\";\n\n// A stable reactive box over a component's incoming props, analogous to the\n// native keyed list's KeyedItemCell (packages/reactive-dom/src/bind-list.ts).\n// A reactive-dom-block reads its props through a proxy backed by this cell;\n// when the component re-renders with new props the reconciler swaps the cell's\n// value and notifies, so bound text/attributes update without re-running the\n// block's render closure or reconciling its subtree.\nexport interface ReactivePropCell {\n value: Record<string, unknown>;\n source: Source;\n propertySources?: Map<PropertyKey, Source> | undefined;\n propertySnapshots?: Map<PropertyKey, ShallowObjectSnapshot> | undefined;\n}\n\n// What a reactive-dom-block fiber stores in stateNode: the committed node and\n// its dispose, plus the prop cell when the block bridges component props.\nexport interface ReactiveDomBlockState extends ReactiveDomBlockResult {\n propCell?: ReactivePropCell | undefined;\n}\n\nlet propCellBatchDepth = 0;\nlet propCellBatchNeedsFlush = false;\n\nexport function createReactivePropCell(props: Record<string, unknown>): ReactivePropCell {\n return { value: props, source: { subscribers: null } };\n}\n\nexport function batchReactivePropCellUpdates<T>(run: () => T): T {\n propCellBatchDepth += 1;\n try {\n return batch(run);\n } finally {\n propCellBatchDepth -= 1;\n if (propCellBatchDepth === 0 && propCellBatchNeedsFlush) {\n propCellBatchNeedsFlush = false;\n flushQueuedComputations();\n }\n }\n}\n\nconst PROP_PROXY_HANDLER: ProxyHandler<ReactivePropCell> = {\n get(cell, property) {\n trackSource(getReactivePropPropertySource(cell, property));\n const value = Reflect.get(cell.value, property);\n rememberReactivePropObjectSnapshot(cell, property, value);\n return value;\n },\n has(cell, property) {\n trackSource(getReactivePropPropertySource(cell, property));\n return property in cell.value;\n },\n ownKeys(cell) {\n trackSource(cell.source);\n return Reflect.ownKeys(cell.value);\n },\n getOwnPropertyDescriptor(cell, property) {\n trackSource(cell.source);\n return Reflect.getOwnPropertyDescriptor(cell.value, property);\n },\n};\n\nexport function createReactivePropProxy<P extends object>(cell: ReactivePropCell): P {\n return new Proxy(cell, PROP_PROXY_HANDLER) as unknown as P;\n}\n\nfunction getReactivePropPropertySource(cell: ReactivePropCell, property: PropertyKey): Source {\n let propertySources = cell.propertySources;\n\n if (propertySources === undefined) {\n propertySources = new Map();\n cell.propertySources = propertySources;\n }\n\n let source = propertySources.get(property);\n\n if (source === undefined) {\n source = { subscribers: null };\n propertySources.set(property, source);\n }\n\n return source;\n}\n\ninterface ShallowObjectSnapshot {\n value: object;\n entries: Map<PropertyKey, unknown>;\n}\n\nfunction rememberReactivePropObjectSnapshot(\n cell: ReactivePropCell,\n property: PropertyKey,\n value: unknown,\n): void {\n if (!isObjectLike(value)) {\n cell.propertySnapshots?.delete(property);\n return;\n }\n\n let snapshots = cell.propertySnapshots;\n if (snapshots === undefined) {\n snapshots = new Map();\n cell.propertySnapshots = snapshots;\n }\n\n snapshots.set(property, createShallowObjectSnapshot(value));\n}\n\nfunction createShallowObjectSnapshot(value: object): ShallowObjectSnapshot {\n const entries = new Map<PropertyKey, unknown>();\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n if (descriptor !== undefined && \"value\" in descriptor) {\n entries.set(key, descriptor.value);\n }\n }\n\n return { value, entries };\n}\n\nfunction isObjectLike(value: unknown): value is object {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\";\n}\n\nfunction hasShallowObjectSnapshotChanged(\n snapshot: ShallowObjectSnapshot | undefined,\n nextValue: unknown,\n): boolean {\n if (snapshot === undefined || snapshot.value !== nextValue || !isObjectLike(nextValue)) {\n return false;\n }\n\n for (const key of Reflect.ownKeys(nextValue)) {\n const descriptor = Reflect.getOwnPropertyDescriptor(nextValue, key);\n if (descriptor !== undefined && \"value\" in descriptor) {\n if (!snapshot.entries.has(key) || !Object.is(snapshot.entries.get(key), descriptor.value)) {\n return true;\n }\n }\n }\n\n for (const key of snapshot.entries.keys()) {\n const descriptor = Reflect.getOwnPropertyDescriptor(nextValue, key);\n if (descriptor === undefined || !(\"value\" in descriptor)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction shouldNotifyReactivePropProperty(\n previous: Record<string, unknown>,\n next: Record<string, unknown>,\n property: PropertyKey,\n snapshot: ShallowObjectSnapshot | undefined,\n): boolean {\n if ((property in previous) !== (property in next)) {\n return true;\n }\n\n const previousValue = Reflect.get(previous, property);\n const nextValue = Reflect.get(next, property);\n return !Object.is(previousValue, nextValue) ||\n hasShallowObjectSnapshotChanged(snapshot, nextValue);\n}\n\nexport function setReactivePropCell(\n cell: ReactivePropCell,\n next: Record<string, unknown>,\n): void {\n if (Object.is(cell.value, next)) {\n return;\n }\n\n const previous = cell.value;\n const propertySources = cell.propertySources;\n let notified = false;\n\n cell.value = next;\n\n if (propertySources !== undefined) {\n for (const [property, source] of propertySources) {\n if (\n shouldNotifyReactivePropProperty(\n previous,\n next,\n property,\n cell.propertySnapshots?.get(property),\n )\n ) {\n notifySubscribers(source);\n notified = true;\n }\n }\n }\n\n if (cell.source.subscribers !== null) {\n notifySubscribers(cell.source);\n notified = true;\n }\n\n if (notified) {\n if (propCellBatchDepth === 0) {\n flushQueuedComputations();\n } else {\n propCellBatchNeedsFlush = true;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"reactive-prop-cell.js","sourceRoot":"","sources":["../src/reactive-prop-cell.ts"],"names":[],"mappings":"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","sourcesContent":["import { batch } from \"@reckona/mreact-reactive-core\";\nimport {\n flushQueuedComputations,\n notifySubscribers,\n trackSource,\n type Source,\n} from \"@reckona/mreact-reactive-core/internal\";\nimport type { ReactiveDomBlockResult } from \"./element.js\";\n\n// A stable reactive box over a component's incoming props, analogous to the\n// native keyed list's KeyedItemCell (packages/reactive-dom/src/bind-list.ts).\n// A reactive-dom-block reads its props through a proxy backed by this cell;\n// when the component re-renders with new props the reconciler swaps the cell's\n// value and notifies, so bound text/attributes update without re-running the\n// block's render closure or reconciling its subtree.\nexport interface ReactivePropCell {\n value: Record<string, unknown>;\n source: Source;\n propertySources?: Map<PropertyKey, Source> | undefined;\n propertySnapshots?: Map<PropertyKey, ShallowObjectSnapshot> | undefined;\n}\n\n// What a reactive-dom-block fiber stores in stateNode: the committed node and\n// its dispose, plus the prop cell when the block bridges component props.\nexport interface ReactiveDomBlockState extends ReactiveDomBlockResult {\n propCell?: ReactivePropCell | undefined;\n}\n\nlet propCellBatchDepth = 0;\nlet propCellBatchNeedsFlush = false;\n\nexport function createReactivePropCell(props: Record<string, unknown>): ReactivePropCell {\n return { value: props, source: { subscribers: null } };\n}\n\nexport function batchReactivePropCellUpdates<T>(run: () => T): T {\n propCellBatchDepth += 1;\n try {\n return batch(run);\n } finally {\n propCellBatchDepth -= 1;\n if (propCellBatchDepth === 0 && propCellBatchNeedsFlush) {\n propCellBatchNeedsFlush = false;\n flushQueuedComputations();\n }\n }\n}\n\nconst PROP_PROXY_HANDLER: ProxyHandler<ReactivePropCell> = {\n get(cell, property) {\n trackSource(getReactivePropPropertySource(cell, property));\n const value = Reflect.get(cell.value, property);\n rememberReactivePropObjectSnapshot(cell, property, value);\n return value;\n },\n has(cell, property) {\n trackSource(getReactivePropPropertySource(cell, property));\n return property in cell.value;\n },\n ownKeys(cell) {\n trackSource(cell.source);\n return Reflect.ownKeys(cell.value);\n },\n getOwnPropertyDescriptor(cell, property) {\n trackSource(cell.source);\n return Reflect.getOwnPropertyDescriptor(cell.value, property);\n },\n};\n\nexport function createReactivePropProxy<P extends object>(cell: ReactivePropCell): P {\n return new Proxy(cell, PROP_PROXY_HANDLER) as unknown as P;\n}\n\nfunction getReactivePropPropertySource(cell: ReactivePropCell, property: PropertyKey): Source {\n let propertySources = cell.propertySources;\n\n if (propertySources === undefined) {\n propertySources = new Map();\n cell.propertySources = propertySources;\n }\n\n let source = propertySources.get(property);\n\n if (source === undefined) {\n source = { subscribers: null };\n propertySources.set(property, source);\n }\n\n return source;\n}\n\ninterface ShallowObjectSnapshot {\n value: object;\n entries: Map<PropertyKey, unknown>;\n}\n\nfunction rememberReactivePropObjectSnapshot(\n cell: ReactivePropCell,\n property: PropertyKey,\n value: unknown,\n): void {\n if (!isObjectLike(value)) {\n cell.propertySnapshots?.delete(property);\n return;\n }\n\n let snapshots = cell.propertySnapshots;\n if (snapshots === undefined) {\n snapshots = new Map();\n cell.propertySnapshots = snapshots;\n }\n\n if (snapshots.get(property)?.value === value) {\n return;\n }\n\n snapshots.set(property, createShallowObjectSnapshot(value));\n}\n\nfunction createShallowObjectSnapshot(value: object): ShallowObjectSnapshot {\n const entries = new Map<PropertyKey, unknown>();\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n if (descriptor !== undefined && \"value\" in descriptor) {\n entries.set(key, descriptor.value);\n }\n }\n\n return { value, entries };\n}\n\nfunction isObjectLike(value: unknown): value is object {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\";\n}\n\nfunction hasShallowObjectSnapshotChanged(\n snapshot: ShallowObjectSnapshot | undefined,\n nextValue: unknown,\n): boolean {\n if (snapshot === undefined || snapshot.value !== nextValue || !isObjectLike(nextValue)) {\n return false;\n }\n\n for (const key of Reflect.ownKeys(nextValue)) {\n const descriptor = Reflect.getOwnPropertyDescriptor(nextValue, key);\n if (descriptor !== undefined && \"value\" in descriptor) {\n if (!snapshot.entries.has(key) || !Object.is(snapshot.entries.get(key), descriptor.value)) {\n return true;\n }\n }\n }\n\n for (const key of snapshot.entries.keys()) {\n const descriptor = Reflect.getOwnPropertyDescriptor(nextValue, key);\n if (descriptor === undefined || !(\"value\" in descriptor)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction shouldNotifyReactivePropProperty(\n previous: Record<string, unknown>,\n next: Record<string, unknown>,\n property: PropertyKey,\n snapshot: ShallowObjectSnapshot | undefined,\n): boolean {\n if ((property in previous) !== (property in next)) {\n return true;\n }\n\n const previousValue = Reflect.get(previous, property);\n const nextValue = Reflect.get(next, property);\n return !Object.is(previousValue, nextValue) ||\n hasShallowObjectSnapshotChanged(snapshot, nextValue);\n}\n\nexport function setReactivePropCell(\n cell: ReactivePropCell,\n next: Record<string, unknown>,\n): void {\n if (Object.is(cell.value, next)) {\n return;\n }\n\n const previous = cell.value;\n const propertySources = cell.propertySources;\n let notified = false;\n\n cell.value = next;\n\n if (propertySources !== undefined) {\n for (const [property, source] of propertySources) {\n if (\n shouldNotifyReactivePropProperty(\n previous,\n next,\n property,\n cell.propertySnapshots?.get(property),\n )\n ) {\n notifySubscribers(source);\n notified = true;\n }\n }\n }\n\n if (cell.source.subscribers !== null) {\n notifySubscribers(cell.source);\n notified = true;\n }\n\n if (notified) {\n if (propCellBatchDepth === 0) {\n flushQueuedComputations();\n } else {\n propCellBatchNeedsFlush = true;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../src/root.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAUpD,OAAO,EAIL,KAAK,6BAA6B,EAEnC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAsB3B,8DAA8D;AAC9D,MAAM,WAAW,IAAI;IACnB,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IACvC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,uDAAuD;AACvD,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,0DAA0D;AAC1D,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,CAAC,EAAE,CACnB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,6BAA6B,KAChC,IAAI,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,gEAAgE;AAChE,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACtE,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,uDAAuD;AACvD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;CAChD;AAED,0EAA0E;AAC1E,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,OAAO,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,kBAAkB,CAAC,CAAC;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;CACzD;AAED,kEAAkE;AAClE,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,kBAAkB,CAAC,CAAC;CACvE;AAID,+EAA+E;AAC/E,wBAAgB,UAAU,CACxB,SAAS,EAAE,OAAO,EAClB,OAAO,GAAE,WAAgB,GACxB,IAAI,CAwCN;AA2GD,oEAAoE;AACpE,wBAAgB,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAIzE;AAED,qFAAqF;AACrF,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAEjD;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CACzB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,kBAAuB,GAC/B,IAAI,CA4FN;AAcD,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,OAAO,EAClB,OAAO,GAAE,6BAAkC,GAC1C,sBAAsB,CA0ExB;AAED,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAYlE"}
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../src/root.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAUpD,OAAO,EAIL,KAAK,6BAA6B,EAEnC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAyB3B,8DAA8D;AAC9D,MAAM,WAAW,IAAI;IACnB,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IACvC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,uDAAuD;AACvD,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,0DAA0D;AAC1D,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,CAAC,EAAE,CACnB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,6BAA6B,KAChC,IAAI,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,gEAAgE;AAChE,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACtE,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,uDAAuD;AACvD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;CAChD;AAED,0EAA0E;AAC1E,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,OAAO,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,kBAAkB,CAAC,CAAC;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;CACzD;AAED,kEAAkE;AAClE,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,kBAAkB,CAAC,CAAC;CACvE;AAID,+EAA+E;AAC/E,wBAAgB,UAAU,CACxB,SAAS,EAAE,OAAO,EAClB,OAAO,GAAE,WAAgB,GACxB,IAAI,CA0CN;AAqHD,oEAAoE;AACpE,wBAAgB,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAIzE;AAED,qFAAqF;AACrF,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAEjD;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CACzB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,kBAAuB,GAC/B,IAAI,CAyFN;AAkBD,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,OAAO,EAClB,OAAO,GAAE,6BAAkC,GAC1C,sBAAsB,CA0ExB;AAED,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAYlE"}
package/dist/root.js CHANGED
@@ -6,8 +6,8 @@ import { enableEventHydrationManifestReplay, readEventHydrationManifest, replayQ
6
6
  import { ContinuousEventLane, SyncLane, TransitionLane, } from "./fiber-lanes.js";
7
7
  import { createContainerFiberRoot, enqueueRootRender, } from "./fiber-work-loop.js";
8
8
  import { commitFiberRoot, detachFiberRefs } from "./fiber-commit.js";
9
+ import { withBatchedDelegatedRootReleases, withDeferredDelegatedEventPromotions, } from "@reckona/mreact-reactive-dom";
9
10
  import { canRenderHostFiber, commitHydratingHostFiberRoot, disposeHostFiberResources, renderHydratingHostFiberRoot, renderHostFiberRoot, } from "./fiber-host.js";
10
- import { renderIntoContainer } from "./reconciler.js";
11
11
  const legacyRoots = new WeakMap();
12
12
  /** Creates a root that renders React-compatible nodes into a DOM container. */
13
13
  export function createRoot(container, options = {}) {
@@ -18,7 +18,7 @@ export function createRoot(container, options = {}) {
18
18
  if (canRenderHostFiber(runtime.currentElement)) {
19
19
  return renderHostFiberIntoContainer(container, fiberRoot, runtime, runtime.currentElement);
20
20
  }
21
- renderIntoContainer(container, runtime.currentElement, runtime);
21
+ throwUnsupportedRootNode();
22
22
  });
23
23
  }
24
24
  }, options);
@@ -29,17 +29,19 @@ export function createRoot(container, options = {}) {
29
29
  if (canRenderHostFiber(element)) {
30
30
  return renderHostFiberIntoContainer(container, fiberRoot, runtime, element);
31
31
  }
32
- renderIntoContainer(container, element, runtime);
32
+ throwUnsupportedRootNode();
33
33
  });
34
34
  },
35
35
  unmount() {
36
- runtime.currentElement = undefined;
37
- runtime.dispose();
38
- detachFiberRefs(fiberRoot.current);
39
- disposeHostFiberResources(fiberRoot.current);
40
- runtime.instances.clear();
41
- unmountDevToolsRoot(container);
42
- clearElementChildren(container);
36
+ withBatchedDelegatedRootReleases(() => {
37
+ runtime.currentElement = undefined;
38
+ runtime.dispose();
39
+ detachFiberRefs(fiberRoot.current);
40
+ disposeHostFiberResources(fiberRoot.current);
41
+ runtime.instances.clear();
42
+ unmountDevToolsRoot(container);
43
+ clearElementChildren(container);
44
+ });
43
45
  },
44
46
  };
45
47
  }
@@ -49,7 +51,8 @@ function renderHostFiberIntoContainer(container, fiberRoot, runtime, element) {
49
51
  runtime.beginRender();
50
52
  let committed = false;
51
53
  try {
52
- const finishedWork = renderHostFiberRoot(fiberRoot, element, runtime);
54
+ const deferred = withDeferredDelegatedEventPromotions(() => renderHostFiberRoot(fiberRoot, element, runtime));
55
+ const finishedWork = deferred.value;
53
56
  if (runtime.renderPhaseUpdate) {
54
57
  runtime.renderPhaseUpdate = false;
55
58
  continue;
@@ -58,9 +61,10 @@ function renderHostFiberIntoContainer(container, fiberRoot, runtime, element) {
58
61
  continue;
59
62
  }
60
63
  fiberRoot.finishedWork = finishedWork;
61
- commitFiberRoot(fiberRoot);
64
+ withBatchedDelegatedRootReleases(() => commitFiberRoot(fiberRoot));
62
65
  collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);
63
66
  removeStalePortalNodes(portalSnapshot, runtime);
67
+ deferred.promote?.();
64
68
  commitDevToolsRoot(container, fiberRoot);
65
69
  runtime.idMode = "client";
66
70
  committed = true;
@@ -85,7 +89,8 @@ function renderHydratingHostFiberIntoContainer(container, fiberRoot, runtime, el
85
89
  let committed = false;
86
90
  try {
87
91
  const scope = getHydrationScope(container, options.resumeId);
88
- const finishedWork = renderHydratingHostFiberRoot(fiberRoot, element, runtime, scope, options);
92
+ const deferred = withDeferredDelegatedEventPromotions(() => renderHydratingHostFiberRoot(fiberRoot, element, runtime, scope, options));
93
+ const finishedWork = deferred.value;
89
94
  if (runtime.renderPhaseUpdate) {
90
95
  runtime.renderPhaseUpdate = false;
91
96
  continue;
@@ -93,7 +98,7 @@ function renderHydratingHostFiberIntoContainer(container, fiberRoot, runtime, el
93
98
  if (!hasStableExternalStores(runtime)) {
94
99
  continue;
95
100
  }
96
- commitHydratingHostFiberRoot(fiberRoot, finishedWork, scope, options);
101
+ withBatchedDelegatedRootReleases(() => commitHydratingHostFiberRoot(fiberRoot, finishedWork, scope, options));
97
102
  fiberRoot.current = finishedWork;
98
103
  fiberRoot.current.stateNode = fiberRoot;
99
104
  fiberRoot.finishedWork = undefined;
@@ -101,6 +106,7 @@ function renderHydratingHostFiberIntoContainer(container, fiberRoot, runtime, el
101
106
  fiberRoot.workInProgressRootRenderLanes = 0;
102
107
  collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);
103
108
  removeStalePortalNodes(portalSnapshot, runtime);
109
+ deferred.promote?.();
104
110
  commitDevToolsRoot(container, fiberRoot);
105
111
  runtime.idMode = "client";
106
112
  committed = true;
@@ -151,7 +157,7 @@ export function hydrateRoot(container, element, options = {}) {
151
157
  ? renderHydratingHostFiberIntoContainer(container, fiberRoot, runtime, runtime.currentElement, renderOptions)
152
158
  : renderHostFiberIntoContainer(container, fiberRoot, runtime, runtime.currentElement);
153
159
  }
154
- renderIntoContainer(container, runtime.currentElement, runtime, useHydratingRerender ? renderOptions : {});
160
+ throwUnsupportedRootNode();
155
161
  });
156
162
  }
157
163
  }, {
@@ -167,17 +173,19 @@ export function hydrateRoot(container, element, options = {}) {
167
173
  if (canRenderHostFiber(nextElement)) {
168
174
  return renderHostFiberIntoContainer(container, fiberRoot, runtime, nextElement);
169
175
  }
170
- renderIntoContainer(container, nextElement, runtime);
176
+ throwUnsupportedRootNode();
171
177
  });
172
178
  },
173
179
  unmount() {
174
- runtime.currentElement = undefined;
175
- runtime.dispose();
176
- detachFiberRefs(fiberRoot.current);
177
- disposeHostFiberResources(fiberRoot.current);
178
- runtime.instances.clear();
179
- unmountDevToolsRoot(container);
180
- clearElementChildren(container);
180
+ withBatchedDelegatedRootReleases(() => {
181
+ runtime.currentElement = undefined;
182
+ runtime.dispose();
183
+ detachFiberRefs(fiberRoot.current);
184
+ disposeHostFiberResources(fiberRoot.current);
185
+ runtime.instances.clear();
186
+ unmountDevToolsRoot(container);
187
+ clearElementChildren(container);
188
+ });
181
189
  },
182
190
  };
183
191
  runtime.currentElement = element;
@@ -185,11 +193,14 @@ export function hydrateRoot(container, element, options = {}) {
185
193
  if (canRenderHostFiber(element)) {
186
194
  return renderHydratingHostFiberIntoContainer(container, fiberRoot, runtime, element, renderOptions);
187
195
  }
188
- renderIntoContainer(container, element, runtime, renderOptions);
196
+ throwUnsupportedRootNode();
189
197
  });
190
198
  replayQueuedHydrationEvents(container);
191
199
  return root;
192
200
  }
201
+ function throwUnsupportedRootNode() {
202
+ throw new Error("Unsupported react-compat root node. Pass a valid React-compatible element, portal, fragment, primitive, array, or nullish value.");
203
+ }
193
204
  function laneForRenderPriority(priority) {
194
205
  if (priority === "transition") {
195
206
  return TransitionLane;
package/dist/root.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"root.js","sourceRoot":"","sources":["../src/root.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactCompatNode } from \"./element.js\";\nimport {\n createRootRuntime,\n flushSyncUpdates,\n hasStableExternalStores,\n type RenderPriority,\n type RootRuntime,\n} from \"./hooks.js\";\nimport { collectOwnedChildNodes, removeChildIfPresent } from \"./dom-children.js\";\nimport { commitDevToolsRoot, unmountDevToolsRoot } from \"./devtools.js\";\nimport {\n applyStreamingHydrationFragments,\n findContainingResumeBoundaryId,\n getHydrationScope,\n type HydrationRecoverableErrorInfo,\n type RenderOptions,\n} from \"./hydration.js\";\nimport {\n enableEventHydrationManifestReplay,\n readEventHydrationManifest,\n replayQueuedHydrationEvents,\n type EventHydrationManifest,\n} from \"./event-replay.js\";\nimport {\n ContinuousEventLane,\n SyncLane,\n TransitionLane,\n type Lane,\n} from \"./fiber-lanes.js\";\nimport {\n createContainerFiberRoot,\n enqueueRootRender,\n} from \"./fiber-work-loop.js\";\nimport { commitFiberRoot, detachFiberRefs } from \"./fiber-commit.js\";\nimport {\n canRenderHostFiber,\n commitHydratingHostFiberRoot,\n disposeHostFiberResources,\n renderHydratingHostFiberRoot,\n renderHostFiberRoot,\n} from \"./fiber-host.js\";\nimport type { Fiber, FiberRoot } from \"./fiber.js\";\nimport { renderIntoContainer } from \"./reconciler.js\";\n\n/** Root controller returned by createRoot and hydrateRoot. */\nexport interface Root {\n render(element: ReactCompatNode): void;\n unmount(): void;\n}\n\n/** Options used when creating a client render root. */\nexport interface RootOptions {\n identifierPrefix?: string;\n}\n\n/** Options used when hydrating server-rendered markup. */\nexport interface HydrateRootOptions {\n onRecoverableError?: (\n error: Error,\n info: HydrationRecoverableErrorInfo,\n ) => void;\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n identifierPrefix?: string;\n}\n\n/** Controller for deferred or selective streaming hydration. */\nexport interface StreamingHydrationRoot {\n hydrate(element: ReactCompatNode, options?: HydrateRootOptions): Root;\n dispose(): void;\n}\n\n/** Options for creating a streaming hydration root. */\nexport interface StreamingHydrationRootOptions {\n manifest?: EventHydrationManifest;\n manifestRoot?: ParentNode;\n fragmentRoot?: ParentNode;\n applyOutOfOrderFragments?: boolean;\n observeOutOfOrderFragments?: boolean;\n selectiveHydration?: SelectiveHydrationOptions;\n}\n\n/** Rules that choose which boundary to hydrate after a captured event. */\nexport interface SelectiveHydrationOptions {\n element?: ReactCompatNode;\n options?: HydrateRootOptions | ((event: Event) => HydrateRootOptions);\n boundaries?: Record<string, SelectiveHydrationBoundary>;\n}\n\n/** Element and options used to hydrate one selective boundary. */\nexport interface SelectiveHydrationBoundary {\n element: ReactCompatNode;\n options?: HydrateRootOptions | ((event: Event) => HydrateRootOptions);\n}\n\nconst legacyRoots = new WeakMap<Element, Root>();\n\n/** Creates a root that renders React-compatible nodes into a DOM container. */\nexport function createRoot(\n container: Element,\n options: RootOptions = {},\n): Root {\n const fiberRoot = createContainerFiberRoot(container);\n const runtime = createRootRuntime((priority = \"sync\") => {\n if (runtime.currentElement !== undefined) {\n enqueueRootRender(fiberRoot, runtime.currentElement, laneForRenderPriority(priority), () => {\n if (canRenderHostFiber(runtime.currentElement as ReactCompatNode)) {\n return renderHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n );\n }\n\n renderIntoContainer(container, runtime.currentElement, runtime);\n });\n }\n }, options);\n\n return {\n render(element) {\n runtime.currentElement = element;\n enqueueRootRender(fiberRoot, element, SyncLane, () => {\n if (canRenderHostFiber(element)) {\n return renderHostFiberIntoContainer(container, fiberRoot, runtime, element);\n }\n\n renderIntoContainer(container, element, runtime);\n });\n },\n unmount() {\n runtime.currentElement = undefined;\n runtime.dispose();\n detachFiberRefs(fiberRoot.current);\n disposeHostFiberResources(fiberRoot.current);\n runtime.instances.clear();\n unmountDevToolsRoot(container);\n clearElementChildren(container);\n },\n };\n}\n\nfunction renderHostFiberIntoContainer(\n container: Element,\n fiberRoot: FiberRoot,\n runtime: RootRuntime,\n element: ReactCompatNode,\n): Fiber {\n for (let attempt = 0; attempt < 25; attempt += 1) {\n const portalSnapshot = beginPortalRender(runtime);\n runtime.beginRender();\n let committed = false;\n\n try {\n const finishedWork = renderHostFiberRoot(fiberRoot, element, runtime);\n\n if (runtime.renderPhaseUpdate) {\n runtime.renderPhaseUpdate = false;\n continue;\n }\n\n if (!hasStableExternalStores(runtime)) {\n continue;\n }\n\n fiberRoot.finishedWork = finishedWork;\n commitFiberRoot(fiberRoot);\n collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);\n removeStalePortalNodes(portalSnapshot, runtime);\n commitDevToolsRoot(container, fiberRoot);\n runtime.idMode = \"client\";\n committed = true;\n return finishedWork;\n } finally {\n if (!committed) {\n restorePortalRender(runtime, portalSnapshot);\n }\n runtime.endRender(committed);\n if (committed) {\n runtime.flushEffects();\n }\n }\n }\n\n throw new Error(\"Store unstable.\");\n}\n\nfunction renderHydratingHostFiberIntoContainer(\n container: Element,\n fiberRoot: FiberRoot,\n runtime: RootRuntime,\n element: ReactCompatNode,\n options: RenderOptions & {\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n },\n): Fiber {\n for (let attempt = 0; attempt < 25; attempt += 1) {\n const portalSnapshot = beginPortalRender(runtime);\n runtime.beginRender();\n let committed = false;\n\n try {\n const scope = getHydrationScope(container, options.resumeId);\n const finishedWork = renderHydratingHostFiberRoot(\n fiberRoot,\n element,\n runtime,\n scope,\n options,\n );\n\n if (runtime.renderPhaseUpdate) {\n runtime.renderPhaseUpdate = false;\n continue;\n }\n\n if (!hasStableExternalStores(runtime)) {\n continue;\n }\n\n commitHydratingHostFiberRoot(fiberRoot, finishedWork, scope, options);\n fiberRoot.current = finishedWork;\n fiberRoot.current.stateNode = fiberRoot;\n fiberRoot.finishedWork = undefined;\n fiberRoot.workInProgress = undefined;\n fiberRoot.workInProgressRootRenderLanes = 0;\n collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);\n removeStalePortalNodes(portalSnapshot, runtime);\n commitDevToolsRoot(container, fiberRoot);\n runtime.idMode = \"client\";\n committed = true;\n return finishedWork;\n } finally {\n if (!committed) {\n restorePortalRender(runtime, portalSnapshot);\n }\n runtime.endRender(committed);\n if (committed) {\n runtime.flushEffects();\n }\n }\n }\n\n throw new Error(\"Store unstable.\");\n}\n\n/** Renders a React-compatible node into a legacy root container. */\nexport function render(element: ReactCompatNode, container: Element): void {\n const root = legacyRoots.get(container) ?? createRoot(container);\n legacyRoots.set(container, root);\n root.render(element);\n}\n\n/** Runs updates synchronously and flushes pending reactive work before returning. */\nexport function flushSync<T>(callback: () => T): T {\n return flushSyncUpdates(callback);\n}\n\n/** Hydrates server-rendered markup with a React-compatible element tree. */\nexport function hydrateRoot(\n container: Element,\n element: ReactCompatNode,\n options: HydrateRootOptions = {},\n): Root {\n const fiberRoot = createContainerFiberRoot(container);\n const renderOptions: RenderOptions & {\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n } = {\n hydration:\n options.onRecoverableError === undefined\n ? {}\n : { onRecoverableError: options.onRecoverableError },\n ...(options.resumeId === undefined ? {} : { resumeId: options.resumeId }),\n ...(options.consumeResumeMarkers === undefined\n ? {}\n : { consumeResumeMarkers: options.consumeResumeMarkers }),\n };\n const runtime = createRootRuntime((priority = \"sync\") => {\n if (runtime.currentElement !== undefined) {\n enqueueRootRender(fiberRoot, runtime.currentElement, laneForRenderPriority(priority), () => {\n const useHydratingRerender =\n runtime.idMode === \"server\" ||\n renderOptions.resumeId !== undefined ||\n renderOptions.consumeResumeMarkers !== undefined;\n if (canRenderHostFiber(runtime.currentElement as ReactCompatNode)) {\n return useHydratingRerender\n ? renderHydratingHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n renderOptions,\n )\n : renderHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n );\n }\n\n renderIntoContainer(\n container,\n runtime.currentElement,\n runtime,\n useHydratingRerender ? renderOptions : {},\n );\n });\n }\n }, {\n ...(options.identifierPrefix === undefined\n ? {}\n : { identifierPrefix: options.identifierPrefix }),\n idMode: \"server\",\n });\n\n const root: Root = {\n render(nextElement) {\n runtime.currentElement = nextElement;\n enqueueRootRender(fiberRoot, nextElement, SyncLane, () => {\n if (canRenderHostFiber(nextElement)) {\n return renderHostFiberIntoContainer(container, fiberRoot, runtime, nextElement);\n }\n\n renderIntoContainer(container, nextElement, runtime);\n });\n },\n unmount() {\n runtime.currentElement = undefined;\n runtime.dispose();\n detachFiberRefs(fiberRoot.current);\n disposeHostFiberResources(fiberRoot.current);\n runtime.instances.clear();\n unmountDevToolsRoot(container);\n clearElementChildren(container);\n },\n };\n\n runtime.currentElement = element;\n enqueueRootRender(fiberRoot, element, SyncLane, () => {\n if (canRenderHostFiber(element)) {\n return renderHydratingHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n element,\n renderOptions,\n );\n }\n\n renderIntoContainer(container, element, runtime, renderOptions);\n });\n replayQueuedHydrationEvents(container);\n return root;\n}\n\nfunction laneForRenderPriority(priority: RenderPriority): Lane {\n if (priority === \"transition\") {\n return TransitionLane;\n }\n\n if (priority === \"continuous\") {\n return ContinuousEventLane;\n }\n\n return SyncLane;\n}\n\n/** Creates a root that can hydrate streamed or selectively revealed markup. */\nexport function createStreamingHydrationRoot(\n container: Element,\n options: StreamingHydrationRootOptions = {},\n): StreamingHydrationRoot {\n const fragmentRoot = options.fragmentRoot ?? container.ownerDocument;\n const manifestRoot = options.manifestRoot ?? container;\n const manifest = options.manifest ?? readEventHydrationManifest(manifestRoot);\n\n if (options.applyOutOfOrderFragments !== false) {\n applyStreamingHydrationFragments(fragmentRoot);\n }\n\n let hydratedRoot: Root | undefined;\n const hydrate = (\n element: ReactCompatNode,\n hydrateOptions: HydrateRootOptions = {},\n ): Root => {\n if (options.applyOutOfOrderFragments !== false) {\n applyStreamingHydrationFragments(fragmentRoot);\n }\n\n const root = hydrateRoot(container, element, hydrateOptions);\n hydratedRoot = root;\n disposeReplayCaptureOnce();\n return root;\n };\n const disposeReplayCapture = enableEventHydrationManifestReplay(\n container,\n manifest,\n {\n onCapturedEvent(event, target) {\n const selectiveHydration = options.selectiveHydration;\n const selectiveBoundary = resolveSelectiveHydrationBoundary(\n container,\n event,\n target,\n manifest,\n selectiveHydration,\n );\n\n if (selectiveBoundary === undefined || hydratedRoot !== undefined) {\n return;\n }\n\n hydrate(\n selectiveBoundary.element,\n resolveSelectiveHydrationOptions(event, selectiveBoundary),\n );\n },\n },\n );\n const observer =\n options.observeOutOfOrderFragments === true &&\n typeof MutationObserver !== \"undefined\" &&\n fragmentRoot instanceof Node\n ? new MutationObserver(() => {\n applyStreamingHydrationFragments(fragmentRoot);\n })\n : undefined;\n let replayDisposed = false;\n\n observer?.observe(fragmentRoot as Node, { childList: true, subtree: true });\n\n const disposeReplayCaptureOnce = (): void => {\n if (!replayDisposed) {\n disposeReplayCapture();\n replayDisposed = true;\n }\n };\n\n return {\n hydrate,\n dispose() {\n disposeReplayCaptureOnce();\n observer?.disconnect();\n },\n };\n}\n\n/** Unmounts a legacy root from a container and reports whether anything was removed. */\nexport function unmountComponentAtNode(container: Element): boolean {\n const root = legacyRoots.get(container);\n\n if (root !== undefined) {\n root.unmount();\n legacyRoots.delete(container);\n return true;\n }\n\n const hadChildren = container.childNodes.length > 0;\n clearElementChildren(container);\n return hadChildren;\n}\n\nfunction clearElementChildren(element: Element): void {\n if (typeof element.replaceChildren === \"function\") {\n element.replaceChildren();\n return;\n }\n\n while (element.firstChild !== null) {\n element.removeChild(element.firstChild);\n }\n}\n\nfunction collectPortalNodes(\n fiber: Fiber | undefined,\n runtime: RootRuntime,\n snapshot: PortalRenderSnapshot,\n): void {\n if (\n fiber === undefined ||\n (runtime.portalContainers.size === 0 && snapshot.containers.size === 0)\n ) {\n return;\n }\n\n const deferredSiblings: Fiber[] = [];\n let cursor: Fiber | undefined = fiber;\n\n while (cursor !== undefined) {\n if (cursor.tag === \"portal\" && cursor.stateNode instanceof Element) {\n const nodes = Array.isArray(cursor.memoizedState)\n ? cursor.memoizedState.filter((node): node is Node => node instanceof Node)\n : [];\n runtime.portalContainers.add(cursor.stateNode);\n const ownedNodes = runtime.portalNodes.get(cursor.stateNode) ?? new Set<Node>();\n for (const node of nodes) {\n ownedNodes.add(node);\n }\n runtime.portalNodes.set(cursor.stateNode, ownedNodes);\n }\n\n if (cursor.child !== undefined) {\n if (cursor.sibling !== undefined) {\n deferredSiblings.push(cursor.sibling);\n }\n cursor = cursor.child;\n continue;\n }\n\n cursor = cursor.sibling ?? deferredSiblings.pop();\n }\n}\n\ninterface PortalRenderSnapshot {\n containers: Set<Element>;\n nodes: Map<Element, Set<Node>>;\n}\n\nfunction beginPortalRender(runtime: RootRuntime): PortalRenderSnapshot {\n const snapshot = {\n containers: new Set(runtime.portalContainers),\n nodes: clonePortalNodes(runtime.portalNodes),\n };\n runtime.portalContainers.clear();\n runtime.portalNodes.clear();\n return snapshot;\n}\n\nfunction restorePortalRender(\n runtime: RootRuntime,\n snapshot: PortalRenderSnapshot,\n): void {\n runtime.portalContainers = snapshot.containers;\n runtime.portalNodes = snapshot.nodes;\n}\n\nfunction removeStalePortalNodes(\n snapshot: PortalRenderSnapshot,\n runtime: RootRuntime,\n): void {\n for (const container of snapshot.containers) {\n const nodes = snapshot.nodes.get(container) ?? new Set(collectOwnedChildNodes(container));\n const currentNodes = runtime.portalNodes.get(container);\n\n for (const node of nodes) {\n if (currentNodes?.has(node) !== true) {\n removeChildIfPresent(container, node);\n }\n }\n }\n}\n\nfunction clonePortalNodes(source: Map<Element, Set<Node>>): Map<Element, Set<Node>> {\n const clone = new Map<Element, Set<Node>>();\n\n for (const [container, nodes] of source) {\n clone.set(container, new Set(nodes));\n }\n\n return clone;\n}\n\nfunction resolveSelectiveHydrationBoundary(\n container: Element,\n event: Event,\n target: EventTarget,\n manifest: EventHydrationManifest | undefined,\n selectiveHydration: SelectiveHydrationOptions | undefined,\n): SelectiveHydrationBoundary | undefined {\n if (selectiveHydration === undefined) {\n return undefined;\n }\n\n const resumeId = resolveSelectiveHydrationResumeId(\n container,\n event,\n target,\n manifest,\n );\n const boundary =\n resumeId === undefined ? undefined : selectiveHydration.boundaries?.[resumeId];\n\n if (boundary !== undefined && resumeId !== undefined) {\n return {\n element: boundary.element,\n options: boundary.options ?? { resumeId, consumeResumeMarkers: true },\n };\n }\n\n if (selectiveHydration.element === undefined) {\n return undefined;\n }\n\n return {\n element: selectiveHydration.element,\n ...(selectiveHydration.options === undefined\n ? {}\n : { options: selectiveHydration.options }),\n };\n}\n\nfunction resolveSelectiveHydrationOptions(\n event: Event,\n boundary: SelectiveHydrationBoundary,\n): HydrateRootOptions {\n return typeof boundary.options === \"function\"\n ? boundary.options(event)\n : boundary.options ?? {};\n}\n\nfunction resolveSelectiveHydrationResumeId(\n container: Element,\n event: Event,\n target: EventTarget,\n manifest: EventHydrationManifest | undefined,\n): string | undefined {\n if (!(target instanceof Node) || manifest === undefined) {\n return undefined;\n }\n\n const containingResumeId = findContainingResumeBoundaryId(container, target);\n\n if (containingResumeId === undefined) {\n return undefined;\n }\n\n return manifest.events.some(\n (entry) =>\n entry.event === event.type &&\n getManifestResumeId(entry.id) === containingResumeId,\n )\n ? containingResumeId\n : undefined;\n}\n\nfunction getManifestResumeId(id: string): string {\n return id.split(\":\")[0] ?? id;\n}\n"]}
1
+ {"version":3,"file":"root.js","sourceRoot":"","sources":["../src/root.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactCompatNode } from \"./element.js\";\nimport {\n createRootRuntime,\n flushSyncUpdates,\n hasStableExternalStores,\n type RenderPriority,\n type RootRuntime,\n} from \"./hooks.js\";\nimport { collectOwnedChildNodes, removeChildIfPresent } from \"./dom-children.js\";\nimport { commitDevToolsRoot, unmountDevToolsRoot } from \"./devtools.js\";\nimport {\n applyStreamingHydrationFragments,\n findContainingResumeBoundaryId,\n getHydrationScope,\n type HydrationRecoverableErrorInfo,\n type RenderOptions,\n} from \"./hydration.js\";\nimport {\n enableEventHydrationManifestReplay,\n readEventHydrationManifest,\n replayQueuedHydrationEvents,\n type EventHydrationManifest,\n} from \"./event-replay.js\";\nimport {\n ContinuousEventLane,\n SyncLane,\n TransitionLane,\n type Lane,\n} from \"./fiber-lanes.js\";\nimport {\n createContainerFiberRoot,\n enqueueRootRender,\n} from \"./fiber-work-loop.js\";\nimport { commitFiberRoot, detachFiberRefs } from \"./fiber-commit.js\";\nimport {\n withBatchedDelegatedRootReleases,\n withDeferredDelegatedEventPromotions,\n} from \"@reckona/mreact-reactive-dom\";\nimport {\n canRenderHostFiber,\n commitHydratingHostFiberRoot,\n disposeHostFiberResources,\n renderHydratingHostFiberRoot,\n renderHostFiberRoot,\n} from \"./fiber-host.js\";\nimport type { Fiber, FiberRoot } from \"./fiber.js\";\n\n/** Root controller returned by createRoot and hydrateRoot. */\nexport interface Root {\n render(element: ReactCompatNode): void;\n unmount(): void;\n}\n\n/** Options used when creating a client render root. */\nexport interface RootOptions {\n identifierPrefix?: string;\n}\n\n/** Options used when hydrating server-rendered markup. */\nexport interface HydrateRootOptions {\n onRecoverableError?: (\n error: Error,\n info: HydrationRecoverableErrorInfo,\n ) => void;\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n identifierPrefix?: string;\n}\n\n/** Controller for deferred or selective streaming hydration. */\nexport interface StreamingHydrationRoot {\n hydrate(element: ReactCompatNode, options?: HydrateRootOptions): Root;\n dispose(): void;\n}\n\n/** Options for creating a streaming hydration root. */\nexport interface StreamingHydrationRootOptions {\n manifest?: EventHydrationManifest;\n manifestRoot?: ParentNode;\n fragmentRoot?: ParentNode;\n applyOutOfOrderFragments?: boolean;\n observeOutOfOrderFragments?: boolean;\n selectiveHydration?: SelectiveHydrationOptions;\n}\n\n/** Rules that choose which boundary to hydrate after a captured event. */\nexport interface SelectiveHydrationOptions {\n element?: ReactCompatNode;\n options?: HydrateRootOptions | ((event: Event) => HydrateRootOptions);\n boundaries?: Record<string, SelectiveHydrationBoundary>;\n}\n\n/** Element and options used to hydrate one selective boundary. */\nexport interface SelectiveHydrationBoundary {\n element: ReactCompatNode;\n options?: HydrateRootOptions | ((event: Event) => HydrateRootOptions);\n}\n\nconst legacyRoots = new WeakMap<Element, Root>();\n\n/** Creates a root that renders React-compatible nodes into a DOM container. */\nexport function createRoot(\n container: Element,\n options: RootOptions = {},\n): Root {\n const fiberRoot = createContainerFiberRoot(container);\n const runtime = createRootRuntime((priority = \"sync\") => {\n if (runtime.currentElement !== undefined) {\n enqueueRootRender(fiberRoot, runtime.currentElement, laneForRenderPriority(priority), () => {\n if (canRenderHostFiber(runtime.currentElement as ReactCompatNode)) {\n return renderHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n );\n }\n\n throwUnsupportedRootNode();\n });\n }\n }, options);\n\n return {\n render(element) {\n runtime.currentElement = element;\n enqueueRootRender(fiberRoot, element, SyncLane, () => {\n if (canRenderHostFiber(element)) {\n return renderHostFiberIntoContainer(container, fiberRoot, runtime, element);\n }\n\n throwUnsupportedRootNode();\n });\n },\n unmount() {\n withBatchedDelegatedRootReleases(() => {\n runtime.currentElement = undefined;\n runtime.dispose();\n detachFiberRefs(fiberRoot.current);\n disposeHostFiberResources(fiberRoot.current);\n runtime.instances.clear();\n unmountDevToolsRoot(container);\n clearElementChildren(container);\n });\n },\n };\n}\n\nfunction renderHostFiberIntoContainer(\n container: Element,\n fiberRoot: FiberRoot,\n runtime: RootRuntime,\n element: ReactCompatNode,\n): Fiber {\n for (let attempt = 0; attempt < 25; attempt += 1) {\n const portalSnapshot = beginPortalRender(runtime);\n runtime.beginRender();\n let committed = false;\n\n try {\n const deferred = withDeferredDelegatedEventPromotions(() =>\n renderHostFiberRoot(fiberRoot, element, runtime)\n );\n const finishedWork = deferred.value;\n\n if (runtime.renderPhaseUpdate) {\n runtime.renderPhaseUpdate = false;\n continue;\n }\n\n if (!hasStableExternalStores(runtime)) {\n continue;\n }\n\n fiberRoot.finishedWork = finishedWork;\n withBatchedDelegatedRootReleases(() => commitFiberRoot(fiberRoot));\n collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);\n removeStalePortalNodes(portalSnapshot, runtime);\n deferred.promote?.();\n commitDevToolsRoot(container, fiberRoot);\n runtime.idMode = \"client\";\n committed = true;\n return finishedWork;\n } finally {\n if (!committed) {\n restorePortalRender(runtime, portalSnapshot);\n }\n runtime.endRender(committed);\n if (committed) {\n runtime.flushEffects();\n }\n }\n }\n\n throw new Error(\"Store unstable.\");\n}\n\nfunction renderHydratingHostFiberIntoContainer(\n container: Element,\n fiberRoot: FiberRoot,\n runtime: RootRuntime,\n element: ReactCompatNode,\n options: RenderOptions & {\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n },\n): Fiber {\n for (let attempt = 0; attempt < 25; attempt += 1) {\n const portalSnapshot = beginPortalRender(runtime);\n runtime.beginRender();\n let committed = false;\n\n try {\n const scope = getHydrationScope(container, options.resumeId);\n const deferred = withDeferredDelegatedEventPromotions(() =>\n renderHydratingHostFiberRoot(\n fiberRoot,\n element,\n runtime,\n scope,\n options,\n )\n );\n const finishedWork = deferred.value;\n\n if (runtime.renderPhaseUpdate) {\n runtime.renderPhaseUpdate = false;\n continue;\n }\n\n if (!hasStableExternalStores(runtime)) {\n continue;\n }\n\n withBatchedDelegatedRootReleases(() =>\n commitHydratingHostFiberRoot(fiberRoot, finishedWork, scope, options)\n );\n fiberRoot.current = finishedWork;\n fiberRoot.current.stateNode = fiberRoot;\n fiberRoot.finishedWork = undefined;\n fiberRoot.workInProgress = undefined;\n fiberRoot.workInProgressRootRenderLanes = 0;\n collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);\n removeStalePortalNodes(portalSnapshot, runtime);\n deferred.promote?.();\n commitDevToolsRoot(container, fiberRoot);\n runtime.idMode = \"client\";\n committed = true;\n return finishedWork;\n } finally {\n if (!committed) {\n restorePortalRender(runtime, portalSnapshot);\n }\n runtime.endRender(committed);\n if (committed) {\n runtime.flushEffects();\n }\n }\n }\n\n throw new Error(\"Store unstable.\");\n}\n\n/** Renders a React-compatible node into a legacy root container. */\nexport function render(element: ReactCompatNode, container: Element): void {\n const root = legacyRoots.get(container) ?? createRoot(container);\n legacyRoots.set(container, root);\n root.render(element);\n}\n\n/** Runs updates synchronously and flushes pending reactive work before returning. */\nexport function flushSync<T>(callback: () => T): T {\n return flushSyncUpdates(callback);\n}\n\n/** Hydrates server-rendered markup with a React-compatible element tree. */\nexport function hydrateRoot(\n container: Element,\n element: ReactCompatNode,\n options: HydrateRootOptions = {},\n): Root {\n const fiberRoot = createContainerFiberRoot(container);\n const renderOptions: RenderOptions & {\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n } = {\n hydration:\n options.onRecoverableError === undefined\n ? {}\n : { onRecoverableError: options.onRecoverableError },\n ...(options.resumeId === undefined ? {} : { resumeId: options.resumeId }),\n ...(options.consumeResumeMarkers === undefined\n ? {}\n : { consumeResumeMarkers: options.consumeResumeMarkers }),\n };\n const runtime = createRootRuntime((priority = \"sync\") => {\n if (runtime.currentElement !== undefined) {\n enqueueRootRender(fiberRoot, runtime.currentElement, laneForRenderPriority(priority), () => {\n const useHydratingRerender =\n runtime.idMode === \"server\" ||\n renderOptions.resumeId !== undefined ||\n renderOptions.consumeResumeMarkers !== undefined;\n if (canRenderHostFiber(runtime.currentElement as ReactCompatNode)) {\n return useHydratingRerender\n ? renderHydratingHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n renderOptions,\n )\n : renderHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n );\n }\n\n throwUnsupportedRootNode();\n });\n }\n }, {\n ...(options.identifierPrefix === undefined\n ? {}\n : { identifierPrefix: options.identifierPrefix }),\n idMode: \"server\",\n });\n\n const root: Root = {\n render(nextElement) {\n runtime.currentElement = nextElement;\n enqueueRootRender(fiberRoot, nextElement, SyncLane, () => {\n if (canRenderHostFiber(nextElement)) {\n return renderHostFiberIntoContainer(container, fiberRoot, runtime, nextElement);\n }\n\n throwUnsupportedRootNode();\n });\n },\n unmount() {\n withBatchedDelegatedRootReleases(() => {\n runtime.currentElement = undefined;\n runtime.dispose();\n detachFiberRefs(fiberRoot.current);\n disposeHostFiberResources(fiberRoot.current);\n runtime.instances.clear();\n unmountDevToolsRoot(container);\n clearElementChildren(container);\n });\n },\n };\n\n runtime.currentElement = element;\n enqueueRootRender(fiberRoot, element, SyncLane, () => {\n if (canRenderHostFiber(element)) {\n return renderHydratingHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n element,\n renderOptions,\n );\n }\n\n throwUnsupportedRootNode();\n });\n replayQueuedHydrationEvents(container);\n return root;\n}\n\nfunction throwUnsupportedRootNode(): never {\n throw new Error(\"Unsupported react-compat root node. Pass a valid React-compatible element, portal, fragment, primitive, array, or nullish value.\");\n}\n\nfunction laneForRenderPriority(priority: RenderPriority): Lane {\n if (priority === \"transition\") {\n return TransitionLane;\n }\n\n if (priority === \"continuous\") {\n return ContinuousEventLane;\n }\n\n return SyncLane;\n}\n\n/** Creates a root that can hydrate streamed or selectively revealed markup. */\nexport function createStreamingHydrationRoot(\n container: Element,\n options: StreamingHydrationRootOptions = {},\n): StreamingHydrationRoot {\n const fragmentRoot = options.fragmentRoot ?? container.ownerDocument;\n const manifestRoot = options.manifestRoot ?? container;\n const manifest = options.manifest ?? readEventHydrationManifest(manifestRoot);\n\n if (options.applyOutOfOrderFragments !== false) {\n applyStreamingHydrationFragments(fragmentRoot);\n }\n\n let hydratedRoot: Root | undefined;\n const hydrate = (\n element: ReactCompatNode,\n hydrateOptions: HydrateRootOptions = {},\n ): Root => {\n if (options.applyOutOfOrderFragments !== false) {\n applyStreamingHydrationFragments(fragmentRoot);\n }\n\n const root = hydrateRoot(container, element, hydrateOptions);\n hydratedRoot = root;\n disposeReplayCaptureOnce();\n return root;\n };\n const disposeReplayCapture = enableEventHydrationManifestReplay(\n container,\n manifest,\n {\n onCapturedEvent(event, target) {\n const selectiveHydration = options.selectiveHydration;\n const selectiveBoundary = resolveSelectiveHydrationBoundary(\n container,\n event,\n target,\n manifest,\n selectiveHydration,\n );\n\n if (selectiveBoundary === undefined || hydratedRoot !== undefined) {\n return;\n }\n\n hydrate(\n selectiveBoundary.element,\n resolveSelectiveHydrationOptions(event, selectiveBoundary),\n );\n },\n },\n );\n const observer =\n options.observeOutOfOrderFragments === true &&\n typeof MutationObserver !== \"undefined\" &&\n fragmentRoot instanceof Node\n ? new MutationObserver(() => {\n applyStreamingHydrationFragments(fragmentRoot);\n })\n : undefined;\n let replayDisposed = false;\n\n observer?.observe(fragmentRoot as Node, { childList: true, subtree: true });\n\n const disposeReplayCaptureOnce = (): void => {\n if (!replayDisposed) {\n disposeReplayCapture();\n replayDisposed = true;\n }\n };\n\n return {\n hydrate,\n dispose() {\n disposeReplayCaptureOnce();\n observer?.disconnect();\n },\n };\n}\n\n/** Unmounts a legacy root from a container and reports whether anything was removed. */\nexport function unmountComponentAtNode(container: Element): boolean {\n const root = legacyRoots.get(container);\n\n if (root !== undefined) {\n root.unmount();\n legacyRoots.delete(container);\n return true;\n }\n\n const hadChildren = container.childNodes.length > 0;\n clearElementChildren(container);\n return hadChildren;\n}\n\nfunction clearElementChildren(element: Element): void {\n if (typeof element.replaceChildren === \"function\") {\n element.replaceChildren();\n return;\n }\n\n while (element.firstChild !== null) {\n element.removeChild(element.firstChild);\n }\n}\n\nfunction collectPortalNodes(\n fiber: Fiber | undefined,\n runtime: RootRuntime,\n snapshot: PortalRenderSnapshot,\n): void {\n if (\n fiber === undefined ||\n (runtime.portalContainers.size === 0 && snapshot.containers.size === 0)\n ) {\n return;\n }\n\n const deferredSiblings: Fiber[] = [];\n let cursor: Fiber | undefined = fiber;\n\n while (cursor !== undefined) {\n if (cursor.tag === \"portal\" && cursor.stateNode instanceof Element) {\n const nodes = Array.isArray(cursor.memoizedState)\n ? cursor.memoizedState.filter((node): node is Node => node instanceof Node)\n : [];\n runtime.portalContainers.add(cursor.stateNode);\n const ownedNodes = runtime.portalNodes.get(cursor.stateNode) ?? new Set<Node>();\n for (const node of nodes) {\n ownedNodes.add(node);\n }\n runtime.portalNodes.set(cursor.stateNode, ownedNodes);\n }\n\n if (cursor.child !== undefined) {\n if (cursor.sibling !== undefined) {\n deferredSiblings.push(cursor.sibling);\n }\n cursor = cursor.child;\n continue;\n }\n\n cursor = cursor.sibling ?? deferredSiblings.pop();\n }\n}\n\ninterface PortalRenderSnapshot {\n containers: Set<Element>;\n nodes: Map<Element, Set<Node>>;\n}\n\nfunction beginPortalRender(runtime: RootRuntime): PortalRenderSnapshot {\n const snapshot = {\n containers: new Set(runtime.portalContainers),\n nodes: clonePortalNodes(runtime.portalNodes),\n };\n runtime.portalContainers.clear();\n runtime.portalNodes.clear();\n return snapshot;\n}\n\nfunction restorePortalRender(\n runtime: RootRuntime,\n snapshot: PortalRenderSnapshot,\n): void {\n runtime.portalContainers = snapshot.containers;\n runtime.portalNodes = snapshot.nodes;\n}\n\nfunction removeStalePortalNodes(\n snapshot: PortalRenderSnapshot,\n runtime: RootRuntime,\n): void {\n for (const container of snapshot.containers) {\n const nodes = snapshot.nodes.get(container) ?? new Set(collectOwnedChildNodes(container));\n const currentNodes = runtime.portalNodes.get(container);\n\n for (const node of nodes) {\n if (currentNodes?.has(node) !== true) {\n removeChildIfPresent(container, node);\n }\n }\n }\n}\n\nfunction clonePortalNodes(source: Map<Element, Set<Node>>): Map<Element, Set<Node>> {\n const clone = new Map<Element, Set<Node>>();\n\n for (const [container, nodes] of source) {\n clone.set(container, new Set(nodes));\n }\n\n return clone;\n}\n\nfunction resolveSelectiveHydrationBoundary(\n container: Element,\n event: Event,\n target: EventTarget,\n manifest: EventHydrationManifest | undefined,\n selectiveHydration: SelectiveHydrationOptions | undefined,\n): SelectiveHydrationBoundary | undefined {\n if (selectiveHydration === undefined) {\n return undefined;\n }\n\n const resumeId = resolveSelectiveHydrationResumeId(\n container,\n event,\n target,\n manifest,\n );\n const boundary =\n resumeId === undefined ? undefined : selectiveHydration.boundaries?.[resumeId];\n\n if (boundary !== undefined && resumeId !== undefined) {\n return {\n element: boundary.element,\n options: boundary.options ?? { resumeId, consumeResumeMarkers: true },\n };\n }\n\n if (selectiveHydration.element === undefined) {\n return undefined;\n }\n\n return {\n element: selectiveHydration.element,\n ...(selectiveHydration.options === undefined\n ? {}\n : { options: selectiveHydration.options }),\n };\n}\n\nfunction resolveSelectiveHydrationOptions(\n event: Event,\n boundary: SelectiveHydrationBoundary,\n): HydrateRootOptions {\n return typeof boundary.options === \"function\"\n ? boundary.options(event)\n : boundary.options ?? {};\n}\n\nfunction resolveSelectiveHydrationResumeId(\n container: Element,\n event: Event,\n target: EventTarget,\n manifest: EventHydrationManifest | undefined,\n): string | undefined {\n if (!(target instanceof Node) || manifest === undefined) {\n return undefined;\n }\n\n const containingResumeId = findContainingResumeBoundaryId(container, target);\n\n if (containingResumeId === undefined) {\n return undefined;\n }\n\n return manifest.events.some(\n (entry) =>\n entry.event === event.type &&\n getManifestResumeId(entry.id) === containingResumeId,\n )\n ? containingResumeId\n : undefined;\n}\n\nfunction getManifestResumeId(id: string): string {\n return id.split(\":\")[0] ?? id;\n}\n"]}
@@ -5,4 +5,9 @@ export declare function renderToString<TProps>(component: ((props: TProps) => Re
5
5
  render(): ReactCompatNode;
6
6
  }), props?: TProps, options?: RootRuntimeOptions): string;
7
7
  export declare function renderChildToString(value: unknown): string;
8
+ export declare const __serverRenderAttributeCacheForTesting: {
9
+ clear(): void;
10
+ missCount(): number;
11
+ size(): number;
12
+ };
8
13
  //# sourceMappingURL=server-render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-render.d.ts","sourceRoot":"","sources":["../src/server-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAQtB,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AAUpB,8DAA8D;AAC9D,wBAAgB,cAAc,CAAC,MAAM,EACnC,SAAS,EACL,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,eAAe,CAAC,GACpC,CAAC,KAAK,KAAK,EAAE,MAAM,KAAK;IAAE,MAAM,IAAI,eAAe,CAAA;CAAE,CAAC,EAC1D,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CA+BR;AAMD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAkB1D"}
1
+ {"version":3,"file":"server-render.d.ts","sourceRoot":"","sources":["../src/server-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAQtB,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AAUpB,8DAA8D;AAC9D,wBAAgB,cAAc,CAAC,MAAM,EACnC,SAAS,EACL,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,eAAe,CAAC,GACpC,CAAC,KAAK,KAAK,EAAE,MAAM,KAAK;IAAE,MAAM,IAAI,eAAe,CAAA;CAAE,CAAC,EAC1D,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CA+BR;AAMD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAkB1D;AAgSD,eAAO,MAAM,sCAAsC;;;;CAWlD,CAAC"}
@@ -217,37 +217,46 @@ function isEventHandlerName(name) {
217
217
  (name.charCodeAt(0) | 32) === 111 &&
218
218
  (name.charCodeAt(1) | 32) === 110);
219
219
  }
220
+ const ATTRIBUTE_CLASSIFICATION_CACHE = new Map();
221
+ const ATTRIBUTE_CLASSIFICATION_CACHE_LIMIT = 1024;
222
+ let attributeClassificationCacheMissCount = 0;
223
+ export const __serverRenderAttributeCacheForTesting = {
224
+ clear() {
225
+ ATTRIBUTE_CLASSIFICATION_CACHE.clear();
226
+ attributeClassificationCacheMissCount = 0;
227
+ },
228
+ missCount() {
229
+ return attributeClassificationCacheMissCount;
230
+ },
231
+ size() {
232
+ return ATTRIBUTE_CLASSIFICATION_CACHE.size;
233
+ },
234
+ };
220
235
  function renderHtmlAttribute(name, value) {
221
236
  if (value === null ||
222
237
  value === undefined ||
223
- typeof value === "function" ||
224
- name === "children" ||
225
- name === "key" ||
226
- name === "ref" ||
227
- isEventHandlerName(name)) {
238
+ typeof value === "function") {
228
239
  return "";
229
240
  }
230
- if (name === "style") {
231
- const style = renderStyleAttribute(value);
232
- return style === "" ? "" : ` style="${escapeHtml(style)}"`;
233
- }
234
- const attributeName = toHtmlAttributeName(name);
235
- if (!VALID_ATTRIBUTE_NAME.test(attributeName)) {
241
+ const classification = classifyAttributeName(name);
242
+ if (classification.kind === "skip") {
236
243
  return "";
237
244
  }
238
- if (isEventHandlerName(attributeName)) {
239
- return "";
245
+ if (classification.kind === "style") {
246
+ const style = renderStyleAttribute(value);
247
+ return style === "" ? "" : ` style="${escapeHtml(style)}"`;
240
248
  }
241
- if (typeof value === "boolean" && isBooleanishStringAttribute(attributeName)) {
249
+ const { attributeName } = classification;
250
+ if (typeof value === "boolean" && classification.booleanishString) {
242
251
  return ` ${attributeName}="${value ? "true" : "false"}"`;
243
252
  }
244
- if (typeof value === "boolean" && isDataAttribute(attributeName)) {
253
+ if (typeof value === "boolean" && classification.dataAttribute) {
245
254
  return ` ${attributeName}="${value ? "true" : "false"}"`;
246
255
  }
247
256
  if (value === false) {
248
257
  return "";
249
258
  }
250
- if (isDangerousHtmlAttribute(attributeName)) {
259
+ if (classification.dangerousHtml) {
251
260
  return isDangerousHtmlOptIn(value)
252
261
  ? ` ${attributeName}="${escapeHtml(value.__html)}"`
253
262
  : "";
@@ -265,6 +274,40 @@ function renderHtmlAttribute(name, value) {
265
274
  return ` ${attributeName}="${escapeHtml(stringValue)}"`;
266
275
  }
267
276
  const VALID_ATTRIBUTE_NAME = /^[A-Za-z_][\w.\-:]*$/;
277
+ function classifyAttributeName(name) {
278
+ const cached = ATTRIBUTE_CLASSIFICATION_CACHE.get(name);
279
+ if (cached !== undefined) {
280
+ return cached;
281
+ }
282
+ attributeClassificationCacheMissCount += 1;
283
+ const classification = createAttributeNameClassification(name);
284
+ if (ATTRIBUTE_CLASSIFICATION_CACHE.size < ATTRIBUTE_CLASSIFICATION_CACHE_LIMIT) {
285
+ ATTRIBUTE_CLASSIFICATION_CACHE.set(name, classification);
286
+ }
287
+ return classification;
288
+ }
289
+ function createAttributeNameClassification(name) {
290
+ if (name === "children" ||
291
+ name === "key" ||
292
+ name === "ref" ||
293
+ isEventHandlerName(name)) {
294
+ return { kind: "skip" };
295
+ }
296
+ if (name === "style") {
297
+ return { kind: "style" };
298
+ }
299
+ const attributeName = toHtmlAttributeName(name);
300
+ if (!VALID_ATTRIBUTE_NAME.test(attributeName) || isEventHandlerName(attributeName)) {
301
+ return { kind: "skip" };
302
+ }
303
+ return {
304
+ kind: "attribute",
305
+ attributeName,
306
+ booleanishString: isBooleanishStringAttribute(attributeName),
307
+ dataAttribute: isDataAttribute(attributeName),
308
+ dangerousHtml: isDangerousHtmlAttribute(attributeName),
309
+ };
310
+ }
268
311
  function isBooleanishStringAttribute(attributeName) {
269
312
  // Callers pass the already-mapped HTML attribute name.
270
313
  const lowerCased = attributeName.toLowerCase();