Skip to content

Commit f519cf4

Browse files
authoredApr 5, 2022
feat: add option to not replace magic registry host (#143)
1 parent c11dce6 commit f519cf4

File tree

6 files changed

+126
-1
lines changed

6 files changed

+126
-1
lines changed
 

‎lib/fetcher.js

+3
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ class FetcherBase {
105105
this[_readPackageJson] = readPackageJsonFast
106106
}
107107

108+
// config values: npmjs (default), never
109+
this.replaceRegistryHost = opts.replaceRegistryHost === 'never' ? 'never' : 'npmjs'
110+
108111
this.defaultTag = opts.defaultTag || 'latest'
109112
this.registry = removeTrailingSlashes(opts.registry || 'https://registry.npmjs.org')
110113

‎lib/remote.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ class RemoteFetcher extends Fetcher {
1313
constructor (spec, opts) {
1414
super(spec, opts)
1515
this.resolved = this.spec.fetchSpec
16-
if (magic.test(this.resolved) && !magic.test(this.registry + '/')) {
16+
if (this.replaceRegistryHost === 'npmjs'
17+
&& magic.test(this.resolved)
18+
&& !magic.test(this.registry + '/')) {
1719
this.resolved = this.resolved.replace(magic, this.registry + '/')
1820
}
1921

‎package.json

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"@npmcli/template-oss": "3.2.2",
3030
"hosted-git-info": "^5.0.0",
3131
"mutate-fs": "^2.1.1",
32+
"nock": "^13.2.4",
3233
"npm-registry-mock": "^1.3.1",
3334
"tap": "^16.0.1"
3435
},

‎test/fetcher.js

+14
Original file line numberDiff line numberDiff line change
@@ -517,3 +517,17 @@ t.test('set integrity, pick default algo', t => {
517517
t.equal(g.pickIntegrityAlgorithm(), 'sha256')
518518
t.end()
519519
})
520+
521+
t.test('replace opts defaults to npmjs', t => {
522+
const f = new FileFetcher('pkg.tgz', {
523+
})
524+
t.equal(f.replaceRegistryHost, 'npmjs')
525+
t.end()
526+
})
527+
t.test('replace opts never', t => {
528+
const f = new FileFetcher('pkg.tgz', {
529+
replaceRegistryHost: 'never',
530+
})
531+
t.equal(f.replaceRegistryHost, 'never')
532+
t.end()
533+
})

‎test/fixtures/tnock.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
'use strict'
2+
3+
const nock = require('nock')
4+
5+
module.exports = tnock
6+
function tnock (t, host) {
7+
const server = nock(host)
8+
nock.disableNetConnect()
9+
t.teardown(function () {
10+
nock.enableNetConnect()
11+
server.done()
12+
})
13+
return server
14+
}

‎test/registry.js

+91
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const RegistryFetcher = require('../lib/registry.js')
22
const t = require('tap')
33
const mr = require('npm-registry-mock')
4+
const tnock = require('./fixtures/tnock')
45
const port = 18000 + (+process.env.TAP_CHILD_ID || 0)
56
const me = t.testdir()
67

@@ -239,3 +240,93 @@ t.test('packument that falls back to fullMetadata', t => {
239240
t.end()
240241
})
241242
})
243+
244+
t.test('option replaceRegistryHost', rhTest => {
245+
const { join, resolve } = require('path')
246+
const fs = require('fs')
247+
248+
const abbrev = resolve(__dirname, 'fixtures/abbrev-1.1.1.tgz')
249+
const abbrevTGZ = fs.readFileSync(abbrev)
250+
251+
const abbrevPackument = JSON.stringify({
252+
_id: 'abbrev',
253+
_rev: 'lkjadflkjasdf',
254+
name: 'abbrev',
255+
'dist-tags': { latest: '1.1.1' },
256+
versions: {
257+
'1.1.1': {
258+
name: 'abbrev',
259+
version: '1.1.1',
260+
dist: {
261+
tarball: 'https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz',
262+
},
263+
},
264+
},
265+
})
266+
267+
rhTest.test('host should not be replaced', async ct => {
268+
const testdir = t.testdir()
269+
tnock(ct, 'https://registry.github.com')
270+
.get('/abbrev')
271+
.reply(200, abbrevPackument)
272+
273+
tnock(ct, 'https://registry.npmjs.org')
274+
.get('/abbrev/-/abbrev-1.1.1.tgz')
275+
.reply(200, abbrevTGZ)
276+
277+
const fetcher = new RegistryFetcher('abbrev', {
278+
registry: 'https://registry.github.com',
279+
cache: join(testdir, 'cache'),
280+
fullReadJson: true,
281+
replaceRegistryHost: 'never',
282+
})
283+
ct.equal(fetcher.replaceRegistryHost, 'never')
284+
const manifest = await fetcher.manifest()
285+
ct.equal(manifest.dist.tarball, 'https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz')
286+
const tarball = await fetcher.tarball()
287+
ct.match(tarball, abbrevTGZ)
288+
})
289+
290+
rhTest.test('host should be replaced', async ct => {
291+
const testdir = t.testdir()
292+
tnock(ct, 'https://registry.github.com')
293+
.get('/abbrev')
294+
.reply(200, abbrevPackument)
295+
.get('/abbrev/-/abbrev-1.1.1.tgz')
296+
.reply(200, abbrevTGZ)
297+
298+
const fetcher = new RegistryFetcher('abbrev', {
299+
registry: 'https://registry.github.com',
300+
cache: join(testdir, 'cache'),
301+
fullReadJson: true,
302+
})
303+
ct.equal(fetcher.replaceRegistryHost, 'npmjs')
304+
const manifest = await fetcher.manifest()
305+
ct.equal(manifest.dist.tarball, 'https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz')
306+
const tarball = await fetcher.tarball()
307+
ct.match(tarball, abbrevTGZ)
308+
})
309+
310+
rhTest.test('host should be replaced if set to npmjs', async ct => {
311+
const testdir = t.testdir()
312+
tnock(ct, 'https://registry.github.com')
313+
.get('/abbrev')
314+
.reply(200, abbrevPackument)
315+
.get('/abbrev/-/abbrev-1.1.1.tgz')
316+
.reply(200, abbrevTGZ)
317+
318+
const fetcher = new RegistryFetcher('abbrev', {
319+
registry: 'https://registry.github.com',
320+
cache: join(testdir, 'cache'),
321+
fullReadJson: true,
322+
replaceRegistryHost: 'npmjs',
323+
})
324+
ct.equal(fetcher.replaceRegistryHost, 'npmjs')
325+
const manifest = await fetcher.manifest()
326+
ct.equal(manifest.dist.tarball, 'https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz')
327+
const tarball = await fetcher.tarball()
328+
ct.match(tarball, abbrevTGZ)
329+
})
330+
331+
rhTest.end()
332+
})

0 commit comments

Comments
 (0)
Please sign in to comment.