@riverbankcms/sdk 0.4.1 → 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.
- package/README.md +73 -0
- package/dist/cli/index.js +46 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/client/client.d.mts +3 -3
- package/dist/client/client.d.ts +3 -3
- package/dist/client/client.js +90 -170
- package/dist/client/client.js.map +1 -1
- package/dist/client/client.mjs +90 -170
- package/dist/client/client.mjs.map +1 -1
- package/dist/client/hooks.d.mts +3 -3
- package/dist/client/hooks.d.ts +3 -3
- package/dist/client/rendering/client.d.mts +1 -1
- package/dist/client/rendering/client.d.ts +1 -1
- package/dist/client/rendering/client.js +84 -142
- package/dist/client/rendering/client.js.map +1 -1
- package/dist/client/rendering/client.mjs +84 -142
- package/dist/client/rendering/client.mjs.map +1 -1
- package/dist/client/resolver-CYyfzTQ9.d.mts +61 -0
- package/dist/client/resolver-CYyfzTQ9.d.ts +61 -0
- package/dist/client/usePage--fGlyrgj.d.mts +6439 -0
- package/dist/client/usePage-BC8Q2E3t.d.mts +6431 -0
- package/dist/client/usePage-CE7X5NcN.d.ts +6439 -0
- package/dist/client/usePage-CHEybPMD.d.ts +6429 -0
- package/dist/client/usePage-D4fxZbRR.d.mts +6429 -0
- package/dist/client/usePage-DpRNZUtP.d.ts +6431 -0
- package/dist/server/{Layout-CHG77dhK.d.ts → Layout-CXI_VkhN.d.ts} +1 -1
- package/dist/server/{Layout-B_zUr9ci.d.mts → Layout-p6f3TLw9.d.mts} +1 -1
- package/dist/server/{chunk-XK2YIISA.mjs → chunk-24F6FTCI.mjs} +2 -2
- package/dist/server/{chunk-BUCJWG6G.js → chunk-2SSEBAHC.js} +5 -5
- package/dist/server/{chunk-BUCJWG6G.js.map → chunk-2SSEBAHC.js.map} +1 -1
- package/dist/server/{chunk-ZIM53VP6.js → chunk-6JBKKV3G.js} +27 -4
- package/dist/server/chunk-6JBKKV3G.js.map +1 -0
- package/dist/server/{chunk-ZEAJW6T3.mjs → chunk-ES6QDZUX.mjs} +3 -2
- package/dist/server/chunk-ES6QDZUX.mjs.map +1 -0
- package/dist/server/{chunk-SWPHIUVE.js → chunk-G35R7N7B.js} +3 -2
- package/dist/server/chunk-G35R7N7B.js.map +1 -0
- package/dist/server/{chunk-BOHTTHY5.mjs → chunk-I6K5REFT.mjs} +27 -4
- package/dist/server/chunk-I6K5REFT.mjs.map +1 -0
- package/dist/server/{chunk-SFQ7VF3G.mjs → chunk-LCYGQDAB.mjs} +10 -6
- package/dist/server/chunk-LCYGQDAB.mjs.map +1 -0
- package/dist/server/{chunk-P6CDRJN3.js → chunk-TNYU5EIO.js} +16 -12
- package/dist/server/chunk-TNYU5EIO.js.map +1 -0
- package/dist/server/{chunk-NKXS4TBK.mjs → chunk-U2NI3TS3.mjs} +87 -169
- package/dist/server/chunk-U2NI3TS3.mjs.map +1 -0
- package/dist/server/{chunk-IT5ICP43.js → chunk-VHDDXCK6.js} +94 -176
- package/dist/server/chunk-VHDDXCK6.js.map +1 -0
- package/dist/server/{components-Bo3LPpVb.d.mts → components-C75e4poV.d.mts} +20 -12
- package/dist/server/{components-ClFs4PUa.d.ts → components-Dhiemsjd.d.ts} +20 -12
- package/dist/server/components.d.mts +5 -5
- package/dist/server/components.d.ts +5 -5
- package/dist/server/components.js +3 -3
- package/dist/server/components.mjs +2 -2
- package/dist/server/config-validation.d.mts +2 -2
- package/dist/server/config-validation.d.ts +2 -2
- package/dist/server/config-validation.js +3 -3
- package/dist/server/config-validation.mjs +2 -2
- package/dist/server/config.d.mts +3 -3
- package/dist/server/config.d.ts +3 -3
- package/dist/server/config.js +3 -3
- package/dist/server/config.mjs +2 -2
- package/dist/server/data.d.mts +2 -2
- package/dist/server/data.d.ts +2 -2
- package/dist/server/{index-Dj7VKH34.d.mts → index-C6o9LPvq.d.mts} +1 -1
- package/dist/server/{index-DbSfrRA0.d.ts → index-CAwBj3-A.d.ts} +1 -1
- package/dist/server/index.d.mts +4 -4
- package/dist/server/index.d.ts +4 -4
- package/dist/server/{loadContent-C_FipaAC.d.mts → loadContent-CdXfuCuE.d.mts} +3 -3
- package/dist/server/{loadContent-C2SwqmXy.d.ts → loadContent-CsvQRoxb.d.ts} +3 -3
- package/dist/server/{loadPage-naVvoua8.d.ts → loadPage-BA0HiT-6.d.ts} +72 -28
- package/dist/server/{loadPage-DUHBXDEW.js → loadPage-DLC7DJZP.js} +3 -3
- package/dist/server/{loadPage-DUHBXDEW.js.map → loadPage-DLC7DJZP.js.map} +1 -1
- package/dist/server/{loadPage-LYVKY3WZ.mjs → loadPage-GEGN4UAL.mjs} +2 -2
- package/dist/server/{loadPage-mavT3Jae.d.mts → loadPage-p3AWwwrd.d.mts} +72 -28
- package/dist/server/metadata.d.mts +3 -3
- package/dist/server/metadata.d.ts +3 -3
- package/dist/server/navigation.d.mts +2 -2
- package/dist/server/navigation.d.ts +2 -2
- package/dist/server/rendering/server.d.mts +4 -4
- package/dist/server/rendering/server.d.ts +4 -4
- package/dist/server/rendering/server.js +4 -4
- package/dist/server/rendering/server.mjs +3 -3
- package/dist/server/rendering.d.mts +7 -7
- package/dist/server/rendering.d.ts +7 -7
- package/dist/server/rendering.js +5 -5
- package/dist/server/rendering.mjs +4 -4
- package/dist/server/routing.d.mts +78 -5
- package/dist/server/routing.d.ts +78 -5
- package/dist/server/routing.js +57 -3
- package/dist/server/routing.js.map +1 -1
- package/dist/server/routing.mjs +55 -1
- package/dist/server/routing.mjs.map +1 -1
- package/dist/server/server.d.mts +5 -5
- package/dist/server/server.d.ts +5 -5
- package/dist/server/server.js +2 -2
- package/dist/server/server.mjs +1 -1
- package/dist/server/theme-bridge.js +7 -7
- package/dist/server/theme-bridge.mjs +1 -1
- package/dist/server/{types-BA-J9K8r.d.mts → types-BLf-hE50.d.mts} +19 -6
- package/dist/server/{types-5XdVD2J1.d.ts → types-BWQ-TohG.d.ts} +19 -6
- package/dist/server/{types-CMqVHYLG.d.ts → types-CL916r6x.d.ts} +23 -1
- package/dist/server/{types-BC9eB2KH.d.mts → types-CdhKJrB0.d.mts} +1 -1
- package/dist/server/{types-CAnC529E.d.ts → types-Dj8B3QRb.d.ts} +1 -1
- package/dist/server/{types-CYfHxUhe.d.mts → types-txWsSxN7.d.mts} +23 -1
- package/dist/server/{validation-C7W2Fe0i.d.ts → validation-CoU8uAiu.d.ts} +1 -1
- package/dist/server/{validation-hg1sqhrt.d.mts → validation-DzvDwwRo.d.mts} +1 -1
- package/package.json +3 -3
- package/dist/server/chunk-BOHTTHY5.mjs.map +0 -1
- package/dist/server/chunk-IT5ICP43.js.map +0 -1
- package/dist/server/chunk-NKXS4TBK.mjs.map +0 -1
- package/dist/server/chunk-P6CDRJN3.js.map +0 -1
- package/dist/server/chunk-SFQ7VF3G.mjs.map +0 -1
- package/dist/server/chunk-SWPHIUVE.js.map +0 -1
- package/dist/server/chunk-ZEAJW6T3.mjs.map +0 -1
- package/dist/server/chunk-ZIM53VP6.js.map +0 -1
- /package/dist/server/{chunk-XK2YIISA.mjs.map → chunk-24F6FTCI.mjs.map} +0 -0
- /package/dist/server/{loadPage-LYVKY3WZ.mjs.map → loadPage-GEGN4UAL.mjs.map} +0 -0
package/README.md
CHANGED
|
@@ -1987,6 +1987,46 @@ contentTypes: [
|
|
|
1987
1987
|
]
|
|
1988
1988
|
```
|
|
1989
1989
|
|
|
1990
|
+
### Singleton Content Types
|
|
1991
|
+
|
|
1992
|
+
Singleton content types can only have one entry. Use them for unique content like homepage settings, site-wide configuration, or structured content that shouldn't be duplicated:
|
|
1993
|
+
|
|
1994
|
+
```typescript
|
|
1995
|
+
contentTypes: [
|
|
1996
|
+
{
|
|
1997
|
+
key: 'homepage',
|
|
1998
|
+
name: 'Homepage',
|
|
1999
|
+
isSingleton: true, // Only one entry allowed
|
|
2000
|
+
hasPages: true,
|
|
2001
|
+
routePattern: '/', // Fixed path (no {slug} needed)
|
|
2002
|
+
fields: [
|
|
2003
|
+
{ id: 'heroTitle', type: 'text', label: 'Hero Title', required: true, multiline: false },
|
|
2004
|
+
{ id: 'heroSubtitle', type: 'text', label: 'Hero Subtitle', required: false, multiline: false },
|
|
2005
|
+
{ id: 'heroImage', type: 'media', label: 'Hero Image', mediaKinds: ['image'] },
|
|
2006
|
+
],
|
|
2007
|
+
titleField: 'heroTitle',
|
|
2008
|
+
},
|
|
2009
|
+
{
|
|
2010
|
+
key: 'site-settings',
|
|
2011
|
+
name: 'Site Settings',
|
|
2012
|
+
isSingleton: true,
|
|
2013
|
+
hasPages: false, // Not routable
|
|
2014
|
+
fields: [
|
|
2015
|
+
{ id: 'contactEmail', type: 'text', label: 'Contact Email', required: false, multiline: false },
|
|
2016
|
+
{ id: 'footerText', type: 'richText', label: 'Footer Text', required: false },
|
|
2017
|
+
],
|
|
2018
|
+
titleField: 'contactEmail',
|
|
2019
|
+
},
|
|
2020
|
+
]
|
|
2021
|
+
```
|
|
2022
|
+
|
|
2023
|
+
**Singleton behavior:**
|
|
2024
|
+
|
|
2025
|
+
- When the content type is created, an entry is automatically created
|
|
2026
|
+
- Attempting to create additional entries returns a 409 Conflict error
|
|
2027
|
+
- The entry can be deleted and will reappear when recreated
|
|
2028
|
+
- Routable singletons use a fixed path instead of `{slug}` pattern
|
|
2029
|
+
|
|
1990
2030
|
### Pages
|
|
1991
2031
|
|
|
1992
2032
|
Define pages with optional initial blocks:
|
|
@@ -2133,6 +2173,39 @@ import {
|
|
|
2133
2173
|
} from '@riverbankcms/sdk/config';
|
|
2134
2174
|
```
|
|
2135
2175
|
|
|
2176
|
+
## CLI
|
|
2177
|
+
|
|
2178
|
+
The SDK includes a CLI for syncing your local config to the dashboard.
|
|
2179
|
+
|
|
2180
|
+
### push-config
|
|
2181
|
+
|
|
2182
|
+
Push content types, custom blocks, and block field extensions to your CMS dashboard:
|
|
2183
|
+
|
|
2184
|
+
```bash
|
|
2185
|
+
npx riverbankcms push-config --api-key <key> --dashboard <url>
|
|
2186
|
+
```
|
|
2187
|
+
|
|
2188
|
+
**Options:**
|
|
2189
|
+
|
|
2190
|
+
| Option | Description |
|
|
2191
|
+
|--------|-------------|
|
|
2192
|
+
| `--api-key <key>` | Dashboard API key (required) |
|
|
2193
|
+
| `--dashboard <url>` | Dashboard URL, or set `NEXT_PUBLIC_DASHBOARD_URL` env var |
|
|
2194
|
+
| `--config <path>` | Path to config file (default: `./riverbank.config.ts`) |
|
|
2195
|
+
|
|
2196
|
+
**Example:**
|
|
2197
|
+
|
|
2198
|
+
```bash
|
|
2199
|
+
# Using environment variables
|
|
2200
|
+
export NEXT_PUBLIC_DASHBOARD_URL=https://www.riverbankcms.com
|
|
2201
|
+
npx riverbankcms push-config --api-key $RIVERBANK_API_KEY
|
|
2202
|
+
|
|
2203
|
+
# Or inline
|
|
2204
|
+
npx riverbankcms push-config \
|
|
2205
|
+
--api-key abc123 \
|
|
2206
|
+
--dashboard https://www.riverbankcms.com
|
|
2207
|
+
```
|
|
2208
|
+
|
|
2136
2209
|
## Additional Exports
|
|
2137
2210
|
|
|
2138
2211
|
- `@riverbankcms/sdk/rendering` - Low-level rendering components
|
package/dist/cli/index.js
CHANGED
|
@@ -4884,15 +4884,23 @@ var contentTypeConfigSchema = zod.z.object({
|
|
|
4884
4884
|
routePattern: zod.z.string().optional(),
|
|
4885
4885
|
// Fields are validated as any[] here - deep field validation happens in @riverbankcms/blocks
|
|
4886
4886
|
fields: zod.z.array(zod.z.any()).min(1, "At least one field is required"),
|
|
4887
|
-
titleField: zod.z.string().optional()
|
|
4887
|
+
titleField: zod.z.string().optional(),
|
|
4888
|
+
isSingleton: zod.z.boolean().optional().default(false)
|
|
4888
4889
|
}).refine(
|
|
4889
4890
|
(data) => {
|
|
4890
4891
|
if (data.hasPages) {
|
|
4891
|
-
|
|
4892
|
+
if (!data.routePattern) {
|
|
4893
|
+
return false;
|
|
4894
|
+
}
|
|
4895
|
+
if (!data.isSingleton && !data.routePattern.includes("{slug}")) {
|
|
4896
|
+
return false;
|
|
4897
|
+
}
|
|
4892
4898
|
}
|
|
4893
4899
|
return true;
|
|
4894
4900
|
},
|
|
4895
|
-
{
|
|
4901
|
+
{
|
|
4902
|
+
message: "routePattern is required when hasPages is true. Non-singleton types must include {slug} placeholder."
|
|
4903
|
+
}
|
|
4896
4904
|
).refine(
|
|
4897
4905
|
(data) => {
|
|
4898
4906
|
if (!data.hasPages && data.routePattern) {
|
|
@@ -5044,6 +5052,21 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
5044
5052
|
});
|
|
5045
5053
|
}
|
|
5046
5054
|
}
|
|
5055
|
+
if (data.contentTypes && data.entries) {
|
|
5056
|
+
const singletonKeys = new Set(
|
|
5057
|
+
data.contentTypes.filter((ct) => ct.isSingleton).map((ct) => ct.key)
|
|
5058
|
+
);
|
|
5059
|
+
for (const singletonKey of singletonKeys) {
|
|
5060
|
+
const entriesForType = data.entries.filter((e) => e.contentType === singletonKey);
|
|
5061
|
+
if (entriesForType.length > 1) {
|
|
5062
|
+
ctx.addIssue({
|
|
5063
|
+
code: zod.z.ZodIssueCode.custom,
|
|
5064
|
+
message: `Singleton content type "${singletonKey}" cannot have more than one entry. Found ${entriesForType.length} entries.`,
|
|
5065
|
+
path: ["entries"]
|
|
5066
|
+
});
|
|
5067
|
+
}
|
|
5068
|
+
}
|
|
5069
|
+
}
|
|
5047
5070
|
});
|
|
5048
5071
|
|
|
5049
5072
|
// src/data/prefetchBlockData.ts
|
|
@@ -5351,7 +5374,19 @@ function resolveDashboardUrl(cliOption) {
|
|
|
5351
5374
|
}
|
|
5352
5375
|
return url;
|
|
5353
5376
|
}
|
|
5354
|
-
var pushConfigCommand = new commander.Command("push-config").description("Push SDK config
|
|
5377
|
+
var pushConfigCommand = new commander.Command("push-config").description("Push SDK config to dashboard").requiredOption("--api-key <key>", "Dashboard API key (required)").option("--dashboard <url>", "Dashboard URL (or set NEXT_PUBLIC_DASHBOARD_URL env var)").option("--config <path>", "Path to config file (default: ./riverbank.config.ts)").addHelpText("after", `
|
|
5378
|
+
Description:
|
|
5379
|
+
Syncs your local riverbank.config.ts to the CMS dashboard, including:
|
|
5380
|
+
- Custom blocks
|
|
5381
|
+
- Block field extensions
|
|
5382
|
+
- Block field options
|
|
5383
|
+
- Content types, pages, entries, and navigation
|
|
5384
|
+
|
|
5385
|
+
Examples:
|
|
5386
|
+
$ npx riverbankcms push-config --api-key $RIVERBANK_API_KEY
|
|
5387
|
+
$ npx riverbankcms push-config --api-key abc123 --dashboard https://www.riverbankcms.com
|
|
5388
|
+
$ npx riverbankcms push-config --api-key $API_KEY --config ./src/riverbank.config.ts
|
|
5389
|
+
`).action((options) => {
|
|
5355
5390
|
const dashboard = resolveDashboardUrl(options.dashboard);
|
|
5356
5391
|
return pushConfigAction({ ...options, dashboard });
|
|
5357
5392
|
});
|
|
@@ -5360,7 +5395,13 @@ var pushConfigCommand = new commander.Command("push-config").description("Push S
|
|
|
5360
5395
|
dotenv.config({ path: ".env.local" });
|
|
5361
5396
|
dotenv.config({ path: ".env" });
|
|
5362
5397
|
var program = new commander.Command();
|
|
5363
|
-
program.name("riverbankcms").description("
|
|
5398
|
+
program.name("riverbankcms").description("Riverbank CMS SDK CLI - sync config to dashboard").version("0.1.0").addHelpText("after", `
|
|
5399
|
+
Examples:
|
|
5400
|
+
$ npx riverbankcms push-config --api-key $RIVERBANK_API_KEY
|
|
5401
|
+
$ npx riverbankcms push-config --api-key abc123 --dashboard https://www.riverbankcms.com
|
|
5402
|
+
|
|
5403
|
+
Run 'riverbankcms <command> --help' for detailed options.
|
|
5404
|
+
`);
|
|
5364
5405
|
program.addCommand(pushConfigCommand);
|
|
5365
5406
|
program.parse();
|
|
5366
5407
|
//# sourceMappingURL=index.js.map
|