@aztec/foundation 0.38.0 → 0.40.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 (45) hide show
  1. package/dest/collection/index.d.ts +1 -0
  2. package/dest/collection/index.d.ts.map +1 -1
  3. package/dest/collection/index.js +2 -1
  4. package/dest/collection/object.d.ts +4 -0
  5. package/dest/collection/object.d.ts.map +1 -0
  6. package/dest/collection/object.js +8 -0
  7. package/dest/iterable/all.d.ts +9 -0
  8. package/dest/iterable/all.d.ts.map +1 -0
  9. package/dest/iterable/all.js +19 -0
  10. package/dest/iterable/filter.d.ts +10 -0
  11. package/dest/iterable/filter.d.ts.map +1 -0
  12. package/dest/iterable/filter.js +49 -0
  13. package/dest/iterable/index.d.ts +7 -0
  14. package/dest/iterable/index.d.ts.map +1 -0
  15. package/dest/iterable/index.js +7 -0
  16. package/dest/iterable/isAsyncIt.d.ts +7 -0
  17. package/dest/iterable/isAsyncIt.d.ts.map +1 -0
  18. package/dest/iterable/isAsyncIt.js +9 -0
  19. package/dest/iterable/map.d.ts +12 -0
  20. package/dest/iterable/map.d.ts.map +1 -0
  21. package/dest/iterable/map.js +37 -0
  22. package/dest/iterable/peek.d.ts +19 -0
  23. package/dest/iterable/peek.d.ts.map +1 -0
  24. package/dest/iterable/peek.js +33 -0
  25. package/dest/iterable/sort.d.ts +14 -0
  26. package/dest/iterable/sort.d.ts.map +1 -0
  27. package/dest/iterable/sort.js +16 -0
  28. package/dest/iterable/take.d.ts +10 -0
  29. package/dest/iterable/take.d.ts.map +1 -0
  30. package/dest/iterable/take.js +33 -0
  31. package/dest/log/debug.d.ts +13 -0
  32. package/dest/log/debug.d.ts.map +1 -1
  33. package/dest/log/debug.js +10 -1
  34. package/package.json +3 -2
  35. package/src/collection/index.ts +1 -0
  36. package/src/collection/object.ts +19 -0
  37. package/src/iterable/all.ts +32 -0
  38. package/src/iterable/filter.ts +77 -0
  39. package/src/iterable/index.ts +6 -0
  40. package/src/iterable/isAsyncIt.ts +8 -0
  41. package/src/iterable/map.ts +66 -0
  42. package/src/iterable/peek.ts +58 -0
  43. package/src/iterable/sort.ts +39 -0
  44. package/src/iterable/take.ts +54 -0
  45. package/src/log/debug.ts +21 -0
@@ -1,2 +1,3 @@
1
1
  export * from './array.js';
2
+ export * from './object.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collection/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collection/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './array.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQyJ9
2
+ export * from './object.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGFBQWEsQ0FBQyJ9
@@ -0,0 +1,4 @@
1
+ /** Returns a new object with the same keys and where each value has been passed through the mapping function. */
2
+ export declare function mapValues<K extends string | number | symbol, T, U>(obj: Record<K, T>, fn: (value: T) => U): Record<K, U>;
3
+ export declare function mapValues<K extends string | number | symbol, T, U>(obj: Partial<Record<K, T>>, fn: (value: T) => U): Partial<Record<K, U>>;
4
+ //# sourceMappingURL=object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/collection/object.ts"],"names":[],"mappings":"AAAA,iHAAiH;AACjH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,EAChE,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EACjB,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAClB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChB,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,EAChE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC1B,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAClB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export function mapValues(obj, fn) {
2
+ const result = {};
3
+ for (const key in obj) {
4
+ result[key] = fn(obj[key]);
5
+ }
6
+ return result;
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbGxlY3Rpb24vb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE1BQU0sVUFBVSxTQUFTLENBQ3ZCLEdBQWlCLEVBQ2pCLEVBQW1CO0lBRW5CLE1BQU0sTUFBTSxHQUFpQixFQUFrQixDQUFDO0lBQ2hELEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyJ9
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Collects all values from an (async) iterable and returns them as an array
3
+ * @param source - Iterable to collect all values from
4
+ * @returns All of the iterable's values as an array.
5
+ */
6
+ declare function all<T>(source: Iterable<T>): T[];
7
+ declare function all<T>(source: Iterable<T> | AsyncIterable<T>): Promise<T[]>;
8
+ export { all };
9
+ //# sourceMappingURL=all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all.d.ts","sourceRoot":"","sources":["../../src/iterable/all.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,iBAAS,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1C,iBAAS,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAuBtE,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { isAsyncIterable } from './isAsyncIt.js';
2
+ function all(source) {
3
+ if (isAsyncIterable(source)) {
4
+ return (async () => {
5
+ const arr = [];
6
+ for await (const entry of source) {
7
+ arr.push(entry);
8
+ }
9
+ return arr;
10
+ })();
11
+ }
12
+ const arr = [];
13
+ for (const entry of source) {
14
+ arr.push(entry);
15
+ }
16
+ return arr;
17
+ }
18
+ export { all };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2l0ZXJhYmxlL2FsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFTakQsU0FBUyxHQUFHLENBQUksTUFBc0M7SUFDcEQsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM1QixPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDakIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBRWYsSUFBSSxLQUFLLEVBQUUsTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ2pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsQ0FBQztZQUVELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFFZixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyJ9
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Filters the passed (async) iterable by using the filter function.
3
+ * @param source - An iterable to filter.
4
+ * @returns A generator of the filtered values.
5
+ */
6
+ declare function filter<T>(source: Iterable<T>, fn: (val: T, index: number) => Promise<boolean>): AsyncGenerator<T, void, undefined>;
7
+ declare function filter<T>(source: Iterable<T>, fn: (val: T, index: number) => boolean): Generator<T, void, undefined>;
8
+ declare function filter<T>(source: Iterable<T> | AsyncIterable<T>, fn: (val: T, index: number) => boolean | Promise<boolean>): AsyncGenerator<T, void, undefined>;
9
+ export { filter };
10
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/iterable/filter.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,iBAAS,MAAM,CAAC,CAAC,EACf,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EACnB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC9C,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACtC,iBAAS,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC/G,iBAAS,MAAM,CAAC,CAAC,EACf,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EACtC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GACxD,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAyDtC,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { peek } from './peek.js';
2
+ function isAsyncIterable(thing) {
3
+ return thing[Symbol.asyncIterator] != null;
4
+ }
5
+ function filter(source, fn) {
6
+ let index = 0;
7
+ if (isAsyncIterable(source)) {
8
+ return (async function* () {
9
+ for await (const entry of source) {
10
+ if (await fn(entry, index++)) {
11
+ yield entry;
12
+ }
13
+ }
14
+ })();
15
+ }
16
+ // if mapping function returns a promise we have to return an async generator
17
+ const peekable = peek(source);
18
+ const { value, done } = peekable.next();
19
+ if (done === true) {
20
+ return (function* () { })();
21
+ }
22
+ const res = fn(value, index++);
23
+ // @ts-expect-error .then is not present on O
24
+ if (typeof res.then === 'function') {
25
+ return (async function* () {
26
+ if (await res) {
27
+ yield value;
28
+ }
29
+ for await (const entry of peekable) {
30
+ if (await fn(entry, index++)) {
31
+ yield entry;
32
+ }
33
+ }
34
+ })();
35
+ }
36
+ const func = fn;
37
+ return (function* () {
38
+ if (res === true) {
39
+ yield value;
40
+ }
41
+ for (const entry of peekable) {
42
+ if (func(entry, index++)) {
43
+ yield entry;
44
+ }
45
+ }
46
+ })();
47
+ }
48
+ export { filter };
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2l0ZXJhYmxlL2ZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWpDLFNBQVMsZUFBZSxDQUFJLEtBQVU7SUFDcEMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUM3QyxDQUFDO0FBZ0JELFNBQVMsTUFBTSxDQUNiLE1BQXNDLEVBQ3RDLEVBQXlEO0lBRXpELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUVkLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxDQUFDLEtBQUssU0FBUyxDQUFDO1lBQ3JCLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNqQyxJQUFJLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzdCLE1BQU0sS0FBSyxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXhDLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBSyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFL0IsNkNBQTZDO0lBQzdDLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxLQUFLLFNBQVMsQ0FBQztZQUNyQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxLQUFLLEVBQUUsTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ25DLElBQUksTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsTUFBTSxLQUFLLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLEVBQXdDLENBQUM7SUFFdEQsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNmLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7WUFDN0IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDUCxDQUFDO0FBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDIn0=
@@ -0,0 +1,7 @@
1
+ export * from './map.js';
2
+ export * from './filter.js';
3
+ export * from './sort.js';
4
+ export * from './take.js';
5
+ export * from './all.js';
6
+ export * from './peek.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/iterable/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './map.js';
2
+ export * from './filter.js';
3
+ export * from './sort.js';
4
+ export * from './take.js';
5
+ export * from './all.js';
6
+ export * from './peek.js';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaXRlcmFibGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxXQUFXLENBQUMifQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Utility function to type check an AsyncIterable
3
+ * @param thing - Input to type check
4
+ * @returns Type-checked input
5
+ */
6
+ export declare function isAsyncIterable<T>(thing: any): thing is AsyncIterable<T>;
7
+ //# sourceMappingURL=isAsyncIt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isAsyncIt.d.ts","sourceRoot":"","sources":["../../src/iterable/isAsyncIt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,CAExE"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Utility function to type check an AsyncIterable
3
+ * @param thing - Input to type check
4
+ * @returns Type-checked input
5
+ */
6
+ export function isAsyncIterable(thing) {
7
+ return thing[Symbol.asyncIterator] != null;
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNBc3luY0l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2l0ZXJhYmxlL2lzQXN5bmNJdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBSSxLQUFVO0lBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDN0MsQ0FBQyJ9
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Takes an (async) iterable and returns one with each item mapped by the passed
3
+ * function.
4
+ * @param source - The iterable to run the map function on.
5
+ * @param func - The function to run over the iterable's items.
6
+ * @returns A generator of the mapped items.
7
+ */
8
+ declare function map<I, O>(source: Iterable<I>, func: (val: I, index: number) => Promise<O>): AsyncGenerator<O, void, undefined>;
9
+ declare function map<I, O>(source: Iterable<I>, func: (val: I, index: number) => O): Generator<O, void, undefined>;
10
+ declare function map<I, O>(source: AsyncIterable<I> | Iterable<I>, func: (val: I, index: number) => O | Promise<O>): AsyncGenerator<O, void, undefined>;
11
+ export { map };
12
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/iterable/map.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,iBAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EACf,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EACnB,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1C,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACtC,iBAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3G,iBAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EACf,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EACtC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAC9C,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AA+CtC,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { isAsyncIterable } from './isAsyncIt.js';
2
+ import { peek } from './peek.js';
3
+ function map(source, func) {
4
+ let index = 0;
5
+ if (isAsyncIterable(source)) {
6
+ return (async function* () {
7
+ for await (const val of source) {
8
+ yield func(val, index++);
9
+ }
10
+ })();
11
+ }
12
+ // if mapping function returns a promise we have to return an async generator
13
+ const peekable = peek(source);
14
+ const { value, done } = peekable.next();
15
+ if (done === true) {
16
+ return (function* () { })();
17
+ }
18
+ const res = func(value, index++);
19
+ // @ts-expect-error .then is not present on O
20
+ if (typeof res.then === 'function') {
21
+ return (async function* () {
22
+ yield await res;
23
+ for await (const val of peekable) {
24
+ yield func(val, index++);
25
+ }
26
+ })();
27
+ }
28
+ const fn = func;
29
+ return (function* () {
30
+ yield res;
31
+ for (const val of peekable) {
32
+ yield fn(val, index++);
33
+ }
34
+ })();
35
+ }
36
+ export { map };
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2l0ZXJhYmxlL21hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQWtCakMsU0FBUyxHQUFHLENBQ1YsTUFBc0MsRUFDdEMsSUFBK0M7SUFFL0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRWQsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM1QixPQUFPLENBQUMsS0FBSyxTQUFTLENBQUM7WUFDckIsSUFBSSxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFeEMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUVqQyw2Q0FBNkM7SUFDN0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDbkMsT0FBTyxDQUFDLEtBQUssU0FBUyxDQUFDO1lBQ3JCLE1BQU0sTUFBTSxHQUFHLENBQUM7WUFFaEIsSUFBSSxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU0sRUFBRSxHQUFHLElBQW9DLENBQUM7SUFFaEQsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNmLE1BQU0sR0FBUSxDQUFDO1FBRWYsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMzQixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNQLENBQUM7QUFFRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMifQ==
@@ -0,0 +1,19 @@
1
+ export interface Peek<T> {
2
+ peek(): IteratorResult<T, undefined>;
3
+ }
4
+ export interface AsyncPeek<T> {
5
+ peek(): Promise<IteratorResult<T, undefined>>;
6
+ }
7
+ export interface Push<T> {
8
+ push(value: T): void;
9
+ }
10
+ export type Peekable<T> = Iterable<T> & Peek<T> & Push<T> & Iterator<T>;
11
+ export type AsyncPeekable<T> = AsyncIterable<T> & AsyncPeek<T> & Push<T> & AsyncIterator<T>;
12
+ /**
13
+ * Utility function that allows peeking into the contents of an async iterator.
14
+ * @param iterable - The async iterator to peek the values of.
15
+ */
16
+ declare function peekable<T>(iterable: Iterable<T>): Peekable<T>;
17
+ declare function peekable<T>(iterable: AsyncIterable<T>): AsyncPeekable<T>;
18
+ export { peekable as peek };
19
+ //# sourceMappingURL=peek.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peek.d.ts","sourceRoot":"","sources":["../../src/iterable/peek.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI,CAAC,CAAC;IACrB,IAAI,IAAI,cAAc,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,IAAI,CAAC,CAAC;IACrB,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAExE,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAE5F;;;GAGG;AACH,iBAAS,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzD,iBAAS,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAoCnE,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,CAAC"}
@@ -0,0 +1,33 @@
1
+ function peekable(iterable) {
2
+ const [iterator, symbol] =
3
+ // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable
4
+ iterable[Symbol.asyncIterator] != null
5
+ ? // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable
6
+ [iterable[Symbol.asyncIterator](), Symbol.asyncIterator]
7
+ : // @ts-expect-error can't use Symbol.iterator to index iterable since it might be AsyncIterable
8
+ [iterable[Symbol.iterator](), Symbol.iterator];
9
+ const queue = [];
10
+ // @ts-expect-error can't use symbol to index peekable
11
+ return {
12
+ peek: () => {
13
+ return iterator.next();
14
+ },
15
+ push: (value) => {
16
+ queue.push(value);
17
+ },
18
+ next: () => {
19
+ if (queue.length > 0) {
20
+ return {
21
+ done: false,
22
+ value: queue.shift(),
23
+ };
24
+ }
25
+ return iterator.next();
26
+ },
27
+ [symbol]() {
28
+ return this;
29
+ },
30
+ };
31
+ }
32
+ export { peekable as peek };
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pdGVyYWJsZS9wZWVrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNCQSxTQUFTLFFBQVEsQ0FBSSxRQUF3QztJQUMzRCxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUN0QiwrRkFBK0Y7SUFDL0YsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJO1FBQ3BDLENBQUMsQ0FBQywrRkFBK0Y7WUFDL0YsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUMxRCxDQUFDLENBQUMsK0ZBQStGO1lBQy9GLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVyRCxNQUFNLEtBQUssR0FBVSxFQUFFLENBQUM7SUFFeEIsc0RBQXNEO0lBQ3RELE9BQU87UUFDTCxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ1QsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ25CLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksRUFBRSxHQUFHLEVBQUU7WUFDVCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLE9BQU87b0JBQ0wsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7aUJBQ3JCLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUNELENBQUMsTUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxPQUFPLEVBQUUsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDIn0=
@@ -0,0 +1,14 @@
1
+ export interface CompareFunction<T> {
2
+ (a: T, b: T): number;
3
+ }
4
+ /**
5
+ * Collects all values from an async iterator, sorts them
6
+ * using the passed function and yields them.
7
+ * @param source - Iterable to sort.
8
+ * @param sorter - Sorting function.
9
+ * @returns A generator of the sorted values.
10
+ */
11
+ declare function sort<T>(source: Iterable<T>, sorter: CompareFunction<T>): Generator<T, void, undefined>;
12
+ declare function sort<T>(source: Iterable<T> | AsyncIterable<T>, sorter: CompareFunction<T>): AsyncGenerator<T, void, undefined>;
13
+ export { sort };
14
+ //# sourceMappingURL=sort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../src/iterable/sort.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,iBAAS,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACjG,iBAAS,IAAI,CAAC,CAAC,EACb,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EACtC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,GACzB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAoBtC,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { all } from './all.js';
2
+ import { isAsyncIterable } from './isAsyncIt.js';
3
+ function sort(source, sorter) {
4
+ if (isAsyncIterable(source)) {
5
+ return (async function* () {
6
+ const arr = await all(source);
7
+ yield* arr.sort(sorter);
8
+ })();
9
+ }
10
+ return (function* () {
11
+ const arr = all(source);
12
+ yield* arr.sort(sorter);
13
+ })();
14
+ }
15
+ export { sort };
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pdGVyYWJsZS9zb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBa0JqRCxTQUFTLElBQUksQ0FDWCxNQUFzQyxFQUN0QyxNQUEwQjtJQUUxQixJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxLQUFLLFNBQVMsQ0FBQztZQUNyQixNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU5QixLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNmLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4QixLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDUCxDQUFDO0FBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDIn0=
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Stop iteration after n items have been received.
3
+ * @param source - An iterable to take n items from.
4
+ * @param limit - The number of items to take from the iterable.
5
+ * @returns A generator, limited to n items.
6
+ */
7
+ declare function take<T>(source: Iterable<T>, limit: number): Generator<T, void, undefined>;
8
+ declare function take<T>(source: Iterable<T> | AsyncIterable<T>, limit: number): AsyncGenerator<T, void, undefined>;
9
+ export { take };
10
+ //# sourceMappingURL=take.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"take.d.ts","sourceRoot":"","sources":["../../src/iterable/take.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,iBAAS,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACpF,iBAAS,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AA4C5G,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { isAsyncIterable } from './isAsyncIt.js';
2
+ function take(source, limit) {
3
+ if (isAsyncIterable(source)) {
4
+ return (async function* () {
5
+ let items = 0;
6
+ if (limit < 1) {
7
+ return;
8
+ }
9
+ for await (const entry of source) {
10
+ yield entry;
11
+ items++;
12
+ if (items === limit) {
13
+ return;
14
+ }
15
+ }
16
+ })();
17
+ }
18
+ return (function* () {
19
+ let items = 0;
20
+ if (limit < 1) {
21
+ return;
22
+ }
23
+ for (const entry of source) {
24
+ yield entry;
25
+ items++;
26
+ if (items === limit) {
27
+ return;
28
+ }
29
+ }
30
+ })();
31
+ }
32
+ export { take };
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFrZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pdGVyYWJsZS90YWtlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVVqRCxTQUFTLElBQUksQ0FDWCxNQUFzQyxFQUN0QyxLQUFhO0lBRWIsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM1QixPQUFPLENBQUMsS0FBSyxTQUFTLENBQUM7WUFDckIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBRWQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2QsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxLQUFLLENBQUM7Z0JBRVosS0FBSyxFQUFFLENBQUM7Z0JBRVIsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQ3BCLE9BQU87Z0JBQ1QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDZixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFFZCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLE9BQU87UUFDVCxDQUFDO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLEtBQUssQ0FBQztZQUVaLEtBQUssRUFBRSxDQUFDO1lBRVIsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDUCxDQUFDO0FBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDIn0=
@@ -40,4 +40,17 @@ export declare function enableLogs(str: string): void;
40
40
  * @returns A boolean indicating whether logging is enabled for the given namespace.
41
41
  */
42
42
  export declare function isLogEnabled(str: string): boolean;
43
+ /**
44
+ * Format a debug string filling in `'{0}'` entries with their
45
+ * corresponding values from the args array, amd `'{}'` with the whole array.
46
+ *
47
+ * @param formatStr - str of form `'this is a string with some entries like {0} and {1}'`
48
+ * @param args - array of fields to fill in the string format entries with
49
+ * @returns formatted string
50
+ */
51
+ interface Printable {
52
+ toString(): string;
53
+ }
54
+ export declare function applyStringFormatting(formatStr: string, args: Printable[]): string;
55
+ export {};
43
56
  //# sourceMappingURL=debug.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/log/debug.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAyBzC;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAGzD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,QAE9D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,QAE/D;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,QAErC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,WAEvC"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/log/debug.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAyBzC;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAGzD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,QAE9D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,QAE/D;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,QAErC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,WAEvC;AAED;;;;;;;GAOG;AACH,UAAU,SAAS;IACjB,QAAQ,IAAI,MAAM,CAAC;CACpB;AACD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,CAQlF"}
package/dest/log/debug.js CHANGED
@@ -72,4 +72,13 @@ export function enableLogs(str) {
72
72
  export function isLogEnabled(str) {
73
73
  return debug.enabled(str);
74
74
  }
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9nL2RlYnVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUkxQixJQUFJLFVBQWtELENBQUM7QUFDdkQsSUFBSSxXQUFtRCxDQUFDO0FBRXhEOzs7Ozs7R0FNRztBQUNILFNBQVMsa0NBQWtDLENBQUMsTUFBVyxFQUFFLEdBQUcsSUFBVztJQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNoQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQVk7SUFDaEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE9BQU8sQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsa0NBQWtDLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakYsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsRUFBNEI7SUFDN0QsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEVBQTRCO0lBQzlELFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQVc7SUFDcEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVztJQUN0QyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsQ0FBQyJ9
75
+ export function applyStringFormatting(formatStr, args) {
76
+ return formatStr
77
+ .replace(/{(\d+)}/g, (match, index) => {
78
+ return typeof args[index] === 'undefined' ? match : args[index].toString();
79
+ })
80
+ .replace(/{}/g, (_match, _index) => {
81
+ return args.toString();
82
+ });
83
+ }
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9nL2RlYnVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUkxQixJQUFJLFVBQWtELENBQUM7QUFDdkQsSUFBSSxXQUFtRCxDQUFDO0FBRXhEOzs7Ozs7R0FNRztBQUNILFNBQVMsa0NBQWtDLENBQUMsTUFBVyxFQUFFLEdBQUcsSUFBVztJQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNoQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQVk7SUFDaEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE9BQU8sQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsa0NBQWtDLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakYsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsRUFBNEI7SUFDN0QsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEVBQTRCO0lBQzlELFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQVc7SUFDcEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVztJQUN0QyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQWFELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLElBQWlCO0lBQ3hFLE9BQU8sU0FBUztTQUNiLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDcEMsT0FBTyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdFLENBQUMsQ0FBQztTQUNELE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDakMsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/foundation",
3
- "version": "0.38.0",
3
+ "version": "0.40.0",
4
4
  "packageManager": "yarn@3.4.1",
5
5
  "type": "module",
6
6
  "main": "./dest/index.js",
@@ -20,6 +20,7 @@
20
20
  "./json-rpc": "./dest/json-rpc/index.js",
21
21
  "./json-rpc/server": "./dest/json-rpc/server/index.js",
22
22
  "./json-rpc/client": "./dest/json-rpc/client/index.js",
23
+ "./iterable": "./dest/iterable/index.js",
23
24
  "./log": "./dest/log/index.js",
24
25
  "./mutex": "./dest/mutex/index.js",
25
26
  "./fields": "./dest/fields/index.js",
@@ -78,7 +79,7 @@
78
79
  ]
79
80
  },
80
81
  "dependencies": {
81
- "@aztec/bb.js": "0.38.0",
82
+ "@aztec/bb.js": "0.40.0",
82
83
  "@koa/cors": "^5.0.0",
83
84
  "@noble/curves": "^1.2.0",
84
85
  "bn.js": "^5.2.1",
@@ -1 +1,2 @@
1
1
  export * from './array.js';
2
+ export * from './object.js';
@@ -0,0 +1,19 @@
1
+ /** Returns a new object with the same keys and where each value has been passed through the mapping function. */
2
+ export function mapValues<K extends string | number | symbol, T, U>(
3
+ obj: Record<K, T>,
4
+ fn: (value: T) => U,
5
+ ): Record<K, U>;
6
+ export function mapValues<K extends string | number | symbol, T, U>(
7
+ obj: Partial<Record<K, T>>,
8
+ fn: (value: T) => U,
9
+ ): Partial<Record<K, U>>;
10
+ export function mapValues<K extends string | number | symbol, T, U>(
11
+ obj: Record<K, T>,
12
+ fn: (value: T) => U,
13
+ ): Record<K, U> {
14
+ const result: Record<K, U> = {} as Record<K, U>;
15
+ for (const key in obj) {
16
+ result[key] = fn(obj[key]);
17
+ }
18
+ return result;
19
+ }
@@ -0,0 +1,32 @@
1
+ import { isAsyncIterable } from './isAsyncIt.js';
2
+
3
+ /**
4
+ * Collects all values from an (async) iterable and returns them as an array
5
+ * @param source - Iterable to collect all values from
6
+ * @returns All of the iterable's values as an array.
7
+ */
8
+ function all<T>(source: Iterable<T>): T[];
9
+ function all<T>(source: Iterable<T> | AsyncIterable<T>): Promise<T[]>;
10
+ function all<T>(source: Iterable<T> | AsyncIterable<T>): Promise<T[]> | T[] {
11
+ if (isAsyncIterable(source)) {
12
+ return (async () => {
13
+ const arr = [];
14
+
15
+ for await (const entry of source) {
16
+ arr.push(entry);
17
+ }
18
+
19
+ return arr;
20
+ })();
21
+ }
22
+
23
+ const arr = [];
24
+
25
+ for (const entry of source) {
26
+ arr.push(entry);
27
+ }
28
+
29
+ return arr;
30
+ }
31
+
32
+ export { all };
@@ -0,0 +1,77 @@
1
+ import { peek } from './peek.js';
2
+
3
+ function isAsyncIterable<T>(thing: any): thing is AsyncIterable<T> {
4
+ return thing[Symbol.asyncIterator] != null;
5
+ }
6
+
7
+ /**
8
+ * Filters the passed (async) iterable by using the filter function.
9
+ * @param source - An iterable to filter.
10
+ * @returns A generator of the filtered values.
11
+ */
12
+ function filter<T>(
13
+ source: Iterable<T>,
14
+ fn: (val: T, index: number) => Promise<boolean>,
15
+ ): AsyncGenerator<T, void, undefined>;
16
+ function filter<T>(source: Iterable<T>, fn: (val: T, index: number) => boolean): Generator<T, void, undefined>;
17
+ function filter<T>(
18
+ source: Iterable<T> | AsyncIterable<T>,
19
+ fn: (val: T, index: number) => boolean | Promise<boolean>,
20
+ ): AsyncGenerator<T, void, undefined>;
21
+ function filter<T>(
22
+ source: Iterable<T> | AsyncIterable<T>,
23
+ fn: (val: T, index: number) => boolean | Promise<boolean>,
24
+ ): Generator<T, void, undefined> | AsyncGenerator<T, void, undefined> {
25
+ let index = 0;
26
+
27
+ if (isAsyncIterable(source)) {
28
+ return (async function* () {
29
+ for await (const entry of source) {
30
+ if (await fn(entry, index++)) {
31
+ yield entry;
32
+ }
33
+ }
34
+ })();
35
+ }
36
+
37
+ // if mapping function returns a promise we have to return an async generator
38
+ const peekable = peek(source);
39
+ const { value, done } = peekable.next();
40
+
41
+ if (done === true) {
42
+ return (function* () {})();
43
+ }
44
+
45
+ const res = fn(value, index++);
46
+
47
+ // @ts-expect-error .then is not present on O
48
+ if (typeof res.then === 'function') {
49
+ return (async function* () {
50
+ if (await res) {
51
+ yield value;
52
+ }
53
+
54
+ for await (const entry of peekable) {
55
+ if (await fn(entry, index++)) {
56
+ yield entry;
57
+ }
58
+ }
59
+ })();
60
+ }
61
+
62
+ const func = fn as (val: T, index: number) => boolean;
63
+
64
+ return (function* () {
65
+ if (res === true) {
66
+ yield value;
67
+ }
68
+
69
+ for (const entry of peekable) {
70
+ if (func(entry, index++)) {
71
+ yield entry;
72
+ }
73
+ }
74
+ })();
75
+ }
76
+
77
+ export { filter };
@@ -0,0 +1,6 @@
1
+ export * from './map.js';
2
+ export * from './filter.js';
3
+ export * from './sort.js';
4
+ export * from './take.js';
5
+ export * from './all.js';
6
+ export * from './peek.js';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Utility function to type check an AsyncIterable
3
+ * @param thing - Input to type check
4
+ * @returns Type-checked input
5
+ */
6
+ export function isAsyncIterable<T>(thing: any): thing is AsyncIterable<T> {
7
+ return thing[Symbol.asyncIterator] != null;
8
+ }
@@ -0,0 +1,66 @@
1
+ import { isAsyncIterable } from './isAsyncIt.js';
2
+ import { peek } from './peek.js';
3
+
4
+ /**
5
+ * Takes an (async) iterable and returns one with each item mapped by the passed
6
+ * function.
7
+ * @param source - The iterable to run the map function on.
8
+ * @param func - The function to run over the iterable's items.
9
+ * @returns A generator of the mapped items.
10
+ */
11
+ function map<I, O>(
12
+ source: Iterable<I>,
13
+ func: (val: I, index: number) => Promise<O>,
14
+ ): AsyncGenerator<O, void, undefined>;
15
+ function map<I, O>(source: Iterable<I>, func: (val: I, index: number) => O): Generator<O, void, undefined>;
16
+ function map<I, O>(
17
+ source: AsyncIterable<I> | Iterable<I>,
18
+ func: (val: I, index: number) => O | Promise<O>,
19
+ ): AsyncGenerator<O, void, undefined>;
20
+ function map<I, O>(
21
+ source: AsyncIterable<I> | Iterable<I>,
22
+ func: (val: I, index: number) => O | Promise<O>,
23
+ ): AsyncGenerator<O, void, undefined> | Generator<O, void, undefined> {
24
+ let index = 0;
25
+
26
+ if (isAsyncIterable(source)) {
27
+ return (async function* () {
28
+ for await (const val of source) {
29
+ yield func(val, index++);
30
+ }
31
+ })();
32
+ }
33
+
34
+ // if mapping function returns a promise we have to return an async generator
35
+ const peekable = peek(source);
36
+ const { value, done } = peekable.next();
37
+
38
+ if (done === true) {
39
+ return (function* () {})();
40
+ }
41
+
42
+ const res = func(value, index++);
43
+
44
+ // @ts-expect-error .then is not present on O
45
+ if (typeof res.then === 'function') {
46
+ return (async function* () {
47
+ yield await res;
48
+
49
+ for await (const val of peekable) {
50
+ yield func(val, index++);
51
+ }
52
+ })();
53
+ }
54
+
55
+ const fn = func as (val: I, index: number) => O;
56
+
57
+ return (function* () {
58
+ yield res as O;
59
+
60
+ for (const val of peekable) {
61
+ yield fn(val, index++);
62
+ }
63
+ })();
64
+ }
65
+
66
+ export { map };
@@ -0,0 +1,58 @@
1
+ export interface Peek<T> {
2
+ peek(): IteratorResult<T, undefined>;
3
+ }
4
+
5
+ export interface AsyncPeek<T> {
6
+ peek(): Promise<IteratorResult<T, undefined>>;
7
+ }
8
+
9
+ export interface Push<T> {
10
+ push(value: T): void;
11
+ }
12
+
13
+ export type Peekable<T> = Iterable<T> & Peek<T> & Push<T> & Iterator<T>;
14
+
15
+ export type AsyncPeekable<T> = AsyncIterable<T> & AsyncPeek<T> & Push<T> & AsyncIterator<T>;
16
+
17
+ /**
18
+ * Utility function that allows peeking into the contents of an async iterator.
19
+ * @param iterable - The async iterator to peek the values of.
20
+ */
21
+ function peekable<T>(iterable: Iterable<T>): Peekable<T>;
22
+ function peekable<T>(iterable: AsyncIterable<T>): AsyncPeekable<T>;
23
+ function peekable<T>(iterable: Iterable<T> | AsyncIterable<T>): Peekable<T> | AsyncPeekable<T> {
24
+ const [iterator, symbol] =
25
+ // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable
26
+ iterable[Symbol.asyncIterator] != null
27
+ ? // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable
28
+ [iterable[Symbol.asyncIterator](), Symbol.asyncIterator]
29
+ : // @ts-expect-error can't use Symbol.iterator to index iterable since it might be AsyncIterable
30
+ [iterable[Symbol.iterator](), Symbol.iterator];
31
+
32
+ const queue: any[] = [];
33
+
34
+ // @ts-expect-error can't use symbol to index peekable
35
+ return {
36
+ peek: () => {
37
+ return iterator.next();
38
+ },
39
+ push: (value: any) => {
40
+ queue.push(value);
41
+ },
42
+ next: () => {
43
+ if (queue.length > 0) {
44
+ return {
45
+ done: false,
46
+ value: queue.shift(),
47
+ };
48
+ }
49
+
50
+ return iterator.next();
51
+ },
52
+ [symbol]() {
53
+ return this;
54
+ },
55
+ };
56
+ }
57
+
58
+ export { peekable as peek };
@@ -0,0 +1,39 @@
1
+ import { all } from './all.js';
2
+ import { isAsyncIterable } from './isAsyncIt.js';
3
+
4
+ export interface CompareFunction<T> {
5
+ (a: T, b: T): number;
6
+ }
7
+
8
+ /**
9
+ * Collects all values from an async iterator, sorts them
10
+ * using the passed function and yields them.
11
+ * @param source - Iterable to sort.
12
+ * @param sorter - Sorting function.
13
+ * @returns A generator of the sorted values.
14
+ */
15
+ function sort<T>(source: Iterable<T>, sorter: CompareFunction<T>): Generator<T, void, undefined>;
16
+ function sort<T>(
17
+ source: Iterable<T> | AsyncIterable<T>,
18
+ sorter: CompareFunction<T>,
19
+ ): AsyncGenerator<T, void, undefined>;
20
+ function sort<T>(
21
+ source: Iterable<T> | AsyncIterable<T>,
22
+ sorter: CompareFunction<T>,
23
+ ): AsyncGenerator<T, void, undefined> | Generator<T, void, undefined> {
24
+ if (isAsyncIterable(source)) {
25
+ return (async function* () {
26
+ const arr = await all(source);
27
+
28
+ yield* arr.sort(sorter);
29
+ })();
30
+ }
31
+
32
+ return (function* () {
33
+ const arr = all(source);
34
+
35
+ yield* arr.sort(sorter);
36
+ })();
37
+ }
38
+
39
+ export { sort };
@@ -0,0 +1,54 @@
1
+ import { isAsyncIterable } from './isAsyncIt.js';
2
+
3
+ /**
4
+ * Stop iteration after n items have been received.
5
+ * @param source - An iterable to take n items from.
6
+ * @param limit - The number of items to take from the iterable.
7
+ * @returns A generator, limited to n items.
8
+ */
9
+ function take<T>(source: Iterable<T>, limit: number): Generator<T, void, undefined>;
10
+ function take<T>(source: Iterable<T> | AsyncIterable<T>, limit: number): AsyncGenerator<T, void, undefined>;
11
+ function take<T>(
12
+ source: Iterable<T> | AsyncIterable<T>,
13
+ limit: number,
14
+ ): AsyncGenerator<T, void, undefined> | Generator<T, void, undefined> {
15
+ if (isAsyncIterable(source)) {
16
+ return (async function* () {
17
+ let items = 0;
18
+
19
+ if (limit < 1) {
20
+ return;
21
+ }
22
+
23
+ for await (const entry of source) {
24
+ yield entry;
25
+
26
+ items++;
27
+
28
+ if (items === limit) {
29
+ return;
30
+ }
31
+ }
32
+ })();
33
+ }
34
+
35
+ return (function* () {
36
+ let items = 0;
37
+
38
+ if (limit < 1) {
39
+ return;
40
+ }
41
+
42
+ for (const entry of source) {
43
+ yield entry;
44
+
45
+ items++;
46
+
47
+ if (items === limit) {
48
+ return;
49
+ }
50
+ }
51
+ })();
52
+ }
53
+
54
+ export { take };
package/src/log/debug.ts CHANGED
@@ -81,3 +81,24 @@ export function enableLogs(str: string) {
81
81
  export function isLogEnabled(str: string) {
82
82
  return debug.enabled(str);
83
83
  }
84
+
85
+ /**
86
+ * Format a debug string filling in `'{0}'` entries with their
87
+ * corresponding values from the args array, amd `'{}'` with the whole array.
88
+ *
89
+ * @param formatStr - str of form `'this is a string with some entries like {0} and {1}'`
90
+ * @param args - array of fields to fill in the string format entries with
91
+ * @returns formatted string
92
+ */
93
+ interface Printable {
94
+ toString(): string;
95
+ }
96
+ export function applyStringFormatting(formatStr: string, args: Printable[]): string {
97
+ return formatStr
98
+ .replace(/{(\d+)}/g, (match, index) => {
99
+ return typeof args[index] === 'undefined' ? match : args[index].toString();
100
+ })
101
+ .replace(/{}/g, (_match, _index) => {
102
+ return args.toString();
103
+ });
104
+ }