Files
pnpm/packages/headless/test/utils/testDefaults.ts
Zoltan Kochan d7d0ecb91d fix: headless install should skip optional deps that are not installable
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
2019-01-15 21:50:06 +02:00

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,
}
}