Skip to content

Instantly share code, notes, and snippets.

@isaacs
Last active April 19, 2019 23:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save isaacs/10a35a78f017ca096bf96b359b99c4d0 to your computer and use it in GitHub Desktop.
Save isaacs/10a35a78f017ca096bf96b359b99c4d0 to your computer and use it in GitHub Desktop.
#!/usr/bin/env node
const pubreg = 'registry.npmjs.org'
const fs = require('fs')
const https = require('https')
const url = require('url')
const packageLock = process.argv[2] || './package-lock.json'
const lock = JSON.parse(fs.readFileSync(packageLock, 'utf8'))
const fix = lock => Promise.all(
Object.keys(lock.dependencies || {}).map(pkg => new Promise(resolve => {
if (lock.dependencies[pkg].resolved && url.parse(lock.dependencies[pkg].resolved).host !== pubreg) {
https.request({
method: 'HEAD',
host: pubreg,
path: '/' + pkg,
}, res => {
if (res.statusCode === 200) {
console.error('fix', lock.dependencies[pkg].resolved)
const fixed = url.format({
...(url.parse(lock.dependencies[pkg].resolved)),
host: pubreg,
hostname: pubreg,
})
lock.dependencies[pkg].resolved = fixed
console.error('fixed', fixed, lock.dependencies[pkg].resolved)
return fix(lock.dependencies[pkg]).then(resolve)
}
resolve()
}).end()
} else {
resolve()
}
}))
)
const main = async () => {
await fix(lock)
console.error('write back')
fs.writeFileSync(packageLock, JSON.stringify(lock, null, 2) + '\n')
}
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment