@dereekb/util 11.0.8 → 11.0.9

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.
@@ -5302,7 +5302,7 @@ function fetchPageFactory(config) {
5302
5302
  }
5303
5303
 
5304
5304
  /**
5305
- * Iterates through the pages of a created FetchPage instance.
5305
+ * Iterates through the pages of a created FetchPage instance by each item individually.
5306
5306
  *
5307
5307
  * @param config
5308
5308
  * @returns
@@ -5397,6 +5397,12 @@ const iterateFetchPages = _async(function (config) {
5397
5397
  return result;
5398
5398
  });
5399
5399
  });
5400
+ /**
5401
+ * Iterates through the pages of a created FetchPage instance.
5402
+ *
5403
+ * @param config
5404
+ * @returns
5405
+ */
5400
5406
  const iterateFetchPagesByItems = _async(function (config) {
5401
5407
  const {
5402
5408
  readItemsFromPageResult,
@@ -5415,7 +5421,7 @@ const iterateFetchPagesByItems = _async(function (config) {
5415
5421
  iteratePage: _async(function (fetchPageResult) {
5416
5422
  const items = readItemsFromPageResult(fetchPageResult);
5417
5423
  return _await(filterPageItems(items, fetchPageResult), function (filteredItems) {
5418
- return _await(iteratePageItems(filteredItems, fetchPageResult), function (results) {
5424
+ return _await(iteratePageItems(filteredItems, fetchPageResult, totalItemsVisited), function (results) {
5419
5425
  totalItemsLoaded += items.length;
5420
5426
  totalItemsVisited += filteredItems.length;
5421
5427
  hasReachedFinalItem = totalItemsLoaded >= loadItemLimit || totalItemsVisited >= iterateItemsLimit;
@@ -5427,6 +5433,22 @@ const iterateFetchPagesByItems = _async(function (config) {
5427
5433
  });
5428
5434
  return iterateFetchPages(fetchPagesConfig);
5429
5435
  });
5436
+ const iterateFetchPagesByEachItem = _async(function (config) {
5437
+ const {
5438
+ iterateEachPageItem,
5439
+ iteratePerformTasksConfig
5440
+ } = config;
5441
+ return iterateFetchPagesByItems(Object.assign({}, config, {
5442
+ iteratePageItems: _async(function (items, fetchPageResult, startIndex) {
5443
+ const itemIndexPairs = items.map((x, i) => [x, i + startIndex]);
5444
+ return util.performAsyncTasks(itemIndexPairs, ([item, i]) => {
5445
+ return iterateEachPageItem(item, i, fetchPageResult);
5446
+ }, Object.assign({
5447
+ sequential: true
5448
+ }, iteratePerformTasksConfig));
5449
+ })
5450
+ }));
5451
+ });
5430
5452
 
5431
5453
  /**
5432
5454
  * Creates URLSearchParams from the input objects. The input objects are merged together.
@@ -5702,6 +5724,7 @@ exports.isFetchRequest = isFetchRequest;
5702
5724
  exports.isURL = isURL;
5703
5725
  exports.isURLSearchParams = isURLSearchParams;
5704
5726
  exports.iterateFetchPages = iterateFetchPages;
5727
+ exports.iterateFetchPagesByEachItem = iterateFetchPagesByEachItem;
5705
5728
  exports.iterateFetchPagesByItems = iterateFetchPagesByItems;
5706
5729
  exports.makeUrlSearchParams = makeUrlSearchParams;
5707
5730
  exports.mergeRequestHeaders = mergeRequestHeaders;
@@ -1,4 +1,4 @@
1
- import { removeTrailingSlashes, asGetter, multiValueMapBuilder, filterMaybeValues, objectToTuples, fixMultiSlashesInSlashPath, isPromiseLike, cachedGetter, FIRST_PAGE, mapIdentityFunction, performTasksFromFactoryInParallelFunction, mergeObjects, useIterableOrValue, isEmptyIterable, fixExtraQueryParameters, forEachInIterable, isIterable, forEachKeyValue } from '@dereekb/util';
1
+ import { removeTrailingSlashes, asGetter, multiValueMapBuilder, filterMaybeValues, objectToTuples, fixMultiSlashesInSlashPath, isPromiseLike, cachedGetter, FIRST_PAGE, performAsyncTasks, mapIdentityFunction, performTasksFromFactoryInParallelFunction, mergeObjects, useIterableOrValue, isEmptyIterable, fixExtraQueryParameters, forEachInIterable, isIterable, forEachKeyValue } from '@dereekb/util';
2
2
 
3
3
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
4
4
 
@@ -5219,6 +5219,37 @@ function fetchPageFactory(config) {
5219
5219
  * @deprecated Use FetchPageResult instead.
5220
5220
  */
5221
5221
 
5222
+ // MARK: IterateFetchPagesByEachItem
5223
+ /**
5224
+ * Function called for each item that was fetched, along with the index and fetch results.
5225
+ *
5226
+ * The index is the overall index this item is from the returned items.
5227
+ */
5228
+
5229
+ /**
5230
+ * Iterates through the pages of a created FetchPage instance by each item individually.
5231
+ *
5232
+ * @param config
5233
+ * @returns
5234
+ */
5235
+ async function iterateFetchPagesByEachItem(config) {
5236
+ const {
5237
+ iterateEachPageItem,
5238
+ iteratePerformTasksConfig
5239
+ } = config;
5240
+ return iterateFetchPagesByItems(Object.assign({}, config, {
5241
+ iteratePageItems: async (items, fetchPageResult, startIndex) => {
5242
+ const itemIndexPairs = items.map((x, i) => [x, i + startIndex]);
5243
+ const performTasksResults = await performAsyncTasks(itemIndexPairs, ([item, i]) => {
5244
+ return iterateEachPageItem(item, i, fetchPageResult);
5245
+ }, Object.assign({
5246
+ sequential: true
5247
+ }, iteratePerformTasksConfig));
5248
+ return performTasksResults;
5249
+ }
5250
+ }));
5251
+ }
5252
+
5222
5253
  // MARK: IterateFetchPagesByItems
5223
5254
  /**
5224
5255
  * Filter function used to filter out items.
@@ -5251,7 +5282,7 @@ async function iterateFetchPagesByItems(config) {
5251
5282
  iteratePage: async fetchPageResult => {
5252
5283
  const items = readItemsFromPageResult(fetchPageResult);
5253
5284
  const filteredItems = await filterPageItems(items, fetchPageResult);
5254
- const results = await iteratePageItems(filteredItems, fetchPageResult);
5285
+ const results = await iteratePageItems(filteredItems, fetchPageResult, totalItemsVisited);
5255
5286
  totalItemsLoaded += items.length;
5256
5287
  totalItemsVisited += filteredItems.length;
5257
5288
  hasReachedFinalItem = totalItemsLoaded >= loadItemLimit || totalItemsVisited >= iterateItemsLimit;
@@ -5595,4 +5626,4 @@ const nodeFetchService = fetchService({
5595
5626
  makeRequest: (x, y) => new Request(x, y)
5596
5627
  });
5597
5628
 
5598
- export { FETCH_PAGE_FACTORY_DEFAULT_MAX_PAGE, FetchPageLimitReachedError, FetchPageNoNextPageError, FetchRequestFactoryError, FetchResponseError, FetchTimeoutError, JsonResponseParseError, configureFetch, fetchJsonBodyString, fetchJsonFunction, fetchJsonRequestInit, fetchJsonRequestInitFunction, fetchOk, fetchPageFactory, fetchRequestFactory, fetchService, fetchTimeout, fetchURL, fetchURLQueryKeyValueStringTuples, fetchURLSearchParamsObjectToURLSearchParams, headersToHeadersTuple, isFetchRequest, isURL, isURLSearchParams, iterateFetchPages, iterateFetchPagesByItems, makeUrlSearchParams, mergeRequestHeaders, mergeRequestInits, nodeFetchService, queryParamsToSearchParams, requireOkResponse, returnNullHandleFetchJsonParseErrorFunction, throwJsonResponseParseErrorFunction };
5629
+ export { FETCH_PAGE_FACTORY_DEFAULT_MAX_PAGE, FetchPageLimitReachedError, FetchPageNoNextPageError, FetchRequestFactoryError, FetchResponseError, FetchTimeoutError, JsonResponseParseError, configureFetch, fetchJsonBodyString, fetchJsonFunction, fetchJsonRequestInit, fetchJsonRequestInitFunction, fetchOk, fetchPageFactory, fetchRequestFactory, fetchService, fetchTimeout, fetchURL, fetchURLQueryKeyValueStringTuples, fetchURLSearchParamsObjectToURLSearchParams, headersToHeadersTuple, isFetchRequest, isURL, isURLSearchParams, iterateFetchPages, iterateFetchPagesByEachItem, iterateFetchPagesByItems, makeUrlSearchParams, mergeRequestHeaders, mergeRequestInits, nodeFetchService, queryParamsToSearchParams, requireOkResponse, returnNullHandleFetchJsonParseErrorFunction, throwJsonResponseParseErrorFunction };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/util/fetch",
3
- "version": "11.0.8",
3
+ "version": "11.0.9",
4
4
  ".": {
5
5
  "types": "./src/index.d.ts",
6
6
  "node": {
@@ -1,13 +1,41 @@
1
- import { type DecisionFunction, type IndexNumber, type IndexRef, type Maybe, type Milliseconds, type PromiseOrValue } from '@dereekb/util';
1
+ import { type DecisionFunction, type IndexNumber, type IndexRef, type Maybe, type Milliseconds, type PromiseOrValue, type PerformAsyncTasksConfig, type PerformAsyncTasksResult } from '@dereekb/util';
2
2
  import { type FetchPage, type FetchPageFactory, type FetchPageFactoryInputOptions, type FetchPageResult, type FetchPageResultWithInput } from './fetch.page';
3
+ /**
4
+ * Function called for each item that was fetched, along with the index and fetch results.
5
+ *
6
+ * The index is the overall index this item is from the returned items.
7
+ */
8
+ export type IterateFetchPagesByEachItemFunction<I, O, T, R> = (item: T, i: IndexNumber, fetchPageResult: FetchPageResultWithInput<I, O>) => Promise<R>;
9
+ export type IterateFetchPagesByEachItemPair<T> = readonly [T, IndexNumber];
10
+ export interface IterateFetchPagesByEachItemConfig<I, O, T, R> extends Omit<IterateFetchPagesByItemsConfig<I, O, T, IterateFetchPagesByEachItemResult<T, R>>, 'iteratePageItems'> {
11
+ /**
12
+ * The iterate function per each page result.
13
+ */
14
+ readonly iterateEachPageItem: IterateFetchPagesByEachItemFunction<I, O, T, R>;
15
+ /**
16
+ * Optional additional configuration to pass to the
17
+ *
18
+ * By default, sequential is true.
19
+ */
20
+ readonly iteratePerformTasksConfig?: Partial<PerformAsyncTasksConfig<IterateFetchPagesByEachItemPair<T>>>;
21
+ }
22
+ export type IterateFetchPagesByEachItemResult<T, R> = PerformAsyncTasksResult<IterateFetchPagesByEachItemPair<T>, R>;
23
+ /**
24
+ * Iterates through the pages of a created FetchPage instance by each item individually.
25
+ *
26
+ * @param config
27
+ * @returns
28
+ */
29
+ export declare function iterateFetchPagesByEachItem<I, O, T, R>(config: IterateFetchPagesByEachItemConfig<I, O, T, R>): Promise<IterateFetchPagesResult>;
3
30
  /**
4
31
  * Filter function used to filter out items.
5
32
  *
6
33
  * @param snapshot
7
34
  * @returns
8
35
  */
9
- export type IterateFetchPagesByItemsFilterFunction<I, O, T> = (items: T[], pageResult: FetchPageResult<O>) => PromiseOrValue<T[]>;
10
- export interface IterateFetchPagesByItemsConfig<I, O, T, R> extends Omit<IterateFetchPagesConfig<I, O, R[]>, 'iteratePage'> {
36
+ export type IterateFetchPagesByItemsFilterFunction<I, O, T> = (items: T[], pageResult: FetchPageResultWithInput<I, O>) => PromiseOrValue<T[]>;
37
+ export type IterateFetchPagesByItemsFunction<I, O, T, R> = (items: T[], fetchPageResult: FetchPageResultWithInput<I, O>, totalItemsVisited: number) => Promise<R>;
38
+ export interface IterateFetchPagesByItemsConfig<I, O, T, R> extends Omit<IterateFetchPagesConfig<I, O, R>, 'iteratePage'> {
11
39
  /**
12
40
  * Read individual items from page result.
13
41
  *
@@ -42,7 +70,7 @@ export interface IterateFetchPagesByItemsConfig<I, O, T, R> extends Omit<Iterate
42
70
  /**
43
71
  * The iterate function per each page result.
44
72
  */
45
- iteratePageItems(items: T[], fetchPageResult: FetchPageResult<O>): Promise<R[]>;
73
+ readonly iteratePageItems: IterateFetchPagesByItemsFunction<I, O, T, R>;
46
74
  }
47
75
  /**
48
76
  * Iterates through the pages of a created FetchPage instance.
@@ -84,7 +112,7 @@ export interface BaseIterateFetchPagesConfig<I, O, R> extends FetchPageFactoryIn
84
112
  /**
85
113
  * The iterate function per each page result.
86
114
  */
87
- iteratePage(result: FetchPageResult<O>): Promise<R>;
115
+ iteratePage(result: FetchPageResultWithInput<I, O>): Promise<R>;
88
116
  /**
89
117
  * (Optional) Called at the end of each page.
90
118
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/util",
3
- "version": "11.0.8",
3
+ "version": "11.0.9",
4
4
  "exports": {
5
5
  ".": {
6
6
  "types": "./src/index.d.ts",
package/test/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [11.0.9](https://github.com/dereekb/dbx-components/compare/v11.0.8-dev...v11.0.9) (2024-11-23)
6
+
7
+
8
+
5
9
  ## [11.0.8](https://github.com/dereekb/dbx-components/compare/v11.0.7-dev...v11.0.8) (2024-11-23)
6
10
 
7
11
 
package/test/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/util/test",
3
- "version": "11.0.8",
3
+ "version": "11.0.9",
4
4
  "type": "commonjs",
5
5
  "peerDependencies": {
6
6
  "@dereekb/util": "*"