v0.2.0: Git-native architecture (#1)
This commit was merged in pull request #1.
This commit is contained in:
+20
-4
@@ -18,10 +18,26 @@ export function ensureCIDir(projectPath: string): void {
|
||||
if (!fs.existsSync(ciDir)) {
|
||||
fs.mkdirSync(ciDir, { recursive: true });
|
||||
}
|
||||
const auditDir = path.join(ciDir, "audit");
|
||||
if (!fs.existsSync(auditDir)) {
|
||||
fs.mkdirSync(auditDir, { recursive: true });
|
||||
}
|
||||
|
||||
function deepMerge(base: CIConfig, override: Record<string, unknown>): CIConfig {
|
||||
const result = { ...base } as Record<string, unknown>;
|
||||
for (const key of Object.keys(override)) {
|
||||
const baseVal = result[key];
|
||||
const overrideVal = override[key];
|
||||
if (
|
||||
baseVal && typeof baseVal === "object" && !Array.isArray(baseVal) &&
|
||||
overrideVal && typeof overrideVal === "object" && !Array.isArray(overrideVal)
|
||||
) {
|
||||
result[key] = deepMerge(
|
||||
baseVal as unknown as CIConfig,
|
||||
overrideVal as Record<string, unknown>
|
||||
) as unknown;
|
||||
} else if (overrideVal !== undefined) {
|
||||
result[key] = overrideVal;
|
||||
}
|
||||
}
|
||||
return result as unknown as CIConfig;
|
||||
}
|
||||
|
||||
export function loadConfig(projectPath: string): CIConfig {
|
||||
@@ -31,7 +47,7 @@ export function loadConfig(projectPath: string): CIConfig {
|
||||
}
|
||||
const raw = fs.readFileSync(configPath, "utf-8");
|
||||
const parsed = JSON.parse(raw);
|
||||
return { ...DEFAULT_CI_CONFIG, ...parsed } as CIConfig;
|
||||
return deepMerge(DEFAULT_CI_CONFIG, parsed);
|
||||
}
|
||||
|
||||
export function saveConfig(projectPath: string, config: CIConfig): void {
|
||||
|
||||
Reference in New Issue
Block a user