feat: add cache command (#8512)

This commit is contained in:
Zoltan Kochan
2024-09-18 04:14:13 +02:00
committed by GitHub
parent f071d00815
commit 0170b0faaf
43 changed files with 808 additions and 330 deletions

View File

@@ -0,0 +1,7 @@
---
"@pnpm/cache.commands": minor
"@pnpm/cache.api": minor
"pnpm": minor
---
Experimental: added `pnpm cache` commands for inspecting the metadata cache.

View File

@@ -219,6 +219,7 @@ async function updateManifest (workspaceDir: string, manifest: ProjectManifest,
case '@pnpm/headless':
case '@pnpm/outdated':
case '@pnpm/package-requester':
case '@pnpm/cache.commands':
case '@pnpm/plugin-commands-import':
case '@pnpm/plugin-commands-installation':
case '@pnpm/plugin-commands-listing':

15
cache/api/README.md vendored Normal file
View File

@@ -0,0 +1,15 @@
# @pnpm/cache.api
> API for controlling the cache
[![npm version](https://img.shields.io/npm/v/@pnpm/cache.api.svg)](https://www.npmjs.com/package/@pnpm/cache.api)
## Installation
```sh
pnpm add @pnpm/cache.api
```
## License
MIT

50
cache/api/package.json vendored Normal file
View File

@@ -0,0 +1,50 @@
{
"name": "@pnpm/cache.api",
"version": "0.0.0",
"description": "API for controlling the cache",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"files": [
"lib",
"!*.map"
],
"engines": {
"node": ">=18.12"
},
"scripts": {
"lint": "eslint \"src/**/*.ts\"",
"test": "pnpm run compile",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"
},
"repository": "https://github.com/pnpm/pnpm/blob/main/cache/api",
"keywords": [
"pnpm9",
"pnpm",
"cache"
],
"license": "MIT",
"bugs": {
"url": "https://github.com/pnpm/pnpm/issues"
},
"homepage": "https://github.com/pnpm/pnpm/blob/main/cache/api#readme",
"devDependencies": {
"@pnpm/cache.api": "workspace:*",
"@pnpm/logger": "workspace:*"
},
"dependencies": {
"@pnpm/config": "workspace:*",
"@pnpm/constants": "workspace:*",
"@pnpm/npm-resolver": "workspace:*",
"@pnpm/store.cafs": "workspace:*",
"encode-registry": "catalog:",
"fast-glob": "catalog:"
},
"peerDependencies": {
"@pnpm/logger": "^5.1.0"
},
"funding": "https://opencollective.com/pnpm",
"exports": {
".": "./lib/index.js"
}
}

11
cache/api/src/cacheDelete.ts vendored Normal file
View File

@@ -0,0 +1,11 @@
import path from 'path'
import fs from 'fs'
import { findMetadataFiles } from './cacheList'
export async function cacheDelete (opts: { cacheDir: string, registry?: string }, filter: string[]): Promise<string> {
const metaFiles = await findMetadataFiles(opts, filter)
for (const metaFile of metaFiles) {
fs.unlinkSync(path.join(opts.cacheDir, metaFile))
}
return metaFiles.sort().join('\n')
}

21
cache/api/src/cacheList.ts vendored Normal file
View File

@@ -0,0 +1,21 @@
import fs from 'fs'
import getRegistryName from 'encode-registry'
import fastGlob from 'fast-glob'
export async function cacheListRegistries (opts: { cacheDir: string, registry?: string, registries?: boolean }): Promise<string> {
return fs.readdirSync(opts.cacheDir).sort().join('\n')
}
export async function cacheList (opts: { cacheDir: string, registry?: string, registries?: boolean }, filter: string[]): Promise<string> {
const metaFiles = await findMetadataFiles(opts, filter)
return metaFiles.sort().join('\n')
}
export async function findMetadataFiles (opts: { cacheDir: string, registry?: string }, filter: string[]): Promise<string[]> {
const prefix = opts.registry ? `${getRegistryName(opts.registry)}` : '*'
const patterns = filter.length ? filter.map((filter) => `${prefix}/${filter}.json`) : [`${prefix}/**`]
const metaFiles = await fastGlob(patterns, {
cwd: opts.cacheDir,
})
return metaFiles
}

47
cache/api/src/cacheView.ts vendored Normal file
View File

@@ -0,0 +1,47 @@
import fs from 'fs'
import path from 'path'
import fastGlob from 'fast-glob'
import { getIndexFilePathInCafs } from '@pnpm/store.cafs'
import { type PackageMeta } from '@pnpm/npm-resolver'
import getRegistryName from 'encode-registry'
interface CachedVersions {
cachedVersions: string[]
nonCachedVersions: string[]
cachedAt?: string
distTags: Record<string, string>
}
export async function cacheView (opts: { cacheDir: string, storeDir: string, registry?: string }, packageName: string): Promise<string> {
const prefix = opts.registry ? `${getRegistryName(opts.registry)}` : '*'
const metaFilePaths = (await fastGlob(`${prefix}/${packageName}.json`, {
cwd: opts.cacheDir,
})).sort()
const cafsDir = path.join(opts.storeDir, 'files')
const metaFilesByPath: Record<string, CachedVersions> = {}
for (const filePath of metaFilePaths) {
const metaObject = JSON.parse(fs.readFileSync(path.join(opts.cacheDir, filePath), 'utf8')) as PackageMeta
const cachedVersions: string[] = []
const nonCachedVersions: string[] = []
for (const [version, manifest] of Object.entries(metaObject.versions)) {
if (!manifest.dist.integrity) continue
const indexFilePath = getIndexFilePathInCafs(cafsDir, manifest.dist.integrity)
if (fs.existsSync(indexFilePath)) {
cachedVersions.push(version)
} else {
nonCachedVersions.push(version)
}
}
let registryName = filePath
while (path.dirname(registryName) !== '.') {
registryName = path.dirname(registryName)
}
metaFilesByPath[registryName.replaceAll('+', ':')] = {
cachedVersions,
nonCachedVersions,
cachedAt: metaObject.cachedAt ? new Date(metaObject.cachedAt).toString() : undefined,
distTags: metaObject['dist-tags'],
}
}
return JSON.stringify(metaFilesByPath, null, 2)
}

3
cache/api/src/index.ts vendored Normal file
View File

@@ -0,0 +1,3 @@
export * from './cacheList'
export * from './cacheDelete'
export * from './cacheView'

28
cache/api/tsconfig.json vendored Normal file
View File

@@ -0,0 +1,28 @@
{
"extends": "@pnpm/tsconfig",
"compilerOptions": {
"outDir": "lib",
"rootDir": "src"
},
"include": [
"src/**/*.ts",
"../../__typings__/**/*.d.ts"
],
"references": [
{
"path": "../../config/config"
},
{
"path": "../../packages/constants"
},
{
"path": "../../packages/logger"
},
{
"path": "../../resolving/npm-resolver"
},
{
"path": "../../store/cafs"
}
]
}

8
cache/api/tsconfig.lint.json vendored Normal file
View File

@@ -0,0 +1,8 @@
{
"extends": "./tsconfig.json",
"include": [
"src/**/*.ts",
"test/**/*.ts",
"../../__typings__/**/*.d.ts"
]
}

15
cache/commands/README.md vendored Normal file
View File

@@ -0,0 +1,15 @@
# @pnpm/cache.commands
> Commands for controlling the cache
[![npm version](https://img.shields.io/npm/v/@pnpm/cache.commands.svg)](https://www.npmjs.com/package/@pnpm/cache.commands)
## Installation
```sh
pnpm add @pnpm/cache.commands
```
## License
MIT

2
cache/commands/jest.config.js vendored Normal file
View File

@@ -0,0 +1,2 @@
module.exports = require('../../jest-with-registry.config.js')

57
cache/commands/package.json vendored Normal file
View File

@@ -0,0 +1,57 @@
{
"name": "@pnpm/cache.commands",
"version": "0.0.0",
"description": "Commands for controlling the cache",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"files": [
"lib",
"!*.map"
],
"engines": {
"node": ">=18.12"
},
"scripts": {
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7770 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"
},
"repository": "https://github.com/pnpm/pnpm/blob/main/cache/commands",
"keywords": [
"pnpm9",
"pnpm",
"cache"
],
"license": "MIT",
"bugs": {
"url": "https://github.com/pnpm/pnpm/issues"
},
"homepage": "https://github.com/pnpm/pnpm/blob/main/cache/commands#readme",
"devDependencies": {
"@pnpm/cache.commands": "workspace:*",
"@pnpm/logger": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "catalog:",
"@zkochan/rimraf": "catalog:",
"@types/ramda": "catalog:",
"execa": "catalog:"
},
"dependencies": {
"@pnpm/cache.api": "workspace:*",
"@pnpm/cli-utils": "workspace:*",
"@pnpm/config": "workspace:*",
"@pnpm/constants": "workspace:*",
"@pnpm/store-path": "workspace:*",
"ramda": "catalog:",
"render-help": "catalog:"
},
"peerDependencies": {
"@pnpm/logger": "^5.1.0"
},
"funding": "https://opencollective.com/pnpm",
"exports": {
".": "./lib/index.js"
}
}

76
cache/commands/src/cache.cmd.ts vendored Normal file
View File

@@ -0,0 +1,76 @@
import path from 'path'
import { docsUrl } from '@pnpm/cli-utils'
import { type Config, types as allTypes } from '@pnpm/config'
import { FULL_FILTERED_META_DIR, META_DIR } from '@pnpm/constants'
import { getStorePath } from '@pnpm/store-path'
import pick from 'ramda/src/pick'
import renderHelp from 'render-help'
import {
cacheList,
cacheView,
cacheDelete,
cacheListRegistries,
} from '@pnpm/cache.api'
export const rcOptionsTypes = cliOptionsTypes
export function cliOptionsTypes (): Record<string, unknown> {
return {
...pick([
'registry',
'store-dir',
], allTypes),
}
}
export const commandNames = ['cache']
export function help (): string {
return renderHelp({
description: '',
descriptionLists: [],
url: docsUrl('cache'),
usages: ['pnpm cache <command>'],
})
}
export type CacheCommandOptions = Pick<Config, 'cacheDir' | 'storeDir' | 'pnpmHomeDir' | 'cliOptions' | 'resolutionMode' | 'registrySupportsTimeField'>
export async function handler (opts: CacheCommandOptions, params: string[]): Promise<string | undefined> {
const cacheType = opts.resolutionMode === 'time-based' && !opts.registrySupportsTimeField ? FULL_FILTERED_META_DIR : META_DIR
const cacheDir = path.join(opts.cacheDir, cacheType)
switch (params[0]) {
case 'list-registries':
return cacheListRegistries({
...opts,
cacheDir,
})
case 'list':
return cacheList({
...opts,
cacheDir,
registry: opts.cliOptions['registry'],
}, params.slice(1))
case 'delete':
return cacheDelete({
...opts,
cacheDir,
registry: opts.cliOptions['registry'],
}, params.slice(1))
case 'view': {
const storeDir = await getStorePath({
pkgRoot: process.cwd(),
storePath: opts.storeDir,
pnpmHomeDir: opts.pnpmHomeDir,
})
return cacheView({
...opts,
cacheDir,
storeDir,
registry: opts.cliOptions['registry'],
}, params[1])
}
default:
return help()
}
}

3
cache/commands/src/index.ts vendored Normal file
View File

@@ -0,0 +1,3 @@
import * as cache from './cache.cmd'
export { cache }

View File

@@ -0,0 +1,55 @@
import path from 'path'
import { prepare } from '@pnpm/prepare'
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
import execa from 'execa'
import { cache } from '@pnpm/cache.commands'
import { sync as rimraf } from '@zkochan/rimraf'
const pnpmBin = path.join(__dirname, '../../../pnpm/bin/pnpm.cjs')
const REGISTRY = `http://localhost:${REGISTRY_MOCK_PORT}/`
describe('cache delete', () => {
let cacheDir: string
let storeDir: string
beforeEach(async () => {
prepare()
cacheDir = path.resolve('cache')
storeDir = path.resolve('store')
await execa('node', [
pnpmBin,
'add',
'is-negative@2.1.0',
`--store-dir=${storeDir}`,
`--cache-dir=${cacheDir}`,
'--config.resolution-mode=highest',
`--registry=${REGISTRY}`,
])
rimraf('node_modules')
rimraf('pnpm-lock.yaml')
await execa('node', [
pnpmBin,
'add',
'is-negative@2.1.0',
'is-positive@1.0.0',
`--store-dir=${storeDir}`,
`--cache-dir=${cacheDir}`,
'--config.resolution-mode=highest',
])
})
test('delete all metadata from the cache that matches a pattern', async () => {
await cache.handler({
cacheDir,
cliOptions: {},
pnpmHomeDir: storeDir,
}, ['delete', '*-positive'])
const result = await cache.handler({
cacheDir,
cliOptions: {},
pnpmHomeDir: storeDir,
}, ['list'])
expect(result).toEqual(`localhost+${REGISTRY_MOCK_PORT}/is-negative.json
registry.npmjs.org/is-negative.json`)
})
})

View File

@@ -0,0 +1,82 @@
import path from 'path'
import { prepare } from '@pnpm/prepare'
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
import execa from 'execa'
import { cache } from '@pnpm/cache.commands'
import { sync as rimraf } from '@zkochan/rimraf'
const pnpmBin = path.join(__dirname, '../../../pnpm/bin/pnpm.cjs')
const REGISTRY = `http://localhost:${REGISTRY_MOCK_PORT}/`
describe('cache', () => {
let cacheDir: string
let storeDir: string
beforeAll(async () => {
prepare()
cacheDir = path.resolve('cache')
storeDir = path.resolve('store')
await execa('node', [
pnpmBin,
'add',
'is-negative@2.1.0',
`--store-dir=${storeDir}`,
`--cache-dir=${cacheDir}`,
'--config.resolution-mode=highest',
`--registry=${REGISTRY}`,
])
rimraf('node_modules')
rimraf('pnpm-lock.yaml')
await execa('node', [
pnpmBin,
'add',
'is-negative@2.1.0',
'is-positive@1.0.0',
`--store-dir=${storeDir}`,
`--cache-dir=${cacheDir}`,
'--config.resolution-mode=highest',
])
})
test('list all metadata from the cache', async () => {
const result = await cache.handler({
cacheDir,
cliOptions: {},
pnpmHomeDir: storeDir,
}, ['list'])
expect(result).toEqual(`localhost+${REGISTRY_MOCK_PORT}/is-negative.json
registry.npmjs.org/is-negative.json
registry.npmjs.org/is-positive.json`)
})
test('list all metadata from the cache related to the specified registry', async () => {
const result = await cache.handler({
cacheDir,
cliOptions: {
registry: 'https://registry.npmjs.org/',
},
pnpmHomeDir: storeDir,
}, ['list'])
expect(result).toEqual(`registry.npmjs.org/is-negative.json
registry.npmjs.org/is-positive.json`)
})
test('list all metadata from the cache that matches a pattern', async () => {
const result = await cache.handler({
cacheDir,
cliOptions: {},
pnpmHomeDir: storeDir,
}, ['list', '*-positive'])
expect(result).toEqual('registry.npmjs.org/is-positive.json')
})
test('list registries', async () => {
const result = await cache.handler({
cacheDir,
cliOptions: {},
pnpmHomeDir: storeDir,
}, ['list-registries'])
expect(result).toEqual(`localhost+${REGISTRY_MOCK_PORT}
registry.npmjs.org`)
})
})

View File

@@ -0,0 +1,93 @@
import path from 'path'
import { prepare } from '@pnpm/prepare'
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
import execa from 'execa'
import { cache } from '@pnpm/cache.commands'
import { sync as rimraf } from '@zkochan/rimraf'
const pnpmBin = path.join(__dirname, '../../../pnpm/bin/pnpm.cjs')
const REGISTRY = `http://localhost:${REGISTRY_MOCK_PORT}/`
describe('cache view', () => {
let cacheDir: string
let storeDir: string
beforeEach(async () => {
prepare()
cacheDir = path.resolve('cache')
storeDir = path.resolve('store')
await execa('node', [
pnpmBin,
'add',
'is-negative@2.1.0',
`--store-dir=${storeDir}`,
`--cache-dir=${cacheDir}`,
'--config.resolution-mode=highest',
`--registry=${REGISTRY}`,
])
rimraf('node_modules')
rimraf('pnpm-lock.yaml')
await execa('node', [
pnpmBin,
'add',
'is-negative@2.1.0',
`--store-dir=${storeDir}`,
`--cache-dir=${cacheDir}`,
'--config.resolution-mode=highest',
])
})
test('lists all metadata for requested package', async () => {
const result = await cache.handler({
cacheDir,
cliOptions: {},
pnpmHomeDir: process.cwd(),
storeDir,
}, ['view', 'is-negative'])
expect(JSON.parse(result!)).toEqual(expect.objectContaining({
[`localhost:${REGISTRY_MOCK_PORT}`]: expect.objectContaining({
cachedVersions: ['2.1.0'],
nonCachedVersions: [
'1.0.0',
'1.0.1',
'2.0.0',
'2.0.1',
'2.0.2',
],
}),
'registry.npmjs.org': expect.objectContaining({
cachedVersions: ['2.1.0'],
nonCachedVersions: [
'1.0.0',
'1.0.1',
'2.0.0',
'2.0.1',
'2.0.2',
],
}),
}))
})
test('lists metadata for requested package from specified registry', async () => {
const result = await cache.handler({
cacheDir,
cliOptions: {
registry: 'https://registry.npmjs.org/',
},
pnpmHomeDir: process.cwd(),
storeDir,
}, ['view', 'is-negative'])
expect(JSON.parse(result!)).toEqual(expect.objectContaining({
'registry.npmjs.org': expect.objectContaining({
cachedVersions: ['2.1.0'],
nonCachedVersions: [
'1.0.0',
'1.0.1',
'2.0.0',
'2.0.1',
'2.0.2',
],
}),
}))
})
})

17
cache/commands/test/tsconfig.json vendored Normal file
View File

@@ -0,0 +1,17 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"noEmit": false,
"outDir": "../test.lib",
"rootDir": "."
},
"include": [
"**/*.ts",
"../../../__typings__/**/*.d.ts"
],
"references": [
{
"path": ".."
}
]
}

34
cache/commands/tsconfig.json vendored Normal file
View File

@@ -0,0 +1,34 @@
{
"extends": "@pnpm/tsconfig",
"compilerOptions": {
"outDir": "lib",
"rootDir": "src"
},
"include": [
"src/**/*.ts",
"../../__typings__/**/*.d.ts"
],
"references": [
{
"path": "../../__utils__/prepare"
},
{
"path": "../../cli/cli-utils"
},
{
"path": "../../config/config"
},
{
"path": "../../packages/constants"
},
{
"path": "../../packages/logger"
},
{
"path": "../../store/store-path"
},
{
"path": "../api"
}
]
}

8
cache/commands/tsconfig.lint.json vendored Normal file
View File

@@ -0,0 +1,8 @@
{
"extends": "./tsconfig.json",
"include": [
"src/**/*.ts",
"test/**/*.ts",
"../../__typings__/**/*.d.ts"
]
}

View File

@@ -13,7 +13,7 @@
},
"scripts": {
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7770 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7771 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"

View File

@@ -13,7 +13,7 @@
},
"scripts": {
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7771 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7772 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"start": "tsc --watch",

View File

@@ -7,3 +7,10 @@ export const ENGINE_NAME = `${process.platform}-${process.arch}-node-${process.v
export const LAYOUT_VERSION = 5
export const WORKSPACE_MANIFEST_FILENAME = 'pnpm-workspace.yaml'
// This file contains meta information
// about all the packages published by the same name, not just the manifest
// of one package/version
export const META_DIR = 'metadata'
export const FULL_META_DIR = 'metadata-full'
export const FULL_FILTERED_META_DIR = 'metadata-v1.1'

View File

@@ -14,7 +14,7 @@
"scripts": {
"start": "tsc --watch",
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7772 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7773 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"

View File

@@ -58,7 +58,7 @@
"scripts": {
"start": "tsc --watch",
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7773 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7774 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"runPrepareFixtures": "node ../../pnpm/bin/pnpm.cjs i -r -C test/fixtures --no-shared-workspace-lockfile --no-link-workspace-packages --lockfile-only --registry http://localhost:4873/ --ignore-scripts --force --no-strict-peer-dependencies",

View File

@@ -14,7 +14,7 @@
"scripts": {
"start": "tsc --watch",
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7774 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7775 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"

View File

@@ -14,7 +14,7 @@
"scripts": {
"start": "tsc --watch",
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7775 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7776 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"

450
pnpm-lock.yaml generated
View File

@@ -1038,6 +1038,80 @@ importers:
specifier: workspace:*
version: 'link:'
cache/api:
dependencies:
'@pnpm/config':
specifier: workspace:*
version: link:../../config/config
'@pnpm/constants':
specifier: workspace:*
version: link:../../packages/constants
'@pnpm/npm-resolver':
specifier: workspace:*
version: link:../../resolving/npm-resolver
'@pnpm/store.cafs':
specifier: workspace:*
version: link:../../store/cafs
encode-registry:
specifier: 'catalog:'
version: 3.0.1
fast-glob:
specifier: 'catalog:'
version: 3.3.2
devDependencies:
'@pnpm/cache.api':
specifier: workspace:*
version: 'link:'
'@pnpm/logger':
specifier: workspace:*
version: link:../../packages/logger
cache/commands:
dependencies:
'@pnpm/cache.api':
specifier: workspace:*
version: link:../api
'@pnpm/cli-utils':
specifier: workspace:*
version: link:../../cli/cli-utils
'@pnpm/config':
specifier: workspace:*
version: link:../../config/config
'@pnpm/constants':
specifier: workspace:*
version: link:../../packages/constants
'@pnpm/store-path':
specifier: workspace:*
version: link:../../store/store-path
ramda:
specifier: 'catalog:'
version: '@pnpm/ramda@0.28.1'
render-help:
specifier: 'catalog:'
version: 1.0.3
devDependencies:
'@pnpm/cache.commands':
specifier: workspace:*
version: 'link:'
'@pnpm/logger':
specifier: workspace:*
version: link:../../packages/logger
'@pnpm/prepare':
specifier: workspace:*
version: link:../../__utils__/prepare
'@pnpm/registry-mock':
specifier: 'catalog:'
version: 3.40.0(encoding@0.1.13)(typanion@3.14.0)
'@types/ramda':
specifier: 'catalog:'
version: 0.29.12
'@zkochan/rimraf':
specifier: 'catalog:'
version: 3.0.2
execa:
specifier: 'catalog:'
version: safe-execa@0.1.2
catalogs/config:
dependencies:
'@pnpm/error':
@@ -5461,6 +5535,9 @@ importers:
'@pnpm/byline':
specifier: 'catalog:'
version: 1.0.0
'@pnpm/cache.commands':
specifier: workspace:*
version: link:../cache/commands
'@pnpm/cli-meta':
specifier: workspace:*
version: link:../cli/cli-meta
@@ -6130,6 +6207,9 @@ importers:
resolving/npm-resolver:
dependencies:
'@pnpm/constants':
specifier: workspace:*
version: link:../../packages/constants
'@pnpm/core-loggers':
specifier: workspace:*
version: link:../../packages/core-loggers
@@ -8522,22 +8602,12 @@ packages:
resolution: {integrity: sha512-NCzIKUu1rCVXvflu9c9b8BqT5fdiSsCQw+ywBGP6fyET6L9YhoAFwsUf2+0JpCbLivo88IdKrqkQNyIFBFtrZw==}
engines: {node: '>=18.12'}
'@pnpm/cli-meta@6.2.1':
resolution: {integrity: sha512-4bCJzWVhYpN8dhc2EKwSJy8663UEokFVxAorZ73VNhBCMTNewwA8HQyqciDwS4//yuE17gmT0MDzsbJ+2KYzxg==}
engines: {node: '>=18.12'}
'@pnpm/cli-utils@4.0.1':
resolution: {integrity: sha512-qiN1m4YPD+fqhQT8G+7YtJxsnF9SxM09XR/anG+z5t8z1mYRDELVKedEUlPk6vUsKGW1TY6OIJkbSoh+4GCXpw==}
engines: {node: '>=18.12'}
peerDependencies:
'@pnpm/logger': ^5.0.0
'@pnpm/cli-utils@4.0.4':
resolution: {integrity: sha512-cpaTxrIgfrdnWyvwmukfjEkLt5PTact8jvSy1Veq91nXR/CmDXGNKjcNUigH+mtH3Sz0RtT14B82N8oaSweiiA==}
engines: {node: '>=18.12'}
peerDependencies:
'@pnpm/logger': ^5.1.0
'@pnpm/colorize-semver-diff@1.0.1':
resolution: {integrity: sha512-qP4E7mzmCBhB4so6szszeIdVDrcKGTTCxBazCKoiPUG34xLha6r57zJuFBkTmD65i3TB7++lf3BwpQruUwf/BQ==}
engines: {node: '>=10'}
@@ -8554,10 +8624,6 @@ packages:
resolution: {integrity: sha512-/8Cb/onSMVu7X+txSagp9eltwP1mVxEEXrfCb8kT03NiAofvdqDVCqcPIaEbhn4EHr75BueQQzasxSNXxmQkAA==}
engines: {node: '>=18.12'}
'@pnpm/config@21.8.2':
resolution: {integrity: sha512-3YQ7U4hx7fO4akc+kOGfT1lHqlEpP0Ck4K/0HUSWZm5T9jIQuXyUbM6B5FdeAP55OCsw45BUPdbY9/+sVcXqQA==}
engines: {node: '>=18.12'}
'@pnpm/constants@8.0.0':
resolution: {integrity: sha512-yQosGUvYPpAjb1jOFcdbwekRjZRVxN6C0hHzfRCZrMKbxGjt/E0g0RcFlEDNVZ95tm4oMMcr7nEPa7H7LX3emw==}
engines: {node: '>=18.12'}
@@ -8568,12 +8634,6 @@ packages:
peerDependencies:
'@pnpm/logger': ^5.0.0
'@pnpm/core-loggers@10.0.6':
resolution: {integrity: sha512-F8l9PZysYBfCsGt5r5NY44FRe9OuXMFjtYzx0hZMwTjqgrg+X2cjm8Y+1Jh2l8FY011Mp/pawDV1F4vlBgyJqQ==}
engines: {node: '>=18.12'}
peerDependencies:
'@pnpm/logger': ^5.1.0
'@pnpm/crypto.base32-hash@3.0.0':
resolution: {integrity: sha512-iGKP6rRKng5Tcad1+S+j3UoY5wVZN+z0ZgemlGp69jNgn6EaM4N0Q3mvnDNJ7UZFmL2ClXZZYLNuCk9pUYV3Xg==}
engines: {node: '>=18.12'}
@@ -8592,12 +8652,6 @@ packages:
peerDependencies:
'@pnpm/logger': ^5.0.0
'@pnpm/default-reporter@14.0.1':
resolution: {integrity: sha512-cpJtMu76jyfYVQnVjXjKXzWTZMWpxj2nZWPLyrL3J23m+XkicAox4yU1iCFvvlkX1/df5zVkqi3HPaC3P9zgKg==}
engines: {node: '>=18.12'}
peerDependencies:
'@pnpm/logger': ^5.1.0
'@pnpm/error@6.0.1':
resolution: {integrity: sha512-7yjO0RgmWYb4OKgcWC33yD4Z2CxE7Tm7vXX1SmS7GDifDT/bgZZhHeS2xq/+W6y9yhwIrRSA+7AlQL1NM2wIvw==}
engines: {node: '>=18.12'}
@@ -8610,10 +8664,6 @@ packages:
resolution: {integrity: sha512-f6LPAexXgHS9AUcKcGKOJRbrHM0m08JXtzeK+8Ijpq7omVTrjUNRXQRIPlp15ycqbAO9ppNtD5v8li+dtdGyYw==}
engines: {node: '>=18.12'}
'@pnpm/fetcher-base@16.0.6':
resolution: {integrity: sha512-6Glb68vZZZ3YaujTUBXsed5aytTTG1wPhhbbZSGMX6sQrt9CTT+nQRSrqcEE8+tRP5ZBW5LiFNUw0dHRQNHkAQ==}
engines: {node: '>=18.12'}
'@pnpm/find-workspace-dir@7.0.1':
resolution: {integrity: sha512-o1LAFM/5MChI6qBolMBOznzatch01UK3wIgoAE/b779qs1FakksB278nMRTwRY58PZSBT+RxZ2RCMjlxPLeVWw==}
engines: {node: '>=18.12'}
@@ -8622,10 +8672,6 @@ packages:
resolution: {integrity: sha512-ucwEzEiOXe8k8Ekg4PSRRx8Tq3xSK8gZ8ecCxscytdqVuShmsnZLcKasCSXc508w0mOPeQtsgvAGUWI6+VdRdA==}
engines: {node: '>=18.12'}
'@pnpm/fs.find-packages@4.0.3':
resolution: {integrity: sha512-mLtnDCnIjcn7U1oOduCMJ9/MX0Sdx5olKCWPyzJ3B32LnuFvL4IDiOaaoxYmBDHhd0MXKhPLBXm8PEHjfVnU+A==}
engines: {node: '>=18.12'}
'@pnpm/fs.packlist@2.0.0':
resolution: {integrity: sha512-oy5ynSgI13FxkwDj/iTSWcdJsoih0Fxr2TZjUfgp1z1oyoust8+OxqCMOrHovJEKToHdPQgFtO09KbH7lAlN0w==}
engines: {node: '>=18.12'}
@@ -8642,10 +8688,6 @@ packages:
resolution: {integrity: sha512-7rFgjOnpHqCZeEEJZRGJBlwZL1On2ViiS/ogVroy9nCGZqtI++PbeHhCBqVQyKHwo6a7UWLJ5g1rLQdwUpuCGw==}
engines: {node: '>=18.12'}
'@pnpm/hooks.types@2.0.8':
resolution: {integrity: sha512-gkym9uiDaLWZ/xwIYSOd3u3vIqxVukdkjrIB1rKWkEav748HRePYRqtnXP3Dfqe+2BbouuNzBmr8XGCYdN+4NA==}
engines: {node: '>=18.12'}
'@pnpm/hosted-git-info@1.0.0':
resolution: {integrity: sha512-QzmNiLShTnNyeTHr+cykG5hYjwph0+v49KHV36Dh8uA2rRMWw30qoZMARuxd00SYdoTwT8bIouqqmzi6TWfJHQ==}
engines: {node: '>=10'}
@@ -8654,10 +8696,6 @@ packages:
resolution: {integrity: sha512-o3rr7czGHQT6C4optU9yyqxFuEEaF+ihpI2/gmCEKaMfXNKGE+bsffsVHrorR7DmfxMVQ9btMrq7tocvETZgHA==}
engines: {node: '>=18.12'}
'@pnpm/lockfile.types@1.0.2':
resolution: {integrity: sha512-vtSYeL28wtX/IalSg1ehxFRz4wJ07gqdndHnQtjbRn6n0RyBotPwR5rwotqA9AtMLjAE5b8WGj+TlNdPREXHYg==}
engines: {node: '>=18.12'}
'@pnpm/log.group@3.0.0':
resolution: {integrity: sha512-PRy5Ck1Jz0P6W7+cV4E1OQDnIQRKLkhrg+rvfPkGtk2TfJmuIZAvq25E8NUn5DMtODWZ1xG0Yro2jgMXUiz3tg==}
engines: {node: '>=18.12'}
@@ -8674,10 +8712,6 @@ packages:
resolution: {integrity: sha512-q1DWttEs7q+8MUo3Z55Bniyv1Po7E+TIf6VLzMgTkH9Z1GByPoO/fwltLZLdhmD1pqsqitAxNHJ4u+QBLdrkWg==}
engines: {node: '>=18.12'}
'@pnpm/manifest-utils@6.0.7':
resolution: {integrity: sha512-lx+TenAQtsZ0W2+Ahk8nsI6Cd3PhkXf/iNrEHbX4SI66ekFP1H/kte1Eip79oK4SSmhtfrf6ycOSFU8wgLKbsA==}
engines: {node: '>=18.12'}
'@pnpm/matcher@6.0.0':
resolution: {integrity: sha512-c2diPZzejRYnL6b00Ko70TnOlbsqydUOvAjOZ7THTs0ptXG/AARcwNp9YO5EXFq775TTmsSUBo99qisYF1ogNA==}
engines: {node: '>=18.12'}
@@ -8746,12 +8780,6 @@ packages:
peerDependencies:
'@pnpm/logger': ^5.0.0
'@pnpm/package-is-installable@9.0.8':
resolution: {integrity: sha512-HigWqaVhE8QFYqB6UE1josXSciUB4LVK2dVzNZRr9WqqHH3mnrh7MK/FrdQQPAUSGBhpE/bwz32mwkngkmO5HQ==}
engines: {node: '>=18.12'}
peerDependencies:
'@pnpm/logger': ^5.1.0
'@pnpm/parse-overrides@5.1.0':
resolution: {integrity: sha512-RlNgiDIFNNK/4eTHOa549LYz51YCMiQroJEiUwCCWpOJlwPj+bIlcwpp9aOYGvH+ESjGIE5A9vfFFA6ilMPWKA==}
engines: {node: '>=18.12'}
@@ -8769,12 +8797,6 @@ packages:
resolution: {integrity: sha512-juCdQCC1USqLcOhVPl1tYReoTO9YH4fTullMnFXXcmpsDM7Dkn3tzuOQKC3oPoJ2ozv+0EeWWMtMGqn2+IM3pQ==}
engines: {node: '>=18.12'}
'@pnpm/pnpmfile@6.0.10':
resolution: {integrity: sha512-TWmo8knqWjucUmgLN7TZZv5+M78aieW5ctWwA+ywUo5U+MMD3sP+vE3oLgBbMyy8UoRqPymKc7VDYQc9Q23i5w==}
engines: {node: '>=18.12'}
peerDependencies:
'@pnpm/logger': ^5.1.0
'@pnpm/pnpmfile@6.0.9':
resolution: {integrity: sha512-NxoxKQzZ0/TFN07Q0+AYj+LdM1oP3VYEFIpL0MurO0RKTmulngQ/yv5tSfSNiCrd4/Dl2cdx9yi1s6YB8+ztXA==}
engines: {node: '>=18.12'}
@@ -8788,10 +8810,6 @@ packages:
resolution: {integrity: sha512-LFTWzfJbu6+l86bw/uUAsPU05n1oTqg6jzqyTXYDJPfVclqTfPnHiZoC1nvVvQlE7iVg3bhJ7SXg9IyzK7RWDQ==}
engines: {node: '>=18.12'}
'@pnpm/read-project-manifest@6.0.7':
resolution: {integrity: sha512-K6PTvopHtdlYNihFNtx2P5c0m5BZihBY2YH8pDFAvYMHVJ7eSSyjjHUZb/3SNfXIKnJ6LNH5V9IWG+kdDDMyBw==}
engines: {node: '>=18.12'}
'@pnpm/registry-mock@3.40.0':
resolution: {integrity: sha512-9yJHuhHalHVHBhANoZwa6ZQhbcrXGWEULuAP+gA8XYQdTi1Mfn2EKJqZaZjs9pACoJauRh90e86X3/r6HlITpA==}
engines: {node: '>=10.13'}
@@ -8801,18 +8819,10 @@ packages:
resolution: {integrity: sha512-vWYvhMYEKdR4I1VYlHbo7X1A50Ne+Tg9FJiymLiihoiDHk/rgwilV/NT7ErTYSBMQ1N6O+7MjJjY37MrcHjmKQ==}
engines: {node: '>=18.12'}
'@pnpm/render-peer-issues@5.0.7':
resolution: {integrity: sha512-HilxbwnRoldGOP3dFhpxlvKu5zeOIxoH88SpcsPTfRp0vyUcdACAbgGxruXX9FzwHz5ct2kJ7z5t06AgA0oLhw==}
engines: {node: '>=18.12'}
'@pnpm/resolver-base@13.0.2':
resolution: {integrity: sha512-GS1FTXvo0/UqUQWw/kjpjZAgyxCYfwBJIoKK+QVbxOh3t4GdE/nO7zybU7iKaO5ga9KhjD+HWUk103h1rhrEoA==}
engines: {node: '>=18.12'}
'@pnpm/resolver-base@13.0.3':
resolution: {integrity: sha512-toY5sj1Vgn/pXyQ+her8pA3oAHHUVO9k0TK9BYYffJASqrMyn7yYHObtQoyuoKQJoz19qe907DIx+rwpbPIVtg==}
engines: {node: '>=18.12'}
'@pnpm/self-installer@2.2.1':
resolution: {integrity: sha512-aefLe96wAWghkx6q1PwbVS1Iz1iGE+HKwkTmtzWLFXeGhbknaIdG2voMwaBGIYGCSxm8sDKR1uLO4aRRAYuc+Q==}
engines: {node: '>=4'}
@@ -8829,10 +8839,6 @@ packages:
resolution: {integrity: sha512-4Zk2+jeBBbpYgTFwqz8fUYPmnMBzonB9e0nPCj5iZydAHlevwzO4PG0FTg/SrSz1BDnors0umM4qMjClzdIIuA==}
engines: {node: '>=18.12'}
'@pnpm/store-controller-types@18.1.5':
resolution: {integrity: sha512-o2F6prWVbEKMsrENTx03cuJvq25cLeYvTUcUC0Se+52B4u02HZCmX6FfOKOFCUCiXMXE37cSPZuvjk4r5jlBig==}
engines: {node: '>=18.12'}
'@pnpm/tabtab@0.5.4':
resolution: {integrity: sha512-bWLDlHsBlgKY/05wDN/V3ETcn5G2SV/SiA2ZmNvKGGlmVX4G5li7GRDhHcgYvHJHyJ8TUStqg2xtHmCs0UbAbg==}
engines: {node: '>=18'}
@@ -8849,10 +8855,6 @@ packages:
resolution: {integrity: sha512-7iookhjwjR4YwszOcGSXS4iY0oDYCGZ1kKvkHiufk/hcs2Fqh34dS5p0K5mOilwAFKcdjbl8QyNDogcOmKf3pg==}
engines: {node: '>=18.12'}
'@pnpm/types@12.1.0':
resolution: {integrity: sha512-bbu+UmaZ8fG72K/FMqKPlXLZ955VcmU6P2ODzAtKbOTtrEbpNyBfTeki9u6IZex6RF66s8SDpAHhmRV0qWkDwA==}
engines: {node: '>=18.12'}
'@pnpm/util.lex-comparator@3.0.0':
resolution: {integrity: sha512-ead+l3IiuVXwKDf/QJPX6G93cwhXki3yOVEA/VdAO7AhZ5vUuSBxHe6gQKEbB0QacJ4H5VsYxeM1xUgwjjOO/Q==}
engines: {node: '>=18.12'}
@@ -8868,12 +8870,6 @@ packages:
peerDependencies:
'@pnpm/logger': ^5.0.0
'@pnpm/workspace.find-packages@4.0.9':
resolution: {integrity: sha512-4lAfvs8MTtwNyzAvRPWMhXOLTAe6XH87qDxzvkKw5HMgo5txmEDmUv098rCaT69EUi1Sjx/WhQfCovISuAsoZg==}
engines: {node: '>=18.12'}
peerDependencies:
'@pnpm/logger': ^5.1.0
'@pnpm/workspace.read-manifest@2.2.0':
resolution: {integrity: sha512-8rWN1LjG8qCqR32UcDVBBaXfmQhl1Ye698KB1L+MlJTa/S568UyQOfINdC8eL5ba6vggoDp4opgUcY8FoEdNhQ==}
engines: {node: '>=18.12'}
@@ -8882,10 +8878,6 @@ packages:
resolution: {integrity: sha512-JpiY/IoWFpIJxMUXv5Phxi+ft+Th3b2zffR/ml984SE++GwnrH9b47aqo998A8ffbLa6aaj8yQbErleMS/oy2g==}
engines: {node: '>=18.12'}
'@pnpm/write-project-manifest@6.0.6':
resolution: {integrity: sha512-BwK2XgLUJbcNP4CWXcpilHbROc3uvAi3Sgfn3Hq4L/+8Vg+h10r73Vzi+iqhQnd5pJS7RTpg3RIUznHcflV5DA==}
engines: {node: '>=18.12'}
'@reflink/reflink-darwin-arm64@0.1.16':
resolution: {integrity: sha512-s61AeZ0br2LtqOl2Rbq0k833hQ00sXJ+l9LGJmjM53dupWft3HEX9C5WUIMDDiU2Scx7f7UKAE4DvIvv7XjBWQ==}
engines: {node: '>= 10'}
@@ -13820,7 +13812,6 @@ packages:
uid-number@0.0.6:
resolution: {integrity: sha512-c461FXIljswCuscZn67xq9PpszkPT6RjheWFQTgCyabJrTUozElanb0YEqv2UGgk247YpcJkFBuSGNvBlpXM9w==}
deprecated: This package is no longer supported.
umask@1.1.0:
resolution: {integrity: sha512-lE/rxOhmiScJu9L6RTNVgB/zZbF+vGC0/p6D3xnkAePI2o0sMyFG966iR5Ki50OI/0mNi2yaRnxfLsPmEZF/JA==}
@@ -14216,7 +14207,7 @@ snapshots:
'@babel/generator@7.23.0':
dependencies:
'@babel/types': 7.23.0
'@babel/types': 7.25.6
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
@@ -15091,7 +15082,7 @@ snapshots:
'@jest/console@29.7.0':
dependencies:
'@jest/types': 29.6.3
'@types/node': 18.19.34
'@types/node': 22.5.3
chalk: 4.1.2
jest-message-util: 29.7.0
jest-util: 29.7.0
@@ -15104,14 +15095,14 @@ snapshots:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0(@babel/types@7.25.6)
'@jest/types': 29.6.3
'@types/node': 18.19.34
'@types/node': 22.5.3
ansi-escapes: 4.3.2
chalk: 4.1.2
ci-info: 3.9.0
exit: 0.1.2
graceful-fs: 4.2.11(patch_hash=ivtm2a2cfr5pomcfbedhmr5v2q)
jest-changed-files: 29.7.0
jest-config: 29.7.0(@babel/types@7.25.6)(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@5.5.4))
jest-config: 29.7.0(@babel/types@7.25.6)(@types/node@22.5.3)(ts-node@10.9.2(@types/node@18.19.34)(typescript@5.5.4))
jest-haste-map: 29.7.0
jest-message-util: 29.7.0
jest-regex-util: 29.6.3
@@ -15137,7 +15128,7 @@ snapshots:
dependencies:
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
'@types/node': 18.19.34
'@types/node': 22.5.3
jest-mock: 29.7.0
'@jest/expect-utils@29.7.0':
@@ -15155,7 +15146,7 @@ snapshots:
dependencies:
'@jest/types': 29.6.3
'@sinonjs/fake-timers': 10.3.0
'@types/node': 18.19.34
'@types/node': 22.5.3
jest-message-util: 29.7.0
jest-mock: 29.7.0
jest-util: 29.7.0
@@ -15177,7 +15168,7 @@ snapshots:
'@jest/transform': 29.7.0(@babel/types@7.25.6)
'@jest/types': 29.6.3
'@jridgewell/trace-mapping': 0.3.25
'@types/node': 18.19.34
'@types/node': 22.5.3
chalk: 4.1.2
collect-v8-coverage: 1.0.2
exit: 0.1.2
@@ -15249,7 +15240,7 @@ snapshots:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
'@types/node': 18.19.34
'@types/node': 22.5.3
'@types/yargs': 17.0.33
chalk: 4.1.2
@@ -15315,7 +15306,7 @@ snapshots:
'@npmcli/fs@3.1.1':
dependencies:
semver: 7.6.2
semver: 7.6.3
'@pkgjs/parseargs@0.11.0':
optional: true
@@ -15342,11 +15333,6 @@ snapshots:
'@pnpm/types': 12.0.0
load-json-file: 6.2.0
'@pnpm/cli-meta@6.2.1':
dependencies:
'@pnpm/types': 12.1.0
load-json-file: 6.2.0
'@pnpm/cli-utils@4.0.1(@pnpm/logger@5.2.0)':
dependencies:
'@pnpm/cli-meta': 6.1.0
@@ -15361,20 +15347,6 @@ snapshots:
chalk: 4.1.2
load-json-file: 6.2.0
'@pnpm/cli-utils@4.0.4(@pnpm/logger@5.2.0)':
dependencies:
'@pnpm/cli-meta': 6.2.1
'@pnpm/config': 21.8.2(@pnpm/logger@5.2.0)
'@pnpm/default-reporter': 14.0.1(@pnpm/logger@5.2.0)
'@pnpm/error': 6.0.1
'@pnpm/logger': 5.2.0
'@pnpm/manifest-utils': 6.0.7(@pnpm/logger@5.2.0)
'@pnpm/package-is-installable': 9.0.8(@pnpm/logger@5.2.0)
'@pnpm/read-project-manifest': 6.0.7
'@pnpm/types': 12.1.0
chalk: 4.1.2
load-json-file: 6.2.0
'@pnpm/colorize-semver-diff@1.0.1':
dependencies:
chalk: 4.1.2
@@ -15413,36 +15385,6 @@ snapshots:
transitivePeerDependencies:
- '@pnpm/logger'
'@pnpm/config@21.8.2(@pnpm/logger@5.2.0)':
dependencies:
'@pnpm/catalogs.config': 0.1.0
'@pnpm/catalogs.types': 0.1.0
'@pnpm/config.env-replace': 3.0.0
'@pnpm/constants': 8.0.0
'@pnpm/error': 6.0.1
'@pnpm/git-utils': 2.0.0
'@pnpm/matcher': 6.0.0
'@pnpm/npm-conf': 2.3.1
'@pnpm/pnpmfile': 6.0.10(@pnpm/logger@5.2.0)
'@pnpm/read-project-manifest': 6.0.7
'@pnpm/types': 12.1.0
'@pnpm/workspace.read-manifest': 2.2.0
better-path-resolve: 1.0.0
camelcase: 6.3.0
camelcase-keys: 6.2.2
can-write-to-dir: 1.1.1
is-subdir: 1.2.0
is-windows: 1.0.2
normalize-registry-url: 2.0.0
path-absolute: 1.0.1
path-name: 1.0.0
ramda: '@pnpm/ramda@0.28.1'
read-ini-file: 4.0.0
realpath-missing: 1.1.0
which: '@pnpm/which@3.0.1'
transitivePeerDependencies:
- '@pnpm/logger'
'@pnpm/constants@8.0.0': {}
'@pnpm/core-loggers@10.0.5(@pnpm/logger@5.2.0)':
@@ -15450,11 +15392,6 @@ snapshots:
'@pnpm/logger': 5.2.0
'@pnpm/types': 12.0.0
'@pnpm/core-loggers@10.0.6(@pnpm/logger@5.2.0)':
dependencies:
'@pnpm/logger': 5.2.0
'@pnpm/types': 12.1.0
'@pnpm/crypto.base32-hash@3.0.0':
dependencies:
rfc4648: 1.5.3
@@ -15491,30 +15428,6 @@ snapshots:
stacktracey: 2.1.8
string-length: 4.0.2
'@pnpm/default-reporter@14.0.1(@pnpm/logger@5.2.0)':
dependencies:
'@pnpm/cli-meta': 6.2.1
'@pnpm/config': 21.8.2(@pnpm/logger@5.2.0)
'@pnpm/core-loggers': 10.0.6(@pnpm/logger@5.2.0)
'@pnpm/dedupe.issues-renderer': 2.0.0
'@pnpm/dedupe.types': 2.0.0
'@pnpm/error': 6.0.1
'@pnpm/logger': 5.2.0
'@pnpm/render-peer-issues': 5.0.7
'@pnpm/types': 12.1.0
ansi-diff: 1.2.0
boxen: 5.1.2
chalk: 4.1.2
cli-truncate: 2.1.0
normalize-path: 3.0.0
pretty-bytes: 5.6.0
pretty-ms: 7.0.1
ramda: '@pnpm/ramda@0.28.1'
rxjs: 7.8.1
semver: 7.6.3
stacktracey: 2.1.8
string-length: 4.0.2
'@pnpm/error@6.0.1':
dependencies:
'@pnpm/constants': 8.0.0
@@ -15531,12 +15444,6 @@ snapshots:
'@pnpm/types': 12.0.0
'@types/ssri': 7.1.5
'@pnpm/fetcher-base@16.0.6':
dependencies:
'@pnpm/resolver-base': 13.0.3
'@pnpm/types': 12.1.0
'@types/ssri': 7.1.5
'@pnpm/find-workspace-dir@7.0.1':
dependencies:
'@pnpm/error': 6.0.1
@@ -15550,14 +15457,6 @@ snapshots:
fast-glob: 3.3.2
p-filter: 2.1.0
'@pnpm/fs.find-packages@4.0.3':
dependencies:
'@pnpm/read-project-manifest': 6.0.7
'@pnpm/types': 12.1.0
'@pnpm/util.lex-comparator': 3.0.0
fast-glob: 3.3.2
p-filter: 2.1.0
'@pnpm/fs.packlist@2.0.0':
dependencies:
npm-packlist: 5.1.3
@@ -15575,11 +15474,6 @@ snapshots:
'@pnpm/lockfile.types': 1.0.1
'@pnpm/types': 12.0.0
'@pnpm/hooks.types@2.0.8':
dependencies:
'@pnpm/lockfile.types': 1.0.2
'@pnpm/types': 12.1.0
'@pnpm/hosted-git-info@1.0.0':
dependencies:
lru-cache: 6.0.0
@@ -15589,11 +15483,6 @@ snapshots:
'@pnpm/patching.types': 1.0.0
'@pnpm/types': 12.0.0
'@pnpm/lockfile.types@1.0.2':
dependencies:
'@pnpm/patching.types': 1.0.0
'@pnpm/types': 12.1.0
'@pnpm/log.group@3.0.0':
dependencies:
ci-info: 3.9.0
@@ -15616,14 +15505,6 @@ snapshots:
transitivePeerDependencies:
- '@pnpm/logger'
'@pnpm/manifest-utils@6.0.7(@pnpm/logger@5.2.0)':
dependencies:
'@pnpm/core-loggers': 10.0.6(@pnpm/logger@5.2.0)
'@pnpm/error': 6.0.1
'@pnpm/types': 12.1.0
transitivePeerDependencies:
- '@pnpm/logger'
'@pnpm/matcher@6.0.0':
dependencies:
escape-string-regexp: 4.0.0
@@ -15633,7 +15514,7 @@ snapshots:
'@pnpm/find-workspace-dir': 7.0.1
'@pnpm/logger': 5.2.0
'@pnpm/types': 11.1.0
'@pnpm/workspace.find-packages': 4.0.9(@pnpm/logger@5.2.0)
'@pnpm/workspace.find-packages': 4.0.6(@pnpm/logger@5.2.0)
'@pnpm/workspace.read-manifest': 2.2.0
load-json-file: 7.0.1
meow: 11.0.0
@@ -15709,7 +15590,7 @@ snapshots:
'@pnpm/npm-package-arg@1.0.0':
dependencies:
hosted-git-info: 4.1.0
semver: 7.6.2
semver: 7.6.3
validate-npm-package-name: 4.0.0
'@pnpm/os.env.path-extender-posix@2.0.0':
@@ -15739,18 +15620,6 @@ snapshots:
mem: 8.1.1
semver: 7.6.3
'@pnpm/package-is-installable@9.0.8(@pnpm/logger@5.2.0)':
dependencies:
'@pnpm/cli-meta': 6.2.1
'@pnpm/core-loggers': 10.0.6(@pnpm/logger@5.2.0)
'@pnpm/error': 6.0.1
'@pnpm/logger': 5.2.0
'@pnpm/types': 12.1.0
detect-libc: 2.0.3
execa: safe-execa@0.1.2
mem: 8.1.1
semver: 7.6.3
'@pnpm/parse-overrides@5.1.0':
dependencies:
'@pnpm/catalogs.resolver': 0.1.0
@@ -15781,19 +15650,6 @@ snapshots:
'@pnpm/patching.types@1.0.0': {}
'@pnpm/pnpmfile@6.0.10(@pnpm/logger@5.2.0)':
dependencies:
'@pnpm/core-loggers': 10.0.6(@pnpm/logger@5.2.0)
'@pnpm/crypto.base32-hash': 3.0.0
'@pnpm/error': 6.0.1
'@pnpm/hooks.types': 2.0.8
'@pnpm/lockfile.types': 1.0.2
'@pnpm/logger': 5.2.0
'@pnpm/store-controller-types': 18.1.5
'@pnpm/types': 12.1.0
chalk: 4.1.2
path-absolute: 1.0.1
'@pnpm/pnpmfile@6.0.9(@pnpm/logger@5.2.0)':
dependencies:
'@pnpm/core-loggers': 10.0.5(@pnpm/logger@5.2.0)
@@ -15826,23 +15682,6 @@ snapshots:
sort-keys: 4.2.0
strip-bom: 4.0.0
'@pnpm/read-project-manifest@6.0.7':
dependencies:
'@gwhitney/detect-indent': 7.0.1
'@pnpm/error': 6.0.1
'@pnpm/graceful-fs': 4.0.0
'@pnpm/text.comments-parser': 3.0.0
'@pnpm/types': 12.1.0
'@pnpm/write-project-manifest': 6.0.6
fast-deep-equal: 3.1.3
is-windows: 1.0.2
json5: 2.2.3
lodash.clonedeep: 4.5.0
parse-json: 5.2.0
read-yaml-file: 2.1.0
sort-keys: 4.2.0
strip-bom: 4.0.0
'@pnpm/registry-mock@3.40.0(encoding@0.1.13)(typanion@3.14.0)':
dependencies:
anonymous-npm-registry-client: 0.2.0
@@ -15869,25 +15708,10 @@ snapshots:
cli-columns: 4.0.0
semver: 7.6.3
'@pnpm/render-peer-issues@5.0.7':
dependencies:
'@pnpm/error': 6.0.1
'@pnpm/matcher': 6.0.0
'@pnpm/parse-overrides': 5.1.0
'@pnpm/types': 12.1.0
archy: 1.0.0
chalk: 4.1.2
cli-columns: 4.0.0
semver: 7.6.3
'@pnpm/resolver-base@13.0.2':
dependencies:
'@pnpm/types': 12.0.0
'@pnpm/resolver-base@13.0.3':
dependencies:
'@pnpm/types': 12.1.0
'@pnpm/self-installer@2.2.1': {}
'@pnpm/semver-diff@1.1.0': {}
@@ -15902,12 +15726,6 @@ snapshots:
'@pnpm/resolver-base': 13.0.2
'@pnpm/types': 12.0.0
'@pnpm/store-controller-types@18.1.5':
dependencies:
'@pnpm/fetcher-base': 16.0.6
'@pnpm/resolver-base': 13.0.3
'@pnpm/types': 12.1.0
'@pnpm/tabtab@0.5.4':
dependencies:
debug: 4.3.6
@@ -15925,8 +15743,6 @@ snapshots:
'@pnpm/types@12.0.0': {}
'@pnpm/types@12.1.0': {}
'@pnpm/util.lex-comparator@3.0.0': {}
'@pnpm/which@3.0.1':
@@ -15941,14 +15757,6 @@ snapshots:
'@pnpm/types': 12.0.0
'@pnpm/util.lex-comparator': 3.0.0
'@pnpm/workspace.find-packages@4.0.9(@pnpm/logger@5.2.0)':
dependencies:
'@pnpm/cli-utils': 4.0.4(@pnpm/logger@5.2.0)
'@pnpm/fs.find-packages': 4.0.3
'@pnpm/logger': 5.2.0
'@pnpm/types': 12.1.0
'@pnpm/util.lex-comparator': 3.0.0
'@pnpm/workspace.read-manifest@2.2.0':
dependencies:
'@pnpm/constants': 8.0.0
@@ -15963,14 +15771,6 @@ snapshots:
write-file-atomic: 5.0.1
write-yaml-file: 5.0.0
'@pnpm/write-project-manifest@6.0.6':
dependencies:
'@pnpm/text.comments-parser': 3.0.0
'@pnpm/types': 12.1.0
json5: 2.2.3
write-file-atomic: 5.0.1
write-yaml-file: 5.0.0
'@reflink/reflink-darwin-arm64@0.1.16':
optional: true
@@ -16115,7 +15915,7 @@ snapshots:
'@types/isexe@2.0.2':
dependencies:
'@types/node': 18.19.34
'@types/node': 22.5.3
'@types/istanbul-lib-coverage@2.0.6': {}
@@ -16238,7 +16038,7 @@ snapshots:
'@types/touch@3.1.5':
dependencies:
'@types/node': 18.19.34
'@types/node': 22.5.3
'@types/treeify@1.0.3': {}
@@ -16461,7 +16261,7 @@ snapshots:
'@yarnpkg/core@4.0.3(typanion@3.14.0)':
dependencies:
'@arcanis/slice-ansi': 1.1.1
'@types/semver': 7.5.3
'@types/semver': 7.5.8
'@types/treeify': 1.0.3
'@yarnpkg/fslib': 3.1.0
'@yarnpkg/libzip': 3.1.0(@yarnpkg/fslib@3.1.0)
@@ -16479,7 +16279,7 @@ snapshots:
lodash: 4.17.21
micromatch: 4.0.8
p-limit: 2.3.0
semver: 7.6.2
semver: 7.6.3
strip-ansi: 6.0.1
tar: 6.2.1
tinylogic: 2.0.0
@@ -19140,7 +18940,7 @@ snapshots:
'@jest/expect': 29.7.0
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
'@types/node': 18.19.34
'@types/node': 22.5.3
chalk: 4.1.2
co: 4.6.0
dedent: 1.5.3
@@ -19213,6 +19013,38 @@ snapshots:
- babel-plugin-macros
- supports-color
jest-config@29.7.0(@babel/types@7.25.6)(@types/node@22.5.3)(ts-node@10.9.2(@types/node@18.19.34)(typescript@5.5.4)):
dependencies:
'@babel/core': 7.25.2
'@jest/test-sequencer': 29.7.0
'@jest/types': 29.6.3
babel-jest: 29.7.0(@babel/core@7.25.2)(@babel/types@7.25.6)
chalk: 4.1.2
ci-info: 3.9.0
deepmerge: 4.3.1
glob: 7.2.3
graceful-fs: 4.2.11(patch_hash=ivtm2a2cfr5pomcfbedhmr5v2q)
jest-circus: 29.7.0(@babel/types@7.25.6)
jest-environment-node: 29.7.0
jest-get-type: 29.6.3
jest-regex-util: 29.6.3
jest-resolve: 29.7.0
jest-runner: 29.7.0(@babel/types@7.25.6)
jest-util: 29.7.0
jest-validate: 29.7.0
micromatch: 4.0.8
parse-json: 5.2.0
pretty-format: 29.7.0
slash: 3.0.0
strip-json-comments: 3.1.1
optionalDependencies:
'@types/node': 22.5.3
ts-node: 10.9.2(@types/node@18.19.34)(typescript@5.5.4)
transitivePeerDependencies:
- '@babel/types'
- babel-plugin-macros
- supports-color
jest-diff@29.7.0:
dependencies:
chalk: 4.1.2
@@ -19237,7 +19069,7 @@ snapshots:
'@jest/environment': 29.7.0
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
'@types/node': 18.19.34
'@types/node': 22.5.3
jest-mock: 29.7.0
jest-util: 29.7.0
@@ -19247,7 +19079,7 @@ snapshots:
dependencies:
'@jest/types': 29.6.3
'@types/graceful-fs': 4.1.9
'@types/node': 18.19.34
'@types/node': 22.5.3
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.11(patch_hash=ivtm2a2cfr5pomcfbedhmr5v2q)
@@ -19286,7 +19118,7 @@ snapshots:
jest-mock@29.7.0:
dependencies:
'@jest/types': 29.6.3
'@types/node': 18.19.34
'@types/node': 22.5.3
jest-util: 29.7.0
jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
@@ -19321,7 +19153,7 @@ snapshots:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0(@babel/types@7.25.6)
'@jest/types': 29.6.3
'@types/node': 18.19.34
'@types/node': 22.5.3
chalk: 4.1.2
emittery: 0.13.1
graceful-fs: 4.2.11(patch_hash=ivtm2a2cfr5pomcfbedhmr5v2q)
@@ -19350,7 +19182,7 @@ snapshots:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0(@babel/types@7.25.6)
'@jest/types': 29.6.3
'@types/node': 18.19.34
'@types/node': 22.5.3
chalk: 4.1.2
cjs-module-lexer: 1.4.0
collect-v8-coverage: 1.0.2
@@ -19397,7 +19229,7 @@ snapshots:
jest-util@29.7.0:
dependencies:
'@jest/types': 29.6.3
'@types/node': 18.19.34
'@types/node': 22.5.3
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11(patch_hash=ivtm2a2cfr5pomcfbedhmr5v2q)
@@ -19416,7 +19248,7 @@ snapshots:
dependencies:
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
'@types/node': 18.19.34
'@types/node': 22.5.3
ansi-escapes: 4.3.2
chalk: 4.1.2
emittery: 0.13.1
@@ -19425,7 +19257,7 @@ snapshots:
jest-worker@29.7.0:
dependencies:
'@types/node': 18.19.34
'@types/node': 22.5.3
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -20039,7 +19871,7 @@ snapshots:
make-fetch-happen: 13.0.1
nopt: 7.2.1
proc-log: 4.2.0
semver: 7.6.2
semver: 7.6.3
tar: 6.2.1
which: 4.0.0
transitivePeerDependencies:
@@ -20343,7 +20175,7 @@ snapshots:
parse-npm-tarball-url@3.0.0:
dependencies:
semver: 7.6.2
semver: 7.6.3
parseurl@1.3.3: {}
@@ -20922,7 +20754,7 @@ snapshots:
semver-range-intersect@0.3.1:
dependencies:
'@types/semver': 6.2.7
semver: 7.6.2
semver: 7.6.3
semver-utils@1.1.4: {}
@@ -21826,7 +21658,7 @@ snapshots:
version-selector-type@3.0.0:
dependencies:
semver: 7.6.2
semver: 7.6.3
vfile-message@2.0.4:
dependencies:
@@ -21941,7 +21773,7 @@ snapshots:
wide-align@1.1.5:
dependencies:
string-width: 1.0.2
string-width: 4.2.3
optional: true
widest-line@3.1.0:

View File

@@ -4,6 +4,7 @@ packages:
- __typings__
- __utils__/*
- "!__utils__/build-artifacts"
- cache/*
- catalogs/*
- cli/*
- completion/*

View File

@@ -24,6 +24,7 @@
"devDependencies": {
"@pnpm/assert-project": "workspace:*",
"@pnpm/byline": "catalog:",
"@pnpm/cache.commands": "workspace:*",
"@pnpm/cli-meta": "workspace:*",
"@pnpm/cli-utils": "workspace:*",
"@pnpm/client": "workspace:*",
@@ -164,7 +165,7 @@
"start": "tsc --watch",
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"pretest:e2e": "rimraf node_modules/.bin/pnpm",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7776 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7777 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm compile && publish-packed --prune --npm-client=pnpm --dest=dist",
"postpublish": "publish-packed",

View File

@@ -1,3 +1,4 @@
import { cache } from '@pnpm/cache.commands'
import { type CompletionFunc } from '@pnpm/command'
import { types as allTypes } from '@pnpm/config'
import { audit } from '@pnpm/plugin-commands-audit'
@@ -107,6 +108,7 @@ const commands: CommandDefinition[] = [
add,
audit,
bin,
cache,
ci,
config,
dedupe,

View File

@@ -2,6 +2,7 @@ import fs from 'fs'
import path from 'path'
import { type LockfileV9 as Lockfile } from '@pnpm/lockfile.types'
import { prepare, preparePackages } from '@pnpm/prepare'
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
import { sync as readYamlFile } from 'read-yaml-file'
import loadJsonFile from 'load-json-file'
import { sync as writeYamlFile } from 'write-yaml-file'
@@ -646,7 +647,7 @@ test('preResolution hook', async () => {
expect(ctx.existsNonEmptyWantedLockfile).toBe(false)
expect(ctx.registries).toEqual({
default: 'http://localhost:7776/',
default: `http://localhost:${REGISTRY_MOCK_PORT}/`,
'@foo': 'https://foo.com/',
})
})

View File

@@ -24,6 +24,9 @@
{
"path": "../__utils__/test-ipc-server"
},
{
"path": "../cache/commands"
},
{
"path": "../cli/cli-meta"
},

View File

@@ -18,7 +18,7 @@
"scripts": {
"start": "tsc --watch",
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7777 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7778 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"

View File

@@ -14,7 +14,7 @@
"scripts": {
"start": "tsc --watch",
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7778 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7779 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"

View File

@@ -34,6 +34,7 @@
"@pnpm/logger": "^5.1.0"
},
"dependencies": {
"@pnpm/constants": "workspace:*",
"@pnpm/core-loggers": "workspace:*",
"@pnpm/error": "workspace:*",
"@pnpm/fetching-types": "workspace:*",

View File

@@ -1,4 +1,5 @@
import path from 'path'
import { FULL_META_DIR, FULL_FILTERED_META_DIR, META_DIR } from '@pnpm/constants'
import { PnpmError } from '@pnpm/error'
import {
type FetchFromRegistry,
@@ -55,13 +56,6 @@ export {
RegistryResponseError,
}
// This file contains meta information
// about all the packages published by the same name, not just the manifest
// of one package/version
const META_DIR = 'metadata'
const FULL_META_DIR = 'metadata-full'
const FULL_FILTERED_META_DIR = 'metadata-v1.1'
export interface ResolverFactoryOptions {
cacheDir: string
fullMetadata?: boolean

View File

@@ -21,6 +21,9 @@
{
"path": "../../network/fetching-types"
},
{
"path": "../../packages/constants"
},
{
"path": "../../packages/core-loggers"
},

View File

@@ -15,7 +15,7 @@
"test": "pnpm run compile && pnpm run _test",
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"prepublishOnly": "pnpm run compile",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7779 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7780 jest",
"compile": "tsc --build && pnpm run lint --fix"
},
"repository": "https://github.com/pnpm/pnpm/blob/main/reviewing/outdated",

View File

@@ -13,7 +13,7 @@
},
"scripts": {
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7780 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7781 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"

View File

@@ -13,7 +13,7 @@
},
"scripts": {
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7781 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7782 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"

View File

@@ -13,7 +13,7 @@
},
"scripts": {
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7782 jest",
"_test": "cross-env PNPM_REGISTRY_MOCK_PORT=7783 jest",
"test": "pnpm run compile && pnpm run _test",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"