mirror of
https://github.com/pnpm/pnpm.git
synced 2026-01-29 01:02:14 -05:00
PR #1613 * feat: shrinkwrap.yaml is registry-agnostic BREAKING CHANGE: The shrinkwrap.yaml file contains no info about the registry URL close #1353 * feat(shrinkwrap): don't set id for packages from npm registries * feat: bump shrinkwrap file version to 5 BREAKING CHANGE: shrinkwrap file version is 5 * fix: don't use ! in dependency paths inside node_modules close #1601 * fix: installing package from scope with non-scoped deps * feat(shrinkwrap): use underscore in dep path with peers
117 lines
3.5 KiB
TypeScript
117 lines
3.5 KiB
TypeScript
import test = require('tape')
|
|
import {
|
|
refToAbsolute,
|
|
refToRelative,
|
|
isAbsolute,
|
|
parse,
|
|
relative,
|
|
resolve,
|
|
} from 'dependency-path'
|
|
|
|
test('isAbsolute()', t => {
|
|
t.notOk(isAbsolute('/foo/1.0.0'))
|
|
t.ok(isAbsolute('registry.npmjs.org/foo/1.0.0'))
|
|
t.end()
|
|
})
|
|
|
|
test('parse()', t => {
|
|
t.throws(() => parse(undefined as any), /got `undefined`/)
|
|
t.throws(() => parse(1 as any), /got `number`/)
|
|
|
|
t.deepEqual(parse('/foo/1.0.0'), {
|
|
isAbsolute: false,
|
|
name: 'foo',
|
|
version: '1.0.0',
|
|
host: undefined,
|
|
})
|
|
|
|
t.deepEqual(parse('/@foo/bar/1.0.0'), {
|
|
isAbsolute: false,
|
|
name: '@foo/bar',
|
|
version: '1.0.0',
|
|
host: undefined,
|
|
})
|
|
|
|
t.deepEqual(parse('registry.npmjs.org/foo/1.0.0'), {
|
|
isAbsolute: true,
|
|
name: 'foo',
|
|
version: '1.0.0',
|
|
host: 'registry.npmjs.org',
|
|
})
|
|
|
|
t.deepEqual(parse('registry.npmjs.org/@foo/bar/1.0.0'), {
|
|
isAbsolute: true,
|
|
name: '@foo/bar',
|
|
version: '1.0.0',
|
|
host: 'registry.npmjs.org',
|
|
})
|
|
|
|
t.deepEqual(parse('github.com/kevva/is-positive'), {
|
|
isAbsolute: true,
|
|
host: 'github.com',
|
|
})
|
|
|
|
t.deepEqual(parse('example.com/foo/1.0.0'), {
|
|
isAbsolute: true,
|
|
name: 'foo',
|
|
version: '1.0.0',
|
|
host: 'example.com',
|
|
})
|
|
|
|
t.deepEqual(parse('example.com/foo/1.0.0_bar@2.0.0'), {
|
|
isAbsolute: true,
|
|
name: 'foo',
|
|
version: '1.0.0',
|
|
host: 'example.com',
|
|
})
|
|
|
|
t.throws(() => parse('/foo/bar'), /\/foo\/bar is an invalid relative dependency path/)
|
|
|
|
t.end()
|
|
})
|
|
|
|
test('refToAbsolute()', t => {
|
|
const registries = {
|
|
'default': 'https://registry.npmjs.org/',
|
|
'@foo': 'http://foo.com/',
|
|
}
|
|
t.equal(refToAbsolute('1.0.0', 'foo', registries), 'registry.npmjs.org/foo/1.0.0')
|
|
t.equal(refToAbsolute('1.0.0', '@foo/foo', registries), 'foo.com/@foo/foo/1.0.0')
|
|
t.equal(refToAbsolute('registry.npmjs.org/foo/1.0.0', 'foo', registries), 'registry.npmjs.org/foo/1.0.0')
|
|
t.equal(refToAbsolute('/foo/1.0.0', 'foo', registries), 'registry.npmjs.org/foo/1.0.0')
|
|
t.equal(refToAbsolute('/@foo/foo/1.0.0', '@foo/foo', registries), 'foo.com/@foo/foo/1.0.0')
|
|
t.equal(refToAbsolute('link:../foo', 'foo', registries), null, "linked dependencies don't have an absolute path")
|
|
t.end()
|
|
})
|
|
|
|
test('refToRelative()', t => {
|
|
t.equal(refToRelative('/@most/multicast/1.3.0/most@1.7.3', '@most/multicast'), '/@most/multicast/1.3.0/most@1.7.3')
|
|
t.equal(refToRelative('link:../foo', 'foo'), null, "linked dependencies don't have a relative path")
|
|
t.equal(refToRelative('file:../tarball.tgz', 'foo'), 'file:../tarball.tgz')
|
|
t.end()
|
|
})
|
|
|
|
test('relative()', t => {
|
|
const registries = {
|
|
'default': 'https://registry.npmjs.org/',
|
|
'@foo': 'http://localhost:4873/',
|
|
}
|
|
t.equal(relative(registries, 'foo', 'registry.npmjs.org/foo/1.0.0'), '/foo/1.0.0')
|
|
t.equal(relative(registries, '@foo/foo', 'localhost+4873/@foo/foo/1.0.0'), '/@foo/foo/1.0.0')
|
|
t.equal(relative(registries, 'foo', 'registry.npmjs.org/foo/1.0.0/PeLdniYiO858gXNY39o5wISKyw'), '/foo/1.0.0/PeLdniYiO858gXNY39o5wISKyw')
|
|
t.equal(relative(registries, 'foo', 'registry.npmjs.org/foo/-/foo-1.0.0'), 'registry.npmjs.org/foo/-/foo-1.0.0', 'a tarball ID should remain absolute')
|
|
t.end()
|
|
})
|
|
|
|
test('resolve()', (t) => {
|
|
const registries = {
|
|
'default': 'htts://foo.com/',
|
|
'@bar': 'https://bar.com/',
|
|
}
|
|
t.equal(resolve(registries, '/foo/1.0.0'), 'foo.com/foo/1.0.0')
|
|
t.equal(resolve(registries, '/@bar/bar/1.0.0'), 'bar.com/@bar/bar/1.0.0')
|
|
t.equal(resolve(registries, '/@qar/qar/1.0.0'), 'foo.com/@qar/qar/1.0.0')
|
|
t.equal(resolve(registries, 'qar.com/foo/1.0.0'), 'qar.com/foo/1.0.0')
|
|
t.end()
|
|
})
|