@riverbankcms/sdk 0.1.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.
- package/README.md +1892 -0
- package/dist/cli/index.js +327 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client/analytics.d.mts +103 -0
- package/dist/client/analytics.d.ts +103 -0
- package/dist/client/analytics.js +197 -0
- package/dist/client/analytics.js.map +1 -0
- package/dist/client/analytics.mjs +169 -0
- package/dist/client/analytics.mjs.map +1 -0
- package/dist/client/bookings.d.mts +89 -0
- package/dist/client/bookings.d.ts +89 -0
- package/dist/client/bookings.js +34 -0
- package/dist/client/bookings.js.map +1 -0
- package/dist/client/bookings.mjs +11 -0
- package/dist/client/bookings.mjs.map +1 -0
- package/dist/client/client.d.mts +195 -0
- package/dist/client/client.d.ts +195 -0
- package/dist/client/client.js +606 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/client.mjs +572 -0
- package/dist/client/client.mjs.map +1 -0
- package/dist/client/hooks.d.mts +71 -0
- package/dist/client/hooks.d.ts +71 -0
- package/dist/client/hooks.js +264 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/hooks.mjs +235 -0
- package/dist/client/hooks.mjs.map +1 -0
- package/dist/client/rendering/client.d.mts +1 -0
- package/dist/client/rendering/client.d.ts +1 -0
- package/dist/client/rendering/client.js +33 -0
- package/dist/client/rendering/client.js.map +1 -0
- package/dist/client/rendering/client.mjs +8 -0
- package/dist/client/rendering/client.mjs.map +1 -0
- package/dist/client/usePage-BvKAa3Zw.d.mts +366 -0
- package/dist/client/usePage-BvKAa3Zw.d.ts +366 -0
- package/dist/server/chunk-2RW5HAQQ.mjs +86 -0
- package/dist/server/chunk-2RW5HAQQ.mjs.map +1 -0
- package/dist/server/chunk-3KKZVGH4.mjs +179 -0
- package/dist/server/chunk-3KKZVGH4.mjs.map +1 -0
- package/dist/server/chunk-4Z3GPTCS.js +179 -0
- package/dist/server/chunk-4Z3GPTCS.js.map +1 -0
- package/dist/server/chunk-4Z5FBFRL.mjs +211 -0
- package/dist/server/chunk-4Z5FBFRL.mjs.map +1 -0
- package/dist/server/chunk-ADREPXFU.js +86 -0
- package/dist/server/chunk-ADREPXFU.js.map +1 -0
- package/dist/server/chunk-F472SMKX.js +140 -0
- package/dist/server/chunk-F472SMKX.js.map +1 -0
- package/dist/server/chunk-GWBMJPLH.mjs +57 -0
- package/dist/server/chunk-GWBMJPLH.mjs.map +1 -0
- package/dist/server/chunk-JB4LIEFS.js +85 -0
- package/dist/server/chunk-JB4LIEFS.js.map +1 -0
- package/dist/server/chunk-PEAXKTDU.mjs +140 -0
- package/dist/server/chunk-PEAXKTDU.mjs.map +1 -0
- package/dist/server/chunk-QQ6U4QX6.js +120 -0
- package/dist/server/chunk-QQ6U4QX6.js.map +1 -0
- package/dist/server/chunk-R5YGLRUG.mjs +122 -0
- package/dist/server/chunk-R5YGLRUG.mjs.map +1 -0
- package/dist/server/chunk-SW7LE4M3.js +211 -0
- package/dist/server/chunk-SW7LE4M3.js.map +1 -0
- package/dist/server/chunk-W3K7LVPS.mjs +120 -0
- package/dist/server/chunk-W3K7LVPS.mjs.map +1 -0
- package/dist/server/chunk-WKG57P2H.mjs +85 -0
- package/dist/server/chunk-WKG57P2H.mjs.map +1 -0
- package/dist/server/chunk-YHEZMVTS.js +122 -0
- package/dist/server/chunk-YHEZMVTS.js.map +1 -0
- package/dist/server/chunk-YXDDFG3N.js +57 -0
- package/dist/server/chunk-YXDDFG3N.js.map +1 -0
- package/dist/server/components.d.mts +49 -0
- package/dist/server/components.d.ts +49 -0
- package/dist/server/components.js +22 -0
- package/dist/server/components.js.map +1 -0
- package/dist/server/components.mjs +22 -0
- package/dist/server/components.mjs.map +1 -0
- package/dist/server/config-validation.d.mts +300 -0
- package/dist/server/config-validation.d.ts +300 -0
- package/dist/server/config-validation.js +50 -0
- package/dist/server/config-validation.js.map +1 -0
- package/dist/server/config-validation.mjs +50 -0
- package/dist/server/config-validation.mjs.map +1 -0
- package/dist/server/config.d.mts +38 -0
- package/dist/server/config.d.ts +38 -0
- package/dist/server/config.js +44 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/config.mjs +44 -0
- package/dist/server/config.mjs.map +1 -0
- package/dist/server/data.d.mts +108 -0
- package/dist/server/data.d.ts +108 -0
- package/dist/server/data.js +15 -0
- package/dist/server/data.js.map +1 -0
- package/dist/server/data.mjs +15 -0
- package/dist/server/data.mjs.map +1 -0
- package/dist/server/index-B0yI_V6Z.d.mts +18 -0
- package/dist/server/index-C6M0Wfjq.d.ts +18 -0
- package/dist/server/index.d.mts +5 -0
- package/dist/server/index.d.ts +5 -0
- package/dist/server/index.js +12 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +12 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/server/loadContent-CJcbYF3J.d.ts +152 -0
- package/dist/server/loadContent-zhlL4YSE.d.mts +152 -0
- package/dist/server/loadPage-BYmVMk0V.d.ts +216 -0
- package/dist/server/loadPage-CCf15nt8.d.mts +216 -0
- package/dist/server/loadPage-DVH3DW6E.js +9 -0
- package/dist/server/loadPage-DVH3DW6E.js.map +1 -0
- package/dist/server/loadPage-PHQZ6XQZ.mjs +9 -0
- package/dist/server/loadPage-PHQZ6XQZ.mjs.map +1 -0
- package/dist/server/metadata.d.mts +135 -0
- package/dist/server/metadata.d.ts +135 -0
- package/dist/server/metadata.js +68 -0
- package/dist/server/metadata.js.map +1 -0
- package/dist/server/metadata.mjs +68 -0
- package/dist/server/metadata.mjs.map +1 -0
- package/dist/server/rendering/server.d.mts +83 -0
- package/dist/server/rendering/server.d.ts +83 -0
- package/dist/server/rendering/server.js +14 -0
- package/dist/server/rendering/server.js.map +1 -0
- package/dist/server/rendering/server.mjs +14 -0
- package/dist/server/rendering/server.mjs.map +1 -0
- package/dist/server/rendering.d.mts +12 -0
- package/dist/server/rendering.d.ts +12 -0
- package/dist/server/rendering.js +40 -0
- package/dist/server/rendering.js.map +1 -0
- package/dist/server/rendering.mjs +40 -0
- package/dist/server/rendering.mjs.map +1 -0
- package/dist/server/routing.d.mts +115 -0
- package/dist/server/routing.d.ts +115 -0
- package/dist/server/routing.js +57 -0
- package/dist/server/routing.js.map +1 -0
- package/dist/server/routing.mjs +57 -0
- package/dist/server/routing.mjs.map +1 -0
- package/dist/server/server.d.mts +9 -0
- package/dist/server/server.d.ts +9 -0
- package/dist/server/server.js +21 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/server.mjs +21 -0
- package/dist/server/server.mjs.map +1 -0
- package/dist/server/theme-bridge.d.mts +232 -0
- package/dist/server/theme-bridge.d.ts +232 -0
- package/dist/server/theme-bridge.js +231 -0
- package/dist/server/theme-bridge.js.map +1 -0
- package/dist/server/theme-bridge.mjs +231 -0
- package/dist/server/theme-bridge.mjs.map +1 -0
- package/dist/server/theme.d.mts +40 -0
- package/dist/server/theme.d.ts +40 -0
- package/dist/server/theme.js +17 -0
- package/dist/server/theme.js.map +1 -0
- package/dist/server/theme.mjs +17 -0
- package/dist/server/theme.mjs.map +1 -0
- package/dist/server/types-BCeqWtI2.d.mts +333 -0
- package/dist/server/types-BCeqWtI2.d.ts +333 -0
- package/dist/server/types-Bbo01M7P.d.mts +76 -0
- package/dist/server/types-Bbo01M7P.d.ts +76 -0
- package/dist/server/types-C6gmRHLe.d.mts +150 -0
- package/dist/server/types-C6gmRHLe.d.ts +150 -0
- package/package.json +147 -0
- package/src/styles/index.css +10 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { R as RiverbankClient, b as PageProps, c as RiverbankClientConfig } from './usePage-BvKAa3Zw.mjs';
|
|
2
|
+
export { d as Page, U as UsePageParams, a as UsePageResult, u as usePage } from './usePage-BvKAa3Zw.mjs';
|
|
3
|
+
import { Theme } from '@riverbankcms/blocks';
|
|
4
|
+
import { ResolvedBlockData } from '@riverbankcms/blocks/system/data';
|
|
5
|
+
import '@riverbankcms/api';
|
|
6
|
+
import 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Server-side helper to fetch content (page or entry) by path.
|
|
10
|
+
*
|
|
11
|
+
* Use this for dynamic routing where a path could resolve to either
|
|
12
|
+
* a page or a content entry.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Content entry data returned when a path resolves to an entry
|
|
17
|
+
*/
|
|
18
|
+
type ContentEntryData = {
|
|
19
|
+
id: string;
|
|
20
|
+
/** Content type key (e.g., 'blog-post', 'product') */
|
|
21
|
+
type: string | null;
|
|
22
|
+
title: string;
|
|
23
|
+
slug: string | null;
|
|
24
|
+
path: string | null;
|
|
25
|
+
status: string;
|
|
26
|
+
publishAt: string | null;
|
|
27
|
+
/** The raw content fields - use these to render your own UI */
|
|
28
|
+
content: Record<string, unknown>;
|
|
29
|
+
metaTitle: string | null;
|
|
30
|
+
metaDescription: string | null;
|
|
31
|
+
createdAt: string;
|
|
32
|
+
updatedAt: string;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Client-side React hook to fetch content (page or entry) by path.
|
|
37
|
+
*
|
|
38
|
+
* Use this in client components for dynamic routing where a path
|
|
39
|
+
* could resolve to either a page or content entry.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
type UseContentParams = {
|
|
43
|
+
client: RiverbankClient;
|
|
44
|
+
siteId: string;
|
|
45
|
+
path: string;
|
|
46
|
+
/**
|
|
47
|
+
* If true, fetches draft/unpublished content instead of published content.
|
|
48
|
+
* This affects both pages and entries.
|
|
49
|
+
* Requires API key with site access.
|
|
50
|
+
*
|
|
51
|
+
* @default false
|
|
52
|
+
*/
|
|
53
|
+
preview?: boolean;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Loading state
|
|
57
|
+
*/
|
|
58
|
+
type LoadingState = {
|
|
59
|
+
loading: true;
|
|
60
|
+
error: null;
|
|
61
|
+
type: null;
|
|
62
|
+
page: null;
|
|
63
|
+
entry: null;
|
|
64
|
+
theme: null;
|
|
65
|
+
siteId: string;
|
|
66
|
+
resolvedData: null;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Error state
|
|
70
|
+
*/
|
|
71
|
+
type ErrorState = {
|
|
72
|
+
loading: false;
|
|
73
|
+
error: Error;
|
|
74
|
+
type: null;
|
|
75
|
+
page: null;
|
|
76
|
+
entry: null;
|
|
77
|
+
theme: null;
|
|
78
|
+
siteId: string;
|
|
79
|
+
resolvedData: null;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Success state for page content
|
|
83
|
+
*/
|
|
84
|
+
type PageSuccessState = {
|
|
85
|
+
loading: false;
|
|
86
|
+
error: null;
|
|
87
|
+
type: 'page';
|
|
88
|
+
page: PageProps['page'];
|
|
89
|
+
entry: null;
|
|
90
|
+
theme: Theme;
|
|
91
|
+
siteId: string;
|
|
92
|
+
resolvedData: ResolvedBlockData;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Success state for entry content
|
|
96
|
+
*/
|
|
97
|
+
type EntrySuccessState = {
|
|
98
|
+
loading: false;
|
|
99
|
+
error: null;
|
|
100
|
+
type: 'entry';
|
|
101
|
+
page: null;
|
|
102
|
+
entry: ContentEntryData;
|
|
103
|
+
theme: Theme;
|
|
104
|
+
siteId: string;
|
|
105
|
+
resolvedData: null;
|
|
106
|
+
};
|
|
107
|
+
type UseContentResult = LoadingState | ErrorState | PageSuccessState | EntrySuccessState;
|
|
108
|
+
/**
|
|
109
|
+
* Type guard to check if result is loading
|
|
110
|
+
*/
|
|
111
|
+
declare function isContentLoading(result: UseContentResult): result is LoadingState;
|
|
112
|
+
/**
|
|
113
|
+
* Type guard to check if result has an error
|
|
114
|
+
*/
|
|
115
|
+
declare function isContentError(result: UseContentResult): result is ErrorState;
|
|
116
|
+
/**
|
|
117
|
+
* Type guard to check if result is a page
|
|
118
|
+
*/
|
|
119
|
+
declare function isPageContentResult(result: UseContentResult): result is PageSuccessState;
|
|
120
|
+
/**
|
|
121
|
+
* Type guard to check if result is an entry
|
|
122
|
+
*/
|
|
123
|
+
declare function isEntryContentResult(result: UseContentResult): result is EntrySuccessState;
|
|
124
|
+
/**
|
|
125
|
+
* Client-side React hook to fetch content by path.
|
|
126
|
+
*
|
|
127
|
+
* Returns a discriminated union with loading/error states, and either
|
|
128
|
+
* page data (ready for `<Page>` component) or raw entry data (for custom rendering).
|
|
129
|
+
*
|
|
130
|
+
* IMPORTANT: The client object should be stable across renders to avoid
|
|
131
|
+
* unnecessary re-fetches. Create it outside your component or use useMemo.
|
|
132
|
+
*
|
|
133
|
+
* @example Dynamic routing with both pages and entries
|
|
134
|
+
* ```tsx
|
|
135
|
+
* "use client";
|
|
136
|
+
*
|
|
137
|
+
* import { useContent, Page, isPageContentResult } from '@riverbankcms/sdk/client';
|
|
138
|
+
*
|
|
139
|
+
* function DynamicPage({ path }: { path: string }) {
|
|
140
|
+
* const content = useContent({ client, siteId: 'site-123', path });
|
|
141
|
+
*
|
|
142
|
+
* if (content.loading) return <div>Loading...</div>;
|
|
143
|
+
* if (content.error) return <div>Error: {content.error.message}</div>;
|
|
144
|
+
*
|
|
145
|
+
* if (isPageContentResult(content)) {
|
|
146
|
+
* return <Page page={content.page} theme={content.theme} siteId={content.siteId} resolvedData={content.resolvedData} />;
|
|
147
|
+
* }
|
|
148
|
+
*
|
|
149
|
+
* // Render entry with custom UI
|
|
150
|
+
* return (
|
|
151
|
+
* <article>
|
|
152
|
+
* <h1>{content.entry.title}</h1>
|
|
153
|
+
* <div>{content.entry.content.body}</div>
|
|
154
|
+
* </article>
|
|
155
|
+
* );
|
|
156
|
+
* }
|
|
157
|
+
* ```
|
|
158
|
+
*
|
|
159
|
+
* @example Entry-specific rendering based on content type
|
|
160
|
+
* ```tsx
|
|
161
|
+
* const content = useContent({ client, siteId, path });
|
|
162
|
+
*
|
|
163
|
+
* if (content.loading) return <Spinner />;
|
|
164
|
+
* if (content.error) return <Error error={content.error} />;
|
|
165
|
+
*
|
|
166
|
+
* if (content.type === 'entry') {
|
|
167
|
+
* switch (content.entry.type) {
|
|
168
|
+
* case 'blog-post':
|
|
169
|
+
* return <BlogPost entry={content.entry} theme={content.theme} />;
|
|
170
|
+
* case 'product':
|
|
171
|
+
* return <ProductPage entry={content.entry} theme={content.theme} />;
|
|
172
|
+
* }
|
|
173
|
+
* }
|
|
174
|
+
*
|
|
175
|
+
* return <Page {...content} />;
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
declare function useContent(params: UseContentParams): UseContentResult;
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Create a Riverbank CMS client for fetching content
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```ts
|
|
185
|
+
* const client = createRiverbankClient({
|
|
186
|
+
* apiKey: 'bld_live_sk_...',
|
|
187
|
+
* baseUrl: 'https://dashboard.example.com/api',
|
|
188
|
+
* });
|
|
189
|
+
*
|
|
190
|
+
* const site = await client.getSite({ slug: 'my-site' });
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
declare function createRiverbankClient(config: RiverbankClientConfig): RiverbankClient;
|
|
194
|
+
|
|
195
|
+
export { type ContentEntryData, PageProps, RiverbankClient, RiverbankClientConfig, type UseContentParams, type UseContentResult, createRiverbankClient, isContentError, isContentLoading, isEntryContentResult, isPageContentResult, useContent };
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { R as RiverbankClient, b as PageProps, c as RiverbankClientConfig } from './usePage-BvKAa3Zw.js';
|
|
2
|
+
export { d as Page, U as UsePageParams, a as UsePageResult, u as usePage } from './usePage-BvKAa3Zw.js';
|
|
3
|
+
import { Theme } from '@riverbankcms/blocks';
|
|
4
|
+
import { ResolvedBlockData } from '@riverbankcms/blocks/system/data';
|
|
5
|
+
import '@riverbankcms/api';
|
|
6
|
+
import 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Server-side helper to fetch content (page or entry) by path.
|
|
10
|
+
*
|
|
11
|
+
* Use this for dynamic routing where a path could resolve to either
|
|
12
|
+
* a page or a content entry.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Content entry data returned when a path resolves to an entry
|
|
17
|
+
*/
|
|
18
|
+
type ContentEntryData = {
|
|
19
|
+
id: string;
|
|
20
|
+
/** Content type key (e.g., 'blog-post', 'product') */
|
|
21
|
+
type: string | null;
|
|
22
|
+
title: string;
|
|
23
|
+
slug: string | null;
|
|
24
|
+
path: string | null;
|
|
25
|
+
status: string;
|
|
26
|
+
publishAt: string | null;
|
|
27
|
+
/** The raw content fields - use these to render your own UI */
|
|
28
|
+
content: Record<string, unknown>;
|
|
29
|
+
metaTitle: string | null;
|
|
30
|
+
metaDescription: string | null;
|
|
31
|
+
createdAt: string;
|
|
32
|
+
updatedAt: string;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Client-side React hook to fetch content (page or entry) by path.
|
|
37
|
+
*
|
|
38
|
+
* Use this in client components for dynamic routing where a path
|
|
39
|
+
* could resolve to either a page or content entry.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
type UseContentParams = {
|
|
43
|
+
client: RiverbankClient;
|
|
44
|
+
siteId: string;
|
|
45
|
+
path: string;
|
|
46
|
+
/**
|
|
47
|
+
* If true, fetches draft/unpublished content instead of published content.
|
|
48
|
+
* This affects both pages and entries.
|
|
49
|
+
* Requires API key with site access.
|
|
50
|
+
*
|
|
51
|
+
* @default false
|
|
52
|
+
*/
|
|
53
|
+
preview?: boolean;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Loading state
|
|
57
|
+
*/
|
|
58
|
+
type LoadingState = {
|
|
59
|
+
loading: true;
|
|
60
|
+
error: null;
|
|
61
|
+
type: null;
|
|
62
|
+
page: null;
|
|
63
|
+
entry: null;
|
|
64
|
+
theme: null;
|
|
65
|
+
siteId: string;
|
|
66
|
+
resolvedData: null;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Error state
|
|
70
|
+
*/
|
|
71
|
+
type ErrorState = {
|
|
72
|
+
loading: false;
|
|
73
|
+
error: Error;
|
|
74
|
+
type: null;
|
|
75
|
+
page: null;
|
|
76
|
+
entry: null;
|
|
77
|
+
theme: null;
|
|
78
|
+
siteId: string;
|
|
79
|
+
resolvedData: null;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Success state for page content
|
|
83
|
+
*/
|
|
84
|
+
type PageSuccessState = {
|
|
85
|
+
loading: false;
|
|
86
|
+
error: null;
|
|
87
|
+
type: 'page';
|
|
88
|
+
page: PageProps['page'];
|
|
89
|
+
entry: null;
|
|
90
|
+
theme: Theme;
|
|
91
|
+
siteId: string;
|
|
92
|
+
resolvedData: ResolvedBlockData;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Success state for entry content
|
|
96
|
+
*/
|
|
97
|
+
type EntrySuccessState = {
|
|
98
|
+
loading: false;
|
|
99
|
+
error: null;
|
|
100
|
+
type: 'entry';
|
|
101
|
+
page: null;
|
|
102
|
+
entry: ContentEntryData;
|
|
103
|
+
theme: Theme;
|
|
104
|
+
siteId: string;
|
|
105
|
+
resolvedData: null;
|
|
106
|
+
};
|
|
107
|
+
type UseContentResult = LoadingState | ErrorState | PageSuccessState | EntrySuccessState;
|
|
108
|
+
/**
|
|
109
|
+
* Type guard to check if result is loading
|
|
110
|
+
*/
|
|
111
|
+
declare function isContentLoading(result: UseContentResult): result is LoadingState;
|
|
112
|
+
/**
|
|
113
|
+
* Type guard to check if result has an error
|
|
114
|
+
*/
|
|
115
|
+
declare function isContentError(result: UseContentResult): result is ErrorState;
|
|
116
|
+
/**
|
|
117
|
+
* Type guard to check if result is a page
|
|
118
|
+
*/
|
|
119
|
+
declare function isPageContentResult(result: UseContentResult): result is PageSuccessState;
|
|
120
|
+
/**
|
|
121
|
+
* Type guard to check if result is an entry
|
|
122
|
+
*/
|
|
123
|
+
declare function isEntryContentResult(result: UseContentResult): result is EntrySuccessState;
|
|
124
|
+
/**
|
|
125
|
+
* Client-side React hook to fetch content by path.
|
|
126
|
+
*
|
|
127
|
+
* Returns a discriminated union with loading/error states, and either
|
|
128
|
+
* page data (ready for `<Page>` component) or raw entry data (for custom rendering).
|
|
129
|
+
*
|
|
130
|
+
* IMPORTANT: The client object should be stable across renders to avoid
|
|
131
|
+
* unnecessary re-fetches. Create it outside your component or use useMemo.
|
|
132
|
+
*
|
|
133
|
+
* @example Dynamic routing with both pages and entries
|
|
134
|
+
* ```tsx
|
|
135
|
+
* "use client";
|
|
136
|
+
*
|
|
137
|
+
* import { useContent, Page, isPageContentResult } from '@riverbankcms/sdk/client';
|
|
138
|
+
*
|
|
139
|
+
* function DynamicPage({ path }: { path: string }) {
|
|
140
|
+
* const content = useContent({ client, siteId: 'site-123', path });
|
|
141
|
+
*
|
|
142
|
+
* if (content.loading) return <div>Loading...</div>;
|
|
143
|
+
* if (content.error) return <div>Error: {content.error.message}</div>;
|
|
144
|
+
*
|
|
145
|
+
* if (isPageContentResult(content)) {
|
|
146
|
+
* return <Page page={content.page} theme={content.theme} siteId={content.siteId} resolvedData={content.resolvedData} />;
|
|
147
|
+
* }
|
|
148
|
+
*
|
|
149
|
+
* // Render entry with custom UI
|
|
150
|
+
* return (
|
|
151
|
+
* <article>
|
|
152
|
+
* <h1>{content.entry.title}</h1>
|
|
153
|
+
* <div>{content.entry.content.body}</div>
|
|
154
|
+
* </article>
|
|
155
|
+
* );
|
|
156
|
+
* }
|
|
157
|
+
* ```
|
|
158
|
+
*
|
|
159
|
+
* @example Entry-specific rendering based on content type
|
|
160
|
+
* ```tsx
|
|
161
|
+
* const content = useContent({ client, siteId, path });
|
|
162
|
+
*
|
|
163
|
+
* if (content.loading) return <Spinner />;
|
|
164
|
+
* if (content.error) return <Error error={content.error} />;
|
|
165
|
+
*
|
|
166
|
+
* if (content.type === 'entry') {
|
|
167
|
+
* switch (content.entry.type) {
|
|
168
|
+
* case 'blog-post':
|
|
169
|
+
* return <BlogPost entry={content.entry} theme={content.theme} />;
|
|
170
|
+
* case 'product':
|
|
171
|
+
* return <ProductPage entry={content.entry} theme={content.theme} />;
|
|
172
|
+
* }
|
|
173
|
+
* }
|
|
174
|
+
*
|
|
175
|
+
* return <Page {...content} />;
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
declare function useContent(params: UseContentParams): UseContentResult;
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Create a Riverbank CMS client for fetching content
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```ts
|
|
185
|
+
* const client = createRiverbankClient({
|
|
186
|
+
* apiKey: 'bld_live_sk_...',
|
|
187
|
+
* baseUrl: 'https://dashboard.example.com/api',
|
|
188
|
+
* });
|
|
189
|
+
*
|
|
190
|
+
* const site = await client.getSite({ slug: 'my-site' });
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
declare function createRiverbankClient(config: RiverbankClientConfig): RiverbankClient;
|
|
194
|
+
|
|
195
|
+
export { type ContentEntryData, PageProps, RiverbankClient, RiverbankClientConfig, type UseContentParams, type UseContentResult, createRiverbankClient, isContentError, isContentLoading, isEntryContentResult, isPageContentResult, useContent };
|