"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", { value: true });
const normalizeRegistryUrl = require("normalize-registry-url");
const path = require("path");
function extendOptions(opts) {
    return __awaiter(this, void 0, void 0, function* () {
        if (opts) {
            for (const key in opts) {
                if (opts[key] === undefined) {
                    delete opts[key];
                }
            }
        }
        const defaultOpts = yield defaults(opts);
        const extendedOpts = Object.assign({}, defaultOpts, opts, { store: defaultOpts.store });
        extendedOpts.registry = normalizeRegistryUrl(extendedOpts.registry);
        return extendedOpts;
    });
}
exports.extendOptions = extendOptions;
function defaults(opts) {
    return __awaiter(this, void 0, void 0, function* () {
        const prefix = opts.prefix || process.cwd();
        return {
            bin: path.join(prefix, 'node_modules', '.bin'),
            force: false,
            independentLeaves: false,
            prefix,
            registry: 'https://registry.npmjs.org/',
            shamefullyFlatten: false,
            shrinkwrapDirectory: opts.shrinkwrapDirectory || prefix,
            shrinkwrap: true,
            store: opts.store,
            storeController: opts.storeController,
        };
    });
}
//# sourceMappingURL=options.js.map