everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
1 lines • 3.62 kB
Source Map (JSON)
{"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"}