UNPKG

@lucidcms/core

Version:

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

2 lines 3.02 kB
import{copy as e}from"../../i18n/copy.mjs";import{startLoggerBuffering as t,stopLoggerBuffering as n}from"../../logger/index.mjs";import r from"../../i18n/prepare-translations.mjs";import i from"../../../utils/services/service-wrapper.mjs";import{destroyMediaAdapter as a,getInitializedMediaAdapter as o}from"../../media/lifecycle.mjs";import{destroyKVAdapter as s,getInitializedKVAdapter as c}from"../../kv/lifecycle.mjs";import l from"../../queue/adapters/passthrough.mjs";import u from"../../../utils/services/create-service-context.mjs";import d from"../logger.mjs";import f from"../../config/get-config-path.mjs";import p from"../../config/load-config-file.mjs";import m from"../services/validate-env-vars.mjs";import{destroyEmailAdapter as h,getInitializedEmailAdapter as g}from"../../email/lifecycle.mjs";import _ from"../../runtime/cron-jobs.mjs";import{select as v}from"@inquirer/prompts";const y=async y=>{let b,x,S,C,w,T,E,D,O=async()=>{b&&x&&await Promise.allSettled([D?.destroy(),s(w,{config:b,env:S,runtimeContext:C}),a(T,{config:b,env:S,runtimeContext:C}),h(E,{config:b,env:S,runtimeContext:C})]),D=void 0,w=void 0,T=void 0,E=void 0};try{t();let a=d.startTimer(),s=_(),h;if(y){if(!(y in s)){d.error(`Unknown cron job "${y}". Available jobs:`);for(let e of Object.keys(s))d.log(` ${e}`,{symbol:`bullet`});await n(),process.exit(1)}h=y}else try{h=await v({message:`Select a cron job to run:`,choices:Object.entries(s).map(([e,t])=>({name:t.label,value:e}))})}catch(e){throw e instanceof Error&&e.name===`ExitPromptError`&&(await n(),process.exit(0)),e}let k=s[h];d.info(`Running cron job: ${k.label}`);let A=await p({path:f(process.cwd()),prepareRuntime:!0});b=A.config,C=A.runtimeContext,x=(await r({config:b,projectRoot:A.projectRoot})).translationStore,S=A.env,await m({envSchema:A.envSchema,env:A.env})||(await n(),process.exit(1));let j=l();D=await A.config.db.connect(S),w=await c(A.config,{env:S,runtimeContext:C}),T=await o(A.config,{env:S,runtimeContext:C}),E=await g(A.config,{env:S,runtimeContext:C});let M=u({config:A.config,database:D,translationStore:x,env:S,runtimeContext:C,queue:j,kv:w,media:T,email:E}),N,P=!1;for(let t=1;t<=3;t++){let n=await i(k.fn,{transaction:k.transaction,logError:!0,defaultError:{type:`cron`,name:e(`server:core.cron.job.error.name`),message:k.error}})(M);if(!n.error){P=!0;break}N=M.translate.english(n.error.message)??`Unknown error`,t<3&&d.warn(`Cron job "${k.label}" failed (attempt ${t}/3), retrying...`)}P||(d.error(`Cron job "${k.label}" failed after 3 attempts:`,N??`Unknown error`),await O(),await n(),process.exit(1));let F=a();d.log(d.createBadge(`LUCID CMS`),`Cron job "${k.label}" completed`,d.color.green(`successfully`),`in`,d.color.green(d.formatMilliseconds(F)),{spaceAfter:!0,spaceBefore:!0}),await O(),await n(),process.exit(0)}catch(e){await O(),e instanceof Error?d.errorInstance(e,`Failed to run cron job`):d.error(`Failed to run cron job`,`Unknown error`),await n(),process.exit(1)}};export{y as default}; //# sourceMappingURL=cron.mjs.map