v0.2.0: Git-native architecture (#1)

This commit was merged in pull request #1.
This commit is contained in:
2026-05-29 12:59:45 +00:00
parent 9cf5c000d9
commit 6e637e4af0
50 changed files with 5852 additions and 135 deletions
+20 -4
View File
@@ -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 {