UNPKG

cerceis-lib

Version:

Contains list of quality of life functions that is written in TypeScript and es6

1 lines 7.1 kB
{"version":3,"sources":["../../src/object/index.ts"],"sourcesContent":["type PlainObject = Record<string, unknown>;\n\nconst _isObj = (x: unknown): x is PlainObject =>\n Object.prototype.toString.call(x) === \"[object Object]\";\n\nconst _isNumber = (x: unknown): x is number =>\n Object.prototype.toString.call(x) === \"[object Number]\";\n\nexport const FromObject = {\n /**\n * Convert an object into a 2D array ([[key, value], ...]).\n * @param inputObj Input object.\n */\n ObjectToArray(inputObj: Record<string | number, unknown>): [string, unknown][] {\n return Object.keys(inputObj).map((key) => [key, inputObj[key]]);\n },\n /**\n * Flatten a multi-level object into a single level.\n * Duplicate keys are given a generated ID when overwriteKey is false.\n * @param obj Object to flatten.\n * @param overwriteKey Overwrite duplicate keys (default false).\n */\n flatten(obj: object, overwriteKey: boolean = false): Record<string, unknown> {\n if (Object.keys(obj).length === 0) return {};\n const rs: Record<string, unknown> = {};\n const genId = (): string =>\n (Date.now() / 1000 | 0).toString(16) +\n \"xxxxxxxxxxxxxxxx\".replace(/x/g, () => (Math.random() * 16 | 0).toString(16));\n\n const recurse = (o: object): void => {\n for (const key in o) {\n const val = (o as Record<string, unknown>)[key];\n if (_isObj(val)) {\n recurse(val);\n } else if (key in rs && !overwriteKey) {\n rs[genId()] = val;\n } else {\n rs[key] = val;\n }\n }\n };\n recurse(obj);\n return rs;\n },\n /**\n * Find and return the deepest nested object.\n * Returns the first deepest object found; or all if multi = true.\n * @param obj Input object.\n * @param multi Return all objects at the deepest level.\n */\n getDeepest(obj: object, multi: boolean = false): object | object[] {\n if (Object.keys(obj).length === 0) return {};\n let deepest = 0;\n let rs: object = {};\n const rsMulti: Record<number, object[]> = {};\n\n const recurse = (o: object, depth: number = 0): void => {\n depth++;\n if (depth > deepest) {\n deepest = depth;\n rs = o;\n if (multi) rsMulti[depth] = [o];\n } else if (depth === deepest && multi) {\n if (!rsMulti[depth]) rsMulti[depth] = [];\n rsMulti[depth].push(o);\n }\n for (const key in o) {\n const val = (o as Record<string, unknown>)[key];\n if (_isObj(val)) recurse(val, depth);\n }\n };\n recurse(obj);\n return multi ? (rsMulti[deepest] ?? []) : rs;\n },\n /**\n * Sum all numeric values in an object (supports single-level nesting via field).\n * @param obj Input object.\n * @param field Target field when values are nested objects.\n */\n sumAll(obj: object, field: string = \"\"): number {\n let sum = 0;\n for (const prop in obj) {\n const raw = (obj as Record<string, unknown>)[prop];\n const t = field !== \"\" ? (raw as Record<string, unknown>)[field] : raw;\n if (!_isNumber(t)) throw new Error(`Value of property \"${prop}\" is not a number.`);\n sum += t;\n }\n return sum;\n },\n /**\n * Find the maximum numeric value in an object.\n * @param obj Input object.\n * @param field Target field when values are nested objects.\n */\n max(obj: object, field: string = \"\"): number {\n let max = -Infinity;\n for (const prop in obj) {\n const raw = (obj as Record<string, unknown>)[prop];\n const t = field !== \"\" ? (raw as Record<string, unknown>)[field] : raw;\n if (!_isNumber(t)) throw new Error(`Value of property \"${prop}\" is not a number.`);\n if (t > max) max = t;\n }\n return max;\n },\n /**\n * Find the minimum numeric value in an object.\n * @param obj Input object.\n * @param field Target field when values are nested objects.\n */\n min(obj: object, field: string = \"\"): number | null {\n let min: number | null = null;\n for (const prop in obj) {\n const raw = (obj as Record<string, unknown>)[prop];\n const t = field !== \"\" ? (raw as Record<string, unknown>)[field] : raw;\n if (!_isNumber(t)) throw new Error(`Value of property \"${prop}\" is not a number.`);\n if (min === null || t < min) min = t;\n }\n return min;\n },\n};\n"],"mappings":"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","names":[]}