{"version":3,"file":"index.umd.development.cjs","sources":["../src/util.ts","../src/index.ts"],"sourcesContent":["// @ts-ignore\nimport _equals from 'deep-eql';\nimport { IOptions } from './types';\nimport { findLastIndex, findIndex } from 'lodash';\n\n/**\n * 深度相等性比較函式\n * Deep equality comparison function\n *\n * 應用情境：\n * - 比較兩個物件是否深度相等\n * - 用於去重邏輯中的相等性判斷\n * - Compare if two objects are deeply equal\n * - Used for equality checking in deduplication logic\n *\n * @param a1 - 要比較的第一個值 / First value to compare\n * @param a2 - 要比較的第二個值 / Second value to compare\n * @returns 是否相等 / Whether equal\n *\n * @example\n * equals({a: 1}, {a: 1}); // => true\n * equals([1, 2], [1, 2]); // => true\n * equals({a: 1}, {a: 2}); // => false\n */\nexport function equals<T>(a1: T, a2: T): boolean\nexport function equals<T>(a1: T, a2: unknown): a2 is T\nexport function equals<T>(a1: unknown, a2: T): a1 is T\nexport function equals(a1: any, a2: any): boolean\n{\n\treturn _equals(a1, a2)\n}\n\n/**\n * 建立預設過濾回調函式\n * Create default filter callback function\n *\n * 應用情境：\n * - 為 array_unique 函式建立預設的過濾邏輯\n * - 支援自訂 checker 和 filter 函式\n * - Create default filter logic for array_unique function\n * - Support custom checker and filter functions\n *\n * @param options - 選項物件包含 checker、filter、removeFromFirst / Options object with checker, filter, removeFromFirst\n * @returns 過濾回調函式 / Filter callback function\n */\nexport function defaultFilter<T>(options: IOptions<T> = {})\n{\n\tconst checker = options.checker || defaultChecker;\n\tconst filter = options.filter || null;\n\n\tconst find = options.removeFromFirst ? findLastIndex : findIndex;\n\n\tconst cb = <K extends any[]>(val: K[keyof K], index: number, arr: K) =>\n\t{\n\t\tlet i = find(arr, a => checker(a, val, arr, arr));\n\t\treturn i === index && (!filter || filter(val));\n\t};\n\n\treturn cb;\n}\n\n// @ts-ignore\n/**\n * 預設相等性檢查函式\n * Default equality check function\n *\n * 使用 deep-eql 進行深度相等性比較。\n * Uses deep-eql for deep equality comparison.\n *\n * @param element - 陣列中的元素 / Element in array\n * @param value - 要比較的新值 / New value to compare\n * @param arr_new - 新陣列 / New array\n * @param arr_old - 舊陣列 / Old array\n * @returns 是否相等 / Whether equal\n */\nexport function defaultChecker<T, R>(element: T, value: R, arr_new?: Array<T | R>, arr_old?: Array<T | R>): boolean\n{\n\treturn _equals(element, value);\n}\n","import { defaultFilter, equals, defaultChecker } from './util';\n\nimport { IOptions } from './types';\n\nexport * from './types';\nexport * from './util';\n\n/**\n * 取得陣列的唯一值，支援深度比較\n * Get unique values from array with deep comparison support\n *\n * 應用情境：\n * - 去除複雜物件陣列中的重複項\n * - 處理巢狀物件和陣列的比對\n * - 支援自訂相等性判斷函式\n * - Remove duplicates from complex object arrays\n * - Handle nested objects and arrays comparison\n * - Support custom equality check function\n *\n * @param arr - 要去重的陣列 / Array to deduplicate\n * @param options - 去重選項 / Deduplication options\n * @returns 去重後的陣列 / Deduplicated array\n * @throws TypeError - 當輸入不是陣列時 / When input is not an array\n *\n * @example\n * // 基本使用\n * array_unique([1, 2, 2, 3]); // => [1, 2, 3]\n *\n * // 物件去重\n * array_unique([{a: 1}, {a: 1}, {a: 2}]); // => [{a: 1}, {a: 2}]\n *\n * // 巢狀陣列去重\n * array_unique([[1,2], [1,2], [1,3]]); // => [[1,2], [1,3]]\n */\nexport function array_unique<T>(arr: T, options: IOptions<T> = {}): T\n{\n\tif (!Array.isArray(arr))\n\t{\n\t\tthrow new TypeError(`Expected an Array but got ${typeof arr}.`)\n\t}\n\n\tconst cb = defaultFilter(options);\n\n\tif (options.overwrite)\n\t{\n\t\tlet index = arr.length;\n\n\t\twhile (index--)\n\t\t{\n\t\t\tlet val = arr[index];\n\n\t\t\tif (!cb(val, index, arr))\n\t\t\t{\n\t\t\t\tarr.splice(index, 1);\n\t\t\t}\n\t\t}\n\n\t\treturn arr;\n\t}\n\n\t// @ts-ignore\n\treturn arr.filter(cb);\n}\n\n/**\n * 覆寫模式去重，直接修改原陣列\n * Overwrite mode deduplication, modifies original array\n *\n * @param arr - 要去重的陣列 / Array to deduplicate\n * @param options - 去重選項 / Deduplication options\n * @returns 去重後的陣列（與輸入相同）/ Deduplicated array (same as input)\n */\nexport function array_unique_overwrite<T>(arr: T, options: IOptions<T> = {}): T\n{\n\treturn array_unique(arr, {\n\t\t...options,\n\t\toverwrite: true,\n\t});\n}\n\n/**\n * 懶惰唯一化函式，支援多種呼叫方式\n * Lazy unique function with multiple calling patterns\n *\n * 應用情境：\n * - 單一陣列輸入\n * - 多個參數或陣列混合輸入\n * - 靈活的 API 設計\n * - Single array input\n * - Multiple arguments or array mixing\n * - Flexible API design\n *\n * @param arr - 陣列或單一元素 / Array or single element\n * @returns 去重後的結果 / Deduplicated result\n *\n * @example\n * // 單一陣列\n * lazy_unique([1, 2, 2, 3]); // => [1, 2, 3]\n *\n * // 多個參數\n * lazy_unique(1, 2, 2, 3); // => [1, 2, 3]\n *\n * // 混合\n * lazy_unique([1, 2], [2, 3]); // => [1, 2, 3]\n */\nexport function lazy_unique<T extends any[]>(arr: T): T\nexport function lazy_unique<T, T1, T2>(a1: T1, a2: T2, ...arr: T[]): Array<T | T1 | T2>\nexport function lazy_unique<T>(...arr: Array<T | T[]>): T | (T | T[])[]\n// @ts-ignore\nexport function lazy_unique<T>(...arr: Array<T | T[]>)\n{\n\tif (arr.length > 1)\n\t{\n\t\treturn array_unique(arr);\n\t}\n\n\treturn array_unique(arr[0]);\n}\n\n/**\n * 懶惰唯一化覆寫模式\n * Lazy unique overwrite mode\n *\n * @param arr - 陣列或參數 / Array or arguments\n * @returns 去重後的結果 / Deduplicated result\n */\nexport function lazy_unique_overwrite<T>(...arr: Array<T | T[]>)\n{\n\tif (arr.length > 1)\n\t{\n\t\treturn array_unique_overwrite(arr);\n\t}\n\n\treturn array_unique_overwrite(arr[0]);\n}\n\n/**\n * 導出工具函式 / Export utility functions\n */\nexport {\n\tequals,\n\tdefaultFilter,\n\tdefaultChecker,\n}\n\nif (process.env.TSDX_FORMAT !== 'esm')\n{\n\tObject.defineProperty(lazy_unique, \"array_unique\", { value: array_unique });\n\tObject.defineProperty(lazy_unique, \"array_unique_overwrite\", { value: array_unique_overwrite });\n\tObject.defineProperty(lazy_unique, \"lazy_unique_overwrite\", { value: lazy_unique_overwrite });\n\n\tObject.defineProperty(lazy_unique, \"equals\", { value: equals });\n\tObject.defineProperty(lazy_unique, \"defaultFilter\", { value: defaultFilter });\n\tObject.defineProperty(lazy_unique, \"defaultChecker\", { value: defaultChecker });\n\n\tObject.defineProperty(lazy_unique, \"lazy_unique\", { value: lazy_unique });\n\tObject.defineProperty(lazy_unique, \"default\", { value: lazy_unique });\n\n\tObject.defineProperty(lazy_unique, \"__esModule\", { value: true });\n}\n\nexport default lazy_unique\n"],"names":["equals","a1","a2","_equals","defaultFilter","options","checker","defaultChecker","filter","find","removeFromFirst","findLastIndex","findIndex","cb","val","index","arr","i","a","element","value","arr_new","arr_old","array_unique","Array","isArray","TypeError","overwrite","length","splice","array_unique_overwrite","lazy_unique","lazy_unique_overwrite","Object","defineProperty"],"mappings":"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"}