this repo has no description
at main 1.9 kB view raw
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 cwd = process.cwd(); 9const onDisk = { 10 //"@moonlight-mod/lunast": "../lunast", 11 //"@moonlight-mod/moonmap": "../moonmap", 12 "@moonlight-mod/mappings": "../mappings" 13}; 14 15function exec(cmd, dir) { 16 child_process.execSync(cmd, { cwd: dir, stdio: "inherit" }); 17} 18 19function getDeps(packageJSON) { 20 const ret = {}; 21 Object.assign(ret, packageJSON.dependencies || {}); 22 Object.assign(ret, packageJSON.devDependencies || {}); 23 Object.assign(ret, packageJSON.peerDependencies || {}); 24 return ret; 25} 26 27function link(dir) { 28 const packageJSONPath = path.join(dir, "package.json"); 29 if (!fs.existsSync(packageJSONPath)) return; 30 const packageJSON = JSON.parse(fs.readFileSync(packageJSONPath, "utf8")); 31 const deps = getDeps(packageJSON); 32 33 for (const [dep, relativePath] of Object.entries(onDisk)) { 34 const fullPath = path.join(cwd, relativePath); 35 if (deps[dep]) { 36 exec(`pnpm link ${fullPath}`, dir); 37 } 38 } 39} 40 41function undo(dir) { 42 exec("pnpm unlink", dir); 43 try { 44 if (fs.existsSync(path.join(dir, "pnpm-lock.yaml"))) { 45 exec("git restore pnpm-lock.yaml", dir); 46 } 47 } catch { 48 // ignored 49 } 50} 51 52const shouldUndo = process.argv.includes("--undo"); 53const packages = fs.readdirSync("./packages"); 54 55for (const path of Object.values(onDisk)) { 56 console.log(path); 57 if (shouldUndo) { 58 undo(path); 59 } else { 60 link(path); 61 } 62} 63 64if (shouldUndo) { 65 console.log(cwd); 66 undo(cwd); 67 for (const pkg of packages) { 68 const dir = path.join(cwd, "packages", pkg); 69 console.log(dir); 70 undo(dir); 71 } 72} else { 73 for (const pkg of packages) { 74 const dir = path.join(cwd, "packages", pkg); 75 console.log(dir); 76 link(dir); 77 } 78}