@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,23 @@
1
+ //#region src/url/parseQueryString/index.d.ts
2
+ /**
3
+ * 解析 URL 查询字符串为对象
4
+ *
5
+ * 支持重复 key 解析为数组,数字字符串自动转为 number,布尔字符串自动转为 boolean
6
+ *
7
+ * @param query - 查询字符串(可带或不带前导 `?`),默认为当前页面 `location.search`
8
+ * @returns 解析后的键值对对象
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import parseQueryString from '@tanwan/utils/parseQueryString'
13
+ * parseQueryString('?name=John&age=25') // { name: 'John', age: 25 }
14
+ * parseQueryString('name=John&age=25') // { name: 'John', age: 25 }
15
+ * parseQueryString('?ids=1&ids=2') // { ids: [1, 2] }
16
+ * parseQueryString('?active=true&count=0') // { active: true, count: 0 }
17
+ * parseQueryString('') // {}
18
+ * ```
19
+ */
20
+ declare function parseQueryString(query?: string): Record<string, string | number | boolean | (string | number | boolean)[]>;
21
+ //#endregion
22
+ export { parseQueryString as default };
23
+ //# sourceMappingURL=parseQueryString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseQueryString.d.ts","names":[],"sources":["../../src/url/parseQueryString/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;iBAkBwB,gBAAA,CACtB,KAAA,YACC,MAAA"}
@@ -0,0 +1,50 @@
1
+ //#region src/url/parseQueryString/index.ts
2
+ /**
3
+ * 解析 URL 查询字符串为对象
4
+ *
5
+ * 支持重复 key 解析为数组,数字字符串自动转为 number,布尔字符串自动转为 boolean
6
+ *
7
+ * @param query - 查询字符串(可带或不带前导 `?`),默认为当前页面 `location.search`
8
+ * @returns 解析后的键值对对象
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import parseQueryString from '@tanwan/utils/parseQueryString'
13
+ * parseQueryString('?name=John&age=25') // { name: 'John', age: 25 }
14
+ * parseQueryString('name=John&age=25') // { name: 'John', age: 25 }
15
+ * parseQueryString('?ids=1&ids=2') // { ids: [1, 2] }
16
+ * parseQueryString('?active=true&count=0') // { active: true, count: 0 }
17
+ * parseQueryString('') // {}
18
+ * ```
19
+ */
20
+ function parseQueryString(query) {
21
+ const qs = query ?? (typeof location !== "undefined" ? location.search : "");
22
+ if (!qs) return {};
23
+ const str = qs.startsWith("?") ? qs.slice(1) : qs;
24
+ if (!str) return {};
25
+ const result = {};
26
+ for (const part of str.split("&")) {
27
+ if (!part) continue;
28
+ const [rawKey, rawValue = ""] = part.split("=");
29
+ const key = decodeURIComponent(rawKey);
30
+ const parsed = parseValue(decodeURIComponent(rawValue));
31
+ if (key in result) {
32
+ const existing = result[key];
33
+ if (Array.isArray(existing)) existing.push(parsed);
34
+ else result[key] = [existing, parsed];
35
+ } else result[key] = parsed;
36
+ }
37
+ return result;
38
+ }
39
+ function parseValue(value) {
40
+ if (value === "true") return true;
41
+ if (value === "false") return false;
42
+ if (value === "") return "";
43
+ const num = Number(value);
44
+ if (!Number.isNaN(num) && String(num) === value) return num;
45
+ return value;
46
+ }
47
+ //#endregion
48
+ export { parseQueryString as default };
49
+
50
+ //# sourceMappingURL=parseQueryString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseQueryString.js","names":[],"sources":["../../src/url/parseQueryString/index.ts"],"sourcesContent":["/**\n * 解析 URL 查询字符串为对象\n *\n * 支持重复 key 解析为数组,数字字符串自动转为 number,布尔字符串自动转为 boolean\n *\n * @param query - 查询字符串(可带或不带前导 `?`),默认为当前页面 `location.search`\n * @returns 解析后的键值对对象\n *\n * @example\n * ```ts\n * import parseQueryString from '@tanwan/utils/parseQueryString'\n * parseQueryString('?name=John&age=25') // { name: 'John', age: 25 }\n * parseQueryString('name=John&age=25') // { name: 'John', age: 25 }\n * parseQueryString('?ids=1&ids=2') // { ids: [1, 2] }\n * parseQueryString('?active=true&count=0') // { active: true, count: 0 }\n * parseQueryString('') // {}\n * ```\n */\nexport default function parseQueryString(\n query?: string,\n): Record<string, string | number | boolean | (string | number | boolean)[]> {\n const qs = query ?? (typeof location !== 'undefined' ? location.search : '');\n\n if (!qs) {\n return {};\n }\n\n const str = qs.startsWith('?') ? qs.slice(1) : qs;\n if (!str) {\n return {};\n }\n\n const result: Record<string, string | number | boolean | (string | number | boolean)[]> = {};\n\n for (const part of str.split('&')) {\n if (!part) continue;\n\n const [rawKey, rawValue = ''] = part.split('=');\n const key = decodeURIComponent(rawKey);\n const value = decodeURIComponent(rawValue);\n\n const parsed = parseValue(value);\n\n if (key in result) {\n const existing = result[key];\n if (Array.isArray(existing)) {\n existing.push(parsed);\n } else {\n result[key] = [existing, parsed];\n }\n } else {\n result[key] = parsed;\n }\n }\n\n return result;\n}\n\nfunction parseValue(value: string): string | number | boolean {\n if (value === 'true') return true;\n if (value === 'false') return false;\n if (value === '') return '';\n const num = Number(value);\n if (!Number.isNaN(num) && String(num) === value) return num;\n return value;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,SAAwB,iBACtB,OAC2E;CAC3E,MAAM,KAAK,UAAU,OAAO,aAAa,cAAc,SAAS,SAAS;AAEzE,KAAI,CAAC,GACH,QAAO,EAAE;CAGX,MAAM,MAAM,GAAG,WAAW,IAAI,GAAG,GAAG,MAAM,EAAE,GAAG;AAC/C,KAAI,CAAC,IACH,QAAO,EAAE;CAGX,MAAM,SAAoF,EAAE;AAE5F,MAAK,MAAM,QAAQ,IAAI,MAAM,IAAI,EAAE;AACjC,MAAI,CAAC,KAAM;EAEX,MAAM,CAAC,QAAQ,WAAW,MAAM,KAAK,MAAM,IAAI;EAC/C,MAAM,MAAM,mBAAmB,OAAO;EAGtC,MAAM,SAAS,WAFD,mBAAmB,SAEF,CAAC;AAEhC,MAAI,OAAO,QAAQ;GACjB,MAAM,WAAW,OAAO;AACxB,OAAI,MAAM,QAAQ,SAAS,CACzB,UAAS,KAAK,OAAO;OAErB,QAAO,OAAO,CAAC,UAAU,OAAO;QAGlC,QAAO,OAAO;;AAIlB,QAAO;;AAGT,SAAS,WAAW,OAA0C;AAC5D,KAAI,UAAU,OAAQ,QAAO;AAC7B,KAAI,UAAU,QAAS,QAAO;AAC9B,KAAI,UAAU,GAAI,QAAO;CACzB,MAAM,MAAM,OAAO,MAAM;AACzB,KAAI,CAAC,OAAO,MAAM,IAAI,IAAI,OAAO,IAAI,KAAK,MAAO,QAAO;AACxD,QAAO"}
@@ -0,0 +1,38 @@
1
+ //#region src/url/stringifyQueryString/index.ts
2
+ /**
3
+ * 将对象序列化为 URL 查询字符串
4
+ *
5
+ * 支持嵌套对象用 `encodeURIComponent` 编码,数组值生成重复 key
6
+ *
7
+ * @param params - 要序列化的键值对对象
8
+ * @returns 查询字符串(不含前导 `?`),无参数时返回空字符串
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import stringifyQueryString from '@tanwan/utils/stringifyQueryString'
13
+ * stringifyQueryString({ name: 'John', age: 25 }) // 'name=John&age=25'
14
+ * stringifyQueryString({ ids: [1, 2, 3] }) // 'ids=1&ids=2&ids=3'
15
+ * stringifyQueryString({ q: 'hello world' }) // 'q=hello%20world'
16
+ * stringifyQueryString({ a: null, b: undefined }) // 'a='
17
+ * stringifyQueryString({}) // ''
18
+ * ```
19
+ */
20
+ function stringifyQueryString(params) {
21
+ const parts = [];
22
+ for (const key of Object.keys(params)) {
23
+ const value = params[key];
24
+ if (value === void 0) continue;
25
+ if (value === null) {
26
+ parts.push(`${encodeURIComponent(key)}=`);
27
+ continue;
28
+ }
29
+ if (Array.isArray(value)) {
30
+ for (const item of value) parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(item))}`);
31
+ continue;
32
+ }
33
+ parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
34
+ }
35
+ return parts.join("&");
36
+ }
37
+ //#endregion
38
+ module.exports = stringifyQueryString;
@@ -0,0 +1,22 @@
1
+ //#region src/url/stringifyQueryString/index.d.ts
2
+ /**
3
+ * 将对象序列化为 URL 查询字符串
4
+ *
5
+ * 支持嵌套对象用 `encodeURIComponent` 编码,数组值生成重复 key
6
+ *
7
+ * @param params - 要序列化的键值对对象
8
+ * @returns 查询字符串(不含前导 `?`),无参数时返回空字符串
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import stringifyQueryString from '@tanwan/utils/stringifyQueryString'
13
+ * stringifyQueryString({ name: 'John', age: 25 }) // 'name=John&age=25'
14
+ * stringifyQueryString({ ids: [1, 2, 3] }) // 'ids=1&ids=2&ids=3'
15
+ * stringifyQueryString({ q: 'hello world' }) // 'q=hello%20world'
16
+ * stringifyQueryString({ a: null, b: undefined }) // 'a='
17
+ * stringifyQueryString({}) // ''
18
+ * ```
19
+ */
20
+ declare function stringifyQueryString(params: Record<string, unknown>): string;
21
+ export = stringifyQueryString;
22
+ //# sourceMappingURL=stringifyQueryString.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringifyQueryString.d.cts","names":[],"sources":["../../src/url/stringifyQueryString/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;iBAkBwB,oBAAA,CAAqB,MAAA,EAAQ,MAAA;AAAA"}
@@ -0,0 +1,23 @@
1
+ //#region src/url/stringifyQueryString/index.d.ts
2
+ /**
3
+ * 将对象序列化为 URL 查询字符串
4
+ *
5
+ * 支持嵌套对象用 `encodeURIComponent` 编码,数组值生成重复 key
6
+ *
7
+ * @param params - 要序列化的键值对对象
8
+ * @returns 查询字符串(不含前导 `?`),无参数时返回空字符串
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import stringifyQueryString from '@tanwan/utils/stringifyQueryString'
13
+ * stringifyQueryString({ name: 'John', age: 25 }) // 'name=John&age=25'
14
+ * stringifyQueryString({ ids: [1, 2, 3] }) // 'ids=1&ids=2&ids=3'
15
+ * stringifyQueryString({ q: 'hello world' }) // 'q=hello%20world'
16
+ * stringifyQueryString({ a: null, b: undefined }) // 'a='
17
+ * stringifyQueryString({}) // ''
18
+ * ```
19
+ */
20
+ declare function stringifyQueryString(params: Record<string, unknown>): string;
21
+ //#endregion
22
+ export { stringifyQueryString as default };
23
+ //# sourceMappingURL=stringifyQueryString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringifyQueryString.d.ts","names":[],"sources":["../../src/url/stringifyQueryString/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;iBAkBwB,oBAAA,CAAqB,MAAA,EAAQ,MAAA"}
@@ -0,0 +1,40 @@
1
+ //#region src/url/stringifyQueryString/index.ts
2
+ /**
3
+ * 将对象序列化为 URL 查询字符串
4
+ *
5
+ * 支持嵌套对象用 `encodeURIComponent` 编码,数组值生成重复 key
6
+ *
7
+ * @param params - 要序列化的键值对对象
8
+ * @returns 查询字符串(不含前导 `?`),无参数时返回空字符串
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import stringifyQueryString from '@tanwan/utils/stringifyQueryString'
13
+ * stringifyQueryString({ name: 'John', age: 25 }) // 'name=John&age=25'
14
+ * stringifyQueryString({ ids: [1, 2, 3] }) // 'ids=1&ids=2&ids=3'
15
+ * stringifyQueryString({ q: 'hello world' }) // 'q=hello%20world'
16
+ * stringifyQueryString({ a: null, b: undefined }) // 'a='
17
+ * stringifyQueryString({}) // ''
18
+ * ```
19
+ */
20
+ function stringifyQueryString(params) {
21
+ const parts = [];
22
+ for (const key of Object.keys(params)) {
23
+ const value = params[key];
24
+ if (value === void 0) continue;
25
+ if (value === null) {
26
+ parts.push(`${encodeURIComponent(key)}=`);
27
+ continue;
28
+ }
29
+ if (Array.isArray(value)) {
30
+ for (const item of value) parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(item))}`);
31
+ continue;
32
+ }
33
+ parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
34
+ }
35
+ return parts.join("&");
36
+ }
37
+ //#endregion
38
+ export { stringifyQueryString as default };
39
+
40
+ //# sourceMappingURL=stringifyQueryString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringifyQueryString.js","names":[],"sources":["../../src/url/stringifyQueryString/index.ts"],"sourcesContent":["/**\n * 将对象序列化为 URL 查询字符串\n *\n * 支持嵌套对象用 `encodeURIComponent` 编码,数组值生成重复 key\n *\n * @param params - 要序列化的键值对对象\n * @returns 查询字符串(不含前导 `?`),无参数时返回空字符串\n *\n * @example\n * ```ts\n * import stringifyQueryString from '@tanwan/utils/stringifyQueryString'\n * stringifyQueryString({ name: 'John', age: 25 }) // 'name=John&age=25'\n * stringifyQueryString({ ids: [1, 2, 3] }) // 'ids=1&ids=2&ids=3'\n * stringifyQueryString({ q: 'hello world' }) // 'q=hello%20world'\n * stringifyQueryString({ a: null, b: undefined }) // 'a='\n * stringifyQueryString({}) // ''\n * ```\n */\nexport default function stringifyQueryString(params: Record<string, unknown>): string {\n const parts: string[] = [];\n\n for (const key of Object.keys(params)) {\n const value = params[key];\n\n if (value === undefined) {\n continue;\n }\n\n if (value === null) {\n parts.push(`${encodeURIComponent(key)}=`);\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(item))}`);\n }\n continue;\n }\n\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n\n return parts.join('&');\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,SAAwB,qBAAqB,QAAyC;CACpF,MAAM,QAAkB,EAAE;AAE1B,MAAK,MAAM,OAAO,OAAO,KAAK,OAAO,EAAE;EACrC,MAAM,QAAQ,OAAO;AAErB,MAAI,UAAU,KAAA,EACZ;AAGF,MAAI,UAAU,MAAM;AAClB,SAAM,KAAK,GAAG,mBAAmB,IAAI,CAAC,GAAG;AACzC;;AAGF,MAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,QAAK,MAAM,QAAQ,MACjB,OAAM,KAAK,GAAG,mBAAmB,IAAI,CAAC,GAAG,mBAAmB,OAAO,KAAK,CAAC,GAAG;AAE9E;;AAGF,QAAM,KAAK,GAAG,mBAAmB,IAAI,CAAC,GAAG,mBAAmB,OAAO,MAAM,CAAC,GAAG;;AAG/E,QAAO,MAAM,KAAK,IAAI"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@tanwan/utils",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "前端纯JS工具函数库",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
7
7
  "module": "./dist/index.js",
8
8
  "types": "./dist/index.d.cts",
9
- "unpkg": "./dist/index.global.js",
10
- "jsdelivr": "./dist/index.global.js",
9
+ "unpkg": "./dist/index.iife.js",
10
+ "jsdelivr": "./dist/index.iife.js",
11
11
  "sideEffects": false,
12
12
  "files": [
13
13
  "dist"
@@ -26,6 +26,14 @@
26
26
  "import": "./dist/array/flatten.js",
27
27
  "require": "./dist/array/flatten.cjs"
28
28
  },
29
+ "./array/groupBy": {
30
+ "import": "./dist/array/groupBy.js",
31
+ "require": "./dist/array/groupBy.cjs"
32
+ },
33
+ "./array/range": {
34
+ "import": "./dist/array/range.js",
35
+ "require": "./dist/array/range.cjs"
36
+ },
29
37
  "./array/shuffle": {
30
38
  "import": "./dist/array/shuffle.js",
31
39
  "require": "./dist/array/shuffle.cjs"
@@ -42,6 +50,10 @@
42
50
  "import": "./dist/base/isArray.js",
43
51
  "require": "./dist/base/isArray.cjs"
44
52
  },
53
+ "./base/isEmpty": {
54
+ "import": "./dist/base/isEmpty.js",
55
+ "require": "./dist/base/isEmpty.cjs"
56
+ },
45
57
  "./base/isObject": {
46
58
  "import": "./dist/base/isObject.js",
47
59
  "require": "./dist/base/isObject.cjs"
@@ -62,6 +74,10 @@
62
74
  "import": "./dist/function/debounce.js",
63
75
  "require": "./dist/function/debounce.cjs"
64
76
  },
77
+ "./function/delay": {
78
+ "import": "./dist/function/delay.js",
79
+ "require": "./dist/function/delay.cjs"
80
+ },
65
81
  "./function/throttle": {
66
82
  "import": "./dist/function/throttle.js",
67
83
  "require": "./dist/function/throttle.cjs"
@@ -78,6 +94,14 @@
78
94
  "import": "./dist/number/randomInt.js",
79
95
  "require": "./dist/number/randomInt.cjs"
80
96
  },
97
+ "./object/omit": {
98
+ "import": "./dist/object/omit.js",
99
+ "require": "./dist/object/omit.cjs"
100
+ },
101
+ "./object/pick": {
102
+ "import": "./dist/object/pick.js",
103
+ "require": "./dist/object/pick.cjs"
104
+ },
81
105
  "./string/camelCase": {
82
106
  "import": "./dist/string/camelCase.js",
83
107
  "require": "./dist/string/camelCase.cjs"
@@ -90,6 +114,18 @@
90
114
  "import": "./dist/string/kebabCase.js",
91
115
  "require": "./dist/string/kebabCase.cjs"
92
116
  },
117
+ "./string/uuid": {
118
+ "import": "./dist/string/uuid.js",
119
+ "require": "./dist/string/uuid.cjs"
120
+ },
121
+ "./url/parseQueryString": {
122
+ "import": "./dist/url/parseQueryString.js",
123
+ "require": "./dist/url/parseQueryString.cjs"
124
+ },
125
+ "./url/stringifyQueryString": {
126
+ "import": "./dist/url/stringifyQueryString.js",
127
+ "require": "./dist/url/stringifyQueryString.cjs"
128
+ },
93
129
  "./package.json": "./package.json"
94
130
  },
95
131
  "publishConfig": {