"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("@pnpm/utils");
const path = require("path");
const pnpmPkgJson_1 = require("../pnpmPkgJson");
const defaults = async (opts) => {
    const packageManager = opts.packageManager || {
        name: pnpmPkgJson_1.default.name,
        version: pnpmPkgJson_1.default.version,
    };
    const prefix = opts.prefix || process.cwd();
    const lockfileDirectory = opts.lockfileDirectory || prefix;
    return {
        bin: path.join(prefix, 'node_modules', '.bin'),
        childConcurrency: 5,
        development: true,
        force: false,
        forceSharedLockfile: false,
        independentLeaves: false,
        lockfileDirectory,
        optional: true,
        packageManager,
        pending: false,
        prefix,
        production: true,
        rawNpmConfig: {},
        registries: utils_1.DEFAULT_REGISTRIES,
        shamefullyFlatten: false,
        sideEffectsCacheRead: false,
        store: opts.store,
        unsafePerm: process.platform === 'win32' ||
            process.platform === 'cygwin' ||
            !(process.getuid && process.setuid &&
                process.getgid && process.setgid) ||
            process.getuid() !== 0,
        useLockfile: true,
        userAgent: `${packageManager.name}/${packageManager.version} npm/? node/${process.version} ${process.platform} ${process.arch}`,
    };
};
exports.default = async (opts) => {
    if (opts) {
        for (const key in opts) {
            if (opts[key] === undefined) {
                delete opts[key];
            }
        }
    }
    const defaultOpts = await defaults(opts);
    const extendedOpts = Object.assign({}, defaultOpts, opts, { store: defaultOpts.store });
    extendedOpts.registries = utils_1.normalizeRegistries(extendedOpts.registries);
    return extendedOpts;
};
