"use strict";
/**
 * Gets the value at path of object. If the resolved value is undefined,
 * the defaultValue is returned in its place.
 * Drop-in replacement for lodash/get.
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = get;
const rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
function toPath(path) {
    if (Array.isArray(path)) {
        return path;
    }
    const result = [];
    const str = String(path);
    str.replace(rePropName, (match, number, quote, subString) => {
        result.push(quote ? subString.replace(/\\(\\)?/g, '$1') : number || match);
        return match;
    });
    return result;
}
function get(object, path, defaultValue) {
    if (typeof path === 'string' && path === '') {
        return defaultValue;
    }
    const keys = toPath(path);
    if (keys.length === 0) {
        return defaultValue;
    }
    let result = object;
    for (const key of keys) {
        if (result == null) {
            return defaultValue;
        }
        result = result[key];
    }
    return result === undefined ? defaultValue : result;
}
