333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../../src/util/OrmUtils.ts"],"names":[],"mappings":"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","file":"OrmUtils.js","sourcesContent":["import { ObjectLiteral } from \"../common/ObjectLiteral\";\n\nexport class OrmUtils {\n\n    // -------------------------------------------------------------------------\n    // Public methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Chunks array into peaces.\n     */\n    static chunk<T>(array: T[], size: number): T[][] {\n        return Array.from(Array(Math.ceil(array.length / size)), (_, i) => {\n            return array.slice(i * size, i * size + size);\n        });\n    }\n\n    static splitClassesAndStrings<T>(clsesAndStrings: (string | T)[]): [T[], string[]] {\n        return [\n            (clsesAndStrings).filter((cls): cls is T => typeof cls !== \"string\"),\n            (clsesAndStrings).filter((str): str is string => typeof str === \"string\"),\n        ];\n    }\n\n    static groupBy<T, R>(array: T[], propertyCallback: (item: T) => R): { id: R, items: T[] }[] {\n        return array.reduce((groupedArray, value) => {\n            const key = propertyCallback(value);\n            let grouped = groupedArray.find(i => i.id === key);\n            if (!grouped) {\n                grouped = { id: key, items: [] };\n                groupedArray.push(grouped);\n            }\n            grouped.items.push(value);\n            return groupedArray;\n        }, [] as Array<{ id: R, items: T[] }>);\n    }\n\n    static uniq<T>(array: T[], criteria?: (item: T) => any): T[];\n    static uniq<T, K extends keyof T>(array: T[], property: K): T[];\n    static uniq<T, K extends keyof T>(array: T[], criteriaOrProperty?: ((item: T) => any) | K): T[] {\n        return array.reduce((uniqueArray, item) => {\n            let found: boolean = false;\n            if (criteriaOrProperty instanceof Function) {\n                const itemValue = criteriaOrProperty(item);\n                found = !!uniqueArray.find(uniqueItem => criteriaOrProperty(uniqueItem) === itemValue);\n\n            } else if (typeof criteriaOrProperty === \"string\") {\n                found = !!uniqueArray.find(uniqueItem => uniqueItem[criteriaOrProperty] === item[criteriaOrProperty]);\n\n            } else {\n                found = uniqueArray.indexOf(item) !== -1;\n            }\n\n            if (!found)\n                uniqueArray.push(item);\n\n            return uniqueArray;\n        }, [] as T[]);\n    }\n\n    static isObject(item: any) {\n        return (item && typeof item === \"object\" && !Array.isArray(item));\n    }\n\n    /**\n     * Deep Object.assign.\n     *\n     * @see http://stackoverflow.com/a/34749873\n     */\n    static mergeDeep(target: any, ...sources: any[]): any {\n        if (!sources.length) return target;\n        const source = sources.shift();\n\n        if (this.isObject(target) && this.isObject(source)) {\n            for (const key in source) {\n                let propertyKey = key;\n                if (source[key] instanceof Promise)\n                    continue;\n\n                // if (source[key] instanceof Promise) {\n                //     propertyKey = \"__\" + key + \"__\";\n                // }\n\n                if (this.isObject(source[propertyKey])\n                    && !(source[propertyKey] instanceof Map)\n                    && !(source[propertyKey] instanceof Set)\n                    && !(source[propertyKey] instanceof Date)\n                    && !(source[propertyKey] instanceof Buffer)) {\n                    if (!target[key]) Object.assign(target, { [key]: Object.create(Object.getPrototypeOf(source[propertyKey])) });\n                    this.mergeDeep(target[key], source[propertyKey]);\n                } else {\n                    Object.assign(target, { [key]: source[propertyKey] });\n                }\n            }\n        }\n\n        return this.mergeDeep(target, ...sources);\n    }\n\n    /**\n     * Deep compare objects.\n     *\n     * @see http://stackoverflow.com/a/1144249\n     */\n    static deepCompare(...args: any[]) {\n        let i: any, l: any, leftChain: any, rightChain: any;\n\n        if (arguments.length < 1) {\n            return true; // Die silently? Don't know how to handle such case, please help...\n            // throw \"Need two or more arguments to compare\";\n        }\n\n        for (i = 1, l = arguments.length; i < l; i++) {\n\n            leftChain = []; // Todo: this can be cached\n            rightChain = [];\n\n            if (!this.compare2Objects(leftChain, rightChain, arguments[0], arguments[i])) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Transforms given value into boolean value.\n     */\n    static toBoolean(value: any): boolean {\n        if (typeof value === \"boolean\")\n            return value;\n\n        if (typeof value === \"string\")\n            return value === \"true\" || value === \"1\";\n\n        if (typeof value === \"number\")\n            return value > 0;\n\n        return false;\n    }\n\n    /**\n     * Composes an object from the given array of keys and values.\n     */\n    static zipObject(keys: any[], values: any[]): ObjectLiteral {\n        return keys.reduce((object, column, index) => {\n            object[column] = values[index];\n            return object;\n        }, {} as ObjectLiteral);\n    }\n\n    /**\n     * Compares two arrays.\n     */\n    static isArraysEqual(arr1: any[], arr2: any[]): boolean {\n        if (arr1.length !== arr2.length) return false;\n        return arr1.every(element => {\n            return arr2.indexOf(element) !== -1;\n        });\n    }\n\n    // -------------------------------------------------------------------------\n    // Private methods\n    // -------------------------------------------------------------------------\n\n    private static compare2Objects(leftChain: any, rightChain: any, x: any, y: any) {\n        let p;\n\n        // remember that NaN === NaN returns false\n        // and isNaN(undefined) returns true\n        if (isNaN(x) && isNaN(y) && typeof x === \"number\" && typeof y === \"number\")\n            return true;\n\n        // Compare primitives and functions.\n        // Check if both arguments link to the same object.\n        // Especially useful on the step where we compare prototypes\n        if (x === y)\n            return true;\n\n        // Unequal, but either is null or undefined (use case: jsonb comparasion)\n        // PR #3776, todo: add tests\n        if (x === null || y === null || x === undefined || y === undefined)\n          return false;\n\n        // Fix the buffer compare bug.\n        // See: https://github.com/typeorm/typeorm/issues/3654\n        if ((typeof x.equals === \"function\" || x.equals instanceof Function) && x.equals(y))\n            return true;\n\n        // Works in case when functions are created in constructor.\n        // Comparing dates is a common scenario. Another built-ins?\n        // We can even handle functions passed across iframes\n        if ((typeof x === \"function\" && typeof y === \"function\") ||\n            (x instanceof Date && y instanceof Date) ||\n            (x instanceof RegExp && y instanceof RegExp) ||\n            (x instanceof String && y instanceof String) ||\n            (x instanceof Number && y instanceof Number))\n            return x.toString() === y.toString();\n\n        // At last checking prototypes as good as we can\n        if (!(x instanceof Object && y instanceof Object))\n            return false;\n\n        if (x.isPrototypeOf(y) || y.isPrototypeOf(x))\n            return false;\n\n        if (x.constructor !== y.constructor)\n            return false;\n\n        if (x.prototype !== y.prototype)\n            return false;\n\n        // Check for infinitive linking loops\n        if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1)\n            return false;\n\n        // Quick checking of one object being a subset of another.\n        // todo: cache the structure of arguments[0] for performance\n        for (p in y) {\n            if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n                return false;\n            }\n            else if (typeof y[p] !== typeof x[p]) {\n                return false;\n            }\n        }\n\n        for (p in x) {\n            if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n                return false;\n            }\n            else if (typeof y[p] !== typeof x[p]) {\n                return false;\n            }\n\n            switch (typeof (x[p])) {\n                case \"object\":\n                case \"function\":\n\n                    leftChain.push(x);\n                    rightChain.push(y);\n\n                    if (!this.compare2Objects(leftChain, rightChain, x[p], y[p])) {\n                        return false;\n                    }\n\n                    leftChain.pop();\n                    rightChain.pop();\n                    break;\n\n                default:\n                    if (x[p] !== y[p]) {\n                        return false;\n                    }\n                    break;\n            }\n        }\n\n        return true;\n    }\n\n}\n"],"sourceRoot":".."}