diff --git a/scripts/depcheck.js b/scripts/depcheck.js
new file mode 100644
index 00000000..08df156c
--- /dev/null
+++ b/scripts/depcheck.js
@@ -0,0 +1,56 @@
+const path = require("path");
+const fs = require("fs");
+const { env } = require("process");
+const { execSync } = require("child_process");
+const { argv, stdout, exit } = require("process");
+
+const { execIn, getLines } = require("./utils");
+
+let npmi_extra_flags = "";
+
+const resolveminor = argv.includes("resolveminor");
+if(argv.includes("nobuild")) npmi_extra_flags += "--ignore-scripts ";
+
+parts.forEach((part) => {
+ let partDir = path.join(__dirname, "..", "..", part);
+ let distDir = path.join(partDir, "dist");
+ console.log(`Checking updates for ${part} (${partDir})`);
+ if(part == "bundle") {
+ execIn(`npm run syncdeps`, partDir)
+ }
+ if(resolveminor) {
+ fs.rmSync(path.join(partDir, "node_modules"), {
+ recursive: true,
+ force: true,
+ });
+ execIn(`npm i --save --no-fund --no-audit --no-package-lock ${npmi_extra_flags}`, partDir)
+ }
+ let x = [
+ [
+ "pkg",
+ {
+ current: "1.0",
+ wanted: "2.0",
+ latest: "2.0",
+ dependent: "cdn",
+ location: "/usr/src/fosscord/bundle/node_packages/pkg",
+ },
+ ],
+ ];
+ x = Object.entries(
+ JSON.parse(execIn("npm outdated --json", partDir))
+ );
+ x.forEach((a) => {
+ let pkgname = a[0];
+ let pkginfo = a[1];
+ if(!pkginfo.current)
+ console.log(`MISSING ${pkgname}: ${pkginfo.current} -> ${pkginfo.wanted} (latest: ${pkginfo.latest})`);
+ else if(pkginfo.latest != pkginfo.wanted){
+ if(pkginfo.current != pkginfo.wanted)
+ console.log(`MINOR ${pkgname}: ${pkginfo.current} -> ${pkginfo.wanted}`);
+ console.log(`MAJOR ${pkgname}: ${pkginfo.current} -> ${pkginfo.latest}`);
+ }
+ else
+ console.log(`MINOR ${pkgname}: ${pkginfo.current} -> ${pkginfo.wanted}`);
+ });
+});
|