| 1234567891011121314151617181920212223242526272829303132 |
- /** Local first-publication fixture: serve exact release bytes; proxy other public packages. */
- import fs from 'node:fs'
- import path from 'node:path'
- import { createServer } from 'node:http'
- import { createHash } from 'node:crypto'
- import { packageFiles } from './tar.mjs'
- const packages = process.argv.slice(2).map(filename => {
- const manifest = JSON.parse(packageFiles(filename).get('package.json'))
- const bytes = fs.readFileSync(filename)
- return { manifest, bytes, file: path.basename(filename), integrity: `sha512-${createHash('sha512').update(bytes).digest('base64')}` }
- })
- const publishedAt = new Date().toISOString()
- const server = createServer((request, response) => {
- if (!['GET', 'HEAD'].includes(request.method)) { response.writeHead(405); response.end(); return }
- const url = new URL(request.url, 'http://localhost')
- const name = decodeURIComponent(url.pathname.slice(1))
- const tarball = packages.find(item => name === `tarballs/${item.file}`)
- if (tarball) { response.writeHead(200, { 'content-type': 'application/octet-stream' }); response.end(tarball.bytes); return }
- const pkg = packages.find(item => name === item.manifest.name)
- if (!pkg) {
- response.writeHead(307, { location: `https://registry.npmjs.org${url.pathname}${url.search}` })
- response.end()
- return
- }
- const origin = `http://127.0.0.1:${server.address().port}`
- response.writeHead(200, { 'content-type': 'application/json' })
- response.end(JSON.stringify({ name, 'dist-tags': { preview: pkg.manifest.version },
- time: { created: publishedAt, modified: publishedAt, [pkg.manifest.version]: publishedAt },
- versions: { [pkg.manifest.version]: { ...pkg.manifest, dist: { tarball: `${origin}/tarballs/${pkg.file}`, integrity: pkg.integrity } } } }))
- })
- server.listen(0, '127.0.0.1', () => console.log(`http://127.0.0.1:${server.address().port}/`))
|