Files
pnpm/src/api/extendOptions.ts
zkochan 69d5bb4dd6 refactor: use @pnpm/logger instead of pnpm-logger
BREAKING CHANGE: peer dependencies updated
2017-11-10 22:01:23 +02:00

87 lines
2.9 KiB
TypeScript

import {StrictPnpmOptions, PnpmOptions} from '../types'
import path = require('path')
import logger from '@pnpm/logger'
import pnpmPkgJson from '../pnpmPkgJson'
import {LAYOUT_VERSION} from '../fs/modulesController'
import normalizeRegistryUrl = require('normalize-registry-url')
import {resolveStore} from 'package-store'
const defaults = async (opts: PnpmOptions) => {
const packageManager = opts.packageManager || {
name: pnpmPkgJson.name,
version: pnpmPkgJson.version,
}
const prefix = opts.prefix || process.cwd()
const store = await resolveStore(opts.store, prefix)
return <StrictPnpmOptions>{
fetchRetries: 2,
fetchRetryFactor: 10,
fetchRetryMintimeout: 1e4, // 10 seconds
fetchRetryMaxtimeout: 6e4, // 1 minute
store,
locks: path.join(store, '_locks'),
ignoreScripts: false,
strictSsl: true,
tag: 'latest',
production: true,
development: true,
bin: path.join(prefix, 'node_modules', '.bin'),
prefix,
nodeVersion: process.version,
force: false,
depth: 0,
engineStrict: false,
metaCache: new Map(),
networkConcurrency: 16,
fetchingConcurrency: 16,
lockStaleDuration: 60 * 1000, // 1 minute
lock: true,
childConcurrency: 5,
offline: false,
registry: 'https://registry.npmjs.org/',
userAgent: `${packageManager.name}/${packageManager.version} npm/? node/${process.version} ${process.platform} ${process.arch}`,
rawNpmConfig: {},
alwaysAuth: false,
update: false,
repeatInstallDepth: -1,
optional: typeof opts.production === 'boolean' ? opts.production : true,
independentLeaves: false,
packageManager,
verifyStoreIntegrity: true,
hooks: {},
savePrefix: '^',
}
}
export default async (opts?: PnpmOptions): Promise<StrictPnpmOptions> => {
opts = opts || {}
if (opts) {
for (const key in opts) {
if (opts[key] === undefined) {
delete opts[key]
}
}
}
if (opts.storePath && !opts.store) {
logger.warn('the `store-path` config is deprecated. Use `store` instead.')
opts.store = opts.storePath
}
const defaultOpts = await defaults(opts)
const extendedOpts = Object.assign({}, defaultOpts, opts, {store: defaultOpts.store})
if (extendedOpts.force) {
logger.warn('using --force I sure hope you know what you are doing')
}
if (extendedOpts.lock === false) {
logger.warn('using --no-lock I sure hope you know what you are doing')
}
if (extendedOpts.userAgent.startsWith('npm/')) {
extendedOpts.userAgent = `${extendedOpts.packageManager.name}/${extendedOpts.packageManager.version} ${extendedOpts.userAgent}`
}
extendedOpts.registry = normalizeRegistryUrl(extendedOpts.registry)
if (extendedOpts.global) {
const subfolder = LAYOUT_VERSION.toString() + (extendedOpts.independentLeaves ? '_independent_leaves' : '')
extendedOpts.prefix = path.join(extendedOpts.prefix, subfolder)
}
return extendedOpts
}