72 lines
1.8 KiB
JavaScript
72 lines
1.8 KiB
JavaScript
const { exec } = require ('child_process')
|
|
const express = require ('express')
|
|
const fs = require ('fs')
|
|
const app = express()
|
|
|
|
const { PORT=4444 } = process.env
|
|
const [,,port=PORT] = process.argv
|
|
const cwd = __dirname
|
|
|
|
app.use('/-/:tarball', (req,res,next) => {
|
|
console.debug ('GET', req.params)
|
|
try {
|
|
const { tarball } = req.params
|
|
const [, pkg ] = /^capire-(\w+)/.exec(tarball)
|
|
fs.lstat(tarball,(err => {
|
|
if (err) exec(`npm pack ../${pkg}`,{cwd},next)
|
|
else next()
|
|
}))
|
|
} catch (e) {
|
|
console.error(e)
|
|
res.sendStatus(500)
|
|
}
|
|
})
|
|
|
|
app.use('/-', express.static(__dirname))
|
|
|
|
app.get('/*', (req,res)=>{
|
|
const url = decodeURIComponent(req.url)
|
|
console.debug ('GET',url)
|
|
try {
|
|
const [, capire, pkg ] = /^\/(@capire)\/(\w+)/.exec(url)
|
|
const package = require (`${capire}/${pkg}/package.json`)
|
|
const tarball = `capire-${pkg}-${package.version}.tgz`
|
|
// https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md
|
|
res.json({
|
|
"name": package.name,
|
|
"dist-tags": {
|
|
"latest": package.version
|
|
},
|
|
"versions": {
|
|
[package.version]: {
|
|
"name": package.name,
|
|
"version": package.version,
|
|
"dist": {
|
|
"tarball": `http://localhost:${port}/-/${tarball}`
|
|
},
|
|
}
|
|
},
|
|
})
|
|
} catch (e) {
|
|
console.error(e)
|
|
res.sendStatus(404)
|
|
}
|
|
})
|
|
|
|
app.listen(port, ()=>{
|
|
console.log (`npm set @capire:registry=http://localhost:${port}`)
|
|
console.log (`@capire registry listening on http://localhost:${port}`)
|
|
exec(`npm set @capire:registry=http://localhost:${port}`)
|
|
})
|
|
|
|
const _exit = ()=>{
|
|
console.log ('\nnpm conf rm @capire:registry')
|
|
exec('npm conf rm @capire:registry')
|
|
exec('rm *.tgz')
|
|
process.exit()
|
|
}
|
|
process.on ('SIGTERM',_exit)
|
|
process.on ('SIGHUP',_exit)
|
|
process.on ('SIGINT',_exit)
|
|
process.on ('SIGUSR2',_exit)
|