@tanstack/react-start-rsc 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/esm/ClientSlot.js +19 -0
  2. package/dist/esm/ClientSlot.js.map +1 -0
  3. package/dist/esm/CompositeComponent.js +93 -0
  4. package/dist/esm/CompositeComponent.js.map +1 -0
  5. package/dist/esm/ReplayableStream.js +147 -0
  6. package/dist/esm/ReplayableStream.js.map +1 -0
  7. package/dist/esm/RscNodeRenderer.js +46 -0
  8. package/dist/esm/RscNodeRenderer.js.map +1 -0
  9. package/dist/esm/ServerComponentTypes.js +22 -0
  10. package/dist/esm/ServerComponentTypes.js.map +1 -0
  11. package/dist/esm/SlotContext.js +30 -0
  12. package/dist/esm/SlotContext.js.map +1 -0
  13. package/dist/esm/awaitLazyElements.js +41 -0
  14. package/dist/esm/awaitLazyElements.js.map +1 -0
  15. package/dist/esm/createCompositeComponent.js +205 -0
  16. package/dist/esm/createCompositeComponent.js.map +1 -0
  17. package/dist/esm/createCompositeComponent.stub.js +15 -0
  18. package/dist/esm/createCompositeComponent.stub.js.map +1 -0
  19. package/dist/esm/createRscProxy.js +138 -0
  20. package/dist/esm/createRscProxy.js.map +1 -0
  21. package/dist/esm/createServerComponentFromStream.js +74 -0
  22. package/dist/esm/createServerComponentFromStream.js.map +1 -0
  23. package/dist/esm/entry/rsc.js +21 -0
  24. package/dist/esm/entry/rsc.js.map +1 -0
  25. package/dist/esm/flight.js +56 -0
  26. package/dist/esm/flight.js.map +1 -0
  27. package/dist/esm/flight.rsc.js +2 -0
  28. package/dist/esm/flight.stub.js +15 -0
  29. package/dist/esm/flight.stub.js.map +1 -0
  30. package/dist/esm/index.js +7 -0
  31. package/dist/esm/index.rsc.js +6 -0
  32. package/dist/esm/plugin/vite.js +172 -0
  33. package/dist/esm/plugin/vite.js.map +1 -0
  34. package/dist/esm/reactSymbols.js +8 -0
  35. package/dist/esm/reactSymbols.js.map +1 -0
  36. package/dist/esm/renderServerComponent.js +58 -0
  37. package/dist/esm/renderServerComponent.js.map +1 -0
  38. package/dist/esm/renderServerComponent.stub.js +16 -0
  39. package/dist/esm/renderServerComponent.stub.js.map +1 -0
  40. package/dist/esm/serialization.client.js +21 -0
  41. package/dist/esm/serialization.client.js.map +1 -0
  42. package/dist/esm/serialization.server.js +121 -0
  43. package/dist/esm/serialization.server.js.map +1 -0
  44. package/dist/esm/slotUsageSanitizer.js +33 -0
  45. package/dist/esm/slotUsageSanitizer.js.map +1 -0
  46. package/dist/esm/src/ClientSlot.d.ts +5 -0
  47. package/dist/esm/src/CompositeComponent.d.ts +28 -0
  48. package/dist/esm/src/ReplayableStream.d.ts +76 -0
  49. package/dist/esm/src/RscNodeRenderer.d.ts +7 -0
  50. package/dist/esm/src/ServerComponentTypes.d.ts +99 -0
  51. package/dist/esm/src/SlotContext.d.ts +21 -0
  52. package/dist/esm/src/awaitLazyElements.d.ts +17 -0
  53. package/dist/esm/src/createCompositeComponent.d.ts +32 -0
  54. package/dist/esm/src/createCompositeComponent.stub.d.ts +9 -0
  55. package/dist/esm/src/createRscProxy.d.ts +18 -0
  56. package/dist/esm/src/createServerComponentFromStream.d.ts +24 -0
  57. package/dist/esm/src/entry/rsc.d.ts +7 -0
  58. package/dist/esm/src/flight.d.ts +41 -0
  59. package/dist/esm/src/flight.rsc.d.ts +17 -0
  60. package/dist/esm/src/flight.stub.d.ts +8 -0
  61. package/dist/esm/src/index.d.ts +7 -0
  62. package/dist/esm/src/index.rsc.d.ts +6 -0
  63. package/dist/esm/src/plugin/vite.d.ts +9 -0
  64. package/dist/esm/src/reactSymbols.d.ts +3 -0
  65. package/dist/esm/src/renderServerComponent.d.ts +33 -0
  66. package/dist/esm/src/renderServerComponent.stub.d.ts +9 -0
  67. package/dist/esm/src/rscSsrHandler.d.ts +24 -0
  68. package/dist/esm/src/serialization.client.d.ts +11 -0
  69. package/dist/esm/src/serialization.server.d.ts +10 -0
  70. package/dist/esm/src/slotUsageSanitizer.d.ts +1 -0
  71. package/dist/esm/src/types.d.ts +13 -0
  72. package/dist/plugin/entry/rsc.tsx +23 -0
  73. package/package.json +108 -0
  74. package/src/ClientSlot.tsx +34 -0
  75. package/src/CompositeComponent.tsx +165 -0
  76. package/src/ReplayableStream.ts +249 -0
  77. package/src/RscNodeRenderer.tsx +76 -0
  78. package/src/ServerComponentTypes.ts +226 -0
  79. package/src/SlotContext.tsx +42 -0
  80. package/src/awaitLazyElements.ts +91 -0
  81. package/src/createCompositeComponent.stub.ts +20 -0
  82. package/src/createCompositeComponent.ts +338 -0
  83. package/src/createRscProxy.tsx +294 -0
  84. package/src/createServerComponentFromStream.ts +105 -0
  85. package/src/entry/rsc.tsx +23 -0
  86. package/src/entry/virtual-modules.d.ts +12 -0
  87. package/src/flight.rsc.ts +17 -0
  88. package/src/flight.stub.ts +15 -0
  89. package/src/flight.ts +68 -0
  90. package/src/global.d.ts +75 -0
  91. package/src/index.rsc.ts +25 -0
  92. package/src/index.ts +26 -0
  93. package/src/plugin/vite.ts +241 -0
  94. package/src/reactSymbols.ts +6 -0
  95. package/src/renderServerComponent.stub.ts +26 -0
  96. package/src/renderServerComponent.ts +110 -0
  97. package/src/rscSsrHandler.ts +39 -0
  98. package/src/serialization.client.ts +43 -0
  99. package/src/serialization.server.ts +193 -0
  100. package/src/slotUsageSanitizer.ts +62 -0
  101. package/src/types.ts +15 -0
@@ -0,0 +1,62 @@
1
+ import { isValidElement } from 'react'
2
+
3
+ const REACT_ELEMENT_TYPE = Symbol.for('react.element')
4
+ const REACT_TRANSITIONAL_ELEMENT_TYPE = Symbol.for('react.transitional.element')
5
+ const REACT_PORTAL_TYPE = Symbol.for('react.portal')
6
+
7
+ function isReactElementLike(value: unknown): boolean {
8
+ if (!value || (typeof value !== 'object' && typeof value !== 'function')) {
9
+ return false
10
+ }
11
+
12
+ // Prefer React's own check when available.
13
+ if (isValidElement(value)) return true
14
+
15
+ // Fallback: direct $$typeof detection (covers React 19 transitional elements).
16
+ const t = (value as any).$$typeof
17
+ return (
18
+ t === REACT_ELEMENT_TYPE ||
19
+ t === REACT_TRANSITIONAL_ELEMENT_TYPE ||
20
+ t === REACT_PORTAL_TYPE
21
+ )
22
+ }
23
+
24
+ const REACT_ELEMENT_PLACEHOLDER = 'React element'
25
+
26
+ function sanitizeSlotArg(
27
+ value: unknown,
28
+ seen: WeakSet<object>,
29
+ depth: number,
30
+ ): unknown {
31
+ if (isReactElementLike(value)) {
32
+ return REACT_ELEMENT_PLACEHOLDER
33
+ }
34
+
35
+ if (value === null || value === undefined) {
36
+ return value
37
+ }
38
+
39
+ if (typeof value !== 'object' && typeof value !== 'function') {
40
+ return value
41
+ }
42
+
43
+ if (Array.isArray(value)) {
44
+ return value.map((d) => sanitizeSlotArg(d, seen, depth + 1))
45
+ }
46
+
47
+ const proto = Object.getPrototypeOf(value)
48
+ if (proto === Object.prototype || proto === null) {
49
+ const out: Record<string, unknown> = {}
50
+ for (const [k, v] of Object.entries(value as Record<string, unknown>)) {
51
+ out[k] = sanitizeSlotArg(v, seen, depth + 1)
52
+ }
53
+ return out
54
+ }
55
+
56
+ return value
57
+ }
58
+
59
+ export function sanitizeSlotArgs(args: Array<any>): Array<any> {
60
+ const seen = new WeakSet<object>()
61
+ return args.map((d) => sanitizeSlotArg(d, seen, 0))
62
+ }
package/src/types.ts ADDED
@@ -0,0 +1,15 @@
1
+ import type { ServerComponentStream } from './ServerComponentTypes'
2
+
3
+ /**
4
+ * Handle returned by RSC helpers.
5
+ * Contains the RSC Flight stream that can be consumed by SSR and/or Client.
6
+ */
7
+ export interface ServerComponentHandle {
8
+ readonly stream: ServerComponentStream
9
+ }
10
+
11
+ /**
12
+ * Slot implementations provided to ServerComponentRenderer.
13
+ * Keys are slot names, values are either React nodes (for children) or render functions.
14
+ */
15
+ export type SlotImplementations = Record<string, unknown>