UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

68 lines (66 loc) • 2.59 kB
import { isPlainObject, rebuildOrderedConfig } from "./merge.mjs"; import { BosConfigSchema } from "../../types.mjs"; import { readLocalAuthoredConfigInput } from "./load.mjs"; import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; import { dirname, join } from "node:path"; //#region src/services/resolution/serialize.ts const RESOLVED_CONFIG_FILENAME = "bos.resolved-config.json"; function getResolvedConfigPath(configDir) { return join(configDir, ".bos", RESOLVED_CONFIG_FILENAME); } function loadGeneratedResolvedConfig(configDir) { const resolvedPath = getResolvedConfigPath(configDir); if (!existsSync(resolvedPath)) return null; try { const raw = JSON.parse(readFileSync(resolvedPath, "utf-8")); if (!isPlainObject(raw)) return null; const { _resolved, ...configData } = raw; return BosConfigSchema.parse(configData); } catch { return null; } } function writeResolvedConfig(configDir, config, env, extendsChain, source) { const resolvedPath = getResolvedConfigPath(configDir); const resolvedDir = dirname(resolvedPath); if (!existsSync(resolvedDir)) mkdirSync(resolvedDir, { recursive: true }); const ordered = rebuildOrderedConfig(config); const output = { _resolved: { env, resolvedAt: (/* @__PURE__ */ new Date()).toISOString(), extendsChain: extendsChain ?? [], ...source ? { source } : {} }, ...ordered }; const content = `${JSON.stringify(output, null, 2)}\n`; try { if (readFileSync(resolvedPath, "utf-8") === content) return; } catch {} writeFileSync(resolvedPath, content); } function resolveBosConfigPath(configDir) { const resolvedPath = getResolvedConfigPath(configDir); if (existsSync(resolvedPath)) return resolvedPath; return join(configDir, "bos.config.json"); } async function readBosConfigForBuild(configDir) { const resolvedPath = getResolvedConfigPath(configDir); if (existsSync(resolvedPath)) try { const raw = JSON.parse(readFileSync(resolvedPath, "utf-8")); if (isPlainObject(raw)) { const { _resolved, ...configData } = raw; return configData; } } catch (e) { console.warn(`[Config] Failed to parse _resolved.json, falling back to the authored config: ${String(e)}`); } const authored = await readLocalAuthoredConfigInput(configDir); if (authored) return authored; const bosConfigPath = join(configDir, "bos.config.json"); return JSON.parse(readFileSync(bosConfigPath, "utf-8")); } //#endregion export { getResolvedConfigPath, loadGeneratedResolvedConfig, readBosConfigForBuild, resolveBosConfigPath, writeResolvedConfig }; //# sourceMappingURL=serialize.mjs.map