@depup/remeda 2.42.0-depup.0 → 2.45.0-depup.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.
- package/README.md +2 -2
- package/changes.json +1 -1
- package/dist/filter.cjs.map +1 -1
- package/dist/filter.js.map +1 -1
- package/dist/index.d.cts +10 -10
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/isNot.cjs.map +1 -1
- package/dist/isNot.js.map +1 -1
- package/dist/pipe.cjs +1 -1
- package/dist/pipe.cjs.map +1 -1
- package/dist/pipe.js +1 -1
- package/dist/pipe.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -13,8 +13,8 @@ npm install @depup/remeda
|
|
|
13
13
|
|
|
14
14
|
| Field | Value |
|
|
15
15
|
|-------|-------|
|
|
16
|
-
| Original | [remeda](https://www.npmjs.com/package/remeda) @ 2.
|
|
17
|
-
| Processed | 2026-08-
|
|
16
|
+
| Original | [remeda](https://www.npmjs.com/package/remeda) @ 2.45.0 |
|
|
17
|
+
| Processed | 2026-08-30 |
|
|
18
18
|
| Smoke test | passed |
|
|
19
19
|
| Deps updated | 0 |
|
|
20
20
|
|
package/changes.json
CHANGED
package/dist/filter.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.cjs","names":["purry","SKIP_ITEM"],"sources":["../src/filter.ts"],"sourcesContent":["import type { Writable } from \"type-fest\";\nimport type { FilteredArray } from \"./internal/types/FilteredArray\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\nimport { purry } from \"./purry\";\n\n// When the predicate used for filter isn't refining (like a type-predicate) we\n// can narrow the result slightly if it's also trivial (it returns the same\n// result for all items). This is uncommon, but can be useful to \"short-circuit\"\n// the filter.\ntype NonRefinedFilteredArray<\n T extends IterableContainer,\n IsItemIncluded extends boolean,\n> = boolean extends IsItemIncluded\n ? // We don't know which items of the array the predicate would allow in the\n // output so we can only safely say that the result is an array with items\n // from the input array.\n // TODO: Theoretically we could build an output shape that would take into account the **order** of elements in the input array by reconstructing it with every single element in it either included or not, but this type can grow to a union of as much as 2^n options which might not be usable in practice.\n T[number][]\n : IsItemIncluded extends true\n ? // If the predicate is always true we return a shallow copy of the array.\n // If it was originally readonly we need to strip that away.\n Writable<T>\n : // If the predicate is always false we will always return an empty\n // array.\n [];\n\n/**\n * Creates a shallow copy of a portion of a given array, filtered down to just\n * the elements from the given array that pass the test implemented by the\n * provided function. Equivalent to `Array.prototype.filter`.\n *\n * Related operations:\n * - `splice` - to shape the array by *position* rather than by *value*.\n *\n * @param data - The array to filter.\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to keep the element in the resulting array, and `false`\n * otherwise. A type-predicate can also be used to narrow the result.\n * @returns A shallow copy of the given array containing just the elements that\n * pass the test. If no elements pass the test, an empty array is returned.\n * @signature\n * filter(data, predicate)\n * @example\n * filter([1, 2, 3], x => x % 2 === 1) // => [1, 3]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function filter
|
|
1
|
+
{"version":3,"file":"filter.cjs","names":["purry","SKIP_ITEM"],"sources":["../src/filter.ts"],"sourcesContent":["import type { Writable } from \"type-fest\";\nimport type { FilteredArray } from \"./internal/types/FilteredArray\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\nimport { purry } from \"./purry\";\n\n// When the predicate used for filter isn't refining (like a type-predicate) we\n// can narrow the result slightly if it's also trivial (it returns the same\n// result for all items). This is uncommon, but can be useful to \"short-circuit\"\n// the filter.\ntype NonRefinedFilteredArray<\n T extends IterableContainer,\n IsItemIncluded extends boolean,\n> = boolean extends IsItemIncluded\n ? // We don't know which items of the array the predicate would allow in the\n // output so we can only safely say that the result is an array with items\n // from the input array.\n // TODO: Theoretically we could build an output shape that would take into account the **order** of elements in the input array by reconstructing it with every single element in it either included or not, but this type can grow to a union of as much as 2^n options which might not be usable in practice.\n T[number][]\n : IsItemIncluded extends true\n ? // If the predicate is always true we return a shallow copy of the array.\n // If it was originally readonly we need to strip that away.\n Writable<T>\n : // If the predicate is always false we will always return an empty\n // array.\n [];\n\n/**\n * Creates a shallow copy of a portion of a given array, filtered down to just\n * the elements from the given array that pass the test implemented by the\n * provided function. Equivalent to `Array.prototype.filter`.\n *\n * Related operations:\n * - `splice` - to shape the array by *position* rather than by *value*.\n *\n * @param data - The array to filter.\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to keep the element in the resulting array, and `false`\n * otherwise. A type-predicate can also be used to narrow the result.\n * @returns A shallow copy of the given array containing just the elements that\n * pass the test. If no elements pass the test, an empty array is returned.\n * @signature\n * filter(data, predicate)\n * @example\n * filter([1, 2, 3], x => x % 2 === 1) // => [1, 3]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function filter<T extends IterableContainer, Condition>(\n data: T,\n predicate: (value: T[number], index: number, data: T) => value is Condition,\n): FilteredArray<T, Condition>;\nexport function filter<\n T extends IterableContainer,\n IsItemIncluded extends boolean,\n>(\n data: T,\n predicate: (value: T[number], index: number, data: T) => IsItemIncluded,\n): NonRefinedFilteredArray<T, IsItemIncluded>;\n\n/**\n * Creates a shallow copy of a portion of a given array, filtered down to just\n * the elements from the given array that pass the test implemented by the\n * provided function. Equivalent to `Array.prototype.filter`.\n *\n * Related operations:\n * - `splice` - to shape the array by *position* rather than by *value*.\n *\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to keep the element in the resulting array, and `false`\n * otherwise. A type-predicate can also be used to narrow the result.\n * @returns A shallow copy of the given array containing just the elements that\n * pass the test. If no elements pass the test, an empty array is returned.\n * @signature\n * filter(predicate)(data)\n * @example\n * pipe([1, 2, 3], filter(x => x % 2 === 1)) // => [1, 3]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function filter<T extends IterableContainer, Condition>(\n predicate: (value: T[number], index: number, data: T) => value is Condition,\n): (data: T) => FilteredArray<T, Condition>;\nexport function filter<\n T extends IterableContainer,\n IsItemIncluded extends boolean,\n>(\n predicate: (value: T[number], index: number, data: T) => IsItemIncluded,\n): (data: T) => NonRefinedFilteredArray<T, IsItemIncluded>;\n\nexport function filter(...args: readonly unknown[]): unknown {\n return purry(filterImplementation, args, lazyImplementation);\n}\n\nconst filterImplementation = <T>(\n data: readonly T[],\n predicate: (value: T, index: number, array: readonly T[]) => boolean,\n): T[] => data.filter(predicate);\n\nconst lazyImplementation =\n <T>(\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n ): LazyEvaluator<T> =>\n (value, index, data) =>\n predicate(value, index, data)\n ? { done: false, hasNext: true, next: value }\n : SKIP_ITEM;\n"],"mappings":"gJA6FA,SAAgB,EAAO,GAAG,EAAmC,CAC3D,OAAOA,EAAAA,MAAM,EAAsB,EAAM,CAAkB,CAC7D,CAEA,MAAM,GACJ,EACA,IACQ,EAAK,OAAO,CAAS,EAEzB,EAEF,IAED,EAAO,EAAO,IACb,EAAU,EAAO,EAAO,CAAI,EACxB,CAAE,KAAM,GAAO,QAAS,GAAM,KAAM,CAAM,EAC1CC,EAAAA"}
|
package/dist/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","names":[],"sources":["../src/filter.ts"],"sourcesContent":["import type { Writable } from \"type-fest\";\nimport type { FilteredArray } from \"./internal/types/FilteredArray\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\nimport { purry } from \"./purry\";\n\n// When the predicate used for filter isn't refining (like a type-predicate) we\n// can narrow the result slightly if it's also trivial (it returns the same\n// result for all items). This is uncommon, but can be useful to \"short-circuit\"\n// the filter.\ntype NonRefinedFilteredArray<\n T extends IterableContainer,\n IsItemIncluded extends boolean,\n> = boolean extends IsItemIncluded\n ? // We don't know which items of the array the predicate would allow in the\n // output so we can only safely say that the result is an array with items\n // from the input array.\n // TODO: Theoretically we could build an output shape that would take into account the **order** of elements in the input array by reconstructing it with every single element in it either included or not, but this type can grow to a union of as much as 2^n options which might not be usable in practice.\n T[number][]\n : IsItemIncluded extends true\n ? // If the predicate is always true we return a shallow copy of the array.\n // If it was originally readonly we need to strip that away.\n Writable<T>\n : // If the predicate is always false we will always return an empty\n // array.\n [];\n\n/**\n * Creates a shallow copy of a portion of a given array, filtered down to just\n * the elements from the given array that pass the test implemented by the\n * provided function. Equivalent to `Array.prototype.filter`.\n *\n * Related operations:\n * - `splice` - to shape the array by *position* rather than by *value*.\n *\n * @param data - The array to filter.\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to keep the element in the resulting array, and `false`\n * otherwise. A type-predicate can also be used to narrow the result.\n * @returns A shallow copy of the given array containing just the elements that\n * pass the test. If no elements pass the test, an empty array is returned.\n * @signature\n * filter(data, predicate)\n * @example\n * filter([1, 2, 3], x => x % 2 === 1) // => [1, 3]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function filter
|
|
1
|
+
{"version":3,"file":"filter.js","names":[],"sources":["../src/filter.ts"],"sourcesContent":["import type { Writable } from \"type-fest\";\nimport type { FilteredArray } from \"./internal/types/FilteredArray\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\nimport { purry } from \"./purry\";\n\n// When the predicate used for filter isn't refining (like a type-predicate) we\n// can narrow the result slightly if it's also trivial (it returns the same\n// result for all items). This is uncommon, but can be useful to \"short-circuit\"\n// the filter.\ntype NonRefinedFilteredArray<\n T extends IterableContainer,\n IsItemIncluded extends boolean,\n> = boolean extends IsItemIncluded\n ? // We don't know which items of the array the predicate would allow in the\n // output so we can only safely say that the result is an array with items\n // from the input array.\n // TODO: Theoretically we could build an output shape that would take into account the **order** of elements in the input array by reconstructing it with every single element in it either included or not, but this type can grow to a union of as much as 2^n options which might not be usable in practice.\n T[number][]\n : IsItemIncluded extends true\n ? // If the predicate is always true we return a shallow copy of the array.\n // If it was originally readonly we need to strip that away.\n Writable<T>\n : // If the predicate is always false we will always return an empty\n // array.\n [];\n\n/**\n * Creates a shallow copy of a portion of a given array, filtered down to just\n * the elements from the given array that pass the test implemented by the\n * provided function. Equivalent to `Array.prototype.filter`.\n *\n * Related operations:\n * - `splice` - to shape the array by *position* rather than by *value*.\n *\n * @param data - The array to filter.\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to keep the element in the resulting array, and `false`\n * otherwise. A type-predicate can also be used to narrow the result.\n * @returns A shallow copy of the given array containing just the elements that\n * pass the test. If no elements pass the test, an empty array is returned.\n * @signature\n * filter(data, predicate)\n * @example\n * filter([1, 2, 3], x => x % 2 === 1) // => [1, 3]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function filter<T extends IterableContainer, Condition>(\n data: T,\n predicate: (value: T[number], index: number, data: T) => value is Condition,\n): FilteredArray<T, Condition>;\nexport function filter<\n T extends IterableContainer,\n IsItemIncluded extends boolean,\n>(\n data: T,\n predicate: (value: T[number], index: number, data: T) => IsItemIncluded,\n): NonRefinedFilteredArray<T, IsItemIncluded>;\n\n/**\n * Creates a shallow copy of a portion of a given array, filtered down to just\n * the elements from the given array that pass the test implemented by the\n * provided function. Equivalent to `Array.prototype.filter`.\n *\n * Related operations:\n * - `splice` - to shape the array by *position* rather than by *value*.\n *\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to keep the element in the resulting array, and `false`\n * otherwise. A type-predicate can also be used to narrow the result.\n * @returns A shallow copy of the given array containing just the elements that\n * pass the test. If no elements pass the test, an empty array is returned.\n * @signature\n * filter(predicate)(data)\n * @example\n * pipe([1, 2, 3], filter(x => x % 2 === 1)) // => [1, 3]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function filter<T extends IterableContainer, Condition>(\n predicate: (value: T[number], index: number, data: T) => value is Condition,\n): (data: T) => FilteredArray<T, Condition>;\nexport function filter<\n T extends IterableContainer,\n IsItemIncluded extends boolean,\n>(\n predicate: (value: T[number], index: number, data: T) => IsItemIncluded,\n): (data: T) => NonRefinedFilteredArray<T, IsItemIncluded>;\n\nexport function filter(...args: readonly unknown[]): unknown {\n return purry(filterImplementation, args, lazyImplementation);\n}\n\nconst filterImplementation = <T>(\n data: readonly T[],\n predicate: (value: T, index: number, array: readonly T[]) => boolean,\n): T[] => data.filter(predicate);\n\nconst lazyImplementation =\n <T>(\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n ): LazyEvaluator<T> =>\n (value, index, data) =>\n predicate(value, index, data)\n ? { done: false, hasNext: true, next: value }\n : SKIP_ITEM;\n"],"mappings":"kFA6FA,SAAgB,EAAO,GAAG,EAAmC,CAC3D,OAAO,EAAM,EAAsB,EAAM,CAAkB,CAC7D,CAEA,MAAM,GACJ,EACA,IACQ,EAAK,OAAO,CAAS,EAEzB,EAEF,IAED,EAAO,EAAO,IACb,EAAU,EAAO,EAAO,CAAI,EACxB,CAAE,KAAM,GAAO,QAAS,GAAM,KAAM,CAAM,EAC1C"}
|
package/dist/index.d.cts
CHANGED
|
@@ -6622,13 +6622,12 @@ declare function evolve<T extends object, E extends Evolver<T>>(object: T, evolv
|
|
|
6622
6622
|
declare function evolve<T extends object, E extends Evolver<T>>(evolver: E): (object: T) => Evolved<T, E>;
|
|
6623
6623
|
//#endregion
|
|
6624
6624
|
//#region src/internal/types/FilteredArray.d.ts
|
|
6625
|
-
type FilteredArray<T extends IterableContainer, Condition> = T extends unknown ? [...FilteredFixedTuple<TupleParts<T>["required"], Condition>, ...PartialArray<FilteredFixedTuple<TupleParts<T>["optional"], Condition>>, ...CoercedArray<SymmetricRefine<TupleParts<T>["item"], Condition>>, ...FilteredFixedTuple<TupleParts<T>["suffix"], Condition>] : never;
|
|
6625
|
+
type FilteredArray<T extends IterableContainer, Condition> = IsNever<Condition> extends true ? [] : T extends unknown ? [...FilteredFixedTuple<TupleParts<T>["required"], Condition>, ...PartialArray<FilteredFixedTuple<TupleParts<T>["optional"], Condition>>, ...CoercedArray<SymmetricRefine<TupleParts<T>["item"], Condition>>, ...FilteredFixedTuple<TupleParts<T>["suffix"], Condition>] : never;
|
|
6626
6626
|
/**
|
|
6627
6627
|
* The real logic for filtering an array is done on fixed tuples (as those make
|
|
6628
6628
|
* up the required prefix, the optional prefix, and the suffix of the array).
|
|
6629
6629
|
*/
|
|
6630
|
-
type FilteredFixedTuple<T, Condition
|
|
6631
|
-
? Output | [...Output, Condition] : Output> : Output;
|
|
6630
|
+
type FilteredFixedTuple<T, Condition> = T extends readonly [infer Head, ...infer Rest] ? Head extends Condition ? [Head, ...FilteredFixedTuple<Rest, Condition>] : FilteredFixedTuple<Rest, Condition> | (IsNever<SymmetricRefine<Head, Condition>> extends true ? never : [SymmetricRefine<Head, Condition>, ...FilteredFixedTuple<Rest, Condition>]) : [];
|
|
6632
6631
|
/**
|
|
6633
6632
|
* This type is similar to the built-in `Extract` type, but allows us to have
|
|
6634
6633
|
* either Item or Condition be narrower than the other.
|
|
@@ -6642,7 +6641,8 @@ type SymmetricRefine<Item, Condition> = Item extends Condition ? Item : Conditio
|
|
|
6642
6641
|
* allowing more value types than the other (e.g.,
|
|
6643
6642
|
* `{ a: "cat" | "dog", b: number }` and `{ a: "cat" }`).
|
|
6644
6643
|
*/
|
|
6645
|
-
type RefineIncomparable<Item, Condition> = Item extends
|
|
6644
|
+
type RefineIncomparable<Item, Condition> = IsRealObject<Item> extends true ? IsRealObject<Condition> extends true ? IsNever<Extract<keyof Item, keyof Condition>> extends true ? never : Item & Condition : never : never;
|
|
6645
|
+
type IsRealObject<T> = T extends object ? T extends readonly unknown[] ? false : true : false;
|
|
6646
6646
|
//#endregion
|
|
6647
6647
|
//#region src/filter.d.ts
|
|
6648
6648
|
type NonRefinedFilteredArray<T extends IterableContainer, IsItemIncluded extends boolean> = boolean extends IsItemIncluded ? T[number][] : IsItemIncluded extends true ? Writable$1<T> : [];
|
|
@@ -6668,7 +6668,7 @@ type NonRefinedFilteredArray<T extends IterableContainer, IsItemIncluded extends
|
|
|
6668
6668
|
* @lazy
|
|
6669
6669
|
* @category Array
|
|
6670
6670
|
*/
|
|
6671
|
-
declare function filter<T extends IterableContainer, Condition
|
|
6671
|
+
declare function filter<T extends IterableContainer, Condition>(data: T, predicate: (value: T[number], index: number, data: T) => value is Condition): FilteredArray<T, Condition>;
|
|
6672
6672
|
declare function filter<T extends IterableContainer, IsItemIncluded extends boolean>(data: T, predicate: (value: T[number], index: number, data: T) => IsItemIncluded): NonRefinedFilteredArray<T, IsItemIncluded>;
|
|
6673
6673
|
/**
|
|
6674
6674
|
* Creates a shallow copy of a portion of a given array, filtered down to just
|
|
@@ -6680,7 +6680,7 @@ declare function filter<T extends IterableContainer, IsItemIncluded extends bool
|
|
|
6680
6680
|
*
|
|
6681
6681
|
* @param predicate - A function to execute for each element in the array. It
|
|
6682
6682
|
* should return `true` to keep the element in the resulting array, and `false`
|
|
6683
|
-
* otherwise.
|
|
6683
|
+
* otherwise. A type-predicate can also be used to narrow the result.
|
|
6684
6684
|
* @returns A shallow copy of the given array containing just the elements that
|
|
6685
6685
|
* pass the test. If no elements pass the test, an empty array is returned.
|
|
6686
6686
|
* @signature
|
|
@@ -6691,7 +6691,7 @@ declare function filter<T extends IterableContainer, IsItemIncluded extends bool
|
|
|
6691
6691
|
* @lazy
|
|
6692
6692
|
* @category Array
|
|
6693
6693
|
*/
|
|
6694
|
-
declare function filter<T extends IterableContainer, Condition
|
|
6694
|
+
declare function filter<T extends IterableContainer, Condition>(predicate: (value: T[number], index: number, data: T) => value is Condition): (data: T) => FilteredArray<T, Condition>;
|
|
6695
6695
|
declare function filter<T extends IterableContainer, IsItemIncluded extends boolean>(predicate: (value: T[number], index: number, data: T) => IsItemIncluded): (data: T) => NonRefinedFilteredArray<T, IsItemIncluded>;
|
|
6696
6696
|
//#endregion
|
|
6697
6697
|
//#region src/find.d.ts
|
|
@@ -8426,7 +8426,6 @@ declare function isNonNullish<T>(data: T): data is NonNullable<T>;
|
|
|
8426
8426
|
* A function that takes a guard function as predicate and returns a guard that negates it.
|
|
8427
8427
|
*
|
|
8428
8428
|
* @param predicate - The guard function to negate.
|
|
8429
|
-
* @returns Function A guard function.
|
|
8430
8429
|
* @signature
|
|
8431
8430
|
* isNot(isTruthy)(data)
|
|
8432
8431
|
* @example
|
|
@@ -8435,7 +8434,8 @@ declare function isNonNullish<T>(data: T): data is NonNullable<T>;
|
|
|
8435
8434
|
* @dataLast
|
|
8436
8435
|
* @category Guard
|
|
8437
8436
|
*/
|
|
8438
|
-
declare function isNot<T
|
|
8437
|
+
declare function isNot<T extends (data: unknown) => data is unknown>(predicate: IsUnknown<GuardType<T>> extends true ? (data: unknown) => data is never : T): <Wide>(data: Wide) => data is Exclude<Wide, GuardType<T>>;
|
|
8438
|
+
declare function isNot<T, Narrow extends T>(predicate: (data: T) => data is Narrow): (data: T) => data is Exclude<T, Narrow>;
|
|
8439
8439
|
declare function isNot<T>(predicate: (data: T) => boolean): (data: T) => boolean;
|
|
8440
8440
|
//#endregion
|
|
8441
8441
|
//#region src/isNullish.d.ts
|
|
@@ -10318,7 +10318,7 @@ declare function pullObject<T extends IterableContainer, K extends PropertyKey,
|
|
|
10318
10318
|
declare function pullObject<T extends IterableContainer, K extends PropertyKey, V>(keyExtractor: (item: T[number], index: number, data: T) => K, valueExtractor: (item: T[number], index: number, data: T) => V): (data: T) => BoundedPartial<Record<K, V>>;
|
|
10319
10319
|
//#endregion
|
|
10320
10320
|
//#region src/internal/types/LazyResult.d.ts
|
|
10321
|
-
type LazyResult<T> = LazyEmpty | LazyMany<T> | LazyNext<T>;
|
|
10321
|
+
type LazyResult<T = unknown> = LazyEmpty | LazyMany<T> | LazyNext<T>;
|
|
10322
10322
|
type LazyEmpty = {
|
|
10323
10323
|
done: boolean;
|
|
10324
10324
|
hasNext: false;
|