Files
pnpm/pnpm11/engine/runtime/node-resolver/test/resolveNodeVersion.test.ts
Zoltan Kochan b6b1162e13 fix(runtime): normalize blank runtime selectors (#12576)
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.
2026-06-22 15:33:29 +02:00

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)
})