@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.
- package/fetch/index.cjs.js +25 -2
- package/fetch/index.esm.js +34 -3
- package/fetch/package.json +1 -1
- package/fetch/src/lib/fetch.page.iterate.d.ts +33 -5
- package/package.json +1 -1
- package/test/CHANGELOG.md +4 -0
- package/test/package.json +1 -1
package/fetch/index.cjs.js
CHANGED
|
@@ -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;
|
package/fetch/index.esm.js
CHANGED
|
@@ -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 };
|
package/fetch/package.json
CHANGED
|
@@ -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:
|
|
10
|
-
export
|
|
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
|
|
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:
|
|
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
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
|
|