96 lines
3.3 KiB
Plaintext
96 lines
3.3 KiB
Plaintext
import { dim } from "kleur/colors";
|
|
import fsMod from "node:fs";
|
|
import { performance } from "node:perf_hooks";
|
|
import { fileURLToPath } from "node:url";
|
|
import { createServer } from "vite";
|
|
import { createContentTypesGenerator } from "../../content/index.js";
|
|
import { globalContentConfigObserver } from "../../content/utils.js";
|
|
import { telemetry } from "../../events/index.js";
|
|
import { eventCliSession } from "../../events/session.js";
|
|
import { runHookConfigSetup } from "../../integrations/index.js";
|
|
import { setUpEnvTs } from "../../vite-plugin-inject-env-ts/index.js";
|
|
import { getTimeStat } from "../build/util.js";
|
|
import { resolveConfig } from "../config/config.js";
|
|
import { createNodeLogger } from "../config/logging.js";
|
|
import { createSettings } from "../config/settings.js";
|
|
import { createVite } from "../create-vite.js";
|
|
import { AstroError, AstroErrorData, createSafeError, isAstroError } from "../errors/index.js";
|
|
import { ensureProcessNodeEnv } from "../util.js";
|
|
async function sync(inlineConfig, options) {
|
|
ensureProcessNodeEnv("production");
|
|
const logger = createNodeLogger(inlineConfig);
|
|
const { userConfig, astroConfig } = await resolveConfig(inlineConfig ?? {}, "sync");
|
|
telemetry.record(eventCliSession("sync", userConfig));
|
|
const _settings = await createSettings(astroConfig, fileURLToPath(astroConfig.root));
|
|
const settings = await runHookConfigSetup({
|
|
settings: _settings,
|
|
logger,
|
|
command: "build"
|
|
});
|
|
return await syncInternal(settings, { ...options, logger });
|
|
}
|
|
async function syncInternal(settings, { logger, fs }) {
|
|
const timerStart = performance.now();
|
|
const tempViteServer = await createServer(
|
|
await createVite(
|
|
{
|
|
server: { middlewareMode: true, hmr: false, watch: null },
|
|
optimizeDeps: { noDiscovery: true },
|
|
ssr: { external: [] },
|
|
logLevel: "silent"
|
|
},
|
|
{ settings, logger, mode: "build", command: "build", fs }
|
|
)
|
|
);
|
|
const wsSend = tempViteServer.ws.send;
|
|
tempViteServer.ws.send = (payload) => {
|
|
if (payload.type === "error") {
|
|
throw payload.err;
|
|
}
|
|
return wsSend(payload);
|
|
};
|
|
try {
|
|
const contentTypesGenerator = await createContentTypesGenerator({
|
|
contentConfigObserver: globalContentConfigObserver,
|
|
logger,
|
|
fs: fs ?? fsMod,
|
|
settings,
|
|
viteServer: tempViteServer
|
|
});
|
|
const typesResult = await contentTypesGenerator.init();
|
|
const contentConfig = globalContentConfigObserver.get();
|
|
if (contentConfig.status === "error") {
|
|
throw contentConfig.error;
|
|
}
|
|
if (typesResult.typesGenerated === false) {
|
|
switch (typesResult.reason) {
|
|
case "no-content-dir":
|
|
default:
|
|
logger.debug("types", "No content directory found. Skipping type generation.");
|
|
return 0;
|
|
}
|
|
}
|
|
} catch (e) {
|
|
const safeError = createSafeError(e);
|
|
if (isAstroError(e)) {
|
|
throw e;
|
|
}
|
|
throw new AstroError(
|
|
{
|
|
...AstroErrorData.GenerateContentTypesError,
|
|
message: AstroErrorData.GenerateContentTypesError.message(safeError.message)
|
|
},
|
|
{ cause: e }
|
|
);
|
|
} finally {
|
|
await tempViteServer.close();
|
|
}
|
|
logger.info(null, `Types generated ${dim(getTimeStat(timerStart, performance.now()))}`);
|
|
await setUpEnvTs({ settings, logger, fs: fs ?? fsMod });
|
|
return 0;
|
|
}
|
|
export {
|
|
sync as default,
|
|
syncInternal
|
|
};
|