alinea
Version:
Headless git-based CMS
66 lines (64 loc) • 1.97 kB
JavaScript
import "../../chunks/chunk-NZLE2WMY.js";
// src/cli/generate/CompileConfig.ts
import fs from "node:fs";
import path from "node:path";
import { buildEmitter } from "../build/BuildEmitter.js";
import { buildOptions } from "../build/BuildOptions.js";
import { externalPlugin } from "../util/ExternalPlugin.js";
import { ignorePlugin } from "../util/IgnorePlugin.js";
import { publicDefines } from "../util/PublicDefines.js";
import { reportError, reportFatal } from "../util/Report.js";
import { loadCMS } from "./LoadConfig.js";
function buildConfig(ctx) {
const { rootDir } = ctx;
const tsConfigFile = path.join(rootDir, "tsconfig.json");
const define = publicDefines(process.env);
return {
...buildOptions,
color: true,
format: "esm",
target: "esnext",
treeShaking: true,
bundle: true,
logOverride: {
"ignored-bare-import": "silent"
},
platform: "neutral",
jsx: "automatic",
define,
plugins: [externalPlugin(rootDir), ignorePlugin],
tsconfig: fs.existsSync(tsConfigFile) ? tsConfigFile : void 0
};
}
async function* compileConfig(ctx) {
const { outDir, configLocation, cmd } = ctx;
const config = buildConfig(ctx);
const location = path.relative(process.cwd(), configLocation).replace(/\\/g, "/");
const builds = buildEmitter({
...config,
outdir: outDir,
entryPoints: { config: configLocation },
sourcemap: true
});
const halt = (error) => {
reportError(error);
if (cmd === "dev") return;
builds.return();
};
for await (const { type, result } of builds) {
if (type !== "done") continue;
if (result.errors.length) {
reportFatal(`Could not compile Alinea config file @ ${location}`);
continue;
}
try {
yield await loadCMS(outDir);
} catch (error) {
const message = "message" in error ? error.message : error;
halt(new Error(`${message} @ ${location}`, { cause: error }));
}
}
}
export {
compileConfig
};