-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpackage-update.js
More file actions
45 lines (37 loc) · 1.5 KB
/
package-update.js
File metadata and controls
45 lines (37 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import fs from 'node:fs';
import pkg from './package.json' with { type: 'json' };
import pkgLock from './package-lock.json' with { type: 'json' };
// ANSI color helpers
const ANSI = {
reset: "\x1b[0m",
yellowBg: "\x1b[43m\x1b[30m", // black on yellow
greenBg: "\x1b[42m\x1b[30m", // black on green
};
/**
* Update Dependencies
* @param {*} deps
* @param {*} depType
* @returns
*/
function updateDependencies(deps, depType = 'dependencies') {
if (!deps) return;
for (const [name, currentVersion] of Object.entries(deps)) {
const lockEntry = pkgLock.packages?.[`node_modules/${name}`];
if (!lockEntry || !lockEntry.version) {
console.warn(`${ANSI.yellowBg} WARN ${ANSI.reset} ${name} not found in lock file – skipping.`);
continue;
}
const prefixMatch = currentVersion.match(/^(\^|~|>=|<=|>|<|=)?/);
const prefix = prefixMatch?.[0] || '';
const lockedVersion = lockEntry.version;
const newVersion = prefix + lockedVersion;
if (currentVersion !== newVersion) {
deps[name] = newVersion;
console.log(`${ANSI.greenBg} OKAY ${ANSI.reset} ${depType}: ${name} ${currentVersion} → ${newVersion}`);
}
}
}
updateDependencies(pkg.dependencies, 'dependencies');
updateDependencies(pkg.devDependencies, 'devDependencies');
fs.writeFileSync('package.json', JSON.stringify(pkg, null, 4));
console.log(`\n${ANSI.greenBg} DONE ${ANSI.reset} package.json updated based on package-lock.json\n`);