@duplojs/utils 1.5.13 → 1.5.15

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.
@@ -31,7 +31,7 @@ export interface FlagHandler<GenericEntity extends Entity = Entity, GenericName
31
31
  *
32
32
  */
33
33
  getValue<GenericInputEntity extends GenericEntity & Flag<GenericName, GenericValue>>(entity: GenericInputEntity): GetKindValue<typeof flagKind, GenericInputEntity>[GenericName];
34
- has<GenericInputEntity extends GenericEntity>(entity: GenericInputEntity): Extract<GenericInputEntity, Flag<GenericName, any>>;
34
+ has<GenericInputEntity extends GenericEntity>(entity: GenericInputEntity): entity is Extract<GenericInputEntity, Flag<GenericName, any>>;
35
35
  }
36
36
  export interface Flag<GenericName extends string = string, GenericValue extends unknown = never> extends Kind<typeof flagKind.definition, Record<GenericName, GenericValue>> {
37
37
  }
@@ -32,7 +32,7 @@ export declare namespace Path {
32
32
  */
33
33
  function getBaseName<GenericPath extends string>(path: GenericPath, params?: GetBaseNameParams): string | null;
34
34
  interface GetExtensionNameParams {
35
- withDot: boolean;
35
+ withDot?: boolean;
36
36
  }
37
37
  /**
38
38
  * Returns the last extension of a path, with or without the leading dot.
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ async function* asyncFlat(iterator, depth = 1) {
4
+ for await (const value of iterator) {
5
+ if (depth >= 1
6
+ && value
7
+ && typeof value === "object"
8
+ && (Symbol.iterator in value
9
+ || Symbol.asyncIterator in value)) {
10
+ yield* asyncFlat(value, depth - 1);
11
+ }
12
+ else {
13
+ yield value;
14
+ }
15
+ }
16
+ }
17
+
18
+ exports.asyncFlat = asyncFlat;
@@ -0,0 +1,18 @@
1
+ import { type FlatAsyncIterator } from "./types";
2
+ /**
3
+ * Flattens nested sync or async iterables into an async generator.
4
+ *
5
+ * **Supported call styles:**
6
+ * - Classic: `asyncFlat(iterator, depth?)` → returns an async generator
7
+ *
8
+ * By default, `asyncFlat` flattens one level.
9
+ * Use `depth` to control how many iterable levels are expanded.
10
+ * Sync iterables nested inside an async iterable are also flattened.
11
+ *
12
+ * @see [`G.flat`](https://utils.duplojs.dev/en/v1/api/generator/flat) For sync iterables
13
+ * @see https://utils.duplojs.dev/en/v1/api/generator/asyncFlat
14
+ *
15
+ * @namespace G
16
+ *
17
+ */
18
+ export declare function asyncFlat<GenericValue extends unknown, GenericDepth extends number = 1>(iterator: AsyncIterable<GenericValue> | Iterable<GenericValue>, depth?: GenericDepth): AsyncGenerator<FlatAsyncIterator<GenericValue, GenericDepth>, void, unknown>;
@@ -0,0 +1,16 @@
1
+ async function* asyncFlat(iterator, depth = 1) {
2
+ for await (const value of iterator) {
3
+ if (depth >= 1
4
+ && value
5
+ && typeof value === "object"
6
+ && (Symbol.iterator in value
7
+ || Symbol.asyncIterator in value)) {
8
+ yield* asyncFlat(value, depth - 1);
9
+ }
10
+ else {
11
+ yield value;
12
+ }
13
+ }
14
+ }
15
+
16
+ export { asyncFlat };
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ function* flat(iterator, depth = 1) {
4
+ for (const value of iterator) {
5
+ if (depth >= 1
6
+ && value
7
+ && typeof value === "object"
8
+ && Symbol.iterator in value) {
9
+ yield* flat(value, depth - 1);
10
+ }
11
+ else {
12
+ yield value;
13
+ }
14
+ }
15
+ }
16
+
17
+ exports.flat = flat;
@@ -0,0 +1,36 @@
1
+ import { type FlatIterator } from "./types";
2
+ /**
3
+ * Flattens nested iterables into a single generator.
4
+ *
5
+ * **Supported call styles:**
6
+ * - Classic: `flat(iterator, depth?)` → returns a generator
7
+ *
8
+ * By default, `flat` flattens one level.
9
+ * Use `depth` to control how many iterable levels are expanded.
10
+ * Non-iterable values are yielded as-is.
11
+ *
12
+ * ```ts
13
+ * const oneLevel = G.flat([[1, 2], [3, 4]]);
14
+ * // Generator<number, void, unknown>
15
+ *
16
+ * const twoLevels = G.flat(
17
+ * [[[1], [2]], [[3], [4]]],
18
+ * 2,
19
+ * );
20
+ * // Generator<number, void, unknown>
21
+ *
22
+ * const keepLastLevel = G.flat(
23
+ * [[[1], [2]], [[3], [4]]],
24
+ * 1,
25
+ * );
26
+ * // Generator<number[], void, unknown>
27
+ *
28
+ * ```
29
+ *
30
+ * @see [`G.asyncFlat`](https://utils.duplojs.dev/en/v1/api/generator/asyncFlat) For async iterables
31
+ * @see https://utils.duplojs.dev/en/v1/api/generator/flat
32
+ *
33
+ * @namespace G
34
+ *
35
+ */
36
+ export declare function flat<GenericValue extends unknown, GenericDepth extends number = 1>(iterator: Iterable<GenericValue>, depth?: GenericDepth): Generator<FlatIterator<GenericValue, GenericDepth>, void, unknown>;
@@ -0,0 +1,15 @@
1
+ function* flat(iterator, depth = 1) {
2
+ for (const value of iterator) {
3
+ if (depth >= 1
4
+ && value
5
+ && typeof value === "object"
6
+ && Symbol.iterator in value) {
7
+ yield* flat(value, depth - 1);
8
+ }
9
+ else {
10
+ yield value;
11
+ }
12
+ }
13
+ }
14
+
15
+ export { flat };
@@ -14,6 +14,8 @@ var asyncChunk = require('./asyncChunk.cjs');
14
14
  var group = require('./group.cjs');
15
15
  var asyncGroup = require('./asyncGroup.cjs');
16
16
  var createExternalAsyncGenerator = require('./createExternalAsyncGenerator.cjs');
17
+ var flat = require('./flat.cjs');
18
+ var asyncFlat = require('./asyncFlat.cjs');
17
19
 
18
20
  /**
19
21
  * {@include generator/index.md}
@@ -35,3 +37,5 @@ exports.group = group.group;
35
37
  exports.groupOutput = group.groupOutput;
36
38
  exports.asyncGroup = asyncGroup.asyncGroup;
37
39
  exports.createExternalAsyncGenerator = createExternalAsyncGenerator.createExternalAsyncGenerator;
40
+ exports.flat = flat.flat;
41
+ exports.asyncFlat = asyncFlat.asyncFlat;
@@ -25,6 +25,7 @@
25
25
  * @namespace G
26
26
  *
27
27
  */
28
+ export * from "./types";
28
29
  export * from "./map";
29
30
  export * from "./execute";
30
31
  export * from "./asyncMap";
@@ -39,3 +40,5 @@ export * from "./asyncChunk";
39
40
  export * from "./group";
40
41
  export * from "./asyncGroup";
41
42
  export * from "./createExternalAsyncGenerator";
43
+ export * from "./flat";
44
+ export * from "./asyncFlat";
@@ -12,6 +12,8 @@ export { asyncChunk } from './asyncChunk.mjs';
12
12
  export { group, groupOutput } from './group.mjs';
13
13
  export { asyncGroup } from './asyncGroup.mjs';
14
14
  export { createExternalAsyncGenerator } from './createExternalAsyncGenerator.mjs';
15
+ export { flat } from './flat.mjs';
16
+ export { asyncFlat } from './asyncFlat.mjs';
15
17
 
16
18
  /**
17
19
  * {@include generator/index.md}
@@ -0,0 +1,3 @@
1
+ import { type IsEqual } from "../../common";
2
+ export type FlatIterator<GenericValue extends unknown, GenericDepth extends number, Acc extends never[] = []> = IsEqual<Acc["length"], GenericDepth> extends true ? GenericValue : IsEqual<Acc["length"], 250> extends true ? GenericValue : GenericValue extends Iterable<infer InferredValue> ? FlatIterator<InferredValue, GenericDepth, [...Acc, never]> : GenericValue;
3
+ export type FlatAsyncIterator<GenericValue extends unknown, GenericDepth extends number, Acc extends never[] = []> = IsEqual<Acc["length"], GenericDepth> extends true ? GenericValue : IsEqual<Acc["length"], 250> extends true ? GenericValue : GenericValue extends Iterable<infer InferredValue> ? FlatIterator<InferredValue, GenericDepth, [...Acc, never]> : GenericValue extends AsyncIterable<infer InferredValue> ? FlatIterator<InferredValue, GenericDepth, [...Acc, never]> : GenericValue;
@@ -0,0 +1 @@
1
+ export * from "./flat";
@@ -3905,6 +3905,17 @@
3905
3905
  {
3906
3906
  "name": "generator",
3907
3907
  "files": [
3908
+ {
3909
+ "name": "types",
3910
+ "files": [
3911
+ {
3912
+ "name": "flat.d.ts"
3913
+ },
3914
+ {
3915
+ "name": "index.d.ts"
3916
+ }
3917
+ ]
3918
+ },
3908
3919
  {
3909
3920
  "name": "asyncChunk.cjs"
3910
3921
  },
@@ -3923,6 +3934,15 @@
3923
3934
  {
3924
3935
  "name": "asyncFilter.mjs"
3925
3936
  },
3937
+ {
3938
+ "name": "asyncFlat.cjs"
3939
+ },
3940
+ {
3941
+ "name": "asyncFlat.d.ts"
3942
+ },
3943
+ {
3944
+ "name": "asyncFlat.mjs"
3945
+ },
3926
3946
  {
3927
3947
  "name": "asyncGroup.cjs"
3928
3948
  },
@@ -3995,6 +4015,15 @@
3995
4015
  {
3996
4016
  "name": "filter.mjs"
3997
4017
  },
4018
+ {
4019
+ "name": "flat.cjs"
4020
+ },
4021
+ {
4022
+ "name": "flat.d.ts"
4023
+ },
4024
+ {
4025
+ "name": "flat.mjs"
4026
+ },
3998
4027
  {
3999
4028
  "name": "group.cjs"
4000
4029
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duplojs/utils",
3
- "version": "1.5.13",
3
+ "version": "1.5.15",
4
4
  "author": {
5
5
  "name": "mathcovax",
6
6
  "url": "https://github.com/mathcovax"