UNPKG

@lucidcms/core

Version:

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

1 lines 7.15 kB
{"version":3,"file":"prepare-lucid-public-assets.mjs","names":["cliLogger","constants"],"sources":["../../../src/libs/compile/prepare-lucid-public-assets.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport constants from \"../../constants/constants.js\";\nimport type { Config, ServiceResponse } from \"../../types.js\";\nimport { getDirName } from \"../../utils/helpers/index.js\";\nimport cliLogger from \"../cli/logger.js\";\nimport { copy } from \"../i18n/index.js\";\n\nconst currentDir = getDirName(import.meta.url);\n\nconst pathExists = async (targetPath: string) => {\n\ttry {\n\t\tawait fs.stat(targetPath);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst isDirectory = async (targetPath: string) => {\n\tconst stats = await fs.stat(targetPath);\n\treturn stats.isDirectory();\n};\n\nconst ensureDir = async (dirPath: string) => {\n\tawait fs.mkdir(dirPath, { recursive: true });\n};\n\nconst copyFileTo = async (\n\tsrcFile: string,\n\tdestFile: string,\n\tsilent: boolean,\n\tverbose: boolean,\n\tprojectRoot: string,\n) => {\n\tawait ensureDir(path.dirname(destFile));\n\tawait fs.copyFile(srcFile, destFile);\n\n\tconst relativeOutPath = path.relative(projectRoot, destFile);\n\tconst displayPath =\n\t\trelativeOutPath.startsWith(\".\") || relativeOutPath === \"\"\n\t\t\t? relativeOutPath || \".\"\n\t\t\t: `./${relativeOutPath}`;\n\n\tif (verbose) {\n\t\tcliLogger.info(\"Copied public asset:\", cliLogger.color.green(displayPath), {\n\t\t\tsilent,\n\t\t});\n\t}\n};\n\nconst copyDirectoryContentsInto = async (\n\tsrcDir: string,\n\tdestDir: string,\n\tsilent: boolean,\n\tverbose: boolean,\n\tprojectRoot: string,\n) => {\n\tawait ensureDir(destDir);\n\tconst entries = await fs.readdir(srcDir, { withFileTypes: true });\n\n\tawait Promise.all(\n\t\tentries.map(async (entry) => {\n\t\t\tconst srcPath = path.join(srcDir, entry.name);\n\t\t\tconst destPath = path.join(destDir, entry.name);\n\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tawait copyDirectoryContentsInto(\n\t\t\t\t\tsrcPath,\n\t\t\t\t\tdestPath,\n\t\t\t\t\tsilent,\n\t\t\t\t\tverbose,\n\t\t\t\t\tprojectRoot,\n\t\t\t\t);\n\t\t\t} else if (entry.isFile()) {\n\t\t\t\tawait copyFileTo(srcPath, destPath, silent, verbose, projectRoot);\n\t\t\t}\n\t\t}),\n\t);\n};\n\nconst prepareLucidPublicAssets = async (props: {\n\tconfig: Config;\n\toutDir: string;\n\tprojectRoot?: string;\n\tincludeProjectPublic?: boolean;\n\tsilent?: boolean;\n\tverbose?: boolean;\n}): ServiceResponse<undefined> => {\n\ttry {\n\t\tconst projectRoot = props.projectRoot ?? process.cwd();\n\t\tconst silent = props.silent ?? false;\n\t\tconst verbose = props.verbose ?? false;\n\t\tconst corePublicPath = path.join(\n\t\t\tcurrentDir,\n\t\t\t\"../../../\",\n\t\t\tconstants.directories.public,\n\t\t);\n\n\t\tawait ensureDir(props.outDir);\n\n\t\tif (await pathExists(corePublicPath)) {\n\t\t\tawait copyDirectoryContentsInto(\n\t\t\t\tcorePublicPath,\n\t\t\t\tprops.outDir,\n\t\t\t\tsilent,\n\t\t\t\tverbose,\n\t\t\t\tprojectRoot,\n\t\t\t);\n\t\t}\n\n\t\tconst additionalPublic = props.config.build.paths.copyPublic ?? [];\n\t\tawait Promise.all(\n\t\t\tadditionalPublic.map(async (entry) => {\n\t\t\t\tconst isString = typeof entry === \"string\";\n\t\t\t\tconst source = isString ? entry : entry.input;\n\t\t\t\tconst output = isString ? undefined : entry.output;\n\n\t\t\t\tconst absSource = path.isAbsolute(source)\n\t\t\t\t\t? source\n\t\t\t\t\t: path.join(projectRoot, source);\n\t\t\t\tif (!(await pathExists(absSource))) return;\n\n\t\t\t\tif (await isDirectory(absSource)) {\n\t\t\t\t\tconst destDir = output\n\t\t\t\t\t\t? path.join(props.outDir, output)\n\t\t\t\t\t\t: path.join(props.outDir, path.basename(absSource));\n\t\t\t\t\tawait copyDirectoryContentsInto(\n\t\t\t\t\t\tabsSource,\n\t\t\t\t\t\tdestDir,\n\t\t\t\t\t\tsilent,\n\t\t\t\t\t\tverbose,\n\t\t\t\t\t\tprojectRoot,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tconst destFile = output\n\t\t\t\t\t\t? path.join(props.outDir, output)\n\t\t\t\t\t\t: path.join(props.outDir, path.basename(absSource));\n\t\t\t\t\tawait copyFileTo(absSource, destFile, silent, verbose, projectRoot);\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\n\t\tif (props.includeProjectPublic) {\n\t\t\tconst cwdPublic = path.join(projectRoot, constants.directories.public);\n\t\t\tif ((await pathExists(cwdPublic)) && (await isDirectory(cwdPublic))) {\n\t\t\t\tawait copyDirectoryContentsInto(\n\t\t\t\t\tcwdPublic,\n\t\t\t\t\tprops.outDir,\n\t\t\t\t\tsilent,\n\t\t\t\t\tverbose,\n\t\t\t\t\tprojectRoot,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\terror: undefined,\n\t\t\tdata: undefined,\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\tmessage: copy(\"server:core.build.public.assets.copy.failed\", {\n\t\t\t\t\tdefaultMessage:\n\t\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t\t: \"An error occurred while copying public assets\",\n\t\t\t\t}),\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n};\n\nexport default prepareLucidPublicAssets;\n"],"mappings":"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"}