@riverbankcms/sdk 0.4.2 → 0.4.3

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 (88) hide show
  1. package/dist/client/client.d.mts +2 -2
  2. package/dist/client/client.d.ts +2 -2
  3. package/dist/client/client.js +11 -1
  4. package/dist/client/client.js.map +1 -1
  5. package/dist/client/client.mjs +11 -1
  6. package/dist/client/client.mjs.map +1 -1
  7. package/dist/client/hooks.d.mts +2 -2
  8. package/dist/client/hooks.d.ts +2 -2
  9. package/dist/client/rendering/client.js +4 -0
  10. package/dist/client/rendering/client.js.map +1 -1
  11. package/dist/client/rendering/client.mjs +4 -0
  12. package/dist/client/rendering/client.mjs.map +1 -1
  13. package/dist/client/usePage--fGlyrgj.d.mts +6439 -0
  14. package/dist/client/usePage-CE7X5NcN.d.ts +6439 -0
  15. package/dist/server/{Layout-kRv5sU81.d.ts → Layout-CXI_VkhN.d.ts} +1 -1
  16. package/dist/server/{Layout-ByUnm35V.d.mts → Layout-p6f3TLw9.d.mts} +1 -1
  17. package/dist/server/{chunk-SPXMMX3C.mjs → chunk-24F6FTCI.mjs} +2 -2
  18. package/dist/server/{chunk-NW5KHH4A.js → chunk-2SSEBAHC.js} +5 -5
  19. package/dist/server/{chunk-NW5KHH4A.js.map → chunk-2SSEBAHC.js.map} +1 -1
  20. package/dist/server/{chunk-ZEAJW6T3.mjs → chunk-ES6QDZUX.mjs} +3 -2
  21. package/dist/server/chunk-ES6QDZUX.mjs.map +1 -0
  22. package/dist/server/{chunk-SWPHIUVE.js → chunk-G35R7N7B.js} +3 -2
  23. package/dist/server/chunk-G35R7N7B.js.map +1 -0
  24. package/dist/server/{chunk-7BOIO2S7.mjs → chunk-LCYGQDAB.mjs} +5 -3
  25. package/dist/server/chunk-LCYGQDAB.mjs.map +1 -0
  26. package/dist/server/{chunk-BLKVTULP.js → chunk-TNYU5EIO.js} +11 -9
  27. package/dist/server/{chunk-BLKVTULP.js.map → chunk-TNYU5EIO.js.map} +1 -1
  28. package/dist/server/{chunk-TNRADRPH.mjs → chunk-U2NI3TS3.mjs} +9 -1
  29. package/dist/server/chunk-U2NI3TS3.mjs.map +1 -0
  30. package/dist/server/{chunk-TKMA6D6U.js → chunk-VHDDXCK6.js} +75 -67
  31. package/dist/server/chunk-VHDDXCK6.js.map +1 -0
  32. package/dist/server/{components-CY8jDQjv.d.mts → components-C75e4poV.d.mts} +3 -3
  33. package/dist/server/{components-D1Z2mSDr.d.ts → components-Dhiemsjd.d.ts} +3 -3
  34. package/dist/server/components.d.mts +5 -5
  35. package/dist/server/components.d.ts +5 -5
  36. package/dist/server/components.js +3 -3
  37. package/dist/server/components.mjs +2 -2
  38. package/dist/server/config-validation.js +1 -1
  39. package/dist/server/config-validation.mjs +1 -1
  40. package/dist/server/config.js +1 -1
  41. package/dist/server/config.mjs +1 -1
  42. package/dist/server/data.d.mts +2 -2
  43. package/dist/server/data.d.ts +2 -2
  44. package/dist/server/{index-DFQwtj3J.d.mts → index-C6o9LPvq.d.mts} +1 -1
  45. package/dist/server/{index-DCIz9Ptv.d.ts → index-CAwBj3-A.d.ts} +1 -1
  46. package/dist/server/index.d.mts +3 -3
  47. package/dist/server/index.d.ts +3 -3
  48. package/dist/server/{loadContent-CWuE8FCx.d.mts → loadContent-CdXfuCuE.d.mts} +3 -3
  49. package/dist/server/{loadContent-DynBuR5f.d.ts → loadContent-CsvQRoxb.d.ts} +3 -3
  50. package/dist/server/{loadPage-BTkKpizX.d.ts → loadPage-BA0HiT-6.d.ts} +14 -3
  51. package/dist/server/{loadPage-DUHBXDEW.js → loadPage-DLC7DJZP.js} +3 -3
  52. package/dist/server/{loadPage-DUHBXDEW.js.map → loadPage-DLC7DJZP.js.map} +1 -1
  53. package/dist/server/{loadPage-LYVKY3WZ.mjs → loadPage-GEGN4UAL.mjs} +2 -2
  54. package/dist/server/{loadPage-B8RmlYgV.d.mts → loadPage-p3AWwwrd.d.mts} +14 -3
  55. package/dist/server/metadata.d.mts +3 -3
  56. package/dist/server/metadata.d.ts +3 -3
  57. package/dist/server/navigation.d.mts +2 -2
  58. package/dist/server/navigation.d.ts +2 -2
  59. package/dist/server/rendering/server.d.mts +4 -4
  60. package/dist/server/rendering/server.d.ts +4 -4
  61. package/dist/server/rendering/server.js +4 -4
  62. package/dist/server/rendering/server.mjs +3 -3
  63. package/dist/server/rendering.d.mts +7 -7
  64. package/dist/server/rendering.d.ts +7 -7
  65. package/dist/server/rendering.js +5 -5
  66. package/dist/server/rendering.mjs +4 -4
  67. package/dist/server/routing.d.mts +3 -3
  68. package/dist/server/routing.d.ts +3 -3
  69. package/dist/server/routing.js +1 -1
  70. package/dist/server/routing.mjs +1 -1
  71. package/dist/server/server.d.mts +5 -5
  72. package/dist/server/server.d.ts +5 -5
  73. package/dist/server/server.js +2 -2
  74. package/dist/server/server.mjs +1 -1
  75. package/dist/server/theme-bridge.js +7 -7
  76. package/dist/server/theme-bridge.mjs +1 -1
  77. package/dist/server/{types-CdrJqlKx.d.mts → types-BLf-hE50.d.mts} +2 -0
  78. package/dist/server/{types-BiRZnxDx.d.ts → types-BWQ-TohG.d.ts} +2 -0
  79. package/dist/server/{types-DkKEctWn.d.mts → types-CdhKJrB0.d.mts} +1 -1
  80. package/dist/server/{types-oCM-fw4O.d.ts → types-Dj8B3QRb.d.ts} +1 -1
  81. package/package.json +3 -3
  82. package/dist/server/chunk-7BOIO2S7.mjs.map +0 -1
  83. package/dist/server/chunk-SWPHIUVE.js.map +0 -1
  84. package/dist/server/chunk-TKMA6D6U.js.map +0 -1
  85. package/dist/server/chunk-TNRADRPH.mjs.map +0 -1
  86. package/dist/server/chunk-ZEAJW6T3.mjs.map +0 -1
  87. /package/dist/server/{chunk-SPXMMX3C.mjs.map → chunk-24F6FTCI.mjs.map} +0 -0
  88. /package/dist/server/{loadPage-LYVKY3WZ.mjs.map → loadPage-GEGN4UAL.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/rendering/helpers/loadPage.ts"],"sourcesContent":["/**\n * Server-side helper to fetch all data needed for <Page> component.\n *\n * Use this in server components, getServerSideProps, or API routes.\n */\n\nimport type { RiverbankClient, SiteResponse } from '../../client/types';\nimport type { PageProps } from '../components/Page';\nimport { prefetchBlockData } from '../../data/prefetchBlockData';\nimport { executeCodeLoaders, mergeLoaderResults } from '../../data/executeCodeLoaders';\nimport type { DataLoaderOverrides } from '../../data/types';\n\n/**\n * SDK config from API response (without siteId which is stripped at storage).\n * This is the runtime representation - for defining configs, use RiverbankSiteConfig.\n */\nexport type RuntimeSdkConfig = NonNullable<SiteResponse['sdkConfig']>;\n\nexport type LoadPageParams = {\n client: RiverbankClient;\n siteId: string;\n path: string;\n pageId?: string;\n /**\n * If true, fetches draft/unpublished content instead of published content.\n * This affects both the page structure and block data loaders.\n * Requires API key with site access.\n *\n * @default false\n */\n preview?: boolean;\n /**\n * Code-based data loaders for custom blocks.\n *\n * Use this to fetch data from external APIs (not just whitelisted CMS endpoints).\n * Keys are block kinds (e.g., 'custom.featured-products').\n *\n * Config-based loaders (defined in riverbank.config.ts) run first.\n * Code loaders run second and take precedence on key conflicts.\n *\n * @example\n * ```typescript\n * const pageData = await loadPage({\n * client,\n * siteId: 'site-123',\n * path: '/',\n * dataLoaderOverrides: {\n * 'custom.featured-products': {\n * products: async (ctx) => {\n * const res = await fetch(`https://api.shop.com/products?category=${ctx.content.categoryId}`);\n * return res.json();\n * },\n * },\n * },\n * });\n * ```\n */\n dataLoaderOverrides?: DataLoaderOverrides;\n /**\n * URL search parameters from the page request.\n * Passed to code-based data loaders for pagination, filtering, etc.\n *\n * @example\n * ```typescript\n * // In Next.js App Router\n * export default async function Page({ params, searchParams }) {\n * const pageData = await loadPage({\n * client,\n * siteId: 'site-123',\n * path: `/${params.slug || ''}`,\n * searchParams: await searchParams,\n * });\n * return <Page {...pageData} />;\n * }\n * ```\n */\n searchParams?: Record<string, string | string[] | undefined>;\n};\n\nexport type LoadPageResult = Omit<PageProps, 'registry' | 'wrapBlock' | 'usePlaceholders' | 'blockOverrides'> & {\n /**\n * SDK site configuration, if available.\n * Contains SDK-defined theme palette, section backgrounds, and style options.\n */\n sdkConfig: RuntimeSdkConfig | null;\n};\n\n/**\n * Server-side helper to fetch all data needed for <Page> component.\n *\n * Fetches site data, page data, and prefetches block data loaders in parallel.\n *\n * @example Next.js App Router (published content)\n * ```tsx\n * import { createRiverbankClient } from '@riverbankcms/sdk';\n * import { loadPage, Page } from '@riverbankcms/sdk/rendering';\n *\n * const client = createRiverbankClient({\n * apiKey: process.env.RIVERBANK_API_KEY!,\n * baseUrl: process.env.NEXT_PUBLIC_DASHBOARD_URL + '/api',\n * });\n *\n * export default async function PageRoute({ params }) {\n * const pageData = await loadPage({\n * client,\n * siteId: 'site-123',\n * path: `/${params.slug || ''}`,\n * });\n *\n * return <Page {...pageData} />;\n * }\n * ```\n *\n * @example Next.js App Router (preview/draft content)\n * ```tsx\n * export default async function PreviewRoute({ params, searchParams }) {\n * const pageData = await loadPage({\n * client,\n * siteId: searchParams.siteId,\n * path: `/${params.slug || ''}`,\n * preview: true, // Fetch draft content\n * });\n *\n * return <Page {...pageData} />;\n * }\n * ```\n *\n * @example Next.js Pages Router (getServerSideProps)\n * ```tsx\n * export async function getServerSideProps({ params }) {\n * const pageData = await loadPage({\n * client,\n * siteId: 'site-123',\n * path: `/${params.slug || ''}`,\n * });\n *\n * return { props: pageData };\n * }\n *\n * export default function PageRoute(props) {\n * return <Page {...props} />;\n * }\n * ```\n */\nexport async function loadPage(params: LoadPageParams): Promise<LoadPageResult> {\n const { client, siteId, path, pageId, preview = false, dataLoaderOverrides, searchParams } = params;\n\n // Fetch site and page data in parallel\n const [site, pageResponse] = await Promise.all([\n client.getSite({ id: siteId }),\n client.getPage({ siteId, path, preview }),\n ]);\n\n // Extract page data (getContentByPath can return page or entry)\n if ('entry' in pageResponse) {\n throw new Error(\n 'This path resolves to a content entry, not a page. ' +\n 'Use loadContent() instead, which handles both pages and entries. ' +\n 'For entries, loadContent() returns the raw entry data for custom rendering.'\n );\n }\n\n const { page: pageData } = pageResponse;\n\n // Convert API response blocks to PageOutline format with content\n // API returns blocks with full content - PageRenderer needs the content field for rendering\n const blocks = pageData.blocks.map((block) => {\n if (!block || typeof block !== 'object') {\n throw new Error('Invalid block format in API response');\n }\n if (typeof block.id !== 'string' && block.id !== null) {\n throw new Error(`Invalid block id: expected string or null, got ${typeof block.id}`);\n }\n if (typeof block.kind !== 'string') {\n throw new Error(`Invalid block kind: expected string, got ${typeof block.kind}`);\n }\n if (typeof block.purpose !== 'string') {\n throw new Error(`Invalid block purpose: expected string, got ${typeof block.purpose}`);\n }\n\n // Include content for rendering\n // API provides `content` (active content for the requested stage)\n // and optionally `draftContent` for preview mode\n const typedBlock = block as {\n id: string | null;\n kind: string;\n purpose: string;\n content?: Record<string, unknown>;\n draftContent?: { data: Record<string, unknown> } | null;\n };\n\n return {\n id: typedBlock.id,\n kind: typedBlock.kind,\n purpose: typedBlock.purpose,\n // Include content for PageRenderer's getRenderableContent()\n content: typedBlock.content ?? {},\n // Include draftContent if available (for preview mode)\n draftContent: typedBlock.draftContent?.data ?? null,\n };\n });\n\n const pageOutline = {\n name: pageData.name,\n path: pageData.path,\n purpose: pageData.purpose,\n blocks,\n };\n\n // Build prefetch context\n const prefetchContext: {\n siteId: string;\n pageId: string;\n previewStage: 'published' | 'preview';\n searchParams?: Record<string, string | string[] | undefined>;\n } = {\n siteId,\n pageId: pageId ?? pageData.id,\n previewStage: preview ? 'preview' : 'published',\n searchParams,\n };\n\n // Prefetch block data loaders (config-based loaders for CMS endpoints)\n // Note: searchParams is intentionally NOT passed to config-based loaders.\n // Config loaders call CMS endpoints which don't need URL params.\n // Only code-based loaders (dataLoaderOverrides) receive searchParams for\n // custom pagination, filtering, and sorting via external APIs.\n const configData = await prefetchBlockData(\n pageOutline,\n prefetchContext,\n client,\n {\n // Pass custom blocks so their config-based loaders are discovered\n customBlocks: site.sdkConfig?.customBlocks,\n }\n );\n\n // Execute code-based loaders (external APIs) and merge results\n let resolvedData = configData;\n if (dataLoaderOverrides && Object.keys(dataLoaderOverrides).length > 0) {\n const codeData = await executeCodeLoaders(pageOutline, prefetchContext, dataLoaderOverrides);\n resolvedData = mergeLoaderResults(configData, codeData);\n }\n\n return {\n page: pageOutline,\n theme: site.theme,\n sdkConfig: site.sdkConfig ?? null,\n siteId,\n resolvedData,\n // Note: routeMap is optional and can be built from site data if needed for internal links.\n // Consumers can construct it from site.pages and pass explicitly via Page component props.\n // Example: const routeMap = site.pages.reduce((map, p) => ({ ...map, [p.id]: p.path }), {});\n };\n}\n"],"mappings":";;;;;;;;;AAgJA,eAAsB,SAAS,QAAiD;AAC9E,QAAM,EAAE,QAAQ,QAAQ,MAAM,QAAQ,UAAU,OAAO,qBAAqB,aAAa,IAAI;AAG7F,QAAM,CAAC,MAAM,YAAY,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC7C,OAAO,QAAQ,EAAE,IAAI,OAAO,CAAC;AAAA,IAC7B,OAAO,QAAQ,EAAE,QAAQ,MAAM,QAAQ,CAAC;AAAA,EAC1C,CAAC;AAGD,MAAI,WAAW,cAAc;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IAGF;AAAA,EACF;AAEA,QAAM,EAAE,MAAM,SAAS,IAAI;AAI3B,QAAM,SAAS,SAAS,OAAO,IAAI,CAAC,UAAU;AAC5C,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AACA,QAAI,OAAO,MAAM,OAAO,YAAY,MAAM,OAAO,MAAM;AACrD,YAAM,IAAI,MAAM,kDAAkD,OAAO,MAAM,EAAE,EAAE;AAAA,IACrF;AACA,QAAI,OAAO,MAAM,SAAS,UAAU;AAClC,YAAM,IAAI,MAAM,4CAA4C,OAAO,MAAM,IAAI,EAAE;AAAA,IACjF;AACA,QAAI,OAAO,MAAM,YAAY,UAAU;AACrC,YAAM,IAAI,MAAM,+CAA+C,OAAO,MAAM,OAAO,EAAE;AAAA,IACvF;AAKA,UAAM,aAAa;AAQnB,WAAO;AAAA,MACL,IAAI,WAAW;AAAA,MACf,MAAM,WAAW;AAAA,MACjB,SAAS,WAAW;AAAA;AAAA,MAEpB,SAAS,WAAW,WAAW,CAAC;AAAA;AAAA,MAEhC,cAAc,WAAW,cAAc,QAAQ;AAAA,IACjD;AAAA,EACF,CAAC;AAED,QAAM,cAAc;AAAA,IAClB,MAAM,SAAS;AAAA,IACf,MAAM,SAAS;AAAA,IACf,SAAS,SAAS;AAAA,IAClB;AAAA,EACF;AAGA,QAAM,kBAKF;AAAA,IACF;AAAA,IACA,QAAQ,UAAU,SAAS;AAAA,IAC3B,cAAc,UAAU,YAAY;AAAA,IACpC;AAAA,EACF;AAOA,QAAM,aAAa,MAAM;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,MAEE,cAAc,KAAK,WAAW;AAAA,IAChC;AAAA,EACF;AAGA,MAAI,eAAe;AACnB,MAAI,uBAAuB,OAAO,KAAK,mBAAmB,EAAE,SAAS,GAAG;AACtE,UAAM,WAAW,MAAM,mBAAmB,aAAa,iBAAiB,mBAAmB;AAC3F,mBAAe,mBAAmB,YAAY,QAAQ;AAAA,EACxD;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,KAAK;AAAA,IACZ,WAAW,KAAK,aAAa;AAAA,IAC7B;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,EAIF;AACF;","names":[]}