fix(update): stop downgrading prereleases (#7466)

close #7436

---------

Co-authored-by: Zoltan Kochan <z@kochan.io>
This commit is contained in:
Khải
2024-01-27 20:41:58 +07:00
committed by Zoltan Kochan
parent fd42caf242
commit 31054a63e6
37 changed files with 340 additions and 255 deletions

View File

@@ -0,0 +1,12 @@
---
"@pnpm/plugin-commands-installation": minor
"@pnpm/resolve-dependencies": minor
"@pnpm/package-requester": patch
"@pnpm/store-controller-types": minor
"@pnpm/resolver-base": minor
"@pnpm/npm-resolver": minor
"@pnpm/core": minor
"pnpm": patch
---
Running `pnpm update -r --latest` will no longer downgrade prerelease dependencies [#7436](https://github.com/pnpm/pnpm/issues/7436).

View File

@@ -44,7 +44,7 @@
"@pnpm/constants": "workspace:*",
"@pnpm/lockfile-types": "workspace:*",
"@pnpm/modules-yaml": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/types": "workspace:*",
"is-windows": "^1.0.2",
"isexe": "2.0.0",

View File

@@ -40,7 +40,7 @@
"test": "pnpm pretest && pnpm run compile && jest"
},
"dependencies": {
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/store.cafs": "workspace:*",
"path-exists": "^4.0.0"
},

View File

@@ -35,7 +35,7 @@
"@pnpm/filter-workspace-packages": "workspace:*",
"@pnpm/plugin-commands-rebuild": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/test-fixtures": "workspace:*",
"@pnpm/test-ipc-server": "workspace:*",
"@types/ramda": "0.28.20",

View File

@@ -34,7 +34,7 @@
"@pnpm/filter-workspace-packages": "workspace:*",
"@pnpm/plugin-commands-script-runners": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/test-ipc-server": "workspace:*",
"@types/is-windows": "^1.0.2",
"@types/ramda": "0.28.20",

View File

@@ -39,7 +39,7 @@
"@commitlint/prompt-cli": "^17.8.1",
"@pnpm/eslint-config": "workspace:*",
"@pnpm/meta-updater": "1.0.0",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/tsconfig": "workspace:*",
"@pnpm/worker": "workspace:*",
"@types/jest": "^29.5.8",

View File

@@ -34,7 +34,7 @@
"@pnpm/filter-workspace-packages": "workspace:*",
"@pnpm/plugin-commands-patching": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/test-fixtures": "workspace:*",
"@types/normalize-path": "^3.0.2",
"@types/ramda": "0.28.20",

View File

@@ -82,7 +82,7 @@
"@pnpm/lockfile-types": "workspace:*",
"@pnpm/package-store": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/store-path": "workspace:*",
"@pnpm/store.cafs": "workspace:*",
"@pnpm/test-ipc-server": "workspace:*",

View File

@@ -91,6 +91,7 @@ export interface StrictInstallOptions {
unsafePerm: boolean
registries: Registries
tag: string
updateToLatest?: boolean
overrides: Record<string, string>
ownLifecycleHooksStdio: 'inherit' | 'pipe'
workspacePackages: WorkspacePackages

View File

@@ -1034,6 +1034,7 @@ const _installInContext: InstallFunction = async (projects, ctx, opts) => {
saveWorkspaceProtocol: opts.saveWorkspaceProtocol,
storeController: opts.storeController,
tag: opts.tag,
updateToLatest: opts.updateToLatest,
virtualStoreDir: ctx.virtualStoreDir,
wantedLockfile: ctx.wantedLockfile,
workspacePackages: opts.workspacePackages,

View File

@@ -23,7 +23,7 @@
"@pnpm/package-store": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/read-projects-context": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/store-path": "workspace:*",
"@pnpm/store.cafs": "workspace:*",
"@pnpm/test-fixtures": "workspace:*",

View File

@@ -61,7 +61,7 @@
"@pnpm/client": "workspace:*",
"@pnpm/create-cafs-store": "workspace:*",
"@pnpm/package-requester": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/test-fixtures": "workspace:*",
"@types/normalize-path": "^3.0.2",
"@types/ramda": "0.28.20",

View File

@@ -184,6 +184,7 @@ async function resolveAndFetch (
projectDir: options.projectDir,
registry: options.registry,
workspacePackages: options.workspacePackages,
updateToLatest: options.updateToLatest,
}), { priority: options.downloadPriority })
manifest = resolveResult.manifest

View File

@@ -34,7 +34,7 @@
"@pnpm/modules-yaml": "workspace:*",
"@pnpm/plugin-commands-installation": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/test-fixtures": "workspace:*",
"@pnpm/test-ipc-server": "workspace:*",
"@types/proxyquire": "^1.3.31",

View File

@@ -6,6 +6,7 @@ import {
import { type Config, getOptionsFromRootManifest } from '@pnpm/config'
import { PnpmError } from '@pnpm/error'
import { filterPkgsBySelectorObjects } from '@pnpm/filter-workspace-packages'
import { filterDependenciesByType } from '@pnpm/manifest-utils'
import { arrayOfWorkspacePackagesToMap, findWorkspacePackages } from '@pnpm/workspace.find-packages'
import { type Lockfile } from '@pnpm/lockfile-types'
import { rebuildProjects } from '@pnpm/plugin-commands-rebuild'
@@ -25,7 +26,6 @@ import { getPinnedVersion } from './getPinnedVersion'
import { getSaveType } from './getSaveType'
import { getNodeExecPath } from './nodeExecPath'
import { recursive, createMatcher, matchDependencies, makeIgnorePatterns, type UpdateDepsMatcher } from './recursive'
import { updateToLatestSpecsFromManifest, createLatestSpecs } from './updateToLatestSpecsFromManifest'
import { createWorkspaceSpecs, updateToWorkspacePackagesFromManifest } from './updateWorkspaceDependencies'
const OVERWRITE_UPDATE_OPTIONS = {
@@ -105,6 +105,7 @@ export type InstallDepsOptions = Pick<Config,
*/
lockfileCheck?: (prev: Lockfile, next: Lockfile) => void
update?: boolean
updateToLatest?: boolean
updateMatching?: (pkgName: string) => boolean
updatePackageManifest?: boolean
useBetaCli?: boolean
@@ -265,12 +266,8 @@ when running add/update with the --workspace option')
}
}
if (opts.update && opts.latest) {
if (!params || (params.length === 0)) {
params = updateToLatestSpecsFromManifest(manifest, includeDirect)
} else {
params = createLatestSpecs(params, manifest)
}
if (opts.update && opts.latest && (!params || (params.length === 0))) {
params = Object.keys(filterDependenciesByType(manifest, includeDirect))
}
if (opts.workspace) {
if (!params || (params.length === 0)) {

View File

@@ -36,7 +36,6 @@ import mem from 'mem'
import pFilter from 'p-filter'
import pLimit from 'p-limit'
import { createWorkspaceSpecs, updateToWorkspacePackagesFromManifest } from './updateWorkspaceDependencies'
import { updateToLatestSpecsFromManifest, createLatestSpecs } from './updateToLatestSpecsFromManifest'
import { getSaveType } from './getSaveType'
import { getPinnedVersion } from './getPinnedVersion'
import { type PreferredVersions } from '@pnpm/resolver-base'
@@ -197,16 +196,8 @@ export async function recursive (
return
}
}
if (updateToLatest) {
if (!params || (params.length === 0)) {
currentInput = updateToLatestSpecsFromManifest(manifest, includeDirect)
} else {
currentInput = createLatestSpecs(currentInput, manifest)
if (currentInput.length === 0) {
installOpts.pruneLockfileImporters = false
return
}
}
if (updateToLatest && (!params || (params.length === 0))) {
currentInput = Object.keys(filterDependenciesByType(manifest, includeDirect))
}
if (opts.workspace) {
if (!currentInput || (currentInput.length === 0)) {
@@ -319,13 +310,8 @@ export async function recursive (
currentInput = matchDependencies(updateMatch, manifest, includeDirect)
if (currentInput.length === 0) return
}
if (updateToLatest) {
if (!params || (params.length === 0)) {
currentInput = updateToLatestSpecsFromManifest(manifest, includeDirect)
} else {
currentInput = createLatestSpecs(currentInput, manifest)
if (currentInput.length === 0) return
}
if (updateToLatest && (!params || (params.length === 0))) {
currentInput = Object.keys(filterDependenciesByType(manifest, includeDirect))
}
if (opts.workspace) {
if (!currentInput || (currentInput.length === 0)) {

View File

@@ -290,6 +290,7 @@ async function update (
includeDirect,
include,
update: true,
updateToLatest: opts.latest,
updateMatching: (dependencies.length > 0) && dependencies.every(dep => !dep.substring(1).includes('@')) && depth > 0 && !opts.latest
? createMatcher(dependencies)
: undefined,

View File

@@ -1,43 +0,0 @@
import { filterDependenciesByType, getAllDependenciesFromManifest } from '@pnpm/manifest-utils'
import { type IncludedDependencies, type ProjectManifest } from '@pnpm/types'
import getVerSelType from 'version-selector-type'
export function updateToLatestSpecsFromManifest (manifest: ProjectManifest, include: IncludedDependencies) {
const allDeps = filterDependenciesByType(manifest, include)
const updateSpecs = []
for (const [depName, depVersion] of Object.entries(allDeps)) {
if (depVersion.startsWith('npm:')) {
updateSpecs.push(`${depName}@${removeVersionFromSpec(depVersion)}@latest`)
} else {
const selector = getVerSelType(depVersion)
if (selector == null) continue
updateSpecs.push(`${depName}@latest`)
}
}
return updateSpecs
}
export function createLatestSpecs (specs: string[], manifest: ProjectManifest) {
const allDeps = getAllDependenciesFromManifest(manifest)
return specs
.filter((selector) => selector.includes('@', 1)
? allDeps[selector.slice(0, selector.indexOf('@', 1))]
: allDeps[selector]
)
.map((selector) => {
if (selector.includes('@', 1)) {
return selector
}
if (allDeps[selector].startsWith('npm:')) {
return `${selector}@${removeVersionFromSpec(allDeps[selector])}@latest`
}
if (getVerSelType(allDeps[selector]) == null) {
return selector
}
return `${selector}@latest`
})
}
function removeVersionFromSpec (spec: string) {
return spec.substring(0, spec.lastIndexOf('@'))
}

View File

@@ -1,42 +0,0 @@
import { updateToLatestSpecsFromManifest, createLatestSpecs } from '../lib/updateToLatestSpecsFromManifest'
const MANIFEST = {
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': 'npm:@pnpm.e2e/pkg-with-1-dep@1.0.0',
},
devDependencies: {
foo: 'github:pnpm/foo',
},
optionalDependencies: {
'is-positive': '^1.0.0',
},
}
test('updateToLatestSpecsFromManifest()', () => {
const updateResult1 = expect(updateToLatestSpecsFromManifest(MANIFEST, {
optionalDependencies: true,
dependencies: true,
devDependencies: true,
}))
updateResult1.toHaveLength(2)
updateResult1.toContain('@pnpm.e2e/dep-of-pkg-with-1-dep@npm:@pnpm.e2e/pkg-with-1-dep@latest')
updateResult1.toContain('is-positive@latest')
const updateResult2 = expect(updateToLatestSpecsFromManifest(MANIFEST, {
optionalDependencies: false,
dependencies: true,
devDependencies: false,
}))
updateResult2.toHaveLength(1)
updateResult2.toStrictEqual(['@pnpm.e2e/dep-of-pkg-with-1-dep@npm:@pnpm.e2e/pkg-with-1-dep@latest'])
})
test('createLatestSpecs()', () => {
expect(
createLatestSpecs(['@pnpm.e2e/dep-of-pkg-with-1-dep', 'is-positive@2.0.0', 'foo'], MANIFEST)
).toStrictEqual(['@pnpm.e2e/dep-of-pkg-with-1-dep@npm:@pnpm.e2e/pkg-with-1-dep@latest', 'is-positive@2.0.0', 'foo'])
expect(
createLatestSpecs(['@pnpm.e2e/dep-of-pkg-with-1-dep', 'is-positive', 'foo', 'bar'], MANIFEST)
).toStrictEqual(['@pnpm.e2e/dep-of-pkg-with-1-dep@npm:@pnpm.e2e/pkg-with-1-dep@latest', 'is-positive@latest', 'foo'])
})

View File

@@ -17,6 +17,7 @@ export interface WantedDependency {
raw: string
pinnedVersion?: PinnedVersion
nodeExecPath?: string
updateSpec?: boolean
}
export function getWantedDependencies (

View File

@@ -110,6 +110,8 @@ export async function resolveDependencies (
preferredVersions: opts.preferredVersions,
virtualStoreDir: opts.virtualStoreDir,
workspacePackages: opts.workspacePackages,
updateToLatest: opts.updateToLatest,
noDependencySelectors: importers.every(({ wantedDependencies }) => wantedDependencies.length === 0),
})
const projectsToResolve = await Promise.all(importers.map(async (project) => _toResolveImporter(project)))
const {

View File

@@ -255,6 +255,7 @@ interface ResolvedDependenciesOptions {
updateDepth: number
prefix: string
supportedArchitectures?: SupportedArchitectures
updateToLatest?: boolean
}
interface PostponedResolutionOpts {
@@ -677,6 +678,7 @@ async function resolveDependenciesOfDependency (
updateDepth,
updateMatching: options.updateMatching,
supportedArchitectures: options.supportedArchitectures,
updateToLatest: options.updateToLatest,
}
const resolveDependencyResult = await resolveDependency(extendedWantedDep.wantedDependency, ctx, resolveDependencyOpts)
@@ -713,6 +715,7 @@ async function resolveDependenciesOfDependency (
prefix: options.prefix,
updateMatching: options.updateMatching,
supportedArchitectures: options.supportedArchitectures,
updateToLatest: options.updateToLatest,
})
return {
resolveDependencyResult,
@@ -769,6 +772,7 @@ async function resolveChildren (
prefix: string
updateMatching?: UpdateMatchingFunction
supportedArchitectures?: SupportedArchitectures
updateToLatest?: boolean
},
{
parentPkgAliases,
@@ -1019,6 +1023,7 @@ interface ResolveDependencyOptions {
updateDepth: number
updateMatching?: UpdateMatchingFunction
supportedArchitectures?: SupportedArchitectures
updateToLatest?: boolean
}
type ResolveDependencyResult = PkgAddress | LinkedDependency | null
@@ -1098,6 +1103,7 @@ async function resolveDependency (
err.pkgsStack = nodeIdToParents(options.parentPkg.nodeId, ctx.resolvedPackagesByDepPath)
return err
},
updateToLatest: options.updateToLatest,
})
} catch (err: any) { // eslint-disable-line
if (wantedDependency.optional) {

View File

@@ -99,6 +99,7 @@ export interface ResolveDependenciesOptions {
wantedLockfile: Lockfile
workspacePackages: WorkspacePackages
supportedArchitectures?: SupportedArchitectures
updateToLatest?: boolean
}
export async function resolveDependencyTree<T> (
@@ -166,6 +167,7 @@ export async function resolveDependencyTree<T> (
updateMatching: importer.updateMatching,
prefix: importer.rootDir,
supportedArchitectures: opts.supportedArchitectures,
updateToLatest: opts.updateToLatest,
}
return {
updatePackageManifest: importer.updatePackageManifest,

View File

@@ -17,6 +17,8 @@ export async function toResolveImporter (
preferredVersions?: PreferredVersions
virtualStoreDir: string
workspacePackages: WorkspacePackages
updateToLatest?: boolean
noDependencySelectors: boolean
},
project: ImporterToResolve
) {
@@ -31,6 +33,11 @@ export async function toResolveImporter (
const defaultUpdateDepth = (project.update === true || (project.updateMatching != null)) ? opts.defaultUpdateDepth : -1
const existingDeps = nonLinkedDependencies
.filter(({ alias }) => !project.wantedDependencies.some((wantedDep) => wantedDep.alias === alias))
if (opts.updateToLatest && opts.noDependencySelectors) {
for (const dep of existingDeps) {
dep.updateSpec = true
}
}
let wantedDependencies!: Array<WantedDependency & { isNew?: boolean, updateDepth: number }>
if (!project.manifest) {
wantedDependencies = [
@@ -48,14 +55,18 @@ export async function toResolveImporter (
...dep,
updateDepth: project.updateMatching != null
? defaultUpdateDepth
: (prefIsLocalTarball(dep.pref) ? 0 : -1),
: (prefIsLocalTarball(dep.pref) ? 0 : defaultUpdateDepth),
})
wantedDependencies = [
...project.wantedDependencies.map(
defaultUpdateDepth < 0
? updateLocalTarballs
: (dep) => ({ ...dep, updateDepth: defaultUpdateDepth })),
...existingDeps.map(updateLocalTarballs),
...existingDeps.map(
opts.noDependencySelectors && project.updateMatching != null
? updateLocalTarballs
: (dep) => ({ ...dep, updateDepth: -1 })
),
]
}
return {

158
pnpm-lock.yaml generated
View File

@@ -109,8 +109,8 @@ importers:
specifier: 1.0.0
version: 1.0.0
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/tsconfig':
specifier: workspace:*
version: link:__utils__/tsconfig
@@ -227,8 +227,8 @@ importers:
specifier: workspace:*
version: link:../../pkg-manager/modules-yaml
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/types':
specifier: workspace:*
version: link:../../packages/types
@@ -264,8 +264,8 @@ importers:
__utils__/assert-store:
dependencies:
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/store.cafs':
specifier: workspace:*
version: link:../../store/cafs
@@ -1320,8 +1320,8 @@ importers:
specifier: workspace:*
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -1441,8 +1441,8 @@ importers:
specifier: workspace:*
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/test-ipc-server':
specifier: workspace:*
version: link:../../__utils__/test-ipc-server
@@ -2885,8 +2885,8 @@ importers:
specifier: workspace:*
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -3145,8 +3145,8 @@ importers:
specifier: workspace:*
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/store-path':
specifier: workspace:*
version: link:../../store/store-path
@@ -3427,8 +3427,8 @@ importers:
specifier: workspace:*
version: link:../read-projects-context
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/store-path':
specifier: workspace:*
version: link:../../store/store-path
@@ -3784,8 +3784,8 @@ importers:
specifier: workspace:*
version: 'link:'
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -3977,8 +3977,8 @@ importers:
specifier: workspace:*
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -4534,8 +4534,8 @@ importers:
specifier: workspace:*
version: link:../pkg-manifest/read-project-manifest
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/run-npm':
specifier: workspace:*
version: link:../exec/run-npm
@@ -4794,8 +4794,8 @@ importers:
specifier: workspace:*
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
releasing/plugin-commands-publishing:
dependencies:
@@ -4894,8 +4894,8 @@ importers:
specifier: workspace:*
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/test-ipc-server':
specifier: workspace:*
version: link:../../__utils__/test-ipc-server
@@ -5454,8 +5454,8 @@ importers:
specifier: workspace:*
version: link:../../pkg-manifest/read-package-json
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -5518,8 +5518,8 @@ importers:
specifier: workspace:*
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@types/ramda':
specifier: 0.28.20
version: 0.28.20
@@ -5612,8 +5612,8 @@ importers:
specifier: workspace:*
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@pnpm/test-fixtures':
specifier: workspace:*
version: link:../../__utils__/test-fixtures
@@ -5944,8 +5944,8 @@ importers:
specifier: workspace:*
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 3.17.1
version: 3.17.1(typanion@3.14.0)
specifier: 3.18.0
version: 3.18.0(typanion@3.14.0)
'@types/archy':
specifier: 0.0.33
version: 0.0.33
@@ -6679,7 +6679,6 @@ packages:
/@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.23.3):
resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
engines: {node: '>=6.9.0'}
deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
@@ -6966,7 +6965,6 @@ packages:
/@changesets/cli@2.26.2:
resolution: {integrity: sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig==}
hasBin: true
dependencies:
'@babel/runtime': 7.23.6
'@changesets/apply-release-plan': 6.1.4
@@ -7116,7 +7114,6 @@ packages:
/@commitlint/cli@17.8.1:
resolution: {integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==}
engines: {node: '>=v14'}
hasBin: true
dependencies:
'@commitlint/format': 17.8.1
'@commitlint/lint': 17.8.1
@@ -7231,7 +7228,6 @@ packages:
/@commitlint/prompt-cli@17.8.1:
resolution: {integrity: sha512-dkjxr0ah2R9P/vsz/s128kNEar/5zjr3TN3LOvA8kBiSrrbfF560gnoxAh+KgQ5sAc8lMrG+z4dVYvzSkXyfDQ==}
engines: {node: '>=v14'}
hasBin: true
dependencies:
'@commitlint/prompt': 17.8.1
execa: 5.1.1
@@ -7836,6 +7832,7 @@ packages:
/@gar/promisify@1.1.3:
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
requiresBuild: true
dev: false
/@gwhitney/detect-indent@7.0.1:
@@ -8178,7 +8175,6 @@ packages:
/@npmcli/move-file@2.0.1:
resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
deprecated: This functionality has been moved to @npmcli/fs
dependencies:
mkdirp: 1.0.4
rimraf: 3.0.2
@@ -8463,7 +8459,6 @@ packages:
/@pnpm/meta-updater@1.0.0:
resolution: {integrity: sha512-ifhDDFPGgM7OCVqX+XlpvLJzGzQVIjWyBcHTGTOR2q/b2rjxfIl9GDcfETkTjKOe8EotbXwMo2EAmbtXbjJ1Kg==}
engines: {node: '>=10.12'}
hasBin: true
dependencies:
'@pnpm/find-workspace-dir': 6.0.2
'@pnpm/find-workspace-packages': 6.0.9(@pnpm/logger@5.0.0)
@@ -8518,7 +8513,6 @@ packages:
/@pnpm/nopt@0.2.1:
resolution: {integrity: sha512-zkgDE6q3Y6KeZPjqXCk/hRQ2t6iw9JXbdnYZghwpe/HR73e4VmV5JZ5QSFypmSd5Sx4+gjNfAqME5BVAOBCk9g==}
engines: {node: '>=6'}
hasBin: true
dependencies:
abbrev: 1.1.1
@@ -8611,7 +8605,6 @@ packages:
/@pnpm/patch-package@0.0.0:
resolution: {integrity: sha512-B17ZK4hUAKHDSeSlOg0N+jd+5TuxiSB/2jJcHM0oncf+W5FXslILITpwyIWut4p2P2RCgtSgTF9cSXEX/dGYQA==}
engines: {node: '>=14', npm: '>5'}
hasBin: true
dependencies:
'@yarnpkg/lockfile': 1.1.0
chalk: 4.1.2
@@ -8668,8 +8661,8 @@ packages:
strip-bom: 4.0.0
dev: true
/@pnpm/registry-mock@3.17.1(typanion@3.14.0):
resolution: {integrity: sha512-rlqq9VQ8BgLlaV8JIb3V61YUixCN+06u9TxATX6hrfckHZB/QDL//+j8ijGa8U9Fg72mnrBFRlS4hxrm2VDhwg==}
/@pnpm/registry-mock@3.18.0(typanion@3.14.0):
resolution: {integrity: sha512-Zyr2pe9gld5OcuUAF69hzAs2ZBzUy/jwoS0kRgzt4mtvMns5WaPgH4GZmOaJkeIJg7hUYfXd4dCTAjAHqmx1oA==}
engines: {node: '>=10.13'}
hasBin: true
dependencies:
@@ -8706,7 +8699,6 @@ packages:
/@pnpm/self-installer@2.2.1:
resolution: {integrity: sha512-aefLe96wAWghkx6q1PwbVS1Iz1iGE+HKwkTmtzWLFXeGhbknaIdG2voMwaBGIYGCSxm8sDKR1uLO4aRRAYuc+Q==}
engines: {node: '>=4'}
hasBin: true
dev: false
/@pnpm/semver-diff@1.1.0:
@@ -8765,7 +8757,6 @@ packages:
/@pnpm/which@3.0.1:
resolution: {integrity: sha512-4ivtS12Oni9axgGefaq+gTPD+7N0VPCFdxFH8izCaWfnxLQblX3iVxba+25ZoagStlzUs8sQg8OMKlCVhyGWTw==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
hasBin: true
dependencies:
isexe: 2.0.0
dev: false
@@ -9603,7 +9594,6 @@ packages:
/@yarnpkg/shell@3.2.5(typanion@3.14.0):
resolution: {integrity: sha512-QLQNDgUatiXWs47ULRAyliFt4/gQbGwprvgBVRF9OJw0aNY1DO7rnmebB3wDg927uy4Oj1uKVRfGAGAgAVQHWg==}
engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
hasBin: true
dependencies:
'@yarnpkg/fslib': 3.0.0-rc.25
'@yarnpkg/parsers': 2.6.0
@@ -9665,7 +9655,6 @@ packages:
/@zkochan/js-yaml@0.0.6:
resolution: {integrity: sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==}
hasBin: true
dependencies:
argparse: 2.0.1
@@ -9693,13 +9682,11 @@ packages:
/@zkochan/which@2.0.3:
resolution: {integrity: sha512-C1ReN7vt2/2O0fyTsx5xnbQuxBrmG5NMSbcIkPKCCfCTJgpZBsuRYzFXHj3nVq8vTfK7vxHUmzfCpSHgO7j4rg==}
engines: {node: '>= 8'}
hasBin: true
dependencies:
isexe: 2.0.0
/JSONStream@1.3.5:
resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
hasBin: true
dependencies:
jsonparse: 1.3.1
through: 2.3.8
@@ -9729,7 +9716,6 @@ packages:
/acorn@8.11.2:
resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
engines: {node: '>=0.4.0'}
hasBin: true
/adm-zip@0.5.10:
resolution: {integrity: sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==}
@@ -9936,6 +9922,7 @@ packages:
/are-we-there-yet@3.0.1:
resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==, tarball: https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
requiresBuild: true
dependencies:
delegates: 1.0.0
readable-stream: 3.6.2
@@ -10262,7 +10249,6 @@ packages:
/browserslist@4.22.2:
resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001571
electron-to-chromium: 1.4.616
@@ -10325,7 +10311,6 @@ packages:
/c8@7.14.0:
resolution: {integrity: sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==}
engines: {node: '>=10.12.0'}
hasBin: true
dependencies:
'@bcoe/v8-coverage': 0.2.3
'@istanbuljs/schema': 0.1.3
@@ -10756,7 +10741,6 @@ packages:
/concurrently@8.2.1:
resolution: {integrity: sha512-nVraf3aXOpIcNud5pB9M82p1tynmZkrSGQ1p6X/VY8cJ+2LMVqAgXsJxYYefACSHbTYlm92O1xuhdGTjwoEvbQ==}
engines: {node: ^14.13.0 || >=16.0.0}
hasBin: true
dependencies:
chalk: 4.1.2
date-fns: 2.30.0
@@ -10817,7 +10801,6 @@ packages:
/conventional-commits-parser@4.0.0:
resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==}
engines: {node: '>=14'}
hasBin: true
dependencies:
JSONStream: 1.3.5
is-text-path: 1.0.1
@@ -10907,7 +10890,6 @@ packages:
/create-jest@29.7.0(@babel/types@7.23.3)(@types/node@18.14.6)(ts-node@10.9.2):
resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
dependencies:
'@jest/types': 29.6.3
chalk: 4.1.2
@@ -10931,7 +10913,6 @@ packages:
/cross-env@7.0.3:
resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
hasBin: true
dependencies:
cross-spawn: 7.0.3
dev: true
@@ -10977,7 +10958,6 @@ packages:
/cspell-gitignore@7.3.8:
resolution: {integrity: sha512-vJzCOUEiw6/MwV/U4Ux3bgSdj9mXB+X5eHL+qzVoyFI7ArlvrkuGTL+iFJThQcS8McM3SGqtvaBNCiKBmAeCkA==}
engines: {node: '>=16'}
hasBin: true
dependencies:
cspell-glob: 7.3.8
find-up: 5.0.0
@@ -10993,7 +10973,6 @@ packages:
/cspell-grammar@7.3.8:
resolution: {integrity: sha512-nTjAlMAZAVSFhBd9U3MB9l5FfC5JCCr9DTOA2wWxusVOm+36MbSEH90ucLPkhPa9/+0HtbpDhqVMwXCZllRpsg==}
engines: {node: '>=16'}
hasBin: true
dependencies:
'@cspell/cspell-pipe': 7.3.8
'@cspell/cspell-types': 7.3.8
@@ -11051,7 +11030,6 @@ packages:
/cspell@7.3.8:
resolution: {integrity: sha512-8AkqsBQAMsKYV5XyJLB6rBs5hgspL4+MPOg6mBKG2j5EvQgRVc6dIfAPWDNLpIeW2a3+7K5BIWqKHapKPeiknQ==}
engines: {node: '>=16'}
hasBin: true
dependencies:
'@cspell/cspell-json-reporter': 7.3.8
'@cspell/cspell-pipe': 7.3.8
@@ -11452,7 +11430,6 @@ packages:
/envinfo@7.8.1:
resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==}
engines: {node: '>=4'}
hasBin: true
/err-code@2.0.3:
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
@@ -11532,7 +11509,6 @@ packages:
/esbuild@0.19.5:
resolution: {integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@esbuild/android-arm': 0.19.5
@@ -11792,7 +11768,6 @@ packages:
/eslint@8.56.0:
resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
'@eslint-community/regexpp': 4.10.0
@@ -11851,7 +11826,6 @@ packages:
/esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
/esquery@1.5.0:
resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
@@ -12153,7 +12127,6 @@ packages:
/findup@0.1.5:
resolution: {integrity: sha512-Udxo3C9A6alt2GZ2MNsgnIvX7De0V3VGxeP/x98NSVgSlizcDHdmJza61LI7zJy4OEtSiJyE72s0/+tBl5/ZxA==}
engines: {node: '>=0.6'}
hasBin: true
dependencies:
colors: 0.6.2
commander: 2.1.0
@@ -12337,7 +12310,6 @@ packages:
/fuse-native@2.2.6:
resolution: {integrity: sha512-Y5wXd7vUsWWWIIHbjluv7jKZgPZaSVA5YWaW3I5fXIJfcGWL6IRUgoBUveQAq+D8cG9cCiGNahv9CeToccCXrw==}
hasBin: true
requiresBuild: true
dependencies:
fuse-shared-library: 1.1.1
@@ -12392,6 +12364,7 @@ packages:
/gauge@4.0.4:
resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==, tarball: https://registry.npmmirror.com/gauge/-/gauge-4.0.4.tgz}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
requiresBuild: true
dependencies:
aproba: 2.0.0
color-support: 1.1.3
@@ -12498,7 +12471,6 @@ packages:
/git-raw-commits@2.0.11:
resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==}
engines: {node: '>=10'}
hasBin: true
dependencies:
dargs: 7.0.0
lodash: 4.17.21
@@ -12666,7 +12638,6 @@ packages:
/handlebars@4.7.7:
resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
engines: {node: '>=0.4.7'}
hasBin: true
dependencies:
minimist: 1.2.8
neo-async: 2.6.2
@@ -12682,7 +12653,6 @@ packages:
/har-validator@5.1.5:
resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==, tarball: https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz}
engines: {node: '>=6'}
deprecated: this library is no longer supported
dependencies:
ajv: 6.12.6
har-schema: 2.0.0
@@ -12834,7 +12804,6 @@ packages:
/husky@8.0.3:
resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==}
engines: {node: '>=14'}
hasBin: true
dev: true
/hyperdrive-schemas@2.0.0:
@@ -12882,7 +12851,6 @@ packages:
/import-local@3.1.0:
resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==}
engines: {node: '>=8'}
hasBin: true
dependencies:
pkg-dir: 4.2.0
resolve-cwd: 3.0.0
@@ -13053,7 +13021,6 @@ packages:
/is-ci@3.0.1:
resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
hasBin: true
dependencies:
ci-info: 3.9.0
dev: true
@@ -13082,7 +13049,6 @@ packages:
/is-docker@2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
hasBin: true
dev: false
/is-extglob@2.1.1:
@@ -13821,7 +13787,6 @@ packages:
/js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
dependencies:
argparse: 1.0.10
esprima: 4.0.1
@@ -13832,7 +13797,6 @@ packages:
/jsesc@2.5.2:
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
engines: {node: '>=4'}
hasBin: true
dev: true
/json-buffer@3.0.1:
@@ -13859,7 +13823,6 @@ packages:
/json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
/jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz}
@@ -13954,7 +13917,6 @@ packages:
/lcov-result-merger@3.3.0:
resolution: {integrity: sha512-Krg9p24jGaIT93RBMA8b5qLHDEiAXTavaTiEdMAZaJS93PsBKIcg/89cw/8rgeSfRuQX+I9x7h73SHFjCZ6cHg==}
engines: {node: '>=10'}
hasBin: true
dependencies:
through2: 2.0.5
vinyl: 2.2.1
@@ -14443,12 +14405,10 @@ packages:
/mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz}
engines: {node: '>=4'}
hasBin: true
/mime@3.0.0:
resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
engines: {node: '>=10.0.0'}
hasBin: true
/mimic-fn@1.2.0:
resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
@@ -14589,7 +14549,6 @@ packages:
/mkdirp@1.0.4:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
engines: {node: '>=10'}
hasBin: true
/module-not-found-error@1.0.1:
resolution: {integrity: sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==}
@@ -14651,7 +14610,6 @@ packages:
/ndjson@2.0.0:
resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==, tarball: https://registry.npmmirror.com/ndjson/-/ndjson-2.0.0.tgz}
engines: {node: '>=10'}
hasBin: true
dependencies:
json-stringify-safe: 5.0.1
minimist: 1.2.8
@@ -14688,7 +14646,6 @@ packages:
/nm-prune@5.0.0:
resolution: {integrity: sha512-DjLCuKmAP5OEPOn7H/UyigDSj0DeUO6qcrrSo2Y5jPTYbdKXqNpLafEFGoNNhH9v+ChBLlmc5CRN1YVvZIQsOQ==}
engines: {node: '>=10'}
hasBin: true
dependencies:
enquirer: 2.4.1
find-root: 1.1.0
@@ -14742,7 +14699,6 @@ packages:
/node-gyp-build@4.7.1:
resolution: {integrity: sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==}
hasBin: true
requiresBuild: true
dev: false
optional: true
@@ -14750,7 +14706,6 @@ packages:
/node-gyp@9.4.1:
resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==}
engines: {node: ^12.13 || ^14.13 || >=16}
hasBin: true
dependencies:
env-paths: 2.2.1
exponential-backoff: 3.1.1
@@ -14783,14 +14738,12 @@ packages:
/nopt@1.0.10:
resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==}
hasBin: true
dependencies:
abbrev: 1.1.1
/nopt@6.0.0:
resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
hasBin: true
dependencies:
abbrev: 1.1.1
dev: false
@@ -14881,7 +14834,6 @@ packages:
/npm-packlist@5.1.3:
resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
hasBin: true
dependencies:
glob: 8.1.0
ignore-walk: 5.0.1
@@ -15009,7 +14961,6 @@ packages:
/opt-cli@1.5.1:
resolution: {integrity: sha512-iRFQBiQjXZ+LX/8pis04prUhS6FOYcJiZRouofN3rUJEB282b/e0s3jp9vT7aHgXY6TUpgPwu12f0i+qF40Kjw==}
hasBin: true
dependencies:
commander: 2.9.0
lodash.clone: 4.3.2
@@ -15315,7 +15266,6 @@ packages:
/pidtree@0.6.0:
resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
engines: {node: '>=0.10'}
hasBin: true
dev: true
/pify@3.0.0:
@@ -15331,7 +15281,6 @@ packages:
/pino@6.14.0:
resolution: {integrity: sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==}
hasBin: true
dependencies:
fast-redact: 3.3.0
fast-safe-stringify: 2.1.1
@@ -15354,7 +15303,6 @@ packages:
/pkg-fetch@3.4.2:
resolution: {integrity: sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA==}
hasBin: true
dependencies:
chalk: 4.1.2
fs-extra: 9.1.0
@@ -15405,7 +15353,6 @@ packages:
/prebuild-install@7.1.1:
resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
engines: {node: '>=10'}
hasBin: true
dependencies:
detect-libc: 2.0.2
expand-template: 2.0.3
@@ -15440,7 +15387,6 @@ packages:
/prettier@2.8.8:
resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
engines: {node: '>=10.13.0'}
hasBin: true
dev: true
/pretty-bytes@4.0.2:
@@ -15585,7 +15531,6 @@ packages:
/publish-packed@4.1.2:
resolution: {integrity: sha512-jfgaVcWMSIY8Bw2iVVcSo25SFI72x9LwuWsAxrBcm7ZrdbLz2Y8gErhlEX7VZxJZeiCihcR7XAOyjU95MywFVw==}
engines: {node: '>=12.10'}
hasBin: true
dependencies:
all-module-paths: 0.10.7
execa: 5.1.1
@@ -15673,7 +15618,6 @@ packages:
/rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
dependencies:
deep-extend: 0.6.0
ini: 1.3.8
@@ -15880,7 +15824,6 @@ packages:
/request@2.88.0:
resolution: {integrity: sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==}
engines: {node: '>= 4'}
deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
dependencies:
aws-sign2: 0.7.0
aws4: 1.12.0
@@ -15906,7 +15849,6 @@ packages:
/request@2.88.2:
resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==, tarball: https://registry.npmmirror.com/request/-/request-2.88.2.tgz}
engines: {node: '>= 6'}
deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
dependencies:
aws-sign2: 0.7.0
aws4: 1.12.0
@@ -15997,7 +15939,6 @@ packages:
/resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
dependencies:
is-core-module: 2.13.1
path-parse: 1.0.7
@@ -16052,13 +15993,11 @@ packages:
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.2.3
/rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
hasBin: true
dependencies:
glob: 7.2.3
@@ -16180,7 +16119,6 @@ packages:
/semver@7.5.4:
resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
engines: {node: '>=10'}
hasBin: true
dependencies:
lru-cache: 6.0.0
@@ -16268,7 +16206,6 @@ packages:
/shelljs@0.8.5:
resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==}
engines: {node: '>=4'}
hasBin: true
dependencies:
glob: 7.2.3
interpret: 1.4.0
@@ -16278,7 +16215,6 @@ packages:
/shx@0.3.4:
resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==}
engines: {node: '>=6'}
hasBin: true
dependencies:
minimist: 1.2.8
shelljs: 0.8.5
@@ -16368,7 +16304,6 @@ packages:
/smartwrap@2.0.2:
resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==}
engines: {node: '>=6'}
hasBin: true
dependencies:
array.prototype.flat: 1.3.2
breakword: 1.0.6
@@ -16498,7 +16433,6 @@ packages:
/sshpk@1.18.0:
resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==, tarball: https://registry.npmmirror.com/sshpk/-/sshpk-1.18.0.tgz}
engines: {node: '>=0.10.0'}
hasBin: true
dependencies:
asn1: 0.2.6
assert-plus: 1.0.0
@@ -16760,7 +16694,6 @@ packages:
/symlink-dir@5.2.1:
resolution: {integrity: sha512-HfqqI7BoCx3+482BUfoR1sXAFx5G90KrWImT5/J/a+HZWvzMTTA/hYKh2030WFYn7OwRRUAoMCQvqlwBMnhBUw==}
engines: {node: '>=12.10'}
hasBin: true
dependencies:
better-path-resolve: 1.0.0
rename-overwrite: 5.0.0
@@ -16768,7 +16701,6 @@ packages:
/syncpack@8.5.14:
resolution: {integrity: sha512-+ESXgFXgLEievTVui2TQ/ejdPSX1hb+EXZYSrZfNOoFT2IvaAzGT9OQfiXYjka7ao3fRru9pRtsFoWTy1vyXCQ==}
engines: {node: '>=10'}
hasBin: true
dependencies:
chalk: 4.1.2
commander: 10.0.0
@@ -16928,7 +16860,6 @@ packages:
/touch@3.1.0:
resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==}
hasBin: true
dependencies:
nopt: 1.0.10
@@ -16946,7 +16877,6 @@ packages:
/tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
/treeify@1.1.0:
resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==}
@@ -17110,7 +17040,6 @@ packages:
/tty-table@4.2.3:
resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==}
engines: {node: '>=8.0.0'}
hasBin: true
dependencies:
chalk: 4.1.2
csv: 5.5.3
@@ -17240,12 +17169,10 @@ packages:
/typescript@5.3.3:
resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
engines: {node: '>=14.17'}
hasBin: true
/uglify-js@3.17.4:
resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
engines: {node: '>=0.8.0'}
hasBin: true
requiresBuild: true
optional: true
@@ -17295,6 +17222,7 @@ packages:
/unique-slug@3.0.0:
resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
requiresBuild: true
dependencies:
imurmurhash: 0.1.4
dev: false
@@ -17390,7 +17318,6 @@ packages:
/uuid@9.0.1:
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
hasBin: true
dev: false
/v8-compile-cache-lib@3.0.1:
@@ -17477,7 +17404,6 @@ packages:
/verdaccio@5.20.1(typanion@3.14.0):
resolution: {integrity: sha512-zKQXYubQOfl2w09gO9BR7U9ZZkFPPby8tvV+na86/2vGZnY79kNSVnSbK8CM1bpJHTCQ80AGsmIGovg2FgXhdQ==}
engines: {node: '>=12.18'}
hasBin: true
dependencies:
'@verdaccio/config': 6.0.0-6-next.55
'@verdaccio/core': 6.0.0-6-next.55
@@ -17675,7 +17601,6 @@ packages:
/which@1.3.1:
resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
hasBin: true
dependencies:
isexe: 2.0.0
dev: true
@@ -17683,14 +17608,12 @@ packages:
/which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
hasBin: true
dependencies:
isexe: 2.0.0
/which@3.0.1:
resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
hasBin: true
dependencies:
isexe: 2.0.0
dev: true
@@ -17698,7 +17621,6 @@ packages:
/which@4.0.0:
resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
engines: {node: ^16.13.0 || >=18.0.0}
hasBin: true
dependencies:
isexe: 3.1.1

View File

@@ -63,7 +63,7 @@
"@pnpm/prepare": "workspace:*",
"@pnpm/read-package-json": "workspace:*",
"@pnpm/read-project-manifest": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/run-npm": "workspace:*",
"@pnpm/tabtab": "^0.1.2",
"@pnpm/test-fixtures": "workspace:*",

View File

@@ -201,9 +201,9 @@ test('update --latest specific dependency', async function () {
addDistTag('@pnpm.e2e/qar', '100.1.0', 'latest'),
])
await execPnpm(['add', '@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0', '@pnpm.e2e/bar@^100.0.0', '@pnpm.e2e/foo@100.1.0', 'alias@npm:@pnpm.e2e/qar@^100.0.0', 'kevva/is-negative'])
await execPnpm(['add', '@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0', '@pnpm.e2e/bar@^100.0.0', '@pnpm.e2e/foo@100.0.0', 'alias@npm:@pnpm.e2e/qar@^100.0.0', 'kevva/is-negative'])
await execPnpm(['update', '-L', '@pnpm.e2e/bar', '@pnpm.e2e/foo@100.0.0', 'alias', 'is-negative'])
await execPnpm(['update', '-L', '@pnpm.e2e/bar', 'alias', 'is-negative'])
const lockfile = await project.readLockfile()
expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.0.0')
@@ -378,7 +378,7 @@ test('recursive update --latest specific dependency on projects that do not shar
dependencies: {
alias: 'npm:@pnpm.e2e/qar@100.0.0',
'@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0',
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0',
'@pnpm.e2e/foo': '^100.0.0',
},
},
@@ -395,7 +395,7 @@ test('recursive update --latest specific dependency on projects that do not shar
await execPnpm(['-r', 'install'])
await execPnpm(['-r', 'update', '--latest', '@pnpm.e2e/foo', '@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0', 'alias'])
await execPnpm(['-r', 'update', '--latest', '@pnpm.e2e/foo', 'alias'])
const manifest1 = await readPackageJsonFromDir(path.resolve('project-1'))
expect(manifest1.dependencies).toStrictEqual({
@@ -552,7 +552,7 @@ test('recursive update --latest specific dependency on projects with a shared a
dependencies: {
alias: 'npm:@pnpm.e2e/qar@100.0.0',
'@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0',
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0',
'@pnpm.e2e/foo': '100.0.0',
},
},
@@ -570,7 +570,7 @@ test('recursive update --latest specific dependency on projects with a shared a
await writeYamlFile('pnpm-workspace.yaml', { packages: ['**', '!store/**'] })
await execPnpm(['recursive', 'install'])
await execPnpm(['recursive', 'update', '--latest', '@pnpm.e2e/foo', '@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0', 'alias'])
await execPnpm(['recursive', 'update', '--latest', '@pnpm.e2e/foo', 'alias'])
const manifest1 = await readPackageJsonFromDir(path.resolve('project-1'))
expect(manifest1.dependencies).toStrictEqual({
@@ -608,3 +608,210 @@ test('deep update', async function () {
await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0')
})
test('update to latest without downgrading already defined prerelease (#7436)', async function () {
prepare()
await addDistTag('@pnpm.e2e/has-prerelease', '2.0.0', 'latest')
await execPnpm(['add', '@pnpm.e2e/has-prerelease@3.0.0-rc.0'])
const manifest1 = await readPackageJsonFromDir('.')
expect(manifest1).toMatchObject({
dependencies: {
'@pnpm.e2e/has-prerelease': '3.0.0-rc.0',
},
})
const lockfile1 = await readYamlFile('pnpm-lock.yaml')
expect(lockfile1).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@3.0.0-rc.0'])
expect(lockfile1).not.toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@2.0.0'])
await execPnpm(['update', '--latest'])
const manifest2 = await readPackageJsonFromDir('.')
expect(manifest2).toMatchObject({
dependencies: {
'@pnpm.e2e/has-prerelease': '3.0.0-rc.0',
},
})
const lockfile2 = await readYamlFile('pnpm-lock.yaml')
expect(lockfile2).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@3.0.0-rc.0'])
expect(lockfile2).not.toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@2.0.0'])
await execPnpm(['update', '-r', '--latest'])
const manifest3 = await readPackageJsonFromDir('.')
expect(manifest3).toMatchObject({
dependencies: {
'@pnpm.e2e/has-prerelease': '3.0.0-rc.0',
},
})
const lockfile3 = await readYamlFile('pnpm-lock.yaml')
expect(lockfile3).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@3.0.0-rc.0'])
expect(lockfile3).not.toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@2.0.0'])
})
test('update with tag @latest will downgrade prerelease', async function () {
prepare()
await addDistTag('@pnpm.e2e/has-prerelease', '2.0.0', 'latest')
await execPnpm(['add', '@pnpm.e2e/has-prerelease@3.0.0-rc.0'])
const manifest1 = await readPackageJsonFromDir('.')
expect(manifest1).toMatchObject({
dependencies: {
'@pnpm.e2e/has-prerelease': '3.0.0-rc.0',
},
})
const lockfile1 = await readYamlFile('pnpm-lock.yaml')
expect(lockfile1).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@3.0.0-rc.0'])
expect(lockfile1).not.toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@2.0.0'])
await execPnpm(['update', '@pnpm.e2e/has-prerelease@latest'])
const manifest2 = await readPackageJsonFromDir('.')
expect(manifest2).toMatchObject({
dependencies: {
'@pnpm.e2e/has-prerelease': '2.0.0',
},
})
const lockfile2 = await readYamlFile('pnpm-lock.yaml')
expect(lockfile2).not.toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@3.0.0-rc.0'])
expect(lockfile2).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@2.0.0'])
})
test('update to latest recursive workspace (outdated, updated, prerelease, outdated)', async function () {
await addDistTag('@pnpm.e2e/has-prerelease', '2.0.0', 'latest')
preparePackages([
{
name: 'project-1',
dependencies: {
'@pnpm.e2e/has-prerelease': '1.0.0',
},
},
{
name: 'project-2',
dependencies: {
'@pnpm.e2e/has-prerelease': '2.0.0',
},
},
{
name: 'project-3',
dependencies: {
'@pnpm.e2e/has-prerelease': '3.0.0-rc.0',
},
},
{
name: 'project-4',
dependencies: {
'@pnpm.e2e/has-prerelease': '1.0.0',
},
},
])
await writeYamlFile('pnpm-workspace.yaml', { packages: ['**', '!store/**'] })
await execPnpm(['install', '-r'])
const lockfile1 = await readYamlFile('pnpm-lock.yaml')
expect(lockfile1).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@1.0.0'])
expect(lockfile1).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@2.0.0'])
expect(lockfile1).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@3.0.0-rc.0'])
await execPnpm(['update', '-r', '--latest'])
const manifests = {
'project-1': await readPackageJsonFromDir('project-1'),
'project-2': await readPackageJsonFromDir('project-2'),
'project-3': await readPackageJsonFromDir('project-3'),
'project-4': await readPackageJsonFromDir('project-4'),
}
expect(manifests).toMatchObject({
'project-1': {
name: 'project-1',
dependencies: {
'@pnpm.e2e/has-prerelease': '2.0.0',
},
},
'project-2': {
name: 'project-2',
dependencies: {
'@pnpm.e2e/has-prerelease': '2.0.0',
},
},
'project-3': {
name: 'project-3',
dependencies: {
'@pnpm.e2e/has-prerelease': '3.0.0-rc.0',
},
},
'project-4': {
name: 'project-4',
dependencies: {
'@pnpm.e2e/has-prerelease': '2.0.0',
},
},
})
const lockfile2 = await readYamlFile('pnpm-lock.yaml')
expect(lockfile2).not.toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@1.0.0'])
expect(lockfile2).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@2.0.0'])
expect(lockfile2).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@3.0.0-rc.0'])
})
test('update to latest recursive workspace (prerelease, outdated)', async function () {
await addDistTag('@pnpm.e2e/has-prerelease', '2.0.0', 'latest')
preparePackages([
{
name: 'project-1',
dependencies: {
'@pnpm.e2e/has-prerelease': '3.0.0-rc.0',
},
},
{
name: 'project-2',
dependencies: {
'@pnpm.e2e/has-prerelease': '1.0.0',
},
},
])
await writeYamlFile('pnpm-workspace.yaml', { packages: ['**', '!store/**'] })
await execPnpm(['install', '-r'])
const lockfile1 = await readYamlFile('pnpm-lock.yaml')
expect(lockfile1).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@1.0.0'])
expect(lockfile1).not.toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@2.0.0'])
expect(lockfile1).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@3.0.0-rc.0'])
await execPnpm(['update', '-r', '--latest'])
const manifests = {
'project-1': await readPackageJsonFromDir('project-1'),
'project-2': await readPackageJsonFromDir('project-2'),
}
expect(manifests).toMatchObject({
'project-1': {
name: 'project-1',
dependencies: {
'@pnpm.e2e/has-prerelease': '3.0.0-rc.0',
},
},
'project-2': {
name: 'project-2',
dependencies: {
'@pnpm.e2e/has-prerelease': '2.0.0',
},
},
})
const lockfile2 = await readYamlFile('pnpm-lock.yaml')
expect(lockfile2).not.toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@1.0.0'])
expect(lockfile2).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@2.0.0'])
expect(lockfile2).toHaveProperty(['packages', '/@pnpm.e2e/has-prerelease@3.0.0-rc.0'])
})

View File

@@ -39,7 +39,7 @@
"@pnpm/lockfile-types": "workspace:*",
"@pnpm/plugin-commands-deploy": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "3.17.1"
"@pnpm/registry-mock": "3.18.0"
},
"dependencies": {
"@pnpm/cli-utils": "workspace:*",

View File

@@ -36,7 +36,7 @@
"@pnpm/plugin-commands-publishing": "workspace:*",
"@pnpm/network.auth-header": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/test-ipc-server": "workspace:*",
"@types/cross-spawn": "^6.0.5",
"@types/is-windows": "^1.0.2",

View File

@@ -115,6 +115,7 @@ export type ResolveFromNpmOptions = {
registry: string
preferredVersions?: PreferredVersions
preferWorkspacePackages?: boolean
updateToLatest?: boolean
} & ({
projectDir?: string
workspacePackages?: undefined
@@ -161,6 +162,7 @@ async function resolveNpm (
dryRun: opts.dryRun === true,
preferredVersionSelectors: opts.preferredVersions?.[spec.name],
registry: opts.registry,
updateToLatest: opts.updateToLatest,
})
} catch (err: any) { // eslint-disable-line
if ((workspacePackages != null) && opts.projectDir) {

View File

@@ -11,6 +11,7 @@ import loadJsonFile from 'load-json-file'
import pLimit from 'p-limit'
import { fastPathTemp as pathTemp } from 'path-temp'
import pick from 'ramda/src/pick'
import semver from 'semver'
import renameOverwrite from 'rename-overwrite'
import { toRaw } from './toRaw'
import { pickPackageFromMeta, pickVersionByVersionRange, pickLowestVersionByVersionRange } from './pickPackageFromMeta'
@@ -85,6 +86,7 @@ export interface PickPackageOptions {
pickLowestVersion?: boolean
registry: string
dryRun: boolean
updateToLatest?: boolean
}
function pickPackageFromMetaUsingTime (
@@ -112,11 +114,25 @@ export async function pickPackage (
opts: PickPackageOptions
): Promise<{ meta: PackageMeta, pickedPackage: PackageInRegistry | null }> {
opts = opts || {}
const _pickPackageFromMeta =
let _pickPackageFromMeta =
opts.publishedBy
? pickPackageFromMetaUsingTime
: (pickPackageFromMeta.bind(null, opts.pickLowestVersion ? pickLowestVersionByVersionRange : pickVersionByVersionRange))
if (opts.updateToLatest) {
const _pickPackageBase = _pickPackageFromMeta
_pickPackageFromMeta = (spec, ...rest) => {
const latestStableSpec: RegistryPackageSpec = { ...spec, type: 'tag', fetchSpec: 'latest' }
const latestStable = _pickPackageBase(latestStableSpec, ...rest)
const current = _pickPackageBase(spec, ...rest)
if (!latestStable) return current
if (!current) return latestStable
if (semver.lt(latestStable.version, current.version)) return current
return latestStable
}
}
validatePackageName(spec.name)
const cachedMeta = ctx.metaCache.get(spec.name)
@@ -155,7 +171,7 @@ export async function pickPackage (
}
}
if (spec.type === 'version') {
if (!opts.updateToLatest && spec.type === 'version') {
metaCachedInStore = metaCachedInStore ?? await limit(async () => loadMeta(pkgMirror))
// use the cached meta only if it has the required package version
// otherwise it is probably out of date

View File

@@ -78,6 +78,7 @@ export interface ResolveOptions {
preferWorkspacePackages?: boolean
registry: string
workspacePackages?: WorkspacePackages
updateToLatest?: boolean
}
export type WantedDependency = {

View File

@@ -36,7 +36,7 @@
"@pnpm/plugin-commands-licenses": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/read-package-json": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/test-fixtures": "workspace:*",
"@types/ramda": "0.28.20",
"@types/wrap-ansi": "8.0.2",

View File

@@ -34,7 +34,7 @@
"@pnpm/plugin-commands-installation": "workspace:*",
"@pnpm/plugin-commands-listing": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@types/ramda": "0.28.20",
"execa": "npm:safe-execa@0.1.2",
"strip-ansi": "^6.0.1",

View File

@@ -35,7 +35,7 @@
"@pnpm/plugin-commands-installation": "workspace:*",
"@pnpm/plugin-commands-outdated": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@pnpm/test-fixtures": "workspace:*",
"@types/ramda": "0.28.20",
"@types/wrap-ansi": "8.0.2",

View File

@@ -34,7 +34,7 @@
"@pnpm/lockfile-file": "workspace:*",
"@pnpm/plugin-commands-store": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "3.17.1",
"@pnpm/registry-mock": "3.18.0",
"@types/archy": "0.0.33",
"@types/ramda": "0.28.20",
"@types/ssri": "^7.1.4",

View File

@@ -134,6 +134,7 @@ export interface RequestPackageOptions {
forceResolve?: boolean
supportedArchitectures?: SupportedArchitectures
onFetchError?: OnFetchError
updateToLatest?: boolean
}
export type BundledManifestFunction = () => Promise<BundledManifest | undefined>