mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-09-27 10:53:50 +02:00
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
|
|
// After `npm version --workspaces` bumps each package's version, this rewrites dependency ranges that point at sibling
|
|
// workspaces so they follow along.
|
|
|
|
const root = path.join(import.meta.dirname, '..');
|
|
|
|
const workspaceDirs = ['.', ...fs.readdirSync(path.join(root, 'packages')).map(x => `packages/${x}`)]
|
|
.filter(dir => fs.existsSync(path.join(root, dir, 'package.json')));
|
|
|
|
type Manifest = {
|
|
name: string;
|
|
version: string;
|
|
dependencies?: Record<string, string>;
|
|
};
|
|
|
|
const manifests = workspaceDirs.map((dir) => {
|
|
const filePath = path.join(root, dir, 'package.json');
|
|
return { filePath, json: JSON.parse(fs.readFileSync(filePath, 'utf8')) as Manifest };
|
|
});
|
|
|
|
const versions = new Map(manifests.map(({ json }) => [json.name, json.version]));
|
|
|
|
for (const { filePath, json } of manifests) {
|
|
let changed = false;
|
|
|
|
for (const name of Object.keys(json.dependencies ?? {})) {
|
|
const version = versions.get(name);
|
|
if (version && json.dependencies![name] !== `^${version}`) {
|
|
json.dependencies![name] = `^${version}`;
|
|
changed = true;
|
|
}
|
|
}
|
|
|
|
if (changed) {
|
|
fs.writeFileSync(filePath, JSON.stringify(json, null, 2) + '\n');
|
|
console.log(`Synced workspace dependency ranges in ${path.relative(root, filePath)}`);
|
|
}
|
|
}
|