@tanwan/utils 1.0.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 (132) hide show
  1. package/dist/array/chunk.cjs +17 -0
  2. package/dist/array/chunk.d.cts +13 -0
  3. package/dist/array/chunk.d.cts.map +1 -0
  4. package/dist/array/chunk.d.ts +14 -0
  5. package/dist/array/chunk.d.ts.map +1 -0
  6. package/dist/array/chunk.js +19 -0
  7. package/dist/array/chunk.js.map +1 -0
  8. package/dist/array/flatten.cjs +19 -0
  9. package/dist/array/flatten.d.cts +13 -0
  10. package/dist/array/flatten.d.cts.map +1 -0
  11. package/dist/array/flatten.d.ts +14 -0
  12. package/dist/array/flatten.d.ts.map +1 -0
  13. package/dist/array/flatten.js +21 -0
  14. package/dist/array/flatten.js.map +1 -0
  15. package/dist/array/shuffle.cjs +19 -0
  16. package/dist/array/shuffle.d.cts +12 -0
  17. package/dist/array/shuffle.d.cts.map +1 -0
  18. package/dist/array/shuffle.d.ts +13 -0
  19. package/dist/array/shuffle.d.ts.map +1 -0
  20. package/dist/array/shuffle.js +21 -0
  21. package/dist/array/shuffle.js.map +1 -0
  22. package/dist/array/unique.cjs +15 -0
  23. package/dist/array/unique.d.cts +13 -0
  24. package/dist/array/unique.d.cts.map +1 -0
  25. package/dist/array/unique.d.ts +14 -0
  26. package/dist/array/unique.d.ts.map +1 -0
  27. package/dist/array/unique.js +17 -0
  28. package/dist/array/unique.js.map +1 -0
  29. package/dist/base/deepClone.cjs +48 -0
  30. package/dist/base/deepClone.d.cts +15 -0
  31. package/dist/base/deepClone.d.cts.map +1 -0
  32. package/dist/base/deepClone.d.ts +16 -0
  33. package/dist/base/deepClone.d.ts.map +1 -0
  34. package/dist/base/deepClone.js +50 -0
  35. package/dist/base/deepClone.js.map +1 -0
  36. package/dist/base/isArray.cjs +15 -0
  37. package/dist/base/isArray.d.cts +13 -0
  38. package/dist/base/isArray.d.cts.map +1 -0
  39. package/dist/base/isArray.d.ts +14 -0
  40. package/dist/base/isArray.d.ts.map +1 -0
  41. package/dist/base/isArray.js +17 -0
  42. package/dist/base/isArray.js.map +1 -0
  43. package/dist/base/isObject.cjs +16 -0
  44. package/dist/base/isObject.d.cts +14 -0
  45. package/dist/base/isObject.d.cts.map +1 -0
  46. package/dist/base/isObject.d.ts +15 -0
  47. package/dist/base/isObject.d.ts.map +1 -0
  48. package/dist/base/isObject.js +18 -0
  49. package/dist/base/isObject.js.map +1 -0
  50. package/dist/base/isString.cjs +15 -0
  51. package/dist/base/isString.d.cts +13 -0
  52. package/dist/base/isString.d.cts.map +1 -0
  53. package/dist/base/isString.d.ts +14 -0
  54. package/dist/base/isString.d.ts.map +1 -0
  55. package/dist/base/isString.js +17 -0
  56. package/dist/base/isString.js.map +1 -0
  57. package/dist/date/formatDate.cjs +38 -0
  58. package/dist/date/formatDate.d.cts +13 -0
  59. package/dist/date/formatDate.d.cts.map +1 -0
  60. package/dist/date/formatDate.d.ts +14 -0
  61. package/dist/date/formatDate.d.ts.map +1 -0
  62. package/dist/date/formatDate.js +40 -0
  63. package/dist/date/formatDate.js.map +1 -0
  64. package/dist/date/getRelativeTime.cjs +29 -0
  65. package/dist/date/getRelativeTime.d.cts +13 -0
  66. package/dist/date/getRelativeTime.d.cts.map +1 -0
  67. package/dist/date/getRelativeTime.d.ts +14 -0
  68. package/dist/date/getRelativeTime.d.ts.map +1 -0
  69. package/dist/date/getRelativeTime.js +31 -0
  70. package/dist/date/getRelativeTime.js.map +1 -0
  71. package/dist/function/debounce.cjs +29 -0
  72. package/dist/function/debounce.d.cts +14 -0
  73. package/dist/function/debounce.d.cts.map +1 -0
  74. package/dist/function/debounce.d.ts +15 -0
  75. package/dist/function/debounce.d.ts.map +1 -0
  76. package/dist/function/debounce.js +31 -0
  77. package/dist/function/debounce.js.map +1 -0
  78. package/dist/function/throttle.cjs +28 -0
  79. package/dist/function/throttle.d.cts +14 -0
  80. package/dist/function/throttle.d.cts.map +1 -0
  81. package/dist/function/throttle.d.ts +15 -0
  82. package/dist/function/throttle.d.ts.map +1 -0
  83. package/dist/function/throttle.js +30 -0
  84. package/dist/function/throttle.js.map +1 -0
  85. package/dist/index.cjs +37 -0
  86. package/dist/index.d.cts +19 -0
  87. package/dist/index.d.ts +19 -0
  88. package/dist/index.iife.js +1 -0
  89. package/dist/index.js +19 -0
  90. package/dist/number/clamp.cjs +16 -0
  91. package/dist/number/clamp.d.cts +14 -0
  92. package/dist/number/clamp.d.cts.map +1 -0
  93. package/dist/number/clamp.d.ts +15 -0
  94. package/dist/number/clamp.d.ts.map +1 -0
  95. package/dist/number/clamp.js +18 -0
  96. package/dist/number/clamp.js.map +1 -0
  97. package/dist/number/formatThousands.cjs +17 -0
  98. package/dist/number/formatThousands.d.cts +13 -0
  99. package/dist/number/formatThousands.d.cts.map +1 -0
  100. package/dist/number/formatThousands.d.ts +14 -0
  101. package/dist/number/formatThousands.d.ts.map +1 -0
  102. package/dist/number/formatThousands.js +19 -0
  103. package/dist/number/formatThousands.js.map +1 -0
  104. package/dist/number/randomInt.cjs +15 -0
  105. package/dist/number/randomInt.d.cts +13 -0
  106. package/dist/number/randomInt.d.cts.map +1 -0
  107. package/dist/number/randomInt.d.ts +14 -0
  108. package/dist/number/randomInt.d.ts.map +1 -0
  109. package/dist/number/randomInt.js +17 -0
  110. package/dist/number/randomInt.js.map +1 -0
  111. package/dist/string/camelCase.cjs +12 -0
  112. package/dist/string/camelCase.d.cts +7 -0
  113. package/dist/string/camelCase.d.cts.map +1 -0
  114. package/dist/string/camelCase.d.ts +8 -0
  115. package/dist/string/camelCase.d.ts.map +1 -0
  116. package/dist/string/camelCase.js +14 -0
  117. package/dist/string/camelCase.js.map +1 -0
  118. package/dist/string/capitalize.cjs +16 -0
  119. package/dist/string/capitalize.d.cts +13 -0
  120. package/dist/string/capitalize.d.cts.map +1 -0
  121. package/dist/string/capitalize.d.ts +14 -0
  122. package/dist/string/capitalize.d.ts.map +1 -0
  123. package/dist/string/capitalize.js +18 -0
  124. package/dist/string/capitalize.js.map +1 -0
  125. package/dist/string/kebabCase.cjs +9 -0
  126. package/dist/string/kebabCase.d.cts +7 -0
  127. package/dist/string/kebabCase.d.cts.map +1 -0
  128. package/dist/string/kebabCase.d.ts +8 -0
  129. package/dist/string/kebabCase.d.ts.map +1 -0
  130. package/dist/string/kebabCase.js +11 -0
  131. package/dist/string/kebabCase.js.map +1 -0
  132. package/package.json +104 -0
@@ -0,0 +1,17 @@
1
+ //#region src/array/chunk/index.ts
2
+ /**
3
+ * 数组分块
4
+ * @example
5
+ * ```ts
6
+ * import chunk from '@tw/utils/chunk'
7
+ * chunk([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
8
+ * chunk(['a', 'b', 'c'], 1) // [['a'], ['b'], ['c']]
9
+ * ```
10
+ */
11
+ function chunk(arr, size) {
12
+ const result = [];
13
+ for (let i = 0; i < arr.length; i += size) result.push(arr.slice(i, i + size));
14
+ return result;
15
+ }
16
+ //#endregion
17
+ module.exports = chunk;
@@ -0,0 +1,13 @@
1
+ //#region src/array/chunk/index.d.ts
2
+ /**
3
+ * 数组分块
4
+ * @example
5
+ * ```ts
6
+ * import chunk from '@tw/utils/chunk'
7
+ * chunk([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
8
+ * chunk(['a', 'b', 'c'], 1) // [['a'], ['b'], ['c']]
9
+ * ```
10
+ */
11
+ declare function chunk<T>(arr: T[], size: number): T[][];
12
+ export = chunk;
13
+ //# sourceMappingURL=chunk.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk.d.cts","names":[],"sources":["../../src/array/chunk/index.ts"],"mappings":";;;;;;;;;;iBASwB,KAAA,GAAA,CAAS,GAAA,EAAK,CAAA,IAAK,IAAA,WAAe,CAAA;AAAA"}
@@ -0,0 +1,14 @@
1
+ //#region src/array/chunk/index.d.ts
2
+ /**
3
+ * 数组分块
4
+ * @example
5
+ * ```ts
6
+ * import chunk from '@tw/utils/chunk'
7
+ * chunk([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
8
+ * chunk(['a', 'b', 'c'], 1) // [['a'], ['b'], ['c']]
9
+ * ```
10
+ */
11
+ declare function chunk<T>(arr: T[], size: number): T[][];
12
+ //#endregion
13
+ export { chunk as default };
14
+ //# sourceMappingURL=chunk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk.d.ts","names":[],"sources":["../../src/array/chunk/index.ts"],"mappings":";;;;;;;;;;iBASwB,KAAA,GAAA,CAAS,GAAA,EAAK,CAAA,IAAK,IAAA,WAAe,CAAA"}
@@ -0,0 +1,19 @@
1
+ //#region src/array/chunk/index.ts
2
+ /**
3
+ * 数组分块
4
+ * @example
5
+ * ```ts
6
+ * import chunk from '@tw/utils/chunk'
7
+ * chunk([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
8
+ * chunk(['a', 'b', 'c'], 1) // [['a'], ['b'], ['c']]
9
+ * ```
10
+ */
11
+ function chunk(arr, size) {
12
+ const result = [];
13
+ for (let i = 0; i < arr.length; i += size) result.push(arr.slice(i, i + size));
14
+ return result;
15
+ }
16
+ //#endregion
17
+ export { chunk as default };
18
+
19
+ //# sourceMappingURL=chunk.js.map
@@ -0,0 +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"}
@@ -0,0 +1,19 @@
1
+ //#region src/array/flatten/index.ts
2
+ /**
3
+ * 数组扁平化
4
+ * @example
5
+ * ```ts
6
+ * import flatten from '@tw/utils/flatten'
7
+ * flatten([1, [2, [3, 4]]]) // [1, 2, 3, 4]
8
+ * flatten([1, [2, 3]], 1) // [1, 2, 3]
9
+ * ```
10
+ */
11
+ function flatten(arr, depth = Infinity) {
12
+ if (depth === 0) return arr;
13
+ const result = [];
14
+ for (const item of arr) if (Array.isArray(item) && depth > 0) result.push(...flatten(item, depth - 1));
15
+ else result.push(item);
16
+ return result;
17
+ }
18
+ //#endregion
19
+ module.exports = flatten;
@@ -0,0 +1,13 @@
1
+ //#region src/array/flatten/index.d.ts
2
+ /**
3
+ * 数组扁平化
4
+ * @example
5
+ * ```ts
6
+ * import flatten from '@tw/utils/flatten'
7
+ * flatten([1, [2, [3, 4]]]) // [1, 2, 3, 4]
8
+ * flatten([1, [2, 3]], 1) // [1, 2, 3]
9
+ * ```
10
+ */
11
+ declare function flatten<T>(arr: unknown[], depth?: number): T[];
12
+ export = flatten;
13
+ //# sourceMappingURL=flatten.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatten.d.cts","names":[],"sources":["../../src/array/flatten/index.ts"],"mappings":";;;;;;;;;;iBASwB,OAAA,GAAA,CAAW,GAAA,aAAgB,KAAA,YAA2B,CAAA;AAAA"}
@@ -0,0 +1,14 @@
1
+ //#region src/array/flatten/index.d.ts
2
+ /**
3
+ * 数组扁平化
4
+ * @example
5
+ * ```ts
6
+ * import flatten from '@tw/utils/flatten'
7
+ * flatten([1, [2, [3, 4]]]) // [1, 2, 3, 4]
8
+ * flatten([1, [2, 3]], 1) // [1, 2, 3]
9
+ * ```
10
+ */
11
+ declare function flatten<T>(arr: unknown[], depth?: number): T[];
12
+ //#endregion
13
+ export { flatten as default };
14
+ //# sourceMappingURL=flatten.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatten.d.ts","names":[],"sources":["../../src/array/flatten/index.ts"],"mappings":";;;;;;;;;;iBASwB,OAAA,GAAA,CAAW,GAAA,aAAgB,KAAA,YAA2B,CAAA"}
@@ -0,0 +1,21 @@
1
+ //#region src/array/flatten/index.ts
2
+ /**
3
+ * 数组扁平化
4
+ * @example
5
+ * ```ts
6
+ * import flatten from '@tw/utils/flatten'
7
+ * flatten([1, [2, [3, 4]]]) // [1, 2, 3, 4]
8
+ * flatten([1, [2, 3]], 1) // [1, 2, 3]
9
+ * ```
10
+ */
11
+ function flatten(arr, depth = Infinity) {
12
+ if (depth === 0) return arr;
13
+ const result = [];
14
+ for (const item of arr) if (Array.isArray(item) && depth > 0) result.push(...flatten(item, depth - 1));
15
+ else result.push(item);
16
+ return result;
17
+ }
18
+ //#endregion
19
+ export { flatten as default };
20
+
21
+ //# sourceMappingURL=flatten.js.map
@@ -0,0 +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"}
@@ -0,0 +1,19 @@
1
+ //#region src/array/shuffle/index.ts
2
+ /**
3
+ * 数组洗牌(Fisher-Yates 算法)
4
+ * @example
5
+ * ```ts
6
+ * import shuffle from '@tw/utils/shuffle'
7
+ * shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4](随机)
8
+ * ```
9
+ */
10
+ function shuffle(arr) {
11
+ const result = [...arr];
12
+ for (let i = result.length - 1; i > 0; i--) {
13
+ const j = Math.floor(Math.random() * (i + 1));
14
+ [result[i], result[j]] = [result[j], result[i]];
15
+ }
16
+ return result;
17
+ }
18
+ //#endregion
19
+ module.exports = shuffle;
@@ -0,0 +1,12 @@
1
+ //#region src/array/shuffle/index.d.ts
2
+ /**
3
+ * 数组洗牌(Fisher-Yates 算法)
4
+ * @example
5
+ * ```ts
6
+ * import shuffle from '@tw/utils/shuffle'
7
+ * shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4](随机)
8
+ * ```
9
+ */
10
+ declare function shuffle<T>(arr: T[]): T[];
11
+ export = shuffle;
12
+ //# sourceMappingURL=shuffle.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shuffle.d.cts","names":[],"sources":["../../src/array/shuffle/index.ts"],"mappings":";;;;;;;;;iBAQwB,OAAA,GAAA,CAAW,GAAA,EAAK,CAAA,KAAM,CAAA;AAAA"}
@@ -0,0 +1,13 @@
1
+ //#region src/array/shuffle/index.d.ts
2
+ /**
3
+ * 数组洗牌(Fisher-Yates 算法)
4
+ * @example
5
+ * ```ts
6
+ * import shuffle from '@tw/utils/shuffle'
7
+ * shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4](随机)
8
+ * ```
9
+ */
10
+ declare function shuffle<T>(arr: T[]): T[];
11
+ //#endregion
12
+ export { shuffle as default };
13
+ //# sourceMappingURL=shuffle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shuffle.d.ts","names":[],"sources":["../../src/array/shuffle/index.ts"],"mappings":";;;;;;;;;iBAQwB,OAAA,GAAA,CAAW,GAAA,EAAK,CAAA,KAAM,CAAA"}
@@ -0,0 +1,21 @@
1
+ //#region src/array/shuffle/index.ts
2
+ /**
3
+ * 数组洗牌(Fisher-Yates 算法)
4
+ * @example
5
+ * ```ts
6
+ * import shuffle from '@tw/utils/shuffle'
7
+ * shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4](随机)
8
+ * ```
9
+ */
10
+ function shuffle(arr) {
11
+ const result = [...arr];
12
+ for (let i = result.length - 1; i > 0; i--) {
13
+ const j = Math.floor(Math.random() * (i + 1));
14
+ [result[i], result[j]] = [result[j], result[i]];
15
+ }
16
+ return result;
17
+ }
18
+ //#endregion
19
+ export { shuffle as default };
20
+
21
+ //# sourceMappingURL=shuffle.js.map
@@ -0,0 +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"}
@@ -0,0 +1,15 @@
1
+ //#region src/array/unique/index.ts
2
+ /**
3
+ * 数组去重
4
+ * @example
5
+ * ```ts
6
+ * import unique from '@tw/utils/unique'
7
+ * unique([1, 2, 2, 3]) // [1, 2, 3]
8
+ * unique(['a', 'b', 'a']) // ['a', 'b']
9
+ * ```
10
+ */
11
+ function unique(arr) {
12
+ return [...new Set(arr)];
13
+ }
14
+ //#endregion
15
+ module.exports = unique;
@@ -0,0 +1,13 @@
1
+ //#region src/array/unique/index.d.ts
2
+ /**
3
+ * 数组去重
4
+ * @example
5
+ * ```ts
6
+ * import unique from '@tw/utils/unique'
7
+ * unique([1, 2, 2, 3]) // [1, 2, 3]
8
+ * unique(['a', 'b', 'a']) // ['a', 'b']
9
+ * ```
10
+ */
11
+ declare function unique<T>(arr: T[]): T[];
12
+ export = unique;
13
+ //# sourceMappingURL=unique.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unique.d.cts","names":[],"sources":["../../src/array/unique/index.ts"],"mappings":";;;;;;;;;;iBASwB,MAAA,GAAA,CAAU,GAAA,EAAK,CAAA,KAAM,CAAA;AAAA"}
@@ -0,0 +1,14 @@
1
+ //#region src/array/unique/index.d.ts
2
+ /**
3
+ * 数组去重
4
+ * @example
5
+ * ```ts
6
+ * import unique from '@tw/utils/unique'
7
+ * unique([1, 2, 2, 3]) // [1, 2, 3]
8
+ * unique(['a', 'b', 'a']) // ['a', 'b']
9
+ * ```
10
+ */
11
+ declare function unique<T>(arr: T[]): T[];
12
+ //#endregion
13
+ export { unique as default };
14
+ //# sourceMappingURL=unique.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unique.d.ts","names":[],"sources":["../../src/array/unique/index.ts"],"mappings":";;;;;;;;;;iBASwB,MAAA,GAAA,CAAU,GAAA,EAAK,CAAA,KAAM,CAAA"}
@@ -0,0 +1,17 @@
1
+ //#region src/array/unique/index.ts
2
+ /**
3
+ * 数组去重
4
+ * @example
5
+ * ```ts
6
+ * import unique from '@tw/utils/unique'
7
+ * unique([1, 2, 2, 3]) // [1, 2, 3]
8
+ * unique(['a', 'b', 'a']) // ['a', 'b']
9
+ * ```
10
+ */
11
+ function unique(arr) {
12
+ return [...new Set(arr)];
13
+ }
14
+ //#endregion
15
+ export { unique as default };
16
+
17
+ //# sourceMappingURL=unique.js.map
@@ -0,0 +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"}
@@ -0,0 +1,48 @@
1
+ const require_base_isObject = require("./isObject.cjs");
2
+ //#region src/base/deepClone/index.ts
3
+ /**
4
+ * 深拷贝变量
5
+ * @example
6
+ * ```ts
7
+ * import deepClone from '@tw/utils/deepClone'
8
+ * const obj = { a: 1, b: { c: 2 } }
9
+ * const clone = deepClone(obj)
10
+ * clone.b.c = 3
11
+ * obj.b.c // 2(原对象不受影响)
12
+ * ```
13
+ */
14
+ function deepClone(v, cache = /* @__PURE__ */ new WeakMap()) {
15
+ if (v === null || typeof v !== "object") return v;
16
+ if (cache.has(v)) return cache.get(v);
17
+ if (Array.isArray(v)) {
18
+ const cloned = [];
19
+ cache.set(v, cloned);
20
+ for (let i = 0; i < v.length; i++) cloned[i] = deepClone(v[i], cache);
21
+ return cloned;
22
+ }
23
+ if (v instanceof Date) return new Date(v.getTime());
24
+ if (v instanceof RegExp) return new RegExp(v.source, v.flags);
25
+ if (v instanceof Map) {
26
+ const cloned = /* @__PURE__ */ new Map();
27
+ cache.set(v, cloned);
28
+ for (const [key, value] of v) cloned.set(key, deepClone(value, cache));
29
+ return cloned;
30
+ }
31
+ if (v instanceof Set) {
32
+ const cloned = /* @__PURE__ */ new Set();
33
+ cache.set(v, cloned);
34
+ for (const value of v) cloned.add(deepClone(value, cache));
35
+ return cloned;
36
+ }
37
+ if (v instanceof WeakMap) throw new Error("Cannot clone WeakMap");
38
+ if (v instanceof WeakSet) throw new Error("Cannot clone WeakSet");
39
+ if (require_base_isObject(v)) {
40
+ const cloned = {};
41
+ cache.set(v, cloned);
42
+ for (const key in v) if (Object.prototype.hasOwnProperty.call(v, key)) cloned[key] = deepClone(v[key], cache);
43
+ return cloned;
44
+ }
45
+ return v;
46
+ }
47
+ //#endregion
48
+ module.exports = deepClone;
@@ -0,0 +1,15 @@
1
+ //#region src/base/deepClone/index.d.ts
2
+ /**
3
+ * 深拷贝变量
4
+ * @example
5
+ * ```ts
6
+ * import deepClone from '@tw/utils/deepClone'
7
+ * const obj = { a: 1, b: { c: 2 } }
8
+ * const clone = deepClone(obj)
9
+ * clone.b.c = 3
10
+ * obj.b.c // 2(原对象不受影响)
11
+ * ```
12
+ */
13
+ declare function deepClone<T>(v: T, cache?: WeakMap<object, unknown>): T;
14
+ export = deepClone;
15
+ //# sourceMappingURL=deepClone.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepClone.d.cts","names":[],"sources":["../../src/base/deepClone/index.ts"],"mappings":";;;;;;;;;;;;iBAawB,SAAA,GAAA,CAAa,CAAA,EAAG,CAAA,EAAG,KAAA,GAAO,OAAA,oBAA4D,CAAA;AAAA"}
@@ -0,0 +1,16 @@
1
+ //#region src/base/deepClone/index.d.ts
2
+ /**
3
+ * 深拷贝变量
4
+ * @example
5
+ * ```ts
6
+ * import deepClone from '@tw/utils/deepClone'
7
+ * const obj = { a: 1, b: { c: 2 } }
8
+ * const clone = deepClone(obj)
9
+ * clone.b.c = 3
10
+ * obj.b.c // 2(原对象不受影响)
11
+ * ```
12
+ */
13
+ declare function deepClone<T>(v: T, cache?: WeakMap<object, unknown>): T;
14
+ //#endregion
15
+ export { deepClone as default };
16
+ //# sourceMappingURL=deepClone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepClone.d.ts","names":[],"sources":["../../src/base/deepClone/index.ts"],"mappings":";;;;;;;;;;;;iBAawB,SAAA,GAAA,CAAa,CAAA,EAAG,CAAA,EAAG,KAAA,GAAO,OAAA,oBAA4D,CAAA"}
@@ -0,0 +1,50 @@
1
+ import isObject from "./isObject.js";
2
+ //#region src/base/deepClone/index.ts
3
+ /**
4
+ * 深拷贝变量
5
+ * @example
6
+ * ```ts
7
+ * import deepClone from '@tw/utils/deepClone'
8
+ * const obj = { a: 1, b: { c: 2 } }
9
+ * const clone = deepClone(obj)
10
+ * clone.b.c = 3
11
+ * obj.b.c // 2(原对象不受影响)
12
+ * ```
13
+ */
14
+ function deepClone(v, cache = /* @__PURE__ */ new WeakMap()) {
15
+ if (v === null || typeof v !== "object") return v;
16
+ if (cache.has(v)) return cache.get(v);
17
+ if (Array.isArray(v)) {
18
+ const cloned = [];
19
+ cache.set(v, cloned);
20
+ for (let i = 0; i < v.length; i++) cloned[i] = deepClone(v[i], cache);
21
+ return cloned;
22
+ }
23
+ if (v instanceof Date) return new Date(v.getTime());
24
+ if (v instanceof RegExp) return new RegExp(v.source, v.flags);
25
+ if (v instanceof Map) {
26
+ const cloned = /* @__PURE__ */ new Map();
27
+ cache.set(v, cloned);
28
+ for (const [key, value] of v) cloned.set(key, deepClone(value, cache));
29
+ return cloned;
30
+ }
31
+ if (v instanceof Set) {
32
+ const cloned = /* @__PURE__ */ new Set();
33
+ cache.set(v, cloned);
34
+ for (const value of v) cloned.add(deepClone(value, cache));
35
+ return cloned;
36
+ }
37
+ if (v instanceof WeakMap) throw new Error("Cannot clone WeakMap");
38
+ if (v instanceof WeakSet) throw new Error("Cannot clone WeakSet");
39
+ if (isObject(v)) {
40
+ const cloned = {};
41
+ cache.set(v, cloned);
42
+ for (const key in v) if (Object.prototype.hasOwnProperty.call(v, key)) cloned[key] = deepClone(v[key], cache);
43
+ return cloned;
44
+ }
45
+ return v;
46
+ }
47
+ //#endregion
48
+ export { deepClone as default };
49
+
50
+ //# sourceMappingURL=deepClone.js.map
@@ -0,0 +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"}
@@ -0,0 +1,15 @@
1
+ //#region src/base/isArray/index.ts
2
+ /**
3
+ * 检测变量是否为数组
4
+ * @example
5
+ * ```ts
6
+ * import isArray from '@tw/utils/isArray'
7
+ * isArray([1, 2, 3]) // true
8
+ * isArray('hello') // false
9
+ * ```
10
+ */
11
+ function isArray(v) {
12
+ return Array.isArray(v);
13
+ }
14
+ //#endregion
15
+ module.exports = isArray;
@@ -0,0 +1,13 @@
1
+ //#region src/base/isArray/index.d.ts
2
+ /**
3
+ * 检测变量是否为数组
4
+ * @example
5
+ * ```ts
6
+ * import isArray from '@tw/utils/isArray'
7
+ * isArray([1, 2, 3]) // true
8
+ * isArray('hello') // false
9
+ * ```
10
+ */
11
+ declare function isArray<T>(v: unknown): v is T[];
12
+ export = isArray;
13
+ //# sourceMappingURL=isArray.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isArray.d.cts","names":[],"sources":["../../src/base/isArray/index.ts"],"mappings":";;;;;;;;;;iBASwB,OAAA,GAAA,CAAW,CAAA,YAAa,CAAA,IAAK,CAAA;AAAA"}
@@ -0,0 +1,14 @@
1
+ //#region src/base/isArray/index.d.ts
2
+ /**
3
+ * 检测变量是否为数组
4
+ * @example
5
+ * ```ts
6
+ * import isArray from '@tw/utils/isArray'
7
+ * isArray([1, 2, 3]) // true
8
+ * isArray('hello') // false
9
+ * ```
10
+ */
11
+ declare function isArray<T>(v: unknown): v is T[];
12
+ //#endregion
13
+ export { isArray as default };
14
+ //# sourceMappingURL=isArray.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isArray.d.ts","names":[],"sources":["../../src/base/isArray/index.ts"],"mappings":";;;;;;;;;;iBASwB,OAAA,GAAA,CAAW,CAAA,YAAa,CAAA,IAAK,CAAA"}
@@ -0,0 +1,17 @@
1
+ //#region src/base/isArray/index.ts
2
+ /**
3
+ * 检测变量是否为数组
4
+ * @example
5
+ * ```ts
6
+ * import isArray from '@tw/utils/isArray'
7
+ * isArray([1, 2, 3]) // true
8
+ * isArray('hello') // false
9
+ * ```
10
+ */
11
+ function isArray(v) {
12
+ return Array.isArray(v);
13
+ }
14
+ //#endregion
15
+ export { isArray as default };
16
+
17
+ //# sourceMappingURL=isArray.js.map
@@ -0,0 +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"}
@@ -0,0 +1,16 @@
1
+ //#region src/base/isObject/index.ts
2
+ /**
3
+ * 检测变量是否为普通对象(非null、非数组)
4
+ * @example
5
+ * ```ts
6
+ * import isObject from '@tw/utils/isObject'
7
+ * isObject({ a: 1 }) // true
8
+ * isObject(null) // false
9
+ * isObject([1, 2]) // false
10
+ * ```
11
+ */
12
+ function isObject(v) {
13
+ return typeof v === "object" && v !== null && !Array.isArray(v);
14
+ }
15
+ //#endregion
16
+ module.exports = isObject;
@@ -0,0 +1,14 @@
1
+ //#region src/base/isObject/index.d.ts
2
+ /**
3
+ * 检测变量是否为普通对象(非null、非数组)
4
+ * @example
5
+ * ```ts
6
+ * import isObject from '@tw/utils/isObject'
7
+ * isObject({ a: 1 }) // true
8
+ * isObject(null) // false
9
+ * isObject([1, 2]) // false
10
+ * ```
11
+ */
12
+ declare function isObject(v: unknown): v is Record<string, unknown>;
13
+ export = isObject;
14
+ //# sourceMappingURL=isObject.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isObject.d.cts","names":[],"sources":["../../src/base/isObject/index.ts"],"mappings":";;;;;;;;;;;iBAUwB,QAAA,CAAS,CAAA,YAAa,CAAA,IAAK,MAAA;AAAA"}
@@ -0,0 +1,15 @@
1
+ //#region src/base/isObject/index.d.ts
2
+ /**
3
+ * 检测变量是否为普通对象(非null、非数组)
4
+ * @example
5
+ * ```ts
6
+ * import isObject from '@tw/utils/isObject'
7
+ * isObject({ a: 1 }) // true
8
+ * isObject(null) // false
9
+ * isObject([1, 2]) // false
10
+ * ```
11
+ */
12
+ declare function isObject(v: unknown): v is Record<string, unknown>;
13
+ //#endregion
14
+ export { isObject as default };
15
+ //# sourceMappingURL=isObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isObject.d.ts","names":[],"sources":["../../src/base/isObject/index.ts"],"mappings":";;;;;;;;;;;iBAUwB,QAAA,CAAS,CAAA,YAAa,CAAA,IAAK,MAAA"}
@@ -0,0 +1,18 @@
1
+ //#region src/base/isObject/index.ts
2
+ /**
3
+ * 检测变量是否为普通对象(非null、非数组)
4
+ * @example
5
+ * ```ts
6
+ * import isObject from '@tw/utils/isObject'
7
+ * isObject({ a: 1 }) // true
8
+ * isObject(null) // false
9
+ * isObject([1, 2]) // false
10
+ * ```
11
+ */
12
+ function isObject(v) {
13
+ return typeof v === "object" && v !== null && !Array.isArray(v);
14
+ }
15
+ //#endregion
16
+ export { isObject as default };
17
+
18
+ //# sourceMappingURL=isObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isObject.js","names":[],"sources":["../../src/base/isObject/index.ts"],"sourcesContent":["/**\n * 检测变量是否为普通对象(非null、非数组)\n * @example\n * ```ts\n * import isObject from '@tw/utils/isObject'\n * isObject({ a: 1 }) // true\n * isObject(null) // false\n * isObject([1, 2]) // false\n * ```\n */\nexport default function isObject(v: unknown): v is Record<string, unknown> {\n return typeof v === 'object' && v !== null && !Array.isArray(v);\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAwB,SAAS,GAA0C;AACzE,QAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,CAAC,MAAM,QAAQ,EAAE"}