nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 85 lines 2.2 kB view raw
1#!/usr/bin/env node 2'use strict' 3 4const fs = require('fs') 5const process = require('process') 6const lockfile = require('./yarnpkg-lockfile.js') 7const { urlToName } = require('./common.js') 8 9const fixupYarnLock = async (lockContents, verbose) => { 10 const lockData = lockfile.parse(lockContents) 11 12 const fixedData = Object.fromEntries( 13 Object.entries(lockData.object) 14 .map(([dep, pkg]) => { 15 if (pkg.resolved === undefined) { 16 console.warn(`no resolved URL for package ${dep}`) 17 var maybeFile = dep.split("@", 2)[1] 18 if (maybeFile.startsWith("file:")) { 19 console.log(`Rewriting URL for local file dependency ${dep}`) 20 pkg.resolved = maybeFile 21 } 22 return [dep, pkg] 23 } 24 const [ url, hash ] = pkg.resolved.split("#", 2) 25 26 if (hash || url.startsWith("https://codeload.github.com/")) { 27 if (verbose) console.log(`Removing integrity for git dependency ${dep}`) 28 delete pkg.integrity 29 } 30 31 if (verbose) console.log(`Rewriting URL ${url} for dependency ${dep}`) 32 pkg.resolved = urlToName(url) 33 if (hash) 34 pkg.resolved += `#${hash}` 35 36 return [dep, pkg] 37 }) 38 ) 39 40 if (verbose) console.log('Done') 41 42 return fixedData 43} 44 45const showUsage = async () => { 46 process.stderr.write(` 47syntax: fixup-yarn-lock [path to yarn.lock] [options] 48 49Options: 50 -h --help Show this help 51 -v --verbose Verbose output 52`) 53 process.exit(1) 54} 55 56const main = async () => { 57 const args = process.argv.slice(2) 58 let next, lockFile, verbose 59 while (next = args.shift()) { 60 if (next == '--verbose' || next == '-v') { 61 verbose = true 62 } else if (next == '--help' || next == '-h') { 63 showUsage() 64 } else if (!lockFile) { 65 lockFile = next 66 } else { 67 showUsage() 68 } 69 } 70 let lockContents 71 try { 72 lockContents = await fs.promises.readFile(lockFile || 'yarn.lock', 'utf-8') 73 } catch { 74 showUsage() 75 } 76 77 const fixedData = await fixupYarnLock(lockContents, verbose) 78 await fs.promises.writeFile(lockFile || 'yarn.lock', lockfile.stringify(fixedData)) 79} 80 81main() 82 .catch(e => { 83 console.error(e) 84 process.exit(1) 85 })