Skip to content

Commit

Permalink
test: npm-resolver
Browse files Browse the repository at this point in the history
  • Loading branch information
zkochan committed Sep 3, 2022
1 parent a1bdd12 commit d699aa5
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 6 deletions.
22 changes: 16 additions & 6 deletions packages/npm-resolver/src/pickPackage.ts
Expand Up @@ -55,6 +55,17 @@ export interface PickPackageOptions {
dryRun: boolean
}

function pickPackageFromMetaUsingTime (
spec: RegistryPackageSpec,
preferredVersionSelectors: VersionSelectors | undefined,
meta: PackageMeta,
publishedBy?: Date
) {
const pickedPackage = pickPackageFromMeta(pickVersionByVersionRange, spec, preferredVersionSelectors, meta, publishedBy)
if (pickedPackage) return pickedPackage
return pickPackageFromMeta(pickLowestVersionByVersionRange, spec, preferredVersionSelectors, meta, publishedBy)
}

export default async (
ctx: {
fetch: (pkgName: string, registry: string, authHeaderValue?: string) => Promise<PackageMeta>
Expand All @@ -69,7 +80,10 @@ export default async (
opts: PickPackageOptions
): Promise<{meta: PackageMeta, pickedPackage: PackageInRegistry | null}> => {
opts = opts || {}
const _pickPackageFromMeta = pickPackageFromMeta.bind(null, opts.pickLowestVersion ? pickLowestVersionByVersionRange : pickVersionByVersionRange)
const _pickPackageFromMeta =
opts.publishedBy
? pickPackageFromMetaUsingTime
: (pickPackageFromMeta.bind(null, opts.pickLowestVersion ? pickLowestVersionByVersionRange : pickVersionByVersionRange))

validatePackageName(spec.name)

Expand Down Expand Up @@ -123,13 +137,9 @@ export default async (
if (opts.publishedBy) {
metaCachedInStore = metaCachedInStore ?? await limit(async () => loadMeta(pkgMirror))
if (metaCachedInStore?.cachedAt && new Date(metaCachedInStore.cachedAt) >= opts.publishedBy) {
let pickedPackage = _pickPackageFromMeta(spec, opts.preferredVersionSelectors, metaCachedInStore, opts.publishedBy)
if (!pickedPackage) {
pickedPackage = pickPackageFromMeta(pickLowestVersionByVersionRange, spec, opts.preferredVersionSelectors, metaCachedInStore)
}
return {
meta: metaCachedInStore,
pickedPackage,
pickedPackage: _pickPackageFromMeta(spec, opts.preferredVersionSelectors, metaCachedInStore, opts.publishedBy),
}
}
}
Expand Down
23 changes: 23 additions & 0 deletions packages/npm-resolver/test/fixtures/bad-dates.json
@@ -0,0 +1,23 @@
{
"versions": {
"1.0.0": {
"name": "bad-dates",
"version": "1.0.0",
"_hasShrinkwrap": false,
"directories": {},
"dist": {
"integrity": "sha512-9cI+DmhNhA8ioT/3EJFnt0s1yehnAECyIOXdT+2uQGzcEEBaj8oNmVWj33+ZjPndMIFRQh8JeJlEu1uv5/J7pQ==",
"shasum": "88009856b64a2f1eb7d8bb0179418424ae0452cb",
"tarball": "https://registry.npmjs.org/bad-dates/-/bad-dates-1.0.0.tgz"
}
}
},
"time": {
"1.0.0": "2017-08-17T19:26:00.508Z"
},
"name": "bad-dates",
"dist-tags": {
"latest": "1.0.0"
},
"modified": "2017-08-17T19:26:00.508Z"
}
35 changes: 35 additions & 0 deletions packages/npm-resolver/test/publishedBy.test.ts
@@ -0,0 +1,35 @@
import { createFetchFromRegistry } from '@pnpm/fetch'
import _createResolveFromNpm from '@pnpm/npm-resolver'
import fixtures from '@pnpm/test-fixtures'
import loadJsonFile from 'load-json-file'
import nock from 'nock'
import tempy from 'tempy'

const f = fixtures(__dirname)
const registry = 'https://registry.npmjs.org/'

/* eslint-disable @typescript-eslint/no-explicit-any */
const badDatesMeta = loadJsonFile.sync<any>(f.find('bad-dates.json'))
/* eslint-enable @typescript-eslint/no-explicit-any */

const fetch = createFetchFromRegistry({})
const getCredentials = () => ({ authHeaderValue: undefined, alwaysAuth: undefined })
const createResolveFromNpm = _createResolveFromNpm.bind(null, fetch, getCredentials)

test('fall back to a newer version if there is no version published by the given date', async () => {
nock(registry)
.get('/bad-dates')
.reply(200, badDatesMeta)

const cacheDir = tempy.directory()
const resolve = createResolveFromNpm({
cacheDir,
})
const resolveResult = await resolve({ alias: 'bad-dates', pref: '^1.0.0' }, {
registry,
publishedBy: new Date('2015-08-17T19:26:00.508Z'),
})

expect(resolveResult!.resolvedVia).toBe('npm-registry')
expect(resolveResult!.id).toBe('registry.npmjs.org/bad-dates/1.0.0')
})

0 comments on commit d699aa5

Please sign in to comment.