"use strict";
/**
 * Converts value to a number.
 * Drop-in replacement for lodash/toNumber.
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = toNumber;
const reTrimStart = /^\s+/;
const reTrimEnd = /\s+$/;
const reIsBinary = /^0b[01]+$/i;
const reIsOctal = /^0o[0-7]+$/i;
const reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
function toNumber(value) {
    if (typeof value === 'number') {
        return value;
    }
    if (typeof value === 'symbol') {
        return NaN;
    }
    if (typeof value === 'boolean') {
        return value ? 1 : 0;
    }
    if (value == null) {
        return value === undefined ? NaN : 0;
    }
    if (typeof value === 'string') {
        const trimmed = value.replace(reTrimStart, '').replace(reTrimEnd, '');
        if (reIsBinary.test(trimmed)) {
            return globalThis.parseInt(trimmed.slice(2), 2);
        }
        if (reIsOctal.test(trimmed)) {
            return globalThis.parseInt(trimmed.slice(2), 8);
        }
        if (reIsBadHex.test(trimmed)) {
            return NaN;
        }
        return +trimmed;
    }
    // Objects: try valueOf
    const other = typeof value.valueOf === 'function' ? value.valueOf() : value;
    return +other;
}
