mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-26 11:02:01 -04:00
87 lines
2.9 KiB
TypeScript
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
|
|
}
|