everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
53 lines (51 loc) • 2.05 kB
JavaScript
let node_fs = require("node:fs");
let node_path = require("node:path");
let yaml = require("yaml");
//#region src/workspace-catalog.ts
const WORKSPACE_YAML = "pnpm-workspace.yaml";
function catalogFromPackageJson(pkgJson) {
const catalog = pkgJson.workspaces?.catalog;
return catalog && typeof catalog === "object" ? { ...catalog } : {};
}
function readWorkspaceCatalog(root) {
const yamlPath = (0, node_path.join)(root, WORKSPACE_YAML);
if ((0, node_fs.existsSync)(yamlPath)) {
const catalog = (0, yaml.parse)((0, node_fs.readFileSync)(yamlPath, "utf8"))?.catalog;
return catalog && typeof catalog === "object" ? { ...catalog } : {};
}
const pkgPath = (0, node_path.join)(root, "package.json");
if ((0, node_fs.existsSync)(pkgPath)) try {
return catalogFromPackageJson(JSON.parse((0, node_fs.readFileSync)(pkgPath, "utf8")));
} catch {
return {};
}
return {};
}
function writeWorkspaceCatalog(root, catalog) {
const yamlPath = (0, node_path.join)(root, WORKSPACE_YAML);
const pkgPath = (0, node_path.join)(root, "package.json");
const usesYaml = (0, node_fs.existsSync)(yamlPath);
const sorted = Object.fromEntries(Object.entries(catalog).sort(([a], [b]) => a.localeCompare(b)));
if (usesYaml) {
const parsed = (0, yaml.parse)((0, node_fs.readFileSync)(yamlPath, "utf8"));
const doc = parsed && typeof parsed === "object" ? parsed : {};
doc.catalog = sorted;
const body = (0, yaml.stringify)(doc, { lineWidth: 0 }).trimEnd();
(0, node_fs.writeFileSync)(yamlPath, `${body}\n`);
return;
}
let pkg = {};
if ((0, node_fs.existsSync)(pkgPath)) try {
pkg = JSON.parse((0, node_fs.readFileSync)(pkgPath, "utf8"));
} catch {
pkg = {};
}
if (!pkg.workspaces) pkg.workspaces = {};
pkg.workspaces.catalog = sorted;
(0, node_fs.writeFileSync)(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`);
}
//#endregion
exports.catalogFromPackageJson = catalogFromPackageJson;
exports.readWorkspaceCatalog = readWorkspaceCatalog;
exports.writeWorkspaceCatalog = writeWorkspaceCatalog;
//# sourceMappingURL=workspace-catalog.cjs.map