this repo has no description
1// Janky script to get around pnpm link issues
2// Probably don't use this. Probably
3/* eslint-disable no-console */
4const fs = require("fs");
5const path = require("path");
6const child_process = require("child_process");
7
8const onDisk = {
9 "@moonlight-mod/lunast": "../lunast",
10 "@moonlight-mod/moonmap": "../moonmap",
11 "@moonlight-mod/mappings": "../mappings"
12};
13
14function exec(cmd, dir) {
15 child_process.execSync(cmd, { cwd: dir, stdio: "inherit" });
16}
17
18function getDeps(packageJSON) {
19 const ret = {};
20 Object.assign(ret, packageJSON.dependencies || {});
21 Object.assign(ret, packageJSON.devDependencies || {});
22 Object.assign(ret, packageJSON.peerDependencies || {});
23 return ret;
24}
25
26function link(dir) {
27 const packageJSON = JSON.parse(
28 fs.readFileSync(path.join(dir, "package.json"), "utf8")
29 );
30 const deps = getDeps(packageJSON);
31
32 for (const [dep, path] of Object.entries(onDisk)) {
33 if (deps[dep]) {
34 exec(`pnpm link ${path}`, dir);
35 }
36 }
37}
38
39function undo(dir) {
40 exec("pnpm unlink", dir);
41 try {
42 exec("git restore pnpm-lock.yaml", dir);
43 } catch {
44 // ignored
45 }
46}
47
48const shouldUndo = process.argv.includes("--undo");
49const packages = fs.readdirSync("./packages");
50
51for (const path of Object.values(onDisk)) {
52 console.log(path);
53 if (shouldUndo) {
54 undo(path);
55 } else {
56 link(path);
57 }
58}
59
60if (shouldUndo) {
61 const dir = __dirname;
62 console.log(dir);
63 undo(dir);
64} else {
65 for (const pkg of packages) {
66 const dir = path.join(__dirname, "packages", pkg);
67 console.log(dir);
68 link(dir);
69 }
70}