{"version":3,"file":"compare.mjs","sources":["../../src/helpers/compare.ts"],"sourcesContent":["/** Whether the input is an array. */\nexport function isArray(input: any): input is []\n{\n    return Array.isArray(input);\n}\n\n/** Whether the input is a boolean. */\nexport function isBoolean(input: any): input is boolean\n{\n    return typeof input === 'boolean';\n}\n\n/** Whether the inputs are equal. */\nexport function isEqual(\n    inputA: any,\n    inputB: any,\n    options: {\n        arrays?: 'reference' | 'shallow',\n        objects?: 'reference' | 'shallow',\n        strict?: boolean,\n    } = {\n        arrays: 'reference',\n        objects: 'reference',\n        strict: true,\n    })\n{\n    const {\n        arrays,\n        objects,\n        strict,\n    } = options;\n\n    // If input types are incompatible, or one input is undefined\n    if (typeof inputA !== typeof inputB || !!inputA !== !!inputB)\n    {\n        return false;\n    }\n\n    // Atomic, just compare a against b\n    if (isString(inputA) || isNumber(inputA))\n    {\n        return inputA === inputB;\n    }\n\n    const isInputAAnObject = isObject(inputA);\n\n    if (isInputAAnObject && objects === 'reference')\n    {\n        return inputA === inputB;\n    }\n\n    const isInputAAnArray = isArray(inputA);\n\n    if (isInputAAnArray && arrays === 'reference')\n    {\n        return inputA === inputB;\n    }\n\n    // If we're dealing with either an array or object, we'll shallow compare first to see if they match\n    if ((isInputAAnArray || isInputAAnObject) && inputA === inputB)\n    {\n        return true;\n    }\n\n    // Last resort, go through keys\n    let key;\n\n    // Check if inputB has all the keys of inputA\n    for (key in inputA)\n    {\n        if (!(key in inputB))\n        {\n            return false;\n        }\n    }\n\n    let input = inputA;\n\n    if (strict)\n    {\n        input = inputB;\n    }\n\n    // Check if values between keys match\n    if (isInputAAnObject && arrays === 'shallow' && objects === 'shallow')\n    {\n        for (key in input)\n        {\n            const equalityCheckResult = isEqual(inputA[key], inputB[key], {\n                strict,\n                objects: 'reference',\n            });\n\n            if (!equalityCheckResult)\n            {\n                return false;\n            }\n        }\n    }\n    else\n    {\n        for (key in input)\n        {\n            if (inputA[key] !== inputB[key])\n            {\n                return false;\n            }\n        }\n    }\n\n    if (isUndefined(key))\n    {\n        if (isInputAAnArray && (inputA.length === 0) && (inputB.length === 0))\n        {\n            return true;\n        }\n\n        if (isInputAAnObject && Object.keys(inputA).length === 0 && Object.keys(inputB).length === 0)\n        {\n            return true;\n        }\n\n        if (inputA !== inputB)\n        {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n/** Whether the input is a function. */\nexport function isFunction(input: any): input is (...args: any) => any\n{\n    return typeof input === 'function';\n}\n\n/** Whether the input is null. */\nexport function isNull(input: any): input is null\n{\n    return input === null;\n}\n\n/** Whether the input is a number. */\nexport function isNumber(input: any): input is number\n{\n    return typeof input === 'number';\n}\n\n/** Whether the input is an object. */\nexport function isObject(input: any): input is Record<string, unknown>\n{\n    if (input !== Object(input))\n    {\n        return false;\n    }\n\n    if (isArray(input))\n    {\n        return false;\n    }\n\n    if (typeof input === 'function')\n    {\n        return false;\n    }\n\n    return true;\n}\n\n/** Whether the input is a string. */\nexport function isString(input: any): input is string\n{\n    return typeof input === 'string';\n}\n\n/** Whether the input is undefined. */\nexport function isUndefined(input: any): input is undefined\n{\n    // eslint-disable-next-line no-void\n    return input === void 0;\n}\n"],"names":[],"mappings":"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"}