mirror of
https://github.com/pnpm/pnpm.git
synced 2026-06-28 01:45:30 -04:00
Normalize blank and whitespace-only runtime selectors consistently in pnpm and pacquet. The runtime command can produce `runtime:` when no version is provided, and hand-edited manifests may contain whitespace-only selectors. Treat those cases as `latest` in the TypeScript runtime resolvers, the pacquet runtime resolvers, and the manifest conversion helpers. Also make manifest writeback reject malformed dependency fields before pruning managed runtime entries. This prevents a non-object dependency field from being interpreted as a removed runtime dependency and causing silent data loss during save.
22 lines
1008 B
TypeScript
22 lines
1008 B
TypeScript
import { expect, test } from '@jest/globals'
|
|
import { resolveNodeVersion } from '@pnpm/engine.runtime.node-resolver'
|
|
import { createFetchFromRegistry } from '@pnpm/network.fetch'
|
|
|
|
const fetch = createFetchFromRegistry({})
|
|
|
|
test.each([
|
|
['https://nodejs.org/download/release/', '6', '6.17.1'],
|
|
['https://nodejs.org/download/rc/', '16.0.0-rc.0', '16.0.0-rc.0'],
|
|
['https://nodejs.org/download/rc/', '10', '10.23.0-rc.0'],
|
|
['https://nodejs.org/download/nightly/', 'latest', /.+/],
|
|
['https://nodejs.org/download/release/', 'lts', /.+/],
|
|
['https://nodejs.org/download/release/', 'argon', '4.9.1'],
|
|
['https://nodejs.org/download/release/', 'latest', /.+/],
|
|
['https://nodejs.org/download/release/', '', /.+/],
|
|
['https://nodejs.org/download/release/', ' ', /.+/],
|
|
[undefined, 'latest', /.+/],
|
|
])('Node.js %s is resolved', async (nodeMirrorBaseUrl, spec, expectedVersion) => {
|
|
const version = await resolveNodeVersion(fetch, spec, nodeMirrorBaseUrl)
|
|
expect(version).toMatch(expectedVersion)
|
|
})
|