@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.
Files changed (157) hide show
  1. package/README.md +1892 -0
  2. package/dist/cli/index.js +327 -0
  3. package/dist/cli/index.js.map +1 -0
  4. package/dist/client/analytics.d.mts +103 -0
  5. package/dist/client/analytics.d.ts +103 -0
  6. package/dist/client/analytics.js +197 -0
  7. package/dist/client/analytics.js.map +1 -0
  8. package/dist/client/analytics.mjs +169 -0
  9. package/dist/client/analytics.mjs.map +1 -0
  10. package/dist/client/bookings.d.mts +89 -0
  11. package/dist/client/bookings.d.ts +89 -0
  12. package/dist/client/bookings.js +34 -0
  13. package/dist/client/bookings.js.map +1 -0
  14. package/dist/client/bookings.mjs +11 -0
  15. package/dist/client/bookings.mjs.map +1 -0
  16. package/dist/client/client.d.mts +195 -0
  17. package/dist/client/client.d.ts +195 -0
  18. package/dist/client/client.js +606 -0
  19. package/dist/client/client.js.map +1 -0
  20. package/dist/client/client.mjs +572 -0
  21. package/dist/client/client.mjs.map +1 -0
  22. package/dist/client/hooks.d.mts +71 -0
  23. package/dist/client/hooks.d.ts +71 -0
  24. package/dist/client/hooks.js +264 -0
  25. package/dist/client/hooks.js.map +1 -0
  26. package/dist/client/hooks.mjs +235 -0
  27. package/dist/client/hooks.mjs.map +1 -0
  28. package/dist/client/rendering/client.d.mts +1 -0
  29. package/dist/client/rendering/client.d.ts +1 -0
  30. package/dist/client/rendering/client.js +33 -0
  31. package/dist/client/rendering/client.js.map +1 -0
  32. package/dist/client/rendering/client.mjs +8 -0
  33. package/dist/client/rendering/client.mjs.map +1 -0
  34. package/dist/client/usePage-BvKAa3Zw.d.mts +366 -0
  35. package/dist/client/usePage-BvKAa3Zw.d.ts +366 -0
  36. package/dist/server/chunk-2RW5HAQQ.mjs +86 -0
  37. package/dist/server/chunk-2RW5HAQQ.mjs.map +1 -0
  38. package/dist/server/chunk-3KKZVGH4.mjs +179 -0
  39. package/dist/server/chunk-3KKZVGH4.mjs.map +1 -0
  40. package/dist/server/chunk-4Z3GPTCS.js +179 -0
  41. package/dist/server/chunk-4Z3GPTCS.js.map +1 -0
  42. package/dist/server/chunk-4Z5FBFRL.mjs +211 -0
  43. package/dist/server/chunk-4Z5FBFRL.mjs.map +1 -0
  44. package/dist/server/chunk-ADREPXFU.js +86 -0
  45. package/dist/server/chunk-ADREPXFU.js.map +1 -0
  46. package/dist/server/chunk-F472SMKX.js +140 -0
  47. package/dist/server/chunk-F472SMKX.js.map +1 -0
  48. package/dist/server/chunk-GWBMJPLH.mjs +57 -0
  49. package/dist/server/chunk-GWBMJPLH.mjs.map +1 -0
  50. package/dist/server/chunk-JB4LIEFS.js +85 -0
  51. package/dist/server/chunk-JB4LIEFS.js.map +1 -0
  52. package/dist/server/chunk-PEAXKTDU.mjs +140 -0
  53. package/dist/server/chunk-PEAXKTDU.mjs.map +1 -0
  54. package/dist/server/chunk-QQ6U4QX6.js +120 -0
  55. package/dist/server/chunk-QQ6U4QX6.js.map +1 -0
  56. package/dist/server/chunk-R5YGLRUG.mjs +122 -0
  57. package/dist/server/chunk-R5YGLRUG.mjs.map +1 -0
  58. package/dist/server/chunk-SW7LE4M3.js +211 -0
  59. package/dist/server/chunk-SW7LE4M3.js.map +1 -0
  60. package/dist/server/chunk-W3K7LVPS.mjs +120 -0
  61. package/dist/server/chunk-W3K7LVPS.mjs.map +1 -0
  62. package/dist/server/chunk-WKG57P2H.mjs +85 -0
  63. package/dist/server/chunk-WKG57P2H.mjs.map +1 -0
  64. package/dist/server/chunk-YHEZMVTS.js +122 -0
  65. package/dist/server/chunk-YHEZMVTS.js.map +1 -0
  66. package/dist/server/chunk-YXDDFG3N.js +57 -0
  67. package/dist/server/chunk-YXDDFG3N.js.map +1 -0
  68. package/dist/server/components.d.mts +49 -0
  69. package/dist/server/components.d.ts +49 -0
  70. package/dist/server/components.js +22 -0
  71. package/dist/server/components.js.map +1 -0
  72. package/dist/server/components.mjs +22 -0
  73. package/dist/server/components.mjs.map +1 -0
  74. package/dist/server/config-validation.d.mts +300 -0
  75. package/dist/server/config-validation.d.ts +300 -0
  76. package/dist/server/config-validation.js +50 -0
  77. package/dist/server/config-validation.js.map +1 -0
  78. package/dist/server/config-validation.mjs +50 -0
  79. package/dist/server/config-validation.mjs.map +1 -0
  80. package/dist/server/config.d.mts +38 -0
  81. package/dist/server/config.d.ts +38 -0
  82. package/dist/server/config.js +44 -0
  83. package/dist/server/config.js.map +1 -0
  84. package/dist/server/config.mjs +44 -0
  85. package/dist/server/config.mjs.map +1 -0
  86. package/dist/server/data.d.mts +108 -0
  87. package/dist/server/data.d.ts +108 -0
  88. package/dist/server/data.js +15 -0
  89. package/dist/server/data.js.map +1 -0
  90. package/dist/server/data.mjs +15 -0
  91. package/dist/server/data.mjs.map +1 -0
  92. package/dist/server/index-B0yI_V6Z.d.mts +18 -0
  93. package/dist/server/index-C6M0Wfjq.d.ts +18 -0
  94. package/dist/server/index.d.mts +5 -0
  95. package/dist/server/index.d.ts +5 -0
  96. package/dist/server/index.js +12 -0
  97. package/dist/server/index.js.map +1 -0
  98. package/dist/server/index.mjs +12 -0
  99. package/dist/server/index.mjs.map +1 -0
  100. package/dist/server/loadContent-CJcbYF3J.d.ts +152 -0
  101. package/dist/server/loadContent-zhlL4YSE.d.mts +152 -0
  102. package/dist/server/loadPage-BYmVMk0V.d.ts +216 -0
  103. package/dist/server/loadPage-CCf15nt8.d.mts +216 -0
  104. package/dist/server/loadPage-DVH3DW6E.js +9 -0
  105. package/dist/server/loadPage-DVH3DW6E.js.map +1 -0
  106. package/dist/server/loadPage-PHQZ6XQZ.mjs +9 -0
  107. package/dist/server/loadPage-PHQZ6XQZ.mjs.map +1 -0
  108. package/dist/server/metadata.d.mts +135 -0
  109. package/dist/server/metadata.d.ts +135 -0
  110. package/dist/server/metadata.js +68 -0
  111. package/dist/server/metadata.js.map +1 -0
  112. package/dist/server/metadata.mjs +68 -0
  113. package/dist/server/metadata.mjs.map +1 -0
  114. package/dist/server/rendering/server.d.mts +83 -0
  115. package/dist/server/rendering/server.d.ts +83 -0
  116. package/dist/server/rendering/server.js +14 -0
  117. package/dist/server/rendering/server.js.map +1 -0
  118. package/dist/server/rendering/server.mjs +14 -0
  119. package/dist/server/rendering/server.mjs.map +1 -0
  120. package/dist/server/rendering.d.mts +12 -0
  121. package/dist/server/rendering.d.ts +12 -0
  122. package/dist/server/rendering.js +40 -0
  123. package/dist/server/rendering.js.map +1 -0
  124. package/dist/server/rendering.mjs +40 -0
  125. package/dist/server/rendering.mjs.map +1 -0
  126. package/dist/server/routing.d.mts +115 -0
  127. package/dist/server/routing.d.ts +115 -0
  128. package/dist/server/routing.js +57 -0
  129. package/dist/server/routing.js.map +1 -0
  130. package/dist/server/routing.mjs +57 -0
  131. package/dist/server/routing.mjs.map +1 -0
  132. package/dist/server/server.d.mts +9 -0
  133. package/dist/server/server.d.ts +9 -0
  134. package/dist/server/server.js +21 -0
  135. package/dist/server/server.js.map +1 -0
  136. package/dist/server/server.mjs +21 -0
  137. package/dist/server/server.mjs.map +1 -0
  138. package/dist/server/theme-bridge.d.mts +232 -0
  139. package/dist/server/theme-bridge.d.ts +232 -0
  140. package/dist/server/theme-bridge.js +231 -0
  141. package/dist/server/theme-bridge.js.map +1 -0
  142. package/dist/server/theme-bridge.mjs +231 -0
  143. package/dist/server/theme-bridge.mjs.map +1 -0
  144. package/dist/server/theme.d.mts +40 -0
  145. package/dist/server/theme.d.ts +40 -0
  146. package/dist/server/theme.js +17 -0
  147. package/dist/server/theme.js.map +1 -0
  148. package/dist/server/theme.mjs +17 -0
  149. package/dist/server/theme.mjs.map +1 -0
  150. package/dist/server/types-BCeqWtI2.d.mts +333 -0
  151. package/dist/server/types-BCeqWtI2.d.ts +333 -0
  152. package/dist/server/types-Bbo01M7P.d.mts +76 -0
  153. package/dist/server/types-Bbo01M7P.d.ts +76 -0
  154. package/dist/server/types-C6gmRHLe.d.mts +150 -0
  155. package/dist/server/types-C6gmRHLe.d.ts +150 -0
  156. package/package.json +147 -0
  157. 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 };