@reckona/mreact-compat 0.0.91 → 0.0.93

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 (104) hide show
  1. package/README.md +1 -0
  2. package/dist/class-component.d.ts +22 -6
  3. package/dist/class-component.d.ts.map +1 -1
  4. package/dist/class-component.js +157 -51
  5. package/dist/class-component.js.map +1 -1
  6. package/dist/context.d.ts +19 -3
  7. package/dist/context.d.ts.map +1 -1
  8. package/dist/context.js +55 -6
  9. package/dist/context.js.map +1 -1
  10. package/dist/dom-children.d.ts +2 -0
  11. package/dist/dom-children.d.ts.map +1 -1
  12. package/dist/dom-children.js +103 -1
  13. package/dist/dom-children.js.map +1 -1
  14. package/dist/dom-host-rules.d.ts +10 -0
  15. package/dist/dom-host-rules.d.ts.map +1 -0
  16. package/dist/dom-host-rules.js +86 -0
  17. package/dist/dom-host-rules.js.map +1 -0
  18. package/dist/dom-props.d.ts +3 -2
  19. package/dist/dom-props.d.ts.map +1 -1
  20. package/dist/dom-props.js +229 -33
  21. package/dist/dom-props.js.map +1 -1
  22. package/dist/element.d.ts +9 -4
  23. package/dist/element.d.ts.map +1 -1
  24. package/dist/element.js +101 -26
  25. package/dist/element.js.map +1 -1
  26. package/dist/event-listeners.d.ts +4 -4
  27. package/dist/event-listeners.d.ts.map +1 -1
  28. package/dist/event-listeners.js +1 -1
  29. package/dist/event-listeners.js.map +1 -1
  30. package/dist/event-types.d.ts +10 -0
  31. package/dist/event-types.d.ts.map +1 -1
  32. package/dist/event-types.js.map +1 -1
  33. package/dist/events.js +22 -1
  34. package/dist/events.js.map +1 -1
  35. package/dist/fiber-commit.d.ts +2 -1
  36. package/dist/fiber-commit.d.ts.map +1 -1
  37. package/dist/fiber-commit.js +13 -1
  38. package/dist/fiber-commit.js.map +1 -1
  39. package/dist/fiber-reconciler.d.ts.map +1 -1
  40. package/dist/fiber-reconciler.js +28 -7
  41. package/dist/fiber-reconciler.js.map +1 -1
  42. package/dist/fiber-work-loop.d.ts.map +1 -1
  43. package/dist/fiber-work-loop.js +4 -3
  44. package/dist/fiber-work-loop.js.map +1 -1
  45. package/dist/fiber.d.ts +5 -0
  46. package/dist/fiber.d.ts.map +1 -1
  47. package/dist/fiber.js +9 -0
  48. package/dist/fiber.js.map +1 -1
  49. package/dist/hooks-entry.d.ts +3 -0
  50. package/dist/hooks-entry.d.ts.map +1 -0
  51. package/dist/hooks-entry.js +2 -0
  52. package/dist/hooks-entry.js.map +1 -0
  53. package/dist/hooks.d.ts +39 -5
  54. package/dist/hooks.d.ts.map +1 -1
  55. package/dist/hooks.js +373 -326
  56. package/dist/hooks.js.map +1 -1
  57. package/dist/host-reconciler.d.ts +3 -0
  58. package/dist/host-reconciler.d.ts.map +1 -1
  59. package/dist/host-reconciler.js +1183 -68
  60. package/dist/host-reconciler.js.map +1 -1
  61. package/dist/hydration.d.ts +1 -1
  62. package/dist/hydration.d.ts.map +1 -1
  63. package/dist/hydration.js.map +1 -1
  64. package/dist/index.d.ts +2 -1
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +2 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/react-default.d.ts +4 -4
  69. package/dist/react-default.d.ts.map +1 -1
  70. package/dist/react-default.js +2 -1
  71. package/dist/react-default.js.map +1 -1
  72. package/dist/reconciler.d.ts.map +1 -1
  73. package/dist/reconciler.js +38 -22
  74. package/dist/reconciler.js.map +1 -1
  75. package/dist/root.d.ts.map +1 -1
  76. package/dist/root.js +48 -13
  77. package/dist/root.js.map +1 -1
  78. package/dist/server-render.d.ts +6 -0
  79. package/dist/server-render.d.ts.map +1 -0
  80. package/dist/server-render.js +307 -0
  81. package/dist/server-render.js.map +1 -0
  82. package/package.json +6 -2
  83. package/src/class-component.ts +313 -51
  84. package/src/context.ts +108 -9
  85. package/src/dom-children.ts +155 -1
  86. package/src/dom-host-rules.ts +115 -0
  87. package/src/dom-props.ts +297 -46
  88. package/src/element.ts +141 -31
  89. package/src/event-listeners.ts +6 -6
  90. package/src/event-types.ts +10 -0
  91. package/src/events.ts +32 -10
  92. package/src/fiber-commit.ts +16 -1
  93. package/src/fiber-reconciler.ts +39 -6
  94. package/src/fiber-work-loop.ts +4 -3
  95. package/src/fiber.ts +14 -0
  96. package/src/hooks-entry.ts +24 -0
  97. package/src/hooks.ts +482 -479
  98. package/src/host-reconciler.ts +1662 -83
  99. package/src/hydration.ts +1 -1
  100. package/src/index.ts +1 -1
  101. package/src/react-default.ts +1 -1
  102. package/src/reconciler.ts +61 -22
  103. package/src/root.ts +55 -12
  104. package/src/server-render.ts +478 -0
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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","sourcesContent":["const REACT_COMPAT_PROVIDER_TYPE = Symbol.for(\"modular.react.provider\");\nconst REACT_COMPAT_CONSUMER_TYPE = Symbol.for(\"modular.react.consumer\");\n\nexport interface ReactCompatContext<T> {\n defaultValue: T;\n values: T[];\n Provider: ReactCompatProvider<T>;\n Consumer: ReactCompatConsumer<T>;\n displayName: string | undefined;\n}\n\nexport interface ReactCompatProvider<T> {\n $$typeof: typeof REACT_COMPAT_PROVIDER_TYPE;\n context: ReactCompatContext<T>;\n displayName: string | undefined;\n}\n\nexport interface ReactCompatConsumer<T> {\n $$typeof: typeof REACT_COMPAT_CONSUMER_TYPE;\n context: ReactCompatContext<T>;\n displayName: string | undefined;\n}\n\nexport function createContext<T>(defaultValue: T): ReactCompatContext<T> {\n const context: ReactCompatContext<T> = {\n defaultValue,\n values: [],\n Provider: undefined as unknown as ReactCompatProvider<T>,\n Consumer: undefined as unknown as ReactCompatConsumer<T>,\n displayName: undefined,\n };\n context.Provider = {\n $$typeof: REACT_COMPAT_PROVIDER_TYPE,\n context,\n displayName: undefined,\n };\n context.Consumer = {\n $$typeof: REACT_COMPAT_CONSUMER_TYPE,\n context,\n displayName: undefined,\n };\n installContextDisplayName(context);\n return context;\n}\n\nfunction installContextDisplayName<T>(context: ReactCompatContext<T>): void {\n let displayName: string | undefined;\n\n Object.defineProperty(context, \"displayName\", {\n configurable: true,\n enumerable: true,\n get() {\n return displayName;\n },\n set(value: string | undefined) {\n displayName = value;\n context.Provider.displayName =\n value === undefined ? undefined : `${value}.Provider`;\n context.Consumer.displayName =\n value === undefined ? undefined : `${value}.Consumer`;\n },\n });\n}\n\nexport function useContext<T>(context: ReactCompatContext<T>): T {\n return context.values.at(-1) ?? context.defaultValue;\n}\n\nexport function isReactCompatProvider(\n value: unknown,\n): value is ReactCompatProvider<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === REACT_COMPAT_PROVIDER_TYPE\n );\n}\n\nexport function isReactCompatContext(\n value: unknown,\n): value is ReactCompatContext<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"Provider\" in value &&\n \"Consumer\" in value &&\n isReactCompatProvider((value as { Provider?: unknown }).Provider) &&\n isReactCompatConsumer((value as { Consumer?: unknown }).Consumer)\n );\n}\n\nexport function isReactCompatConsumer(\n value: unknown,\n): value is ReactCompatConsumer<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === REACT_COMPAT_CONSUMER_TYPE\n );\n}\n\nexport function renderWithContextProvider<T, R>(\n provider: ReactCompatProvider<T>,\n value: T,\n render: () => R,\n): R {\n pushContextProvider(provider, value);\n\n try {\n return render();\n } finally {\n popContextProvider(provider);\n }\n}\n\nexport function pushContextProvider<T>(\n provider: ReactCompatProvider<T>,\n value: T,\n): void {\n provider.context.values.push(value);\n}\n\nexport function popContextProvider<T>(provider: ReactCompatProvider<T>): void {\n provider.context.values.pop();\n}\n\nexport function renderContextProviderToString<T>(\n provider: ReactCompatProvider<T>,\n value: T,\n render: () => string,\n): string {\n return renderWithContextProvider(provider, value, render);\n}\n\nexport function renderContextConsumerToString<T>(\n consumer: ReactCompatConsumer<T>,\n render: (value: T) => string,\n): string {\n return render(useContext(consumer.context));\n}\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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","sourcesContent":["const REACT_COMPAT_PROVIDER_TYPE = Symbol.for(\"react.context\");\nconst REACT_COMPAT_CONSUMER_TYPE = Symbol.for(\"react.consumer\");\n\nexport interface ReactCompatContext<T> {\n defaultValue: T;\n values: T[];\n Provider: ReactCompatProvider<T>;\n Consumer: ReactCompatConsumer<T>;\n displayName: string | undefined;\n}\n\nexport interface ReactCompatExternalContext<T> {\n $$typeof: typeof REACT_COMPAT_PROVIDER_TYPE;\n _currentValue?: T;\n _currentValue2?: T;\n _defaultValue?: T;\n Provider?: unknown;\n Consumer?: unknown;\n displayName?: string | undefined;\n}\n\nexport type ReactCompatContextLike<T> =\n | ReactCompatContext<T>\n | ReactCompatExternalContext<T>;\n\nexport interface ReactCompatProvider<T> {\n $$typeof: typeof REACT_COMPAT_PROVIDER_TYPE;\n context?: ReactCompatContextLike<T>;\n displayName: string | undefined;\n}\n\nexport interface ReactCompatConsumer<T> {\n $$typeof: typeof REACT_COMPAT_CONSUMER_TYPE;\n context?: ReactCompatContextLike<T>;\n _context?: ReactCompatContextLike<T>;\n displayName: string | undefined;\n}\n\ntype ContextReadObserver = (context: ReactCompatContextLike<unknown>, value: unknown) => void;\ninterface ContextReadObserverState {\n current: ContextReadObserver | undefined;\n}\n\nconst externalContextValues = new WeakMap<object, unknown[]>();\n\nconst CONTEXT_READ_OBSERVER_STATE_KEY = Symbol.for(\n \"modular.react.context_read_observer_state\",\n);\nconst contextReadObserverState =\n ((globalThis as typeof globalThis & Record<symbol, ContextReadObserverState | undefined>)[\n CONTEXT_READ_OBSERVER_STATE_KEY\n ] ??= {\n current: undefined,\n });\n\nexport function createContext<T>(defaultValue: T): ReactCompatContext<T> {\n const context: ReactCompatContext<T> = {\n defaultValue,\n values: [],\n Provider: undefined as unknown as ReactCompatProvider<T>,\n Consumer: undefined as unknown as ReactCompatConsumer<T>,\n displayName: undefined,\n };\n context.Provider = {\n $$typeof: REACT_COMPAT_PROVIDER_TYPE,\n context,\n displayName: undefined,\n };\n context.Consumer = {\n $$typeof: REACT_COMPAT_CONSUMER_TYPE,\n context,\n displayName: undefined,\n };\n installContextDisplayName(context);\n return context;\n}\n\nfunction installContextDisplayName<T>(context: ReactCompatContext<T>): void {\n let displayName: string | undefined;\n\n Object.defineProperty(context, \"displayName\", {\n configurable: true,\n enumerable: true,\n get() {\n return displayName;\n },\n set(value: string | undefined) {\n displayName = value;\n context.Provider.displayName =\n value === undefined ? undefined : `${value}.Provider`;\n context.Consumer.displayName =\n value === undefined ? undefined : `${value}.Consumer`;\n },\n });\n}\n\nexport function useContext<T>(context: ReactCompatContextLike<T>): T {\n const value = readContextValue(context);\n contextReadObserverState.current?.(context as ReactCompatContextLike<unknown>, value);\n return value;\n}\n\nexport function readContextValue<T>(context: ReactCompatContextLike<T>): T {\n if (isInternalContextRecord(context)) {\n return context.values.at(-1) ?? context.defaultValue;\n }\n\n return (\n (externalContextValues.get(context)?.at(-1) as T | undefined) ??\n context._currentValue ??\n context._currentValue2 ??\n (context._defaultValue as T)\n );\n}\n\nexport function withContextReadObserver<T>(\n observer: ContextReadObserver,\n render: () => T,\n): T {\n const previousObserver = contextReadObserverState.current;\n contextReadObserverState.current = observer;\n\n try {\n return render();\n } finally {\n contextReadObserverState.current = previousObserver;\n }\n}\n\nexport function isReactCompatProvider(\n value: unknown,\n): value is ReactCompatProvider<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === REACT_COMPAT_PROVIDER_TYPE\n );\n}\n\nexport function isReactCompatContext(\n value: unknown,\n): value is ReactCompatContext<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"Provider\" in value &&\n \"Consumer\" in value &&\n isReactCompatProvider((value as { Provider?: unknown }).Provider) &&\n isReactCompatConsumer((value as { Consumer?: unknown }).Consumer)\n );\n}\n\nexport function isReactCompatConsumer(\n value: unknown,\n): value is ReactCompatConsumer<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === REACT_COMPAT_CONSUMER_TYPE\n );\n}\n\nexport function renderWithContextProvider<T, R>(\n provider: ReactCompatProvider<T>,\n value: T,\n render: () => R,\n): R {\n pushContextProvider(provider, value);\n\n try {\n return render();\n } finally {\n popContextProvider(provider);\n }\n}\n\nexport function pushContextProvider<T>(\n provider: ReactCompatProvider<T>,\n value: T,\n): void {\n const context = providerContext(provider);\n\n if (isInternalContextRecord(context)) {\n context.values.push(value);\n return;\n }\n\n const values = externalContextValues.get(context) ?? [];\n values.push(value);\n externalContextValues.set(context, values);\n}\n\nexport function popContextProvider<T>(provider: ReactCompatProvider<T>): void {\n const context = providerContext(provider);\n\n if (isInternalContextRecord(context)) {\n context.values.pop();\n return;\n }\n\n externalContextValues.get(context)?.pop();\n}\n\nexport function renderContextProviderToString<T>(\n provider: ReactCompatProvider<T>,\n value: T,\n render: () => string,\n): string {\n return renderWithContextProvider(provider, value, render);\n}\n\nexport function renderContextConsumerToString<T>(\n consumer: ReactCompatConsumer<T>,\n render: (value: T) => string,\n): string {\n return render(useContext(consumerContext(consumer)));\n}\n\nexport function providerContext<T>(\n provider: ReactCompatProvider<T>,\n): ReactCompatContextLike<T> {\n return provider.context ?? (provider as unknown as ReactCompatExternalContext<T>);\n}\n\nexport function consumerContext<T>(\n consumer: ReactCompatConsumer<T>,\n): ReactCompatContextLike<T> {\n return (\n consumer.context ??\n consumer._context ??\n (consumer as unknown as ReactCompatExternalContext<T>)\n );\n}\n\nfunction isInternalContextRecord<T>(\n context: ReactCompatContextLike<T>,\n): context is ReactCompatContext<T> {\n return \"values\" in context && Array.isArray(context.values);\n}\n"]}
@@ -1,3 +1,5 @@
1
1
  export declare function syncChildNodes(parent: ParentNode, nextNodes: readonly Node[]): void;
2
+ export declare function syncOwnedChildNodes(parent: ParentNode, previousNodes: readonly Node[], nextNodes: readonly Node[]): void;
2
3
  export declare function syncScopedChildNodes(parent: ParentNode, before: ChildNode | null, after: ChildNode | null, nextNodes: readonly Node[]): void;
4
+ export declare function removeChildIfPresent(parent: ParentNode, child: Node): void;
3
5
  //# sourceMappingURL=dom-children.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom-children.d.ts","sourceRoot":"","sources":["../src/dom-children.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,CAEnF;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,SAAS,GAAG,IAAI,EACxB,KAAK,EAAE,SAAS,GAAG,IAAI,EACvB,SAAS,EAAE,SAAS,IAAI,EAAE,GACzB,IAAI,CAsBN"}
1
+ {"version":3,"file":"dom-children.d.ts","sourceRoot":"","sources":["../src/dom-children.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,CAEnF;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,SAAS,IAAI,EAAE,EAC9B,SAAS,EAAE,SAAS,IAAI,EAAE,GACzB,IAAI,CAcN;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,SAAS,GAAG,IAAI,EACxB,KAAK,EAAE,SAAS,GAAG,IAAI,EACvB,SAAS,EAAE,SAAS,IAAI,EAAE,GACzB,IAAI,CA6CN;AAwFD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,CAc1E"}
@@ -2,22 +2,124 @@ import { collectScopedNodes } from "./hydration.js";
2
2
  export function syncChildNodes(parent, nextNodes) {
3
3
  syncScopedChildNodes(parent, null, null, nextNodes);
4
4
  }
5
+ export function syncOwnedChildNodes(parent, previousNodes, nextNodes) {
6
+ const nextSet = new Set(nextNodes);
7
+ for (const node of nextNodes) {
8
+ if (node.parentNode !== parent || node.nextSibling !== null) {
9
+ parent.appendChild(node);
10
+ }
11
+ }
12
+ for (const child of previousNodes) {
13
+ if (!nextSet.has(child)) {
14
+ removeChildIfPresent(parent, child);
15
+ }
16
+ }
17
+ }
5
18
  export function syncScopedChildNodes(parent, before, after, nextNodes) {
19
+ if (replaceDisjointFullChildList(parent, before, after, nextNodes)) {
20
+ return;
21
+ }
22
+ if (nextNodes.length > 16 &&
23
+ hasSingleExtraScopedChild(parent, before, after, nextNodes.length) &&
24
+ removeSingleMissingChild(parent, before, after, nextNodes)) {
25
+ return;
26
+ }
6
27
  let cursor = parent.firstChild;
7
28
  if (before !== null) {
8
29
  cursor = before.nextSibling;
9
30
  }
31
+ let changed = false;
10
32
  for (const node of nextNodes) {
11
33
  if (node !== cursor) {
12
34
  parent.insertBefore(node, cursor === after ? after : cursor);
35
+ changed = true;
13
36
  }
14
37
  cursor = node.nextSibling;
15
38
  }
39
+ if (!changed && cursor === after) {
40
+ return;
41
+ }
42
+ if (!changed && after === null && cursor === null) {
43
+ return;
44
+ }
16
45
  const nextSet = new Set(nextNodes);
17
46
  for (const child of collectScopedNodes(parent, before, after)) {
18
47
  if (!nextSet.has(child)) {
19
- parent.removeChild(child);
48
+ removeChildIfPresent(parent, child);
20
49
  }
21
50
  }
22
51
  }
52
+ function replaceDisjointFullChildList(parent, before, after, nextNodes) {
53
+ if (before !== null || after !== null || nextNodes.length <= 16) {
54
+ return false;
55
+ }
56
+ const currentNodes = parent.childNodes;
57
+ if (currentNodes.length <= 16 || currentNodes.length !== nextNodes.length) {
58
+ return false;
59
+ }
60
+ const nextSet = new Set(nextNodes);
61
+ for (let index = 0; index < currentNodes.length; index += 1) {
62
+ if (nextSet.has(currentNodes[index])) {
63
+ return false;
64
+ }
65
+ }
66
+ parent.replaceChildren(...nextNodes);
67
+ return true;
68
+ }
69
+ function hasSingleExtraScopedChild(parent, before, after, nextCount) {
70
+ if (before === null && after === null) {
71
+ return parent.childNodes.length === nextCount + 1;
72
+ }
73
+ let cursor = before === null ? parent.firstChild : before.nextSibling;
74
+ let currentCount = 0;
75
+ while (cursor !== null && cursor !== after && currentCount <= nextCount + 1) {
76
+ currentCount += 1;
77
+ cursor = cursor.nextSibling;
78
+ }
79
+ return currentCount === nextCount + 1 && (cursor === null || cursor === after);
80
+ }
81
+ function removeSingleMissingChild(parent, before, after, nextNodes) {
82
+ let cursor = before === null ? parent.firstChild : before.nextSibling;
83
+ let removed = false;
84
+ for (const nextNode of nextNodes) {
85
+ if (cursor === nextNode) {
86
+ cursor = cursor.nextSibling;
87
+ continue;
88
+ }
89
+ if (removed || cursor === null || cursor === after || cursor.nextSibling !== nextNode) {
90
+ return false;
91
+ }
92
+ const missing = cursor;
93
+ cursor = nextNode.nextSibling;
94
+ removeChildIfPresent(parent, missing);
95
+ removed = true;
96
+ }
97
+ if (cursor === after || cursor === null) {
98
+ return removed;
99
+ }
100
+ if (removed || cursor.nextSibling !== after) {
101
+ return false;
102
+ }
103
+ removeChildIfPresent(parent, cursor);
104
+ return true;
105
+ }
106
+ export function removeChildIfPresent(parent, child) {
107
+ if (child.parentNode !== parent) {
108
+ return;
109
+ }
110
+ try {
111
+ parent.removeChild(child);
112
+ }
113
+ catch (error) {
114
+ if (child.parentNode !== parent && isNotFoundError(error)) {
115
+ return;
116
+ }
117
+ throw error;
118
+ }
119
+ }
120
+ function isNotFoundError(error) {
121
+ const maybeError = error;
122
+ return (maybeError.name === "NotFoundError" ||
123
+ (typeof maybeError.message === "string" && maybeError.message.includes("not a child")));
124
+ }
23
125
  //# sourceMappingURL=dom-children.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom-children.js","sourceRoot":"","sources":["../src/dom-children.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,UAAU,cAAc,CAAC,MAAkB,EAAE,SAA0B;IAC3E,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAkB,EAClB,MAAwB,EACxB,KAAuB,EACvB,SAA0B;IAE1B,IAAI,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;IAE/B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;IAC9B,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { collectScopedNodes } from \"./hydration.js\";\n\nexport function syncChildNodes(parent: ParentNode, nextNodes: readonly Node[]): void {\n syncScopedChildNodes(parent, null, null, nextNodes);\n}\n\nexport function syncScopedChildNodes(\n parent: ParentNode,\n before: ChildNode | null,\n after: ChildNode | null,\n nextNodes: readonly Node[],\n): void {\n let cursor = parent.firstChild;\n\n if (before !== null) {\n cursor = before.nextSibling;\n }\n\n for (const node of nextNodes) {\n if (node !== cursor) {\n parent.insertBefore(node, cursor === after ? after : cursor);\n }\n\n cursor = node.nextSibling;\n }\n\n const nextSet = new Set(nextNodes);\n\n for (const child of collectScopedNodes(parent, before, after)) {\n if (!nextSet.has(child)) {\n parent.removeChild(child);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"dom-children.js","sourceRoot":"","sources":["../src/dom-children.ts"],"names":[],"mappings":"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","sourcesContent":["import { collectScopedNodes } from \"./hydration.js\";\n\nexport function syncChildNodes(parent: ParentNode, nextNodes: readonly Node[]): void {\n syncScopedChildNodes(parent, null, null, nextNodes);\n}\n\nexport function syncOwnedChildNodes(\n parent: ParentNode,\n previousNodes: readonly Node[],\n nextNodes: readonly Node[],\n): void {\n const nextSet = new Set(nextNodes);\n\n for (const node of nextNodes) {\n if (node.parentNode !== parent || node.nextSibling !== null) {\n parent.appendChild(node);\n }\n }\n\n for (const child of previousNodes) {\n if (!nextSet.has(child)) {\n removeChildIfPresent(parent, child);\n }\n }\n}\n\nexport function syncScopedChildNodes(\n parent: ParentNode,\n before: ChildNode | null,\n after: ChildNode | null,\n nextNodes: readonly Node[],\n): void {\n if (replaceDisjointFullChildList(parent, before, after, nextNodes)) {\n return;\n }\n\n if (\n nextNodes.length > 16 &&\n hasSingleExtraScopedChild(parent, before, after, nextNodes.length) &&\n removeSingleMissingChild(parent, before, after, nextNodes)\n ) {\n return;\n }\n\n let cursor = parent.firstChild;\n\n if (before !== null) {\n cursor = before.nextSibling;\n }\n\n let changed = false;\n\n for (const node of nextNodes) {\n if (node !== cursor) {\n parent.insertBefore(node, cursor === after ? after : cursor);\n changed = true;\n }\n\n cursor = node.nextSibling;\n }\n\n if (!changed && cursor === after) {\n return;\n }\n\n if (!changed && after === null && cursor === null) {\n return;\n }\n\n const nextSet = new Set(nextNodes);\n\n for (const child of collectScopedNodes(parent, before, after)) {\n if (!nextSet.has(child)) {\n removeChildIfPresent(parent, child);\n }\n }\n}\n\nfunction replaceDisjointFullChildList(\n parent: ParentNode,\n before: ChildNode | null,\n after: ChildNode | null,\n nextNodes: readonly Node[],\n): boolean {\n if (before !== null || after !== null || nextNodes.length <= 16) {\n return false;\n }\n\n const currentNodes = parent.childNodes;\n\n if (currentNodes.length <= 16 || currentNodes.length !== nextNodes.length) {\n return false;\n }\n\n const nextSet = new Set(nextNodes);\n\n for (let index = 0; index < currentNodes.length; index += 1) {\n if (nextSet.has(currentNodes[index]!)) {\n return false;\n }\n }\n\n parent.replaceChildren(...nextNodes);\n return true;\n}\n\nfunction hasSingleExtraScopedChild(\n parent: ParentNode,\n before: ChildNode | null,\n after: ChildNode | null,\n nextCount: number,\n): boolean {\n if (before === null && after === null) {\n return parent.childNodes.length === nextCount + 1;\n }\n\n let cursor = before === null ? parent.firstChild : before.nextSibling;\n let currentCount = 0;\n\n while (cursor !== null && cursor !== after && currentCount <= nextCount + 1) {\n currentCount += 1;\n cursor = cursor.nextSibling;\n }\n\n return currentCount === nextCount + 1 && (cursor === null || cursor === after);\n}\n\nfunction removeSingleMissingChild(\n parent: ParentNode,\n before: ChildNode | null,\n after: ChildNode | null,\n nextNodes: readonly Node[],\n): boolean {\n let cursor = before === null ? parent.firstChild : before.nextSibling;\n let removed = false;\n\n for (const nextNode of nextNodes) {\n if (cursor === nextNode) {\n cursor = cursor.nextSibling;\n continue;\n }\n\n if (removed || cursor === null || cursor === after || cursor.nextSibling !== nextNode) {\n return false;\n }\n\n const missing = cursor;\n cursor = nextNode.nextSibling;\n removeChildIfPresent(parent, missing);\n removed = true;\n }\n\n if (cursor === after || cursor === null) {\n return removed;\n }\n\n if (removed || cursor.nextSibling !== after) {\n return false;\n }\n\n removeChildIfPresent(parent, cursor);\n return true;\n}\n\nexport function removeChildIfPresent(parent: ParentNode, child: Node): void {\n if (child.parentNode !== parent) {\n return;\n }\n\n try {\n parent.removeChild(child);\n } catch (error) {\n if (child.parentNode !== parent && isNotFoundError(error)) {\n return;\n }\n\n throw error;\n }\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n const maybeError = error as { message?: unknown; name?: unknown };\n\n return (\n maybeError.name === \"NotFoundError\" ||\n (typeof maybeError.message === \"string\" && maybeError.message.includes(\"not a child\"))\n );\n}\n"]}
@@ -0,0 +1,10 @@
1
+ export type HostElement = HTMLElement | SVGElement;
2
+ export type HostNamespace = "html" | "svg";
3
+ export declare function createHostElement(documentRef: Document, tagName: string, namespace: HostNamespace): HostElement;
4
+ export declare function isHostElement(value: unknown): value is HostElement;
5
+ export declare function namespaceForHostElement(parentNamespace: HostNamespace, tagName: string): HostNamespace;
6
+ export declare function namespaceForHostChildren(elementNamespace: HostNamespace, tagName: string): HostNamespace;
7
+ export declare function hostElementMatches(element: HostElement, tagName: string, namespace: HostNamespace): boolean;
8
+ export declare function serializeClientStyleValue(name: string, value: unknown): string;
9
+ export declare function styleNameToCssName(name: string): string;
10
+ //# sourceMappingURL=dom-host-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-host-rules.d.ts","sourceRoot":"","sources":["../src/dom-host-rules.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;AACnD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,CAAC;AAoD3C,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,QAAQ,EACrB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,aAAa,GACvB,WAAW,CAMb;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,aAAa,EAC9B,OAAO,EAAE,MAAM,GACd,aAAa,CAMf;AAED,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,aAAa,EAC/B,OAAO,EAAE,MAAM,GACd,aAAa,CAEf;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,aAAa,GACvB,OAAO,CAET;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAM9E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOvD"}
@@ -0,0 +1,86 @@
1
+ const htmlNamespace = "http://www.w3.org/1999/xhtml";
2
+ const svgNamespace = "http://www.w3.org/2000/svg";
3
+ const isUnitlessNumberStyle = new Set([
4
+ "animationIterationCount",
5
+ "aspectRatio",
6
+ "borderImageOutset",
7
+ "borderImageSlice",
8
+ "borderImageWidth",
9
+ "boxFlex",
10
+ "boxFlexGroup",
11
+ "boxOrdinalGroup",
12
+ "columnCount",
13
+ "columns",
14
+ "flex",
15
+ "flexGrow",
16
+ "flexPositive",
17
+ "flexShrink",
18
+ "flexNegative",
19
+ "flexOrder",
20
+ "gridArea",
21
+ "gridRow",
22
+ "gridRowEnd",
23
+ "gridRowSpan",
24
+ "gridRowStart",
25
+ "gridColumn",
26
+ "gridColumnEnd",
27
+ "gridColumnSpan",
28
+ "gridColumnStart",
29
+ "fontWeight",
30
+ "lineClamp",
31
+ "lineHeight",
32
+ "opacity",
33
+ "order",
34
+ "orphans",
35
+ "scale",
36
+ "tabSize",
37
+ "widows",
38
+ "zIndex",
39
+ "zoom",
40
+ "fillOpacity",
41
+ "floodOpacity",
42
+ "stopOpacity",
43
+ "strokeDasharray",
44
+ "strokeDashoffset",
45
+ "strokeMiterlimit",
46
+ "strokeOpacity",
47
+ "strokeWidth",
48
+ ]);
49
+ export function createHostElement(documentRef, tagName, namespace) {
50
+ if (namespaceForHostElement(namespace, tagName) === "svg") {
51
+ return documentRef.createElementNS(svgNamespace, tagName);
52
+ }
53
+ return documentRef.createElement(tagName);
54
+ }
55
+ export function isHostElement(value) {
56
+ return value instanceof HTMLElement || value instanceof SVGElement;
57
+ }
58
+ export function namespaceForHostElement(parentNamespace, tagName) {
59
+ if (tagName === "svg") {
60
+ return "svg";
61
+ }
62
+ return parentNamespace;
63
+ }
64
+ export function namespaceForHostChildren(elementNamespace, tagName) {
65
+ return elementNamespace === "svg" && tagName === "foreignObject" ? "html" : elementNamespace;
66
+ }
67
+ export function hostElementMatches(element, tagName, namespace) {
68
+ return element.tagName.toLowerCase() === tagName && element.namespaceURI === namespaceUri(namespace);
69
+ }
70
+ export function serializeClientStyleValue(name, value) {
71
+ if (typeof value === "number" && value !== 0 && !name.startsWith("--") && !isUnitlessNumberStyle.has(name)) {
72
+ return `${value}px`;
73
+ }
74
+ return String(value);
75
+ }
76
+ export function styleNameToCssName(name) {
77
+ if (name.startsWith("--")) {
78
+ return name;
79
+ }
80
+ const cssName = name.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);
81
+ return cssName.startsWith("ms-") ? `-${cssName}` : cssName;
82
+ }
83
+ function namespaceUri(namespace) {
84
+ return namespace === "svg" ? svgNamespace : htmlNamespace;
85
+ }
86
+ //# sourceMappingURL=dom-host-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-host-rules.js","sourceRoot":"","sources":["../src/dom-host-rules.ts"],"names":[],"mappings":"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","sourcesContent":["export type HostElement = HTMLElement | SVGElement;\nexport type HostNamespace = \"html\" | \"svg\";\n\nconst htmlNamespace = \"http://www.w3.org/1999/xhtml\";\nconst svgNamespace = \"http://www.w3.org/2000/svg\";\n\nconst isUnitlessNumberStyle = new Set([\n \"animationIterationCount\",\n \"aspectRatio\",\n \"borderImageOutset\",\n \"borderImageSlice\",\n \"borderImageWidth\",\n \"boxFlex\",\n \"boxFlexGroup\",\n \"boxOrdinalGroup\",\n \"columnCount\",\n \"columns\",\n \"flex\",\n \"flexGrow\",\n \"flexPositive\",\n \"flexShrink\",\n \"flexNegative\",\n \"flexOrder\",\n \"gridArea\",\n \"gridRow\",\n \"gridRowEnd\",\n \"gridRowSpan\",\n \"gridRowStart\",\n \"gridColumn\",\n \"gridColumnEnd\",\n \"gridColumnSpan\",\n \"gridColumnStart\",\n \"fontWeight\",\n \"lineClamp\",\n \"lineHeight\",\n \"opacity\",\n \"order\",\n \"orphans\",\n \"scale\",\n \"tabSize\",\n \"widows\",\n \"zIndex\",\n \"zoom\",\n \"fillOpacity\",\n \"floodOpacity\",\n \"stopOpacity\",\n \"strokeDasharray\",\n \"strokeDashoffset\",\n \"strokeMiterlimit\",\n \"strokeOpacity\",\n \"strokeWidth\",\n]);\n\nexport function createHostElement(\n documentRef: Document,\n tagName: string,\n namespace: HostNamespace,\n): HostElement {\n if (namespaceForHostElement(namespace, tagName) === \"svg\") {\n return documentRef.createElementNS(svgNamespace, tagName);\n }\n\n return documentRef.createElement(tagName);\n}\n\nexport function isHostElement(value: unknown): value is HostElement {\n return value instanceof HTMLElement || value instanceof SVGElement;\n}\n\nexport function namespaceForHostElement(\n parentNamespace: HostNamespace,\n tagName: string,\n): HostNamespace {\n if (tagName === \"svg\") {\n return \"svg\";\n }\n\n return parentNamespace;\n}\n\nexport function namespaceForHostChildren(\n elementNamespace: HostNamespace,\n tagName: string,\n): HostNamespace {\n return elementNamespace === \"svg\" && tagName === \"foreignObject\" ? \"html\" : elementNamespace;\n}\n\nexport function hostElementMatches(\n element: HostElement,\n tagName: string,\n namespace: HostNamespace,\n): boolean {\n return element.tagName.toLowerCase() === tagName && element.namespaceURI === namespaceUri(namespace);\n}\n\nexport function serializeClientStyleValue(name: string, value: unknown): string {\n if (typeof value === \"number\" && value !== 0 && !name.startsWith(\"--\") && !isUnitlessNumberStyle.has(name)) {\n return `${value}px`;\n }\n\n return String(value);\n}\n\nexport function styleNameToCssName(name: string): string {\n if (name.startsWith(\"--\")) {\n return name;\n }\n\n const cssName = name.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);\n return cssName.startsWith(\"ms-\") ? `-${cssName}` : cssName;\n}\n\nfunction namespaceUri(namespace: HostNamespace): string {\n return namespace === \"svg\" ? svgNamespace : htmlNamespace;\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { type RenderOptions } from "./hydration.js";
2
- export declare function applyProps(element: HTMLElement, props: Record<string, unknown>, path: string, options: RenderOptions): void;
3
- export declare function applyPostChildFormProps(element: HTMLElement, props: Record<string, unknown>): void;
2
+ import { type HostElement } from "./dom-host-rules.js";
3
+ export declare function applyProps(element: HostElement, props: Record<string, unknown>, path: string, options: RenderOptions): void;
4
+ export declare function applyPostChildFormProps(element: Element, props: Record<string, unknown>): void;
4
5
  //# sourceMappingURL=dom-props.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom-props.d.ts","sourceRoot":"","sources":["../src/dom-props.ts"],"names":[],"mappings":"AAQA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AASvE,wBAAgB,UAAU,CACxB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GACrB,IAAI,CAkGN;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAyBN"}
1
+ {"version":3,"file":"dom-props.d.ts","sourceRoot":"","sources":["../src/dom-props.ts"],"names":[],"mappings":"AASA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAQvE,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAE7B,wBAAgB,UAAU,CACxB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GACrB,IAAI,CAuIN;AA6GD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAyBN"}