mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-24 01:51:41 -04:00
PR #1606 * feat: wip * refactor(filter-shrinkwrap): divide into several files * fix(filter-shrinkwrap): filterByImporters should skip skipped deps * fix: make package-is-installable synchronous * feat: implement filterByImportersAndEngine() * fix: headless install skips optional deps that are not installable close #1600 * fix: don't await for packageIsInstallable * fix: absolute dep path should be saved in skipped list * test(filter-shrinkwrap): more tests for filterByImportersAndEngine() * test: skipping optional dep when installing in subset of wpackages
91 lines
2.2 KiB
TypeScript
91 lines
2.2 KiB
TypeScript
import createFetcher from '@pnpm/default-fetcher'
|
|
import createResolver from '@pnpm/default-resolver'
|
|
import { HeadlessOptions } from '@pnpm/headless'
|
|
import createStore from '@pnpm/package-store'
|
|
import readManifests from '@pnpm/read-manifests'
|
|
import storePath from '@pnpm/store-path'
|
|
import path = require('path')
|
|
import tempy = require('tempy')
|
|
|
|
const registry = 'http://localhost:4873/'
|
|
|
|
const retryOpts = {
|
|
fetchRetries: 2,
|
|
fetchRetryFactor: 10,
|
|
fetchRetryMaxtimeout: 60_000,
|
|
fetchRetryMintimeout: 10_000,
|
|
}
|
|
|
|
export default async function testDefaults (
|
|
opts?: any, // tslint:disable-line
|
|
resolveOpts?: any, // tslint:disable-line
|
|
fetchOpts?: any, // tslint:disable-line
|
|
storeOpts?: any, // tslint:disable-line
|
|
): Promise<HeadlessOptions> {
|
|
let store = opts && opts.store || tempy.directory()
|
|
const shrinkwrapDirectory = opts && opts.shrinkwrapDirectory || process.cwd()
|
|
const manifests = await readManifests(
|
|
[
|
|
{
|
|
prefix: shrinkwrapDirectory,
|
|
},
|
|
],
|
|
shrinkwrapDirectory,
|
|
{
|
|
shamefullyFlatten: opts.shamefullyFlatten,
|
|
},
|
|
)
|
|
store = await storePath(shrinkwrapDirectory, store)
|
|
const rawNpmConfig = { registry }
|
|
const storeController = await createStore(
|
|
createResolver({
|
|
metaCache: new Map(),
|
|
rawNpmConfig,
|
|
store,
|
|
strictSsl: true,
|
|
...retryOpts,
|
|
...resolveOpts,
|
|
}),
|
|
createFetcher({
|
|
alwaysAuth: true,
|
|
rawNpmConfig,
|
|
registry,
|
|
...retryOpts,
|
|
...fetchOpts,
|
|
}) as {},
|
|
{
|
|
locks: path.join(store, '_locks'),
|
|
store,
|
|
...storeOpts,
|
|
},
|
|
)
|
|
return {
|
|
currentEngine: {
|
|
nodeVersion: process.version,
|
|
pnpmVersion: '2.0.0',
|
|
},
|
|
engineStrict: false,
|
|
force: false,
|
|
importers: manifests.importers,
|
|
include: manifests.include,
|
|
independentLeaves: false,
|
|
packageManager: {
|
|
name: 'pnpm',
|
|
version: '1.0.0',
|
|
},
|
|
pendingBuilds: manifests.pendingBuilds,
|
|
rawNpmConfig: {},
|
|
registries: manifests.registries || {
|
|
default: registry,
|
|
},
|
|
shrinkwrapDirectory,
|
|
sideEffectsCache: true,
|
|
skipped: new Set<string>(),
|
|
store,
|
|
storeController,
|
|
unsafePerm: true,
|
|
verifyStoreIntegrity: true,
|
|
...opts,
|
|
}
|
|
}
|