canopycms 0.0.17 → 0.0.19
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 +120 -34
- package/dist/ai/json-to-markdown.js +1 -1
- package/dist/ai/json-to-markdown.js.map +1 -1
- package/dist/api/content.d.ts.map +1 -1
- package/dist/api/content.js +12 -11
- package/dist/api/content.js.map +1 -1
- package/dist/cli/generate-ai-content.js +39 -20
- package/dist/cli/init.d.ts +5 -0
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +66 -15
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/template-files/canopy.ts.template +10 -6
- package/dist/cli/template-files/edit-page-dev.tsx.template +16 -0
- package/dist/cli/template-files/edit-page.tsx.template +14 -21
- package/dist/cli/template-files/middleware-clerk.ts.template +13 -0
- package/dist/cli/template-files/middleware.ts.template +30 -0
- package/dist/cli/template-files/next.config-static.ts.template +13 -0
- package/dist/cli/template-files/next.config.ts.template +5 -0
- package/dist/cli/template-files/schemas.ts.template +4 -2
- package/dist/cli/templates.d.ts +8 -0
- package/dist/cli/templates.d.ts.map +1 -1
- package/dist/cli/templates.js +22 -2
- package/dist/cli/templates.js.map +1 -1
- package/dist/config/schemas/field.d.ts +21 -0
- package/dist/config/schemas/field.d.ts.map +1 -1
- package/dist/config/schemas/field.js +1 -0
- package/dist/config/schemas/field.js.map +1 -1
- package/dist/config/types.d.ts +7 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/content-listing.d.ts +3 -2
- package/dist/content-listing.d.ts.map +1 -1
- package/dist/content-listing.js +8 -5
- package/dist/content-listing.js.map +1 -1
- package/dist/content-reader.d.ts.map +1 -1
- package/dist/content-reader.js +13 -9
- package/dist/content-reader.js.map +1 -1
- package/dist/content-store.d.ts +5 -0
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +29 -19
- package/dist/content-store.js.map +1 -1
- package/dist/content-tree.d.ts.map +1 -1
- package/dist/content-tree.js +7 -2
- package/dist/content-tree.js.map +1 -1
- package/dist/context.d.ts +38 -7
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +32 -0
- package/dist/context.js.map +1 -1
- package/dist/editor/editor-config.js +2 -2
- package/dist/editor/editor-config.js.map +1 -1
- package/dist/entry-schema-registry.d.ts.map +1 -1
- package/dist/entry-schema-registry.js +9 -0
- package/dist/entry-schema-registry.js.map +1 -1
- package/dist/entry-schema.d.ts +1 -0
- package/dist/entry-schema.d.ts.map +1 -1
- package/dist/entry-schema.js.map +1 -1
- package/dist/github-service.d.ts.map +1 -1
- package/dist/github-service.js +11 -7
- package/dist/github-service.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/paths/index.d.ts +1 -1
- package/dist/paths/index.d.ts.map +1 -1
- package/dist/paths/index.js +1 -1
- package/dist/paths/index.js.map +1 -1
- package/dist/paths/normalize.d.ts +8 -0
- package/dist/paths/normalize.d.ts.map +1 -1
- package/dist/paths/normalize.js +17 -0
- package/dist/paths/normalize.js.map +1 -1
- package/dist/url-path-resolver.d.ts +16 -0
- package/dist/url-path-resolver.d.ts.map +1 -0
- package/dist/url-path-resolver.js +31 -0
- package/dist/url-path-resolver.js.map +1 -0
- package/dist/utils/body-field.d.ts +18 -0
- package/dist/utils/body-field.d.ts.map +1 -0
- package/dist/utils/body-field.js +39 -0
- package/dist/utils/body-field.js.map +1 -0
- package/dist/utils/sanitize-href.d.ts +19 -0
- package/dist/utils/sanitize-href.d.ts.map +1 -0
- package/dist/utils/sanitize-href.js +30 -0
- package/dist/utils/sanitize-href.js.map +1 -0
- package/package.json +1 -1
package/dist/cli/init.js
CHANGED
|
@@ -48,7 +48,8 @@ var init_field = __esm({
|
|
|
48
48
|
description: z.string().optional(),
|
|
49
49
|
required: z.boolean().optional(),
|
|
50
50
|
list: z.boolean().optional(),
|
|
51
|
-
isTitle: z.boolean().optional()
|
|
51
|
+
isTitle: z.boolean().optional(),
|
|
52
|
+
isBody: z.boolean().optional()
|
|
52
53
|
});
|
|
53
54
|
selectOptionSchema = z.union([
|
|
54
55
|
z.string(),
|
|
@@ -325,6 +326,8 @@ __export(templates_exports, {
|
|
|
325
326
|
dockerfileCms: () => dockerfileCms,
|
|
326
327
|
editPage: () => editPage,
|
|
327
328
|
githubWorkflowCms: () => githubWorkflowCms,
|
|
329
|
+
middleware: () => middleware,
|
|
330
|
+
nextConfig: () => nextConfig,
|
|
328
331
|
schemasTemplate: () => schemasTemplate
|
|
329
332
|
});
|
|
330
333
|
import fs2 from "node:fs/promises";
|
|
@@ -339,7 +342,9 @@ async function canopyCmsConfig(options) {
|
|
|
339
342
|
}
|
|
340
343
|
async function canopyContext(options) {
|
|
341
344
|
const template = await readTemplate("canopy.ts.template");
|
|
342
|
-
|
|
345
|
+
const authImports = options.authProvider === "clerk" ? "import { createClerkAuthPlugin } from 'canopycms-auth-clerk'\nimport { createDevAuthPlugin } from 'canopycms-auth-dev'" : "import { createDevAuthPlugin } from 'canopycms-auth-dev'";
|
|
346
|
+
const authPlugin = options.authProvider === "clerk" ? "process.env.CANOPY_AUTH_MODE === 'clerk'\n ? createClerkAuthPlugin({ useOrganizationsAsGroups: true })\n : createDevAuthPlugin()" : "createDevAuthPlugin()";
|
|
347
|
+
return template.replace("{{AUTH_IMPORTS}}", authImports).replace("{{AUTH_PLUGIN}}", authPlugin).replace("{{CONFIG_IMPORT}}", options.configImport);
|
|
343
348
|
}
|
|
344
349
|
async function schemasTemplate() {
|
|
345
350
|
return readTemplate("schemas.ts.template");
|
|
@@ -349,7 +354,8 @@ async function apiRoute(options) {
|
|
|
349
354
|
return template.replace("{{CANOPY_IMPORT}}", options.canopyImport);
|
|
350
355
|
}
|
|
351
356
|
async function editPage(options) {
|
|
352
|
-
const
|
|
357
|
+
const templateName = options.authProvider === "dev" ? "edit-page-dev.tsx.template" : "edit-page.tsx.template";
|
|
358
|
+
const template = await readTemplate(templateName);
|
|
353
359
|
return template.replace("{{CONFIG_IMPORT}}", options.configImport);
|
|
354
360
|
}
|
|
355
361
|
async function aiConfig() {
|
|
@@ -359,6 +365,14 @@ async function aiRoute(options) {
|
|
|
359
365
|
const template = await readTemplate("ai-route.ts.template");
|
|
360
366
|
return template.replace("{{CONFIG_IMPORT}}", options.configImport);
|
|
361
367
|
}
|
|
368
|
+
async function middleware(options) {
|
|
369
|
+
const templateName = options.authProvider === "clerk" ? "middleware-clerk.ts.template" : "middleware.ts.template";
|
|
370
|
+
return readTemplate(templateName);
|
|
371
|
+
}
|
|
372
|
+
async function nextConfig(options) {
|
|
373
|
+
const templateName = options.staticBuild ? "next.config-static.ts.template" : "next.config.ts.template";
|
|
374
|
+
return readTemplate(templateName);
|
|
375
|
+
}
|
|
362
376
|
async function dockerfileCms() {
|
|
363
377
|
return readTemplate("Dockerfile.cms.template");
|
|
364
378
|
}
|
|
@@ -1154,19 +1168,59 @@ function configImportPath(appDir, subdirs) {
|
|
|
1154
1168
|
async function init(options) {
|
|
1155
1169
|
const { projectDir, mode, appDir, ai, force, nonInteractive } = options;
|
|
1156
1170
|
const writeOpts = { force, nonInteractive };
|
|
1157
|
-
const { canopyCmsConfig: canopyCmsConfig2, canopyContext: canopyContext2, schemasTemplate: schemasTemplate2, apiRoute: apiRoute2, editPage: editPage2, aiConfig: aiConfig2, aiRoute: aiRoute2 } = await Promise.resolve().then(() => (init_templates(), templates_exports));
|
|
1171
|
+
const { canopyCmsConfig: canopyCmsConfig2, canopyContext: canopyContext2, schemasTemplate: schemasTemplate2, apiRoute: apiRoute2, editPage: editPage2, aiConfig: aiConfig2, aiRoute: aiRoute2, nextConfig: nextConfig2, middleware: middleware2 } = await Promise.resolve().then(() => (init_templates(), templates_exports));
|
|
1158
1172
|
p.intro("CanopyCMS init");
|
|
1173
|
+
let authProvider;
|
|
1174
|
+
if (options.authProvider) {
|
|
1175
|
+
authProvider = options.authProvider;
|
|
1176
|
+
} else if (nonInteractive) {
|
|
1177
|
+
authProvider = "dev";
|
|
1178
|
+
} else {
|
|
1179
|
+
const choice = await p.select({
|
|
1180
|
+
message: "Which auth provider will you use in production?",
|
|
1181
|
+
options: [
|
|
1182
|
+
{ value: "clerk", label: "Clerk (+ dev auth for local development)" },
|
|
1183
|
+
{ value: "dev", label: "Dev auth only" }
|
|
1184
|
+
],
|
|
1185
|
+
initialValue: "dev"
|
|
1186
|
+
});
|
|
1187
|
+
if (p.isCancel(choice)) {
|
|
1188
|
+
p.cancel("Init cancelled");
|
|
1189
|
+
return;
|
|
1190
|
+
}
|
|
1191
|
+
authProvider = choice;
|
|
1192
|
+
}
|
|
1193
|
+
let staticBuild;
|
|
1194
|
+
if (options.staticBuild !== void 0) {
|
|
1195
|
+
staticBuild = options.staticBuild;
|
|
1196
|
+
} else if (nonInteractive) {
|
|
1197
|
+
staticBuild = false;
|
|
1198
|
+
} else {
|
|
1199
|
+
const choice = await p.confirm({
|
|
1200
|
+
message: "Will you use dual-build (static public site + server CMS build)?",
|
|
1201
|
+
initialValue: false
|
|
1202
|
+
});
|
|
1203
|
+
if (p.isCancel(choice)) {
|
|
1204
|
+
p.cancel("Init cancelled");
|
|
1205
|
+
return;
|
|
1206
|
+
}
|
|
1207
|
+
staticBuild = choice;
|
|
1208
|
+
}
|
|
1209
|
+
const serverPageExt = staticBuild ? "page.server.tsx" : "page.tsx";
|
|
1210
|
+
const serverRouteExt = staticBuild ? "route.server.ts" : "route.ts";
|
|
1159
1211
|
await writeFile(path6.join(projectDir, "canopycms.config.ts"), await canopyCmsConfig2({ mode }), writeOpts);
|
|
1160
|
-
await writeFile(path6.join(projectDir, appDir, "lib/canopy.ts"), await canopyContext2({ configImport: configImportPath(appDir, 1) }), writeOpts);
|
|
1212
|
+
await writeFile(path6.join(projectDir, appDir, "lib/canopy.ts"), await canopyContext2({ configImport: configImportPath(appDir, 1), authProvider }), writeOpts);
|
|
1161
1213
|
await writeFile(path6.join(projectDir, appDir, "schemas.ts"), await schemasTemplate2(), writeOpts);
|
|
1162
|
-
await writeFile(path6.join(projectDir, appDir,
|
|
1214
|
+
await writeFile(path6.join(projectDir, appDir, `api/canopycms/[...canopycms]/${serverRouteExt}`), await apiRoute2({
|
|
1163
1215
|
canopyImport: "../".repeat(3) + "lib/canopy"
|
|
1164
1216
|
}), writeOpts);
|
|
1165
|
-
await writeFile(path6.join(projectDir, appDir,
|
|
1217
|
+
await writeFile(path6.join(projectDir, appDir, `edit/${serverPageExt}`), await editPage2({ configImport: configImportPath(appDir, 1), authProvider }), writeOpts);
|
|
1166
1218
|
if (ai) {
|
|
1167
1219
|
await writeFile(path6.join(projectDir, appDir, "ai/config.ts"), await aiConfig2(), writeOpts);
|
|
1168
1220
|
await writeFile(path6.join(projectDir, appDir, "ai/[...path]/route.ts"), await aiRoute2({ configImport: configImportPath(appDir, 2) }), writeOpts);
|
|
1169
1221
|
}
|
|
1222
|
+
await writeFile(path6.join(projectDir, "next.config.ts"), await nextConfig2({ staticBuild }), writeOpts);
|
|
1223
|
+
await writeFile(path6.join(projectDir, "middleware.ts"), await middleware2({ authProvider }), writeOpts);
|
|
1170
1224
|
const gitignorePath = path6.join(projectDir, ".gitignore");
|
|
1171
1225
|
if (await filePathExists(gitignorePath)) {
|
|
1172
1226
|
const content = await fs5.readFile(gitignorePath, "utf-8");
|
|
@@ -1175,18 +1229,15 @@ async function init(options) {
|
|
|
1175
1229
|
p.log.success("updated: .gitignore");
|
|
1176
1230
|
}
|
|
1177
1231
|
}
|
|
1232
|
+
const packages = authProvider === "clerk" ? "canopycms canopycms-next canopycms-auth-clerk canopycms-auth-dev" : "canopycms canopycms-next canopycms-auth-dev";
|
|
1178
1233
|
p.note([
|
|
1179
1234
|
"1. Install dependencies:",
|
|
1180
|
-
` npm install
|
|
1181
|
-
"",
|
|
1182
|
-
"2. Wrap your Next.js config:",
|
|
1183
|
-
" import { withCanopy } from 'canopycms-next'",
|
|
1184
|
-
" export default withCanopy({ /* your config */ })",
|
|
1235
|
+
` npm install ${packages}`,
|
|
1185
1236
|
"",
|
|
1186
|
-
"
|
|
1237
|
+
"2. Customize " + appDir + "/schemas.ts with your content schema",
|
|
1187
1238
|
"",
|
|
1188
|
-
"
|
|
1189
|
-
"
|
|
1239
|
+
"3. Run: npm run dev",
|
|
1240
|
+
"4. Visit: http://localhost:3000/edit"
|
|
1190
1241
|
].join("\n"), "Next steps");
|
|
1191
1242
|
p.outro("Done!");
|
|
1192
1243
|
}
|
package/dist/cli/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
import { createNextCanopyContext } from 'canopycms-next'
|
|
2
|
-
|
|
3
|
-
import { createDevAuthPlugin } from 'canopycms-auth-dev'
|
|
2
|
+
{{AUTH_IMPORTS}}
|
|
4
3
|
import config from '{{CONFIG_IMPORT}}'
|
|
5
4
|
import { entrySchemaRegistry } from '../schemas'
|
|
6
5
|
|
|
7
6
|
const canopyContextPromise = createNextCanopyContext({
|
|
8
7
|
config: config.server,
|
|
9
|
-
authPlugin:
|
|
10
|
-
process.env.CANOPY_AUTH_MODE === 'clerk'
|
|
11
|
-
? createClerkAuthPlugin({ useOrganizationsAsGroups: true })
|
|
12
|
-
: createDevAuthPlugin(),
|
|
8
|
+
authPlugin: {{AUTH_PLUGIN}},
|
|
13
9
|
entrySchemaRegistry,
|
|
14
10
|
})
|
|
15
11
|
|
|
12
|
+
// Export for server component pages
|
|
16
13
|
export const getCanopy = async () => {
|
|
17
14
|
const context = await canopyContextPromise
|
|
18
15
|
return context.getCanopy()
|
|
19
16
|
}
|
|
20
17
|
|
|
18
|
+
// Export for build-time functions (generateStaticParams, generateMetadata)
|
|
19
|
+
export const getCanopyForBuild = async () => {
|
|
20
|
+
const context = await canopyContextPromise
|
|
21
|
+
return context.getCanopyForBuild()
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Export for API routes
|
|
21
25
|
export const getHandler = async () => {
|
|
22
26
|
const context = await canopyContextPromise
|
|
23
27
|
return context.handler
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react'
|
|
4
|
+
import type { CanopyClientConfig } from 'canopycms'
|
|
5
|
+
import { useDevAuthConfig } from 'canopycms-auth-dev/client'
|
|
6
|
+
import { NextCanopyEditorPage } from 'canopycms-next/client'
|
|
7
|
+
import config from '{{CONFIG_IMPORT}}'
|
|
8
|
+
|
|
9
|
+
function EditPageWithAuth({ authConfig }: { authConfig: Pick<CanopyClientConfig, 'editor'> }) {
|
|
10
|
+
const [EditorPage] = useState(() => NextCanopyEditorPage(config.client(authConfig)))
|
|
11
|
+
return <EditorPage />
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export default function EditPage() {
|
|
15
|
+
return <EditPageWithAuth authConfig={useDevAuthConfig()} />
|
|
16
|
+
}
|
|
@@ -1,32 +1,25 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { useState } from 'react'
|
|
4
|
+
import type { CanopyClientConfig } from 'canopycms'
|
|
4
5
|
import { useDevAuthConfig } from 'canopycms-auth-dev/client'
|
|
6
|
+
import { useClerkAuthConfig } from 'canopycms-auth-clerk/client'
|
|
5
7
|
import { NextCanopyEditorPage } from 'canopycms-next/client'
|
|
6
8
|
import config from '{{CONFIG_IMPORT}}'
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
const authMode = process.env.NEXT_PUBLIC_CANOPY_AUTH_MODE || 'dev'
|
|
10
|
-
|
|
11
|
-
if (authMode === 'dev') {
|
|
12
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
13
|
-
return useDevAuthConfig()
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
if (authMode === 'clerk') {
|
|
17
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
18
|
-
return useClerkAuthConfig()
|
|
19
|
-
}
|
|
10
|
+
const authMode = process.env.NEXT_PUBLIC_CANOPY_AUTH_MODE || 'dev'
|
|
20
11
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
function EditPageWithAuth({ authConfig }: { authConfig: Pick<CanopyClientConfig, 'editor'> }) {
|
|
13
|
+
const [EditorPage] = useState(() => NextCanopyEditorPage(config.client(authConfig)))
|
|
14
|
+
return <EditorPage />
|
|
24
15
|
}
|
|
25
16
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
function DevEditPage() {
|
|
18
|
+
return <EditPageWithAuth authConfig={useDevAuthConfig()} />
|
|
19
|
+
}
|
|
29
20
|
|
|
30
|
-
|
|
31
|
-
return <
|
|
21
|
+
function ClerkEditPage() {
|
|
22
|
+
return <EditPageWithAuth authConfig={useClerkAuthConfig()} />
|
|
32
23
|
}
|
|
24
|
+
|
|
25
|
+
export default authMode === 'clerk' ? ClerkEditPage : DevEditPage
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server'
|
|
2
|
+
|
|
3
|
+
const isProtectedRoute = createRouteMatcher(['/edit(.*)', '/api/canopycms(.*)'])
|
|
4
|
+
|
|
5
|
+
export default clerkMiddleware(async (auth, req) => {
|
|
6
|
+
if (isProtectedRoute(req)) {
|
|
7
|
+
await auth.protect()
|
|
8
|
+
}
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
export const config = {
|
|
12
|
+
matcher: ['/edit(.*)', '/api/canopycms(.*)'],
|
|
13
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server'
|
|
2
|
+
|
|
3
|
+
// Protect CMS routes from unauthenticated access.
|
|
4
|
+
//
|
|
5
|
+
// For dev auth mode, no middleware protection is needed — this file is a passthrough.
|
|
6
|
+
// If you don't need auth protection, you can delete this file entirely.
|
|
7
|
+
//
|
|
8
|
+
// For Clerk auth, replace this file's contents with:
|
|
9
|
+
//
|
|
10
|
+
// import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server'
|
|
11
|
+
//
|
|
12
|
+
// const isProtectedRoute = createRouteMatcher(['/edit(.*)', '/api/canopycms(.*)'])
|
|
13
|
+
//
|
|
14
|
+
// export default clerkMiddleware(async (auth, req) => {
|
|
15
|
+
// if (isProtectedRoute(req)) {
|
|
16
|
+
// await auth.protect()
|
|
17
|
+
// }
|
|
18
|
+
// })
|
|
19
|
+
//
|
|
20
|
+
// export const config = {
|
|
21
|
+
// matcher: ['/edit(.*)', '/api/canopycms(.*)'],
|
|
22
|
+
// }
|
|
23
|
+
|
|
24
|
+
export default function middleware() {
|
|
25
|
+
return NextResponse.next()
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const config = {
|
|
29
|
+
matcher: ['/edit(.*)', '/api/canopycms(.*)'],
|
|
30
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { withCanopy } from 'canopycms-next/config'
|
|
2
|
+
|
|
3
|
+
const isCmsBuild = process.env.CANOPY_BUILD === 'cms'
|
|
4
|
+
|
|
5
|
+
// Dual-build: static export for the public site, standalone Node.js server for the CMS.
|
|
6
|
+
// If deploying the CMS build to Vercel or another platform that doesn't use standalone,
|
|
7
|
+
// change 'standalone' to the appropriate output mode for your platform.
|
|
8
|
+
export default withCanopy(
|
|
9
|
+
{
|
|
10
|
+
output: isCmsBuild ? 'standalone' : 'export',
|
|
11
|
+
},
|
|
12
|
+
{ staticBuild: !isCmsBuild },
|
|
13
|
+
)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineEntrySchema } from 'canopycms'
|
|
1
|
+
import { defineEntrySchema, type TypeFromEntrySchema } from 'canopycms'
|
|
2
2
|
import { createEntrySchemaRegistry } from 'canopycms/server'
|
|
3
3
|
|
|
4
4
|
// Define your entry schemas here.
|
|
@@ -8,9 +8,11 @@ import { createEntrySchemaRegistry } from 'canopycms/server'
|
|
|
8
8
|
export const pageSchema = defineEntrySchema([
|
|
9
9
|
{ name: 'title', type: 'string', label: 'Title' },
|
|
10
10
|
{ name: 'description', type: 'string', label: 'Description' },
|
|
11
|
-
{ name: 'body', type: 'markdown', label: 'Body' },
|
|
11
|
+
{ name: 'body', type: 'markdown', label: 'Body', isBody: true },
|
|
12
12
|
])
|
|
13
13
|
|
|
14
|
+
export type PageContent = TypeFromEntrySchema<typeof pageSchema>
|
|
15
|
+
|
|
14
16
|
export const entrySchemaRegistry = createEntrySchemaRegistry({
|
|
15
17
|
pageSchema,
|
|
16
18
|
})
|
package/dist/cli/templates.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export declare function canopyCmsConfig(options: {
|
|
|
7
7
|
}): Promise<string>;
|
|
8
8
|
export declare function canopyContext(options: {
|
|
9
9
|
configImport: string;
|
|
10
|
+
authProvider: 'clerk' | 'dev';
|
|
10
11
|
}): Promise<string>;
|
|
11
12
|
export declare function schemasTemplate(): Promise<string>;
|
|
12
13
|
export declare function apiRoute(options: {
|
|
@@ -14,11 +15,18 @@ export declare function apiRoute(options: {
|
|
|
14
15
|
}): Promise<string>;
|
|
15
16
|
export declare function editPage(options: {
|
|
16
17
|
configImport: string;
|
|
18
|
+
authProvider: 'clerk' | 'dev';
|
|
17
19
|
}): Promise<string>;
|
|
18
20
|
export declare function aiConfig(): Promise<string>;
|
|
19
21
|
export declare function aiRoute(options: {
|
|
20
22
|
configImport: string;
|
|
21
23
|
}): Promise<string>;
|
|
24
|
+
export declare function middleware(options: {
|
|
25
|
+
authProvider: 'clerk' | 'dev';
|
|
26
|
+
}): Promise<string>;
|
|
27
|
+
export declare function nextConfig(options: {
|
|
28
|
+
staticBuild: boolean;
|
|
29
|
+
}): Promise<string>;
|
|
22
30
|
export declare function dockerfileCms(): Promise<string>;
|
|
23
31
|
export declare function githubWorkflowCms(): Promise<string>;
|
|
24
32
|
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhF;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhF;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,OAAO,GAAG,KAAK,CAAA;CAC9B,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBlB;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAEvD;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjF;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IACtC,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,OAAO,GAAG,KAAK,CAAA;CAC9B,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlB;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAEhD;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhF;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,YAAY,EAAE,OAAO,GAAG,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAI5F;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAKnF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAErD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAEzD"}
|
package/dist/cli/templates.js
CHANGED
|
@@ -16,7 +16,16 @@ export async function canopyCmsConfig(options) {
|
|
|
16
16
|
}
|
|
17
17
|
export async function canopyContext(options) {
|
|
18
18
|
const template = await readTemplate('canopy.ts.template');
|
|
19
|
-
|
|
19
|
+
const authImports = options.authProvider === 'clerk'
|
|
20
|
+
? "import { createClerkAuthPlugin } from 'canopycms-auth-clerk'\nimport { createDevAuthPlugin } from 'canopycms-auth-dev'"
|
|
21
|
+
: "import { createDevAuthPlugin } from 'canopycms-auth-dev'";
|
|
22
|
+
const authPlugin = options.authProvider === 'clerk'
|
|
23
|
+
? "process.env.CANOPY_AUTH_MODE === 'clerk'\n ? createClerkAuthPlugin({ useOrganizationsAsGroups: true })\n : createDevAuthPlugin()"
|
|
24
|
+
: 'createDevAuthPlugin()';
|
|
25
|
+
return template
|
|
26
|
+
.replace('{{AUTH_IMPORTS}}', authImports)
|
|
27
|
+
.replace('{{AUTH_PLUGIN}}', authPlugin)
|
|
28
|
+
.replace('{{CONFIG_IMPORT}}', options.configImport);
|
|
20
29
|
}
|
|
21
30
|
export async function schemasTemplate() {
|
|
22
31
|
return readTemplate('schemas.ts.template');
|
|
@@ -26,7 +35,8 @@ export async function apiRoute(options) {
|
|
|
26
35
|
return template.replace('{{CANOPY_IMPORT}}', options.canopyImport);
|
|
27
36
|
}
|
|
28
37
|
export async function editPage(options) {
|
|
29
|
-
const
|
|
38
|
+
const templateName = options.authProvider === 'dev' ? 'edit-page-dev.tsx.template' : 'edit-page.tsx.template';
|
|
39
|
+
const template = await readTemplate(templateName);
|
|
30
40
|
return template.replace('{{CONFIG_IMPORT}}', options.configImport);
|
|
31
41
|
}
|
|
32
42
|
export async function aiConfig() {
|
|
@@ -36,6 +46,16 @@ export async function aiRoute(options) {
|
|
|
36
46
|
const template = await readTemplate('ai-route.ts.template');
|
|
37
47
|
return template.replace('{{CONFIG_IMPORT}}', options.configImport);
|
|
38
48
|
}
|
|
49
|
+
export async function middleware(options) {
|
|
50
|
+
const templateName = options.authProvider === 'clerk' ? 'middleware-clerk.ts.template' : 'middleware.ts.template';
|
|
51
|
+
return readTemplate(templateName);
|
|
52
|
+
}
|
|
53
|
+
export async function nextConfig(options) {
|
|
54
|
+
const templateName = options.staticBuild
|
|
55
|
+
? 'next.config-static.ts.template'
|
|
56
|
+
: 'next.config.ts.template';
|
|
57
|
+
return readTemplate(templateName);
|
|
58
|
+
}
|
|
39
59
|
export async function dockerfileCms() {
|
|
40
60
|
return readTemplate('Dockerfile.cms.template');
|
|
41
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;AAE5D,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAA;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAyB;IAC7D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,8BAA8B,CAAC,CAAA;IACnE,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export declare const fieldBaseSchema: z.ZodObject<{
|
|
|
9
9
|
required: z.ZodOptional<z.ZodBoolean>;
|
|
10
10
|
list: z.ZodOptional<z.ZodBoolean>;
|
|
11
11
|
isTitle: z.ZodOptional<z.ZodBoolean>;
|
|
12
|
+
isBody: z.ZodOptional<z.ZodBoolean>;
|
|
12
13
|
}, "strip", z.ZodTypeAny, {
|
|
13
14
|
name: string;
|
|
14
15
|
description?: string | undefined;
|
|
@@ -16,6 +17,7 @@ export declare const fieldBaseSchema: z.ZodObject<{
|
|
|
16
17
|
required?: boolean | undefined;
|
|
17
18
|
list?: boolean | undefined;
|
|
18
19
|
isTitle?: boolean | undefined;
|
|
20
|
+
isBody?: boolean | undefined;
|
|
19
21
|
}, {
|
|
20
22
|
name: string;
|
|
21
23
|
description?: string | undefined;
|
|
@@ -23,6 +25,7 @@ export declare const fieldBaseSchema: z.ZodObject<{
|
|
|
23
25
|
required?: boolean | undefined;
|
|
24
26
|
list?: boolean | undefined;
|
|
25
27
|
isTitle?: boolean | undefined;
|
|
28
|
+
isBody?: boolean | undefined;
|
|
26
29
|
}>;
|
|
27
30
|
export declare const selectOptionSchema: z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
28
31
|
label: z.ZodString;
|
|
@@ -51,6 +54,7 @@ export declare const primitiveFieldSchema: z.ZodObject<{
|
|
|
51
54
|
required: z.ZodOptional<z.ZodBoolean>;
|
|
52
55
|
list: z.ZodOptional<z.ZodBoolean>;
|
|
53
56
|
isTitle: z.ZodOptional<z.ZodBoolean>;
|
|
57
|
+
isBody: z.ZodOptional<z.ZodBoolean>;
|
|
54
58
|
} & {
|
|
55
59
|
type: z.ZodEnum<["string", "number", "boolean", "datetime", "rich-text", "markdown", "mdx", "image", "code"]>;
|
|
56
60
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -61,6 +65,7 @@ export declare const primitiveFieldSchema: z.ZodObject<{
|
|
|
61
65
|
required?: boolean | undefined;
|
|
62
66
|
list?: boolean | undefined;
|
|
63
67
|
isTitle?: boolean | undefined;
|
|
68
|
+
isBody?: boolean | undefined;
|
|
64
69
|
}, {
|
|
65
70
|
type: "string" | "number" | "boolean" | "code" | "datetime" | "rich-text" | "markdown" | "mdx" | "image";
|
|
66
71
|
name: string;
|
|
@@ -69,6 +74,7 @@ export declare const primitiveFieldSchema: z.ZodObject<{
|
|
|
69
74
|
required?: boolean | undefined;
|
|
70
75
|
list?: boolean | undefined;
|
|
71
76
|
isTitle?: boolean | undefined;
|
|
77
|
+
isBody?: boolean | undefined;
|
|
72
78
|
}>;
|
|
73
79
|
export declare const selectFieldSchema: z.ZodObject<{
|
|
74
80
|
name: z.ZodString;
|
|
@@ -77,6 +83,7 @@ export declare const selectFieldSchema: z.ZodObject<{
|
|
|
77
83
|
required: z.ZodOptional<z.ZodBoolean>;
|
|
78
84
|
list: z.ZodOptional<z.ZodBoolean>;
|
|
79
85
|
isTitle: z.ZodOptional<z.ZodBoolean>;
|
|
86
|
+
isBody: z.ZodOptional<z.ZodBoolean>;
|
|
80
87
|
} & {
|
|
81
88
|
type: z.ZodLiteral<"select">;
|
|
82
89
|
options: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
@@ -101,6 +108,7 @@ export declare const selectFieldSchema: z.ZodObject<{
|
|
|
101
108
|
required?: boolean | undefined;
|
|
102
109
|
list?: boolean | undefined;
|
|
103
110
|
isTitle?: boolean | undefined;
|
|
111
|
+
isBody?: boolean | undefined;
|
|
104
112
|
}, {
|
|
105
113
|
options: (string | {
|
|
106
114
|
value: string;
|
|
@@ -113,6 +121,7 @@ export declare const selectFieldSchema: z.ZodObject<{
|
|
|
113
121
|
required?: boolean | undefined;
|
|
114
122
|
list?: boolean | undefined;
|
|
115
123
|
isTitle?: boolean | undefined;
|
|
124
|
+
isBody?: boolean | undefined;
|
|
116
125
|
}>;
|
|
117
126
|
export declare const referenceFieldSchema: z.ZodObject<{
|
|
118
127
|
name: z.ZodString;
|
|
@@ -121,6 +130,7 @@ export declare const referenceFieldSchema: z.ZodObject<{
|
|
|
121
130
|
required: z.ZodOptional<z.ZodBoolean>;
|
|
122
131
|
list: z.ZodOptional<z.ZodBoolean>;
|
|
123
132
|
isTitle: z.ZodOptional<z.ZodBoolean>;
|
|
133
|
+
isBody: z.ZodOptional<z.ZodBoolean>;
|
|
124
134
|
} & {
|
|
125
135
|
type: z.ZodLiteral<"reference">;
|
|
126
136
|
collections: z.ZodArray<z.ZodString, "many">;
|
|
@@ -148,6 +158,7 @@ export declare const referenceFieldSchema: z.ZodObject<{
|
|
|
148
158
|
required?: boolean | undefined;
|
|
149
159
|
list?: boolean | undefined;
|
|
150
160
|
isTitle?: boolean | undefined;
|
|
161
|
+
isBody?: boolean | undefined;
|
|
151
162
|
displayField?: string | undefined;
|
|
152
163
|
}, {
|
|
153
164
|
type: "reference";
|
|
@@ -162,6 +173,7 @@ export declare const referenceFieldSchema: z.ZodObject<{
|
|
|
162
173
|
required?: boolean | undefined;
|
|
163
174
|
list?: boolean | undefined;
|
|
164
175
|
isTitle?: boolean | undefined;
|
|
176
|
+
isBody?: boolean | undefined;
|
|
165
177
|
displayField?: string | undefined;
|
|
166
178
|
}>;
|
|
167
179
|
export declare const blockSchema: z.ZodObject<{
|
|
@@ -187,6 +199,7 @@ export declare const blockFieldSchema: z.ZodObject<{
|
|
|
187
199
|
required: z.ZodOptional<z.ZodBoolean>;
|
|
188
200
|
list: z.ZodOptional<z.ZodBoolean>;
|
|
189
201
|
isTitle: z.ZodOptional<z.ZodBoolean>;
|
|
202
|
+
isBody: z.ZodOptional<z.ZodBoolean>;
|
|
190
203
|
} & {
|
|
191
204
|
type: z.ZodLiteral<"block">;
|
|
192
205
|
templates: z.ZodArray<z.ZodObject<{
|
|
@@ -219,6 +232,7 @@ export declare const blockFieldSchema: z.ZodObject<{
|
|
|
219
232
|
required?: boolean | undefined;
|
|
220
233
|
list?: boolean | undefined;
|
|
221
234
|
isTitle?: boolean | undefined;
|
|
235
|
+
isBody?: boolean | undefined;
|
|
222
236
|
}, {
|
|
223
237
|
type: "block";
|
|
224
238
|
name: string;
|
|
@@ -233,6 +247,7 @@ export declare const blockFieldSchema: z.ZodObject<{
|
|
|
233
247
|
required?: boolean | undefined;
|
|
234
248
|
list?: boolean | undefined;
|
|
235
249
|
isTitle?: boolean | undefined;
|
|
250
|
+
isBody?: boolean | undefined;
|
|
236
251
|
}>;
|
|
237
252
|
export declare const objectFieldSchema: z.ZodObject<{
|
|
238
253
|
name: z.ZodString;
|
|
@@ -241,6 +256,7 @@ export declare const objectFieldSchema: z.ZodObject<{
|
|
|
241
256
|
required: z.ZodOptional<z.ZodBoolean>;
|
|
242
257
|
list: z.ZodOptional<z.ZodBoolean>;
|
|
243
258
|
isTitle: z.ZodOptional<z.ZodBoolean>;
|
|
259
|
+
isBody: z.ZodOptional<z.ZodBoolean>;
|
|
244
260
|
} & {
|
|
245
261
|
type: z.ZodLiteral<"object">;
|
|
246
262
|
fields: z.ZodArray<z.ZodLazy<z.ZodTypeAny>, "many">;
|
|
@@ -253,6 +269,7 @@ export declare const objectFieldSchema: z.ZodObject<{
|
|
|
253
269
|
required?: boolean | undefined;
|
|
254
270
|
list?: boolean | undefined;
|
|
255
271
|
isTitle?: boolean | undefined;
|
|
272
|
+
isBody?: boolean | undefined;
|
|
256
273
|
}, {
|
|
257
274
|
type: "object";
|
|
258
275
|
name: string;
|
|
@@ -262,6 +279,7 @@ export declare const objectFieldSchema: z.ZodObject<{
|
|
|
262
279
|
required?: boolean | undefined;
|
|
263
280
|
list?: boolean | undefined;
|
|
264
281
|
isTitle?: boolean | undefined;
|
|
282
|
+
isBody?: boolean | undefined;
|
|
265
283
|
}>;
|
|
266
284
|
export declare const customFieldSchema: z.ZodLazy<z.ZodObject<{
|
|
267
285
|
name: z.ZodString;
|
|
@@ -270,6 +288,7 @@ export declare const customFieldSchema: z.ZodLazy<z.ZodObject<{
|
|
|
270
288
|
required: z.ZodOptional<z.ZodBoolean>;
|
|
271
289
|
list: z.ZodOptional<z.ZodBoolean>;
|
|
272
290
|
isTitle: z.ZodOptional<z.ZodBoolean>;
|
|
291
|
+
isBody: z.ZodOptional<z.ZodBoolean>;
|
|
273
292
|
} & {
|
|
274
293
|
type: z.ZodEffects<z.ZodString, string, string>;
|
|
275
294
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
@@ -279,6 +298,7 @@ export declare const customFieldSchema: z.ZodLazy<z.ZodObject<{
|
|
|
279
298
|
required: z.ZodOptional<z.ZodBoolean>;
|
|
280
299
|
list: z.ZodOptional<z.ZodBoolean>;
|
|
281
300
|
isTitle: z.ZodOptional<z.ZodBoolean>;
|
|
301
|
+
isBody: z.ZodOptional<z.ZodBoolean>;
|
|
282
302
|
} & {
|
|
283
303
|
type: z.ZodEffects<z.ZodString, string, string>;
|
|
284
304
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
@@ -288,6 +308,7 @@ export declare const customFieldSchema: z.ZodLazy<z.ZodObject<{
|
|
|
288
308
|
required: z.ZodOptional<z.ZodBoolean>;
|
|
289
309
|
list: z.ZodOptional<z.ZodBoolean>;
|
|
290
310
|
isTitle: z.ZodOptional<z.ZodBoolean>;
|
|
311
|
+
isBody: z.ZodOptional<z.ZodBoolean>;
|
|
291
312
|
} & {
|
|
292
313
|
type: z.ZodEffects<z.ZodString, string, string>;
|
|
293
314
|
}, z.ZodTypeAny, "passthrough">>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../src/config/schemas/field.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../src/config/schemas/field.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;EAQ1B,CAAA;AAGF,eAAO,MAAM,kBAAkB;;;;;;;;;IAM7B,CAAA;AAGF,eAAO,MAAM,qBAAqB;;;;;;;;;IAMhC,CAAA;AAGF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE/B,CAAA;AAGF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG5B,CAAA;AAGF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK/B,CAAA;AAQF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;EAKtB,CAAA;AAGF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG3B,CAAA;AAGF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG5B,CAAA;AAGF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAW7B,CAAA;AAGD,QAAA,MAAM,gBAAgB,EAAE,CAAC,CAAC,UAMxB,CAAA;AAGF,QAAA,MAAM,WAAW,EAAE,CAAC,CAAC,UAAyE,CAAA;AAG9F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAA"}
|
|
@@ -11,6 +11,7 @@ export const fieldBaseSchema = z.object({
|
|
|
11
11
|
required: z.boolean().optional(),
|
|
12
12
|
list: z.boolean().optional(),
|
|
13
13
|
isTitle: z.boolean().optional(),
|
|
14
|
+
isBody: z.boolean().optional(),
|
|
14
15
|
});
|
|
15
16
|
// Select option schema
|
|
16
17
|
export const selectOptionSchema = z.union([
|