@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 13.5 kB
Source Map (JSON)
{"version":3,"file":"collections.mjs","names":[],"sources":["../../src/schemas/collections.ts"],"sourcesContent":["import z from \"zod\";\nimport { resolvedAdminCopySchema } from \"../libs/i18n/index.js\";\nimport type { ControllerSchema } from \"../types.js\";\nimport { brickConfigSchema } from \"./collection-bricks.js\";\nimport { fieldConfigSchema } from \"./collection-fields.js\";\n\nconst migrationStatusSchema = z.object({\n\trequiresMigration: z.boolean().meta({\n\t\tdescription: \"Whether the collection requires a database migration\",\n\t\texample: false,\n\t}),\n\tmissingColumns: z.record(z.string(), z.array(z.string())).meta({\n\t\tdescription: \"Columns that are missing from the database\",\n\t\texample: {\n\t\t\t\"document-fields\": [\"title\"],\n\t\t},\n\t}),\n\thiddenFields: z.record(z.string(), z.array(z.string())).meta({\n\t\tdescription: \"Fields that are hidden from the collection\",\n\t\texample: {\n\t\t\tbanner: [\"heading\"],\n\t\t},\n\t}),\n});\n\nconst collectionResponseSchema = z.object({\n\tkey: z.string().meta({\n\t\tdescription: \"The collection key\",\n\t\texample: \"page\",\n\t}),\n\tmode: z.enum([\"single\", \"multiple\"]).meta({\n\t\tdescription:\n\t\t\t\"Whether the collection has one document or multiple documents\",\n\t\texample: \"multiple\",\n\t}),\n\tgroup: z\n\t\t.object({\n\t\t\tkey: z.string().meta({\n\t\t\t\tdescription: \"The collection group key\",\n\t\t\t\texample: \"content\",\n\t\t\t}),\n\t\t\tname: resolvedAdminCopySchema.nullable().meta({\n\t\t\t\tdescription: \"Display name for the collection group\",\n\t\t\t\texample: {\n\t\t\t\t\ttype: \"lucid.copy\",\n\t\t\t\t\tscope: \"admin\",\n\t\t\t\t\tkey: \"collections.groups.content.name\",\n\t\t\t\t\tdefaultMessage: \"Content\",\n\t\t\t\t},\n\t\t\t}),\n\t\t\torder: z.number().nullable().meta({\n\t\t\t\tdescription: \"Optional order value for sorting collection groups\",\n\t\t\t\texample: 10,\n\t\t\t}),\n\t\t})\n\t\t.nullable()\n\t\t.meta({\n\t\t\tdescription: \"Admin navigation group metadata for the collection\",\n\t\t}),\n\tdocumentId: z\n\t\t.number()\n\t\t.nullable()\n\t\t.meta({\n\t\t\tdescription:\n\t\t\t\t'The document ID if the collection is mode \"single\" and had one created',\n\t\t\texample: 1,\n\t\t})\n\t\t.optional(),\n\tdetails: z.object({\n\t\tname: resolvedAdminCopySchema.meta({\n\t\t\tdescription: \"Display name for the collection\",\n\t\t\texample: {\n\t\t\t\ttype: \"lucid.copy\",\n\t\t\t\tscope: \"admin\",\n\t\t\t\tkey: \"collections.page.name\",\n\t\t\t\tdefaultMessage: \"Pages\",\n\t\t\t},\n\t\t}),\n\t\tsingularName: resolvedAdminCopySchema.meta({\n\t\t\tdescription: \"Singular display name for items in the collection\",\n\t\t\texample: {\n\t\t\t\ttype: \"lucid.copy\",\n\t\t\t\tscope: \"admin\",\n\t\t\t\tkey: \"collections.page.singularName\",\n\t\t\t\tdefaultMessage: \"Page\",\n\t\t\t},\n\t\t}),\n\t\tsummary: resolvedAdminCopySchema.nullable().meta({\n\t\t\tdescription: \"Description text for the collection\",\n\t\t\texample: {\n\t\t\t\ttype: \"lucid.copy\",\n\t\t\t\tscope: \"admin\",\n\t\t\t\tkey: \"collections.page.summary\",\n\t\t\t\tdefaultMessage: \"Manage the pages and content on your website.\",\n\t\t\t},\n\t\t}),\n\t}),\n\tlocalized: z.boolean().meta({\n\t\tdescription: \"Whether the collection supports localized content\",\n\t\texample: true,\n\t}),\n\trevisions: z.boolean().meta({\n\t\tdescription: \"Whether the collection supports document revisions\",\n\t\texample: true,\n\t}),\n\tautoSave: z.boolean().meta({\n\t\tdescription: \"Whether the collection supports auto-save\",\n\t\texample: true,\n\t}),\n\tscheduling: z.boolean().meta({\n\t\tdescription: \"Whether the collection has release scheduling enabled\",\n\t\texample: false,\n\t}),\n\torderable: z.boolean().meta({\n\t\tdescription: \"Whether documents in the collection support manual ordering\",\n\t\texample: false,\n\t}),\n\trevisionRetentionDays: z.union([z.number(), z.literal(false)]).meta({\n\t\tdescription:\n\t\t\t\"Number of days to retain unprotected revisions, or false to retain indefinitely\",\n\t\texample: 30,\n\t}),\n\tlocked: z.boolean().meta({\n\t\tdescription: \"Whether the collection structure is locked from editing\",\n\t\texample: false,\n\t}),\n\treview: z\n\t\t.object({\n\t\t\trequiredFor: z.array(z.string()),\n\t\t\tallowSelfApproval: z.boolean(),\n\t\t\tcomments: z.object({\n\t\t\t\trequest: z.enum([\"required\", \"optional\"]),\n\t\t\t\tdecision: z.enum([\"required\", \"optional\"]),\n\t\t\t}),\n\t\t})\n\t\t.optional(),\n\tworkflow: z\n\t\t.object({\n\t\t\tinitial: z.string(),\n\t\t\tstages: z.array(\n\t\t\t\tz.object({\n\t\t\t\t\tkey: z.string(),\n\t\t\t\t\tname: resolvedAdminCopySchema,\n\t\t\t\t\tcolor: z.enum([\"grey\", \"red\", \"yellow\", \"green\", \"blue\", \"purple\"]),\n\t\t\t\t\tpublishTargets: z.array(z.string()),\n\t\t\t\t}),\n\t\t\t),\n\t\t})\n\t\t.optional(),\n\tlisting: z.array(z.string()).meta({\n\t\tdescription: \"Field keys included in the document listing columns\",\n\t\texample: [\"pageTitle\", \"author\", \"fullSlug\", \"slug\"],\n\t}),\n\tlabelFields: z.array(z.string()).meta({\n\t\tdescription:\n\t\t\t\"Field keys used, in order, to build the main document display label\",\n\t\texample: [\"pageTitle\", \"slug\"],\n\t}),\n\tenvironments: z.array(\n\t\tz.object({\n\t\t\tkey: z.string().meta({\n\t\t\t\tdescription: \"The environment key\",\n\t\t\t\texample: \"production\",\n\t\t\t}),\n\t\t\tname: resolvedAdminCopySchema.meta({\n\t\t\t\tdescription: \"Display name for the environment\",\n\t\t\t\texample: {\n\t\t\t\t\ttype: \"lucid.copy\",\n\t\t\t\t\tscope: \"admin\",\n\t\t\t\t\tkey: \"collections.page.environments.production.name\",\n\t\t\t\t\tdefaultMessage: \"Production\",\n\t\t\t\t},\n\t\t\t}),\n\t\t\trequires: z.array(z.string()).meta({\n\t\t\t\tdescription:\n\t\t\t\t\t\"Environment keys that must match latest before releases can be created for this environment\",\n\t\t\t\texample: [\"staging\"],\n\t\t\t}),\n\t\t\tpermissions: z.object({\n\t\t\t\tpublish: z.string().meta({\n\t\t\t\t\tdescription: \"Permission required to publish to this environment\",\n\t\t\t\t\texample: \"documents:pages:publish\",\n\t\t\t\t}),\n\t\t\t\treview: z.string().meta({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Permission required to review releases for this environment\",\n\t\t\t\t\texample: \"documents:pages:review\",\n\t\t\t\t}),\n\t\t\t}),\n\t\t}),\n\t),\n\tpreview: z\n\t\t.object({\n\t\t\tbreakpoints: z.array(\n\t\t\t\tz.object({\n\t\t\t\t\tkey: z.string().meta({\n\t\t\t\t\t\tdescription: \"The preview breakpoint key\",\n\t\t\t\t\t\texample: \"mobile\",\n\t\t\t\t\t}),\n\t\t\t\t\tlabel: resolvedAdminCopySchema.meta({\n\t\t\t\t\t\tdescription: \"Display label for the preview breakpoint\",\n\t\t\t\t\t\texample: {\n\t\t\t\t\t\t\ttype: \"lucid.literal\",\n\t\t\t\t\t\t\tvalue: \"Mobile\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\twidth: z.number().int().min(280).max(2560).meta({\n\t\t\t\t\t\tdescription: \"Preview viewport width in pixels\",\n\t\t\t\t\t\texample: 390,\n\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t\t),\n\t\t})\n\t\t.nullable()\n\t\t.meta({\n\t\t\tdescription:\n\t\t\t\t\"Builder preview configuration exposed to the admin interface\",\n\t\t}),\n\tcapabilities: z.object({\n\t\tscheduling: z.boolean().meta({\n\t\t\tdescription:\n\t\t\t\t\"Whether this collection can create scheduled releases in the current runtime\",\n\t\t\texample: false,\n\t\t}),\n\t\tpreview: z.boolean().meta({\n\t\t\tdescription: \"Whether this collection has a page preview URL resolver\",\n\t\t\texample: true,\n\t\t}),\n\t}),\n\tpermissions: z.object({\n\t\tread: z.string(),\n\t\tcreate: z.string(),\n\t\tupdate: z.string(),\n\t\tdelete: z.string(),\n\t\trestore: z.string(),\n\t\tpublish: z.string(),\n\t\treview: z.string(),\n\t}),\n\tmigrationStatus: migrationStatusSchema.nullable(),\n\tget fixedBricks() {\n\t\treturn z\n\t\t\t.array(brickConfigSchema)\n\t\t\t.meta({\n\t\t\t\tdescription:\n\t\t\t\t\t\"Fixed (non-movable) bricks for all documents in the collection\",\n\t\t\t\texample: [],\n\t\t\t})\n\t\t\t.optional();\n\t},\n\tget builderBricks() {\n\t\treturn z\n\t\t\t.array(brickConfigSchema)\n\t\t\t.meta({\n\t\t\t\tdescription:\n\t\t\t\t\t\"Builder bricks that can be added to documents in the collection\",\n\t\t\t\texample: [],\n\t\t\t})\n\t\t\t.optional();\n\t},\n\tget fields() {\n\t\treturn z.array(fieldConfigSchema).meta({\n\t\t\tdescription: \"Fields that make up documents in the collection\",\n\t\t\texample: [],\n\t\t});\n\t},\n});\n\nexport const controllerSchemas = {\n\tgetSingle: {\n\t\tbody: undefined,\n\t\tquery: {\n\t\t\tstring: undefined,\n\t\t\tformatted: undefined,\n\t\t},\n\t\tparams: z.object({\n\t\t\tkey: z.string().meta({\n\t\t\t\tdescription: \"The collection key\",\n\t\t\t\texample: \"page\",\n\t\t\t}),\n\t\t}),\n\t\tresponse: collectionResponseSchema,\n\t} satisfies ControllerSchema,\n\tgetAll: {\n\t\tbody: undefined,\n\t\tquery: {\n\t\t\tstring: undefined,\n\t\t\tformatted: undefined,\n\t\t},\n\t\tparams: undefined,\n\t\tresponse: z.array(collectionResponseSchema),\n\t} satisfies ControllerSchema,\n};\n"],"mappings":"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"}