import { spawnSync } from 'node:child_process'; import { readFileSync, writeFileSync } from 'node:fs'; export const parseArgs = () => { const args = {} as Record; let lastFlag: string | null = null; for (let i = 2; i < process.argv.length; ++i) { const arg = process.argv[i]; if (arg.toString().startsWith('-')) { lastFlag = arg.toString().replace(/^-{1,2}/, ''); args[lastFlag] = true; } else if (lastFlag) { args[lastFlag] = arg; lastFlag = null; } else { console.error(`Could not parse args: ${arg.toString()}`); } } return args; }; export const parseFetchurl = (url: string) => JSON.parse(spawnSync( 'nix', ['store', 'prefetch-file', '--refresh', '--json', '--hash-type', 'sha256', url, '--name', '"escaped"'], { shell: true }, ).stdout.toString()).hash; export const replaceInFile = (replace: RegExp, replacement: string, file: string) => { const fileContents = readFileSync(file); const replaced = fileContents.toString().replace(replace, replacement); writeFileSync(file, replaced); }; export const npmRun = (args: string[], workspaceDir: string) => spawnSync( 'npm', args, { cwd: workspaceDir }, ).stdout.toString();