@riverbankcms/sdk 0.104.3 → 0.107.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/README.md +84 -51
  2. package/dist/{PreviewEditorSidebar-CBMhU9p_.mjs → PreviewEditorSidebar-DpAbAl08.mjs} +1811 -1179
  3. package/dist/{PreviewEditorUI-C5KEw4M8.mjs → PreviewEditorUI-O7cn6Xxv.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-CStABBUh.mjs → PreviewQueryProvider-D0tnKl0t.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-Iq12HjL7.mjs → SdkPreviewModeRuntime-CVB7urtl.mjs} +2144 -393
  6. package/dist/{SiteChromeCustomizeContext-Cx0NMdyv.mjs → SiteChromeCustomizeContext-C_sizso-.mjs} +3825 -2653
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +32945 -1339
  8. package/dist/_dts/api/src/bookingConfig.d.ts +2 -0
  9. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +5 -1
  10. package/dist/_dts/api/src/contentRuntime.d.ts +6 -15
  11. package/dist/_dts/api/src/courses.d.ts +68 -10
  12. package/dist/_dts/api/src/endpoints.d.ts +29 -0
  13. package/dist/_dts/api/src/index.d.ts +124 -124
  14. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +9 -0
  15. package/dist/_dts/api/src/sdkContracts.d.ts +116 -6
  16. package/dist/_dts/api/src/siteOperations.d.ts +1 -0
  17. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +26 -4
  18. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +31 -46
  19. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +36 -4
  20. package/dist/_dts/blocks/src/definitions.d.ts +1 -1
  21. package/dist/_dts/blocks/src/portal/types.d.ts +25 -7
  22. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +2 -2
  23. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +2 -0
  24. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +2 -0
  25. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +4 -0
  26. package/dist/_dts/blocks/src/system/blocks/events/recurring-schedule-projection.d.ts +52 -0
  27. package/dist/_dts/blocks/src/system/blocks/events/recurring-schedule.d.ts +22 -0
  28. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +45 -0
  29. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +10 -0
  30. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +4 -1
  31. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  32. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +9 -0
  33. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +8 -2
  34. package/dist/_dts/blocks/src/system/blocks/offerings-preview/index.d.ts +8 -8
  35. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +24 -24
  36. package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +29 -0
  37. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -1
  38. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  39. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +2 -5
  40. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  41. package/dist/_dts/blocks/src/system/designCapabilities.d.ts +1 -0
  42. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +2 -2
  43. package/dist/_dts/blocks/src/system/node/fragments/styledCard.d.ts +3 -0
  44. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  45. package/dist/_dts/blocks/src/system/runtime/blockComposition.d.ts +2 -0
  46. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +90 -6
  47. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +45 -3
  48. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +1 -0
  49. package/dist/_dts/blocks/src/system/runtime/nodes/commerce/shared/display.d.ts +2 -2
  50. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/logic.d.ts +2 -1
  51. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/view.d.ts +1 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/course-details.server.d.ts +2 -1
  53. package/dist/_dts/blocks/src/system/runtime/nodes/course-page-surface-scope.d.ts +17 -0
  54. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +3 -0
  55. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +5 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.server.d.ts +1 -1
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +9 -18
  58. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +106 -0
  59. package/dist/_dts/blocks/src/system/runtime/nodes/events/RecurringSchedule.d.ts +11 -0
  60. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +7 -3
  61. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +3 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +11 -1
  63. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
  64. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +3 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +6 -6
  66. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +11 -5
  67. package/dist/_dts/blocks/src/system/runtime/nodes/shop.types.d.ts +2 -1
  68. package/dist/_dts/blocks/src/system/runtime/nodes/svg.d.ts +7 -0
  69. package/dist/_dts/core/src/branded.d.ts +44 -0
  70. package/dist/_dts/core/src/dated-offering-settlement.d.ts +47 -0
  71. package/dist/_dts/core/src/event-page-surface-subject.d.ts +44 -0
  72. package/dist/_dts/core/src/index.d.ts +49 -47
  73. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +1452 -15
  74. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +1 -1
  75. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +4 -1
  76. package/dist/_dts/media-core/src/index.d.ts +2 -1
  77. package/dist/_dts/media-core/src/storagePathDomain.d.ts +47 -0
  78. package/dist/_dts/media-core/src/url.d.ts +1 -21
  79. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +4 -2
  80. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -1
  81. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -1
  82. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +3 -9
  83. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +7 -11
  84. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +3 -9
  85. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +2 -6
  86. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +5 -9
  87. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +81 -43
  88. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.typography.d.ts +61 -0
  89. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +7 -17
  90. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +15 -8
  91. package/dist/_dts/preview-next/src/client/preview/typographyFontCatalog.d.ts +57 -0
  92. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +1 -1
  93. package/dist/_dts/sdk/src/cli/commands/push/execute/theme.d.ts +4 -7
  94. package/dist/_dts/sdk/src/cli/commands/style.d.ts +24 -10
  95. package/dist/_dts/sdk/src/cli/site-commands/oneOffCommands.d.ts +3 -3
  96. package/dist/_dts/sdk/src/cli/sync/media.d.ts +16 -2
  97. package/dist/_dts/sdk/src/client/management/blocks.d.ts +1 -1
  98. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  99. package/dist/_dts/sdk/src/client/management/types.d.ts +132 -23
  100. package/dist/_dts/sdk/src/client/types.d.ts +2 -0
  101. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  102. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  103. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  104. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +23 -3
  105. package/dist/_dts/sdk/src/data/dataLoaderContext.d.ts +17 -0
  106. package/dist/_dts/sdk/src/data/dataLoaderValue.d.ts +36 -0
  107. package/dist/_dts/sdk/src/data/defineOwnDataProperty.d.ts +2 -0
  108. package/dist/_dts/sdk/src/data/executeCodeLoaders.d.ts +36 -40
  109. package/dist/_dts/sdk/src/data/index.d.ts +3 -3
  110. package/dist/_dts/sdk/src/data/resolveBlockData.d.ts +54 -0
  111. package/dist/_dts/sdk/src/data/types.d.ts +43 -78
  112. package/dist/_dts/sdk/src/next/index.d.ts +1 -0
  113. package/dist/_dts/sdk/src/next/redirect-destination.d.ts +1 -1
  114. package/dist/_dts/sdk/src/next/resolveTheme.d.ts +2 -1
  115. package/dist/_dts/sdk/src/next/types.d.ts +10 -1
  116. package/dist/_dts/sdk/src/public-api/contracts.d.ts +3 -8
  117. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +9 -4
  118. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +6 -10
  119. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -0
  120. package/dist/_dts/sdk/src/server.d.ts +4 -3
  121. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  122. package/dist/_dts/sdk/src/version.d.ts +1 -1
  123. package/dist/_dts/site-commands/src/capabilityGaps.d.ts +2 -2
  124. package/dist/_dts/site-commands/src/commands.d.ts +921 -30
  125. package/dist/_dts/theme-core/src/buttons/generateDefaultButtonSystem.d.ts +5 -1
  126. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  127. package/dist/_dts/theme-core/src/buttons/personalities/quiet-arrow.d.ts +17 -0
  128. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +2 -2
  129. package/dist/_dts/theme-core/src/buttons/types.d.ts +9 -5
  130. package/dist/_dts/theme-core/src/data.d.ts +12 -0
  131. package/dist/_dts/theme-core/src/fonts/index.d.ts +1 -1
  132. package/dist/_dts/theme-core/src/fonts/types.d.ts +6 -0
  133. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  134. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +36 -24
  135. package/dist/_dts/theme-core/src/palette/colors.d.ts +12 -0
  136. package/dist/_dts/theme-core/src/palette/curated/brand-led.d.ts +10 -5
  137. package/dist/_dts/theme-core/src/palette/curated/high-contrast.d.ts +6 -3
  138. package/dist/_dts/theme-core/src/palette/curated/index.d.ts +31 -236
  139. package/dist/_dts/theme-core/src/palette/curated/soft-natural.d.ts +8 -4
  140. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +14 -12
  141. package/dist/_dts/theme-core/src/palette/curated/warm-dark.d.ts +4 -2
  142. package/dist/_dts/theme-core/src/palette/curated/warm-neutral.d.ts +8 -4
  143. package/dist/_dts/theme-core/src/palette/editorState.d.ts +33 -3
  144. package/dist/_dts/theme-core/src/palette/index.d.ts +0 -4
  145. package/dist/_dts/theme-core/src/palette/libraryModel.d.ts +12 -6
  146. package/dist/_dts/theme-core/src/palette/persistenceReadSource.d.ts +20 -72
  147. package/dist/_dts/theme-core/src/palette/resolveSelection.d.ts +29 -4
  148. package/dist/_dts/theme-core/src/palette/selection.d.ts +6 -4
  149. package/dist/_dts/theme-core/src/schema.d.ts +121 -4
  150. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +218 -158
  151. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +5 -6
  152. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +218 -158
  153. package/dist/_dts/theme-core/src/site-styles/compositionBudget.d.ts +1 -0
  154. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
  155. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +161 -51
  156. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +6 -0
  157. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  158. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -1
  159. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +24 -1
  160. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +14 -48
  161. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +10 -23
  162. package/dist/_dts/theme-core/src/site-styles/siteStyleThemeCompiler.d.ts +1 -2
  163. package/dist/_dts/theme-core/src/site-styles/siteStyleTypography.d.ts +456 -0
  164. package/dist/_dts/theme-core/src/site-styles/types.d.ts +52 -3
  165. package/dist/cli/index.mjs +3155 -1701
  166. package/dist/client/{DiscountCodeDisclosure-BXM73_E5.mjs → DiscountCodeDisclosure-BwGkvmVH.mjs} +1 -1
  167. package/dist/client/{EventCombined.client-DT5elP7j.mjs → EventCombined.client-JnWE6Hzc.mjs} +3 -3
  168. package/dist/client/{EventListing.client-pTYGfV9C.mjs → EventListing.client-DQewc_kg.mjs} +2 -2
  169. package/dist/client/{LeafletStaticMap-dQrhlUe3.mjs → LeafletStaticMap-DPAU3SFt.mjs} +1 -1
  170. package/dist/client/{MagicLinkForm-u6Dul4j5.mjs → MagicLinkForm-D4kpWCbW.mjs} +2 -2
  171. package/dist/client/{StepIndicator-nWqineJ2.mjs → StepIndicator-CBlkb4rA.mjs} +2 -2
  172. package/dist/client/{accordion-CSJcTUyH.mjs → accordion-DAIBVpTS.mjs} +1 -1
  173. package/dist/client/{bookingForm-C73wOuVa.mjs → bookingForm-DZ-4l5_1.mjs} +7 -7
  174. package/dist/client/bookings.mjs +239 -110
  175. package/dist/client/{buttons-DfYyqt8C.mjs → buttons-DJgynGHQ.mjs} +122 -58
  176. package/dist/client/{carousel-fMBb0JSc.mjs → carousel-D-SLfX8r.mjs} +1 -1
  177. package/dist/client/{cart-BtaCwT3S.mjs → cart-CEgbgJhX.mjs} +3 -3
  178. package/dist/client/{checkout-DkTwZSnh.mjs → checkout-CXWrCRAA.mjs} +3 -3
  179. package/dist/client/client.mjs +4300 -1560
  180. package/dist/client/{colorStyles-Wyl6JujD.mjs → colorStyles-jZS6KfkP.mjs} +1 -1
  181. package/dist/client/{colorTokenParts-dT8MISgJ.mjs → colorTokenParts-CMugwvX_.mjs} +3 -1
  182. package/dist/client/{courseRegistration-DnLmapJu.mjs → courseRegistration-DVmLrRVz.mjs} +56 -21
  183. package/dist/client/{eventCalendar-BvLOc9KY.mjs → eventCalendar-DCuyPY_c.mjs} +29 -21
  184. package/dist/client/{eventCombined-kShgJPQr.mjs → eventCombined-kP2CA2D4.mjs} +2 -2
  185. package/dist/client/{eventDetails-C5NTM0Vo.mjs → eventDetails-DU0LeF5e.mjs} +4 -4
  186. package/dist/client/{eventListing-B82ZdKP6.mjs → eventListing-CcHF87BI.mjs} +2 -2
  187. package/dist/client/{eventRegistration-qJVFqBWo.mjs → eventRegistration-DJnR0yFH.mjs} +8 -8
  188. package/dist/client/{form-BvAcKiuu.mjs → form-CH1lCusH.mjs} +2 -2
  189. package/dist/client/{headerSection-NvAiEHAg.mjs → headerSection-CBPFZoku.mjs} +3 -3
  190. package/dist/client/hooks.mjs +2958 -1848
  191. package/dist/client/{locationMap-D0j52xfI.mjs → locationMap-Cx1hBg5n.mjs} +3 -3
  192. package/dist/client/{media-BCW_g2cQ.mjs → media-DHtSxS5V.mjs} +61 -56
  193. package/dist/client/{newsletterForm-B8_i93qH.mjs → newsletterForm-1ZL_ti9u.mjs} +3 -3
  194. package/dist/client/{pricing-DIYnyHOk.mjs → pricing-BIbzmV0G.mjs} +1 -1
  195. package/dist/client/{productDetail-w0eAHkuQ.mjs → productDetail-BTh5gHBV.mjs} +3 -3
  196. package/dist/client/{productList-Vsguq5Xt.mjs → productList-Cc7OMrqN.mjs} +3 -3
  197. package/dist/client/{propsDecoder-CD2pJ1WB.mjs → propsDecoder-oR-M-ISN.mjs} +192 -59
  198. package/dist/client/rendering/client.mjs +2031 -1239
  199. package/dist/client/rendering/islands.mjs +20 -20
  200. package/dist/client/rendering.mjs +4889 -1712
  201. package/dist/client/{shop-Dgxs-Q8F.mjs → shop-CQ_YbCnn.mjs} +8 -8
  202. package/dist/client/{shop-commerce-DJAhsTaT.mjs → shop-commerce-BM-AoD3M.mjs} +6 -6
  203. package/dist/client/{shop-commerce-store-CfCXltXW.mjs → shop-commerce-store-DFMQhU5p.mjs} +1 -1
  204. package/dist/client/{shopShared-CmDcPXUt.mjs → shopShared-D0SKO2Cu.mjs} +3 -3
  205. package/dist/client/{useDiscountCodeUi-CirrT2bM.mjs → useDiscountCodeUi-CrG4_ARt.mjs} +1 -1
  206. package/dist/client/{useEventFilters-CNZxlCcO.mjs → useEventFilters-CxK8Fekl.mjs} +6 -6
  207. package/dist/client/{usePolling-Baks_iBI.mjs → usePolling-jcVryNgZ.mjs} +2 -2
  208. package/dist/preview-next/before-render.mjs +40 -1
  209. package/dist/preview-next/client/runtime.mjs +4 -4
  210. package/dist/preview-next/middleware.mjs +40 -1
  211. package/dist/{previewAuthStore-CfquDtTh.mjs → previewAuthStore-BPcJPzdz.mjs} +40 -1
  212. package/dist/{sdk-runtime-BfNiFeNJ.mjs → sdk-runtime-C39Rsk-x.mjs} +2 -2
  213. package/dist/{separator-BhAR_Xmf.mjs → separator-BoMSQnsP.mjs} +1 -1
  214. package/dist/server/components.mjs +4661 -2162
  215. package/dist/server/config-validation.mjs +2728 -1847
  216. package/dist/server/config.mjs +2728 -1847
  217. package/dist/server/data.mjs +3381 -1915
  218. package/dist/server/index.mjs +46 -4
  219. package/dist/server/next/middleware.mjs +1 -1
  220. package/dist/server/next.mjs +5555 -2225
  221. package/dist/server/page-converter.mjs +3058 -2182
  222. package/dist/server/prebuild.mjs +1 -1
  223. package/dist/server/rendering/server.mjs +4850 -2125
  224. package/dist/server/rendering.mjs +5664 -2464
  225. package/dist/server/routing.mjs +3027 -1509
  226. package/dist/server/server.mjs +3844 -2217
  227. package/dist/server/theme-bridge.mjs +9121 -7765
  228. package/dist/server/theme.mjs +152 -59
  229. package/dist/styles/index.css +1217 -31
  230. package/package.json +1 -1
  231. package/dist/_dts/preview-next/src/client/preview/typographySelectionInput.d.ts +0 -16
  232. package/dist/_dts/theme-core/src/palette/historicalThemePalette.d.ts +0 -44
  233. package/dist/_dts/theme-core/src/palette/legacyRuntimeProjection.d.ts +0 -55
  234. package/dist/_dts/theme-core/src/palette/legacySelection.d.ts +0 -45
  235. package/dist/_dts/theme-core/src/palette/paletteCompatibilityTransition.d.ts +0 -232
  236. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +0 -234
package/README.md CHANGED
@@ -191,19 +191,26 @@ SDK sites that need bespoke event registration UI can use the headless event reg
191
191
 
192
192
  ```tsx
193
193
  import { loadPage, Page } from '@riverbankcms/sdk';
194
+ import type { DataLoaderOverrides } from '@riverbankcms/sdk/data';
195
+
196
+ const dataLoaderOverrides = {
197
+ 'custom.block-id': {
198
+ loaderKey: async ({ content }) => {
199
+ const fieldValue = typeof content.fieldValue === 'string'
200
+ ? content.fieldValue
201
+ : '';
202
+ return fetchAndParseHostData(fieldValue);
203
+ },
204
+ },
205
+ } satisfies DataLoaderOverrides;
194
206
 
195
207
  // Fetch all page data
196
208
  const pageData = await loadPage({
197
209
  client,
198
- siteId: string,
199
- path: string,
200
- preview?: boolean, // Default: false - set true for draft content
201
- pageId?: string, // Optional: explicit page ID
202
- dataLoaderOverrides?: { // Optional: code-based data loaders for custom blocks
203
- 'custom.block-id': {
204
- loaderKey: async (ctx) => fetchData(ctx.content.fieldValue),
205
- },
206
- },
210
+ siteId,
211
+ path,
212
+ preview: false,
213
+ dataLoaderOverrides,
207
214
  });
208
215
 
209
216
  // Render the page
@@ -2325,9 +2332,9 @@ All field types from the CMS are supported:
2325
2332
  Custom blocks can fetch data automatically using data loaders. There are two approaches:
2326
2333
 
2327
2334
  1. **Config-based loaders** - Declarative loaders defined in `riverbank.config.ts` for whitelisted CMS endpoints
2328
- 2. **Code-based loaders** - Functions passed to `loadPage()` for external APIs
2335
+ 2. **Code-based loaders** - Server-only functions passed to `createCatchAllPage()`, `loadContent()`, or `loadPage()` for host databases and APIs
2329
2336
 
2330
- Both loader types run server-side during `loadPage()`. Data is passed to your component via the `data` prop.
2337
+ Both loader types run server-side during normal page rendering. Data is passed to your component via the `data` prop.
2331
2338
 
2332
2339
  ### Config-Based Loaders (CMS Endpoints)
2333
2340
 
@@ -2547,49 +2554,61 @@ export function FeaturedPosts({
2547
2554
 
2548
2555
  ### Code-Based Loaders (External APIs)
2549
2556
 
2550
- For data from external APIs, pass loader functions to `loadPage()`. This gives you full control over the fetch logic.
2557
+ For host database or API data, declare a server-only registry and pass it to the canonical catch-all. The recursive `DataLoaderValue` return type excludes functions, `undefined`, dates, class instances, and other values that cannot safely cross the RSC boundary. Riverbank also validates values defensively at runtime for JavaScript, `any`, and hostile object boundaries.
2551
2558
 
2552
2559
  **Example: E-commerce Product Block**
2553
2560
 
2554
2561
  ```typescript
2555
- // app/[...slug]/page.tsx
2556
- import { loadPage, Page } from '@riverbankcms/sdk';
2557
- import { FeaturedProducts } from '@/components/blocks/FeaturedProducts';
2558
-
2559
- export default async function CMSPage({ params }) {
2560
- const pageData = await loadPage({
2561
- client,
2562
- siteId: process.env.SITE_ID!,
2563
- path: `/${params.slug?.join('/') || ''}`,
2564
- dataLoaderOverrides: {
2565
- 'custom.featured-products': {
2566
- products: async (ctx) => {
2567
- // Access block content for parameters
2568
- const categoryId = ctx.content.categoryId as string;
2569
- const limit = (ctx.content.limit as number) ?? 10;
2570
-
2571
- const res = await fetch(
2572
- `https://api.shop.com/products?category=${categoryId}&limit=${limit}`,
2573
- { headers: { 'Authorization': `Bearer ${process.env.SHOP_API_KEY}` } }
2574
- );
2562
+ // src/lib/data-loader-overrides.server.ts
2563
+ import 'server-only';
2575
2564
 
2576
- return res.json();
2577
- },
2578
- },
2579
- },
2580
- });
2565
+ import type { DataLoaderOverrides, DataLoaderValue } from '@riverbankcms/sdk/next';
2566
+ import { parseProductPayload } from '@/lib/product-api-schema';
2581
2567
 
2582
- return (
2583
- <Page
2584
- {...pageData}
2585
- blockOverrides={{
2586
- 'custom.featured-products': FeaturedProducts,
2587
- }}
2588
- />
2568
+ async function fetchProducts(categoryId: string, limit: number): Promise<DataLoaderValue> {
2569
+ const response = await fetch(
2570
+ `https://api.shop.com/products?category=${encodeURIComponent(categoryId)}&limit=${limit}`,
2571
+ { headers: { Authorization: `Bearer ${process.env.SHOP_API_KEY}` } },
2589
2572
  );
2573
+ if (!response.ok) throw new Error(`Product API returned ${response.status}`);
2574
+
2575
+ const payload: unknown = await response.json();
2576
+ // Parse and validate payload here with your application's boundary schema.
2577
+ return parseProductPayload(payload);
2590
2578
  }
2579
+
2580
+ export const dataLoaderOverrides = {
2581
+ 'custom.featured-products': {
2582
+ products: async ({ content, searchParams }) => {
2583
+ const categoryId = typeof content.categoryId === 'string' ? content.categoryId : '';
2584
+ const configuredLimit = typeof content.limit === 'number' ? content.limit : 10;
2585
+ const queryLimit = typeof searchParams.limit === 'string'
2586
+ ? Number.parseInt(searchParams.limit, 10)
2587
+ : configuredLimit;
2588
+ return fetchProducts(categoryId, Number.isFinite(queryLimit) ? queryLimit : configuredLimit);
2589
+ },
2590
+ },
2591
+ } satisfies DataLoaderOverrides;
2591
2592
  ```
2592
2593
 
2594
+ ```typescript
2595
+ // src/app/[[...slug]]/page.tsx
2596
+ import { createCatchAllPage } from '@riverbankcms/sdk/next';
2597
+ import { dataLoaderOverrides } from '@/lib/data-loader-overrides.server';
2598
+
2599
+ const { Page, generateMetadata } = createCatchAllPage({
2600
+ getClient,
2601
+ config,
2602
+ dataLoaderOverrides,
2603
+ blockOverrides: { 'custom.featured-products': FeaturedProducts },
2604
+ });
2605
+
2606
+ export default Page;
2607
+ export { generateMetadata };
2608
+ ```
2609
+
2610
+ Keep the `server-only` marker at the top of the registry so Next.js turns an accidental Client Component import into a build error. `generateMetadata()` never receives or runs host loaders—even with `customMetadata`—so a normal request does not repeat host queries for metadata and rendering.
2611
+
2593
2612
  ```tsx
2594
2613
  // components/blocks/FeaturedProducts.tsx
2595
2614
  import type { BlockOverrideProps } from '@riverbankcms/sdk/rendering';
@@ -2646,6 +2665,12 @@ interface DataLoaderContext {
2646
2665
 
2647
2666
  /** Whether fetching preview/draft content */
2648
2667
  previewStage: 'published' | 'preview';
2668
+
2669
+ /** Immutable URL query parameters */
2670
+ searchParams: Readonly<Record<string, string | readonly string[] | undefined>>;
2671
+
2672
+ /** Exact page, entry-template, or page-surface-template owner */
2673
+ renderTarget: DataLoaderRenderTarget;
2649
2674
  }
2650
2675
  ```
2651
2676
 
@@ -2669,14 +2694,18 @@ customBlocks: [{
2669
2694
  },
2670
2695
  }]
2671
2696
 
2672
- // page.tsx - Code loader for external API
2673
- const pageData = await loadPage({
2674
- client,
2675
- siteId,
2676
- path: '/',
2697
+ // src/app/[[...slug]]/page.tsx - host loader for an external API
2698
+ const { Page, generateMetadata } = createCatchAllPage({
2699
+ getClient,
2700
+ config,
2677
2701
  dataLoaderOverrides: {
2678
2702
  'custom.product-showcase': {
2679
- products: async (ctx) => fetchProductsFromShopify(ctx.content.collectionId),
2703
+ products: async ({ content }) => {
2704
+ const collectionId = typeof content.collectionId === 'string'
2705
+ ? content.collectionId
2706
+ : '';
2707
+ return fetchProductsFromShopify(collectionId);
2708
+ },
2680
2709
  },
2681
2710
  },
2682
2711
  });
@@ -2688,7 +2717,7 @@ const pageData = await loadPage({
2688
2717
 
2689
2718
  Data loaders are best-effort. If a loader fails:
2690
2719
 
2691
- - The error is logged to console
2720
+ - A structured warning identifies the site, page/template, block, loader key, stage, and failure kind without including thrown errors, block content, secrets, or loader results
2692
2721
  - The loader key is undefined in the `data` prop
2693
2722
  - Other loaders continue executing
2694
2723
  - Your component should handle missing data gracefully
@@ -2724,6 +2753,10 @@ import {
2724
2753
  type DataLoaderFn,
2725
2754
  type BlockLoaderMap,
2726
2755
  type DataLoaderOverrides,
2756
+ type DataLoaderPreviewStage,
2757
+ type DataLoaderRenderTarget,
2758
+ type DataLoaderSearchParams,
2759
+ type DataLoaderValue,
2727
2760
  type PrefetchContext,
2728
2761
  type ResolvedBlockData,
2729
2762
  type SdkPrefetchOptions,