{"version":3,"file":"serve.mjs","names":["cliLogger","constants"],"sources":["../../../../src/libs/cli/commands/serve.ts"],"sourcesContent":["import constants from \"../../../constants/constants.js\";\nimport getConfigPath from \"../../config/get-config-path.js\";\nimport loadConfigFile from \"../../config/load-config-file.js\";\nimport prepareEmailTemplates from \"../../email/templates/prepare-email-templates.js\";\nimport { createTranslator } from \"../../i18n/index.js\";\nimport prepareTranslations from \"../../i18n/prepare-translations.js\";\nimport {\n\tstartLoggerBuffering,\n\tstopLoggerBuffering,\n} from \"../../logger/index.js\";\nimport checkAllPluginsCompatibility from \"../../plugins/check-all-plugins-compatibility.js\";\nimport generateTypes from \"../../type-generation/index.js\";\nimport vite from \"../../vite/index.js\";\nimport cliLogger from \"../logger.js\";\nimport copyPublicAssets from \"../services/copy-public-assets.js\";\nimport updateAvailable from \"../services/update-available.js\";\nimport validateEnvVars from \"../services/validate-env-vars.js\";\nimport migrateCommand from \"./migrate.js\";\n\n/**\n * The CLI serve command. Directly starts the dev server\n */\nconst serveCommand = async () => {\n\tstartLoggerBuffering();\n\tconst configPath = getConfigPath(process.cwd());\n\tlet destroy: (() => Promise<void>) | undefined;\n\tconst coreUpdateAvailable = updateAvailable();\n\n\tlet shutdownPromise: Promise<void> | undefined;\n\tconst shutdown = () => {\n\t\tshutdownPromise ??= (async () => {\n\t\t\ttry {\n\t\t\t\tawait destroy?.();\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\tcliLogger.errorInstance(error, \"Error during shutdown\");\n\t\t\t\t} else {\n\t\t\t\t\tcliLogger.error(\"Error during shutdown\", \"Unknown error\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait stopLoggerBuffering();\n\t\t\tprocess.exit(0);\n\t\t})();\n\t\treturn shutdownPromise;\n\t};\n\n\ttry {\n\t\tconst configRes = await loadConfigFile({\n\t\t\tpath: configPath,\n\t\t\tprepareRuntime: true,\n\t\t});\n\t\tconst translations = await prepareTranslations({\n\t\t\tconfig: configRes.config,\n\t\t\tprojectRoot: configRes.projectRoot,\n\t\t\toutputPath: configRes.config.build.paths.outDir,\n\t\t});\n\t\tconst translationStore = translations.translationStore;\n\t\tconst translate = createTranslator({\n\t\t\tstore: translationStore,\n\t\t\tlocale: \"en\",\n\t\t});\n\t\tconst adapterCLI = configRes.adapter.cli;\n\n\t\tif (!adapterCLI) {\n\t\t\tcliLogger.error(\n\t\t\t\t`Lucid could not load CLI handlers from the \"${configRes.adapter.key}\" runtime adapter.`,\n\t\t\t);\n\t\t\tawait stopLoggerBuffering();\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\tconst envValid = await validateEnvVars({\n\t\t\tenvSchema: configRes.envSchema,\n\t\t\tenv: configRes.env,\n\t\t});\n\n\t\tgenerateTypes({\n\t\t\tenvSchema: configRes.envSchema,\n\t\t\tconfigPath: configPath,\n\t\t\tprojectRoot: configRes.projectRoot,\n\t\t\tcollections: configRes.config.collections,\n\t\t\tlocalization: configRes.config.localization,\n\t\t});\n\n\t\tif (!envValid) {\n\t\t\tawait stopLoggerBuffering();\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\tconst migrateResult = await migrateCommand({\n\t\t\tconfig: configRes.config,\n\t\t\tenv: configRes.env,\n\t\t\truntimeContext: configRes.runtimeContext,\n\t\t\ttranslationStore,\n\t\t\tprojectRoot: configRes.projectRoot,\n\t\t\tmode: \"return\",\n\t\t})({\n\t\t\tskipSyncSteps: false,\n\t\t\tskipEnvValidation: true,\n\t\t});\n\t\tif (!migrateResult) {\n\t\t\tawait stopLoggerBuffering();\n\t\t\tprocess.exit(2);\n\t\t}\n\n\t\tconst viteBuildRes = await vite.buildApp(configRes.config);\n\t\tif (viteBuildRes.error) {\n\t\t\tcliLogger.error(\n\t\t\t\ttranslate.english(viteBuildRes.error.message) ?? \"Failed to build app\",\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\tconst [emailTemplatesRes, publicAssetsRes] = await Promise.all([\n\t\t\tprepareEmailTemplates({\n\t\t\t\tconfig: configRes.config,\n\t\t\t\tsilent: false,\n\t\t\t\tverbose: false,\n\t\t\t}),\n\t\t\tcopyPublicAssets({\n\t\t\t\tconfig: configRes.config,\n\t\t\t\tsilent: false,\n\t\t\t\tverbose: false,\n\t\t\t}),\n\t\t]);\n\t\tif (emailTemplatesRes.error) {\n\t\t\tcliLogger.error(\n\t\t\t\ttranslate.english(emailTemplatesRes.error.message) ??\n\t\t\t\t\t\"Failed to prepare email templates\",\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tif (publicAssetsRes.error) {\n\t\t\tcliLogger.error(\n\t\t\t\ttranslate.english(publicAssetsRes.error.message) ??\n\t\t\t\t\t\"Failed to copy public assets\",\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tcliLogger.success(\n\t\t\t\"Email templates and public assets prepared\",\n\t\t\tcliLogger.color.green(\"successfully\"),\n\t\t);\n\n\t\tconst serverRes = await adapterCLI.serve({\n\t\t\tconfig: configRes.config,\n\t\t\ttranslationStore,\n\t\t\tlogger: {\n\t\t\t\tinstance: cliLogger,\n\t\t\t\tsilent: false,\n\t\t\t},\n\t\t\tonListening: async (props) => {\n\t\t\t\tconst serverUrl =\n\t\t\t\t\ttypeof props.address === \"string\"\n\t\t\t\t\t\t? props.address\n\t\t\t\t\t\t: props.address\n\t\t\t\t\t\t\t? `http://${props.address.address === \"::\" ? \"localhost\" : props.address.address}:${props.address.port}`\n\t\t\t\t\t\t\t: \"unknown\";\n\n\t\t\t\tconst coreUpdateAvailabeRes = await coreUpdateAvailable;\n\t\t\t\tcoreUpdateAvailabeRes.renderUpdateBox();\n\n\t\t\t\tcliLogger.log(\n\t\t\t\t\tcliLogger.createBadge(\"LUCID CMS\"),\n\t\t\t\t\t\"Development server ready\",\n\t\t\t\t\t{\n\t\t\t\t\t\tspaceBefore: !coreUpdateAvailabeRes.show,\n\t\t\t\t\t\tspaceAfter: true,\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tcliLogger.log(\n\t\t\t\t\t\"🔐 Admin panel      \",\n\t\t\t\t\tcliLogger.color.blue(`${serverUrl}/lucid`),\n\t\t\t\t\t{ symbol: \"line\" },\n\t\t\t\t);\n\n\t\t\t\tcliLogger.log(\n\t\t\t\t\t\"📖 Documentation    \",\n\t\t\t\t\tcliLogger.color.blue(constants.documentation),\n\t\t\t\t\t{ symbol: \"line\" },\n\t\t\t\t);\n\n\t\t\t\tcliLogger.log(cliLogger.color.gray(\"Press CTRL-C to stop the server\"), {\n\t\t\t\t\tspaceBefore: true,\n\t\t\t\t\tspaceAfter: true,\n\t\t\t\t});\n\n\t\t\t\tawait stopLoggerBuffering();\n\t\t\t},\n\t\t});\n\t\tdestroy = serverRes?.destroy;\n\n\t\tawait checkAllPluginsCompatibility({\n\t\t\truntimeContext: serverRes.runtimeContext,\n\t\t\tconfig: configRes.config,\n\t\t});\n\n\t\tawait serverRes?.onComplete?.();\n\t} catch (error) {\n\t\tawait destroy?.();\n\t\tif (error instanceof Error) {\n\t\t\tcliLogger.errorInstance(error, \"Failed to start the server\");\n\t\t} else {\n\t\t\tcliLogger.error(\"Failed to start the server\", \"Unknown error\");\n\t\t}\n\t\tawait stopLoggerBuffering();\n\t\tprocess.exit(1);\n\t}\n\n\tprocess.on(\"SIGINT\", shutdown);\n\tprocess.on(\"SIGTERM\", shutdown);\n};\n\nexport default serveCommand;\n"],"mappings":"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"}