{"version":3,"file":"workspace-catalog.mjs","names":[],"sources":["../src/workspace-catalog.ts"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { parse, stringify } from \"yaml\";\n\ninterface PkgJsonLike {\n  workspaces?: { packages?: string[]; catalog?: Record<string, string> };\n}\n\ninterface WorkspaceYaml {\n  packages?: string[];\n  catalog?: Record<string, string>;\n  [key: string]: unknown;\n}\n\nconst WORKSPACE_YAML = \"pnpm-workspace.yaml\";\n\nexport function catalogFromPackageJson(pkgJson: PkgJsonLike): Record<string, string> {\n  const catalog = pkgJson.workspaces?.catalog;\n  return catalog && typeof catalog === \"object\" ? { ...catalog } : {};\n}\n\nexport function readWorkspaceCatalog(root: string): Record<string, string> {\n  const yamlPath = join(root, WORKSPACE_YAML);\n  if (existsSync(yamlPath)) {\n    const doc = parse(readFileSync(yamlPath, \"utf8\")) as WorkspaceYaml | null;\n    const catalog = doc?.catalog;\n    return catalog && typeof catalog === \"object\" ? { ...catalog } : {};\n  }\n\n  const pkgPath = join(root, \"package.json\");\n  if (existsSync(pkgPath)) {\n    try {\n      const pkg = JSON.parse(readFileSync(pkgPath, \"utf8\")) as PkgJsonLike;\n      return catalogFromPackageJson(pkg);\n    } catch {\n      return {};\n    }\n  }\n\n  return {};\n}\n\nexport function writeWorkspaceCatalog(root: string, catalog: Record<string, string>): void {\n  const yamlPath = join(root, WORKSPACE_YAML);\n  const pkgPath = join(root, \"package.json\");\n  const usesYaml = existsSync(yamlPath);\n  const sorted = Object.fromEntries(Object.entries(catalog).sort(([a], [b]) => a.localeCompare(b)));\n\n  if (usesYaml) {\n    const parsed = parse(readFileSync(yamlPath, \"utf8\")) as WorkspaceYaml | null;\n    const doc: WorkspaceYaml = parsed && typeof parsed === \"object\" ? parsed : {};\n    doc.catalog = sorted;\n    const body = stringify(doc, { lineWidth: 0 }).trimEnd();\n    writeFileSync(yamlPath, `${body}\\n`);\n    return;\n  }\n\n  let pkg: PkgJsonLike = {};\n  if (existsSync(pkgPath)) {\n    try {\n      pkg = JSON.parse(readFileSync(pkgPath, \"utf8\")) as PkgJsonLike;\n    } catch {\n      pkg = {};\n    }\n  }\n  if (!pkg.workspaces) {\n    pkg.workspaces = {};\n  }\n  pkg.workspaces.catalog = sorted;\n  writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`);\n}\n"],"mappings":";;;;;AAcA,MAAM,iBAAiB;AAEvB,SAAgB,uBAAuB,SAA8C;CACnF,MAAM,UAAU,QAAQ,YAAY;CACpC,OAAO,WAAW,OAAO,YAAY,WAAW,EAAE,GAAG,QAAQ,IAAI,CAAC;AACpE;AAEA,SAAgB,qBAAqB,MAAsC;CACzE,MAAM,WAAW,KAAK,MAAM,cAAc;CAC1C,IAAI,WAAW,QAAQ,GAAG;EAExB,MAAM,UADM,MAAM,aAAa,UAAU,MAAM,CAC7B,CAAC,EAAE;EACrB,OAAO,WAAW,OAAO,YAAY,WAAW,EAAE,GAAG,QAAQ,IAAI,CAAC;CACpE;CAEA,MAAM,UAAU,KAAK,MAAM,cAAc;CACzC,IAAI,WAAW,OAAO,GACpB,IAAI;EAEF,OAAO,uBADK,KAAK,MAAM,aAAa,SAAS,MAAM,CACnB,CAAC;CACnC,QAAQ;EACN,OAAO,CAAC;CACV;CAGF,OAAO,CAAC;AACV;AAEA,SAAgB,sBAAsB,MAAc,SAAuC;CACzF,MAAM,WAAW,KAAK,MAAM,cAAc;CAC1C,MAAM,UAAU,KAAK,MAAM,cAAc;CACzC,MAAM,WAAW,WAAW,QAAQ;CACpC,MAAM,SAAS,OAAO,YAAY,OAAO,QAAQ,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;CAEhG,IAAI,UAAU;EACZ,MAAM,SAAS,MAAM,aAAa,UAAU,MAAM,CAAC;EACnD,MAAM,MAAqB,UAAU,OAAO,WAAW,WAAW,SAAS,CAAC;EAC5E,IAAI,UAAU;EACd,MAAM,OAAO,UAAU,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ;EACtD,cAAc,UAAU,GAAG,KAAK,GAAG;EACnC;CACF;CAEA,IAAI,MAAmB,CAAC;CACxB,IAAI,WAAW,OAAO,GACpB,IAAI;EACF,MAAM,KAAK,MAAM,aAAa,SAAS,MAAM,CAAC;CAChD,QAAQ;EACN,MAAM,CAAC;CACT;CAEF,IAAI,CAAC,IAAI,YACP,IAAI,aAAa,CAAC;CAEpB,IAAI,WAAW,UAAU;CACzB,cAAc,SAAS,GAAG,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE,GAAG;AAC5D"}