@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isEmpty.d.cts","names":[],"sources":["../../src/base/isEmpty/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgCwB,OAAA,CAAQ,KAAA;AAAA"}
@@ -0,0 +1,35 @@
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
+ //#endregion
34
+ export { isEmpty as default };
35
+ //# sourceMappingURL=isEmpty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isEmpty.d.ts","names":[],"sources":["../../src/base/isEmpty/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgCwB,OAAA,CAAQ,KAAA"}
@@ -0,0 +1,44 @@
1
+ import isObject from "./isObject.js";
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 (isObject(value)) return Object.keys(value).length === 0;
39
+ return false;
40
+ }
41
+ //#endregion
42
+ export { isEmpty as default };
43
+
44
+ //# sourceMappingURL=isEmpty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isEmpty.js","names":[],"sources":["../../src/base/isEmpty/index.ts"],"sourcesContent":["import isObject from '../isObject';\n\n/**\n * 判断值是否为空\n *\n * 以下情况视为空:\n * - `null` / `undefined`\n * - 空字符串 `''`\n * - 空数组 `[]`\n * - 普通空对象 `{}`\n * - 空 `Map` / 空 `Set`\n *\n * 数字 `0`、布尔值 `false` 等视为非空\n *\n * @param value - 待检测的值\n * @returns 是否为空\n *\n * @example\n * ```ts\n * import isEmpty from '@tanwan/utils/isEmpty'\n * isEmpty(null) // true\n * isEmpty(undefined) // true\n * isEmpty('') // true\n * isEmpty([]) // true\n * isEmpty({}) // true\n * isEmpty(new Map()) // true\n * isEmpty(new Set()) // true\n * isEmpty(0) // false\n * isEmpty(false) // false\n * isEmpty('hello') // false\n * ```\n */\nexport default function isEmpty(value: unknown): boolean {\n if (value === null || value === undefined) {\n return true;\n }\n\n if (typeof value === 'string') {\n return value.length === 0;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n\n if (value instanceof Map || value instanceof Set) {\n return value.size === 0;\n }\n\n if (isObject(value)) {\n return Object.keys(value).length === 0;\n }\n\n return false;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,SAAwB,QAAQ,OAAyB;AACvD,KAAI,UAAU,QAAQ,UAAU,KAAA,EAC9B,QAAO;AAGT,KAAI,OAAO,UAAU,SACnB,QAAO,MAAM,WAAW;AAG1B,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,WAAW;AAG1B,KAAI,iBAAiB,OAAO,iBAAiB,IAC3C,QAAO,MAAM,SAAS;AAGxB,KAAI,SAAS,MAAM,CACjB,QAAO,OAAO,KAAK,MAAM,CAAC,WAAW;AAGvC,QAAO"}
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为普通对象(非null、非数组)
4
4
  * @example
5
5
  * ```ts
6
- * import isObject from '@tw/utils/isObject'
6
+ * import isObject from '@tanwan/utils/isObject'
7
7
  * isObject({ a: 1 }) // true
8
8
  * isObject(null) // false
9
9
  * isObject([1, 2]) // false
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为普通对象(非null、非数组)
4
4
  * @example
5
5
  * ```ts
6
- * import isObject from '@tw/utils/isObject'
6
+ * import isObject from '@tanwan/utils/isObject'
7
7
  * isObject({ a: 1 }) // true
8
8
  * isObject(null) // false
9
9
  * isObject([1, 2]) // false
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为普通对象(非null、非数组)
4
4
  * @example
5
5
  * ```ts
6
- * import isObject from '@tw/utils/isObject'
6
+ * import isObject from '@tanwan/utils/isObject'
7
7
  * isObject({ a: 1 }) // true
8
8
  * isObject(null) // false
9
9
  * isObject([1, 2]) // false
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为普通对象(非null、非数组)
4
4
  * @example
5
5
  * ```ts
6
- * import isObject from '@tw/utils/isObject'
6
+ * import isObject from '@tanwan/utils/isObject'
7
7
  * isObject({ a: 1 }) // true
8
8
  * isObject(null) // false
9
9
  * isObject([1, 2]) // false
@@ -1 +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"}
1
+ {"version":3,"file":"isObject.js","names":[],"sources":["../../src/base/isObject/index.ts"],"sourcesContent":["/**\n * 检测变量是否为普通对象(非null、非数组)\n * @example\n * ```ts\n * import isObject from '@tanwan/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"}
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为字符串
4
4
  * @example
5
5
  * ```ts
6
- * import isString from '@tw/utils/isString'
6
+ * import isString from '@tanwan/utils/isString'
7
7
  * isString('hello') // true
8
8
  * isString(123) // false
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为字符串
4
4
  * @example
5
5
  * ```ts
6
- * import isString from '@tw/utils/isString'
6
+ * import isString from '@tanwan/utils/isString'
7
7
  * isString('hello') // true
8
8
  * isString(123) // false
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为字符串
4
4
  * @example
5
5
  * ```ts
6
- * import isString from '@tw/utils/isString'
6
+ * import isString from '@tanwan/utils/isString'
7
7
  * isString('hello') // true
8
8
  * isString(123) // false
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 检测变量是否为字符串
4
4
  * @example
5
5
  * ```ts
6
- * import isString from '@tw/utils/isString'
6
+ * import isString from '@tanwan/utils/isString'
7
7
  * isString('hello') // true
8
8
  * isString(123) // false
9
9
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"isString.js","names":[],"sources":["../../src/base/isString/index.ts"],"sourcesContent":["/**\n * 检测变量是否为字符串\n * @example\n * ```ts\n * import isString from '@tw/utils/isString'\n * isString('hello') // true\n * isString(123) // false\n * ```\n */\nexport default function isString(v: unknown): v is string {\n return typeof v === 'string';\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,SAAS,GAAyB;AACxD,QAAO,OAAO,MAAM"}
1
+ {"version":3,"file":"isString.js","names":[],"sources":["../../src/base/isString/index.ts"],"sourcesContent":["/**\n * 检测变量是否为字符串\n * @example\n * ```ts\n * import isString from '@tanwan/utils/isString'\n * isString('hello') // true\n * isString(123) // false\n * ```\n */\nexport default function isString(v: unknown): v is string {\n return typeof v === 'string';\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,SAAS,GAAyB;AACxD,QAAO,OAAO,MAAM"}
@@ -3,7 +3,7 @@
3
3
  * 格式化日期
4
4
  * @example
5
5
  * ```ts
6
- * import formatDate from '@tw/utils/formatDate'
6
+ * import formatDate from '@tanwan/utils/formatDate'
7
7
  * formatDate(new Date('2024-01-01'), 'yyyy-MM-dd') // '2024-01-01'
8
8
  * formatDate(1609459200000, 'yyyy/MM/dd HH:mm') // '2021/01/01 08:00'
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 格式化日期
4
4
  * @example
5
5
  * ```ts
6
- * import formatDate from '@tw/utils/formatDate'
6
+ * import formatDate from '@tanwan/utils/formatDate'
7
7
  * formatDate(new Date('2024-01-01'), 'yyyy-MM-dd') // '2024-01-01'
8
8
  * formatDate(1609459200000, 'yyyy/MM/dd HH:mm') // '2021/01/01 08:00'
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 格式化日期
4
4
  * @example
5
5
  * ```ts
6
- * import formatDate from '@tw/utils/formatDate'
6
+ * import formatDate from '@tanwan/utils/formatDate'
7
7
  * formatDate(new Date('2024-01-01'), 'yyyy-MM-dd') // '2024-01-01'
8
8
  * formatDate(1609459200000, 'yyyy/MM/dd HH:mm') // '2021/01/01 08:00'
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 格式化日期
4
4
  * @example
5
5
  * ```ts
6
- * import formatDate from '@tw/utils/formatDate'
6
+ * import formatDate from '@tanwan/utils/formatDate'
7
7
  * formatDate(new Date('2024-01-01'), 'yyyy-MM-dd') // '2024-01-01'
8
8
  * formatDate(1609459200000, 'yyyy/MM/dd HH:mm') // '2021/01/01 08:00'
9
9
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"formatDate.js","names":[],"sources":["../../src/date/formatDate/index.ts"],"sourcesContent":["/**\n * 格式化日期\n * @example\n * ```ts\n * import formatDate from '@tw/utils/formatDate'\n * formatDate(new Date('2024-01-01'), 'yyyy-MM-dd') // '2024-01-01'\n * formatDate(1609459200000, 'yyyy/MM/dd HH:mm') // '2021/01/01 08:00'\n * ```\n */\nexport default function formatDate(date: number | string | Date, fmt = 'yyyy-MM-dd HH:mm:ss'): string {\n if (date == null) return 'Invalid Date';\n\n const iOSReg = /-/g;\n let d: Date;\n\n if (typeof date === 'string') {\n // iOS 日期字符串中包含 -,需要替换为 /\n d = new Date(iOSReg.test(date) ? date.replace(iOSReg, '/') : date);\n } else {\n d = new Date(date);\n }\n\n if (isNaN(d.getTime())) return 'Invalid Date';\n\n const o: Record<string, number> = {\n 'M+': d.getMonth() + 1,\n 'd+': d.getDate(),\n 'H+': d.getHours(),\n 'h+': d.getHours() % 12 || 12,\n 'm+': d.getMinutes(),\n 's+': d.getSeconds(),\n };\n\n // 处理年份\n const yearMatch = fmt.match(/(y+)/);\n if (yearMatch) {\n fmt = fmt.replace(yearMatch[0], String(d.getFullYear()).slice(4 - yearMatch[1].length));\n }\n\n for (const k in o) {\n const match = fmt.match(new RegExp(`(${k})`));\n if (match) {\n const str = String(o[k]);\n fmt = fmt.replace(match[0], match[1].length === 1 ? str : str.padStart(2, '0'));\n }\n }\n\n return fmt;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,WAAW,MAA8B,MAAM,uBAA+B;AACpG,KAAI,QAAQ,KAAM,QAAO;CAEzB,MAAM,SAAS;CACf,IAAI;AAEJ,KAAI,OAAO,SAAS,SAElB,KAAI,IAAI,KAAK,OAAO,KAAK,KAAK,GAAG,KAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK;KAElE,KAAI,IAAI,KAAK,KAAK;AAGpB,KAAI,MAAM,EAAE,SAAS,CAAC,CAAE,QAAO;CAE/B,MAAM,IAA4B;EAChC,MAAM,EAAE,UAAU,GAAG;EACrB,MAAM,EAAE,SAAS;EACjB,MAAM,EAAE,UAAU;EAClB,MAAM,EAAE,UAAU,GAAG,MAAM;EAC3B,MAAM,EAAE,YAAY;EACpB,MAAM,EAAE,YAAY;EACrB;CAGD,MAAM,YAAY,IAAI,MAAM,OAAO;AACnC,KAAI,UACF,OAAM,IAAI,QAAQ,UAAU,IAAI,OAAO,EAAE,aAAa,CAAC,CAAC,MAAM,IAAI,UAAU,GAAG,OAAO,CAAC;AAGzF,MAAK,MAAM,KAAK,GAAG;EACjB,MAAM,QAAQ,IAAI,MAAM,IAAI,OAAO,IAAI,EAAE,GAAG,CAAC;AAC7C,MAAI,OAAO;GACT,MAAM,MAAM,OAAO,EAAE,GAAG;AACxB,SAAM,IAAI,QAAQ,MAAM,IAAI,MAAM,GAAG,WAAW,IAAI,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC;;;AAInF,QAAO"}
1
+ {"version":3,"file":"formatDate.js","names":[],"sources":["../../src/date/formatDate/index.ts"],"sourcesContent":["/**\n * 格式化日期\n * @example\n * ```ts\n * import formatDate from '@tanwan/utils/formatDate'\n * formatDate(new Date('2024-01-01'), 'yyyy-MM-dd') // '2024-01-01'\n * formatDate(1609459200000, 'yyyy/MM/dd HH:mm') // '2021/01/01 08:00'\n * ```\n */\nexport default function formatDate(date: number | string | Date, fmt = 'yyyy-MM-dd HH:mm:ss'): string {\n if (date == null) return 'Invalid Date';\n\n const iOSReg = /-/g;\n let d: Date;\n\n if (typeof date === 'string') {\n // iOS 日期字符串中包含 -,需要替换为 /\n d = new Date(iOSReg.test(date) ? date.replace(iOSReg, '/') : date);\n } else {\n d = new Date(date);\n }\n\n if (isNaN(d.getTime())) return 'Invalid Date';\n\n const o: Record<string, number> = {\n 'M+': d.getMonth() + 1,\n 'd+': d.getDate(),\n 'H+': d.getHours(),\n 'h+': d.getHours() % 12 || 12,\n 'm+': d.getMinutes(),\n 's+': d.getSeconds(),\n };\n\n // 处理年份\n const yearMatch = fmt.match(/(y+)/);\n if (yearMatch) {\n fmt = fmt.replace(yearMatch[0], String(d.getFullYear()).slice(4 - yearMatch[1].length));\n }\n\n for (const k in o) {\n const match = fmt.match(new RegExp(`(${k})`));\n if (match) {\n const str = String(o[k]);\n fmt = fmt.replace(match[0], match[1].length === 1 ? str : str.padStart(2, '0'));\n }\n }\n\n return fmt;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,WAAW,MAA8B,MAAM,uBAA+B;AACpG,KAAI,QAAQ,KAAM,QAAO;CAEzB,MAAM,SAAS;CACf,IAAI;AAEJ,KAAI,OAAO,SAAS,SAElB,KAAI,IAAI,KAAK,OAAO,KAAK,KAAK,GAAG,KAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK;KAElE,KAAI,IAAI,KAAK,KAAK;AAGpB,KAAI,MAAM,EAAE,SAAS,CAAC,CAAE,QAAO;CAE/B,MAAM,IAA4B;EAChC,MAAM,EAAE,UAAU,GAAG;EACrB,MAAM,EAAE,SAAS;EACjB,MAAM,EAAE,UAAU;EAClB,MAAM,EAAE,UAAU,GAAG,MAAM;EAC3B,MAAM,EAAE,YAAY;EACpB,MAAM,EAAE,YAAY;EACrB;CAGD,MAAM,YAAY,IAAI,MAAM,OAAO;AACnC,KAAI,UACF,OAAM,IAAI,QAAQ,UAAU,IAAI,OAAO,EAAE,aAAa,CAAC,CAAC,MAAM,IAAI,UAAU,GAAG,OAAO,CAAC;AAGzF,MAAK,MAAM,KAAK,GAAG;EACjB,MAAM,QAAQ,IAAI,MAAM,IAAI,OAAO,IAAI,EAAE,GAAG,CAAC;AAC7C,MAAI,OAAO;GACT,MAAM,MAAM,OAAO,EAAE,GAAG;AACxB,SAAM,IAAI,QAAQ,MAAM,IAAI,MAAM,GAAG,WAAW,IAAI,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC;;;AAInF,QAAO"}
@@ -3,7 +3,7 @@
3
3
  * 获取相对时间描述(如"3分钟前")
4
4
  * @example
5
5
  * ```ts
6
- * import getRelativeTime from '@tw/utils/getRelativeTime'
6
+ * import getRelativeTime from '@tanwan/utils/getRelativeTime'
7
7
  * getRelativeTime(Date.now() - 60000) // '1分钟前'
8
8
  * getRelativeTime(Date.now() - 3600000) // '1小时前'
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 获取相对时间描述(如"3分钟前")
4
4
  * @example
5
5
  * ```ts
6
- * import getRelativeTime from '@tw/utils/getRelativeTime'
6
+ * import getRelativeTime from '@tanwan/utils/getRelativeTime'
7
7
  * getRelativeTime(Date.now() - 60000) // '1分钟前'
8
8
  * getRelativeTime(Date.now() - 3600000) // '1小时前'
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 获取相对时间描述(如"3分钟前")
4
4
  * @example
5
5
  * ```ts
6
- * import getRelativeTime from '@tw/utils/getRelativeTime'
6
+ * import getRelativeTime from '@tanwan/utils/getRelativeTime'
7
7
  * getRelativeTime(Date.now() - 60000) // '1分钟前'
8
8
  * getRelativeTime(Date.now() - 3600000) // '1小时前'
9
9
  * ```
@@ -3,7 +3,7 @@
3
3
  * 获取相对时间描述(如"3分钟前")
4
4
  * @example
5
5
  * ```ts
6
- * import getRelativeTime from '@tw/utils/getRelativeTime'
6
+ * import getRelativeTime from '@tanwan/utils/getRelativeTime'
7
7
  * getRelativeTime(Date.now() - 60000) // '1分钟前'
8
8
  * getRelativeTime(Date.now() - 3600000) // '1小时前'
9
9
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"getRelativeTime.js","names":[],"sources":["../../src/date/getRelativeTime/index.ts"],"sourcesContent":["/**\n * 获取相对时间描述(如\"3分钟前\")\n * @example\n * ```ts\n * import getRelativeTime from '@tw/utils/getRelativeTime'\n * getRelativeTime(Date.now() - 60000) // '1分钟前'\n * getRelativeTime(Date.now() - 3600000) // '1小时前'\n * ```\n */\nexport default function getRelativeTime(date: number | string | Date, now: Date = new Date()): string {\n const d = new Date(date);\n const diff = now.getTime() - d.getTime();\n const seconds = Math.floor(diff / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const months = Math.floor(days / 30);\n const years = Math.floor(days / 365);\n\n if (seconds < 0) return '刚刚';\n if (seconds < 60) return `${seconds}秒前`;\n if (minutes < 60) return `${minutes}分钟前`;\n if (hours < 24) return `${hours}小时前`;\n if (days < 30) return `${days}天前`;\n if (months < 12) return `${months}个月前`;\n return `${years}年前`;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,gBAAgB,MAA8B,sBAAY,IAAI,MAAM,EAAU;CACpG,MAAM,IAAI,IAAI,KAAK,KAAK;CACxB,MAAM,OAAO,IAAI,SAAS,GAAG,EAAE,SAAS;CACxC,MAAM,UAAU,KAAK,MAAM,OAAO,IAAK;CACvC,MAAM,UAAU,KAAK,MAAM,UAAU,GAAG;CACxC,MAAM,QAAQ,KAAK,MAAM,UAAU,GAAG;CACtC,MAAM,OAAO,KAAK,MAAM,QAAQ,GAAG;CACnC,MAAM,SAAS,KAAK,MAAM,OAAO,GAAG;CACpC,MAAM,QAAQ,KAAK,MAAM,OAAO,IAAI;AAEpC,KAAI,UAAU,EAAG,QAAO;AACxB,KAAI,UAAU,GAAI,QAAO,GAAG,QAAQ;AACpC,KAAI,UAAU,GAAI,QAAO,GAAG,QAAQ;AACpC,KAAI,QAAQ,GAAI,QAAO,GAAG,MAAM;AAChC,KAAI,OAAO,GAAI,QAAO,GAAG,KAAK;AAC9B,KAAI,SAAS,GAAI,QAAO,GAAG,OAAO;AAClC,QAAO,GAAG,MAAM"}
1
+ {"version":3,"file":"getRelativeTime.js","names":[],"sources":["../../src/date/getRelativeTime/index.ts"],"sourcesContent":["/**\n * 获取相对时间描述(如\"3分钟前\")\n * @example\n * ```ts\n * import getRelativeTime from '@tanwan/utils/getRelativeTime'\n * getRelativeTime(Date.now() - 60000) // '1分钟前'\n * getRelativeTime(Date.now() - 3600000) // '1小时前'\n * ```\n */\nexport default function getRelativeTime(date: number | string | Date, now: Date = new Date()): string {\n const d = new Date(date);\n const diff = now.getTime() - d.getTime();\n const seconds = Math.floor(diff / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const months = Math.floor(days / 30);\n const years = Math.floor(days / 365);\n\n if (seconds < 0) return '刚刚';\n if (seconds < 60) return `${seconds}秒前`;\n if (minutes < 60) return `${minutes}分钟前`;\n if (hours < 24) return `${hours}小时前`;\n if (days < 30) return `${days}天前`;\n if (months < 12) return `${months}个月前`;\n return `${years}年前`;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAwB,gBAAgB,MAA8B,sBAAY,IAAI,MAAM,EAAU;CACpG,MAAM,IAAI,IAAI,KAAK,KAAK;CACxB,MAAM,OAAO,IAAI,SAAS,GAAG,EAAE,SAAS;CACxC,MAAM,UAAU,KAAK,MAAM,OAAO,IAAK;CACvC,MAAM,UAAU,KAAK,MAAM,UAAU,GAAG;CACxC,MAAM,QAAQ,KAAK,MAAM,UAAU,GAAG;CACtC,MAAM,OAAO,KAAK,MAAM,QAAQ,GAAG;CACnC,MAAM,SAAS,KAAK,MAAM,OAAO,GAAG;CACpC,MAAM,QAAQ,KAAK,MAAM,OAAO,IAAI;AAEpC,KAAI,UAAU,EAAG,QAAO;AACxB,KAAI,UAAU,GAAI,QAAO,GAAG,QAAQ;AACpC,KAAI,UAAU,GAAI,QAAO,GAAG,QAAQ;AACpC,KAAI,QAAQ,GAAI,QAAO,GAAG,MAAM;AAChC,KAAI,OAAO,GAAI,QAAO,GAAG,KAAK;AAC9B,KAAI,SAAS,GAAI,QAAO,GAAG,OAAO;AAClC,QAAO,GAAG,MAAM"}
@@ -3,7 +3,7 @@
3
3
  * 防抖函数
4
4
  * @example
5
5
  * ```ts
6
- * import debounce from '@tw/utils/debounce'
6
+ * import debounce from '@tanwan/utils/debounce'
7
7
  * const search = debounce((keyword: string) => {
8
8
  * console.log('搜索:', keyword)
9
9
  * }, 300)
@@ -3,7 +3,7 @@
3
3
  * 防抖函数
4
4
  * @example
5
5
  * ```ts
6
- * import debounce from '@tw/utils/debounce'
6
+ * import debounce from '@tanwan/utils/debounce'
7
7
  * const search = debounce((keyword: string) => {
8
8
  * console.log('搜索:', keyword)
9
9
  * }, 300)
@@ -3,7 +3,7 @@
3
3
  * 防抖函数
4
4
  * @example
5
5
  * ```ts
6
- * import debounce from '@tw/utils/debounce'
6
+ * import debounce from '@tanwan/utils/debounce'
7
7
  * const search = debounce((keyword: string) => {
8
8
  * console.log('搜索:', keyword)
9
9
  * }, 300)
@@ -3,7 +3,7 @@
3
3
  * 防抖函数
4
4
  * @example
5
5
  * ```ts
6
- * import debounce from '@tw/utils/debounce'
6
+ * import debounce from '@tanwan/utils/debounce'
7
7
  * const search = debounce((keyword: string) => {
8
8
  * console.log('搜索:', keyword)
9
9
  * }, 300)
@@ -1 +1 @@
1
- {"version":3,"file":"debounce.js","names":[],"sources":["../../src/function/debounce/index.ts"],"sourcesContent":["/**\n * 防抖函数\n * @example\n * ```ts\n * import debounce from '@tw/utils/debounce'\n * const search = debounce((keyword: string) => {\n * console.log('搜索:', keyword)\n * }, 300)\n * ```\n */\nexport default function debounce<T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n immediate = false,\n): (...args: Parameters<T>) => void {\n let timer: ReturnType<typeof setTimeout> | null = null;\n let canImmediate = immediate;\n\n return function (this: unknown, ...args: Parameters<T>) {\n if (canImmediate) {\n func.apply(this, args);\n canImmediate = false;\n }\n\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(() => {\n if (!immediate) {\n func.apply(this, args);\n }\n timer = null;\n canImmediate = immediate;\n }, wait);\n };\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAwB,SACtB,MACA,MACA,YAAY,OACsB;CAClC,IAAI,QAA8C;CAClD,IAAI,eAAe;AAEnB,QAAO,SAAyB,GAAG,MAAqB;AACtD,MAAI,cAAc;AAChB,QAAK,MAAM,MAAM,KAAK;AACtB,kBAAe;;AAGjB,MAAI,MACF,cAAa,MAAM;AAGrB,UAAQ,iBAAiB;AACvB,OAAI,CAAC,UACH,MAAK,MAAM,MAAM,KAAK;AAExB,WAAQ;AACR,kBAAe;KACd,KAAK"}
1
+ {"version":3,"file":"debounce.js","names":[],"sources":["../../src/function/debounce/index.ts"],"sourcesContent":["/**\n * 防抖函数\n * @example\n * ```ts\n * import debounce from '@tanwan/utils/debounce'\n * const search = debounce((keyword: string) => {\n * console.log('搜索:', keyword)\n * }, 300)\n * ```\n */\nexport default function debounce<T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n immediate = false,\n): (...args: Parameters<T>) => void {\n let timer: ReturnType<typeof setTimeout> | null = null;\n let canImmediate = immediate;\n\n return function (this: unknown, ...args: Parameters<T>) {\n if (canImmediate) {\n func.apply(this, args);\n canImmediate = false;\n }\n\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(() => {\n if (!immediate) {\n func.apply(this, args);\n }\n timer = null;\n canImmediate = immediate;\n }, wait);\n };\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAwB,SACtB,MACA,MACA,YAAY,OACsB;CAClC,IAAI,QAA8C;CAClD,IAAI,eAAe;AAEnB,QAAO,SAAyB,GAAG,MAAqB;AACtD,MAAI,cAAc;AAChB,QAAK,MAAM,MAAM,KAAK;AACtB,kBAAe;;AAGjB,MAAI,MACF,cAAa,MAAM;AAGrB,UAAQ,iBAAiB;AACvB,OAAI,CAAC,UACH,MAAK,MAAM,MAAM,KAAK;AAExB,WAAQ;AACR,kBAAe;KACd,KAAK"}
@@ -0,0 +1,8 @@
1
+ //#region src/function/delay/index.ts
2
+ function delay(ms = 0, value) {
3
+ return new Promise((resolve) => {
4
+ setTimeout(() => resolve(value), ms);
5
+ });
6
+ }
7
+ //#endregion
8
+ module.exports = delay;
@@ -0,0 +1,19 @@
1
+ //#region src/function/delay/index.d.ts
2
+ /**
3
+ * 返回一个在指定毫秒后 resolve 的 Promise
4
+ *
5
+ * @param ms - 延迟毫秒数,默认为 0
6
+ * @param value - 可选,resolve 时传递的值
7
+ * @returns 在延迟后 resolve 的 Promise
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import delay from '@tanwan/utils/delay'
12
+ * await delay(1000) // 等待 1 秒后 resolve
13
+ * const result = await delay(500, 'done') // 500ms 后 resolve 'done'
14
+ * ```
15
+ */
16
+ declare function delay(ms?: number): Promise<void>;
17
+ declare function delay<T>(ms: number, value: T): Promise<T>;
18
+ export = delay;
19
+ //# sourceMappingURL=delay.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delay.d.cts","names":[],"sources":["../../src/function/delay/index.ts"],"mappings":";;;;;;;AAc4C;;;;;;;;iBAApB,KAAA,CAAM,EAAA,YAAc,OAAA;AAAA,iBACpB,KAAA,GAAA,CAAS,EAAA,UAAY,KAAA,EAAO,CAAA,GAAI,OAAA,CAAQ,CAAA;AAAA"}
@@ -0,0 +1,20 @@
1
+ //#region src/function/delay/index.d.ts
2
+ /**
3
+ * 返回一个在指定毫秒后 resolve 的 Promise
4
+ *
5
+ * @param ms - 延迟毫秒数,默认为 0
6
+ * @param value - 可选,resolve 时传递的值
7
+ * @returns 在延迟后 resolve 的 Promise
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import delay from '@tanwan/utils/delay'
12
+ * await delay(1000) // 等待 1 秒后 resolve
13
+ * const result = await delay(500, 'done') // 500ms 后 resolve 'done'
14
+ * ```
15
+ */
16
+ declare function delay(ms?: number): Promise<void>;
17
+ declare function delay<T>(ms: number, value: T): Promise<T>;
18
+ //#endregion
19
+ export { delay as default };
20
+ //# sourceMappingURL=delay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delay.d.ts","names":[],"sources":["../../src/function/delay/index.ts"],"mappings":";;;;;;;AAc4C;;;;;;;;iBAApB,KAAA,CAAM,EAAA,YAAc,OAAA;AAAA,iBACpB,KAAA,GAAA,CAAS,EAAA,UAAY,KAAA,EAAO,CAAA,GAAI,OAAA,CAAQ,CAAA"}
@@ -0,0 +1,10 @@
1
+ //#region src/function/delay/index.ts
2
+ function delay(ms = 0, value) {
3
+ return new Promise((resolve) => {
4
+ setTimeout(() => resolve(value), ms);
5
+ });
6
+ }
7
+ //#endregion
8
+ export { delay as default };
9
+
10
+ //# sourceMappingURL=delay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delay.js","names":[],"sources":["../../src/function/delay/index.ts"],"sourcesContent":["/**\n * 返回一个在指定毫秒后 resolve 的 Promise\n *\n * @param ms - 延迟毫秒数,默认为 0\n * @param value - 可选,resolve 时传递的值\n * @returns 在延迟后 resolve 的 Promise\n *\n * @example\n * ```ts\n * import delay from '@tanwan/utils/delay'\n * await delay(1000) // 等待 1 秒后 resolve\n * const result = await delay(500, 'done') // 500ms 后 resolve 'done'\n * ```\n */\nexport default function delay(ms?: number): Promise<void>;\nexport default function delay<T>(ms: number, value: T): Promise<T>;\nexport default function delay<T>(ms = 0, value?: T): Promise<T | void> {\n return new Promise((resolve) => {\n setTimeout(() => resolve(value), ms);\n });\n}\n"],"mappings":";AAgBA,SAAwB,MAAS,KAAK,GAAG,OAA8B;AACrE,QAAO,IAAI,SAAS,YAAY;AAC9B,mBAAiB,QAAQ,MAAM,EAAE,GAAG;GACpC"}
@@ -3,7 +3,7 @@
3
3
  * 节流函数
4
4
  * @example
5
5
  * ```ts
6
- * import throttle from '@tw/utils/throttle'
6
+ * import throttle from '@tanwan/utils/throttle'
7
7
  * const onScroll = throttle(() => {
8
8
  * console.log('滚动事件触发')
9
9
  * }, 200)
@@ -3,7 +3,7 @@
3
3
  * 节流函数
4
4
  * @example
5
5
  * ```ts
6
- * import throttle from '@tw/utils/throttle'
6
+ * import throttle from '@tanwan/utils/throttle'
7
7
  * const onScroll = throttle(() => {
8
8
  * console.log('滚动事件触发')
9
9
  * }, 200)
@@ -3,7 +3,7 @@
3
3
  * 节流函数
4
4
  * @example
5
5
  * ```ts
6
- * import throttle from '@tw/utils/throttle'
6
+ * import throttle from '@tanwan/utils/throttle'
7
7
  * const onScroll = throttle(() => {
8
8
  * console.log('滚动事件触发')
9
9
  * }, 200)
@@ -3,7 +3,7 @@
3
3
  * 节流函数
4
4
  * @example
5
5
  * ```ts
6
- * import throttle from '@tw/utils/throttle'
6
+ * import throttle from '@tanwan/utils/throttle'
7
7
  * const onScroll = throttle(() => {
8
8
  * console.log('滚动事件触发')
9
9
  * }, 200)
@@ -1 +1 @@
1
- {"version":3,"file":"throttle.js","names":[],"sources":["../../src/function/throttle/index.ts"],"sourcesContent":["/**\n * 节流函数\n * @example\n * ```ts\n * import throttle from '@tw/utils/throttle'\n * const onScroll = throttle(() => {\n * console.log('滚动事件触发')\n * }, 200)\n * ```\n */\nexport default function throttle<T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n): (...args: Parameters<T>) => void {\n let timer: ReturnType<typeof setTimeout> | null = null;\n let lastArgs: Parameters<T> | null = null;\n\n return function (this: unknown, ...args: Parameters<T>) {\n lastArgs = args;\n\n if (timer) return;\n\n timer = setTimeout(() => {\n if (lastArgs) {\n func.apply(this, lastArgs);\n lastArgs = null;\n }\n timer = null;\n }, wait);\n };\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAwB,SACtB,MACA,MACkC;CAClC,IAAI,QAA8C;CAClD,IAAI,WAAiC;AAErC,QAAO,SAAyB,GAAG,MAAqB;AACtD,aAAW;AAEX,MAAI,MAAO;AAEX,UAAQ,iBAAiB;AACvB,OAAI,UAAU;AACZ,SAAK,MAAM,MAAM,SAAS;AAC1B,eAAW;;AAEb,WAAQ;KACP,KAAK"}
1
+ {"version":3,"file":"throttle.js","names":[],"sources":["../../src/function/throttle/index.ts"],"sourcesContent":["/**\n * 节流函数\n * @example\n * ```ts\n * import throttle from '@tanwan/utils/throttle'\n * const onScroll = throttle(() => {\n * console.log('滚动事件触发')\n * }, 200)\n * ```\n */\nexport default function throttle<T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n): (...args: Parameters<T>) => void {\n let timer: ReturnType<typeof setTimeout> | null = null;\n let lastArgs: Parameters<T> | null = null;\n\n return function (this: unknown, ...args: Parameters<T>) {\n lastArgs = args;\n\n if (timer) return;\n\n timer = setTimeout(() => {\n if (lastArgs) {\n func.apply(this, lastArgs);\n lastArgs = null;\n }\n timer = null;\n }, wait);\n };\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAwB,SACtB,MACA,MACkC;CAClC,IAAI,QAA8C;CAClD,IAAI,WAAiC;AAErC,QAAO,SAAyB,GAAG,MAAqB;AACtD,aAAW;AAEX,MAAI,MAAO;AAEX,UAAQ,iBAAiB;AACvB,OAAI,UAAU;AACZ,SAAK,MAAM,MAAM,SAAS;AAC1B,eAAW;;AAEb,WAAQ;KACP,KAAK"}
package/dist/index.cjs CHANGED
@@ -3,12 +3,18 @@ const require_base_isArray = require("./base/isArray.cjs");
3
3
  const require_base_isString = require("./base/isString.cjs");
4
4
  const require_base_isObject = require("./base/isObject.cjs");
5
5
  const require_base_deepClone = require("./base/deepClone.cjs");
6
+ const require_base_isEmpty = require("./base/isEmpty.cjs");
7
+ const require_object_pick = require("./object/pick.cjs");
8
+ const require_object_omit = require("./object/omit.cjs");
6
9
  const require_function_debounce = require("./function/debounce.cjs");
7
10
  const require_function_throttle = require("./function/throttle.cjs");
11
+ const require_function_delay = require("./function/delay.cjs");
8
12
  const require_array_unique = require("./array/unique.cjs");
9
13
  const require_array_flatten = require("./array/flatten.cjs");
10
14
  const require_array_chunk = require("./array/chunk.cjs");
11
15
  const require_array_shuffle = require("./array/shuffle.cjs");
16
+ const require_array_range = require("./array/range.cjs");
17
+ const require_array_groupBy = require("./array/groupBy.cjs");
12
18
  const require_number_randomInt = require("./number/randomInt.cjs");
13
19
  const require_number_clamp = require("./number/clamp.cjs");
14
20
  const require_number_formatThousands = require("./number/formatThousands.cjs");
@@ -17,21 +23,33 @@ const require_date_getRelativeTime = require("./date/getRelativeTime.cjs");
17
23
  const require_string_camelCase = require("./string/camelCase.cjs");
18
24
  const require_string_kebabCase = require("./string/kebabCase.cjs");
19
25
  const require_string_capitalize = require("./string/capitalize.cjs");
26
+ const require_string_uuid = require("./string/uuid.cjs");
27
+ const require_url_parseQueryString = require("./url/parseQueryString.cjs");
28
+ const require_url_stringifyQueryString = require("./url/stringifyQueryString.cjs");
20
29
  exports.camelCase = require_string_camelCase;
21
30
  exports.capitalize = require_string_capitalize;
22
31
  exports.chunk = require_array_chunk;
23
32
  exports.clamp = require_number_clamp;
24
33
  exports.debounce = require_function_debounce;
25
34
  exports.deepClone = require_base_deepClone;
35
+ exports.delay = require_function_delay;
26
36
  exports.flatten = require_array_flatten;
27
37
  exports.formatDate = require_date_formatDate;
28
38
  exports.formatThousands = require_number_formatThousands;
29
39
  exports.getRelativeTime = require_date_getRelativeTime;
40
+ exports.groupBy = require_array_groupBy;
30
41
  exports.isArray = require_base_isArray;
42
+ exports.isEmpty = require_base_isEmpty;
31
43
  exports.isObject = require_base_isObject;
32
44
  exports.isString = require_base_isString;
33
45
  exports.kebabCase = require_string_kebabCase;
46
+ exports.omit = require_object_omit;
47
+ exports.parseQueryString = require_url_parseQueryString;
48
+ exports.pick = require_object_pick;
34
49
  exports.randomInt = require_number_randomInt;
50
+ exports.range = require_array_range;
35
51
  exports.shuffle = require_array_shuffle;
52
+ exports.stringifyQueryString = require_url_stringifyQueryString;
36
53
  exports.throttle = require_function_throttle;
37
54
  exports.unique = require_array_unique;
55
+ exports.uuid = require_string_uuid;
package/dist/index.d.cts CHANGED
@@ -1,19 +1,28 @@
1
1
  import chunk from "./array/chunk.cjs";
2
2
  import flatten from "./array/flatten.cjs";
3
+ import groupBy from "./array/groupBy.cjs";
4
+ import range from "./array/range.cjs";
3
5
  import shuffle from "./array/shuffle.cjs";
4
6
  import unique from "./array/unique.cjs";
5
7
  import deepClone from "./base/deepClone.cjs";
6
8
  import isArray from "./base/isArray.cjs";
9
+ import isEmpty from "./base/isEmpty.cjs";
7
10
  import isObject from "./base/isObject.cjs";
8
11
  import isString from "./base/isString.cjs";
9
12
  import formatDate from "./date/formatDate.cjs";
10
13
  import getRelativeTime from "./date/getRelativeTime.cjs";
11
14
  import debounce from "./function/debounce.cjs";
15
+ import delay from "./function/delay.cjs";
12
16
  import throttle from "./function/throttle.cjs";
17
+ import pick from "./object/pick.cjs";
18
+ import omit from "./object/omit.cjs";
13
19
  import randomInt from "./number/randomInt.cjs";
14
20
  import clamp from "./number/clamp.cjs";
15
21
  import formatThousands from "./number/formatThousands.cjs";
16
22
  import camelCase from "./string/camelCase.cjs";
17
23
  import kebabCase from "./string/kebabCase.cjs";
18
24
  import capitalize from "./string/capitalize.cjs";
19
- export { camelCase, capitalize, chunk, clamp, debounce, deepClone, flatten, formatDate, formatThousands, getRelativeTime, isArray, isObject, isString, kebabCase, randomInt, shuffle, throttle, unique };
25
+ import uuid from "./string/uuid.cjs";
26
+ import parseQueryString from "./url/parseQueryString.cjs";
27
+ import stringifyQueryString from "./url/stringifyQueryString.cjs";
28
+ export { camelCase, capitalize, chunk, clamp, debounce, deepClone, delay, flatten, formatDate, formatThousands, getRelativeTime, groupBy, isArray, isEmpty, isObject, isString, kebabCase, omit, parseQueryString, pick, randomInt, range, shuffle, stringifyQueryString, throttle, unique, uuid };
package/dist/index.d.ts CHANGED
@@ -1,19 +1,28 @@
1
1
  import chunk from "./array/chunk.js";
2
2
  import flatten from "./array/flatten.js";
3
+ import groupBy from "./array/groupBy.js";
4
+ import range from "./array/range.js";
3
5
  import shuffle from "./array/shuffle.js";
4
6
  import unique from "./array/unique.js";
5
7
  import deepClone from "./base/deepClone.js";
6
8
  import isArray from "./base/isArray.js";
9
+ import isEmpty from "./base/isEmpty.js";
7
10
  import isObject from "./base/isObject.js";
8
11
  import isString from "./base/isString.js";
9
12
  import formatDate from "./date/formatDate.js";
10
13
  import getRelativeTime from "./date/getRelativeTime.js";
11
14
  import debounce from "./function/debounce.js";
15
+ import delay from "./function/delay.js";
12
16
  import throttle from "./function/throttle.js";
17
+ import pick from "./object/pick.js";
18
+ import omit from "./object/omit.js";
13
19
  import randomInt from "./number/randomInt.js";
14
20
  import clamp from "./number/clamp.js";
15
21
  import formatThousands from "./number/formatThousands.js";
16
22
  import camelCase from "./string/camelCase.js";
17
23
  import kebabCase from "./string/kebabCase.js";
18
24
  import capitalize from "./string/capitalize.js";
19
- export { camelCase, capitalize, chunk, clamp, debounce, deepClone, flatten, formatDate, formatThousands, getRelativeTime, isArray, isObject, isString, kebabCase, randomInt, shuffle, throttle, unique };
25
+ import uuid from "./string/uuid.js";
26
+ import parseQueryString from "./url/parseQueryString.js";
27
+ import stringifyQueryString from "./url/stringifyQueryString.js";
28
+ export { camelCase, capitalize, chunk, clamp, debounce, deepClone, delay, flatten, formatDate, formatThousands, getRelativeTime, groupBy, isArray, isEmpty, isObject, isString, kebabCase, omit, parseQueryString, pick, randomInt, range, shuffle, stringifyQueryString, throttle, unique, uuid };
@@ -1 +1 @@
1
- var TWUtils=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return Array.isArray(e)}function n(e){return typeof e==`string`}function r(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function i(e,t=new WeakMap){if(typeof e!=`object`||!e)return e;if(t.has(e))return t.get(e);if(Array.isArray(e)){let n=[];t.set(e,n);for(let r=0;r<e.length;r++)n[r]=i(e[r],t);return n}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);if(e instanceof Map){let n=new Map;t.set(e,n);for(let[r,a]of e)n.set(r,i(a,t));return n}if(e instanceof Set){let n=new Set;t.set(e,n);for(let r of e)n.add(i(r,t));return n}if(e instanceof WeakMap)throw Error(`Cannot clone WeakMap`);if(e instanceof WeakSet)throw Error(`Cannot clone WeakSet`);if(r(e)){let n={};t.set(e,n);for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=i(e[r],t));return n}return e}function a(e,t,n=!1){let r=null,i=n;return function(...a){i&&=(e.apply(this,a),!1),r&&clearTimeout(r),r=setTimeout(()=>{n||e.apply(this,a),r=null,i=n},t)}}function o(e,t){let n=null,r=null;return function(...i){r=i,!n&&(n=setTimeout(()=>{r&&=(e.apply(this,r),null),n=null},t))}}function s(e){return[...new Set(e)]}function c(e,t=1/0){if(t===0)return e;let n=[];for(let r of e)Array.isArray(r)&&t>0?n.push(...c(r,t-1)):n.push(r);return n}function l(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function u(e){let t=[...e];for(let e=t.length-1;e>0;e--){let n=Math.floor(Math.random()*(e+1));[t[e],t[n]]=[t[n],t[e]]}return t}function d(e,t){return Math.floor(Math.random()*(t-e+1))+e}function f(e,t,n){return Math.min(Math.max(e,t),n)}function p(e){let t=String(e).split(`.`);return t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,`,`),t.join(`.`)}function m(e,t=`yyyy-MM-dd HH:mm:ss`){if(e==null)return`Invalid Date`;let n=/-/g,r;if(r=typeof e==`string`?new Date(n.test(e)?e.replace(n,`/`):e):new Date(e),isNaN(r.getTime()))return`Invalid Date`;let i={"M+":r.getMonth()+1,"d+":r.getDate(),"H+":r.getHours(),"h+":r.getHours()%12||12,"m+":r.getMinutes(),"s+":r.getSeconds()},a=t.match(/(y+)/);a&&(t=t.replace(a[0],String(r.getFullYear()).slice(4-a[1].length)));for(let e in i){let n=t.match(RegExp(`(${e})`));if(n){let r=String(i[e]);t=t.replace(n[0],n[1].length===1?r:r.padStart(2,`0`))}}return t}function h(e,t=new Date){let n=new Date(e),r=t.getTime()-n.getTime(),i=Math.floor(r/1e3),a=Math.floor(i/60),o=Math.floor(a/60),s=Math.floor(o/24),c=Math.floor(s/30),l=Math.floor(s/365);return i<0?`刚刚`:i<60?`${i}秒前`:a<60?`${a}分钟前`:o<24?`${o}小时前`:s<30?`${s}天前`:c<12?`${c}个月前`:`${l}年前`}function g(e,t=!1){let n=e.replace(/[-_.\s]+(\w|$)/g,(e,t)=>t.toUpperCase());return t&&n.length>0&&(n=n[0].toUpperCase()+n.slice(1)),console.log(n),n}function _(e){return e.replace(/([a-z])([A-Z])/g,`$1-$2`).replace(/([A-Z])([A-Z][a-z])/g,`$1-$2`).replace(/[-_.\s]+/g,`-`).toLowerCase()}function v(e){return e&&e.charAt(0).toUpperCase()+e.slice(1)}return e.camelCase=g,e.capitalize=v,e.chunk=l,e.clamp=f,e.debounce=a,e.deepClone=i,e.flatten=c,e.formatDate=m,e.formatThousands=p,e.getRelativeTime=h,e.isArray=t,e.isObject=r,e.isString=n,e.kebabCase=_,e.randomInt=d,e.shuffle=u,e.throttle=o,e.unique=s,e})({});
1
+ var TWUtils=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return Array.isArray(e)}function n(e){return typeof e==`string`}function r(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function i(e,t=new WeakMap){if(typeof e!=`object`||!e)return e;if(t.has(e))return t.get(e);if(Array.isArray(e)){let n=[];t.set(e,n);for(let r=0;r<e.length;r++)n[r]=i(e[r],t);return n}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);if(e instanceof Map){let n=new Map;t.set(e,n);for(let[r,a]of e)n.set(r,i(a,t));return n}if(e instanceof Set){let n=new Set;t.set(e,n);for(let r of e)n.add(i(r,t));return n}if(e instanceof WeakMap)throw Error(`Cannot clone WeakMap`);if(e instanceof WeakSet)throw Error(`Cannot clone WeakSet`);if(r(e)){let n={};t.set(e,n);for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=i(e[r],t));return n}return e}function a(e){return e==null?!0:typeof e==`string`||Array.isArray(e)?e.length===0:e instanceof Map||e instanceof Set?e.size===0:r(e)?Object.keys(e).length===0:!1}function o(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function s(e,t){let n=new Set(t),r={};for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&!n.has(t)&&(r[t]=e[t]);return r}function c(e,t,n=!1){let r=null,i=n;return function(...a){i&&=(e.apply(this,a),!1),r&&clearTimeout(r),r=setTimeout(()=>{n||e.apply(this,a),r=null,i=n},t)}}function l(e,t){let n=null,r=null;return function(...i){r=i,!n&&(n=setTimeout(()=>{r&&=(e.apply(this,r),null),n=null},t))}}function u(e=0,t){return new Promise(n=>{setTimeout(()=>n(t),e)})}function d(e){return[...new Set(e)]}function f(e,t=1/0){if(t===0)return e;let n=[];for(let r of e)Array.isArray(r)&&t>0?n.push(...f(r,t-1)):n.push(r);return n}function p(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function m(e){let t=[...e];for(let e=t.length-1;e>0;e--){let n=Math.floor(Math.random()*(e+1));[t[e],t[n]]=[t[n],t[e]]}return t}function h(e,t,n=1){if(n===0)throw Error(`step 不能为 0`);let r=[];if(n>0)for(let i=e;i<t;i+=n)r.push(i);else for(let i=e;i>t;i+=n)r.push(i);return r}function g(e,t){let n={},r=typeof t==`function`?t:e=>String(e[t]);for(let t of e){let e=String(r(t));n[e]||(n[e]=[]),n[e].push(t)}return n}function _(e,t){return Math.floor(Math.random()*(t-e+1))+e}function v(e,t,n){return Math.min(Math.max(e,t),n)}function y(e){let t=String(e).split(`.`);return t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,`,`),t.join(`.`)}function b(e,t=`yyyy-MM-dd HH:mm:ss`){if(e==null)return`Invalid Date`;let n=/-/g,r;if(r=typeof e==`string`?new Date(n.test(e)?e.replace(n,`/`):e):new Date(e),isNaN(r.getTime()))return`Invalid Date`;let i={"M+":r.getMonth()+1,"d+":r.getDate(),"H+":r.getHours(),"h+":r.getHours()%12||12,"m+":r.getMinutes(),"s+":r.getSeconds()},a=t.match(/(y+)/);a&&(t=t.replace(a[0],String(r.getFullYear()).slice(4-a[1].length)));for(let e in i){let n=t.match(RegExp(`(${e})`));if(n){let r=String(i[e]);t=t.replace(n[0],n[1].length===1?r:r.padStart(2,`0`))}}return t}function x(e,t=new Date){let n=new Date(e),r=t.getTime()-n.getTime(),i=Math.floor(r/1e3),a=Math.floor(i/60),o=Math.floor(a/60),s=Math.floor(o/24),c=Math.floor(s/30),l=Math.floor(s/365);return i<0?`刚刚`:i<60?`${i}秒前`:a<60?`${a}分钟前`:o<24?`${o}小时前`:s<30?`${s}天前`:c<12?`${c}个月前`:`${l}年前`}function S(e,t=!1){let n=e.replace(/[-_.\s]+(\w|$)/g,(e,t)=>t.toUpperCase());return t&&n.length>0&&(n=n[0].toUpperCase()+n.slice(1)),n}function C(e){return e.replace(/([a-z])([A-Z])/g,`$1-$2`).replace(/([A-Z])([A-Z][a-z])/g,`$1-$2`).replace(/[-_.\s]+/g,`-`).toLowerCase()}function w(e){return e&&e.charAt(0).toUpperCase()+e.slice(1)}function T(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}function E(e){let t=e??(typeof location<`u`?location.search:``);if(!t)return{};let n=t.startsWith(`?`)?t.slice(1):t;if(!n)return{};let r={};for(let e of n.split(`&`)){if(!e)continue;let[t,n=``]=e.split(`=`),i=decodeURIComponent(t),a=D(decodeURIComponent(n));if(i in r){let e=r[i];Array.isArray(e)?e.push(a):r[i]=[e,a]}else r[i]=a}return r}function D(e){if(e===`true`)return!0;if(e===`false`)return!1;if(e===``)return``;let t=Number(e);return!Number.isNaN(t)&&String(t)===e?t:e}function O(e){let t=[];for(let n of Object.keys(e)){let r=e[n];if(r!==void 0){if(r===null){t.push(`${encodeURIComponent(n)}=`);continue}if(Array.isArray(r)){for(let e of r)t.push(`${encodeURIComponent(n)}=${encodeURIComponent(String(e))}`);continue}t.push(`${encodeURIComponent(n)}=${encodeURIComponent(String(r))}`)}}return t.join(`&`)}return e.camelCase=S,e.capitalize=w,e.chunk=p,e.clamp=v,e.debounce=c,e.deepClone=i,e.delay=u,e.flatten=f,e.formatDate=b,e.formatThousands=y,e.getRelativeTime=x,e.groupBy=g,e.isArray=t,e.isEmpty=a,e.isObject=r,e.isString=n,e.kebabCase=C,e.omit=s,e.parseQueryString=E,e.pick=o,e.randomInt=_,e.range=h,e.shuffle=m,e.stringifyQueryString=O,e.throttle=l,e.unique=d,e.uuid=T,e})({});