UNPKG

@tapjs/run

Version:

Command-line interface for the node-tap runner

59 lines 2.34 kB
import { readFileSync } from 'fs'; import pacote from 'pacote'; import { resolveImport } from 'resolve-import'; import { gt, satisfies } from 'semver'; import { fileURLToPath } from 'url'; import { npmBg } from './npm.js'; const corePJ = await resolveImport('@tapjs/core/package.json', import.meta.url); const { version: coreVersion } = JSON.parse(readFileSync(fileURLToPath(corePJ), 'utf8')); let registry = undefined; const getPackument = async (pkg, config) => { if (!registry) { const regLookup = npmBg(['config', 'get', 'registry'], config.projectRoot); if (regLookup.error) throw regLookup.error; if (regLookup.status || regLookup.signal) { throw new Error('failed to look up npm registry: ' + regLookup.stderr.trim()); } registry = regLookup.stdout.trim(); } return await pacote.packument(pkg, { registry }); }; /** * Select the highest version acceptable, preferring @latest and non-pre * versions over prereleases. * * Filter by the ones whose peerDependencies will allow the current * @tapjs/core. Returns `undefined` if no version matches. */ export const selectVersion = async (name, range = '', config) => { const packu = await getPackument(name, config); let acceptable = undefined; let acceptablePre = undefined; for (const [ver, mani] of Object.entries(packu.versions)) { const { '@tapjs/core': corePeerDep } = mani.peerDependencies || { '@tapjs/core': undefined, }; if (typeof corePeerDep === 'string' && !satisfies(coreVersion, corePeerDep)) { continue; } if (satisfies(ver, range)) { acceptable = newIfGt(acceptable, ver); acceptablePre = newIfGt(acceptablePre, ver); } else if (satisfies(ver, range, { includePrerelease: true })) { acceptablePre = newIfGt(acceptablePre, ver); } else { continue; } // if the @latest is acceptable, use that always if (ver === packu['dist-tags'].latest) return ver; } return acceptable || acceptablePre; }; // use the new version if it's newer than the older version const newIfGt = (old, neu) => old === undefined || gt(neu, old) ? neu : old; //# sourceMappingURL=select-version.js.map