UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

2 lines 13.8 kB
import{constants_default as e,initialiseLogger as t,logger_default as n,lucid_error_default as r,translations_default as i}from"./errors-RyYO6qM6.js";import{collectionTableParts as a}from"./build-table-name-yLR81YJn.js";import{createRequire as o}from"node:module";import s,{ZodError as c}from"zod/v4";import l from"lodash.merge";import{join as u}from"node:path";import d from"semver";const te=(t,n=process.cwd())=>{let r=o(import.meta.url),i=r.resolve(`@lucidcms/admin/package.json`),a=r.resolve(`@lucidcms/core/package.json`);return{clientMount:u(n,t.compilerOptions?.outDir,e.directories.public,e.vite.mount),clientHtml:u(n,t.compilerOptions?.outDir,e.directories.public,e.vite.html),publicDist:u(n,t.compilerOptions?.outDir,e.directories.public),tempDist:u(n,t.compilerOptions?.outDir,e.directories.temp),clientDist:u(n,t.compilerOptions?.outDir,e.directories.public,e.vite.dist),clientDistHtml:u(n,t.compilerOptions?.outDir,e.directories.public,e.vite.dist,e.vite.html),buildMetadata:u(n,t.compilerOptions?.outDir,e.directories.temp,e.vite.buildMetadata),adminPackageJson:i,corePackageJson:a,cwdPackageJson:u(n,`package.json`)}};var ne=te;const re=(e,t)=>({name:`strip-adapter-cli`,transform(n,r){if(!r.includes(e))return null;let i=n;if(t)for(let e of t)i=i.replace(RegExp(`import\\s*\\{[^}]*\\}\\s*from\\s*["']${e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}["'];?\\s*`,`g`),``),i=i.replace(RegExp(`import\\s+\\w+\\s+from\\s*["']${e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}["'];?\\s*`,`g`),``),i=i.replace(RegExp(`import\\s*\\*\\s*as\\s+\\w+\\s+from\\s*["']${e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}["'];?\\s*`,`g`),``);return i}});var ie=re;const f=t=>({name:`strip-adapter-export`,transform(n,r){if(!r.includes(e.config.filename))return null;let i=n,a=/^export\s+(const|let)\s+adapter\s*=/gm,o=a.exec(i);if(o){let e=o.index,t=e+o[0].length,n=0,r=0,a=!1,s=``,c=t;for(;c<i.length;){let e=i[c],o=i[c-1];if((e===`"`||e===`'`||e==="`")&&o!==`\\`&&(a?e===s&&(a=!1,s=``):(a=!0,s=e)),!a&&(e===`{`?n++:e===`}`?n--:e===`(`?r++:e===`)`&&r--,e===`;`&&n===0&&r===0)){t=c+1;break}c++}i=i.slice(0,e)+i.slice(t)}return i=i.replace(/import\s*\{\s*([^}]*)\s*\}\s*from\s*["']([^"']+)["']/g,(e,n,r)=>{let i=RegExp(`^${t}(\\s+as\\s+\\w+)?$`),a=n.split(`,`).map(e=>e.trim()).filter(e=>!i.test(e)).filter(e=>e.length>0);return a.length===0?``:`import { ${a.join(`, `)} } from "${r}"`}),i}});var ae=f;const p=(e,t)=>{if(t===void 0||t.length===0)return;let n=[...new Set(t)],r=t.length!==n.length;if(r)throw Error(i(`config_duplicate_keys`,{builder:e}))};var oe=p;const m=(e,t,n)=>{let r=n.filter((e,t,n)=>n.findIndex(t=>t===e)!==t);if(r.length>0)throw Error(i(`duplicate_field_keys_message`,{type:e,keys:r.join(`, `),typeKey:t}))};var h=m;const g=(t,n,r)=>{for(let[a,o]of Object.entries(r))if(o>e.fieldBuiler.maxRepeaterDepth)throw Error(i(`repeater_depth_message`,{type:t,typeKey:n,repeaterKey:a,depth:o,maxRepeaterDepth:e.fieldBuiler.maxRepeaterDepth}))};var _=g,v=`@lucidcms/core`,y=`0.12.0-alpha.1`,b=`The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.`,x=`module`,S=`./dist/index.d.ts`,C=`dist/index.js`,exports={".":{import:`./dist/index.js`,types:`./dist/index.d.ts`},"./cli":{types:`./dist/libs/cli/index.d.ts`,default:`./dist/libs/cli/index.js`},"./api":{types:`./dist/api.d.ts`,default:`./dist/api.js`},"./builders":{types:`./dist/builders.d.ts`,default:`./dist/builders.js`},"./middleware":{types:`./dist/middleware.d.ts`,default:`./dist/middleware.js`},"./helpers":{types:`./dist/helpers.d.ts`,default:`./dist/helpers.js`},"./types":{types:`./dist/types.d.ts`,default:`./dist/types.js`},"./package.json":`./package.json`},w={build:`tsc && tsdown`,dev:`tsdown --watch --no-clean`,format:`biome format ./src`,"format:fix":`biome format --write ./src`,lint:`biome lint ./src`,"lint:fix":`biome lint --apply ./src`},T=[`dist`,`templates`,`public`],E=`Proto Digital`,D={type:`git`,url:`git+https://github.com/ProtoDigitalUK/lucid_cms.git`,directory:`packages/core`},O=[`CMS`,`Headless`,`Node.js`,`Typescript`,`ESM`,`Hono`,`Kysely`],k={"@biomejs/biome":`^1.9.4`,"@lucidcms/admin":`*`,"@lucidcms/config":`*`,"@types/lodash.merge":`^4.6.9`,"@types/mime-types":`^2.1.4`,"@types/mjml":`^4.7.4`,"@types/node":`^22.15.2`,"@types/semver":`^7.7.0`,"@types/slug":`^5.0.9`,tsdown:`^0.12.5`,typescript:`^5.8.3`},A={"@noble/hashes":`^1.8.0`,"@scalar/hono-api-reference":`^0.9.1`,"date-fns":`^4.1.0`,hono:`^4.7.11`,"hono-openapi":`^0.4.8`,kysely:`0.27.4`,"lodash.merge":`^4.6.2`,"mime-types":`^3.0.1`,mjml:`^5.0.0-alpha.6`,semver:`^7.7.1`,slug:`^10.0.0`,zod:`^3.25.67`},j={"@lucidcms/admin":`0.12.0-alpha.1`,"@tailwindcss/vite":`^4.1.4`,chokidar:`^4.0.3`,commander:`^14.0.0`,"@inquirer/prompts":`^7.5.3`,jiti:`^2.4.2`,sharp:`^0.34.2`,"solid-js":`^1.9.5`,tailwindcss:`^4.1.4`,vite:`^6.3.5`,"vite-plugin-solid":`^2.11.6`},M={node:`22.15.0`},N={node:`>=22.0.0 <23.0.0`},P={lucidcms:`./dist/libs/cli/index.js`},F=`BSL-1.0`,I={name:v,version:y,description:b,type:x,types:S,module:C,exports,scripts:w,files:T,author:E,repository:D,keywords:O,devDependencies:k,dependencies:A,optionalDependencies:j,volta:M,engines:N,bin:P,license:F};const L=e=>{let t=e.lucidVersion??I.version,n=d.coerce(t)??t;if(!d.satisfies(n,e.requiredVersions))throw new r({scope:e.key,message:i(`plugin_version_not_supported`,{version:n,supportedVersions:e.requiredVersions})})};var R=L;const z=e=>{if(e.locales.length===0)throw Error(i(`config_locales_empty`));if(e.defaultLocale===void 0)throw Error(i(`config_default_locale_undefined`));let t=e.locales.find(t=>t.code===e.defaultLocale);if(t===void 0)throw Error(i(`config_default_locale_not_found`));let n=e.locales.map(e=>e.code),r=n.find((e,t)=>n.indexOf(e)!==t);if(r!==void 0)throw Error(i(`config_duplicate_locale`,{code:r}))};var B=z;const V=(e,t)=>{switch(e.type){case`document`:{let n=t.collections.filter(e=>e.getData.mode===`multiple`).map(e=>e.key);if(!n.includes(e.collection))throw Error(i(`field_document_collection_not_found`,{collection:e.collection,field:e.key}));break}default:return}};var H=V,U={checkDuplicateBuilderKeys:oe,checkDuplicateFieldKeys:h,checkRepeaterDepth:_,checkPluginVersion:R,checkLocales:B,checkField:H};const W=s.union([s.literal(`error`),s.literal(`warn`),s.literal(`info`),s.literal(`debug`),s.literal(`silent`)]),G=s.custom(e=>typeof e==`object`&&!!e,{message:`Expected a LogTransport object`}),K=s.custom(e=>typeof e==`function`,{message:`Expected a Hono app function`}),q=s.custom(e=>typeof e==`function`,{message:`Expected an ImageProcessor function`}),J=s.custom(e=>typeof e==`function`,{message:`Expected a UrlStrategy function`}),se=s.object({db:s.unknown(),host:s.string(),cors:s.object({origin:s.array(s.string()).optional(),allowHeaders:s.array(s.string()).optional()}).optional(),keys:s.object({encryptionKey:s.string().length(64),cookieSecret:s.string().length(64),accessTokenSecret:s.string().length(64),refreshTokenSecret:s.string().length(64)}),logger:s.object({level:W,transport:G.optional()}),disableSwagger:s.boolean(),localisation:s.object({locales:s.array(s.object({label:s.string(),code:s.string()})),defaultLocale:s.string()}).optional(),email:s.object({identifier:s.string().optional(),from:s.object({email:s.string(),name:s.string()}).optional(),strategy:s.unknown().optional()}).optional(),preRenderedEmailTemplates:s.record(s.string(),s.string()).optional(),media:s.object({storageLimit:s.number(),maxFileSize:s.number(),fallbackImage:s.string().optional(),strategy:s.unknown().optional(),processedImageLimit:s.number(),storeProcessedImages:s.boolean(),onDemandFormats:s.boolean(),imageProcessor:q.optional(),imagePresets:s.record(s.string(),s.object({width:s.number().optional(),height:s.number().optional(),format:s.union([s.literal(`webp`),s.literal(`avif`),s.literal(`jpeg`),s.literal(`png`)]).optional(),quality:s.number().optional()})),urlStrategy:J.optional()}),hooks:s.array(s.object({service:s.string(),event:s.string(),handler:s.unknown()})),hono:s.object({middleware:s.array(K).optional(),extensions:s.array(K).optional()}),collections:s.array(s.unknown()),plugins:s.array(s.unknown()),compilerOptions:s.object({outDir:s.string().optional(),emailTemplates:s.string().optional(),vite:s.unknown().optional()}).optional()});var ce=se;const le=(e,t)=>l(t,e);var ue=le;const de={logger:{level:`info`},email:void 0,disableSwagger:!1,localisation:{locales:[{label:`English`,code:`en`}],defaultLocale:`en`},media:{storageLimit:5368709120,maxFileSize:16777216,fallbackImage:void 0,strategy:void 0,processedImageLimit:10,storeProcessedImages:!0,onDemandFormats:!1,imagePresets:{thumbnail:{height:200,format:`webp`,quality:80}}},hono:{middleware:[],extensions:[]},hooks:[],collections:[],plugins:[],compilerOptions:{outDir:`dist`,emailTemplates:`./templates`}};var fe=de;const Y=s.union([s.string(),s.record(s.enum(e.locales),s.string())]),X=s.object({code:s.string().meta({description:`The locale code`,example:`en`}),name:s.string().meta({description:`The locale's name`,example:`English`}),isDefault:s.boolean().meta({description:`Whether this locale is the default for all content in the CMS`,example:!0}),createdAt:s.string().nullable().meta({description:`Timestamp when the locale was added`,example:`2024-04-25T14:30:00.000Z`}),updatedAt:s.string().nullable().meta({description:`Timestamp when the locale was last modified`,example:`2024-04-25T14:30:00.000Z`})}),Z={getSingle:{query:{string:void 0,formatted:void 0},params:s.object({code:s.string().min(2).meta({description:`The locales code`,example:`en`})}),body:void 0,response:X},getAll:{query:{string:void 0,formatted:void 0},params:void 0,body:void 0,response:s.array(X)},client:{getAll:{query:{string:void 0,formatted:void 0},params:void 0,body:void 0,response:s.array(X)}}},pe=s.object({key:s.string().refine(t=>!t.includes(e.db.collectionKeysJoin),{message:`Collection key cannot contain '${e.db.collectionKeysJoin}'`}),mode:s.enum([`single`,`multiple`]),details:s.object({name:Y,singularName:Y,summary:Y.optional()}),config:s.object({isLocked:s.boolean().default(e.collectionBuilder.isLocked).optional(),useTranslations:s.boolean().default(e.collectionBuilder.useTranslations).optional(),useDrafts:s.boolean().default(e.collectionBuilder.useDrafts).optional(),useRevisions:s.boolean().default(e.collectionBuilder.useRevisions).optional(),useAutoSave:s.boolean().default(e.collectionBuilder.useAutoSave).optional()}).optional(),hooks:s.array(s.object({event:s.string(),handler:s.unknown()})).optional(),bricks:s.object({fixed:s.array(s.unknown()).optional(),builder:s.array(s.unknown()).optional()}).optional()});var me=pe;const he=s.object({key:s.string().refine(t=>!t.includes(e.db.collectionKeysJoin),{message:`Brick key cannot contain '${e.db.collectionKeysJoin}'`}).refine(e=>!e.includes(a.versions),{message:`Brick key cannot contain '${a.versions}'`}).refine(e=>!e.includes(a.fields),{message:`Brick key cannot contain '${a.fields}'`}),details:s.object({name:Y,summary:Y.optional()}).optional()});var ge=he;const _e=s.object({type:s.string(),key:s.string().refine(t=>!t.includes(e.db.collectionKeysJoin),{message:`Field key cannot contain '${e.db.collectionKeysJoin}'`}).refine(t=>!t.startsWith(e.db.generatedColumnPrefix),{message:`Field key cannot start with a '${e.db.generatedColumnPrefix}' prefix`}),collection:s.string().optional(),details:s.object({label:Y.optional(),summary:Y.optional(),true:Y.optional(),false:Y.optional()}).optional(),config:s.object({default:s.union([s.boolean(),s.string(),s.number(),s.undefined(),s.object({}),s.null()]).optional(),useTranslations:s.boolean().optional(),isHidden:s.boolean().optional(),isDisabled:s.boolean().optional()}).optional(),options:s.array(s.object({label:Y,value:s.string()})).optional(),presets:s.array(s.string()).optional(),validation:s.object({zod:s.any().optional(),required:s.boolean().optional(),extensions:s.array(s.string()).optional(),width:s.object({min:s.number().optional(),max:s.number().optional()}).optional(),height:s.object({min:s.number().optional(),max:s.number().optional()}).optional(),maxGroups:s.number().optional(),minGroups:s.number().optional()}).optional()});var Q=_e;let $;const ve=async(r,a)=>{if($!==void 0&&!a)return $;let o=ue(r,fe);try{if(Array.isArray(o.plugins)){let e=o.plugins.reduce(async(e,t)=>{let n=await e,r=await t(n);return U.checkPluginVersion({key:r.key,requiredVersions:r.lucid}),r.config},Promise.resolve(o)),t=await e;o=t}o=ce.parse(o),U.checkLocales(o.localisation),U.checkDuplicateBuilderKeys(`collections`,o.collections.map(e=>e.getData.key));for(let e of o.collections){me.parse(e.config);for(let t of e.flatFields)Q.parse(t),U.checkField(t,o);U.checkDuplicateBuilderKeys(`bricks`,e.builderBricks.map(e=>e.key)),U.checkDuplicateFieldKeys(`collection`,e.key,e.meta.fieldKeys),U.checkRepeaterDepth(`collection`,e.key,e.meta.repeaterDepth);for(let t of e.brickInstances){ge.parse(t.config);for(let e of t.flatFields)Q.parse(e),U.checkField(e,o);U.checkDuplicateFieldKeys(`brick`,t.key,t.meta.fieldKeys),U.checkRepeaterDepth(`brick`,t.key,t.meta.repeaterDepth)}}return t({transport:o.logger.transport,level:o.logger.level,force:!0}),$=o,o}catch(t){if(t instanceof c)try{let r=JSON.parse(t.message);for(let t of r)n.error({message:t.message,scope:e.logScopes.config,data:{path:t.path.join(`.`)}})}catch(r){n.error({message:t.message,scope:e.logScopes.config,data:{stack:t.stack}})}else t instanceof Error?n.error({scope:e.logScopes.config,message:t.message,data:{stack:t.stack}}):n.error({scope:e.logScopes.config,message:i(`an_unknown_error_occurred`)});throw t}};var ye=ve;export{Z as controllerSchemas,ne as get_paths_default,I as package_default,ye as process_config_default,Y as stringTranslations,ae as strip_adapter_export_plugin_default,ie as strip_imports_plugin_default}; //# sourceMappingURL=helpers-V6u-T5es.js.map