@tanwan/utils 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/array/chunk.cjs +1 -1
  2. package/dist/array/chunk.d.cts +1 -1
  3. package/dist/array/chunk.d.ts +1 -1
  4. package/dist/array/chunk.js +1 -1
  5. package/dist/array/chunk.js.map +1 -1
  6. package/dist/array/flatten.cjs +1 -1
  7. package/dist/array/flatten.d.cts +1 -1
  8. package/dist/array/flatten.d.ts +1 -1
  9. package/dist/array/flatten.js +1 -1
  10. package/dist/array/flatten.js.map +1 -1
  11. package/dist/array/groupBy.cjs +36 -0
  12. package/dist/array/groupBy.d.cts +27 -0
  13. package/dist/array/groupBy.d.cts.map +1 -0
  14. package/dist/array/groupBy.d.ts +28 -0
  15. package/dist/array/groupBy.d.ts.map +1 -0
  16. package/dist/array/groupBy.js +38 -0
  17. package/dist/array/groupBy.js.map +1 -0
  18. package/dist/array/range.cjs +27 -0
  19. package/dist/array/range.d.cts +21 -0
  20. package/dist/array/range.d.cts.map +1 -0
  21. package/dist/array/range.d.ts +22 -0
  22. package/dist/array/range.d.ts.map +1 -0
  23. package/dist/array/range.js +29 -0
  24. package/dist/array/range.js.map +1 -0
  25. package/dist/array/shuffle.cjs +1 -1
  26. package/dist/array/shuffle.d.cts +1 -1
  27. package/dist/array/shuffle.d.ts +1 -1
  28. package/dist/array/shuffle.js +1 -1
  29. package/dist/array/shuffle.js.map +1 -1
  30. package/dist/array/unique.cjs +1 -1
  31. package/dist/array/unique.d.cts +1 -1
  32. package/dist/array/unique.d.ts +1 -1
  33. package/dist/array/unique.js +1 -1
  34. package/dist/array/unique.js.map +1 -1
  35. package/dist/base/deepClone.cjs +1 -1
  36. package/dist/base/deepClone.d.cts +1 -1
  37. package/dist/base/deepClone.d.ts +1 -1
  38. package/dist/base/deepClone.js +1 -1
  39. package/dist/base/deepClone.js.map +1 -1
  40. package/dist/base/isArray.cjs +1 -1
  41. package/dist/base/isArray.d.cts +1 -1
  42. package/dist/base/isArray.d.ts +1 -1
  43. package/dist/base/isArray.js +1 -1
  44. package/dist/base/isArray.js.map +1 -1
  45. package/dist/base/isEmpty.cjs +42 -0
  46. package/dist/base/isEmpty.d.cts +34 -0
  47. package/dist/base/isEmpty.d.cts.map +1 -0
  48. package/dist/base/isEmpty.d.ts +35 -0
  49. package/dist/base/isEmpty.d.ts.map +1 -0
  50. package/dist/base/isEmpty.js +44 -0
  51. package/dist/base/isEmpty.js.map +1 -0
  52. package/dist/base/isObject.cjs +1 -1
  53. package/dist/base/isObject.d.cts +1 -1
  54. package/dist/base/isObject.d.ts +1 -1
  55. package/dist/base/isObject.js +1 -1
  56. package/dist/base/isObject.js.map +1 -1
  57. package/dist/base/isString.cjs +1 -1
  58. package/dist/base/isString.d.cts +1 -1
  59. package/dist/base/isString.d.ts +1 -1
  60. package/dist/base/isString.js +1 -1
  61. package/dist/base/isString.js.map +1 -1
  62. package/dist/date/formatDate.cjs +1 -1
  63. package/dist/date/formatDate.d.cts +1 -1
  64. package/dist/date/formatDate.d.ts +1 -1
  65. package/dist/date/formatDate.js +1 -1
  66. package/dist/date/formatDate.js.map +1 -1
  67. package/dist/date/getRelativeTime.cjs +1 -1
  68. package/dist/date/getRelativeTime.d.cts +1 -1
  69. package/dist/date/getRelativeTime.d.ts +1 -1
  70. package/dist/date/getRelativeTime.js +1 -1
  71. package/dist/date/getRelativeTime.js.map +1 -1
  72. package/dist/function/debounce.cjs +1 -1
  73. package/dist/function/debounce.d.cts +1 -1
  74. package/dist/function/debounce.d.ts +1 -1
  75. package/dist/function/debounce.js +1 -1
  76. package/dist/function/debounce.js.map +1 -1
  77. package/dist/function/delay.cjs +8 -0
  78. package/dist/function/delay.d.cts +19 -0
  79. package/dist/function/delay.d.cts.map +1 -0
  80. package/dist/function/delay.d.ts +20 -0
  81. package/dist/function/delay.d.ts.map +1 -0
  82. package/dist/function/delay.js +10 -0
  83. package/dist/function/delay.js.map +1 -0
  84. package/dist/function/throttle.cjs +1 -1
  85. package/dist/function/throttle.d.cts +1 -1
  86. package/dist/function/throttle.d.ts +1 -1
  87. package/dist/function/throttle.js +1 -1
  88. package/dist/function/throttle.js.map +1 -1
  89. package/dist/index.cjs +18 -0
  90. package/dist/index.d.cts +10 -1
  91. package/dist/index.d.ts +10 -1
  92. package/dist/index.iife.js +1 -1
  93. package/dist/index.js +10 -1
  94. package/dist/number/clamp.cjs +1 -1
  95. package/dist/number/clamp.d.cts +1 -1
  96. package/dist/number/clamp.d.ts +1 -1
  97. package/dist/number/clamp.js +1 -1
  98. package/dist/number/clamp.js.map +1 -1
  99. package/dist/number/formatThousands.cjs +1 -1
  100. package/dist/number/formatThousands.d.cts +1 -1
  101. package/dist/number/formatThousands.d.ts +1 -1
  102. package/dist/number/formatThousands.js +1 -1
  103. package/dist/number/formatThousands.js.map +1 -1
  104. package/dist/number/randomInt.cjs +1 -1
  105. package/dist/number/randomInt.d.cts +1 -1
  106. package/dist/number/randomInt.d.ts +1 -1
  107. package/dist/number/randomInt.js +1 -1
  108. package/dist/number/randomInt.js.map +1 -1
  109. package/dist/object/omit.cjs +23 -0
  110. package/dist/object/omit.d.cts +18 -0
  111. package/dist/object/omit.d.cts.map +1 -0
  112. package/dist/object/omit.d.ts +19 -0
  113. package/dist/object/omit.d.ts.map +1 -0
  114. package/dist/object/omit.js +25 -0
  115. package/dist/object/omit.js.map +1 -0
  116. package/dist/object/pick.cjs +22 -0
  117. package/dist/object/pick.d.cts +18 -0
  118. package/dist/object/pick.d.cts.map +1 -0
  119. package/dist/object/pick.d.ts +19 -0
  120. package/dist/object/pick.d.ts.map +1 -0
  121. package/dist/object/pick.js +24 -0
  122. package/dist/object/pick.js.map +1 -0
  123. package/dist/string/camelCase.cjs +0 -1
  124. package/dist/string/camelCase.js +0 -1
  125. package/dist/string/camelCase.js.map +1 -1
  126. package/dist/string/capitalize.cjs +1 -1
  127. package/dist/string/capitalize.d.cts +1 -1
  128. package/dist/string/capitalize.d.ts +1 -1
  129. package/dist/string/capitalize.js +1 -1
  130. package/dist/string/capitalize.js.map +1 -1
  131. package/dist/string/uuid.cjs +23 -0
  132. package/dist/string/uuid.d.cts +17 -0
  133. package/dist/string/uuid.d.cts.map +1 -0
  134. package/dist/string/uuid.d.ts +18 -0
  135. package/dist/string/uuid.d.ts.map +1 -0
  136. package/dist/string/uuid.js +25 -0
  137. package/dist/string/uuid.js.map +1 -0
  138. package/dist/url/parseQueryString.cjs +48 -0
  139. package/dist/url/parseQueryString.d.cts +22 -0
  140. package/dist/url/parseQueryString.d.cts.map +1 -0
  141. package/dist/url/parseQueryString.d.ts +23 -0
  142. package/dist/url/parseQueryString.d.ts.map +1 -0
  143. package/dist/url/parseQueryString.js +50 -0
  144. package/dist/url/parseQueryString.js.map +1 -0
  145. package/dist/url/stringifyQueryString.cjs +38 -0
  146. package/dist/url/stringifyQueryString.d.cts +22 -0
  147. package/dist/url/stringifyQueryString.d.cts.map +1 -0
  148. package/dist/url/stringifyQueryString.d.ts +23 -0
  149. package/dist/url/stringifyQueryString.d.ts.map +1 -0
  150. package/dist/url/stringifyQueryString.js +40 -0
  151. package/dist/url/stringifyQueryString.js.map +1 -0
  152. package/package.json +39 -3
@@ -3,7 +3,7 @@
3
3
  * 数组分块
4
4
  * @example
5
5
  * ```ts
6
- * import chunk from '@tw/utils/chunk'
6
+ * import chunk from '@tanwan/utils/chunk'
7
7
  * chunk([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
8
8
  * chunk(['a', 'b', 'c'], 1) // [['a'], ['b'], ['c']]
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 数组分块
4
4
  * @example
5
5
  * ```ts
6
- * import chunk from '@tw/utils/chunk'
6
+ * import chunk from '@tanwan/utils/chunk'
7
7
  * chunk([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
8
8
  * chunk(['a', 'b', 'c'], 1) // [['a'], ['b'], ['c']]
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 数组分块
4
4
  * @example
5
5
  * ```ts
6
- * import chunk from '@tw/utils/chunk'
6
+ * import chunk from '@tanwan/utils/chunk'
7
7
  * chunk([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
8
8
  * chunk(['a', 'b', 'c'], 1) // [['a'], ['b'], ['c']]
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 数组分块
4
4
  * @example
5
5
  * ```ts
6
- * import chunk from '@tw/utils/chunk'
6
+ * import chunk from '@tanwan/utils/chunk'
7
7
  * chunk([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
8
8
  * chunk(['a', 'b', 'c'], 1) // [['a'], ['b'], ['c']]
9
9
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"chunk.js","names":[],"sources":["../../src/array/chunk/index.ts"],"sourcesContent":["/**\n * 数组分块\n * @example\n * ```ts\n * import chunk from '@tw/utils/chunk'\n * chunk([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]\n * chunk(['a', 'b', 'c'], 1) // [['a'], ['b'], ['c']]\n * ```\n */\nexport default function chunk<T>(arr: T[], size: number): T[][] {\n const result: T[][] = [];\n for (let i = 0; i < arr.length; i += size) {\n result.push(arr.slice(i, i + size));\n }\n return result;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,MAAS,KAAU,MAAqB;CAC9D,MAAM,SAAgB,EAAE;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,KACnC,QAAO,KAAK,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC;AAErC,QAAO"}
1
+ {"version":3,"file":"chunk.js","names":[],"sources":["../../src/array/chunk/index.ts"],"sourcesContent":["/**\n * 数组分块\n * @example\n * ```ts\n * import chunk from '@tanwan/utils/chunk'\n * chunk([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]\n * chunk(['a', 'b', 'c'], 1) // [['a'], ['b'], ['c']]\n * ```\n */\nexport default function chunk<T>(arr: T[], size: number): T[][] {\n const result: T[][] = [];\n for (let i = 0; i < arr.length; i += size) {\n result.push(arr.slice(i, i + size));\n }\n return result;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,MAAS,KAAU,MAAqB;CAC9D,MAAM,SAAgB,EAAE;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,KACnC,QAAO,KAAK,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC;AAErC,QAAO"}
@@ -3,7 +3,7 @@
3
3
  * 数组扁平化
4
4
  * @example
5
5
  * ```ts
6
- * import flatten from '@tw/utils/flatten'
6
+ * import flatten from '@tanwan/utils/flatten'
7
7
  * flatten([1, [2, [3, 4]]]) // [1, 2, 3, 4]
8
8
  * flatten([1, [2, 3]], 1) // [1, 2, 3]
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 数组扁平化
4
4
  * @example
5
5
  * ```ts
6
- * import flatten from '@tw/utils/flatten'
6
+ * import flatten from '@tanwan/utils/flatten'
7
7
  * flatten([1, [2, [3, 4]]]) // [1, 2, 3, 4]
8
8
  * flatten([1, [2, 3]], 1) // [1, 2, 3]
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 数组扁平化
4
4
  * @example
5
5
  * ```ts
6
- * import flatten from '@tw/utils/flatten'
6
+ * import flatten from '@tanwan/utils/flatten'
7
7
  * flatten([1, [2, [3, 4]]]) // [1, 2, 3, 4]
8
8
  * flatten([1, [2, 3]], 1) // [1, 2, 3]
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 数组扁平化
4
4
  * @example
5
5
  * ```ts
6
- * import flatten from '@tw/utils/flatten'
6
+ * import flatten from '@tanwan/utils/flatten'
7
7
  * flatten([1, [2, [3, 4]]]) // [1, 2, 3, 4]
8
8
  * flatten([1, [2, 3]], 1) // [1, 2, 3]
9
9
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"flatten.js","names":[],"sources":["../../src/array/flatten/index.ts"],"sourcesContent":["/**\n * 数组扁平化\n * @example\n * ```ts\n * import flatten from '@tw/utils/flatten'\n * flatten([1, [2, [3, 4]]]) // [1, 2, 3, 4]\n * flatten([1, [2, 3]], 1) // [1, 2, 3]\n * ```\n */\nexport default function flatten<T>(arr: unknown[], depth: number = Infinity): T[] {\n if (depth === 0) return arr as T[];\n const result: T[] = [];\n for (const item of arr) {\n if (Array.isArray(item) && depth > 0) {\n result.push(...flatten<T>(item, depth - 1));\n } else {\n result.push(item as T);\n }\n }\n return result;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,QAAW,KAAgB,QAAgB,UAAe;AAChF,KAAI,UAAU,EAAG,QAAO;CACxB,MAAM,SAAc,EAAE;AACtB,MAAK,MAAM,QAAQ,IACjB,KAAI,MAAM,QAAQ,KAAK,IAAI,QAAQ,EACjC,QAAO,KAAK,GAAG,QAAW,MAAM,QAAQ,EAAE,CAAC;KAE3C,QAAO,KAAK,KAAU;AAG1B,QAAO"}
1
+ {"version":3,"file":"flatten.js","names":[],"sources":["../../src/array/flatten/index.ts"],"sourcesContent":["/**\n * 数组扁平化\n * @example\n * ```ts\n * import flatten from '@tanwan/utils/flatten'\n * flatten([1, [2, [3, 4]]]) // [1, 2, 3, 4]\n * flatten([1, [2, 3]], 1) // [1, 2, 3]\n * ```\n */\nexport default function flatten<T>(arr: unknown[], depth: number = Infinity): T[] {\n if (depth === 0) return arr as T[];\n const result: T[] = [];\n for (const item of arr) {\n if (Array.isArray(item) && depth > 0) {\n result.push(...flatten<T>(item, depth - 1));\n } else {\n result.push(item as T);\n }\n }\n return result;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,QAAW,KAAgB,QAAgB,UAAe;AAChF,KAAI,UAAU,EAAG,QAAO;CACxB,MAAM,SAAc,EAAE;AACtB,MAAK,MAAM,QAAQ,IACjB,KAAI,MAAM,QAAQ,KAAK,IAAI,QAAQ,EACjC,QAAO,KAAK,GAAG,QAAW,MAAM,QAAQ,EAAE,CAAC;KAE3C,QAAO,KAAK,KAAU;AAG1B,QAAO"}
@@ -0,0 +1,36 @@
1
+ //#region src/array/groupBy/index.ts
2
+ /**
3
+ * 根据指定的 key 或迭代函数对数组进行分组
4
+ *
5
+ * @param arr - 待分组的数组
6
+ * @param iteratee - 分组依据:可以是属性名或返回分组 key 的函数
7
+ * @returns 分组后的对象
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import groupBy from '@tanwan/utils/groupBy'
12
+ * // 按属性名分组
13
+ * groupBy([{ type: 'a', val: 1 }, { type: 'b', val: 2 }, { type: 'a', val: 3 }], 'type')
14
+ * // { a: [{ type: 'a', val: 1 }, { type: 'a', val: 3 }], b: [{ type: 'b', val: 2 }] }
15
+ *
16
+ * // 按函数分组
17
+ * groupBy([1.2, 2.3, 3.4], Math.floor)
18
+ * // { 1: [1.2], 2: [2.3], 3: [3.4] }
19
+ *
20
+ * // 按条件分组
21
+ * groupBy([1, 2, 3, 4, 5], (n) => (n % 2 === 0 ? 'even' : 'odd'))
22
+ * // { even: [2, 4], odd: [1, 3, 5] }
23
+ * ```
24
+ */
25
+ function groupBy(arr, iteratee) {
26
+ const result = {};
27
+ const getKey = typeof iteratee === "function" ? iteratee : (item) => String(item[iteratee]);
28
+ for (const item of arr) {
29
+ const key = String(getKey(item));
30
+ if (!result[key]) result[key] = [];
31
+ result[key].push(item);
32
+ }
33
+ return result;
34
+ }
35
+ //#endregion
36
+ module.exports = groupBy;
@@ -0,0 +1,27 @@
1
+ //#region src/array/groupBy/index.d.ts
2
+ /**
3
+ * 根据指定的 key 或迭代函数对数组进行分组
4
+ *
5
+ * @param arr - 待分组的数组
6
+ * @param iteratee - 分组依据:可以是属性名或返回分组 key 的函数
7
+ * @returns 分组后的对象
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import groupBy from '@tanwan/utils/groupBy'
12
+ * // 按属性名分组
13
+ * groupBy([{ type: 'a', val: 1 }, { type: 'b', val: 2 }, { type: 'a', val: 3 }], 'type')
14
+ * // { a: [{ type: 'a', val: 1 }, { type: 'a', val: 3 }], b: [{ type: 'b', val: 2 }] }
15
+ *
16
+ * // 按函数分组
17
+ * groupBy([1.2, 2.3, 3.4], Math.floor)
18
+ * // { 1: [1.2], 2: [2.3], 3: [3.4] }
19
+ *
20
+ * // 按条件分组
21
+ * groupBy([1, 2, 3, 4, 5], (n) => (n % 2 === 0 ? 'even' : 'odd'))
22
+ * // { even: [2, 4], odd: [1, 3, 5] }
23
+ * ```
24
+ */
25
+ declare function groupBy<T>(arr: T[], iteratee: keyof T | ((item: T) => string | number)): Record<string, T[]>;
26
+ export = groupBy;
27
+ //# sourceMappingURL=groupBy.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupBy.d.cts","names":[],"sources":["../../src/array/groupBy/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;iBAuBwB,OAAA,GAAA,CAAW,GAAA,EAAK,CAAA,IAAK,QAAA,QAAgB,CAAA,KAAM,IAAA,EAAM,CAAA,wBAAyB,MAAA,SAAe,CAAA;AAAA"}
@@ -0,0 +1,28 @@
1
+ //#region src/array/groupBy/index.d.ts
2
+ /**
3
+ * 根据指定的 key 或迭代函数对数组进行分组
4
+ *
5
+ * @param arr - 待分组的数组
6
+ * @param iteratee - 分组依据:可以是属性名或返回分组 key 的函数
7
+ * @returns 分组后的对象
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import groupBy from '@tanwan/utils/groupBy'
12
+ * // 按属性名分组
13
+ * groupBy([{ type: 'a', val: 1 }, { type: 'b', val: 2 }, { type: 'a', val: 3 }], 'type')
14
+ * // { a: [{ type: 'a', val: 1 }, { type: 'a', val: 3 }], b: [{ type: 'b', val: 2 }] }
15
+ *
16
+ * // 按函数分组
17
+ * groupBy([1.2, 2.3, 3.4], Math.floor)
18
+ * // { 1: [1.2], 2: [2.3], 3: [3.4] }
19
+ *
20
+ * // 按条件分组
21
+ * groupBy([1, 2, 3, 4, 5], (n) => (n % 2 === 0 ? 'even' : 'odd'))
22
+ * // { even: [2, 4], odd: [1, 3, 5] }
23
+ * ```
24
+ */
25
+ declare function groupBy<T>(arr: T[], iteratee: keyof T | ((item: T) => string | number)): Record<string, T[]>;
26
+ //#endregion
27
+ export { groupBy as default };
28
+ //# sourceMappingURL=groupBy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupBy.d.ts","names":[],"sources":["../../src/array/groupBy/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;iBAuBwB,OAAA,GAAA,CAAW,GAAA,EAAK,CAAA,IAAK,QAAA,QAAgB,CAAA,KAAM,IAAA,EAAM,CAAA,wBAAyB,MAAA,SAAe,CAAA"}
@@ -0,0 +1,38 @@
1
+ //#region src/array/groupBy/index.ts
2
+ /**
3
+ * 根据指定的 key 或迭代函数对数组进行分组
4
+ *
5
+ * @param arr - 待分组的数组
6
+ * @param iteratee - 分组依据:可以是属性名或返回分组 key 的函数
7
+ * @returns 分组后的对象
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import groupBy from '@tanwan/utils/groupBy'
12
+ * // 按属性名分组
13
+ * groupBy([{ type: 'a', val: 1 }, { type: 'b', val: 2 }, { type: 'a', val: 3 }], 'type')
14
+ * // { a: [{ type: 'a', val: 1 }, { type: 'a', val: 3 }], b: [{ type: 'b', val: 2 }] }
15
+ *
16
+ * // 按函数分组
17
+ * groupBy([1.2, 2.3, 3.4], Math.floor)
18
+ * // { 1: [1.2], 2: [2.3], 3: [3.4] }
19
+ *
20
+ * // 按条件分组
21
+ * groupBy([1, 2, 3, 4, 5], (n) => (n % 2 === 0 ? 'even' : 'odd'))
22
+ * // { even: [2, 4], odd: [1, 3, 5] }
23
+ * ```
24
+ */
25
+ function groupBy(arr, iteratee) {
26
+ const result = {};
27
+ const getKey = typeof iteratee === "function" ? iteratee : (item) => String(item[iteratee]);
28
+ for (const item of arr) {
29
+ const key = String(getKey(item));
30
+ if (!result[key]) result[key] = [];
31
+ result[key].push(item);
32
+ }
33
+ return result;
34
+ }
35
+ //#endregion
36
+ export { groupBy as default };
37
+
38
+ //# sourceMappingURL=groupBy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupBy.js","names":[],"sources":["../../src/array/groupBy/index.ts"],"sourcesContent":["/**\n * 根据指定的 key 或迭代函数对数组进行分组\n *\n * @param arr - 待分组的数组\n * @param iteratee - 分组依据:可以是属性名或返回分组 key 的函数\n * @returns 分组后的对象\n *\n * @example\n * ```ts\n * import groupBy from '@tanwan/utils/groupBy'\n * // 按属性名分组\n * groupBy([{ type: 'a', val: 1 }, { type: 'b', val: 2 }, { type: 'a', val: 3 }], 'type')\n * // { a: [{ type: 'a', val: 1 }, { type: 'a', val: 3 }], b: [{ type: 'b', val: 2 }] }\n *\n * // 按函数分组\n * groupBy([1.2, 2.3, 3.4], Math.floor)\n * // { 1: [1.2], 2: [2.3], 3: [3.4] }\n *\n * // 按条件分组\n * groupBy([1, 2, 3, 4, 5], (n) => (n % 2 === 0 ? 'even' : 'odd'))\n * // { even: [2, 4], odd: [1, 3, 5] }\n * ```\n */\nexport default function groupBy<T>(arr: T[], iteratee: keyof T | ((item: T) => string | number)): Record<string, T[]> {\n const result: Record<string, T[]> = {};\n\n const getKey = typeof iteratee === 'function' ? iteratee : (item: T) => String(item[iteratee]);\n\n for (const item of arr) {\n const key = String(getKey(item));\n if (!result[key]) {\n result[key] = [];\n }\n result[key].push(item);\n }\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAuBA,SAAwB,QAAW,KAAU,UAAyE;CACpH,MAAM,SAA8B,EAAE;CAEtC,MAAM,SAAS,OAAO,aAAa,aAAa,YAAY,SAAY,OAAO,KAAK,UAAU;AAE9F,MAAK,MAAM,QAAQ,KAAK;EACtB,MAAM,MAAM,OAAO,OAAO,KAAK,CAAC;AAChC,MAAI,CAAC,OAAO,KACV,QAAO,OAAO,EAAE;AAElB,SAAO,KAAK,KAAK,KAAK;;AAGxB,QAAO"}
@@ -0,0 +1,27 @@
1
+ //#region src/array/range/index.ts
2
+ /**
3
+ * 生成数字序列数组
4
+ *
5
+ * @param start - 起始值(包含)
6
+ * @param end - 结束值(不包含)
7
+ * @param step - 步长,默认为 1
8
+ * @returns 数字序列数组
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import range from '@tanwan/utils/range'
13
+ * range(1, 5) // [1, 2, 3, 4]
14
+ * range(0, 10, 2) // [0, 2, 4, 6, 8]
15
+ * range(5, 0, -1) // [5, 4, 3, 2, 1]
16
+ * range(0, 0) // []
17
+ * ```
18
+ */
19
+ function range(start, end, step = 1) {
20
+ if (step === 0) throw new Error("step 不能为 0");
21
+ const result = [];
22
+ if (step > 0) for (let i = start; i < end; i += step) result.push(i);
23
+ else for (let i = start; i > end; i += step) result.push(i);
24
+ return result;
25
+ }
26
+ //#endregion
27
+ module.exports = range;
@@ -0,0 +1,21 @@
1
+ //#region src/array/range/index.d.ts
2
+ /**
3
+ * 生成数字序列数组
4
+ *
5
+ * @param start - 起始值(包含)
6
+ * @param end - 结束值(不包含)
7
+ * @param step - 步长,默认为 1
8
+ * @returns 数字序列数组
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import range from '@tanwan/utils/range'
13
+ * range(1, 5) // [1, 2, 3, 4]
14
+ * range(0, 10, 2) // [0, 2, 4, 6, 8]
15
+ * range(5, 0, -1) // [5, 4, 3, 2, 1]
16
+ * range(0, 0) // []
17
+ * ```
18
+ */
19
+ declare function range(start: number, end: number, step?: number): number[];
20
+ export = range;
21
+ //# sourceMappingURL=range.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.d.cts","names":[],"sources":["../../src/array/range/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;iBAiBwB,KAAA,CAAM,KAAA,UAAe,GAAA,UAAa,IAAA;AAAA"}
@@ -0,0 +1,22 @@
1
+ //#region src/array/range/index.d.ts
2
+ /**
3
+ * 生成数字序列数组
4
+ *
5
+ * @param start - 起始值(包含)
6
+ * @param end - 结束值(不包含)
7
+ * @param step - 步长,默认为 1
8
+ * @returns 数字序列数组
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import range from '@tanwan/utils/range'
13
+ * range(1, 5) // [1, 2, 3, 4]
14
+ * range(0, 10, 2) // [0, 2, 4, 6, 8]
15
+ * range(5, 0, -1) // [5, 4, 3, 2, 1]
16
+ * range(0, 0) // []
17
+ * ```
18
+ */
19
+ declare function range(start: number, end: number, step?: number): number[];
20
+ //#endregion
21
+ export { range as default };
22
+ //# sourceMappingURL=range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.d.ts","names":[],"sources":["../../src/array/range/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;iBAiBwB,KAAA,CAAM,KAAA,UAAe,GAAA,UAAa,IAAA"}
@@ -0,0 +1,29 @@
1
+ //#region src/array/range/index.ts
2
+ /**
3
+ * 生成数字序列数组
4
+ *
5
+ * @param start - 起始值(包含)
6
+ * @param end - 结束值(不包含)
7
+ * @param step - 步长,默认为 1
8
+ * @returns 数字序列数组
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import range from '@tanwan/utils/range'
13
+ * range(1, 5) // [1, 2, 3, 4]
14
+ * range(0, 10, 2) // [0, 2, 4, 6, 8]
15
+ * range(5, 0, -1) // [5, 4, 3, 2, 1]
16
+ * range(0, 0) // []
17
+ * ```
18
+ */
19
+ function range(start, end, step = 1) {
20
+ if (step === 0) throw new Error("step 不能为 0");
21
+ const result = [];
22
+ if (step > 0) for (let i = start; i < end; i += step) result.push(i);
23
+ else for (let i = start; i > end; i += step) result.push(i);
24
+ return result;
25
+ }
26
+ //#endregion
27
+ export { range as default };
28
+
29
+ //# sourceMappingURL=range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.js","names":[],"sources":["../../src/array/range/index.ts"],"sourcesContent":["/**\n * 生成数字序列数组\n *\n * @param start - 起始值(包含)\n * @param end - 结束值(不包含)\n * @param step - 步长,默认为 1\n * @returns 数字序列数组\n *\n * @example\n * ```ts\n * import range from '@tanwan/utils/range'\n * range(1, 5) // [1, 2, 3, 4]\n * range(0, 10, 2) // [0, 2, 4, 6, 8]\n * range(5, 0, -1) // [5, 4, 3, 2, 1]\n * range(0, 0) // []\n * ```\n */\nexport default function range(start: number, end: number, step = 1): number[] {\n if (step === 0) {\n throw new Error('step 不能为 0');\n }\n\n const result: number[] = [];\n\n if (step > 0) {\n for (let i = start; i < end; i += step) {\n result.push(i);\n }\n } else {\n for (let i = start; i > end; i += step) {\n result.push(i);\n }\n }\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,SAAwB,MAAM,OAAe,KAAa,OAAO,GAAa;AAC5E,KAAI,SAAS,EACX,OAAM,IAAI,MAAM,aAAa;CAG/B,MAAM,SAAmB,EAAE;AAE3B,KAAI,OAAO,EACT,MAAK,IAAI,IAAI,OAAO,IAAI,KAAK,KAAK,KAChC,QAAO,KAAK,EAAE;KAGhB,MAAK,IAAI,IAAI,OAAO,IAAI,KAAK,KAAK,KAChC,QAAO,KAAK,EAAE;AAIlB,QAAO"}
@@ -3,7 +3,7 @@
3
3
  * 数组洗牌(Fisher-Yates 算法)
4
4
  * @example
5
5
  * ```ts
6
- * import shuffle from '@tw/utils/shuffle'
6
+ * import shuffle from '@tanwan/utils/shuffle'
7
7
  * shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4](随机)
8
8
  * ```
9
9
  */
@@ -3,7 +3,7 @@
3
3
  * 数组洗牌(Fisher-Yates 算法)
4
4
  * @example
5
5
  * ```ts
6
- * import shuffle from '@tw/utils/shuffle'
6
+ * import shuffle from '@tanwan/utils/shuffle'
7
7
  * shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4](随机)
8
8
  * ```
9
9
  */
@@ -3,7 +3,7 @@
3
3
  * 数组洗牌(Fisher-Yates 算法)
4
4
  * @example
5
5
  * ```ts
6
- * import shuffle from '@tw/utils/shuffle'
6
+ * import shuffle from '@tanwan/utils/shuffle'
7
7
  * shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4](随机)
8
8
  * ```
9
9
  */
@@ -3,7 +3,7 @@
3
3
  * 数组洗牌(Fisher-Yates 算法)
4
4
  * @example
5
5
  * ```ts
6
- * import shuffle from '@tw/utils/shuffle'
6
+ * import shuffle from '@tanwan/utils/shuffle'
7
7
  * shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4](随机)
8
8
  * ```
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"shuffle.js","names":[],"sources":["../../src/array/shuffle/index.ts"],"sourcesContent":["/**\n * 数组洗牌(Fisher-Yates 算法)\n * @example\n * ```ts\n * import shuffle from '@tw/utils/shuffle'\n * shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4](随机)\n * ```\n */\nexport default function shuffle<T>(arr: T[]): T[] {\n const result = [...arr];\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [result[i], result[j]] = [result[j], result[i]];\n }\n return result;\n}\n"],"mappings":";;;;;;;;;AAQA,SAAwB,QAAW,KAAe;CAChD,MAAM,SAAS,CAAC,GAAG,IAAI;AACvB,MAAK,IAAI,IAAI,OAAO,SAAS,GAAG,IAAI,GAAG,KAAK;EAC1C,MAAM,IAAI,KAAK,MAAM,KAAK,QAAQ,IAAI,IAAI,GAAG;AAC7C,GAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,IAAI,OAAO,GAAG;;AAEjD,QAAO"}
1
+ {"version":3,"file":"shuffle.js","names":[],"sources":["../../src/array/shuffle/index.ts"],"sourcesContent":["/**\n * 数组洗牌(Fisher-Yates 算法)\n * @example\n * ```ts\n * import shuffle from '@tanwan/utils/shuffle'\n * shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4](随机)\n * ```\n */\nexport default function shuffle<T>(arr: T[]): T[] {\n const result = [...arr];\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [result[i], result[j]] = [result[j], result[i]];\n }\n return result;\n}\n"],"mappings":";;;;;;;;;AAQA,SAAwB,QAAW,KAAe;CAChD,MAAM,SAAS,CAAC,GAAG,IAAI;AACvB,MAAK,IAAI,IAAI,OAAO,SAAS,GAAG,IAAI,GAAG,KAAK;EAC1C,MAAM,IAAI,KAAK,MAAM,KAAK,QAAQ,IAAI,IAAI,GAAG;AAC7C,GAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,IAAI,OAAO,GAAG;;AAEjD,QAAO"}
@@ -3,7 +3,7 @@
3
3
  * 数组去重
4
4
  * @example
5
5
  * ```ts
6
- * import unique from '@tw/utils/unique'
6
+ * import unique from '@tanwan/utils/unique'
7
7
  * unique([1, 2, 2, 3]) // [1, 2, 3]
8
8
  * unique(['a', 'b', 'a']) // ['a', 'b']
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 数组去重
4
4
  * @example
5
5
  * ```ts
6
- * import unique from '@tw/utils/unique'
6
+ * import unique from '@tanwan/utils/unique'
7
7
  * unique([1, 2, 2, 3]) // [1, 2, 3]
8
8
  * unique(['a', 'b', 'a']) // ['a', 'b']
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 数组去重
4
4
  * @example
5
5
  * ```ts
6
- * import unique from '@tw/utils/unique'
6
+ * import unique from '@tanwan/utils/unique'
7
7
  * unique([1, 2, 2, 3]) // [1, 2, 3]
8
8
  * unique(['a', 'b', 'a']) // ['a', 'b']
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 数组去重
4
4
  * @example
5
5
  * ```ts
6
- * import unique from '@tw/utils/unique'
6
+ * import unique from '@tanwan/utils/unique'
7
7
  * unique([1, 2, 2, 3]) // [1, 2, 3]
8
8
  * unique(['a', 'b', 'a']) // ['a', 'b']
9
9
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"unique.js","names":[],"sources":["../../src/array/unique/index.ts"],"sourcesContent":["/**\n * 数组去重\n * @example\n * ```ts\n * import unique from '@tw/utils/unique'\n * unique([1, 2, 2, 3]) // [1, 2, 3]\n * unique(['a', 'b', 'a']) // ['a', 'b']\n * ```\n */\nexport default function unique<T>(arr: T[]): T[] {\n return [...new Set(arr)];\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,OAAU,KAAe;AAC/C,QAAO,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC"}
1
+ {"version":3,"file":"unique.js","names":[],"sources":["../../src/array/unique/index.ts"],"sourcesContent":["/**\n * 数组去重\n * @example\n * ```ts\n * import unique from '@tanwan/utils/unique'\n * unique([1, 2, 2, 3]) // [1, 2, 3]\n * unique(['a', 'b', 'a']) // ['a', 'b']\n * ```\n */\nexport default function unique<T>(arr: T[]): T[] {\n return [...new Set(arr)];\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,OAAU,KAAe;AAC/C,QAAO,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC"}
@@ -4,7 +4,7 @@ const require_base_isObject = require("./isObject.cjs");
4
4
  * 深拷贝变量
5
5
  * @example
6
6
  * ```ts
7
- * import deepClone from '@tw/utils/deepClone'
7
+ * import deepClone from '@tanwan/utils/deepClone'
8
8
  * const obj = { a: 1, b: { c: 2 } }
9
9
  * const clone = deepClone(obj)
10
10
  * clone.b.c = 3
@@ -3,7 +3,7 @@
3
3
  * 深拷贝变量
4
4
  * @example
5
5
  * ```ts
6
- * import deepClone from '@tw/utils/deepClone'
6
+ * import deepClone from '@tanwan/utils/deepClone'
7
7
  * const obj = { a: 1, b: { c: 2 } }
8
8
  * const clone = deepClone(obj)
9
9
  * clone.b.c = 3
@@ -3,7 +3,7 @@
3
3
  * 深拷贝变量
4
4
  * @example
5
5
  * ```ts
6
- * import deepClone from '@tw/utils/deepClone'
6
+ * import deepClone from '@tanwan/utils/deepClone'
7
7
  * const obj = { a: 1, b: { c: 2 } }
8
8
  * const clone = deepClone(obj)
9
9
  * clone.b.c = 3
@@ -4,7 +4,7 @@ import isObject from "./isObject.js";
4
4
  * 深拷贝变量
5
5
  * @example
6
6
  * ```ts
7
- * import deepClone from '@tw/utils/deepClone'
7
+ * import deepClone from '@tanwan/utils/deepClone'
8
8
  * const obj = { a: 1, b: { c: 2 } }
9
9
  * const clone = deepClone(obj)
10
10
  * clone.b.c = 3
@@ -1 +1 @@
1
- {"version":3,"file":"deepClone.js","names":[],"sources":["../../src/base/deepClone/index.ts"],"sourcesContent":["import isObject from '../isObject';\n\n/**\n * 深拷贝变量\n * @example\n * ```ts\n * import deepClone from '@tw/utils/deepClone'\n * const obj = { a: 1, b: { c: 2 } }\n * const clone = deepClone(obj)\n * clone.b.c = 3\n * obj.b.c // 2(原对象不受影响)\n * ```\n */\nexport default function deepClone<T>(v: T, cache: WeakMap<object, unknown> = new WeakMap<object, unknown>()): T {\n // 基本类型直接返回\n if (v === null || typeof v !== 'object') {\n return v;\n }\n\n // 检测循环引用\n if (cache.has(v as object)) {\n return cache.get(v as object) as T;\n }\n\n if (Array.isArray(v)) {\n const cloned: unknown[] = [];\n cache.set(v as object, cloned);\n for (let i = 0; i < v.length; i++) {\n cloned[i] = deepClone(v[i], cache);\n }\n return cloned as T;\n }\n\n if (v instanceof Date) {\n return new Date(v.getTime()) as T;\n }\n\n if (v instanceof RegExp) {\n return new RegExp(v.source, v.flags) as T;\n }\n\n if (v instanceof Map) {\n const cloned = new Map();\n cache.set(v as object, cloned);\n for (const [key, value] of v) {\n cloned.set(key, deepClone(value, cache));\n }\n return cloned as T;\n }\n\n if (v instanceof Set) {\n const cloned = new Set();\n cache.set(v as object, cloned);\n for (const value of v) {\n cloned.add(deepClone(value, cache));\n }\n return cloned as T;\n }\n\n if (v instanceof WeakMap) {\n throw new Error('Cannot clone WeakMap');\n }\n\n if (v instanceof WeakSet) {\n throw new Error('Cannot clone WeakSet');\n }\n\n if (isObject(v)) {\n const cloned: Record<string, unknown> = {};\n cache.set(v as object, cloned);\n for (const key in v) {\n if (Object.prototype.hasOwnProperty.call(v, key)) {\n cloned[key] = deepClone(v[key], cache);\n }\n }\n return cloned as T;\n }\n\n return v;\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAwB,UAAa,GAAM,wBAAkC,IAAI,SAA0B,EAAK;AAE9G,KAAI,MAAM,QAAQ,OAAO,MAAM,SAC7B,QAAO;AAIT,KAAI,MAAM,IAAI,EAAY,CACxB,QAAO,MAAM,IAAI,EAAY;AAG/B,KAAI,MAAM,QAAQ,EAAE,EAAE;EACpB,MAAM,SAAoB,EAAE;AAC5B,QAAM,IAAI,GAAa,OAAO;AAC9B,OAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,IAC5B,QAAO,KAAK,UAAU,EAAE,IAAI,MAAM;AAEpC,SAAO;;AAGT,KAAI,aAAa,KACf,QAAO,IAAI,KAAK,EAAE,SAAS,CAAC;AAG9B,KAAI,aAAa,OACf,QAAO,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM;AAGtC,KAAI,aAAa,KAAK;EACpB,MAAM,yBAAS,IAAI,KAAK;AACxB,QAAM,IAAI,GAAa,OAAO;AAC9B,OAAK,MAAM,CAAC,KAAK,UAAU,EACzB,QAAO,IAAI,KAAK,UAAU,OAAO,MAAM,CAAC;AAE1C,SAAO;;AAGT,KAAI,aAAa,KAAK;EACpB,MAAM,yBAAS,IAAI,KAAK;AACxB,QAAM,IAAI,GAAa,OAAO;AAC9B,OAAK,MAAM,SAAS,EAClB,QAAO,IAAI,UAAU,OAAO,MAAM,CAAC;AAErC,SAAO;;AAGT,KAAI,aAAa,QACf,OAAM,IAAI,MAAM,uBAAuB;AAGzC,KAAI,aAAa,QACf,OAAM,IAAI,MAAM,uBAAuB;AAGzC,KAAI,SAAS,EAAE,EAAE;EACf,MAAM,SAAkC,EAAE;AAC1C,QAAM,IAAI,GAAa,OAAO;AAC9B,OAAK,MAAM,OAAO,EAChB,KAAI,OAAO,UAAU,eAAe,KAAK,GAAG,IAAI,CAC9C,QAAO,OAAO,UAAU,EAAE,MAAM,MAAM;AAG1C,SAAO;;AAGT,QAAO"}
1
+ {"version":3,"file":"deepClone.js","names":[],"sources":["../../src/base/deepClone/index.ts"],"sourcesContent":["import isObject from '../isObject';\n\n/**\n * 深拷贝变量\n * @example\n * ```ts\n * import deepClone from '@tanwan/utils/deepClone'\n * const obj = { a: 1, b: { c: 2 } }\n * const clone = deepClone(obj)\n * clone.b.c = 3\n * obj.b.c // 2(原对象不受影响)\n * ```\n */\nexport default function deepClone<T>(v: T, cache: WeakMap<object, unknown> = new WeakMap<object, unknown>()): T {\n // 基本类型直接返回\n if (v === null || typeof v !== 'object') {\n return v;\n }\n\n // 检测循环引用\n if (cache.has(v as object)) {\n return cache.get(v as object) as T;\n }\n\n if (Array.isArray(v)) {\n const cloned: unknown[] = [];\n cache.set(v as object, cloned);\n for (let i = 0; i < v.length; i++) {\n cloned[i] = deepClone(v[i], cache);\n }\n return cloned as T;\n }\n\n if (v instanceof Date) {\n return new Date(v.getTime()) as T;\n }\n\n if (v instanceof RegExp) {\n return new RegExp(v.source, v.flags) as T;\n }\n\n if (v instanceof Map) {\n const cloned = new Map();\n cache.set(v as object, cloned);\n for (const [key, value] of v) {\n cloned.set(key, deepClone(value, cache));\n }\n return cloned as T;\n }\n\n if (v instanceof Set) {\n const cloned = new Set();\n cache.set(v as object, cloned);\n for (const value of v) {\n cloned.add(deepClone(value, cache));\n }\n return cloned as T;\n }\n\n if (v instanceof WeakMap) {\n throw new Error('Cannot clone WeakMap');\n }\n\n if (v instanceof WeakSet) {\n throw new Error('Cannot clone WeakSet');\n }\n\n if (isObject(v)) {\n const cloned: Record<string, unknown> = {};\n cache.set(v as object, cloned);\n for (const key in v) {\n if (Object.prototype.hasOwnProperty.call(v, key)) {\n cloned[key] = deepClone(v[key], cache);\n }\n }\n return cloned as T;\n }\n\n return v;\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAwB,UAAa,GAAM,wBAAkC,IAAI,SAA0B,EAAK;AAE9G,KAAI,MAAM,QAAQ,OAAO,MAAM,SAC7B,QAAO;AAIT,KAAI,MAAM,IAAI,EAAY,CACxB,QAAO,MAAM,IAAI,EAAY;AAG/B,KAAI,MAAM,QAAQ,EAAE,EAAE;EACpB,MAAM,SAAoB,EAAE;AAC5B,QAAM,IAAI,GAAa,OAAO;AAC9B,OAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,IAC5B,QAAO,KAAK,UAAU,EAAE,IAAI,MAAM;AAEpC,SAAO;;AAGT,KAAI,aAAa,KACf,QAAO,IAAI,KAAK,EAAE,SAAS,CAAC;AAG9B,KAAI,aAAa,OACf,QAAO,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM;AAGtC,KAAI,aAAa,KAAK;EACpB,MAAM,yBAAS,IAAI,KAAK;AACxB,QAAM,IAAI,GAAa,OAAO;AAC9B,OAAK,MAAM,CAAC,KAAK,UAAU,EACzB,QAAO,IAAI,KAAK,UAAU,OAAO,MAAM,CAAC;AAE1C,SAAO;;AAGT,KAAI,aAAa,KAAK;EACpB,MAAM,yBAAS,IAAI,KAAK;AACxB,QAAM,IAAI,GAAa,OAAO;AAC9B,OAAK,MAAM,SAAS,EAClB,QAAO,IAAI,UAAU,OAAO,MAAM,CAAC;AAErC,SAAO;;AAGT,KAAI,aAAa,QACf,OAAM,IAAI,MAAM,uBAAuB;AAGzC,KAAI,aAAa,QACf,OAAM,IAAI,MAAM,uBAAuB;AAGzC,KAAI,SAAS,EAAE,EAAE;EACf,MAAM,SAAkC,EAAE;AAC1C,QAAM,IAAI,GAAa,OAAO;AAC9B,OAAK,MAAM,OAAO,EAChB,KAAI,OAAO,UAAU,eAAe,KAAK,GAAG,IAAI,CAC9C,QAAO,OAAO,UAAU,EAAE,MAAM,MAAM;AAG1C,SAAO;;AAGT,QAAO"}
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为数组
4
4
  * @example
5
5
  * ```ts
6
- * import isArray from '@tw/utils/isArray'
6
+ * import isArray from '@tanwan/utils/isArray'
7
7
  * isArray([1, 2, 3]) // true
8
8
  * isArray('hello') // false
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为数组
4
4
  * @example
5
5
  * ```ts
6
- * import isArray from '@tw/utils/isArray'
6
+ * import isArray from '@tanwan/utils/isArray'
7
7
  * isArray([1, 2, 3]) // true
8
8
  * isArray('hello') // false
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为数组
4
4
  * @example
5
5
  * ```ts
6
- * import isArray from '@tw/utils/isArray'
6
+ * import isArray from '@tanwan/utils/isArray'
7
7
  * isArray([1, 2, 3]) // true
8
8
  * isArray('hello') // false
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为数组
4
4
  * @example
5
5
  * ```ts
6
- * import isArray from '@tw/utils/isArray'
6
+ * import isArray from '@tanwan/utils/isArray'
7
7
  * isArray([1, 2, 3]) // true
8
8
  * isArray('hello') // false
9
9
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"isArray.js","names":[],"sources":["../../src/base/isArray/index.ts"],"sourcesContent":["/**\n * 检测变量是否为数组\n * @example\n * ```ts\n * import isArray from '@tw/utils/isArray'\n * isArray([1, 2, 3]) // true\n * isArray('hello') // false\n * ```\n */\nexport default function isArray<T>(v: unknown): v is T[] {\n return Array.isArray(v);\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,QAAW,GAAsB;AACvD,QAAO,MAAM,QAAQ,EAAE"}
1
+ {"version":3,"file":"isArray.js","names":[],"sources":["../../src/base/isArray/index.ts"],"sourcesContent":["/**\n * 检测变量是否为数组\n * @example\n * ```ts\n * import isArray from '@tanwan/utils/isArray'\n * isArray([1, 2, 3]) // true\n * isArray('hello') // false\n * ```\n */\nexport default function isArray<T>(v: unknown): v is T[] {\n return Array.isArray(v);\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,QAAW,GAAsB;AACvD,QAAO,MAAM,QAAQ,EAAE"}
@@ -0,0 +1,42 @@
1
+ const require_base_isObject = require("./isObject.cjs");
2
+ //#region src/base/isEmpty/index.ts
3
+ /**
4
+ * 判断值是否为空
5
+ *
6
+ * 以下情况视为空:
7
+ * - `null` / `undefined`
8
+ * - 空字符串 `''`
9
+ * - 空数组 `[]`
10
+ * - 普通空对象 `{}`
11
+ * - 空 `Map` / 空 `Set`
12
+ *
13
+ * 数字 `0`、布尔值 `false` 等视为非空
14
+ *
15
+ * @param value - 待检测的值
16
+ * @returns 是否为空
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * import isEmpty from '@tanwan/utils/isEmpty'
21
+ * isEmpty(null) // true
22
+ * isEmpty(undefined) // true
23
+ * isEmpty('') // true
24
+ * isEmpty([]) // true
25
+ * isEmpty({}) // true
26
+ * isEmpty(new Map()) // true
27
+ * isEmpty(new Set()) // true
28
+ * isEmpty(0) // false
29
+ * isEmpty(false) // false
30
+ * isEmpty('hello') // false
31
+ * ```
32
+ */
33
+ function isEmpty(value) {
34
+ if (value === null || value === void 0) return true;
35
+ if (typeof value === "string") return value.length === 0;
36
+ if (Array.isArray(value)) return value.length === 0;
37
+ if (value instanceof Map || value instanceof Set) return value.size === 0;
38
+ if (require_base_isObject(value)) return Object.keys(value).length === 0;
39
+ return false;
40
+ }
41
+ //#endregion
42
+ module.exports = isEmpty;
@@ -0,0 +1,34 @@
1
+ //#region src/base/isEmpty/index.d.ts
2
+ /**
3
+ * 判断值是否为空
4
+ *
5
+ * 以下情况视为空:
6
+ * - `null` / `undefined`
7
+ * - 空字符串 `''`
8
+ * - 空数组 `[]`
9
+ * - 普通空对象 `{}`
10
+ * - 空 `Map` / 空 `Set`
11
+ *
12
+ * 数字 `0`、布尔值 `false` 等视为非空
13
+ *
14
+ * @param value - 待检测的值
15
+ * @returns 是否为空
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import isEmpty from '@tanwan/utils/isEmpty'
20
+ * isEmpty(null) // true
21
+ * isEmpty(undefined) // true
22
+ * isEmpty('') // true
23
+ * isEmpty([]) // true
24
+ * isEmpty({}) // true
25
+ * isEmpty(new Map()) // true
26
+ * isEmpty(new Set()) // true
27
+ * isEmpty(0) // false
28
+ * isEmpty(false) // false
29
+ * isEmpty('hello') // false
30
+ * ```
31
+ */
32
+ declare function isEmpty(value: unknown): boolean;
33
+ export = isEmpty;
34
+ //# sourceMappingURL=isEmpty.d.cts.map