import * as path from 'path' import { createClient } from '@pnpm/client' import { createPackageStore } from '@pnpm/package-store' import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock' import { type StoreController } from '@pnpm/store-controller-types' import { type Registries } from '@pnpm/types' 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 ( opts?: T & { fastUnpack?: boolean storeDir?: string prefix?: string }, resolveOpts?: any, // eslint-disable-line fetchOpts?: any, // eslint-disable-line storeOpts?: any // eslint-disable-line ): InstallOptions & { cacheDir: string registries: Registries storeController: StoreController storeDir: string } & T { const authConfig = { registry } const cacheDir = path.resolve('cache') const { resolve, fetchers, clearResolutionCache } = createClient({ authConfig, rawConfig: {}, retry: retryOpts, cacheDir, ...resolveOpts, ...fetchOpts, }) 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, registries: { default: registry, }, storeController, storeDir, ...opts, } as ( InstallOptions & { cacheDir: string registries: Registries storeController: StoreController storeDir: string } & T ) return result }