import { isTypedArray } from "./typed/isTypedArray.js";

/**
 *
 * @param {object} o
 * @returns {boolean}
 */
export function isArrayLike(o) {
    if (Array.isArray(o)) {
        return true;
    }

    if (typeof o !== "object") {
        return false;
    }

    if (o === null) {
        return false;
    }

    if (isTypedArray(o)) {
        return true;
    }

    const len = o.length;

    // we're expecting valid length property
    if (typeof len !== "number" && !Number.isInteger(len) || len < 0) {
        return false;
    }

    // assume array-like
    return true;
}