rambda 10.3.3 → 10.3.4

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.
package/dist/rambda.cjs CHANGED
@@ -1044,8 +1044,18 @@ function mapObjectAsync(fn) {
1044
1044
  }
1045
1045
  }
1046
1046
 
1047
- function mapParallelAsync(fn) {
1048
- return async list => Promise.all(list.map((x, i) => fn(x, i)))
1047
+ function mapParallelAsync(fn, batchSize){
1048
+ if(!batchSize) return async list => Promise.all(list.map(fn))
1049
+
1050
+ return async list => {
1051
+ const result = [];
1052
+ for(let i = 0; i < list.length; i += batchSize){
1053
+ const batch = list.slice(i, i + batchSize);
1054
+ const batchResult = await Promise.all(batch.map((x, j) => fn(x, i + j)));
1055
+ result.push(...batchResult);
1056
+ }
1057
+ return result
1058
+ }
1049
1059
  }
1050
1060
 
1051
1061
  function mapPropObject(fn, prop) {
package/dist/rambda.js CHANGED
@@ -1042,8 +1042,18 @@ function mapObjectAsync(fn) {
1042
1042
  }
1043
1043
  }
1044
1044
 
1045
- function mapParallelAsync(fn) {
1046
- return async list => Promise.all(list.map((x, i) => fn(x, i)))
1045
+ function mapParallelAsync(fn, batchSize){
1046
+ if(!batchSize) return async list => Promise.all(list.map(fn))
1047
+
1048
+ return async list => {
1049
+ const result = [];
1050
+ for(let i = 0; i < list.length; i += batchSize){
1051
+ const batch = list.slice(i, i + batchSize);
1052
+ const batchResult = await Promise.all(batch.map((x, j) => fn(x, i + j)));
1053
+ result.push(...batchResult);
1054
+ }
1055
+ return result
1056
+ }
1047
1057
  }
1048
1058
 
1049
1059
  function mapPropObject(fn, prop) {
@@ -1048,8 +1048,18 @@
1048
1048
  }
1049
1049
  }
1050
1050
 
1051
- function mapParallelAsync(fn) {
1052
- return async list => Promise.all(list.map((x, i) => fn(x, i)))
1051
+ function mapParallelAsync(fn, batchSize){
1052
+ if(!batchSize) return async list => Promise.all(list.map(fn))
1053
+
1054
+ return async list => {
1055
+ const result = [];
1056
+ for(let i = 0; i < list.length; i += batchSize){
1057
+ const batch = list.slice(i, i + batchSize);
1058
+ const batchResult = await Promise.all(batch.map((x, j) => fn(x, i + j)));
1059
+ result.push(...batchResult);
1060
+ }
1061
+ return result
1062
+ }
1053
1063
  }
1054
1064
 
1055
1065
  function mapPropObject(fn, prop) {
package/index.d.cts CHANGED
@@ -547,23 +547,30 @@ export function mapObjectAsync<T extends object, Value>(
547
547
 
548
548
  /**
549
549
  * Wrapper around `Promise.all` for asynchronous mapping with `fn` over members of `list`.
550
+ * There is optional `batchSize` parameter to allow parallel execution to run in batches. In this case, the whole batch must complete before the next batch starts.
550
551
  */
551
- export function mapParallelAsync<T extends IterableContainer, U>(
552
- fn: (value: T[number], index: number) => Promise<U>,
553
- ): (data: T) => Promise<Mapped<T, U>>;
554
552
  export function mapParallelAsync<T extends IterableContainer, U>(
555
553
  fn: (value: T[number]) => Promise<U>,
554
+ batchSize?: number,
556
555
  ): (data: T) => Promise<Mapped<T, U>>;
557
556
 
558
557
  /**
559
- * It maps over a property of object that is a list.
558
+ * Convenience method, when one needs to maps over a object property that is a list.
560
559
  */
561
- export function mapPropObject<T extends object, K extends keyof T, Value>(
560
+ export function mapPropObject<T extends object, K extends keyof T, Value extends unknown>(
561
+ prop: K,
562
+ valueMapper: (
563
+ listItem: T[K] extends ReadonlyArray<infer ElementType> ? ElementType : never,
564
+ list: T[K] extends ReadonlyArray<any> ? T[K] : never,
565
+ ) => Value,
566
+ ): (data: T) => T[K] extends ReadonlyArray<any>
567
+ ? MergeTypes<Omit<T, K> & { [P in K]: Value[] }>
568
+ : never;
569
+ export function mapPropObject<T extends object, K extends keyof T, Value extends unknown>(
570
+ prop: K,
562
571
  valueMapper: (
563
- value: T[K] extends ReadonlyArray<infer ElementType> ? ElementType : never,
564
- data: T[K],
572
+ listItem: T[K] extends ReadonlyArray<infer ElementType> ? ElementType : never,
565
573
  ) => Value,
566
- prop: K,
567
574
  ): (data: T) => T[K] extends ReadonlyArray<any>
568
575
  ? MergeTypes<Omit<T, K> & { [P in K]: Value[] }>
569
576
  : never;
@@ -1827,7 +1834,7 @@ export function sort<T>(sortFn: (a: T, b: T) => number): (list: T[]) => T[];
1827
1834
  */
1828
1835
  export function sortBy<T>(sortFn: (x: T) => Ord): (list: T[]) => T[];
1829
1836
 
1830
- export function sortByDescending<T>(sortFn: (a: T, b: T) => number): (list: T[]) => T[];
1837
+ export function sortByDescending<T>(sortFn: (x: T) => Ord): (list: T[]) => T[];
1831
1838
 
1832
1839
  /**
1833
1840
  * It sorts `list` by the value of `path` property.
package/index.d.ts CHANGED
@@ -547,23 +547,30 @@ export function mapObjectAsync<T extends object, Value>(
547
547
 
548
548
  /**
549
549
  * Wrapper around `Promise.all` for asynchronous mapping with `fn` over members of `list`.
550
+ * There is optional `batchSize` parameter to allow parallel execution to run in batches. In this case, the whole batch must complete before the next batch starts.
550
551
  */
551
- export function mapParallelAsync<T extends IterableContainer, U>(
552
- fn: (value: T[number], index: number) => Promise<U>,
553
- ): (data: T) => Promise<Mapped<T, U>>;
554
552
  export function mapParallelAsync<T extends IterableContainer, U>(
555
553
  fn: (value: T[number]) => Promise<U>,
554
+ batchSize?: number,
556
555
  ): (data: T) => Promise<Mapped<T, U>>;
557
556
 
558
557
  /**
559
- * It maps over a property of object that is a list.
558
+ * Convenience method, when one needs to maps over a object property that is a list.
560
559
  */
561
- export function mapPropObject<T extends object, K extends keyof T, Value>(
560
+ export function mapPropObject<T extends object, K extends keyof T, Value extends unknown>(
561
+ prop: K,
562
+ valueMapper: (
563
+ listItem: T[K] extends ReadonlyArray<infer ElementType> ? ElementType : never,
564
+ list: T[K] extends ReadonlyArray<any> ? T[K] : never,
565
+ ) => Value,
566
+ ): (data: T) => T[K] extends ReadonlyArray<any>
567
+ ? MergeTypes<Omit<T, K> & { [P in K]: Value[] }>
568
+ : never;
569
+ export function mapPropObject<T extends object, K extends keyof T, Value extends unknown>(
570
+ prop: K,
562
571
  valueMapper: (
563
- value: T[K] extends ReadonlyArray<infer ElementType> ? ElementType : never,
564
- data: T[K],
572
+ listItem: T[K] extends ReadonlyArray<infer ElementType> ? ElementType : never,
565
573
  ) => Value,
566
- prop: K,
567
574
  ): (data: T) => T[K] extends ReadonlyArray<any>
568
575
  ? MergeTypes<Omit<T, K> & { [P in K]: Value[] }>
569
576
  : never;
@@ -1827,7 +1834,7 @@ export function sort<T>(sortFn: (a: T, b: T) => number): (list: T[]) => T[];
1827
1834
  */
1828
1835
  export function sortBy<T>(sortFn: (x: T) => Ord): (list: T[]) => T[];
1829
1836
 
1830
- export function sortByDescending<T>(sortFn: (a: T, b: T) => number): (list: T[]) => T[];
1837
+ export function sortByDescending<T>(sortFn: (x: T) => Ord): (list: T[]) => T[];
1831
1838
 
1832
1839
  /**
1833
1840
  * It sorts `list` by the value of `path` property.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rambda",
3
- "version": "10.3.3",
3
+ "version": "10.3.4",
4
4
  "scripts": {
5
5
  "out": "yarn populatedocs && yarn populatereadme && yarn build && yarn create-docsify",
6
6
  "build": "yarn build:main && yarn build:web && yarn build:esm",
@@ -16,7 +16,8 @@
16
16
  "test": "vitest run --watch -u",
17
17
  "test:typings": "dtslint --localTs ./node_modules/typescript/lib --expectOnly ./source",
18
18
  "create-docsify": "cd ../rambda-scripts && yarn create-docsify",
19
- "deps": "run dep:next",
19
+ "deps": "run dep:next 10",
20
+ "x": "run dep:stable 10",
20
21
  "ts": "yarn test:typings"
21
22
  },
22
23
  "niketaScripts": {
@@ -40,18 +41,18 @@
40
41
  "devDependencies": {
41
42
  "@definitelytyped/dtslint": "0.0.182",
42
43
  "@types/mocha": "10.0.10",
43
- "@types/node": "24.7.0",
44
- "@vitest/coverage-v8": "4.0.0-beta.17",
44
+ "@types/node": "24.10.1",
45
+ "@vitest/coverage-v8": "4.0.10",
45
46
  "helpers-fn": "2.0.0",
46
47
  "lodash": "4.17.21",
47
48
  "radashi": "13.0.0-beta.ffa4778",
48
49
  "rambdax": "11.3.1",
49
- "ramda": "0.31.3",
50
+ "ramda": "0.32.0",
50
51
  "remeda": "2.32.0",
51
- "rollup": "4.52.4",
52
+ "rollup": "4.53.3",
52
53
  "types-ramda": "0.31.0",
53
- "typescript": "6.0.0-dev.20251006",
54
- "vitest": "4.0.0-beta.17"
54
+ "typescript": "6.0.0-dev.20251119",
55
+ "vitest": "4.0.10"
55
56
  },
56
57
  "jest": {
57
58
  "testEnvironment": "node",
@@ -1,3 +1,13 @@
1
- export function mapParallelAsync(fn) {
2
- return async list => Promise.all(list.map((x, i) => fn(x, i)))
1
+ export function mapParallelAsync(fn, batchSize){
2
+ if(!batchSize) return async list => Promise.all(list.map(fn))
3
+
4
+ return async list => {
5
+ const result = []
6
+ for(let i = 0; i < list.length; i += batchSize){
7
+ const batch = list.slice(i, i + batchSize)
8
+ const batchResult = await Promise.all(batch.map((x, j) => fn(x, i + j)))
9
+ result.push(...batchResult)
10
+ }
11
+ return result
12
+ }
3
13
  }