@makeswift/runtime 0.28.10-canary.1 → 0.28.10-canary.10

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 (172) hide show
  1. package/dist/cjs/api/graphql/documents/queries.js +0 -42
  2. package/dist/cjs/api/graphql/documents/queries.js.map +1 -1
  3. package/dist/cjs/api/graphql/generated/types.js.map +1 -1
  4. package/dist/cjs/api/graphql-api-client.js +1 -18
  5. package/dist/cjs/api/graphql-api-client.js.map +1 -1
  6. package/dist/cjs/api/makeswift-api-resources-client.js +2 -8
  7. package/dist/cjs/api/makeswift-api-resources-client.js.map +1 -1
  8. package/dist/cjs/api/rest-api-client.js +27 -1
  9. package/dist/cjs/api/rest-api-client.js.map +1 -1
  10. package/dist/cjs/api/table-record-client.js +47 -0
  11. package/dist/cjs/api/table-record-client.js.map +1 -0
  12. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  13. package/dist/cjs/api-handler/handlers/table-record.js +63 -0
  14. package/dist/cjs/api-handler/handlers/table-record.js.map +1 -0
  15. package/dist/cjs/api-handler/index.js +3 -0
  16. package/dist/cjs/api-handler/index.js.map +1 -1
  17. package/dist/cjs/client/index.js +17 -5
  18. package/dist/cjs/client/index.js.map +1 -1
  19. package/dist/cjs/components/builtin/Form/Form.js +2 -2
  20. package/dist/cjs/components/builtin/Form/Form.js.map +1 -1
  21. package/dist/cjs/controls/index.js +10 -0
  22. package/dist/cjs/controls/index.js.map +1 -1
  23. package/dist/cjs/controls/rich-text/control.js.map +1 -1
  24. package/dist/cjs/next/components/tests/controls/page-control-prop-rendering.js +3 -18
  25. package/dist/cjs/next/components/tests/controls/page-control-prop-rendering.js.map +1 -1
  26. package/dist/cjs/react/server/index.js +2 -0
  27. package/dist/cjs/react/server/index.js.map +1 -1
  28. package/dist/cjs/runtimes/react/hooks/{use-graphql-api-client.js → use-table-record-client.js} +9 -9
  29. package/dist/cjs/runtimes/react/hooks/use-table-record-client.js.map +1 -0
  30. package/dist/cjs/runtimes/react/react-runtime-core.js +14 -3
  31. package/dist/cjs/runtimes/react/react-runtime-core.js.map +1 -1
  32. package/dist/cjs/runtimes/react/runtime-core.js +0 -1
  33. package/dist/cjs/runtimes/react/runtime-core.js.map +1 -1
  34. package/dist/cjs/runtimes/react/server/components/element-data.js +6 -2
  35. package/dist/cjs/runtimes/react/server/components/element-data.js.map +1 -1
  36. package/dist/cjs/runtimes/react/server/components/element.js +20 -2
  37. package/dist/cjs/runtimes/react/server/components/element.js.map +1 -1
  38. package/dist/cjs/runtimes/react/server/components/renderer.js +1 -2
  39. package/dist/cjs/runtimes/react/server/components/renderer.js.map +1 -1
  40. package/dist/cjs/runtimes/react/server/components/server-elements-cache.js +7 -0
  41. package/dist/cjs/runtimes/react/server/components/server-elements-cache.js.map +1 -1
  42. package/dist/cjs/runtimes/react/server/css/client-css.js +2 -2
  43. package/dist/cjs/runtimes/react/server/css/client-css.js.map +1 -1
  44. package/dist/cjs/runtimes/react/server/index.js +3 -0
  45. package/dist/cjs/runtimes/react/server/index.js.map +1 -1
  46. package/dist/cjs/runtimes/react/server/injectable-props.js +17 -0
  47. package/dist/cjs/runtimes/react/server/injectable-props.js.map +1 -0
  48. package/dist/cjs/runtimes/react/server/render-context.js +1 -6
  49. package/dist/cjs/runtimes/react/server/render-context.js.map +1 -1
  50. package/dist/cjs/runtimes/react/testing/react-runtime.js +3 -4
  51. package/dist/cjs/runtimes/react/testing/react-runtime.js.map +1 -1
  52. package/dist/cjs/runtimes/react/testing/render-to-string.js +44 -0
  53. package/dist/cjs/runtimes/react/testing/render-to-string.js.map +1 -0
  54. package/dist/cjs/state/modules/components-meta.js.map +1 -1
  55. package/dist/cjs/unstable-framework-support/index.js +3 -0
  56. package/dist/cjs/unstable-framework-support/index.js.map +1 -1
  57. package/dist/esm/api/graphql/documents/queries.js +0 -39
  58. package/dist/esm/api/graphql/documents/queries.js.map +1 -1
  59. package/dist/esm/api/graphql/generated/types.js.map +1 -1
  60. package/dist/esm/api/graphql-api-client.js +2 -24
  61. package/dist/esm/api/graphql-api-client.js.map +1 -1
  62. package/dist/esm/api/makeswift-api-resources-client.js +2 -8
  63. package/dist/esm/api/makeswift-api-resources-client.js.map +1 -1
  64. package/dist/esm/api/rest-api-client.js +27 -1
  65. package/dist/esm/api/rest-api-client.js.map +1 -1
  66. package/dist/esm/api/table-record-client.js +23 -0
  67. package/dist/esm/api/table-record-client.js.map +1 -0
  68. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  69. package/dist/esm/api-handler/handlers/table-record.js +29 -0
  70. package/dist/esm/api-handler/handlers/table-record.js.map +1 -0
  71. package/dist/esm/api-handler/index.js +3 -0
  72. package/dist/esm/api-handler/index.js.map +1 -1
  73. package/dist/esm/client/index.js +17 -5
  74. package/dist/esm/client/index.js.map +1 -1
  75. package/dist/esm/components/builtin/Form/Form.js +2 -2
  76. package/dist/esm/components/builtin/Form/Form.js.map +1 -1
  77. package/dist/esm/controls/index.js +10 -0
  78. package/dist/esm/controls/index.js.map +1 -1
  79. package/dist/esm/controls/rich-text/control.js.map +1 -1
  80. package/dist/esm/next/components/tests/controls/page-control-prop-rendering.js +1 -16
  81. package/dist/esm/next/components/tests/controls/page-control-prop-rendering.js.map +1 -1
  82. package/dist/esm/react/server/index.js +2 -0
  83. package/dist/esm/react/server/index.js.map +1 -1
  84. package/dist/esm/runtimes/react/hooks/use-table-record-client.js +11 -0
  85. package/dist/esm/runtimes/react/hooks/use-table-record-client.js.map +1 -0
  86. package/dist/esm/runtimes/react/react-runtime-core.js +14 -3
  87. package/dist/esm/runtimes/react/react-runtime-core.js.map +1 -1
  88. package/dist/esm/runtimes/react/runtime-core.js +0 -1
  89. package/dist/esm/runtimes/react/runtime-core.js.map +1 -1
  90. package/dist/esm/runtimes/react/server/components/element-data.js +6 -2
  91. package/dist/esm/runtimes/react/server/components/element-data.js.map +1 -1
  92. package/dist/esm/runtimes/react/server/components/element.js +20 -2
  93. package/dist/esm/runtimes/react/server/components/element.js.map +1 -1
  94. package/dist/esm/runtimes/react/server/components/renderer.js +2 -3
  95. package/dist/esm/runtimes/react/server/components/renderer.js.map +1 -1
  96. package/dist/esm/runtimes/react/server/components/server-elements-cache.js +6 -0
  97. package/dist/esm/runtimes/react/server/components/server-elements-cache.js.map +1 -1
  98. package/dist/esm/runtimes/react/server/css/client-css.js +2 -2
  99. package/dist/esm/runtimes/react/server/css/client-css.js.map +1 -1
  100. package/dist/esm/runtimes/react/server/index.js +2 -0
  101. package/dist/esm/runtimes/react/server/index.js.map +1 -1
  102. package/dist/esm/runtimes/react/server/injectable-props.js +1 -0
  103. package/dist/esm/runtimes/react/server/injectable-props.js.map +1 -0
  104. package/dist/esm/runtimes/react/server/render-context.js +1 -6
  105. package/dist/esm/runtimes/react/server/render-context.js.map +1 -1
  106. package/dist/esm/runtimes/react/testing/react-runtime.js +3 -4
  107. package/dist/esm/runtimes/react/testing/react-runtime.js.map +1 -1
  108. package/dist/esm/runtimes/react/testing/render-to-string.js +20 -0
  109. package/dist/esm/runtimes/react/testing/render-to-string.js.map +1 -0
  110. package/dist/esm/state/modules/components-meta.js.map +1 -1
  111. package/dist/esm/unstable-framework-support/index.js +2 -0
  112. package/dist/esm/unstable-framework-support/index.js.map +1 -1
  113. package/dist/types/api/graphql/documents/queries.d.ts +0 -3
  114. package/dist/types/api/graphql/documents/queries.d.ts.map +1 -1
  115. package/dist/types/api/graphql/generated/types.d.ts +0 -71
  116. package/dist/types/api/graphql/generated/types.d.ts.map +1 -1
  117. package/dist/types/api/graphql-api-client.d.ts +0 -4
  118. package/dist/types/api/graphql-api-client.d.ts.map +1 -1
  119. package/dist/types/api/makeswift-api-resources-client.d.ts +1 -3
  120. package/dist/types/api/makeswift-api-resources-client.d.ts.map +1 -1
  121. package/dist/types/api/rest-api-client.d.ts +3 -1
  122. package/dist/types/api/rest-api-client.d.ts.map +1 -1
  123. package/dist/types/api/table-record-client.d.ts +13 -0
  124. package/dist/types/api/table-record-client.d.ts.map +1 -0
  125. package/dist/types/api-handler/handlers/table-record.d.ts +6 -0
  126. package/dist/types/api-handler/handlers/table-record.d.ts.map +1 -0
  127. package/dist/types/api-handler/index.d.ts +2 -1
  128. package/dist/types/api-handler/index.d.ts.map +1 -1
  129. package/dist/types/client/index.d.ts +4 -3
  130. package/dist/types/client/index.d.ts.map +1 -1
  131. package/dist/types/controls/index.d.ts +1 -1
  132. package/dist/types/controls/index.d.ts.map +1 -1
  133. package/dist/types/next/components/tests/controls/page-control-prop-rendering.d.ts.map +1 -1
  134. package/dist/types/next/tests/server.api-handler-table-record.test.d.ts +2 -0
  135. package/dist/types/next/tests/server.api-handler-table-record.test.d.ts.map +1 -0
  136. package/dist/types/react/server/index.d.ts +1 -1
  137. package/dist/types/react/server/index.d.ts.map +1 -1
  138. package/dist/types/runtimes/react/hooks/use-table-record-client.d.ts +3 -0
  139. package/dist/types/runtimes/react/hooks/use-table-record-client.d.ts.map +1 -0
  140. package/dist/types/runtimes/react/react-runtime-core.d.ts +20 -7
  141. package/dist/types/runtimes/react/react-runtime-core.d.ts.map +1 -1
  142. package/dist/types/runtimes/react/runtime-core.d.ts.map +1 -1
  143. package/dist/types/runtimes/react/server/components/__tests__/element.test.d.ts +2 -0
  144. package/dist/types/runtimes/react/server/components/__tests__/element.test.d.ts.map +1 -0
  145. package/dist/types/runtimes/react/server/components/element-data.d.ts +2 -1
  146. package/dist/types/runtimes/react/server/components/element-data.d.ts.map +1 -1
  147. package/dist/types/runtimes/react/server/components/element.d.ts.map +1 -1
  148. package/dist/types/runtimes/react/server/components/renderer.d.ts.map +1 -1
  149. package/dist/types/runtimes/react/server/components/server-elements-cache.d.ts +4 -0
  150. package/dist/types/runtimes/react/server/components/server-elements-cache.d.ts.map +1 -1
  151. package/dist/types/runtimes/react/server/css/client-css.d.ts.map +1 -1
  152. package/dist/types/runtimes/react/server/index.d.ts +1 -0
  153. package/dist/types/runtimes/react/server/index.d.ts.map +1 -1
  154. package/dist/types/runtimes/react/server/injectable-props.d.ts +5 -0
  155. package/dist/types/runtimes/react/server/injectable-props.d.ts.map +1 -0
  156. package/dist/types/runtimes/react/server/render-context.d.ts +2 -1
  157. package/dist/types/runtimes/react/server/render-context.d.ts.map +1 -1
  158. package/dist/types/runtimes/react/testing/react-runtime.d.ts +5 -4
  159. package/dist/types/runtimes/react/testing/react-runtime.d.ts.map +1 -1
  160. package/dist/types/runtimes/react/testing/render-to-string.d.ts +3 -0
  161. package/dist/types/runtimes/react/testing/render-to-string.d.ts.map +1 -0
  162. package/dist/types/slate/InlineModePlugin/index.d.ts +1 -1
  163. package/dist/types/state/modules/components-meta.d.ts +2 -0
  164. package/dist/types/state/modules/components-meta.d.ts.map +1 -1
  165. package/dist/types/unstable-framework-support/index.d.ts +1 -0
  166. package/dist/types/unstable-framework-support/index.d.ts.map +1 -1
  167. package/package.json +3 -3
  168. package/dist/cjs/runtimes/react/hooks/use-graphql-api-client.js.map +0 -1
  169. package/dist/esm/runtimes/react/hooks/use-graphql-api-client.js +0 -11
  170. package/dist/esm/runtimes/react/hooks/use-graphql-api-client.js.map +0 -1
  171. package/dist/types/runtimes/react/hooks/use-graphql-api-client.d.ts +0 -3
  172. package/dist/types/runtimes/react/hooks/use-graphql-api-client.d.ts.map +0 -1
@@ -27,10 +27,12 @@ class ReactRuntimeCore extends RuntimeCore {
27
27
  server = false,
28
28
  props
29
29
  }) {
30
+ const isServerComponent = server !== false;
31
+ const injectedProps = typeof server === "object" ? server.unstable_injectedProps : {};
30
32
  validateComponentType(
31
33
  // make sure we don't access `component?.name` and trigger loading of the server
32
34
  // component unless we're running in the RSC environment
33
- server && !this.isRSCEnv() ? { type, componentName: label || "Unknown server component" } : {
35
+ isServerComponent && !this.isRSCEnv() ? { type, componentName: label || "Unknown server component" } : {
34
36
  type,
35
37
  componentName: component?.name || label || "Unknown component"
36
38
  }
@@ -38,7 +40,16 @@ class ReactRuntimeCore extends RuntimeCore {
38
40
  const unregisterComponent = this.protoStore.dispatch(
39
41
  registerComponentEffect(
40
42
  type,
41
- { label, icon, hidden, description, builtinSuspense, unstable_migration, server },
43
+ {
44
+ label,
45
+ icon,
46
+ hidden,
47
+ description,
48
+ builtinSuspense,
49
+ unstable_migration,
50
+ server: isServerComponent,
51
+ injectedProps
52
+ },
42
53
  props ?? {}
43
54
  )
44
55
  );
@@ -47,7 +58,7 @@ class ReactRuntimeCore extends RuntimeCore {
47
58
  "builtinSuspense is ignored in React >= 19.2; components are always wrapped in <Activity>."
48
59
  );
49
60
  }
50
- if (server && !this.isRSCEnv()) {
61
+ if (isServerComponent && !this.isRSCEnv()) {
51
62
  return () => {
52
63
  unregisterComponent();
53
64
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/runtimes/react/react-runtime-core.ts"],"sourcesContent":["import { ControlDefinition as UnifiedControlDefinition } from '@makeswift/controls'\n\nimport { type LegacyDescriptor, type DescriptorValueType } from '../../prop-controllers/descriptors'\n\nimport { supportsActivity } from './components/activity-with-fallback'\n\nimport {\n registerComponentEffect,\n registerReactComponentEffect,\n} from '../../state/actions/internal/read-only-actions'\n\nimport { ComponentIcon } from '../../state/modules/components-meta'\nimport type { ComponentType } from '../../state/read-only-state'\n\nimport { RuntimeCore } from './runtime-core'\n\nfunction validateComponentType({\n type,\n componentName,\n}: {\n type: string\n componentName: string\n}): void {\n if (typeof type !== 'string' || type === '') {\n throw new Error(\n `${componentName}: A non-empty string \\`type\\` is required for component registration, got ${type}`,\n )\n }\n}\n\nexport class ReactRuntimeCore extends RuntimeCore {\n registerComponent<\n ControlDef extends UnifiedControlDefinition,\n P extends Record<string, LegacyDescriptor | ControlDef>,\n C extends ComponentType<{ [K in keyof P]: DescriptorValueType<P[K]> }>,\n >(\n component: C,\n {\n type,\n label,\n icon = ComponentIcon.Cube,\n hidden = false,\n description,\n builtinSuspense,\n unstable_migration,\n server = false,\n props,\n }: {\n type: string\n label: string\n icon?: ComponentIcon\n hidden?: boolean\n description?: string\n /**\n * In React <= 19.1, controls the default `<Suspense>` boundary.\n * Ignored in React >= 19.2; components are always wrapped in `<Activity>`.\n * Defaults to `true`.\n */\n builtinSuspense?: boolean\n /**\n * Marks this registration as superseded by `replacementType`. When\n * `replacementType` differs from `type`, the builder offers a way to\n * update existing instances.\n */\n unstable_migration?: { replacementType: string }\n server?: boolean\n props?: P\n },\n ): () => void {\n validateComponentType(\n // make sure we don't access `component?.name` and trigger loading of the server\n // component unless we're running in the RSC environment\n server && !this.isRSCEnv()\n ? { type, componentName: label || 'Unknown server component' }\n : {\n type,\n componentName: component?.name || label || 'Unknown component',\n },\n )\n\n const unregisterComponent = this.protoStore.dispatch(\n registerComponentEffect(\n type,\n { label, icon, hidden, description, builtinSuspense, unstable_migration, server },\n props ?? {},\n ),\n )\n\n if (supportsActivity() && builtinSuspense !== undefined) {\n console.warn(\n 'builtinSuspense is ignored in React >= 19.2; components are always wrapped in <Activity>.',\n )\n }\n\n if (server && !this.isRSCEnv()) {\n // we can't load server components code outside of the RSC environment, but we also\n // don't need to: if everything is set up correctly, React has already rendered and\n // streamed the corresponding React elements to the client for us -- see\n // `ServerElementsCache` and `ElementDataServer`\n return () => {\n unregisterComponent()\n }\n }\n\n const unregisterReactComponent = this.protoStore.dispatch(\n registerReactComponentEffect(type, component as unknown as ComponentType),\n )\n\n return () => {\n unregisterComponent()\n unregisterReactComponent()\n }\n }\n\n protected isRSCEnv() {\n return false\n }\n}\n"],"mappings":"AAIA,SAAS,wBAAwB;AAEjC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,SAAS,qBAAqB;AAG9B,SAAS,mBAAmB;AAE5B,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AACF,GAGS;AACP,MAAI,OAAO,SAAS,YAAY,SAAS,IAAI;AAC3C,UAAM,IAAI;AAAA,MACR,GAAG,aAAa,6EAA6E,IAAI;AAAA,IACnG;AAAA,EACF;AACF;AAEO,MAAM,yBAAyB,YAAY;AAAA,EAChD,kBAKE,WACA;AAAA,IACE;AAAA,IACA;AAAA,IACA,OAAO,cAAc;AAAA,IACrB,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACF,GAqBY;AACZ;AAAA;AAAA;AAAA,MAGE,UAAU,CAAC,KAAK,SAAS,IACrB,EAAE,MAAM,eAAe,SAAS,2BAA2B,IAC3D;AAAA,QACE;AAAA,QACA,eAAe,WAAW,QAAQ,SAAS;AAAA,MAC7C;AAAA,IACN;AAEA,UAAM,sBAAsB,KAAK,WAAW;AAAA,MAC1C;AAAA,QACE;AAAA,QACA,EAAE,OAAO,MAAM,QAAQ,aAAa,iBAAiB,oBAAoB,OAAO;AAAA,QAChF,SAAS,CAAC;AAAA,MACZ;AAAA,IACF;AAEA,QAAI,iBAAiB,KAAK,oBAAoB,QAAW;AACvD,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,CAAC,KAAK,SAAS,GAAG;AAK9B,aAAO,MAAM;AACX,4BAAoB;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,2BAA2B,KAAK,WAAW;AAAA,MAC/C,6BAA6B,MAAM,SAAqC;AAAA,IAC1E;AAEA,WAAO,MAAM;AACX,0BAAoB;AACpB,+BAAyB;AAAA,IAC3B;AAAA,EACF;AAAA,EAEU,WAAW;AACnB,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/runtimes/react/react-runtime-core.ts"],"sourcesContent":["import { type Component, type PropsWithoutRef, type ReactNode, type RefAttributes } from 'react'\n\nimport {\n ControlDefinition as UnifiedControlDefinition,\n type PropsWithValidContextUsage,\n} from '@makeswift/controls'\n\nimport { type LegacyDescriptor, type DescriptorValueType } from '../../prop-controllers/descriptors'\n\nimport { supportsActivity } from './components/activity-with-fallback'\n\nimport {\n registerComponentEffect,\n registerReactComponentEffect,\n} from '../../state/actions/internal/read-only-actions'\n\nimport { ComponentIcon } from '../../state/modules/components-meta'\nimport type { ComponentType } from '../../state/read-only-state'\n\nimport { type InjectableProps } from './server/injectable-props'\n\nimport { RuntimeCore } from './runtime-core'\n\nfunction validateComponentType({\n type,\n componentName,\n}: {\n type: string\n componentName: string\n}): void {\n if (typeof type !== 'string' || type === '') {\n throw new Error(\n `${componentName}: A non-empty string \\`type\\` is required for component registration, got ${type}`,\n )\n }\n}\n\ntype InjectedPropsConfig = Record<string, keyof InjectableProps>\n\ntype ServerComponentConfig<I extends InjectedPropsConfig> =\n | boolean\n | {\n unstable_injectedProps: I\n }\n\ntype InjectedProps<I extends InjectedPropsConfig> = {\n [K in keyof I]: InjectableProps[I[K]]\n}\n\ntype ResolvedProps<P extends Record<string, LegacyDescriptor | UnifiedControlDefinition>> = {\n [K in keyof P]: DescriptorValueType<P[K]>\n}\n\ntype RegisteredComponentType<\n P extends Record<string, LegacyDescriptor | UnifiedControlDefinition>,\n I extends InjectedPropsConfig,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T = any,\n> =\n | {\n new (\n props: PropsWithoutRef<ResolvedProps<P>> & InjectedProps<I> & RefAttributes<T>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context?: any,\n ): Component<ResolvedProps<P> & InjectedProps<I>>\n }\n | ((\n props: PropsWithoutRef<ResolvedProps<P>> & InjectedProps<I> & RefAttributes<T>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context?: any,\n ) => ReactNode)\n\nexport class ReactRuntimeCore extends RuntimeCore {\n registerComponent<\n ControlDef extends UnifiedControlDefinition,\n P extends Record<string, LegacyDescriptor | ControlDef>,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n const I extends InjectedPropsConfig = {},\n C extends RegisteredComponentType<P, I> = RegisteredComponentType<P, I>,\n >(\n component: C,\n {\n type,\n label,\n icon = ComponentIcon.Cube,\n hidden = false,\n description,\n builtinSuspense,\n unstable_migration,\n server = false,\n props,\n }: {\n type: string\n label: string\n icon?: ComponentIcon\n hidden?: boolean\n description?: string\n /**\n * In React <= 19.1, controls the default `<Suspense>` boundary.\n * Ignored in React >= 19.2; components are always wrapped in `<Activity>`.\n * Defaults to `true`.\n */\n builtinSuspense?: boolean\n /**\n * Marks this registration as superseded by `replacementType`. When\n * `replacementType` differs from `type`, the builder offers a way to\n * update existing instances.\n */\n unstable_migration?: { replacementType: string }\n server?: ServerComponentConfig<I>\n props?: P & PropsWithValidContextUsage<P>\n },\n ): () => void {\n const isServerComponent = server !== false\n const injectedProps = typeof server === 'object' ? server.unstable_injectedProps : {}\n\n validateComponentType(\n // make sure we don't access `component?.name` and trigger loading of the server\n // component unless we're running in the RSC environment\n isServerComponent && !this.isRSCEnv()\n ? { type, componentName: label || 'Unknown server component' }\n : {\n type,\n componentName: component?.name || label || 'Unknown component',\n },\n )\n\n const unregisterComponent = this.protoStore.dispatch(\n registerComponentEffect(\n type,\n {\n label,\n icon,\n hidden,\n description,\n builtinSuspense,\n unstable_migration,\n server: isServerComponent,\n injectedProps,\n },\n props ?? {},\n ),\n )\n\n if (supportsActivity() && builtinSuspense !== undefined) {\n console.warn(\n 'builtinSuspense is ignored in React >= 19.2; components are always wrapped in <Activity>.',\n )\n }\n\n if (isServerComponent && !this.isRSCEnv()) {\n // we can't load server components code outside of the RSC environment, but we also\n // don't need to: if everything is set up correctly, React has already rendered and\n // streamed the corresponding React elements to the client for us -- see\n // `ServerElementsCache` and `ElementDataServer`\n return () => {\n unregisterComponent()\n }\n }\n\n const unregisterReactComponent = this.protoStore.dispatch(\n registerReactComponentEffect(type, component as unknown as ComponentType),\n )\n\n return () => {\n unregisterComponent()\n unregisterReactComponent()\n }\n }\n\n protected isRSCEnv() {\n return false\n }\n}\n"],"mappings":"AASA,SAAS,wBAAwB;AAEjC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,SAAS,qBAAqB;AAK9B,SAAS,mBAAmB;AAE5B,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AACF,GAGS;AACP,MAAI,OAAO,SAAS,YAAY,SAAS,IAAI;AAC3C,UAAM,IAAI;AAAA,MACR,GAAG,aAAa,6EAA6E,IAAI;AAAA,IACnG;AAAA,EACF;AACF;AAqCO,MAAM,yBAAyB,YAAY;AAAA,EAChD,kBAOE,WACA;AAAA,IACE;AAAA,IACA;AAAA,IACA,OAAO,cAAc;AAAA,IACrB,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACF,GAqBY;AACZ,UAAM,oBAAoB,WAAW;AACrC,UAAM,gBAAgB,OAAO,WAAW,WAAW,OAAO,yBAAyB,CAAC;AAEpF;AAAA;AAAA;AAAA,MAGE,qBAAqB,CAAC,KAAK,SAAS,IAChC,EAAE,MAAM,eAAe,SAAS,2BAA2B,IAC3D;AAAA,QACE;AAAA,QACA,eAAe,WAAW,QAAQ,SAAS;AAAA,MAC7C;AAAA,IACN;AAEA,UAAM,sBAAsB,KAAK,WAAW;AAAA,MAC1C;AAAA,QACE;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,QACF;AAAA,QACA,SAAS,CAAC;AAAA,MACZ;AAAA,IACF;AAEA,QAAI,iBAAiB,KAAK,oBAAoB,QAAW;AACvD,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAEA,QAAI,qBAAqB,CAAC,KAAK,SAAS,GAAG;AAKzC,aAAO,MAAM;AACX,4BAAoB;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,2BAA2B,KAAK,WAAW;AAAA,MAC/C,6BAA6B,MAAM,SAAqC;AAAA,IAC1E;AAEA,WAAO,MAAM;AACX,0BAAoB;AACpB,+BAAyB;AAAA,IAC3B;AAAA,EACF;AAAA,EAEU,WAAW;AACnB,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -98,7 +98,6 @@ class RuntimeCore {
98
98
  fetch: this.fetch,
99
99
  apiKey: this.apiKey,
100
100
  apiOrigin: this.apiOrigin,
101
- graphqlApiEndpoint: this.graphqlApiEndpoint,
102
101
  preloadedState
103
102
  });
104
103
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/runtimes/react/runtime-core.ts"],"sourcesContent":["import { type SerializableReplacementContext } from '@makeswift/controls'\n\nimport { ApiResourcesClient } from '../../api/api-resources-client'\nimport { HostApiResourcesClient } from '../../api/host-api-resources-client'\nimport { MakeswiftApiResourcesClient } from '../../api/makeswift-api-resources-client'\nimport { type HttpFetch } from '../../api/types'\nimport { type SiteVersion } from '../../api/site-version'\n\nimport {\n type Breakpoints,\n type BreakpointsInput,\n parseBreakpointsInput,\n} from '../../state/modules/breakpoints'\n\nimport { copyElementTree } from '../../state/ops/copy-element-tree'\n\nimport { getBreakpoints, type Element, type ElementData } from '../../state/read-only-state'\nimport {\n configureProtoStore,\n configureReadWriteStore,\n type ProtoStore,\n type Store,\n} from '../../state/store'\n\nimport { RefCountedMap } from '../../utils/ref-counted-map'\nimport { isServer } from '../../utils/is-server'\n\nexport type StoreKey = {\n siteVersion: SiteVersion | null\n locale: string | undefined\n}\n\nconst VERSION_TAG_LIVE = 'ref:live'\n\nexport class RuntimeCore {\n // The unowned entry TTL affects performance, not correctness. The TTL controls how long an unretained store stays\n // in the map. If an entry expires and is removed from the map before React commits, the store remains retained\n // via `<StoreContext.Provider>`. The only impact is that future lookups will create a new store instance instead of\n // reusing the existing one, reducing cache efficiency.\n private readonly activeStores = new RefCountedMap<string | null, Store>({\n unownedEntryTtlMs: 1000,\n // Checking on retain/release is sufficient on the client, and we don't need to check on get on the server\n // as the only scenario in which we add the store to the map is when the runtime is already bound to the\n // requested site version, which should be the only site version for which the store is requested\n ttlCheck: RefCountedMap.TTLCheck.ON_RETAIN | RefCountedMap.TTLCheck.ON_RELEASE,\n })\n\n private readonly apiKey: string | undefined\n\n readonly protoStore: ProtoStore\n readonly appOrigin: string\n readonly apiOrigin: string\n readonly requestKey: StoreKey | undefined\n readonly fetch: HttpFetch\n\n constructor({\n appOrigin = 'https://app.makeswift.com',\n apiOrigin = 'https://api.makeswift.com',\n apiKey,\n breakpoints,\n requestKey,\n fetch,\n }: {\n appOrigin?: string\n apiOrigin?: string\n apiKey?: string\n breakpoints?: BreakpointsInput\n requestKey?: StoreKey\n fetch: HttpFetch\n }) {\n this.appOrigin = validateOrigin(appOrigin, 'appOrigin')\n this.apiOrigin = validateOrigin(apiOrigin, 'apiOrigin')\n this.apiKey = apiKey\n this.requestKey = requestKey\n this.fetch = fetch\n\n this.protoStore = configureProtoStore({\n name: 'Runtime proto-store',\n breakpoints: breakpoints ? parseBreakpointsInput(breakpoints) : undefined,\n })\n }\n\n getOrCreateStore({ siteVersion, locale }: StoreKey): Store {\n const key = storeCacheKey({ siteVersion, locale })\n\n const createStore = () => {\n // API resources client includes an in-memory cache of the site's resources and thus also has to be versioned\n const apiResourcesClient = this.createApiResourcesClient({ siteVersion, locale })\n\n // TODO: we need to decouple editability from the site version; specifically, previewing\n // a draft version of the site should not lead to switching to the read-write state\n const isReadOnly = siteVersion == null\n\n return configureReadWriteStore({\n name: `Runtime read-write store (site version: ${key})`,\n appOrigin: this.appOrigin,\n apiResourcesClient,\n preloadedState: { ...this.protoStore.getState(), siteVersion, isReadOnly, locale },\n })\n }\n\n // On the server, stores are ephemeral by default so SSR does not retain them in a long-lived runtime.\n // The exception is a runtime that is already bound to the requested site version & locale, where we\n // can safely reuse the store across multiple root regions and benefit from the host API client's\n // in-memory cache.\n //\n // On the client, stores are reference-counted by site version so multiple root regions can share a store\n // instance, which preserves the pre-v0.17 per-site-version store behavior without requiring a separate\n // runtime per root.\n const usePersistentStore = this.shouldUsePersistentStore(key)\n return usePersistentStore ? this.activeStores.getOrCreate(key, createStore) : createStore()\n }\n\n retainStore({ siteVersion, locale }: StoreKey, store: Store): void {\n const key = storeCacheKey({ siteVersion, locale })\n\n if (!this.shouldUsePersistentStore(key)) {\n console.error('RuntimeCore: attempt to retain an ephemeral store', { key })\n return\n }\n\n if (this.activeStores.retain(key, store)) {\n store.startBreakpointWatch()\n }\n }\n\n releaseStore({ siteVersion, locale }: StoreKey, store: Store): void {\n const key = storeCacheKey({ siteVersion, locale })\n\n if (!this.shouldUsePersistentStore(key)) {\n console.error('RuntimeCore: attempt to release an ephemeral store', { key })\n return\n }\n\n if (this.activeStores.release(key, store)) {\n store.stopBreakpointWatch()\n }\n }\n\n copyElementTree(\n elementTree: ElementData,\n replacementContext: SerializableReplacementContext,\n ): Element {\n return copyElementTree(this.protoStore.getState(), elementTree, replacementContext)\n }\n\n getBreakpoints(): Breakpoints {\n return getBreakpoints(this.protoStore.getState())\n }\n\n get graphqlApiEndpoint(): string {\n return new URL('graphql', this.apiOrigin).href\n }\n\n private createApiResourcesClient(preloadedState: {\n siteVersion: SiteVersion | null\n locale: string | undefined\n }): ApiResourcesClient {\n if (isServer() && this.apiKey) {\n return new MakeswiftApiResourcesClient({\n fetch: this.fetch,\n apiKey: this.apiKey,\n apiOrigin: this.apiOrigin,\n graphqlApiEndpoint: this.graphqlApiEndpoint,\n preloadedState,\n })\n }\n\n return new HostApiResourcesClient({\n fetch: this.fetch,\n preloadedState,\n })\n }\n\n private shouldUsePersistentStore(key: string): boolean {\n // don't persist stores on the server unless the runtime instance is bound to a request\n // and the requested store matches the request's site version and locale\n return !isServer() || (this.requestKey !== undefined && storeCacheKey(this.requestKey) === key)\n }\n}\n\nconst storeCacheKey = ({ siteVersion, locale }: StoreKey): string =>\n `${siteVersionTag(siteVersion)}/${locale ?? 'default'}`\n\nconst siteVersionTag = (siteVersion: SiteVersion | null): string =>\n siteVersion?.version ?? VERSION_TAG_LIVE\n\nfunction validateOrigin(url: string, name: string): string {\n try {\n return new URL(url).origin\n } catch {\n throw new Error(`The Makeswift runtime received an invalid \\`${name}\\` parameter: \"${url}\".`)\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/runtimes/react/runtime-core.ts"],"sourcesContent":["import { type SerializableReplacementContext } from '@makeswift/controls'\n\nimport { ApiResourcesClient } from '../../api/api-resources-client'\nimport { HostApiResourcesClient } from '../../api/host-api-resources-client'\nimport { MakeswiftApiResourcesClient } from '../../api/makeswift-api-resources-client'\nimport { type HttpFetch } from '../../api/types'\nimport { type SiteVersion } from '../../api/site-version'\n\nimport {\n type Breakpoints,\n type BreakpointsInput,\n parseBreakpointsInput,\n} from '../../state/modules/breakpoints'\n\nimport { copyElementTree } from '../../state/ops/copy-element-tree'\n\nimport { getBreakpoints, type Element, type ElementData } from '../../state/read-only-state'\nimport {\n configureProtoStore,\n configureReadWriteStore,\n type ProtoStore,\n type Store,\n} from '../../state/store'\n\nimport { RefCountedMap } from '../../utils/ref-counted-map'\nimport { isServer } from '../../utils/is-server'\n\nexport type StoreKey = {\n siteVersion: SiteVersion | null\n locale: string | undefined\n}\n\nconst VERSION_TAG_LIVE = 'ref:live'\n\nexport class RuntimeCore {\n // The unowned entry TTL affects performance, not correctness. The TTL controls how long an unretained store stays\n // in the map. If an entry expires and is removed from the map before React commits, the store remains retained\n // via `<StoreContext.Provider>`. The only impact is that future lookups will create a new store instance instead of\n // reusing the existing one, reducing cache efficiency.\n private readonly activeStores = new RefCountedMap<string | null, Store>({\n unownedEntryTtlMs: 1000,\n // Checking on retain/release is sufficient on the client, and we don't need to check on get on the server\n // as the only scenario in which we add the store to the map is when the runtime is already bound to the\n // requested site version, which should be the only site version for which the store is requested\n ttlCheck: RefCountedMap.TTLCheck.ON_RETAIN | RefCountedMap.TTLCheck.ON_RELEASE,\n })\n\n private readonly apiKey: string | undefined\n\n readonly protoStore: ProtoStore\n readonly appOrigin: string\n readonly apiOrigin: string\n readonly requestKey: StoreKey | undefined\n readonly fetch: HttpFetch\n\n constructor({\n appOrigin = 'https://app.makeswift.com',\n apiOrigin = 'https://api.makeswift.com',\n apiKey,\n breakpoints,\n requestKey,\n fetch,\n }: {\n appOrigin?: string\n apiOrigin?: string\n apiKey?: string\n breakpoints?: BreakpointsInput\n requestKey?: StoreKey\n fetch: HttpFetch\n }) {\n this.appOrigin = validateOrigin(appOrigin, 'appOrigin')\n this.apiOrigin = validateOrigin(apiOrigin, 'apiOrigin')\n this.apiKey = apiKey\n this.requestKey = requestKey\n this.fetch = fetch\n\n this.protoStore = configureProtoStore({\n name: 'Runtime proto-store',\n breakpoints: breakpoints ? parseBreakpointsInput(breakpoints) : undefined,\n })\n }\n\n getOrCreateStore({ siteVersion, locale }: StoreKey): Store {\n const key = storeCacheKey({ siteVersion, locale })\n\n const createStore = () => {\n // API resources client includes an in-memory cache of the site's resources and thus also has to be versioned\n const apiResourcesClient = this.createApiResourcesClient({ siteVersion, locale })\n\n // TODO: we need to decouple editability from the site version; specifically, previewing\n // a draft version of the site should not lead to switching to the read-write state\n const isReadOnly = siteVersion == null\n\n return configureReadWriteStore({\n name: `Runtime read-write store (site version: ${key})`,\n appOrigin: this.appOrigin,\n apiResourcesClient,\n preloadedState: { ...this.protoStore.getState(), siteVersion, isReadOnly, locale },\n })\n }\n\n // On the server, stores are ephemeral by default so SSR does not retain them in a long-lived runtime.\n // The exception is a runtime that is already bound to the requested site version & locale, where we\n // can safely reuse the store across multiple root regions and benefit from the host API client's\n // in-memory cache.\n //\n // On the client, stores are reference-counted by site version so multiple root regions can share a store\n // instance, which preserves the pre-v0.17 per-site-version store behavior without requiring a separate\n // runtime per root.\n const usePersistentStore = this.shouldUsePersistentStore(key)\n return usePersistentStore ? this.activeStores.getOrCreate(key, createStore) : createStore()\n }\n\n retainStore({ siteVersion, locale }: StoreKey, store: Store): void {\n const key = storeCacheKey({ siteVersion, locale })\n\n if (!this.shouldUsePersistentStore(key)) {\n console.error('RuntimeCore: attempt to retain an ephemeral store', { key })\n return\n }\n\n if (this.activeStores.retain(key, store)) {\n store.startBreakpointWatch()\n }\n }\n\n releaseStore({ siteVersion, locale }: StoreKey, store: Store): void {\n const key = storeCacheKey({ siteVersion, locale })\n\n if (!this.shouldUsePersistentStore(key)) {\n console.error('RuntimeCore: attempt to release an ephemeral store', { key })\n return\n }\n\n if (this.activeStores.release(key, store)) {\n store.stopBreakpointWatch()\n }\n }\n\n copyElementTree(\n elementTree: ElementData,\n replacementContext: SerializableReplacementContext,\n ): Element {\n return copyElementTree(this.protoStore.getState(), elementTree, replacementContext)\n }\n\n getBreakpoints(): Breakpoints {\n return getBreakpoints(this.protoStore.getState())\n }\n\n get graphqlApiEndpoint(): string {\n return new URL('graphql', this.apiOrigin).href\n }\n\n private createApiResourcesClient(preloadedState: {\n siteVersion: SiteVersion | null\n locale: string | undefined\n }): ApiResourcesClient {\n if (isServer() && this.apiKey) {\n return new MakeswiftApiResourcesClient({\n fetch: this.fetch,\n apiKey: this.apiKey,\n apiOrigin: this.apiOrigin,\n preloadedState,\n })\n }\n\n return new HostApiResourcesClient({\n fetch: this.fetch,\n preloadedState,\n })\n }\n\n private shouldUsePersistentStore(key: string): boolean {\n // don't persist stores on the server unless the runtime instance is bound to a request\n // and the requested store matches the request's site version and locale\n return !isServer() || (this.requestKey !== undefined && storeCacheKey(this.requestKey) === key)\n }\n}\n\nconst storeCacheKey = ({ siteVersion, locale }: StoreKey): string =>\n `${siteVersionTag(siteVersion)}/${locale ?? 'default'}`\n\nconst siteVersionTag = (siteVersion: SiteVersion | null): string =>\n siteVersion?.version ?? VERSION_TAG_LIVE\n\nfunction validateOrigin(url: string, name: string): string {\n try {\n return new URL(url).origin\n } catch {\n throw new Error(`The Makeswift runtime received an invalid \\`${name}\\` parameter: \"${url}\".`)\n }\n}\n"],"mappings":"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","names":[]}
@@ -17,7 +17,8 @@ import { resolveProps } from "../resolve-props";
17
17
  async function ServerElementData({
18
18
  documentKey,
19
19
  context,
20
- elementData
20
+ elementData,
21
+ injectedProps
21
22
  }) {
22
23
  const state = getStore(context).getState();
23
24
  const Component = getReactComponent(state, elementData.type);
@@ -44,7 +45,10 @@ async function ServerElementData({
44
45
  getBreakpoints(state),
45
46
  elementData.key
46
47
  );
47
- const props = await resolveProps(context, elementData, documentKey, definitions, stylesheet);
48
+ const props = {
49
+ ...await resolveProps(context, elementData, documentKey, definitions, stylesheet),
50
+ ...injectedProps
51
+ };
48
52
  return /* @__PURE__ */ jsxs(Fragment, { children: [
49
53
  /* @__PURE__ */ jsx(Component, { ...props }, elementData.key),
50
54
  /* @__PURE__ */ jsx(InjectServerCSS, { collector: cssCollector, elementKey: elementData.key })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/runtimes/react/server/components/element-data.tsx"],"sourcesContent":["import { type ReactNode } from 'react'\n\nimport { partitionRecord } from '../../../../utils/partition'\n\nimport {\n type State,\n type ElementData,\n getReactComponent,\n getBreakpoints,\n getComponentPropControllerDescriptors,\n} from '../../../../state/read-only-state'\n\nimport { FallbackComponent } from '../../../../components/shared/FallbackComponent'\nimport { isLegacyDescriptor } from '../../../../prop-controllers/descriptors'\n\nimport {\n ServerCSSCollector,\n createCollectingServerStylesheet,\n InjectServerCSS,\n} from '../css/server-css'\nimport { type ServerRenderContext, getStore } from '../render-context'\nimport { resolveProps } from '../resolve-props'\n\nexport async function ServerElementData({\n documentKey,\n context,\n elementData,\n}: {\n documentKey: string\n context: ServerRenderContext\n elementData: ElementData\n}): Promise<ReactNode> {\n const state = getStore(context).getState()\n\n const Component = getReactComponent(state, elementData.type)\n if (Component == null) {\n return (\n <FallbackComponent\n text=\"Component not found\"\n details={`Unknown component '${elementData.type}'`}\n />\n )\n }\n\n const [legacyDescriptors, definitions] = getControlDefs(state, elementData)\n const legacyKeys = Object.keys(legacyDescriptors)\n if (legacyKeys.length > 0) {\n console.warn(`Unexpected legacy control data in server element '${elementData.key}`, {\n elementData,\n legacyKeys,\n })\n }\n\n const cssCollector = new ServerCSSCollector()\n const stylesheet = createCollectingServerStylesheet(\n cssCollector,\n getBreakpoints(state),\n elementData.key,\n )\n\n const props = await resolveProps(context, elementData, documentKey, definitions, stylesheet)\n\n return (\n <>\n {/* Make the component the first child so that `findDOMNode` resolves to its first\n rendered DOM node (if any) rather than the component's `<style>` element */}\n <Component key={elementData.key} {...props} />\n <InjectServerCSS collector={cssCollector} elementKey={elementData.key} />\n </>\n )\n}\n\nconst getControlDefs = (state: State, elementData: ElementData) => {\n const descriptors = getComponentPropControllerDescriptors(state, elementData.type) ?? {}\n return partitionRecord(descriptors, isLegacyDescriptor)\n}\n"],"mappings":"AAqCM,SA0BF,UA1BE,KA0BF,YA1BE;AAnCN,SAAS,uBAAuB;AAEhC;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,yBAAyB;AAClC,SAAS,0BAA0B;AAEnC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAmC,gBAAgB;AACnD,SAAS,oBAAoB;AAE7B,eAAsB,kBAAkB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,GAIuB;AACrB,QAAM,QAAQ,SAAS,OAAO,EAAE,SAAS;AAEzC,QAAM,YAAY,kBAAkB,OAAO,YAAY,IAAI;AAC3D,MAAI,aAAa,MAAM;AACrB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,sBAAsB,YAAY,IAAI;AAAA;AAAA,IACjD;AAAA,EAEJ;AAEA,QAAM,CAAC,mBAAmB,WAAW,IAAI,eAAe,OAAO,WAAW;AAC1E,QAAM,aAAa,OAAO,KAAK,iBAAiB;AAChD,MAAI,WAAW,SAAS,GAAG;AACzB,YAAQ,KAAK,qDAAqD,YAAY,GAAG,IAAI;AAAA,MACnF;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,IAAI,mBAAmB;AAC5C,QAAM,aAAa;AAAA,IACjB;AAAA,IACA,eAAe,KAAK;AAAA,IACpB,YAAY;AAAA,EACd;AAEA,QAAM,QAAQ,MAAM,aAAa,SAAS,aAAa,aAAa,aAAa,UAAU;AAE3F,SACE,iCAGE;AAAA,wBAAC,aAAiC,GAAG,SAArB,YAAY,GAAgB;AAAA,IAC5C,oBAAC,mBAAgB,WAAW,cAAc,YAAY,YAAY,KAAK;AAAA,KACzE;AAEJ;AAEA,MAAM,iBAAiB,CAAC,OAAc,gBAA6B;AACjE,QAAM,cAAc,sCAAsC,OAAO,YAAY,IAAI,KAAK,CAAC;AACvF,SAAO,gBAAgB,aAAa,kBAAkB;AACxD;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/server/components/element-data.tsx"],"sourcesContent":["import { type ReactNode } from 'react'\n\nimport { partitionRecord } from '../../../../utils/partition'\n\nimport {\n type State,\n type ElementData,\n getReactComponent,\n getBreakpoints,\n getComponentPropControllerDescriptors,\n} from '../../../../state/read-only-state'\n\nimport { FallbackComponent } from '../../../../components/shared/FallbackComponent'\nimport { isLegacyDescriptor } from '../../../../prop-controllers/descriptors'\n\nimport {\n ServerCSSCollector,\n createCollectingServerStylesheet,\n InjectServerCSS,\n} from '../css/server-css'\nimport { type ServerRenderContext, getStore } from '../render-context'\nimport { resolveProps } from '../resolve-props'\n\nexport async function ServerElementData({\n documentKey,\n context,\n elementData,\n injectedProps,\n}: {\n documentKey: string\n context: ServerRenderContext\n elementData: ElementData\n injectedProps: Record<string, unknown>\n}): Promise<ReactNode> {\n const state = getStore(context).getState()\n\n const Component = getReactComponent(state, elementData.type)\n if (Component == null) {\n return (\n <FallbackComponent\n text=\"Component not found\"\n details={`Unknown component '${elementData.type}'`}\n />\n )\n }\n\n const [legacyDescriptors, definitions] = getControlDefs(state, elementData)\n const legacyKeys = Object.keys(legacyDescriptors)\n if (legacyKeys.length > 0) {\n console.warn(`Unexpected legacy control data in server element '${elementData.key}`, {\n elementData,\n legacyKeys,\n })\n }\n\n const cssCollector = new ServerCSSCollector()\n const stylesheet = createCollectingServerStylesheet(\n cssCollector,\n getBreakpoints(state),\n elementData.key,\n )\n\n const props = {\n ...(await resolveProps(context, elementData, documentKey, definitions, stylesheet)),\n ...injectedProps,\n }\n\n return (\n <>\n {/* Make the component the first child so that `findDOMNode` resolves to its first\n rendered DOM node (if any) rather than the component's `<style>` element */}\n <Component key={elementData.key} {...props} />\n <InjectServerCSS collector={cssCollector} elementKey={elementData.key} />\n </>\n )\n}\n\nconst getControlDefs = (state: State, elementData: ElementData) => {\n const descriptors = getComponentPropControllerDescriptors(state, elementData.type) ?? {}\n return partitionRecord(descriptors, isLegacyDescriptor)\n}\n"],"mappings":"AAuCM,SA6BF,UA7BE,KA6BF,YA7BE;AArCN,SAAS,uBAAuB;AAEhC;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,yBAAyB;AAClC,SAAS,0BAA0B;AAEnC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAmC,gBAAgB;AACnD,SAAS,oBAAoB;AAE7B,eAAsB,kBAAkB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKuB;AACrB,QAAM,QAAQ,SAAS,OAAO,EAAE,SAAS;AAEzC,QAAM,YAAY,kBAAkB,OAAO,YAAY,IAAI;AAC3D,MAAI,aAAa,MAAM;AACrB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,sBAAsB,YAAY,IAAI;AAAA;AAAA,IACjD;AAAA,EAEJ;AAEA,QAAM,CAAC,mBAAmB,WAAW,IAAI,eAAe,OAAO,WAAW;AAC1E,QAAM,aAAa,OAAO,KAAK,iBAAiB;AAChD,MAAI,WAAW,SAAS,GAAG;AACzB,YAAQ,KAAK,qDAAqD,YAAY,GAAG,IAAI;AAAA,MACnF;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,IAAI,mBAAmB;AAC5C,QAAM,aAAa;AAAA,IACjB;AAAA,IACA,eAAe,KAAK;AAAA,IACpB,YAAY;AAAA,EACd;AAEA,QAAM,QAAQ;AAAA,IACZ,GAAI,MAAM,aAAa,SAAS,aAAa,aAAa,aAAa,UAAU;AAAA,IACjF,GAAG;AAAA,EACL;AAEA,SACE,iCAGE;AAAA,wBAAC,aAAiC,GAAG,SAArB,YAAY,GAAgB;AAAA,IAC5C,oBAAC,mBAAgB,WAAW,cAAc,YAAY,YAAY,KAAK;AAAA,KACzE;AAEJ;AAEA,MAAM,iBAAiB,CAAC,OAAc,gBAA6B;AACjE,QAAM,cAAc,sCAAsC,OAAO,YAAY,IAAI,KAAK,CAAC;AACvF,SAAO,gBAAgB,aAAa,kBAAkB;AACxD;","names":[]}
@@ -1,4 +1,5 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
+ import { mapValues } from "@makeswift/controls";
2
3
  import {
3
4
  isElementReference,
4
5
  getComponentsMeta
@@ -26,11 +27,28 @@ function ServerElement({
26
27
  }
27
28
  );
28
29
  }
30
+ const elementKey = element.key;
29
31
  const isRSC = elementMeta.server ?? false;
30
32
  if (!isRSC) {
31
- return /* @__PURE__ */ jsx(ClientElement, { element }, element.key);
33
+ return /* @__PURE__ */ jsx(ClientElement, { element }, elementKey);
32
34
  }
33
- return /* @__PURE__ */ jsx(ServerElementData, { documentKey, context, elementData: element });
35
+ const injectableProps = {
36
+ elementKey,
37
+ documentKey
38
+ };
39
+ const injectedProps = mapValues(
40
+ elementMeta.injectedProps ?? {},
41
+ (propName) => injectableProps[propName]
42
+ );
43
+ return /* @__PURE__ */ jsx(
44
+ ServerElementData,
45
+ {
46
+ documentKey,
47
+ context,
48
+ elementData: element,
49
+ injectedProps
50
+ }
51
+ );
34
52
  }
35
53
  export {
36
54
  ServerElement
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/runtimes/react/server/components/element.tsx"],"sourcesContent":["import { ReactNode } from 'react'\n\nimport {\n isElementReference,\n getComponentsMeta,\n type Element as ElementDataOrRef,\n} from '../../../../state/read-only-state'\n\nimport { FallbackComponent } from '../../../../components/shared/FallbackComponent'\n\nimport { Element as ClientElement } from '../../components/Element'\n\nimport { type ServerRenderContext, getStore } from '../render-context'\n\nimport { ServerElementData } from './element-data'\n\nexport function ServerElement({\n context,\n element,\n documentKey,\n}: {\n context: ServerRenderContext\n element: ElementDataOrRef\n documentKey: string\n}): ReactNode {\n // check for element references first to avoid looking them up as regular components\n if (isElementReference(element)) {\n return <FallbackComponent text=\"Element reference is not supported on server yet\" />\n }\n\n const state = getStore(context).getState()\n const elementMeta = getComponentsMeta(state).get(element.type)\n if (elementMeta == null) {\n return (\n <FallbackComponent\n text=\"Component not found\"\n details={`Missing component metadata for '${element.type}'`}\n />\n )\n }\n\n const isRSC = elementMeta.server ?? false\n if (!isRSC) {\n return <ClientElement key={element.key} element={element} />\n }\n\n return <ServerElementData documentKey={documentKey} context={context} elementData={element} />\n}\n"],"mappings":"AA2BW;AAzBX;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAEP,SAAS,yBAAyB;AAElC,SAAS,WAAW,qBAAqB;AAEzC,SAAmC,gBAAgB;AAEnD,SAAS,yBAAyB;AAE3B,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAIc;AAEZ,MAAI,mBAAmB,OAAO,GAAG;AAC/B,WAAO,oBAAC,qBAAkB,MAAK,oDAAmD;AAAA,EACpF;AAEA,QAAM,QAAQ,SAAS,OAAO,EAAE,SAAS;AACzC,QAAM,cAAc,kBAAkB,KAAK,EAAE,IAAI,QAAQ,IAAI;AAC7D,MAAI,eAAe,MAAM;AACvB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,mCAAmC,QAAQ,IAAI;AAAA;AAAA,IAC1D;AAAA,EAEJ;AAEA,QAAM,QAAQ,YAAY,UAAU;AACpC,MAAI,CAAC,OAAO;AACV,WAAO,oBAAC,iBAAgC,WAAb,QAAQ,GAAuB;AAAA,EAC5D;AAEA,SAAO,oBAAC,qBAAkB,aAA0B,SAAkB,aAAa,SAAS;AAC9F;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/server/components/element.tsx"],"sourcesContent":["import { ReactNode } from 'react'\n\nimport { mapValues } from '@makeswift/controls'\n\nimport {\n isElementReference,\n getComponentsMeta,\n type Element as ElementDataOrRef,\n} from '../../../../state/read-only-state'\n\nimport { FallbackComponent } from '../../../../components/shared/FallbackComponent'\n\nimport { Element as ClientElement } from '../../components/Element'\n\nimport { type ServerRenderContext, getStore } from '../render-context'\nimport { type InjectableProps } from '../injectable-props'\n\nimport { ServerElementData } from './element-data'\n\nexport function ServerElement({\n context,\n element,\n documentKey,\n}: {\n context: ServerRenderContext\n element: ElementDataOrRef\n documentKey: string\n}): ReactNode {\n // check for element references first to avoid looking them up as regular components\n if (isElementReference(element)) {\n return <FallbackComponent text=\"Element reference is not supported on server yet\" />\n }\n\n const state = getStore(context).getState()\n const elementMeta = getComponentsMeta(state).get(element.type)\n if (elementMeta == null) {\n return (\n <FallbackComponent\n text=\"Component not found\"\n details={`Missing component metadata for '${element.type}'`}\n />\n )\n }\n\n const elementKey = element.key\n const isRSC = elementMeta.server ?? false\n if (!isRSC) {\n return <ClientElement key={elementKey} element={element} />\n }\n\n const injectableProps: InjectableProps = {\n elementKey,\n documentKey,\n }\n\n const injectedProps = mapValues(\n elementMeta.injectedProps ?? {},\n propName => injectableProps[propName],\n )\n\n return (\n <ServerElementData\n documentKey={documentKey}\n context={context}\n elementData={element}\n injectedProps={injectedProps}\n />\n )\n}\n"],"mappings":"AA8BW;AA5BX,SAAS,iBAAiB;AAE1B;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAEP,SAAS,yBAAyB;AAElC,SAAS,WAAW,qBAAqB;AAEzC,SAAmC,gBAAgB;AAGnD,SAAS,yBAAyB;AAE3B,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAIc;AAEZ,MAAI,mBAAmB,OAAO,GAAG;AAC/B,WAAO,oBAAC,qBAAkB,MAAK,oDAAmD;AAAA,EACpF;AAEA,QAAM,QAAQ,SAAS,OAAO,EAAE,SAAS;AACzC,QAAM,cAAc,kBAAkB,KAAK,EAAE,IAAI,QAAQ,IAAI;AAC7D,MAAI,eAAe,MAAM;AACvB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,mCAAmC,QAAQ,IAAI;AAAA;AAAA,IAC1D;AAAA,EAEJ;AAEA,QAAM,aAAa,QAAQ;AAC3B,QAAM,QAAQ,YAAY,UAAU;AACpC,MAAI,CAAC,OAAO;AACV,WAAO,oBAAC,iBAA+B,WAAZ,UAA8B;AAAA,EAC3D;AAEA,QAAM,kBAAmC;AAAA,IACvC;AAAA,IACA;AAAA,EACF;AAEA,QAAM,gBAAgB;AAAA,IACpB,YAAY,iBAAiB,CAAC;AAAA,IAC9B,cAAY,gBAAgB,QAAQ;AAAA,EACtC;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1,9 +1,8 @@
1
1
  import { Fragment, jsx } from "react/jsx-runtime";
2
- import { ClientCSSProvider } from "../css/client-css";
3
2
  import { getStore } from "../render-context";
4
3
  import { collectServerElements } from "../collect-server-elements";
5
4
  import { updateApiResourceCache } from "../update-api-resource-cache";
6
- import { ServerElementsCache } from "./server-elements-cache";
5
+ import { ServerElementsProvider } from "./server-elements-cache";
7
6
  function RSCRenderer({
8
7
  context,
9
8
  document,
@@ -11,7 +10,7 @@ function RSCRenderer({
11
10
  children
12
11
  }) {
13
12
  const serverElements = collectServerElements(context, document, cacheData);
14
- return /* @__PURE__ */ jsx(ServerElementsCache, { value: serverElements, children: /* @__PURE__ */ jsx(ClientCSSProvider, { children }) });
13
+ return /* @__PURE__ */ jsx(ServerElementsProvider, { elements: serverElements, children });
15
14
  }
16
15
  function RSCElementRenderer({
17
16
  context,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/runtimes/react/server/components/renderer.tsx"],"sourcesContent":["import { type PropsWithChildren } from 'react'\n\nimport { type CacheData } from '../../../../api/api-resources-client'\nimport { type Document } from '../../../../state/modules/read-only-documents'\n\nimport { ClientCSSProvider } from '../css/client-css'\n\nimport { type ServerRenderContext, getStore } from '../render-context'\nimport { collectServerElements } from '../collect-server-elements'\nimport { updateApiResourceCache } from '../update-api-resource-cache'\n\nimport { ServerElementsCache } from './server-elements-cache'\n\n/**\n * Helper for rendering a Makeswift document containing server elements. Makes\n * the server-rendered nodes available to the client renderer and enables\n * client-side style updates for editable server elements.\n */\nexport function RSCRenderer({\n context,\n document,\n cacheData,\n children,\n}: PropsWithChildren<{ context: ServerRenderContext; document: Document; cacheData: CacheData }>) {\n const serverElements = collectServerElements(context, document, cacheData)\n\n return (\n <ServerElementsCache value={serverElements}>\n <ClientCSSProvider>{children}</ClientCSSProvider>\n </ServerElementsCache>\n )\n}\n\n/**\n * Helper for (re-)rendering an isolated server element. Updates the server\n * state with the context's API resource cache.\n */\nexport function RSCElementRenderer({\n context,\n cacheData,\n children,\n}: PropsWithChildren<{ context: ServerRenderContext; cacheData: CacheData }>) {\n const store = getStore(context)\n\n updateApiResourceCache(store, cacheData)\n return <>{children}</>\n}\n"],"mappings":"AA4BM,SAiBG,UAjBH;AAvBN,SAAS,yBAAyB;AAElC,SAAmC,gBAAgB;AACnD,SAAS,6BAA6B;AACtC,SAAS,8BAA8B;AAEvC,SAAS,2BAA2B;AAO7B,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkG;AAChG,QAAM,iBAAiB,sBAAsB,SAAS,UAAU,SAAS;AAEzE,SACE,oBAAC,uBAAoB,OAAO,gBAC1B,8BAAC,qBAAmB,UAAS,GAC/B;AAEJ;AAMO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAA8E;AAC5E,QAAM,QAAQ,SAAS,OAAO;AAE9B,yBAAuB,OAAO,SAAS;AACvC,SAAO,gCAAG,UAAS;AACrB;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/server/components/renderer.tsx"],"sourcesContent":["import { type PropsWithChildren } from 'react'\n\nimport { type CacheData } from '../../../../api/api-resources-client'\nimport { type Document } from '../../../../state/modules/read-only-documents'\n\nimport { type ServerRenderContext, getStore } from '../render-context'\nimport { collectServerElements } from '../collect-server-elements'\nimport { updateApiResourceCache } from '../update-api-resource-cache'\n\nimport { ServerElementsProvider } from './server-elements-cache'\n\n/**\n * Helper for rendering a Makeswift document containing server elements. Makes\n * the server-rendered nodes available to the client renderer and enables\n * client-side style updates for editable server elements.\n */\nexport function RSCRenderer({\n context,\n document,\n cacheData,\n children,\n}: PropsWithChildren<{ context: ServerRenderContext; document: Document; cacheData: CacheData }>) {\n const serverElements = collectServerElements(context, document, cacheData)\n\n return <ServerElementsProvider elements={serverElements}>{children}</ServerElementsProvider>\n}\n\n/**\n * Helper for (re-)rendering an isolated server element. Updates the server\n * state with the context's API resource cache.\n */\nexport function RSCElementRenderer({\n context,\n cacheData,\n children,\n}: PropsWithChildren<{ context: ServerRenderContext; cacheData: CacheData }>) {\n const store = getStore(context)\n\n updateApiResourceCache(store, cacheData)\n return <>{children}</>\n}\n"],"mappings":"AAwBS,SAeA,UAfA;AAnBT,SAAmC,gBAAgB;AACnD,SAAS,6BAA6B;AACtC,SAAS,8BAA8B;AAEvC,SAAS,8BAA8B;AAOhC,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkG;AAChG,QAAM,iBAAiB,sBAAsB,SAAS,UAAU,SAAS;AAEzE,SAAO,oBAAC,0BAAuB,UAAU,gBAAiB,UAAS;AACrE;AAMO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAA8E;AAC5E,QAAM,QAAQ,SAAS,OAAO;AAE9B,yBAAuB,OAAO,SAAS;AACvC,SAAO,gCAAG,UAAS;AACrB;","names":[]}
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { createContext, useCallback, useContext, useState, useMemo } from "react";
4
+ import { ClientCSSProvider } from "../css/client-css";
4
5
  const Context = createContext({
5
6
  getElement: () => null,
6
7
  updateElement: () => {
@@ -37,9 +38,14 @@ const ServerElementsCache = ({
37
38
  );
38
39
  return /* @__PURE__ */ jsx(Context.Provider, { value: cache, children });
39
40
  };
41
+ const ServerElementsProvider = ({
42
+ children,
43
+ elements
44
+ }) => /* @__PURE__ */ jsx(ServerElementsCache, { value: elements, children: /* @__PURE__ */ jsx(ClientCSSProvider, { children }) });
40
45
  const useServerElementsCache = () => useContext(Context);
41
46
  export {
42
47
  ServerElementsCache,
48
+ ServerElementsProvider,
43
49
  useServerElementsCache
44
50
  };
45
51
  //# sourceMappingURL=server-elements-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/runtimes/react/server/components/server-elements-cache.tsx"],"sourcesContent":["'use client'\n\nimport { createContext, ReactNode, useCallback, useContext, useState, useMemo } from 'react'\n\nimport { type ElementsMap } from '../collect-server-elements'\n\ntype ContextValue = {\n getElement: (elementKey: string) => ReactNode\n updateElement: (elementKey: string, node: ReactNode) => void\n removeElement: (elementKey: string) => void\n}\n\nconst Context = createContext<ContextValue>({\n getElement: () => null,\n updateElement: () => {},\n removeElement: () => {},\n})\n\n/**\n * Client-side \"cache\" of server-rendered elements; this is one of the key pieces in our RSC\n * implementation, with React doing the majority of the heavy lifting: when `ReactNode`s are\n * passed as props across a 'use client' boundary, React's flight serializer automatically\n * renders and encodes them in the RSC stream and then reconstructs them on the client. All\n * we need to do on the client is to make these React elements available for lookup/\n * manipulation when editing in the builder.\n */\nexport const ServerElementsCache = ({\n children,\n value,\n}: {\n children: ReactNode\n value: ElementsMap\n}) => {\n // An RSC re-render does not inherently remount client components; React can reconcile\n // the new server tree with the existing client tree, so we need to handle the `value`\n // prop updates\n const [nodes, setNodes] = useState(value)\n const [previousValue, setPreviousValue] = useState(value)\n\n // this is okay to do on render, see https://react.dev/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes\n if (value !== previousValue) {\n setPreviousValue(value)\n setNodes(value)\n }\n\n const getElement = useCallback((elementKey: string): ReactNode => nodes.get(elementKey), [nodes])\n\n const updateElement = useCallback(\n (elementKey: string, node: ReactNode) => setNodes(prev => new Map(prev).set(elementKey, node)),\n [],\n )\n\n const removeElement = useCallback(\n (elementKey: string) =>\n setNodes(prev => {\n const next = new Map(prev)\n next.delete(elementKey)\n return next\n }),\n [],\n )\n\n const cache = useMemo(\n () => ({ getElement, updateElement, removeElement }),\n [getElement, updateElement, removeElement],\n )\n\n return <Context.Provider value={cache}>{children}</Context.Provider>\n}\n\nexport const useServerElementsCache = () => useContext(Context)\n"],"mappings":";AAmES;AAjET,SAAS,eAA0B,aAAa,YAAY,UAAU,eAAe;AAUrF,MAAM,UAAU,cAA4B;AAAA,EAC1C,YAAY,MAAM;AAAA,EAClB,eAAe,MAAM;AAAA,EAAC;AAAA,EACtB,eAAe,MAAM;AAAA,EAAC;AACxB,CAAC;AAUM,MAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AACF,MAGM;AAIJ,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK;AACxC,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,KAAK;AAGxD,MAAI,UAAU,eAAe;AAC3B,qBAAiB,KAAK;AACtB,aAAS,KAAK;AAAA,EAChB;AAEA,QAAM,aAAa,YAAY,CAAC,eAAkC,MAAM,IAAI,UAAU,GAAG,CAAC,KAAK,CAAC;AAEhG,QAAM,gBAAgB;AAAA,IACpB,CAAC,YAAoB,SAAoB,SAAS,UAAQ,IAAI,IAAI,IAAI,EAAE,IAAI,YAAY,IAAI,CAAC;AAAA,IAC7F,CAAC;AAAA,EACH;AAEA,QAAM,gBAAgB;AAAA,IACpB,CAAC,eACC,SAAS,UAAQ;AACf,YAAM,OAAO,IAAI,IAAI,IAAI;AACzB,WAAK,OAAO,UAAU;AACtB,aAAO;AAAA,IACT,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,QAAM,QAAQ;AAAA,IACZ,OAAO,EAAE,YAAY,eAAe,cAAc;AAAA,IAClD,CAAC,YAAY,eAAe,aAAa;AAAA,EAC3C;AAEA,SAAO,oBAAC,QAAQ,UAAR,EAAiB,OAAO,OAAQ,UAAS;AACnD;AAEO,MAAM,yBAAyB,MAAM,WAAW,OAAO;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/server/components/server-elements-cache.tsx"],"sourcesContent":["'use client'\n\nimport { createContext, ReactNode, useCallback, useContext, useState, useMemo } from 'react'\n\nimport { type ElementsMap } from '../collect-server-elements'\nimport { ClientCSSProvider } from '../css/client-css'\n\ntype ContextValue = {\n getElement: (elementKey: string) => ReactNode\n updateElement: (elementKey: string, node: ReactNode) => void\n removeElement: (elementKey: string) => void\n}\n\nconst Context = createContext<ContextValue>({\n getElement: () => null,\n updateElement: () => {},\n removeElement: () => {},\n})\n\n/**\n * Client-side \"cache\" of server-rendered elements; this is one of the key pieces in our RSC\n * implementation, with React doing the majority of the heavy lifting: when `ReactNode`s are\n * passed as props across a 'use client' boundary, React's flight serializer automatically\n * renders and encodes them in the RSC stream and then reconstructs them on the client. All\n * we need to do on the client is to make these React elements available for lookup/\n * manipulation when editing in the builder.\n */\nexport const ServerElementsCache = ({\n children,\n value,\n}: {\n children: ReactNode\n value: ElementsMap\n}) => {\n // An RSC re-render does not inherently remount client components; React can reconcile\n // the new server tree with the existing client tree, so we need to handle the `value`\n // prop updates\n const [nodes, setNodes] = useState(value)\n const [previousValue, setPreviousValue] = useState(value)\n\n // this is okay to do on render, see https://react.dev/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes\n if (value !== previousValue) {\n setPreviousValue(value)\n setNodes(value)\n }\n\n const getElement = useCallback((elementKey: string): ReactNode => nodes.get(elementKey), [nodes])\n\n const updateElement = useCallback(\n (elementKey: string, node: ReactNode) => setNodes(prev => new Map(prev).set(elementKey, node)),\n [],\n )\n\n const removeElement = useCallback(\n (elementKey: string) =>\n setNodes(prev => {\n const next = new Map(prev)\n next.delete(elementKey)\n return next\n }),\n [],\n )\n\n const cache = useMemo(\n () => ({ getElement, updateElement, removeElement }),\n [getElement, updateElement, removeElement],\n )\n\n return <Context.Provider value={cache}>{children}</Context.Provider>\n}\n\nexport const ServerElementsProvider = ({\n children,\n elements,\n}: {\n children: ReactNode\n elements: ElementsMap\n}) => (\n <ServerElementsCache value={elements}>\n <ClientCSSProvider>{children}</ClientCSSProvider>\n </ServerElementsCache>\n)\n\nexport const useServerElementsCache = () => useContext(Context)\n"],"mappings":";AAoES;AAlET,SAAS,eAA0B,aAAa,YAAY,UAAU,eAAe;AAGrF,SAAS,yBAAyB;AAQlC,MAAM,UAAU,cAA4B;AAAA,EAC1C,YAAY,MAAM;AAAA,EAClB,eAAe,MAAM;AAAA,EAAC;AAAA,EACtB,eAAe,MAAM;AAAA,EAAC;AACxB,CAAC;AAUM,MAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AACF,MAGM;AAIJ,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK;AACxC,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,KAAK;AAGxD,MAAI,UAAU,eAAe;AAC3B,qBAAiB,KAAK;AACtB,aAAS,KAAK;AAAA,EAChB;AAEA,QAAM,aAAa,YAAY,CAAC,eAAkC,MAAM,IAAI,UAAU,GAAG,CAAC,KAAK,CAAC;AAEhG,QAAM,gBAAgB;AAAA,IACpB,CAAC,YAAoB,SAAoB,SAAS,UAAQ,IAAI,IAAI,IAAI,EAAE,IAAI,YAAY,IAAI,CAAC;AAAA,IAC7F,CAAC;AAAA,EACH;AAEA,QAAM,gBAAgB;AAAA,IACpB,CAAC,eACC,SAAS,UAAQ;AACf,YAAM,OAAO,IAAI,IAAI,IAAI;AACzB,WAAK,OAAO,UAAU;AACtB,aAAO;AAAA,IACT,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,QAAM,QAAQ;AAAA,IACZ,OAAO,EAAE,YAAY,eAAe,cAAc;AAAA,IAClD,CAAC,YAAY,eAAe,aAAa;AAAA,EAC3C;AAEA,SAAO,oBAAC,QAAQ,UAAR,EAAiB,OAAO,OAAQ,UAAS;AACnD;AAEO,MAAM,yBAAyB,CAAC;AAAA,EACrC;AAAA,EACA;AACF,MAIE,oBAAC,uBAAoB,OAAO,UAC1B,8BAAC,qBAAmB,UAAS,GAC/B;AAGK,MAAM,yBAAyB,MAAM,WAAW,OAAO;","names":[]}
@@ -50,7 +50,7 @@ function ClientCSSProvider({ children }) {
50
50
  [updateStyleElement]
51
51
  );
52
52
  useEffect(() => {
53
- document.head.querySelectorAll(
53
+ document.querySelectorAll(
54
54
  `style[data-href^="${MAKESWIFT_RSC_STYLE_TAG_ID_PREFIX}"]`
55
55
  ).forEach(registerStyleElement);
56
56
  const observer = new MutationObserver((mutationList) => {
@@ -61,7 +61,7 @@ function ClientCSSProvider({ children }) {
61
61
  }
62
62
  }
63
63
  });
64
- observer.observe(document.head, { childList: true });
64
+ observer.observe(document, { childList: true, subtree: true });
65
65
  return () => {
66
66
  observer.disconnect();
67
67
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/runtimes/react/server/css/client-css.tsx"],"sourcesContent":["'use client'\n\nimport { createContext, ReactNode, useContext, useEffect, useRef, useCallback } from 'react'\n\nimport { MAKESWIFT_RSC_STYLE_TAG_ID_PREFIX } from './css-runtime'\n\ntype ClientCSSContextValue = {\n updateStyle: (elementKey: string, propName: string, cssString: string) => void\n}\n\nconst ClientCSSContext = createContext<ClientCSSContextValue>({\n updateStyle(elementKey: string, propName: string, cssString: string) {\n console.error(\n `Attempt to update client style for server component ${elementKey}'s '${propName}' prop outside of 'ClientCSSProvider'`,\n cssString,\n )\n },\n})\n\nexport function ClientCSSProvider({ children }: { children: ReactNode }) {\n const styleElementsRef = useRef<Map<string, HTMLStyleElement>>(new Map())\n const serverStylesRef = useRef<Map<string, string>>(new Map())\n const dynamicStylesRef = useRef<Map<string, Map<string, string>>>(new Map())\n\n const updateStyleElement = useCallback(\n (elementKey: string, elementStyles: Map<string, string>) => {\n const styleElement = styleElementsRef.current.get(elementKey)\n if (styleElement == null) return\n\n const serverCss = serverStylesRef.current.get(elementKey) ?? ''\n const dynamicCss = Array.from(elementStyles.values()).join('\\n')\n const combinedStyles =\n dynamicCss === serverCss ? serverCss : [serverCss, dynamicCss].filter(Boolean).join('\\n')\n\n if (styleElement.textContent !== combinedStyles) {\n styleElement.textContent = combinedStyles\n }\n },\n [],\n )\n\n const registerStyleElement = useCallback(\n (styleElement: HTMLStyleElement) => {\n const href = styleElement.dataset['href']\n if (href == null || !href.startsWith(MAKESWIFT_RSC_STYLE_TAG_ID_PREFIX)) return\n\n const elementKey = href.substring(MAKESWIFT_RSC_STYLE_TAG_ID_PREFIX.length)\n if (elementKey == '') {\n console.error('Ignoring style element with a missing element key', styleElement)\n return\n }\n\n // don't recapture elements that we're already tracking\n if (styleElement === styleElementsRef.current.get(elementKey)) return\n\n styleElementsRef.current.set(elementKey, styleElement)\n serverStylesRef.current.set(elementKey, styleElement.textContent)\n\n const elementStyles = dynamicStylesRef.current.get(elementKey)\n if (elementStyles != null) {\n updateStyleElement(elementKey, elementStyles)\n }\n },\n [updateStyleElement],\n )\n\n useEffect(() => {\n // initialize style elements map and capture server styles for existing\n // RSC-rendered elements, if any\n document.head\n .querySelectorAll<HTMLStyleElement>(\n `style[data-href^=\"${MAKESWIFT_RSC_STYLE_TAG_ID_PREFIX}\"]`,\n )\n .forEach(registerStyleElement)\n\n // set up a `document.head` observer to capture dynamically added RSC `<style>` nodes\n const observer = new MutationObserver(mutationList => {\n for (const mutation of mutationList) {\n for (const node of mutation.addedNodes) {\n if (node instanceof HTMLStyleElement) registerStyleElement(node)\n }\n }\n })\n\n observer.observe(document.head, { childList: true })\n\n return () => {\n observer.disconnect()\n }\n }, [registerStyleElement])\n\n const updateStyle = useCallback(\n (elementKey: string, propName: string, cssString: string) => {\n const elementStyles = dynamicStylesRef.current.get(elementKey) ?? new Map()\n elementStyles.set(propName, cssString)\n dynamicStylesRef.current.set(elementKey, elementStyles)\n\n updateStyleElement(elementKey, elementStyles)\n },\n [updateStyleElement],\n )\n\n return <ClientCSSContext.Provider value={{ updateStyle }}>{children}</ClientCSSContext.Provider>\n}\n\nexport function useClientCSS(): ClientCSSContextValue {\n return useContext(ClientCSSContext)\n}\n"],"mappings":";AAsGS;AApGT,SAAS,eAA0B,YAAY,WAAW,QAAQ,mBAAmB;AAErF,SAAS,yCAAyC;AAMlD,MAAM,mBAAmB,cAAqC;AAAA,EAC5D,YAAY,YAAoB,UAAkB,WAAmB;AACnE,YAAQ;AAAA,MACN,uDAAuD,UAAU,OAAO,QAAQ;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAEM,SAAS,kBAAkB,EAAE,SAAS,GAA4B;AACvE,QAAM,mBAAmB,OAAsC,oBAAI,IAAI,CAAC;AACxE,QAAM,kBAAkB,OAA4B,oBAAI,IAAI,CAAC;AAC7D,QAAM,mBAAmB,OAAyC,oBAAI,IAAI,CAAC;AAE3E,QAAM,qBAAqB;AAAA,IACzB,CAAC,YAAoB,kBAAuC;AAC1D,YAAM,eAAe,iBAAiB,QAAQ,IAAI,UAAU;AAC5D,UAAI,gBAAgB;AAAM;AAE1B,YAAM,YAAY,gBAAgB,QAAQ,IAAI,UAAU,KAAK;AAC7D,YAAM,aAAa,MAAM,KAAK,cAAc,OAAO,CAAC,EAAE,KAAK,IAAI;AAC/D,YAAM,iBACJ,eAAe,YAAY,YAAY,CAAC,WAAW,UAAU,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAE1F,UAAI,aAAa,gBAAgB,gBAAgB;AAC/C,qBAAa,cAAc;AAAA,MAC7B;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,uBAAuB;AAAA,IAC3B,CAAC,iBAAmC;AAClC,YAAM,OAAO,aAAa,QAAQ,MAAM;AACxC,UAAI,QAAQ,QAAQ,CAAC,KAAK,WAAW,iCAAiC;AAAG;AAEzE,YAAM,aAAa,KAAK,UAAU,kCAAkC,MAAM;AAC1E,UAAI,cAAc,IAAI;AACpB,gBAAQ,MAAM,qDAAqD,YAAY;AAC/E;AAAA,MACF;AAGA,UAAI,iBAAiB,iBAAiB,QAAQ,IAAI,UAAU;AAAG;AAE/D,uBAAiB,QAAQ,IAAI,YAAY,YAAY;AACrD,sBAAgB,QAAQ,IAAI,YAAY,aAAa,WAAW;AAEhE,YAAM,gBAAgB,iBAAiB,QAAQ,IAAI,UAAU;AAC7D,UAAI,iBAAiB,MAAM;AACzB,2BAAmB,YAAY,aAAa;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,CAAC,kBAAkB;AAAA,EACrB;AAEA,YAAU,MAAM;AAGd,aAAS,KACN;AAAA,MACC,qBAAqB,iCAAiC;AAAA,IACxD,EACC,QAAQ,oBAAoB;AAG/B,UAAM,WAAW,IAAI,iBAAiB,kBAAgB;AACpD,iBAAW,YAAY,cAAc;AACnC,mBAAW,QAAQ,SAAS,YAAY;AACtC,cAAI,gBAAgB;AAAkB,iCAAqB,IAAI;AAAA,QACjE;AAAA,MACF;AAAA,IACF,CAAC;AAED,aAAS,QAAQ,SAAS,MAAM,EAAE,WAAW,KAAK,CAAC;AAEnD,WAAO,MAAM;AACX,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,oBAAoB,CAAC;AAEzB,QAAM,cAAc;AAAA,IAClB,CAAC,YAAoB,UAAkB,cAAsB;AAC3D,YAAM,gBAAgB,iBAAiB,QAAQ,IAAI,UAAU,KAAK,oBAAI,IAAI;AAC1E,oBAAc,IAAI,UAAU,SAAS;AACrC,uBAAiB,QAAQ,IAAI,YAAY,aAAa;AAEtD,yBAAmB,YAAY,aAAa;AAAA,IAC9C;AAAA,IACA,CAAC,kBAAkB;AAAA,EACrB;AAEA,SAAO,oBAAC,iBAAiB,UAAjB,EAA0B,OAAO,EAAE,YAAY,GAAI,UAAS;AACtE;AAEO,SAAS,eAAsC;AACpD,SAAO,WAAW,gBAAgB;AACpC;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/server/css/client-css.tsx"],"sourcesContent":["'use client'\n\nimport { createContext, ReactNode, useContext, useEffect, useRef, useCallback } from 'react'\n\nimport { MAKESWIFT_RSC_STYLE_TAG_ID_PREFIX } from './css-runtime'\n\ntype ClientCSSContextValue = {\n updateStyle: (elementKey: string, propName: string, cssString: string) => void\n}\n\nconst ClientCSSContext = createContext<ClientCSSContextValue>({\n updateStyle(elementKey: string, propName: string, cssString: string) {\n console.error(\n `Attempt to update client style for server component ${elementKey}'s '${propName}' prop outside of 'ClientCSSProvider'`,\n cssString,\n )\n },\n})\n\nexport function ClientCSSProvider({ children }: { children: ReactNode }) {\n const styleElementsRef = useRef<Map<string, HTMLStyleElement>>(new Map())\n const serverStylesRef = useRef<Map<string, string>>(new Map())\n const dynamicStylesRef = useRef<Map<string, Map<string, string>>>(new Map())\n\n const updateStyleElement = useCallback(\n (elementKey: string, elementStyles: Map<string, string>) => {\n const styleElement = styleElementsRef.current.get(elementKey)\n if (styleElement == null) return\n\n const serverCss = serverStylesRef.current.get(elementKey) ?? ''\n const dynamicCss = Array.from(elementStyles.values()).join('\\n')\n const combinedStyles =\n dynamicCss === serverCss ? serverCss : [serverCss, dynamicCss].filter(Boolean).join('\\n')\n\n if (styleElement.textContent !== combinedStyles) {\n styleElement.textContent = combinedStyles\n }\n },\n [],\n )\n\n const registerStyleElement = useCallback(\n (styleElement: HTMLStyleElement) => {\n const href = styleElement.dataset['href']\n if (href == null || !href.startsWith(MAKESWIFT_RSC_STYLE_TAG_ID_PREFIX)) return\n\n const elementKey = href.substring(MAKESWIFT_RSC_STYLE_TAG_ID_PREFIX.length)\n if (elementKey == '') {\n console.error('Ignoring style element with a missing element key', styleElement)\n return\n }\n\n // don't recapture elements that we're already tracking\n if (styleElement === styleElementsRef.current.get(elementKey)) return\n\n styleElementsRef.current.set(elementKey, styleElement)\n serverStylesRef.current.set(elementKey, styleElement.textContent)\n\n const elementStyles = dynamicStylesRef.current.get(elementKey)\n if (elementStyles != null) {\n updateStyleElement(elementKey, elementStyles)\n }\n },\n [updateStyleElement],\n )\n\n useEffect(() => {\n // initialize style elements map and capture server styles for existing\n // RSC-rendered elements, if any\n // Query document because some hosts SSR a subtree that does not include `<head>`\n document\n .querySelectorAll<HTMLStyleElement>(\n `style[data-href^=\"${MAKESWIFT_RSC_STYLE_TAG_ID_PREFIX}\"]`,\n )\n .forEach(registerStyleElement)\n\n // set up a document observer to capture dynamically added RSC `<style>` nodes\n const observer = new MutationObserver(mutationList => {\n for (const mutation of mutationList) {\n for (const node of mutation.addedNodes) {\n if (node instanceof HTMLStyleElement) registerStyleElement(node)\n }\n }\n })\n\n observer.observe(document, { childList: true, subtree: true })\n\n return () => {\n observer.disconnect()\n }\n }, [registerStyleElement])\n\n const updateStyle = useCallback(\n (elementKey: string, propName: string, cssString: string) => {\n const elementStyles = dynamicStylesRef.current.get(elementKey) ?? new Map()\n elementStyles.set(propName, cssString)\n dynamicStylesRef.current.set(elementKey, elementStyles)\n\n updateStyleElement(elementKey, elementStyles)\n },\n [updateStyleElement],\n )\n\n return <ClientCSSContext.Provider value={{ updateStyle }}>{children}</ClientCSSContext.Provider>\n}\n\nexport function useClientCSS(): ClientCSSContextValue {\n return useContext(ClientCSSContext)\n}\n"],"mappings":";AAuGS;AArGT,SAAS,eAA0B,YAAY,WAAW,QAAQ,mBAAmB;AAErF,SAAS,yCAAyC;AAMlD,MAAM,mBAAmB,cAAqC;AAAA,EAC5D,YAAY,YAAoB,UAAkB,WAAmB;AACnE,YAAQ;AAAA,MACN,uDAAuD,UAAU,OAAO,QAAQ;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAEM,SAAS,kBAAkB,EAAE,SAAS,GAA4B;AACvE,QAAM,mBAAmB,OAAsC,oBAAI,IAAI,CAAC;AACxE,QAAM,kBAAkB,OAA4B,oBAAI,IAAI,CAAC;AAC7D,QAAM,mBAAmB,OAAyC,oBAAI,IAAI,CAAC;AAE3E,QAAM,qBAAqB;AAAA,IACzB,CAAC,YAAoB,kBAAuC;AAC1D,YAAM,eAAe,iBAAiB,QAAQ,IAAI,UAAU;AAC5D,UAAI,gBAAgB;AAAM;AAE1B,YAAM,YAAY,gBAAgB,QAAQ,IAAI,UAAU,KAAK;AAC7D,YAAM,aAAa,MAAM,KAAK,cAAc,OAAO,CAAC,EAAE,KAAK,IAAI;AAC/D,YAAM,iBACJ,eAAe,YAAY,YAAY,CAAC,WAAW,UAAU,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAE1F,UAAI,aAAa,gBAAgB,gBAAgB;AAC/C,qBAAa,cAAc;AAAA,MAC7B;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,uBAAuB;AAAA,IAC3B,CAAC,iBAAmC;AAClC,YAAM,OAAO,aAAa,QAAQ,MAAM;AACxC,UAAI,QAAQ,QAAQ,CAAC,KAAK,WAAW,iCAAiC;AAAG;AAEzE,YAAM,aAAa,KAAK,UAAU,kCAAkC,MAAM;AAC1E,UAAI,cAAc,IAAI;AACpB,gBAAQ,MAAM,qDAAqD,YAAY;AAC/E;AAAA,MACF;AAGA,UAAI,iBAAiB,iBAAiB,QAAQ,IAAI,UAAU;AAAG;AAE/D,uBAAiB,QAAQ,IAAI,YAAY,YAAY;AACrD,sBAAgB,QAAQ,IAAI,YAAY,aAAa,WAAW;AAEhE,YAAM,gBAAgB,iBAAiB,QAAQ,IAAI,UAAU;AAC7D,UAAI,iBAAiB,MAAM;AACzB,2BAAmB,YAAY,aAAa;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,CAAC,kBAAkB;AAAA,EACrB;AAEA,YAAU,MAAM;AAId,aACG;AAAA,MACC,qBAAqB,iCAAiC;AAAA,IACxD,EACC,QAAQ,oBAAoB;AAG/B,UAAM,WAAW,IAAI,iBAAiB,kBAAgB;AACpD,iBAAW,YAAY,cAAc;AACnC,mBAAW,QAAQ,SAAS,YAAY;AACtC,cAAI,gBAAgB;AAAkB,iCAAqB,IAAI;AAAA,QACjE;AAAA,MACF;AAAA,IACF,CAAC;AAED,aAAS,QAAQ,UAAU,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAE7D,WAAO,MAAM;AACX,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,oBAAoB,CAAC;AAEzB,QAAM,cAAc;AAAA,IAClB,CAAC,YAAoB,UAAkB,cAAsB;AAC3D,YAAM,gBAAgB,iBAAiB,QAAQ,IAAI,UAAU,KAAK,oBAAI,IAAI;AAC1E,oBAAc,IAAI,UAAU,SAAS;AACrC,uBAAiB,QAAQ,IAAI,YAAY,aAAa;AAEtD,yBAAmB,YAAY,aAAa;AAAA,IAC9C;AAAA,IACA,CAAC,kBAAkB;AAAA,EACrB;AAEA,SAAO,oBAAC,iBAAiB,UAAjB,EAA0B,OAAO,EAAE,YAAY,GAAI,UAAS;AACtE;AAEO,SAAS,eAAsC;AACpD,SAAO,WAAW,gBAAgB;AACpC;","names":[]}
@@ -1,3 +1,4 @@
1
+ import { collectServerElements } from "./collect-server-elements";
1
2
  import { ServerElement } from "./components/element";
2
3
  import { MakeswiftComponent } from "./components/makeswift-component";
3
4
  import { Slot } from "./components/slot";
@@ -17,6 +18,7 @@ export {
17
18
  ServerCSSCollector,
18
19
  ServerElement,
19
20
  Slot,
21
+ collectServerElements,
20
22
  getRenderContext,
21
23
  setRenderContext
22
24
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/runtimes/react/server/index.ts"],"sourcesContent":["export { ServerElement } from './components/element'\nexport { MakeswiftComponent } from './components/makeswift-component'\nexport { Slot } from './components/slot'\nexport { RSCElementRenderer } from './components/renderer'\nexport { ServerCSSCollector } from './css/server-css'\nexport {\n type ServerRenderContext,\n RenderContext,\n setRenderContext,\n getRenderContext,\n} from './render-context'\nexport { RenderElementPayload } from './render-element-payload'\n"],"mappings":"AAAA,SAAS,qBAAqB;AAC9B,SAAS,0BAA0B;AACnC,SAAS,YAAY;AACrB,SAAS,0BAA0B;AACnC,SAAS,0BAA0B;AACnC;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,4BAA4B;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/server/index.ts"],"sourcesContent":["export { collectServerElements } from './collect-server-elements'\nexport { ServerElement } from './components/element'\nexport { MakeswiftComponent } from './components/makeswift-component'\nexport { Slot } from './components/slot'\nexport { RSCElementRenderer } from './components/renderer'\nexport { ServerCSSCollector } from './css/server-css'\nexport {\n type ServerRenderContext,\n RenderContext,\n setRenderContext,\n getRenderContext,\n} from './render-context'\nexport { RenderElementPayload } from './render-element-payload'\n"],"mappings":"AAAA,SAAS,6BAA6B;AACtC,SAAS,qBAAqB;AAC9B,SAAS,0BAA0B;AACnC,SAAS,YAAY;AACrB,SAAS,0BAA0B;AACnC,SAAS,0BAA0B;AACnC;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,4BAA4B;","names":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=injectable-props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -9,12 +9,7 @@ const getRenderContext = () => {
9
9
  throw Error("Makeswift render context was not set.");
10
10
  return context;
11
11
  };
12
- const getStore = ({ runtime, siteVersion, locale }) => {
13
- if (runtime.requestKey == null) {
14
- throw Error("Expected a runtime instance that is bound to a specific request key");
15
- }
16
- return runtime.getOrCreateStore({ siteVersion, locale });
17
- };
12
+ const getStore = ({ store }) => store;
18
13
  const RenderContext = ({
19
14
  context,
20
15
  children
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/runtimes/react/server/render-context.tsx"],"sourcesContent":["import { cache, type PropsWithChildren } from 'react'\n\nimport { ReactRuntime } from '../../react/react-runtime'\nimport { type Store } from '../../../state/store'\n\nimport { type SiteVersion } from '../../../api/site-version'\nimport { MakeswiftClient } from '../../../client'\n\n/**\n * Request-scoped dependencies used to render Makeswift server elements.\n *\n * Framework integrations create a context for each request and install it with\n * `RenderContext` or `setRenderContext` so nested renderers can access it without\n * threading it through every component. The runtime must be request-bound;\n * together with `siteVersion` and `locale`, it selects the store and API resource\n * cache used during rendering.\n */\nexport type ServerRenderContext = {\n request: Request\n runtime: ReactRuntime\n client: MakeswiftClient\n siteVersion: SiteVersion | null\n locale: string | undefined\n}\n\nconst requestContext = cache((): { current?: ServerRenderContext } => ({}))\n\nexport const setRenderContext = (context: ServerRenderContext) => {\n requestContext().current = context\n}\n\nexport const getRenderContext = (): ServerRenderContext => {\n const context = requestContext().current\n if (!context) throw Error('Makeswift render context was not set.')\n return context\n}\n\nexport const getStore = ({ runtime, siteVersion, locale }: ServerRenderContext): Store => {\n if (runtime.requestKey == null) {\n throw Error('Expected a runtime instance that is bound to a specific request key')\n }\n\n return runtime.getOrCreateStore({ siteVersion, locale })\n}\n\nexport const RenderContext = ({\n context,\n children,\n}: PropsWithChildren<{ context: ServerRenderContext }>) => {\n setRenderContext(context)\n return children\n}\n"],"mappings":"AAAA,SAAS,aAAqC;AAyB9C,MAAM,iBAAiB,MAAM,OAA0C,CAAC,EAAE;AAEnE,MAAM,mBAAmB,CAAC,YAAiC;AAChE,iBAAe,EAAE,UAAU;AAC7B;AAEO,MAAM,mBAAmB,MAA2B;AACzD,QAAM,UAAU,eAAe,EAAE;AACjC,MAAI,CAAC;AAAS,UAAM,MAAM,uCAAuC;AACjE,SAAO;AACT;AAEO,MAAM,WAAW,CAAC,EAAE,SAAS,aAAa,OAAO,MAAkC;AACxF,MAAI,QAAQ,cAAc,MAAM;AAC9B,UAAM,MAAM,qEAAqE;AAAA,EACnF;AAEA,SAAO,QAAQ,iBAAiB,EAAE,aAAa,OAAO,CAAC;AACzD;AAEO,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AACF,MAA2D;AACzD,mBAAiB,OAAO;AACxB,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/server/render-context.tsx"],"sourcesContent":["import { cache, type PropsWithChildren } from 'react'\n\nimport { ReactRuntime } from '../../react/react-runtime'\nimport { type Store } from '../../../state/store'\n\nimport { type SiteVersion } from '../../../api/site-version'\nimport { MakeswiftClient } from '../../../client'\n\n/**\n * Request-scoped dependencies used to render Makeswift server elements.\n *\n * Framework integrations create a context for each request and install it with\n * `RenderContext` or `setRenderContext` so nested renderers can access it without\n * threading it through every component. The runtime must be request-bound;\n * together with `siteVersion` and `locale`, it selects the store and API resource\n * cache used during rendering.\n */\nexport type ServerRenderContext = {\n request: Request\n runtime: ReactRuntime\n client: MakeswiftClient\n siteVersion: SiteVersion | null\n locale: string | undefined\n store: Store\n}\n\nconst requestContext = cache((): { current?: ServerRenderContext } => ({}))\n\nexport const setRenderContext = (context: ServerRenderContext) => {\n requestContext().current = context\n}\n\nexport const getRenderContext = (): ServerRenderContext => {\n const context = requestContext().current\n if (!context) throw Error('Makeswift render context was not set.')\n return context\n}\n\nexport const getStore = ({ store }: ServerRenderContext): Store => store\n\nexport const RenderContext = ({\n context,\n children,\n}: PropsWithChildren<{ context: ServerRenderContext }>) => {\n setRenderContext(context)\n return children\n}\n"],"mappings":"AAAA,SAAS,aAAqC;AA0B9C,MAAM,iBAAiB,MAAM,OAA0C,CAAC,EAAE;AAEnE,MAAM,mBAAmB,CAAC,YAAiC;AAChE,iBAAe,EAAE,UAAU;AAC7B;AAEO,MAAM,mBAAmB,MAA2B;AACzD,QAAM,UAAU,eAAe,EAAE;AACjC,MAAI,CAAC;AAAS,UAAM,MAAM,uCAAuC;AACjE,SAAO;AACT;AAEO,MAAM,WAAW,CAAC,EAAE,MAAM,MAAkC;AAE5D,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AACF,MAA2D;AACzD,mBAAiB,OAAO;AACxB,SAAO;AACT;","names":[]}
@@ -2,10 +2,7 @@ import { TestOrigins } from "../../../testing/fixtures";
2
2
  import { ReactRuntime } from "../react-runtime";
3
3
  class TestReactRuntime extends ReactRuntime {
4
4
  env;
5
- constructor({
6
- env,
7
- ...args
8
- }) {
5
+ constructor({ env, ...args }) {
9
6
  super(args);
10
7
  this.env = env ?? "client";
11
8
  }
@@ -15,6 +12,7 @@ class TestReactRuntime extends ReactRuntime {
15
12
  }
16
13
  function createReactRuntime({
17
14
  breakpoints,
15
+ requestKey,
18
16
  env
19
17
  } = {}) {
20
18
  return new TestReactRuntime({
@@ -22,6 +20,7 @@ function createReactRuntime({
22
20
  // through the patched version instead of an eagerly captured reference to the original
23
21
  fetch: (...args) => globalThis.fetch(...args),
24
22
  breakpoints,
23
+ requestKey,
25
24
  env,
26
25
  ...TestOrigins
27
26
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/runtimes/react/testing/react-runtime.tsx"],"sourcesContent":["import { type BreakpointsInput } from '../../../state/modules/breakpoints'\nimport { TestOrigins } from '../../../testing/fixtures'\nimport { ReactRuntime } from '../react-runtime'\n\ntype RuntimeEnv = 'client' | 'ssr' | 'rsc'\n\nclass TestReactRuntime extends ReactRuntime {\n readonly env: RuntimeEnv\n\n constructor({\n env,\n ...args\n }: ConstructorParameters<typeof ReactRuntime>[0] & { env?: RuntimeEnv }) {\n super(args)\n this.env = env ?? 'client'\n }\n\n protected isRSCEnv() {\n return this.env === 'rsc'\n }\n}\n\nexport function createReactRuntime({\n breakpoints,\n env,\n}: { breakpoints?: BreakpointsInput; env?: RuntimeEnv } = {}) {\n return new TestReactRuntime({\n // Mock Service Worker patches global `fetch` for interception; make sure our test calls go\n // through the patched version instead of an eagerly captured reference to the original\n fetch: (...args) => globalThis.fetch(...args),\n breakpoints,\n env,\n ...TestOrigins,\n })\n}\n"],"mappings":"AACA,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAI7B,MAAM,yBAAyB,aAAa;AAAA,EACjC;AAAA,EAET,YAAY;AAAA,IACV;AAAA,IACA,GAAG;AAAA,EACL,GAAyE;AACvE,UAAM,IAAI;AACV,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEU,WAAW;AACnB,WAAO,KAAK,QAAQ;AAAA,EACtB;AACF;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,IAA0D,CAAC,GAAG;AAC5D,SAAO,IAAI,iBAAiB;AAAA;AAAA;AAAA,IAG1B,OAAO,IAAI,SAAS,WAAW,MAAM,GAAG,IAAI;AAAA,IAC5C;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/testing/react-runtime.tsx"],"sourcesContent":["import { TestOrigins } from '../../../testing/fixtures'\nimport { ReactRuntime } from '../react-runtime'\n\ntype RuntimeEnv = 'client' | 'ssr' | 'rsc'\ntype RuntimeArgs = ConstructorParameters<typeof ReactRuntime>[0]\n\nclass TestReactRuntime extends ReactRuntime {\n readonly env: RuntimeEnv\n\n constructor({ env, ...args }: RuntimeArgs & { env?: RuntimeEnv }) {\n super(args)\n this.env = env ?? 'client'\n }\n\n protected isRSCEnv() {\n return this.env === 'rsc'\n }\n}\n\nexport function createReactRuntime({\n breakpoints,\n requestKey,\n env,\n}: {\n breakpoints?: RuntimeArgs['breakpoints']\n requestKey?: RuntimeArgs['requestKey']\n env?: RuntimeEnv\n} = {}) {\n return new TestReactRuntime({\n // Mock Service Worker patches global `fetch` for interception; make sure our test calls go\n // through the patched version instead of an eagerly captured reference to the original\n fetch: (...args) => globalThis.fetch(...args),\n breakpoints,\n requestKey,\n env,\n ...TestOrigins,\n })\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAK7B,MAAM,yBAAyB,aAAa;AAAA,EACjC;AAAA,EAET,YAAY,EAAE,KAAK,GAAG,KAAK,GAAuC;AAChE,UAAM,IAAI;AACV,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEU,WAAW;AACnB,WAAO,KAAK,QAAQ;AAAA,EACtB;AACF;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,IAII,CAAC,GAAG;AACN,SAAO,IAAI,iBAAiB;AAAA;AAAA;AAAA,IAG1B,OAAO,IAAI,SAAS,WAAW,MAAM,GAAG,IAAI;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AACH;","names":[]}
@@ -0,0 +1,20 @@
1
+ import { renderToReadableStream } from "react-dom/server";
2
+ async function streamToString(stream) {
3
+ const reader = stream.getReader();
4
+ const decoder = new TextDecoder();
5
+ let result = "";
6
+ while (true) {
7
+ const { done, value } = await reader.read();
8
+ if (done)
9
+ break;
10
+ result += decoder.decode(value, { stream: true });
11
+ }
12
+ return result;
13
+ }
14
+ async function renderToString(element) {
15
+ return await streamToString(await renderToReadableStream(element));
16
+ }
17
+ export {
18
+ renderToString
19
+ };
20
+ //# sourceMappingURL=render-to-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/testing/render-to-string.ts"],"sourcesContent":["import { type ReactNode } from 'react'\nimport { renderToReadableStream } from 'react-dom/server'\n\nasync function streamToString(stream: ReadableStream) {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n\n let result = ''\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n result += decoder.decode(value, { stream: true })\n }\n\n return result\n}\n\nexport async function renderToString(element: ReactNode) {\n return await streamToString(await renderToReadableStream(element))\n}\n"],"mappings":"AACA,SAAS,8BAA8B;AAEvC,eAAe,eAAe,QAAwB;AACpD,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,UAAU,IAAI,YAAY;AAEhC,MAAI,SAAS;AAEb,SAAO,MAAM;AACX,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,QAAI;AAAM;AACV,cAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAAA,EAClD;AAEA,SAAO;AACT;AAEA,eAAsB,eAAe,SAAoB;AACvD,SAAO,MAAM,eAAe,MAAM,uBAAuB,OAAO,CAAC;AACnE;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/state/modules/components-meta.ts"],"sourcesContent":["import { type Action, type UnknownAction, isKnownAction } from '../actions'\nimport { ReadOnlyActionTypes } from '../actions/internal/read-only-action-types'\n\nexport const ComponentIcon = {\n Accordion: 'accordion',\n Audio: 'audio',\n Billing: 'billing',\n Bolt: 'bolt',\n Button: 'button',\n Card: 'card',\n Cards: 'cards',\n Carousel: 'carousel',\n Chats: 'chats',\n Code: 'code',\n Countdown: 'countdown',\n Cube: 'cube',\n Database: 'database',\n Divider: 'divider',\n Form: 'form',\n Gallery: 'gallery',\n Grid: 'grid',\n Help: 'help',\n Image: 'image',\n Layout: 'layout',\n Lock: 'lock',\n Marker: 'marker',\n Navigation: 'navigation',\n Palette: 'palette',\n SocialLinks: 'social-links',\n Star: 'star',\n Table: 'table',\n Tabs: 'tabs',\n Text: 'text',\n Users: 'users',\n Video: 'video',\n} as const\n\nexport type ComponentIcon = (typeof ComponentIcon)[keyof typeof ComponentIcon]\n\nexport type ComponentMeta = {\n label: string\n icon: ComponentIcon\n hidden: boolean\n description?: string\n builtinSuspense?: boolean\n unstable_migration?: {\n replacementType: string\n }\n server?: boolean\n}\n\nexport type State = Map<string, ComponentMeta>\n\nexport function getInitialState({\n componentsMeta = new Map(),\n}: { componentsMeta?: Map<string, ComponentMeta> } = {}): State {\n return componentsMeta\n}\n\nexport function getComponentsMeta(state: State): Map<string, ComponentMeta> {\n return state\n}\n\nexport function getComponentMeta(state: State, type: string): ComponentMeta | null {\n return getComponentsMeta(state).get(type) ?? null\n}\n\nexport function reducer(state: State = getInitialState(), action: Action | UnknownAction): State {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case ReadOnlyActionTypes.REGISTER_COMPONENT:\n return new Map(state).set(action.payload.type, action.payload.meta)\n\n case ReadOnlyActionTypes.UNREGISTER_COMPONENT: {\n const nextState = new Map(state)\n\n const deleted = nextState.delete(action.payload.type)\n\n return deleted ? nextState : state\n }\n\n default:\n return state\n }\n}\n"],"mappings":"AAAA,SAA0C,qBAAqB;AAC/D,SAAS,2BAA2B;AAE7B,MAAM,gBAAgB;AAAA,EAC3B,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA,EACN,WAAW;AAAA,EACX,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAkBO,SAAS,gBAAgB;AAAA,EAC9B,iBAAiB,oBAAI,IAAI;AAC3B,IAAqD,CAAC,GAAU;AAC9D,SAAO;AACT;AAEO,SAAS,kBAAkB,OAA0C;AAC1E,SAAO;AACT;AAEO,SAAS,iBAAiB,OAAc,MAAoC;AACjF,SAAO,kBAAkB,KAAK,EAAE,IAAI,IAAI,KAAK;AAC/C;AAEO,SAAS,QAAQ,QAAe,gBAAgB,GAAG,QAAuC;AAC/F,MAAI,CAAC,cAAc,MAAM;AAAG,WAAO;AAEnC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,oBAAoB;AACvB,aAAO,IAAI,IAAI,KAAK,EAAE,IAAI,OAAO,QAAQ,MAAM,OAAO,QAAQ,IAAI;AAAA,IAEpE,KAAK,oBAAoB,sBAAsB;AAC7C,YAAM,YAAY,IAAI,IAAI,KAAK;AAE/B,YAAM,UAAU,UAAU,OAAO,OAAO,QAAQ,IAAI;AAEpD,aAAO,UAAU,YAAY;AAAA,IAC/B;AAAA,IAEA;AACE,aAAO;AAAA,EACX;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/state/modules/components-meta.ts"],"sourcesContent":["import { InjectableProps } from '../../runtimes/react/server/injectable-props'\nimport { type Action, type UnknownAction, isKnownAction } from '../actions'\nimport { ReadOnlyActionTypes } from '../actions/internal/read-only-action-types'\n\nexport const ComponentIcon = {\n Accordion: 'accordion',\n Audio: 'audio',\n Billing: 'billing',\n Bolt: 'bolt',\n Button: 'button',\n Card: 'card',\n Cards: 'cards',\n Carousel: 'carousel',\n Chats: 'chats',\n Code: 'code',\n Countdown: 'countdown',\n Cube: 'cube',\n Database: 'database',\n Divider: 'divider',\n Form: 'form',\n Gallery: 'gallery',\n Grid: 'grid',\n Help: 'help',\n Image: 'image',\n Layout: 'layout',\n Lock: 'lock',\n Marker: 'marker',\n Navigation: 'navigation',\n Palette: 'palette',\n SocialLinks: 'social-links',\n Star: 'star',\n Table: 'table',\n Tabs: 'tabs',\n Text: 'text',\n Users: 'users',\n Video: 'video',\n} as const\n\nexport type ComponentIcon = (typeof ComponentIcon)[keyof typeof ComponentIcon]\n\nexport type ComponentMeta = {\n label: string\n icon: ComponentIcon\n hidden: boolean\n description?: string\n builtinSuspense?: boolean\n unstable_migration?: {\n replacementType: string\n }\n server?: boolean\n injectedProps?: Record<string, keyof InjectableProps>\n}\n\nexport type State = Map<string, ComponentMeta>\n\nexport function getInitialState({\n componentsMeta = new Map(),\n}: { componentsMeta?: Map<string, ComponentMeta> } = {}): State {\n return componentsMeta\n}\n\nexport function getComponentsMeta(state: State): Map<string, ComponentMeta> {\n return state\n}\n\nexport function getComponentMeta(state: State, type: string): ComponentMeta | null {\n return getComponentsMeta(state).get(type) ?? null\n}\n\nexport function reducer(state: State = getInitialState(), action: Action | UnknownAction): State {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case ReadOnlyActionTypes.REGISTER_COMPONENT:\n return new Map(state).set(action.payload.type, action.payload.meta)\n\n case ReadOnlyActionTypes.UNREGISTER_COMPONENT: {\n const nextState = new Map(state)\n\n const deleted = nextState.delete(action.payload.type)\n\n return deleted ? nextState : state\n }\n\n default:\n return state\n }\n}\n"],"mappings":"AACA,SAA0C,qBAAqB;AAC/D,SAAS,2BAA2B;AAE7B,MAAM,gBAAgB;AAAA,EAC3B,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA,EACN,WAAW;AAAA,EACX,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAmBO,SAAS,gBAAgB;AAAA,EAC9B,iBAAiB,oBAAI,IAAI;AAC3B,IAAqD,CAAC,GAAU;AAC9D,SAAO;AACT;AAEO,SAAS,kBAAkB,OAA0C;AAC1E,SAAO;AACT;AAEO,SAAS,iBAAiB,OAAc,MAAoC;AACjF,SAAO,kBAAkB,KAAK,EAAE,IAAI,IAAI,KAAK;AAC/C;AAEO,SAAS,QAAQ,QAAe,gBAAgB,GAAG,QAAuC;AAC/F,MAAI,CAAC,cAAc,MAAM;AAAG,WAAO;AAEnC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,oBAAoB;AACvB,aAAO,IAAI,IAAI,KAAK,EAAE,IAAI,OAAO,QAAQ,MAAM,OAAO,QAAQ,IAAI;AAAA,IAEpE,KAAK,oBAAoB,sBAAsB;AAC7C,YAAM,YAAY,IAAI,IAAI,KAAK;AAE/B,YAAM,UAAU,UAAU,OAAO,OAAO,QAAQ,IAAI;AAEpD,aAAO,UAAU,YAAY;AAAA,IAC/B;AAAA,IAEA;AACE,aAAO;AAAA,EACX;AACF;","names":[]}
@@ -19,6 +19,7 @@ import { Page } from "../runtimes/react/components/page";
19
19
  import { RuntimeProvider } from "../runtimes/react/components/RuntimeProvider";
20
20
  import { Slot } from "../runtimes/react/components/Slot";
21
21
  import { RenderElementPayload } from "../runtimes/react/server/render-element-payload";
22
+ import { ServerElementsProvider } from "../runtimes/react/server/components/server-elements-cache";
22
23
  import { GoogleFontLink } from "../runtimes/react/components/GoogleFontLink";
23
24
  import { MakeswiftFonts } from "../runtimes/react/components/MakeswiftFonts";
24
25
  import {
@@ -45,6 +46,7 @@ export {
45
46
  RuntimeProvider,
46
47
  SET_COOKIE_HEADER,
47
48
  SearchParams,
49
+ ServerElementsProvider,
48
50
  Slot,
49
51
  StyleTagSSR,
50
52
  cookieSettingOptions,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/unstable-framework-support/index.ts"],"sourcesContent":["export {\n type SiteVersion,\n serializeSiteVersion,\n deserializeSiteVersion,\n secondsUntilSiteVersionExpiration,\n} from '../api/site-version'\n\nexport {\n type ApiHandlerUserConfig,\n createApiHandler,\n type SitePublishedWebhookPayloadData,\n} from '../api-handler'\nexport { SET_COOKIE_HEADER, cookieSettingOptions } from '../api-handler/cookies'\nexport { REDIRECT_SEARCH_PARAM, redirectLiveHandler } from '../api-handler/handlers/redirect-live'\nexport { toApiRequest, pipeResponseTo } from '../api-handler/node-request-response'\nexport { MAKESWIFT_SITE_VERSION_COOKIE, SearchParams } from '../api-handler/preview'\n\nexport { MakeswiftClient } from '../client'\n\nexport { type BreakpointsInput as Breakpoints } from '../state/modules/breakpoints'\n\nexport {\n type FrameworkContext,\n FrameworkContextProvider,\n} from '../runtimes/react/components/framework-context'\n\nexport { MakeswiftComponent } from '../runtimes/react/components/MakeswiftComponent'\nexport { Page } from '../runtimes/react/components/page'\nexport { RuntimeProvider } from '../runtimes/react/components/RuntimeProvider'\nexport { Slot } from '../runtimes/react/components/Slot'\nexport { RenderElementPayload } from '../runtimes/react/server/render-element-payload'\n\nexport { GoogleFontLink } from '../runtimes/react/components/GoogleFontLink'\nexport { MakeswiftFonts } from '../runtimes/react/components/MakeswiftFonts'\n\nexport {\n createRootStyleCache,\n RootStyleRegistry,\n DefaultRootStyleRegistry,\n styleTagHtml,\n StyleTagSSR,\n type RootStyleProps,\n} from '../runtimes/react/root-style-registry'\n\nexport { ReactRuntime, type StoreKey } from '../runtimes/react/react-runtime'\n"],"mappings":"AAAA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EAEE;AAAA,OAEK;AACP,SAAS,mBAAmB,4BAA4B;AACxD,SAAS,uBAAuB,2BAA2B;AAC3D,SAAS,cAAc,sBAAsB;AAC7C,SAAS,+BAA+B,oBAAoB;AAE5D,SAAS,uBAAuB;AAIhC;AAAA,EAEE;AAAA,OACK;AAEP,SAAS,0BAA0B;AACnC,SAAS,YAAY;AACrB,SAAS,uBAAuB;AAChC,SAAS,YAAY;AACrB,SAAS,4BAA4B;AAErC,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAE/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAEP,SAAS,oBAAmC;","names":[]}
1
+ {"version":3,"sources":["../../../src/unstable-framework-support/index.ts"],"sourcesContent":["export {\n type SiteVersion,\n serializeSiteVersion,\n deserializeSiteVersion,\n secondsUntilSiteVersionExpiration,\n} from '../api/site-version'\n\nexport {\n type ApiHandlerUserConfig,\n createApiHandler,\n type SitePublishedWebhookPayloadData,\n} from '../api-handler'\nexport { SET_COOKIE_HEADER, cookieSettingOptions } from '../api-handler/cookies'\nexport { REDIRECT_SEARCH_PARAM, redirectLiveHandler } from '../api-handler/handlers/redirect-live'\nexport { toApiRequest, pipeResponseTo } from '../api-handler/node-request-response'\nexport { MAKESWIFT_SITE_VERSION_COOKIE, SearchParams } from '../api-handler/preview'\n\nexport { MakeswiftClient } from '../client'\n\nexport { type BreakpointsInput as Breakpoints } from '../state/modules/breakpoints'\n\nexport {\n type FrameworkContext,\n FrameworkContextProvider,\n} from '../runtimes/react/components/framework-context'\n\nexport { MakeswiftComponent } from '../runtimes/react/components/MakeswiftComponent'\nexport { Page } from '../runtimes/react/components/page'\nexport { RuntimeProvider } from '../runtimes/react/components/RuntimeProvider'\nexport { Slot } from '../runtimes/react/components/Slot'\nexport { RenderElementPayload } from '../runtimes/react/server/render-element-payload'\nexport { ServerElementsProvider } from '../runtimes/react/server/components/server-elements-cache'\n\nexport { GoogleFontLink } from '../runtimes/react/components/GoogleFontLink'\nexport { MakeswiftFonts } from '../runtimes/react/components/MakeswiftFonts'\n\nexport {\n createRootStyleCache,\n RootStyleRegistry,\n DefaultRootStyleRegistry,\n styleTagHtml,\n StyleTagSSR,\n type RootStyleProps,\n} from '../runtimes/react/root-style-registry'\n\nexport { ReactRuntime, type StoreKey } from '../runtimes/react/react-runtime'\n"],"mappings":"AAAA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EAEE;AAAA,OAEK;AACP,SAAS,mBAAmB,4BAA4B;AACxD,SAAS,uBAAuB,2BAA2B;AAC3D,SAAS,cAAc,sBAAsB;AAC7C,SAAS,+BAA+B,oBAAoB;AAE5D,SAAS,uBAAuB;AAIhC;AAAA,EAEE;AAAA,OACK;AAEP,SAAS,0BAA0B;AACnC,SAAS,YAAY;AACrB,SAAS,uBAAuB;AAChC,SAAS,YAAY;AACrB,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AAEvC,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAE/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAEP,SAAS,oBAAmC;","names":[]}
@@ -1,9 +1,6 @@
1
1
  export declare const UnversionedResourcesQuery = "\n query UnversionedResources($fileIds: [ID!]!, $tableIds: [ID!]!) {\n files(ids: $fileIds) {\n ...File\n }\n\n tables(ids: $tableIds) {\n ...Table\n }\n }\n\n \n fragment File on File {\n __typename\n id\n name\n publicUrl: publicUrlV2\n extension\n dimensions {\n width\n height\n }\n }\n\n \n fragment Table on Table {\n __typename\n id\n name\n columns {\n __typename\n id\n name\n\n ... on MultipleSelectTableColumn {\n options {\n id\n name\n }\n }\n\n ... on SingleSelectTableColumn {\n options {\n id\n name\n }\n }\n }\n }\n\n";
2
2
  export declare const SwatchQuery = "\n query Swatch($swatchId: ID!) {\n swatch(id: $swatchId) {\n ...Swatch\n }\n }\n\n \n fragment Swatch on Swatch {\n __typename\n id\n hue\n saturation\n lightness\n }\n\n";
3
- export declare const FileQuery = "\n query File($fileId: ID!) {\n file(id: $fileId) {\n ...File\n }\n }\n\n \n fragment File on File {\n __typename\n id\n name\n publicUrl: publicUrlV2\n extension\n dimensions {\n width\n height\n }\n }\n\n";
4
3
  export declare const TypographyQuery = "\n query Typography($typographyId: ID!) {\n typography(id: $typographyId) {\n ...Typography\n }\n }\n\n \n fragment Typography on Typography {\n __typename\n id\n name\n style {\n deviceId\n value {\n fontFamily\n fontSize {\n value\n unit\n }\n color {\n swatchId\n alpha\n }\n lineHeight\n letterSpacing\n fontWeight\n textAlign\n uppercase\n underline\n strikethrough\n italic\n }\n }\n }\n\n";
5
- export declare const TableQuery = "\n query Table($tableId: ID!) {\n table(id: $tableId) {\n ...Table\n }\n }\n\n \n fragment Table on Table {\n __typename\n id\n name\n columns {\n __typename\n id\n name\n\n ... on MultipleSelectTableColumn {\n options {\n id\n name\n }\n }\n\n ... on SingleSelectTableColumn {\n options {\n id\n name\n }\n }\n }\n }\n\n";
6
4
  export declare const TypographiesQuery = "\n query Typographies($typographyIds: [ID!]!) {\n typographies(ids: $typographyIds) {\n ...Typography\n }\n }\n\n \n fragment Typography on Typography {\n __typename\n id\n name\n style {\n deviceId\n value {\n fontFamily\n fontSize {\n value\n unit\n }\n color {\n swatchId\n alpha\n }\n lineHeight\n letterSpacing\n fontWeight\n textAlign\n uppercase\n underline\n strikethrough\n italic\n }\n }\n }\n\n";
7
5
  export declare const GlobalElementQuery = "\n query GlobalElement($globalElementId: ID!) {\n globalElement(id: $globalElementId) {\n ...GlobalElement\n }\n }\n\n \n fragment GlobalElement on GlobalElement {\n __typename\n id\n data\n }\n\n";
8
- export declare const CreateTableRecordMutation = "\n mutation CreateTableRecord($input: CreateTableRecordInput!) {\n createTableRecord(input: $input) {\n tableRecord {\n id\n }\n }\n }\n";
9
6
  //# sourceMappingURL=queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../../../src/api/graphql/documents/queries.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,yBAAyB,2sBAarC,CAAA;AAED,eAAO,MAAM,WAAW,+MAQvB,CAAA;AAED,eAAO,MAAM,SAAS,kQAQrB,CAAA;AAED,eAAO,MAAM,eAAe,6jBAQ3B,CAAA;AAED,eAAO,MAAM,UAAU,wcAQtB,CAAA;AAED,eAAO,MAAM,iBAAiB,ukBAQ7B,CAAA;AAED,eAAO,MAAM,kBAAkB,kOAQ9B,CAAA;AAED,eAAO,MAAM,yBAAyB,sKAQrC,CAAA"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../../../src/api/graphql/documents/queries.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,yBAAyB,2sBAarC,CAAA;AAED,eAAO,MAAM,WAAW,+MAQvB,CAAA;AAED,eAAO,MAAM,eAAe,6jBAQ3B,CAAA;AAED,eAAO,MAAM,iBAAiB,ukBAQ7B,CAAA;AAED,eAAO,MAAM,kBAAkB,kOAQ9B,CAAA"}