waka-pm
Version:
a pnpm supplement for enforcing consistent versions across all workspaces
82 lines • 3.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.applyFn = void 0;
const ext_config_1 = require("../ext-config");
const package_1 = require("../package");
const schema_1 = require("../schema");
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function isEmptyDeps(deps) {
return !deps || Object.keys(deps).length === 0;
}
async function applyToPackage(wakaRoot, fullPackagePath, wakaPackage) {
const packageJsonContents = await (0, package_1.getNPMPackageJsonContents)(fullPackagePath);
for (const depType of schema_1.npmDepTypes) {
const wakaDeps = wakaPackage[depType];
const npmDeps = packageJsonContents[depType];
if (isEmptyDeps(wakaDeps) && isEmptyDeps(npmDeps)) {
continue;
}
else if (isEmptyDeps(wakaDeps) && !isEmptyDeps(npmDeps)) {
delete packageJsonContents[depType];
}
else {
packageJsonContents[depType] = Object.entries(wakaDeps)
.map(([name, wakaDep]) => {
if (wakaDep === schema_1.ROOT_REGISTRY_VERSION) {
const rootRegVersion = wakaRoot.rootDepRegistry[name];
if (!rootRegVersion) {
throw new Error(`Root registry version for ${name} does not exist.`);
}
return [name, rootRegVersion];
}
return [name, wakaDep];
})
.reduce((acc, next) => {
const [name, version] = next;
acc[name] = version;
return acc;
}, {});
}
}
return packageJsonContents;
}
async function writeApplication(packageDir, packageJsonContents) {
const packageJsonFile = await (0, package_1.getNPMPackageFile)(packageDir);
await (0, package_1.writePackageJson)(packageJsonFile, packageJsonContents);
}
async function applyFn(repoRootDir, opts) {
const skipIfCI = !opts?.noSkipCI;
if (skipIfCI && ['true', '1'].includes(process.env.CI?.toLowerCase() ?? '')) {
console.log('Skipping apply on CI.');
return;
}
const extConfig = await (0, ext_config_1.getExternalConfig)(repoRootDir, opts);
const wakaRoot = await (0, package_1.getWakaRoot)(repoRootDir);
const wakaPackages = await (0, package_1.getWakaPackages)(repoRootDir);
await extConfig?.applyPreEvaluate({
wakaRoot,
wakaPackages,
});
const rootPackageJson = await applyToPackage(wakaRoot, repoRootDir, wakaRoot);
const packageDirToJsonContents = await Promise.all(Object.entries(wakaPackages).map(async ([packageName, wakaPackage]) => {
const packageDir = await (0, package_1.getNPMPackageDir)(packageName, repoRootDir);
const content = await applyToPackage(wakaRoot, packageDir, wakaPackage);
return Promise.all([packageDir, content]);
}));
await extConfig?.applyPreWrite({
wakaRoot,
wakaPackages,
packageDirToJsonContents,
});
await Promise.all(packageDirToJsonContents.map(async ([packageDir, packageJsonContents]) => {
await writeApplication(packageDir, packageJsonContents);
}));
await writeApplication(repoRootDir, rootPackageJson);
await extConfig?.applyPostWrite({
wakaRoot,
wakaPackages,
packageDirToJsonContents,
});
}
exports.applyFn = applyFn;
//# sourceMappingURL=apply.js.map