ut2 1.7.1 → 1.8.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 (115) hide show
  1. package/README.md +138 -134
  2. package/dist/ut2.js +121 -65
  3. package/dist/ut2.js.map +1 -1
  4. package/dist/ut2.min.js +1 -1
  5. package/dist/ut2.min.js.map +1 -1
  6. package/es/clamp.js +4 -3
  7. package/es/conforms.js +4 -3
  8. package/es/conformsTo.js +4 -3
  9. package/es/countBy.js +4 -3
  10. package/es/curry.js +32 -0
  11. package/es/defaultTo.js +4 -3
  12. package/es/every.js +4 -3
  13. package/es/filter.js +4 -3
  14. package/es/find.js +4 -3
  15. package/es/fromPairs.js +4 -3
  16. package/es/groupBy.js +4 -3
  17. package/es/index.js +4 -0
  18. package/es/internals/baseDebounce.js +2 -8
  19. package/es/internals/createForEach.js +2 -2
  20. package/es/internals/createReduce.js +2 -2
  21. package/es/internals/helpers.js +3 -2
  22. package/es/internals/native.js +2 -1
  23. package/es/invert.js +22 -0
  24. package/es/isBigInt.js +8 -0
  25. package/es/keyBy.js +4 -3
  26. package/es/map.js +4 -3
  27. package/es/omit.js +4 -3
  28. package/es/orderBy.js +4 -3
  29. package/es/partial.js +16 -11
  30. package/es/partition.js +4 -3
  31. package/es/pascalCase.js +11 -0
  32. package/es/pick.js +4 -3
  33. package/es/range.js +4 -3
  34. package/es/some.js +4 -3
  35. package/es/times.js +4 -3
  36. package/lib/clamp.js +4 -3
  37. package/lib/conforms.js +4 -3
  38. package/lib/conformsTo.js +4 -3
  39. package/lib/countBy.js +4 -3
  40. package/lib/curry.js +34 -0
  41. package/lib/defaultTo.js +4 -3
  42. package/lib/every.js +4 -3
  43. package/lib/filter.js +4 -3
  44. package/lib/find.js +4 -3
  45. package/lib/fromPairs.js +4 -3
  46. package/lib/groupBy.js +4 -3
  47. package/lib/index.js +12 -4
  48. package/lib/internals/baseDebounce.js +2 -8
  49. package/lib/internals/createForEach.js +2 -2
  50. package/lib/internals/createReduce.js +2 -2
  51. package/lib/internals/helpers.js +2 -1
  52. package/lib/internals/native.js +1 -0
  53. package/lib/invert.js +24 -0
  54. package/lib/isBigInt.js +10 -0
  55. package/lib/keyBy.js +4 -3
  56. package/lib/map.js +4 -3
  57. package/lib/omit.js +4 -3
  58. package/lib/orderBy.js +4 -3
  59. package/lib/partial.js +16 -11
  60. package/lib/partition.js +4 -3
  61. package/lib/pascalCase.js +13 -0
  62. package/lib/pick.js +4 -3
  63. package/lib/range.js +4 -3
  64. package/lib/some.js +4 -3
  65. package/lib/times.js +4 -3
  66. package/package.json +26 -24
  67. package/types/after.d.ts +2 -1
  68. package/types/allKeys.d.ts +1 -1
  69. package/types/allKeysIn.d.ts +1 -1
  70. package/types/before.d.ts +2 -1
  71. package/types/clamp.d.ts +29 -2
  72. package/types/conforms.d.ts +7 -2
  73. package/types/conformsTo.d.ts +24 -3
  74. package/types/countBy.d.ts +28 -2
  75. package/types/curry.d.ts +123 -0
  76. package/types/debounce.d.ts +2 -1
  77. package/types/defaultTo.d.ts +6 -3
  78. package/types/delay.d.ts +2 -1
  79. package/types/every.d.ts +28 -4
  80. package/types/filter.d.ts +26 -4
  81. package/types/find.d.ts +26 -4
  82. package/types/forEach.d.ts +1 -6
  83. package/types/forEachRight.d.ts +1 -6
  84. package/types/fromPairs.d.ts +20 -2
  85. package/types/groupBy.d.ts +28 -2
  86. package/types/index.d.ts +4 -0
  87. package/types/internals/baseDebounce.d.ts +2 -1
  88. package/types/internals/createForEach.d.ts +7 -6
  89. package/types/internals/createReduce.d.ts +11 -10
  90. package/types/internals/helpers.d.ts +1 -0
  91. package/types/internals/native.d.ts +1 -0
  92. package/types/internals/types.d.ts +3 -0
  93. package/types/invert.d.ts +19 -0
  94. package/types/isBigInt.d.ts +22 -0
  95. package/types/isFunction.d.ts +2 -1
  96. package/types/keyBy.d.ts +28 -2
  97. package/types/keys.d.ts +1 -1
  98. package/types/keysIn.d.ts +1 -1
  99. package/types/map.d.ts +28 -4
  100. package/types/negate.d.ts +2 -1
  101. package/types/omit.d.ts +6 -1
  102. package/types/omitBy.d.ts +3 -2
  103. package/types/once.d.ts +2 -1
  104. package/types/orderBy.d.ts +43 -2
  105. package/types/partial.d.ts +63 -11
  106. package/types/partition.d.ts +38 -2
  107. package/types/pascalCase.d.ts +27 -0
  108. package/types/pick.d.ts +6 -1
  109. package/types/pickBy.d.ts +3 -2
  110. package/types/range.d.ts +28 -3
  111. package/types/reduce.d.ts +1 -10
  112. package/types/reduceRight.d.ts +1 -10
  113. package/types/some.d.ts +26 -4
  114. package/types/throttle.d.ts +2 -1
  115. package/types/times.d.ts +25 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ut2",
3
- "version": "1.7.1",
3
+ "version": "1.8.0",
4
4
  "author": "caijf",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",
@@ -26,7 +26,7 @@
26
26
  "commit": "cz",
27
27
  "prepublishOnly": "npm test && npm run build",
28
28
  "tsc": "tsc --noEmit",
29
- "prepare": "husky install"
29
+ "prepare": "husky"
30
30
  },
31
31
  "repository": {
32
32
  "type": "git",
@@ -54,41 +54,43 @@
54
54
  },
55
55
  "config": {
56
56
  "commitizen": {
57
- "path": "./node_modules/cz-conventional-changelog"
57
+ "path": "@commitlint/cz-commitlint"
58
58
  }
59
59
  },
60
60
  "publishConfig": {
61
61
  "registry": "https://registry.npmjs.org/"
62
62
  },
63
63
  "devDependencies": {
64
- "@commitlint/cli": "^17.7.1",
65
- "@commitlint/config-conventional": "^17.7.0",
66
- "@rollup/plugin-commonjs": "^25.0.4",
67
- "@rollup/plugin-node-resolve": "^15.2.1",
68
- "@rollup/plugin-replace": "^5.0.2",
69
- "@rollup/plugin-terser": "^0.4.3",
70
- "@rollup/plugin-typescript": "^11.1.3",
71
- "@types/jest": "^29.5.4",
72
- "@types/node": "^20.6.2",
73
- "@typescript-eslint/eslint-plugin": "^5.62.0",
74
- "@typescript-eslint/parser": "^5.62.0",
64
+ "@commitlint/cli": "^19.2.1",
65
+ "@commitlint/config-conventional": "^19.1.0",
66
+ "@commitlint/cz-commitlint": "^19.2.0",
67
+ "@rollup/plugin-commonjs": "^25.0.7",
68
+ "@rollup/plugin-node-resolve": "^15.2.3",
69
+ "@rollup/plugin-replace": "^5.0.5",
70
+ "@rollup/plugin-terser": "^0.4.4",
71
+ "@rollup/plugin-typescript": "^11.1.6",
72
+ "@types/jest": "^29.5.12",
73
+ "@types/node": "^20.11.30",
74
+ "@typescript-eslint/eslint-plugin": "^7.3.1",
75
+ "@typescript-eslint/parser": "^7.3.1",
75
76
  "benchmark": "^2.1.4",
77
+ "commitizen": "^4.3.0",
76
78
  "cross-env": "^7.0.3",
77
- "cz-conventional-changelog": "^3.3.0",
78
79
  "dayjs": "^1.11.10",
79
80
  "docdash": "^2.0.2",
80
- "eslint": "^8.48.0",
81
- "husky": "^8.0.0",
82
- "jest": "^29.6.4",
83
- "jest-environment-jsdom": "^29.6.4",
81
+ "eslint": "^8.57.0",
82
+ "husky": "^9.0.11",
83
+ "inquirer": "9",
84
+ "jest": "^29.7.0",
85
+ "jest-environment-jsdom": "^29.7.0",
84
86
  "jsdoc": "^4.0.2",
85
- "lint-staged": "^13.3.0",
87
+ "lint-staged": "^15.2.2",
86
88
  "lodash": "^4.17.21",
87
- "prettier": "^2.8.8",
88
- "rollup": "^3.28.1",
89
- "ts-jest": "^29.1.1",
89
+ "prettier": "^3.2.5",
90
+ "rollup": "^4.13.0",
91
+ "ts-jest": "^29.1.2",
90
92
  "tslib": "^2.6.2",
91
- "typescript": "^5.2.2",
93
+ "typescript": "^5.4.3",
92
94
  "underscore": "^1.13.6"
93
95
  },
94
96
  "engines": {
package/types/after.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { FunctionAny } from './internals/types';
1
2
  /**
2
3
  * 创建一个函数,当它被调用 `n` 或更多次之后触发 `func` 。
3
4
  *
@@ -21,5 +22,5 @@
21
22
  * // 'done saving!'
22
23
  *
23
24
  */
24
- declare function after<T extends (...args: any[]) => any>(n: number, func: T): T;
25
+ declare function after<T extends FunctionAny>(n: number, func: T): T;
25
26
  export default after;
@@ -20,5 +20,5 @@
20
20
  * allKeys(new Foo); // ['a', Symbol(b)]
21
21
  *
22
22
  */
23
- declare function allKeys<T extends object>(object: T): (string | symbol)[];
23
+ declare function allKeys(object?: any): (string | symbol)[];
24
24
  export default allKeys;
@@ -20,5 +20,5 @@
20
20
  * allKeysIn(new Foo); // ['a', 'c', Symbol(b), Symbol(d)]
21
21
  *
22
22
  */
23
- declare function allKeysIn<T extends object>(object: T): (string | symbol)[];
23
+ declare function allKeysIn(object?: any): (string | symbol)[];
24
24
  export default allKeysIn;
package/types/before.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { FunctionAny } from './internals/types';
1
2
  /**
2
3
  * 创建一个调用 `func` 的函数,调用次数少于 `n` 次。之后再调用这个函数,将返回最后一次调用 `func` 的结果。
3
4
  *
@@ -20,5 +21,5 @@
20
21
  * increment(); // 2 返回之前的结果
21
22
  *
22
23
  */
23
- declare function before<T extends (...args: any[]) => any>(n: number, func: T): T;
24
+ declare function before<T extends FunctionAny>(n: number, func: T): T;
24
25
  export default before;
package/types/clamp.d.ts CHANGED
@@ -1,3 +1,30 @@
1
- declare function clamp(number: number, upper: number): number;
2
- declare function clamp(number: number, lower: number, upper: number): number;
1
+ interface Clamp {
2
+ (number: number, upper: number): number;
3
+ (number: number, lower: number, upper: number): number;
4
+ }
5
+ /**
6
+ * 数字限制在 `lower` 和 `upper` 之间的值。
7
+ *
8
+ * @function
9
+ * @alias module:Number.clamp
10
+ * @since 1.0.0
11
+ * @param {number} number 被限制的值。
12
+ * @param {number} [lower] 下限。
13
+ * @param {number} upper 上限。
14
+ * @returns {number} 被限制的值。
15
+ * @example
16
+ *
17
+ * clamp(-10, -5, 5); // -5
18
+ *
19
+ * clamp(-10, 0, 5); // 0
20
+ *
21
+ * clamp(10, -5, 5); // 5
22
+ *
23
+ * // 仅限制上限
24
+ * clamp(10, 5); // 5
25
+ *
26
+ * clamp(-10, 5); // -10
27
+ *
28
+ */
29
+ declare const clamp: Clamp;
3
30
  export default clamp;
@@ -1,7 +1,12 @@
1
+ import { PropertyName, WithNullable } from './internals/types';
2
+ interface ConformsFunction {
3
+ <T extends object, K extends keyof T>(source: Record<PropertyName, (value: T[K]) => boolean>): (object: WithNullable<T>) => boolean;
4
+ (source: object): (object: any) => boolean;
5
+ }
1
6
  /**
2
7
  * 创建一个函数,调用 `source` 的属性名对应的断言函数与传入对象相对应属性名的值进行断言处理。如果都符合返回 `true`,否则返回 `false` 。
3
8
  *
4
- * @static
9
+ * @function
5
10
  * @alias module:Util.conforms
6
11
  * @since 1.0.0
7
12
  * @param {Object} source 要断言属性是否符合的对象。
@@ -15,5 +20,5 @@
15
20
  *
16
21
  * objs.filter(conforms({ b: value => value > 1 })); // [{ a: 2: b: 2 }]
17
22
  */
18
- declare function conforms<T extends object, K extends keyof T, S extends object = Record<string, (value: T[K]) => any>>(source: S): (object: T) => boolean;
23
+ declare const conforms: ConformsFunction;
19
24
  export default conforms;
@@ -1,4 +1,25 @@
1
- import { WithNullable } from './internals/types';
2
- declare function conformsTo<T extends object, K extends keyof T>(object: T, source: Record<K, (value: T[K]) => any>): boolean;
3
- declare function conformsTo<T extends WithNullable<object>>(object: T, source: Record<string | symbol, (value: any) => any>): boolean;
1
+ import { PropertyName, WithNullable } from './internals/types';
2
+ interface ConformsTo {
3
+ <T extends object, K extends keyof T>(object: T, source: Record<K, (value: T[K]) => boolean>): boolean;
4
+ (object: WithNullable<object>, source: Record<PropertyName, (value: any) => boolean>): boolean;
5
+ }
6
+ /**
7
+ * 通过调用断言 `source` 的属性与 `object` 的相应属性值,检查 `object` 是否符合 `source` 。
8
+ *
9
+ * @function
10
+ * @alias module:Util.conformsTo
11
+ * @since 1.0.0
12
+ * @param {Object} object 要检查的对象。
13
+ * @param {Object} source 要断言属性是否符合的对象。
14
+ * @returns {boolean} 如果 `object` 符合,返回 `true` ,否则返回 `false` 。
15
+ * @example
16
+ *
17
+ * const object = { a: 1, b: 2 }
18
+ *
19
+ * conformsTo(object, { b: value => value > 1 }); // true
20
+ *
21
+ * conformsTo(object, { b: value => value > 2 }); // false
22
+ *
23
+ */
24
+ declare const conformsTo: ConformsTo;
4
25
  export default conformsTo;
@@ -1,4 +1,30 @@
1
1
  import { CollectionList, CollectionObject, IterateeParam } from './internals/types';
2
- declare function countBy<T>(collection: CollectionList<T>, iteratee?: IterateeParam<T>): Record<string, number>;
3
- declare function countBy<T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: IterateeParam<V>): Record<string, number>;
2
+ interface CountBy {
3
+ <T>(collection: CollectionList<T>, iteratee?: IterateeParam<T>): Record<string, number>;
4
+ <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: IterateeParam<V>): Record<string, number>;
5
+ }
6
+ /**
7
+ * 创建一个组成对象, `key` 是经过 `iteratee` 执行处理 `collection` 中每个元素后返回的结果,每个 `key` 对应的值是 `iteratee` 返回该 `key` 的次数。
8
+ *
9
+ * `iteratee` 调用时会传入 1 个参数 `value` 。
10
+ *
11
+ * @function
12
+ * @alias module:Collection.countBy
13
+ * @since 1.0.0
14
+ * @param {ArrayLike<any> | object} collection 一个用来迭代的集合。
15
+ * @param {Function | string} [iteratee=identity] 迭代函数,用来转换键。
16
+ * @returns {Object} 组成集合对象。
17
+ * @example
18
+ *
19
+ * countBy([6, 4, 6]); // {'6': 2, '4': 1}
20
+ *
21
+ * countBy([6.1, 4.2, 6.3], Math.floor); // {'6': 2, '4': 1}
22
+ *
23
+ * countBy([{n: 6.1}, {n: 4.2}, {n: 6.3}], item=>Math.floor(item.n)); // {'6': 2, '4': 1}
24
+ *
25
+ * // 迭代函数可以直接写入属性。
26
+ * countBy(['one', 'two', 'three'], 'length'); // {'3': 2, '5': 1}
27
+ *
28
+ */
29
+ declare const countBy: CountBy;
4
30
  export default countBy;
@@ -0,0 +1,123 @@
1
+ declare const PLACEHOLDER: {
2
+ __ut2_curry_ph__: null;
3
+ };
4
+ type Placeholder = typeof PLACEHOLDER;
5
+ interface Curry {
6
+ <T1, R>(func: (t1: T1) => R, arity?: number): CurriedFunction1<T1, R>;
7
+ <T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): CurriedFunction2<T1, T2, R>;
8
+ <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): CurriedFunction3<T1, T2, T3, R>;
9
+ <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): CurriedFunction4<T1, T2, T3, T4, R>;
10
+ <T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, arity?: number): CurriedFunction5<T1, T2, T3, T4, T5, R>;
11
+ (func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
12
+ placeholder: Placeholder;
13
+ _: Placeholder;
14
+ }
15
+ interface CurriedFunction1<T1, R> {
16
+ (t1: T1): R;
17
+ (t1: Placeholder): CurriedFunction1<T1, R>;
18
+ (): CurriedFunction1<T1, R>;
19
+ }
20
+ interface CurriedFunction2<T1, T2, R> {
21
+ (t1: Placeholder, t2: T2): CurriedFunction1<T1, R>;
22
+ (t1: T1, t2: T2): R;
23
+ (t1: T1): CurriedFunction1<T2, R>;
24
+ (t1: Placeholder): CurriedFunction2<T1, T2, R>;
25
+ (): CurriedFunction2<T1, T2, R>;
26
+ }
27
+ interface CurriedFunction3<T1, T2, T3, R> {
28
+ (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction2<T1, T2, R>;
29
+ (t1: Placeholder, t2: T2, t3: T3): CurriedFunction1<T1, R>;
30
+ (t1: T1, t2: Placeholder, t3: T3): CurriedFunction1<T2, R>;
31
+ (t1: T1, t2: T2, t3: T3): R;
32
+ (t1: Placeholder, t2: T2): CurriedFunction2<T1, T3, R>;
33
+ (t1: T1, t2: T2): CurriedFunction1<T3, R>;
34
+ (t1: T1): CurriedFunction2<T2, T3, R>;
35
+ (t1: Placeholder): CurriedFunction3<T1, T2, T3, R>;
36
+ (): CurriedFunction3<T1, T2, T3, R>;
37
+ }
38
+ interface CurriedFunction4<T1, T2, T3, T4, R> {
39
+ (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction3<T1, T2, T3, R>;
40
+ (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4): CurriedFunction2<T1, T2, R>;
41
+ (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4): CurriedFunction2<T1, T3, R>;
42
+ (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction2<T2, T3, R>;
43
+ (t1: T1, t2: T2, t3: Placeholder, t4: T4): CurriedFunction1<T3, R>;
44
+ (t1: T1, t2: Placeholder, t3: T3, t4: T4): CurriedFunction1<T2, R>;
45
+ (t1: Placeholder, t2: T2, t3: T3, t4: T4): CurriedFunction1<T1, R>;
46
+ (t1: T1, t2: T2, t3: T3, t4: T4): R;
47
+ (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction3<T1, T2, T4, R>;
48
+ (t1: T1, t2: Placeholder, t3: T3): CurriedFunction2<T2, T4, R>;
49
+ (t1: Placeholder, t2: T2, t3: T3): CurriedFunction2<T1, T4, R>;
50
+ (t1: T1, t2: T2, t3: T3): CurriedFunction1<T4, R>;
51
+ (t1: Placeholder, t2: T2): CurriedFunction3<T1, T3, T4, R>;
52
+ (t1: T1, t2: T2): CurriedFunction2<T3, T4, R>;
53
+ (t1: T1): CurriedFunction3<T2, T3, T4, R>;
54
+ (t1: Placeholder): CurriedFunction4<T1, T2, T3, T4, R>;
55
+ (): CurriedFunction4<T1, T2, T3, T4, R>;
56
+ }
57
+ interface CurriedFunction5<T1, T2, T3, T4, T5, R> {
58
+ (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction4<T1, T2, T3, T4, R>;
59
+ (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4, t5: T5): CurriedFunction3<T1, T2, T3, R>;
60
+ (t1: Placeholder, t2: Placeholder, t3: T3, t4: Placeholder, t5: T5): CurriedFunction3<T1, T2, T4, R>;
61
+ (t1: Placeholder, t2: T2, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction3<T1, T3, T4, R>;
62
+ (t1: T1, t2: Placeholder, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction3<T2, T3, T4, R>;
63
+ (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4, t5: T5): CurriedFunction2<T1, T2, R>;
64
+ (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4, t5: T5): CurriedFunction2<T1, T3, R>;
65
+ (t1: Placeholder, t2: T2, t3: T3, t4: Placeholder, t5: T5): CurriedFunction2<T1, T4, R>;
66
+ (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4, t5: T5): CurriedFunction2<T2, T3, R>;
67
+ (t1: T1, t2: Placeholder, t3: T3, t4: Placeholder, t5: T5): CurriedFunction2<T2, T4, R>;
68
+ (t1: T1, t2: T2, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction2<T3, T4, R>;
69
+ (t1: T1, t2: T2, t3: T3, t4: Placeholder, t5: T5): CurriedFunction1<T4, R>;
70
+ (t1: T1, t2: T2, t3: Placeholder, t4: T4, t5: T5): CurriedFunction1<T3, R>;
71
+ (t1: T1, t2: Placeholder, t3: T3, t4: T4, t5: T5): CurriedFunction1<T2, R>;
72
+ (t1: Placeholder, t2: T2, t3: T3, t4: T4, t5: T5): CurriedFunction1<T1, R>;
73
+ (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;
74
+ (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction4<T1, T2, T3, T5, R>;
75
+ (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4): CurriedFunction3<T1, T2, T5, R>;
76
+ (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4): CurriedFunction3<T1, T3, T5, R>;
77
+ (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction3<T2, T3, T5, R>;
78
+ (t1: T1, t2: T2, t3: Placeholder, t4: T4): CurriedFunction2<T3, T5, R>;
79
+ (t1: T1, t2: Placeholder, t3: T3, t4: T4): CurriedFunction2<T2, T5, R>;
80
+ (t1: Placeholder, t2: T2, t3: T3, t4: T4): CurriedFunction2<T1, T5, R>;
81
+ (t1: T1, t2: T2, t3: T3, t4: T4): CurriedFunction1<T5, R>;
82
+ (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction4<T1, T2, T4, T5, R>;
83
+ (t1: T1, t2: Placeholder, t3: T3): CurriedFunction3<T2, T4, T5, R>;
84
+ (t1: Placeholder, t2: T2, t3: T3): CurriedFunction3<T1, T4, T5, R>;
85
+ (t1: T1, t2: T2, t3: T3): CurriedFunction2<T4, T5, R>;
86
+ (t1: Placeholder, t2: T2): CurriedFunction4<T1, T3, T4, T5, R>;
87
+ (t1: T1, t2: T2): CurriedFunction3<T3, T4, T5, R>;
88
+ (t1: T1): CurriedFunction4<T2, T3, T4, T5, R>;
89
+ (t1: Placeholder): CurriedFunction5<T1, T2, T3, T4, T5, R>;
90
+ (): CurriedFunction5<T1, T2, T3, T4, T5, R>;
91
+ }
92
+ /**
93
+ * 创建一个函数。该函数接受 `func` 参数,在提供的参数数量达到 `arity` 后调用 `func` 并返回其结果。
94
+ *
95
+ * `curry._` 或 `curry.placeholder` 可用作参数的占位符。
96
+ *
97
+ * @function
98
+ * @alias module:Function.curry
99
+ * @since 1.8.0
100
+ * @param {Function} func 需要柯里化的函数。
101
+ * @param {number} [arity] 指定参数数量,默认值为 `func.length`。
102
+ * @returns {Function} 新的柯里化函数。
103
+ * @example
104
+ *
105
+ * function abc(a, b, c){
106
+ * return [a, b, c];
107
+ * }
108
+ *
109
+ * var curried = curry(abc);
110
+ *
111
+ * curried(1)(2)(3); // [1, 2, 3]
112
+ *
113
+ * curried(1, 2)(3); // [1, 2, 3]
114
+ *
115
+ * curried(1, 2, 3); // [1, 2, 3]
116
+ *
117
+ * curried(1)(curry._, 3)(2); // [1, 2, 3]
118
+ *
119
+ * curried(curry._, curry._, 3)(curry._, 2)(1); // [1, 2, 3]
120
+ *
121
+ */
122
+ declare const curry: Curry;
123
+ export default curry;
@@ -1,3 +1,4 @@
1
+ import { FunctionAny } from './internals/types';
1
2
  /**
2
3
  * 创建一个防抖动函数,该函数会从上一次被调用后,延迟 `wait` 毫秒数后调用 `func` 方法。
3
4
  *
@@ -33,7 +34,7 @@
33
34
  * window.addEventListener('popstate', debounced.cancel);
34
35
  *
35
36
  */
36
- declare function debounce<T extends (...args: any[]) => any>(func: T, wait?: number, immediate?: boolean): {
37
+ declare function debounce<T extends FunctionAny>(func: T, wait?: number, immediate?: boolean): {
37
38
  (this: any, ...args: Parameters<T>): ReturnType<T>;
38
39
  cancel: () => void;
39
40
  flush: () => ReturnType<T>;
@@ -1,7 +1,11 @@
1
+ interface DefaultTo {
2
+ <T>(value: T | null | undefined, defaultValue: T): T;
3
+ <T, D>(value: T | null | undefined, defaultValue: D): T | D;
4
+ }
1
5
  /**
2
6
  * 检查值以确定是否应在其位置返回默认值。如果值为 `NaN` `null` 或 `undefined` ,返回 `defaultValue` 。
3
7
  *
4
- * @static
8
+ * @function
5
9
  * @alias module:Util.defaultTo
6
10
  * @since 1.0.0
7
11
  * @param {*} value 要检查的值。
@@ -16,6 +20,5 @@
16
20
  * defaultTo(null, undefined); // undefined
17
21
  *
18
22
  */
19
- declare function defaultTo<T>(value: T | null | undefined, defaultValue: T): T;
20
- declare function defaultTo<T, D>(value: T | null | undefined, defaultValue: D): T | D;
23
+ declare const defaultTo: DefaultTo;
21
24
  export default defaultTo;
package/types/delay.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ import { FunctionAny } from './internals/types';
2
3
  /**
3
4
  * 延迟 `wait` 毫秒后调用 `func` 。
4
5
  *
@@ -19,5 +20,5 @@
19
20
  * // 'hello world'
20
21
  *
21
22
  */
22
- declare function delay<T extends (...args: any[]) => any>(func: T, wait: number, ...args: Parameters<T>): NodeJS.Timeout;
23
+ declare function delay<T extends FunctionAny>(this: any, func: T, wait: number, ...args: Parameters<T>): NodeJS.Timeout;
23
24
  export default delay;
package/types/every.d.ts CHANGED
@@ -1,6 +1,30 @@
1
1
  import { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';
2
- declare function every<T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): boolean;
3
- declare function every(collection: WithNullable<string>, predicate?: StringIterator<any>): boolean;
4
- declare function every<T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): boolean;
5
- declare function every<T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): boolean;
2
+ interface Every {
3
+ <T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): boolean;
4
+ (collection: WithNullable<string>, predicate?: StringIterator<any>): boolean;
5
+ <T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): boolean;
6
+ <T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): boolean;
7
+ }
8
+ /**
9
+ * 迭代集合中的元素执行 `predicate` 函数,如果全部元素都通过 `predicate` 返回真值,则返回 `true` ,否则停止迭代并返回 `false` 。
10
+ *
11
+ * `predicate` 调用时会传入三个参数 `value` `index|key` `collection` 。
12
+ *
13
+ * @function
14
+ * @alias module:Collection.every
15
+ * @since 1.7.0
16
+ * @param {ArrayLike<any> | Object} collection 要迭代的集合。
17
+ * @param {function} [predicate=identity] 每次迭代调用的函数。
18
+ * @returns {boolean} 如果全部元素都通过 `predicate` 测试,则返回 `true` ,否则返回 `false` 。
19
+ * @example
20
+ *
21
+ * const arr = [1, 2, 3, 4, 5, 6];
22
+ * every(arr, item => item % 2 === 0); // false
23
+ * every(arr); // true
24
+ *
25
+ * const obj = { one: 1, two: 2, three: 3 };
26
+ * every(obj, item => item > 1); // false
27
+ * every(obj, item => item > 0); // true
28
+ */
29
+ declare const every: Every;
6
30
  export default every;
package/types/filter.d.ts CHANGED
@@ -1,6 +1,28 @@
1
1
  import { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';
2
- declare function filter<T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): T[];
3
- declare function filter(collection: WithNullable<string>, predicate?: StringIterator<any>): string[];
4
- declare function filter<T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): T[];
5
- declare function filter<T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): Array<T[keyof T]>;
2
+ interface Filter {
3
+ <T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): T[];
4
+ (collection: WithNullable<string>, predicate?: StringIterator<any>): string[];
5
+ <T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): T[];
6
+ <T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): Array<T[keyof T]>;
7
+ }
8
+ /**
9
+ * 过滤集合元素,为每个元素执行 `predicate` 函数,返回真值的元素将保留在结果数组中(不改变原值)。
10
+ *
11
+ * `predicate` 调用时会传入三个参数 `value` `index|key` `collection` 。
12
+ *
13
+ * @static
14
+ * @alias module:Collection.filter
15
+ * @since 1.7.0
16
+ * @param {ArrayLike<any> | Object} collection 要迭代的集合。
17
+ * @param {function} [predicate=identity] 每次迭代调用的函数。
18
+ * @returns {Array} 返回新的过滤数组。
19
+ * @example
20
+ *
21
+ * const arr = [1, 2, 3, 4, 5, 6];
22
+ * filter(arr, item => item % 2 === 0); // [2, 4, 6]
23
+ *
24
+ * const obj = { one: 1, two: 2, three: 3 };
25
+ * filter(obj, item => item > 1); // [2, 3]
26
+ */
27
+ declare const filter: Filter;
6
28
  export default filter;
package/types/find.d.ts CHANGED
@@ -1,6 +1,28 @@
1
1
  import { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';
2
- declare function find<T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): T | undefined;
3
- declare function find(collection: WithNullable<string>, predicate?: StringIterator<any>): string | undefined;
4
- declare function find<T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): T | undefined;
5
- declare function find<T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): T[keyof T] | undefined;
2
+ interface Find {
3
+ <T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): T | undefined;
4
+ (collection: WithNullable<string>, predicate?: StringIterator<any>): string | undefined;
5
+ <T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): T | undefined;
6
+ <T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): T[keyof T] | undefined;
7
+ }
8
+ /**
9
+ * 迭代集合中的元素执行 `predicate` 函数,返回第一个通过 `predicate` 返回真值的元素(停止迭代),如果都不通过返回 `undefined` 。
10
+ *
11
+ * `predicate` 调用时会传入三个参数 `value` `index|key` `collection` 。
12
+ *
13
+ * @function
14
+ * @alias module:Collection.find
15
+ * @since 1.7.0
16
+ * @param {ArrayLike<any> | Object} collection 要迭代的集合。
17
+ * @param {function} [predicate=identity] 每次迭代调用的函数。
18
+ * @returns {ArrayLike<any> | Object} 返回第一个通过 `predicate` 返回真值的元素,否则返回 `undefined`。
19
+ * @example
20
+ *
21
+ * const arr = [1, 2, 3, 4, 5, 6];
22
+ * find(arr, item => item % 2 === 0); // 2
23
+ *
24
+ * const obj = { one: 1, two: 2, three: 3 };
25
+ * find(obj, item => item > 1); // 2
26
+ */
27
+ declare const find: Find;
6
28
  export default find;
@@ -27,10 +27,5 @@
27
27
  * // 2 'b'
28
28
  *
29
29
  */
30
- declare const forEach: {
31
- <T>(collection: import("./internals/types").WithNullable<T[]>, iteratee?: import("./internals/types").ArrayIterator<T, any> | undefined): T[];
32
- (collection: import("./internals/types").WithNullable<string>, iteratee?: import("./internals/types").StringIterator<any> | undefined): string;
33
- <T_1>(collection: import("./internals/types").WithNullable<ArrayLike<T_1>>, iteratee?: import("./internals/types").ArrayLikeIterator<T_1, any> | undefined): ArrayLike<T_1>;
34
- <T_2 extends object>(collection: import("./internals/types").WithNullable<T_2>, iteratee?: import("./internals/types").ObjectIterator<T_2, any> | undefined): T_2;
35
- };
30
+ declare const forEach: import("./internals/createForEach").ForEach;
36
31
  export default forEach;
@@ -27,10 +27,5 @@
27
27
  * // 1 'a'
28
28
  *
29
29
  */
30
- declare const forEachRight: {
31
- <T>(collection: import("./internals/types").WithNullable<T[]>, iteratee?: import("./internals/types").ArrayIterator<T, any> | undefined): T[];
32
- (collection: import("./internals/types").WithNullable<string>, iteratee?: import("./internals/types").StringIterator<any> | undefined): string;
33
- <T_1>(collection: import("./internals/types").WithNullable<ArrayLike<T_1>>, iteratee?: import("./internals/types").ArrayLikeIterator<T_1, any> | undefined): ArrayLike<T_1>;
34
- <T_2 extends object>(collection: import("./internals/types").WithNullable<T_2>, iteratee?: import("./internals/types").ObjectIterator<T_2, any> | undefined): T_2;
35
- };
30
+ declare const forEachRight: import("./internals/createForEach").ForEach;
36
31
  export default forEachRight;
@@ -1,3 +1,21 @@
1
- declare function fromPairs<P extends string | number | symbol, V = any>(array: [P, V][]): Record<P, V>;
2
- declare function fromPairs<P extends string | number | symbol>(array: any[][]): Record<P, any>;
1
+ interface FromPairs {
2
+ <P extends string | number | symbol, V = any>(array: [P, V][]): Record<P, V>;
3
+ <P extends string | number | symbol>(array: any[][]): Record<P, any>;
4
+ }
5
+ /**
6
+ * 将键值对数组转为对象。
7
+ *
8
+ * 与 [Object.entries](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) 正好相反。
9
+ *
10
+ * @static
11
+ * @alias module:Array.fromPairs
12
+ * @since 1.0.0
13
+ * @param {Array} array 键值对数组。
14
+ * @returns {Object} 新对象。
15
+ * @example
16
+ *
17
+ * fromPairs([['foo', 'bar'], ['baz', 42]]); // {foo: 'bar', baz: 42}
18
+ *
19
+ */
20
+ declare const fromPairs: FromPairs;
3
21
  export default fromPairs;
@@ -1,4 +1,30 @@
1
1
  import { CollectionList, CollectionObject, IterateeParam } from './internals/types';
2
- declare function groupBy<T>(collection: CollectionList<T>, iteratee?: IterateeParam<T>): Record<string, T[]>;
3
- declare function groupBy<T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: IterateeParam<V>): Record<string, V[]>;
2
+ interface GroupBy {
3
+ <T>(collection: CollectionList<T>, iteratee?: IterateeParam<T>): Record<string, T[]>;
4
+ <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: IterateeParam<V>): Record<string, V[]>;
5
+ }
6
+ /**
7
+ * 创建一个组成聚合对象, `key` 是经过 `iteratee` 执行处理 `collection` 中每个元素后返回的结果。分组值的顺序是由他们出现在 `collection` 的顺序确定的。每个键对应的值负责生成 `key` 的元素组成的数组。
8
+ *
9
+ * `iteratee` 调用时会传入 1 个参数 `value` 。
10
+ *
11
+ * @static
12
+ * @alias module:Collection.groupBy
13
+ * @since 1.0.0
14
+ * @param {ArrayLike<any> | Object} collection 一个用来迭代的集合。
15
+ * @param {Function | string} [iteratee=identity] 迭代函数,用来转换键。
16
+ * @returns {Object} 组成聚合对象。
17
+ * @example
18
+ *
19
+ * groupBy([6, 4, 6]); // {'6': [6, 6], '4': [4]}
20
+ *
21
+ * groupBy([6.1, 4.2, 6.3], Math.floor); // {'6': [6.1, 6.3], '4': [4.2]}
22
+ *
23
+ * groupBy([{n: 6.1}, {n: 4.2}, {n: 6.3}], item=>Math.floor(item.n)); // {'6': [{n: 6.1}, {n: 6.3}], '4': [{n: 4.2}]}
24
+ *
25
+ * // 迭代函数可以直接写入属性。
26
+ * groupBy(['one', 'two', 'three'], 'length'); // {'3': ['one', 'two'], '5': ['three']}
27
+ *
28
+ */
29
+ declare const groupBy: GroupBy;
4
30
  export default groupBy;
package/types/index.d.ts CHANGED
@@ -44,6 +44,7 @@ export { default as some } from './some';
44
44
  */
45
45
  export { default as after } from './after';
46
46
  export { default as before } from './before';
47
+ export { default as curry } from './curry';
47
48
  export { default as debounce } from './debounce';
48
49
  export { default as delay } from './delay';
49
50
  export { default as negate } from './negate';
@@ -61,6 +62,7 @@ export { default as isArray } from './isArray';
61
62
  export { default as isArrayBuffer } from './isArrayBuffer';
62
63
  export { default as isArrayLike } from './isArrayLike';
63
64
  export { default as isArrayLikeObject } from './isArrayLikeObject';
65
+ export { default as isBigInt } from './isBigInt';
64
66
  export { default as isBlob } from './isBlob';
65
67
  export { default as isBoolean } from './isBoolean';
66
68
  export { default as isBuffer } from './isBuffer';
@@ -122,6 +124,7 @@ export { default as randomInt } from './randomInt';
122
124
  */
123
125
  export { default as allKeys } from './allKeys';
124
126
  export { default as allKeysIn } from './allKeysIn';
127
+ export { default as invert } from './invert';
125
128
  export { default as keys } from './keys';
126
129
  export { default as keysIn } from './keysIn';
127
130
  export { default as merge } from './merge';
@@ -142,6 +145,7 @@ export { default as escapeRegExp } from './escapeRegExp';
142
145
  export { default as kebabCase } from './kebabCase';
143
146
  export { default as lowerCase } from './lowerCase';
144
147
  export { default as lowerFirst } from './lowerFirst';
148
+ export { default as pascalCase } from './pascalCase';
145
149
  export { default as snakeCase } from './snakeCase';
146
150
  export { default as unescape } from './unescape';
147
151
  export { default as upperCase } from './upperCase';
@@ -1,4 +1,5 @@
1
- declare function baseDebounce<T extends (...args: any[]) => any>(func: T, wait: number, immediate: boolean, __throttle__?: boolean): {
1
+ import { FunctionAny } from './types';
2
+ declare function baseDebounce<T extends FunctionAny>(func: T, wait: number, immediate: boolean, __throttle__?: boolean): {
2
3
  (this: any, ...args: Parameters<T>): ReturnType<T>;
3
4
  cancel: () => void;
4
5
  flush: () => ReturnType<T>;