mirror of
https://github.com/pnpm/pnpm.git
synced 2026-04-10 18:18:56 -04:00
test: create a helper package for creating a temp store for testing (#9343)
This commit is contained in:
5
.changeset/eleven-flowers-ring.md
Normal file
5
.changeset/eleven-flowers-ring.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@pnpm/testing.temp-store": major
|
||||
---
|
||||
|
||||
Initial release.
|
||||
5
.changeset/wet-tables-camp.md
Normal file
5
.changeset/wet-tables-camp.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@pnpm/package-store": minor
|
||||
---
|
||||
|
||||
Export `CreatePackageStoreOptions`.
|
||||
@@ -124,12 +124,10 @@
|
||||
"devDependencies": {
|
||||
"@pnpm/assert-project": "workspace:*",
|
||||
"@pnpm/assert-store": "workspace:*",
|
||||
"@pnpm/client": "workspace:*",
|
||||
"@pnpm/core": "workspace:*",
|
||||
"@pnpm/git-utils": "workspace:*",
|
||||
"@pnpm/lockfile.types": "workspace:*",
|
||||
"@pnpm/logger": "workspace:*",
|
||||
"@pnpm/package-store": "workspace:*",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/read-package-json": "workspace:*",
|
||||
"@pnpm/registry-mock": "catalog:",
|
||||
@@ -137,6 +135,7 @@
|
||||
"@pnpm/store.cafs": "workspace:*",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@pnpm/test-ipc-server": "workspace:*",
|
||||
"@pnpm/testing.temp-store": "workspace:*",
|
||||
"@types/fs-extra": "catalog:",
|
||||
"@types/is-windows": "catalog:",
|
||||
"@types/normalize-path": "catalog:",
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import * as path from 'path'
|
||||
import { createClient } from '@pnpm/client'
|
||||
import { createPackageStore } from '@pnpm/package-store'
|
||||
import { createTempStore } from '@pnpm/testing.temp-store'
|
||||
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
|
||||
import { type StoreController } from '@pnpm/store-controller-types'
|
||||
import { type Registries } from '@pnpm/types'
|
||||
@@ -8,13 +6,6 @@ import { type InstallOptions } from '@pnpm/core'
|
||||
|
||||
const registry = `http://localhost:${REGISTRY_MOCK_PORT}/`
|
||||
|
||||
const retryOpts = {
|
||||
retries: 4,
|
||||
retryFactor: 10,
|
||||
retryMaxtimeout: 60_000,
|
||||
retryMintimeout: 10_000,
|
||||
}
|
||||
|
||||
export function testDefaults<T> (
|
||||
opts?: T & {
|
||||
fastUnpack?: boolean
|
||||
@@ -32,28 +23,14 @@ export function testDefaults<T> (
|
||||
storeDir: string
|
||||
} &
|
||||
T {
|
||||
const authConfig = { registry }
|
||||
const cacheDir = path.resolve('cache')
|
||||
const { resolve, fetchers, clearResolutionCache } = createClient({
|
||||
authConfig,
|
||||
rawConfig: {},
|
||||
retry: retryOpts,
|
||||
cacheDir,
|
||||
...resolveOpts,
|
||||
...fetchOpts,
|
||||
const { storeController, storeDir, cacheDir } = createTempStore({
|
||||
...opts,
|
||||
clientOptions: {
|
||||
...resolveOpts,
|
||||
...fetchOpts,
|
||||
},
|
||||
storeOptions: storeOpts,
|
||||
})
|
||||
const storeDir = opts?.storeDir ?? path.resolve('.store')
|
||||
const storeController = createPackageStore(
|
||||
resolve,
|
||||
fetchers,
|
||||
{
|
||||
ignoreFile: opts?.fastUnpack === false ? undefined : (filename) => filename !== 'package.json',
|
||||
storeDir,
|
||||
verifyStoreIntegrity: true,
|
||||
clearResolutionCache,
|
||||
...storeOpts,
|
||||
}
|
||||
)
|
||||
const result = {
|
||||
cacheDir,
|
||||
neverBuiltDependencies: [] as string[],
|
||||
|
||||
@@ -144,9 +144,6 @@
|
||||
{
|
||||
"path": "../../store/cafs"
|
||||
},
|
||||
{
|
||||
"path": "../../store/package-store"
|
||||
},
|
||||
{
|
||||
"path": "../../store/store-controller-types"
|
||||
},
|
||||
@@ -154,10 +151,10 @@
|
||||
"path": "../../store/store-path"
|
||||
},
|
||||
{
|
||||
"path": "../../worker"
|
||||
"path": "../../testing/temp-store"
|
||||
},
|
||||
{
|
||||
"path": "../client"
|
||||
"path": "../../worker"
|
||||
},
|
||||
{
|
||||
"path": "../direct-dep-linker"
|
||||
|
||||
@@ -78,11 +78,9 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@pnpm/assert-project": "workspace:*",
|
||||
"@pnpm/client": "workspace:*",
|
||||
"@pnpm/crypto.object-hasher": "workspace:*",
|
||||
"@pnpm/headless": "workspace:*",
|
||||
"@pnpm/logger": "workspace:*",
|
||||
"@pnpm/package-store": "workspace:*",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/read-projects-context": "workspace:*",
|
||||
"@pnpm/registry-mock": "catalog:",
|
||||
@@ -90,6 +88,7 @@
|
||||
"@pnpm/store.cafs": "workspace:*",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@pnpm/test-ipc-server": "workspace:*",
|
||||
"@pnpm/testing.temp-store": "workspace:*",
|
||||
"@types/fs-extra": "catalog:",
|
||||
"@types/ramda": "catalog:",
|
||||
"@types/rimraf": "catalog:",
|
||||
|
||||
@@ -1,22 +1,14 @@
|
||||
import path from 'path'
|
||||
import { createClient } from '@pnpm/client'
|
||||
import { type HeadlessOptions } from '@pnpm/headless'
|
||||
import { createPackageStore } from '@pnpm/package-store'
|
||||
import { safeReadPackageJsonFromDir } from '@pnpm/read-package-json'
|
||||
import { readProjectsContext } from '@pnpm/read-projects-context'
|
||||
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
|
||||
import { getStorePath } from '@pnpm/store-path'
|
||||
import { createTempStore } from '@pnpm/testing.temp-store'
|
||||
import tempy from 'tempy'
|
||||
|
||||
const registry = `http://localhost:${REGISTRY_MOCK_PORT}/`
|
||||
|
||||
const retryOpts = {
|
||||
factor: 10,
|
||||
retries: 2,
|
||||
retryMaxtimeout: 60_000,
|
||||
retryMintimeout: 10_000,
|
||||
}
|
||||
|
||||
export async function testDefaults (
|
||||
opts?: any, // eslint-disable-line
|
||||
resolveOpts?: any, // eslint-disable-line
|
||||
@@ -25,7 +17,6 @@ export async function testDefaults (
|
||||
): Promise<HeadlessOptions> {
|
||||
const tmp = tempy.directory()
|
||||
let storeDir = opts?.storeDir ?? path.join(tmp, 'store')
|
||||
const cacheDir = path.join(tmp, 'cache')
|
||||
const lockfileDir = opts?.lockfileDir ?? process.cwd()
|
||||
const { include, pendingBuilds, projects } = await readProjectsContext(
|
||||
opts.projects
|
||||
@@ -42,22 +33,14 @@ export async function testDefaults (
|
||||
storePath: storeDir,
|
||||
pnpmHomeDir: '',
|
||||
})
|
||||
const authConfig = { registry }
|
||||
const { resolve, fetchers, clearResolutionCache } = createClient({
|
||||
authConfig,
|
||||
rawConfig: {},
|
||||
retry: retryOpts,
|
||||
cacheDir,
|
||||
...resolveOpts,
|
||||
...fetchOpts,
|
||||
})
|
||||
const storeController = createPackageStore(
|
||||
resolve,
|
||||
fetchers,
|
||||
const { storeController } = createTempStore(
|
||||
{
|
||||
storeDir,
|
||||
clearResolutionCache,
|
||||
...storeOpts,
|
||||
clientOptions: {
|
||||
...resolveOpts,
|
||||
...fetchOpts,
|
||||
},
|
||||
storeOptions: storeOpts,
|
||||
}
|
||||
)
|
||||
return {
|
||||
|
||||
@@ -84,9 +84,6 @@
|
||||
{
|
||||
"path": "../../store/cafs"
|
||||
},
|
||||
{
|
||||
"path": "../../store/package-store"
|
||||
},
|
||||
{
|
||||
"path": "../../store/store-controller-types"
|
||||
},
|
||||
@@ -94,10 +91,10 @@
|
||||
"path": "../../store/store-path"
|
||||
},
|
||||
{
|
||||
"path": "../../worker"
|
||||
"path": "../../testing/temp-store"
|
||||
},
|
||||
{
|
||||
"path": "../client"
|
||||
"path": "../../worker"
|
||||
},
|
||||
{
|
||||
"path": "../direct-dep-linker"
|
||||
|
||||
37
pnpm-lock.yaml
generated
37
pnpm-lock.yaml
generated
@@ -4614,9 +4614,6 @@ importers:
|
||||
'@pnpm/assert-store':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/assert-store
|
||||
'@pnpm/client':
|
||||
specifier: workspace:*
|
||||
version: link:../client
|
||||
'@pnpm/core':
|
||||
specifier: workspace:*
|
||||
version: 'link:'
|
||||
@@ -4629,9 +4626,6 @@ importers:
|
||||
'@pnpm/logger':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/logger
|
||||
'@pnpm/package-store':
|
||||
specifier: workspace:*
|
||||
version: link:../../store/package-store
|
||||
'@pnpm/prepare':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/prepare
|
||||
@@ -4653,6 +4647,9 @@ importers:
|
||||
'@pnpm/test-ipc-server':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/test-ipc-server
|
||||
'@pnpm/testing.temp-store':
|
||||
specifier: workspace:*
|
||||
version: link:../../testing/temp-store
|
||||
'@types/fs-extra':
|
||||
specifier: 'catalog:'
|
||||
version: 9.0.13
|
||||
@@ -4893,9 +4890,6 @@ importers:
|
||||
'@pnpm/assert-project':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/assert-project
|
||||
'@pnpm/client':
|
||||
specifier: workspace:*
|
||||
version: link:../client
|
||||
'@pnpm/crypto.object-hasher':
|
||||
specifier: workspace:*
|
||||
version: link:../../crypto/object-hasher
|
||||
@@ -4905,9 +4899,6 @@ importers:
|
||||
'@pnpm/logger':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/logger
|
||||
'@pnpm/package-store':
|
||||
specifier: workspace:*
|
||||
version: link:../../store/package-store
|
||||
'@pnpm/prepare':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/prepare
|
||||
@@ -4929,6 +4920,9 @@ importers:
|
||||
'@pnpm/test-ipc-server':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/test-ipc-server
|
||||
'@pnpm/testing.temp-store':
|
||||
specifier: workspace:*
|
||||
version: link:../../testing/temp-store
|
||||
'@types/fs-extra':
|
||||
specifier: 'catalog:'
|
||||
version: 9.0.13
|
||||
@@ -7877,6 +7871,25 @@ importers:
|
||||
specifier: 'catalog:'
|
||||
version: 3.0.2
|
||||
|
||||
testing/temp-store:
|
||||
dependencies:
|
||||
'@pnpm/client':
|
||||
specifier: workspace:*
|
||||
version: link:../../pkg-manager/client
|
||||
'@pnpm/package-store':
|
||||
specifier: workspace:*
|
||||
version: link:../../store/package-store
|
||||
'@pnpm/registry-mock':
|
||||
specifier: 'catalog:'
|
||||
version: 4.2.0(encoding@0.1.13)(typanion@3.14.0)
|
||||
'@pnpm/store-controller-types':
|
||||
specifier: workspace:*
|
||||
version: link:../../store/store-controller-types
|
||||
devDependencies:
|
||||
'@pnpm/testing.temp-store':
|
||||
specifier: workspace:*
|
||||
version: 'link:'
|
||||
|
||||
text/comments-parser:
|
||||
dependencies:
|
||||
strip-comments-strings:
|
||||
|
||||
@@ -43,6 +43,7 @@ packages:
|
||||
- patching/*
|
||||
- pnpm
|
||||
- pnpm/dev
|
||||
- testing/*
|
||||
- tools/*
|
||||
- worker
|
||||
- pnpm/artifacts/*
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
export { createPackageStore, type CafsLocker } from './storeController'
|
||||
export { createPackageStore, type CafsLocker, type CreatePackageStoreOptions } from './storeController'
|
||||
|
||||
export * from '@pnpm/store-controller-types'
|
||||
|
||||
@@ -13,26 +13,28 @@ import { prune } from './prune'
|
||||
|
||||
export { type CafsLocker }
|
||||
|
||||
export interface CreatePackageStoreOptions {
|
||||
cafsLocker?: CafsLocker
|
||||
engineStrict?: boolean
|
||||
force?: boolean
|
||||
nodeVersion?: string
|
||||
importPackage?: ImportIndexedPackageAsync
|
||||
pnpmVersion?: string
|
||||
ignoreFile?: (filename: string) => boolean
|
||||
cacheDir: string
|
||||
storeDir: string
|
||||
networkConcurrency?: number
|
||||
packageImportMethod?: 'auto' | 'hardlink' | 'copy' | 'clone' | 'clone-or-copy'
|
||||
verifyStoreIntegrity: boolean
|
||||
virtualStoreDirMaxLength: number
|
||||
strictStorePkgContentCheck?: boolean
|
||||
clearResolutionCache: () => void
|
||||
}
|
||||
|
||||
export function createPackageStore (
|
||||
resolve: ResolveFunction,
|
||||
fetchers: Fetchers,
|
||||
initOpts: {
|
||||
cafsLocker?: CafsLocker
|
||||
engineStrict?: boolean
|
||||
force?: boolean
|
||||
nodeVersion?: string
|
||||
importPackage?: ImportIndexedPackageAsync
|
||||
pnpmVersion?: string
|
||||
ignoreFile?: (filename: string) => boolean
|
||||
cacheDir: string
|
||||
storeDir: string
|
||||
networkConcurrency?: number
|
||||
packageImportMethod?: 'auto' | 'hardlink' | 'copy' | 'clone' | 'clone-or-copy'
|
||||
verifyStoreIntegrity: boolean
|
||||
virtualStoreDirMaxLength: number
|
||||
strictStorePkgContentCheck?: boolean
|
||||
clearResolutionCache: () => void
|
||||
}
|
||||
initOpts: CreatePackageStoreOptions
|
||||
): StoreController {
|
||||
const storeDir = initOpts.storeDir
|
||||
if (!fs.existsSync(path.join(storeDir, 'files'))) {
|
||||
|
||||
13
testing/temp-store/README.md
Normal file
13
testing/temp-store/README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# @pnpm/testing.temp-store
|
||||
|
||||
> A temporary store for testing purposes
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
pnpm add @pnpm/testing.temp-store
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
48
testing/temp-store/package.json
Normal file
48
testing/temp-store/package.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "@pnpm/testing.temp-store",
|
||||
"version": "1000.0.0-0",
|
||||
"description": "A temporary store for testing purposes",
|
||||
"keywords": [
|
||||
"pnpm",
|
||||
"pnpm10",
|
||||
"store"
|
||||
],
|
||||
"license": "MIT",
|
||||
"funding": "https://opencollective.com/pnpm",
|
||||
"repository": "https://github.com/pnpm/pnpm/blob/main/testing/temp-store",
|
||||
"homepage": "https://github.com/pnpm/pnpm/blob/main/testing/temp-store#readme",
|
||||
"bugs": {
|
||||
"url": "https://github.com/pnpm/pnpm/issues"
|
||||
},
|
||||
"main": "lib/index.js",
|
||||
"types": "lib/index.d.ts",
|
||||
"exports": {
|
||||
".": "./lib/index.js"
|
||||
},
|
||||
"files": [
|
||||
"lib",
|
||||
"!*.map"
|
||||
],
|
||||
"scripts": {
|
||||
"prepublishOnly": "pnpm run compile",
|
||||
"lint": "eslint \"src/**/*.ts\"",
|
||||
"test": "pnpm run compile",
|
||||
"start": "tsc --watch",
|
||||
"compile": "tsc --build && pnpm run lint --fix"
|
||||
},
|
||||
"dependencies": {
|
||||
"@pnpm/client": "workspace:*",
|
||||
"@pnpm/package-store": "workspace:*",
|
||||
"@pnpm/registry-mock": "catalog:",
|
||||
"@pnpm/store-controller-types": "workspace:*"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@pnpm/testing.temp-store": "workspace:*"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.12"
|
||||
},
|
||||
"jest": {
|
||||
"preset": "@pnpm/jest-config"
|
||||
}
|
||||
}
|
||||
54
testing/temp-store/src/index.ts
Normal file
54
testing/temp-store/src/index.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import * as path from 'path'
|
||||
import { type ClientOptions, createClient } from '@pnpm/client'
|
||||
import { createPackageStore, type CreatePackageStoreOptions } from '@pnpm/package-store'
|
||||
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
|
||||
import { type StoreController } from '@pnpm/store-controller-types'
|
||||
|
||||
const registry = `http://localhost:${REGISTRY_MOCK_PORT}/`
|
||||
|
||||
export interface CreateTempStoreResult {
|
||||
storeController: StoreController
|
||||
storeDir: string
|
||||
cacheDir: string
|
||||
}
|
||||
|
||||
export function createTempStore (opts?: {
|
||||
fastUnpack?: boolean
|
||||
storeDir?: string
|
||||
clientOptions?: ClientOptions
|
||||
storeOptions?: CreatePackageStoreOptions
|
||||
}): CreateTempStoreResult {
|
||||
const authConfig = { registry }
|
||||
const cacheDir = path.resolve('cache')
|
||||
const { resolve, fetchers, clearResolutionCache } = createClient({
|
||||
authConfig,
|
||||
rawConfig: {},
|
||||
retry: {
|
||||
retries: 4,
|
||||
factor: 10,
|
||||
maxTimeout: 60_000,
|
||||
minTimeout: 10_000,
|
||||
},
|
||||
cacheDir,
|
||||
...opts?.clientOptions,
|
||||
})
|
||||
const storeDir = opts?.storeDir ?? path.resolve('.store')
|
||||
const storeController = createPackageStore(
|
||||
resolve,
|
||||
fetchers,
|
||||
{
|
||||
cacheDir,
|
||||
ignoreFile: opts?.fastUnpack === false ? undefined : (filename) => filename !== 'package.json',
|
||||
storeDir,
|
||||
verifyStoreIntegrity: true,
|
||||
virtualStoreDirMaxLength: process.platform === 'win32' ? 60 : 120,
|
||||
clearResolutionCache,
|
||||
...opts?.storeOptions,
|
||||
}
|
||||
)
|
||||
return {
|
||||
storeController,
|
||||
storeDir,
|
||||
cacheDir,
|
||||
}
|
||||
}
|
||||
22
testing/temp-store/tsconfig.json
Normal file
22
testing/temp-store/tsconfig.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"extends": "@pnpm/tsconfig",
|
||||
"compilerOptions": {
|
||||
"outDir": "lib",
|
||||
"rootDir": "src"
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts",
|
||||
"../../__typings__/**/*.d.ts"
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "../../pkg-manager/client"
|
||||
},
|
||||
{
|
||||
"path": "../../store/package-store"
|
||||
},
|
||||
{
|
||||
"path": "../../store/store-controller-types"
|
||||
}
|
||||
]
|
||||
}
|
||||
8
testing/temp-store/tsconfig.lint.json
Normal file
8
testing/temp-store/tsconfig.lint.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"include": [
|
||||
"src/**/*.ts",
|
||||
"test/**/*.ts",
|
||||
"../../__typings__/**/*.d.ts"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user