{"version":3,"file":"save-config.cjs","names":["localConfigEntryPath","serializeAppDescriptorSource","join","rebuildOrderedConfig","readFileSync"],"sources":["../../src/utils/save-config.ts"],"sourcesContent":["import { readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { localConfigEntryPath } from \"../config\";\nimport { serializeAppDescriptorSource } from \"../descriptor/serialize\";\nimport { rebuildOrderedConfig } from \"../merge\";\nimport type { BosConfig, BosConfigInput } from \"../types\";\n\n/**\n * Persists config changes onto the project's authored surface: the authored\n * `bos.app.ts` descriptor when present (the serializer drops pipeline state —\n * production URLs and integrity), else the legacy `bos.config.json` as-is.\n */\nexport async function saveBosConfig(\n  configDir: string,\n  config: BosConfig | BosConfigInput | Record<string, unknown>,\n): Promise<void> {\n  const entryPath = localConfigEntryPath(configDir);\n  if (entryPath?.endsWith(\".app.ts\")) {\n    writeFileSync(entryPath, serializeAppDescriptorSource(config as BosConfigInput));\n    return;\n  }\n\n  const filePath = join(configDir, \"bos.config.json\");\n  const ordered = rebuildOrderedConfig(config as Record<string, unknown>);\n  const next = `${JSON.stringify(ordered, null, 2)}\\n`;\n  try {\n    if (readFileSync(filePath, \"utf8\") === next) return;\n  } catch {\n    // file does not exist yet\n  }\n\n  writeFileSync(filePath, next);\n}\n"],"mappings":";;;;;;;;;;;;AAYA,eAAsB,cACpB,WACA,QACe;CACf,MAAM,YAAYA,oCAAqB,SAAS;CAChD,IAAI,WAAW,SAAS,SAAS,GAAG;EAClC,2BAAc,WAAWC,+CAA6B,MAAwB,CAAC;EAC/E;CACF;CAEA,MAAM,eAAWC,gBAAK,WAAW,iBAAiB;CAClD,MAAM,UAAUC,mCAAqB,MAAiC;CACtE,MAAM,OAAO,GAAG,KAAK,UAAU,SAAS,MAAM,CAAC,EAAE;CACjD,IAAI;EACF,QAAIC,sBAAa,UAAU,MAAM,MAAM,MAAM;CAC/C,QAAQ,CAER;CAEA,2BAAc,UAAU,IAAI;AAC9B"}