@sumaris-net/ngx-components 1.16.2 → 1.16.3

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.
@@ -15,47 +15,52 @@ export class JobUtils {
15
15
  .then(() => {
16
16
  if (opts === null || opts === void 0 ? void 0 : opts.maxProgression)
17
17
  progression.next(opts.maxProgression);
18
- if (opts === null || opts === void 0 ? void 0 : opts.progression)
19
- opts.progression.complete();
18
+ progression.complete();
20
19
  })
21
20
  .catch(err => progression.error(err));
22
21
  return progression;
23
22
  }
24
23
  static fetchAllPages(loadPageFn, opts) {
25
- var _a;
26
24
  return __awaiter(this, void 0, void 0, function* () {
27
- const maxProgression = opts && opts.maxProgression || undefined;
25
+ const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100);
26
+ const progression = opts === null || opts === void 0 ? void 0 : opts.progression;
28
27
  let total;
29
28
  let pageCount;
30
29
  let progressionStep;
31
30
  let currentPageDataCount;
32
- const fetchSize = opts && opts.fetchSize || 1000;
31
+ const fetchSize = toNumber(opts === null || opts === void 0 ? void 0 : opts.fetchSize, 1000);
32
+ if (fetchSize <= 0)
33
+ throw new Error('Unable to fetch pages: invalid fetchSize: ' + fetchSize);
33
34
  let offset = 0;
34
35
  let data = [];
35
36
  do {
36
37
  if (opts && opts.logPrefix)
37
38
  console.debug(`${opts.logPrefix} Fetching page #${offset / fetchSize}...`);
38
- // Get some items, using paging
39
+ // Fetch a page
39
40
  const res = yield loadPageFn(offset, fetchSize);
41
+ // Concat to previous result
40
42
  data = data.concat(res.data);
43
+ // Compute variables, for next loop
41
44
  currentPageDataCount = res.data && res.data.length || 0;
42
45
  offset += currentPageDataCount;
43
- // Set total count (only if not already set)
46
+ // Set total count (only once)
44
47
  if (isNil(total) && isNotNil(res.total)) {
45
48
  total = res.total;
46
49
  // Compute the number of page
47
50
  pageCount = Math.round(res.total / fetchSize + 0.5); // Round to HALF_UP integer
48
51
  // Compute step, by dividing maxProgression by number of page
49
- const actualProgression = Math.max(0, toNumber(opts && ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.value), 0));
50
- progressionStep = maxProgression
51
- ? (maxProgression - actualProgression) / pageCount
52
- : undefined /*if 0 reset to undefined*/;
52
+ if (progression) {
53
+ progressionStep = maxProgression / pageCount;
54
+ // DEBUG
55
+ if (opts && opts.logPrefix)
56
+ console.debug(`${opts.logPrefix} {pageCount: ${pageCount}, progression: ${progression.value}, pageProgressionStep: ${progressionStep}}`);
57
+ }
53
58
  }
54
59
  // Increment progression on each iteration (if possible)
55
- if (opts && opts.progression && isNotNil(progressionStep)) {
56
- opts.progression.next(opts.progression.value + progressionStep);
60
+ if (isNotNil(progressionStep)) {
61
+ progression.next(progression.value + progressionStep);
57
62
  }
58
- if (opts && opts.onPageLoaded)
63
+ if (opts === null || opts === void 0 ? void 0 : opts.onPageLoaded)
59
64
  opts.onPageLoaded(res);
60
65
  } while (currentPageDataCount > 0 && ((isNil(total) && currentPageDataCount === fetchSize) || (isNotNil(total) && (offset < total))));
61
66
  // Complete progression to reach progressionStep value (because of round)
@@ -66,14 +71,19 @@ export class JobUtils {
66
71
  total = data.length;
67
72
  pageCount = Math.round(data.length / fetchSize + 0.5);
68
73
  }
69
- const lastProgressionStep = opts.maxProgression - (progressionStep * pageCount);
70
- if (opts && opts.progression && lastProgressionStep > 0) {
71
- opts.progression.next(opts.progression.value + lastProgressionStep);
72
- }
74
+ // Compute final increment, using the real page count
75
+ progressionStep = Math.max(0, maxProgression - (progressionStep * pageCount));
76
+ }
77
+ // Or increment once (e.g. when total is not known, in received LoadResult)
78
+ else if (progression) {
79
+ progressionStep = maxProgression;
73
80
  }
74
- // Or increment once
75
- else if (opts && opts.progression && opts.maxProgression) {
76
- opts.progression.next(opts.maxProgression);
81
+ // DEBUG
82
+ if (opts && opts.logPrefix)
83
+ console.debug(`${opts.logPrefix} All pages fetched - {progression: ${progression.value}, lastProgressionStep: ${progressionStep}`);
84
+ // Final increment
85
+ if (progression && progressionStep > 0) {
86
+ progression.next(progression.value + progressionStep);
77
87
  }
78
88
  return {
79
89
  data,
@@ -82,4 +92,4 @@ export class JobUtils {
82
92
  });
83
93
  }
84
94
  }
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvc2VydmljZXMvam9iLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFVekQsV0FBVztBQUNYLE1BQU0sT0FBTyxRQUFRO0lBRW5CLE1BQU0sQ0FBQyxNQUFNLENBQTJDLFlBQTRDLEVBQUUsSUFBUTtRQUM1RyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUEyQyxRQUFzQyxFQUFFLElBQVE7UUFDckcsT0FBTyxLQUFLLENBQXFCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQTJDLFFBQXNDLEVBQUUsSUFBTztRQUVsRyxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUNuRCxRQUFRLGlDQUFLLElBQUksS0FBRSxXQUFXLElBQUU7YUFDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULElBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGNBQWM7Z0JBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEUsSUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsV0FBVztnQkFBRSxJQUFJLENBQUMsV0FB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QztnQkFDdkMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUU7b0JBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUZBQW1GLEtBQUssY0FBYyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDbEksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2lCQUN2RDtnQkFFRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQ2hGLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxFQUFFO29CQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDO2lCQUNyRTthQUNGO1lBQ0Qsb0JBQW9CO2lCQUNmLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzVDO1lBRUQsT0FBTztnQkFDTCxJQUFJO2dCQUNKLEtBQUs7YUFDTixDQUFDOztLQUNIO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlZmVyLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOb3ROaWwsIHRvTnVtYmVyIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IExvYWRSZXN1bHQsIExvYWRSZXN1bHRCeVBhZ2VGbiB9IGZyb20gJy4vZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgdHlwZSBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8gZXh0ZW5kcyBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnM+ID0gKG9wdHM/OiBPKSA9PiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGludGVyZmFjZSBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnMge1xuICBtYXhQcm9ncmVzc2lvbj86IG51bWJlcjtcbiAgcHJvZ3Jlc3Npb24/OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIEpvYlV0aWxzIHtcblxuICBzdGF0aWMgZGVmZXJzPE8gZXh0ZW5kcyBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnM+KHJ1bm5hYmxlTGlzdDogQ2FsbGFibGVXaXRoUHJvZ3Jlc3Npb25GbjxPPltdLCBvcHRzPzogTyk6IE9ic2VydmFibGU8bnVtYmVyPltdIHtcbiAgICByZXR1cm4gcnVubmFibGVMaXN0Lm1hcChydW5uYWJsZSA9PiBKb2JVdGlscy5kZWZlcihydW5uYWJsZSwgb3B0cykpO1xuICB9XG5cbiAgc3RhdGljIGRlZmVyPE8gZXh0ZW5kcyBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnM+KHJ1bm5hYmxlOiBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8+LCBvcHRzPzogTyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGRlZmVyPE9ic2VydmFibGU8bnVtYmVyPj4oKCkgPT4gSm9iVXRpbHMucnVuKHJ1bm5hYmxlLCBvcHRzKSk7XG4gIH1cblxuICBzdGF0aWMgcnVuPE8gZXh0ZW5kcyBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnM+KHJ1bm5hYmxlOiBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8+LCBvcHRzOiBPKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblxuICAgIGNvbnN0IHByb2dyZXNzaW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHJ1bm5hYmxlKHsuLi5vcHRzLCBwcm9ncmVzc2lvbn0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChvcHRzPy5tYXhQcm9ncmVzc2lvbikgcHJvZ3Jlc3Npb24ubmV4dChvcHRzLm1heFByb2dyZXNzaW9uKTtcbiAgICAgICAgaWYgKG9wdHM/LnByb2dyZXNzaW9uKSBvcHRzLnByb2dyZXNzaW9uLmNvbXBsZXRlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiBwcm9ncmVzc2lvbi5lcnJvcihlcnIpKTtcbiAgICByZXR1cm4gcHJvZ3Jlc3Npb247XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZmV0Y2hBbGxQYWdlczxUPihcbiAgICBsb2FkUGFnZUZuOiBMb2FkUmVzdWx0QnlQYWdlRm48VD4sXG4gICAgb3B0cz86IHtcbiAgICAgIG1heFByb2dyZXNzaW9uPzogbnVtYmVyO1xuICAgICAgcHJvZ3Jlc3Npb24/OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcbiAgICAgIG9uUGFnZUxvYWRlZD86IChwYWdlUmVzdWx0OiBMb2FkUmVzdWx0PFQ+KSA9PiBhbnk7XG4gICAgICBsb2dQcmVmaXg/OiBzdHJpbmc7XG4gICAgICBmZXRjaFNpemU/OiBudW1iZXI7XG4gICAgfSk6IFByb21pc2U8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgY29uc3QgbWF4UHJvZ3Jlc3Npb24gPSBvcHRzICYmIG9wdHMubWF4UHJvZ3Jlc3Npb24gfHwgdW5kZWZpbmVkO1xuICAgIGxldCB0b3RhbDsgbGV0IHBhZ2VDb3VudDsgbGV0IHByb2dyZXNzaW9uU3RlcDsgbGV0IGN1cnJlbnRQYWdlRGF0YUNvdW50OiBudW1iZXI7XG4gICAgY29uc3QgZmV0Y2hTaXplID0gb3B0cyAmJiBvcHRzLmZldGNoU2l6ZSB8fCAxMDAwO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBkYXRhOiBUW10gPSBbXTtcbiAgICBkbyB7XG5cbiAgICAgIGlmIChvcHRzICYmIG9wdHMubG9nUHJlZml4KSBjb25zb2xlLmRlYnVnKGAke29wdHMubG9nUHJlZml4fSBGZXRjaGluZyBwYWdlICMke29mZnNldCAvIGZldGNoU2l6ZX0uLi5gKTtcblxuICAgICAgLy8gR2V0IHNvbWUgaXRlbXMsIHVzaW5nIHBhZ2luZ1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgbG9hZFBhZ2VGbihvZmZzZXQsIGZldGNoU2l6ZSk7XG4gICAgICBkYXRhID0gZGF0YS5jb25jYXQocmVzLmRhdGEpO1xuICAgICAgY3VycmVudFBhZ2VEYXRhQ291bnQgPSByZXMuZGF0YSAmJiByZXMuZGF0YS5sZW5ndGggfHwgMDtcbiAgICAgIG9mZnNldCArPSBjdXJyZW50UGFnZURhdGFDb3VudDtcblxuICAgICAgLy8gU2V0IHRvdGFsIGNvdW50IChvbmx5IGlmIG5vdCBhbHJlYWR5IHNldClcbiAgICAgIGlmIChpc05pbCh0b3RhbCkgJiYgaXNOb3ROaWwocmVzLnRvdGFsKSkge1xuICAgICAgICB0b3RhbCA9IHJlcy50b3RhbDtcbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHBhZ2VcbiAgICAgICAgcGFnZUNvdW50ID0gTWF0aC5yb3VuZChyZXMudG90YWwgLyBmZXRjaFNpemUgKyAwLjUpOyAvLyBSb3VuZCB0byBIQUxGX1VQIGludGVnZXJcbiAgICAgICAgLy8gQ29tcHV0ZSBzdGVwLCBieSBkaXZpZGluZyBtYXhQcm9ncmVzc2lvbiBieSBudW1iZXIgb2YgcGFnZVxuICAgICAgICBjb25zdCBhY3R1YWxQcm9ncmVzc2lvbiA9IE1hdGgubWF4KDAsIHRvTnVtYmVyKG9wdHMgJiYgb3B0cy5wcm9ncmVzc2lvbj8udmFsdWUsIDApKTtcbiAgICAgICAgcHJvZ3Jlc3Npb25TdGVwID0gbWF4UHJvZ3Jlc3Npb25cbiAgICAgICAgICA/IChtYXhQcm9ncmVzc2lvbiAtIGFjdHVhbFByb2dyZXNzaW9uKSAvIHBhZ2VDb3VudFxuICAgICAgICAgIDogdW5kZWZpbmVkIC8qaWYgMCByZXNldCB0byB1bmRlZmluZWQqLztcbiAgICAgIH1cblxuICAgICAgLy8gSW5jcmVtZW50IHByb2dyZXNzaW9uIG9uIGVhY2ggaXRlcmF0aW9uIChpZiBwb3NzaWJsZSlcbiAgICAgIGlmIChvcHRzICYmIG9wdHMucHJvZ3Jlc3Npb24gJiYgaXNOb3ROaWwocHJvZ3Jlc3Npb25TdGVwKSkge1xuICAgICAgICBvcHRzLnByb2dyZXNzaW9uLm5leHQob3B0cy5wcm9ncmVzc2lvbi52YWx1ZSArIHByb2dyZXNzaW9uU3RlcCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzICYmIG9wdHMub25QYWdlTG9hZGVkKSBvcHRzLm9uUGFnZUxvYWRlZChyZXMpO1xuXG4gICAgfSB3aGlsZSAoY3VycmVudFBhZ2VEYXRhQ291bnQgPiAwICYmICgoaXNOaWwodG90YWwpICYmIGN1cnJlbnRQYWdlRGF0YUNvdW50ID09PSBmZXRjaFNpemUpIHx8IChpc05vdE5pbCh0b3RhbCkgJiYgKG9mZnNldCA8IHRvdGFsKSkpKTtcblxuICAgIC8vIENvbXBsZXRlIHByb2dyZXNzaW9uIHRvIHJlYWNoIHByb2dyZXNzaW9uU3RlcCB2YWx1ZSAoYmVjYXVzZSBvZiByb3VuZClcbiAgICBpZiAoaXNOb3ROaWwocHJvZ3Jlc3Npb25TdGVwKSkge1xuXG4gICAgICAvLyBJZiB0b3RhbCByZXR1cm4gYnkgbG9hZEFsbCB3YXMgYmFkICFcbiAgICAgIGlmIChpc05vdE5pbCh0b3RhbCkgJiYgZGF0YS5sZW5ndGggPCB0b3RhbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEEgZnVuY3Rpb24gbG9hZEFsbCgpIHJldHVybmVkIGEgYmFkIHRvdGFsIChsZXNzIHRoYW4gYWxsIHBhZ2UncyBkYXRhKSEgRXhwZWN0ZWQgJHt0b3RhbH0gYnV0IGZldGNoICR7ZGF0YS5sZW5ndGh9YCk7XG4gICAgICAgIHRvdGFsID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIHBhZ2VDb3VudCA9IE1hdGgucm91bmQoZGF0YS5sZW5ndGggLyBmZXRjaFNpemUgKyAwLjUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXN0UHJvZ3Jlc3Npb25TdGVwID0gb3B0cy5tYXhQcm9ncmVzc2lvbiAtIChwcm9ncmVzc2lvblN0ZXAgKiBwYWdlQ291bnQpO1xuICAgICAgaWYgKG9wdHMgJiYgb3B0cy5wcm9ncmVzc2lvbiAmJiBsYXN0UHJvZ3Jlc3Npb25TdGVwID4gMCkge1xuICAgICAgICBvcHRzLnByb2dyZXNzaW9uLm5leHQob3B0cy5wcm9ncmVzc2lvbi52YWx1ZSArIGxhc3RQcm9ncmVzc2lvblN0ZXApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBPciBpbmNyZW1lbnQgb25jZVxuICAgIGVsc2UgaWYgKG9wdHMgJiYgb3B0cy5wcm9ncmVzc2lvbiAmJiBvcHRzLm1heFByb2dyZXNzaW9uKSB7XG4gICAgICBvcHRzLnByb2dyZXNzaW9uLm5leHQob3B0cy5tYXhQcm9ncmVzc2lvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICB0b3RhbFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvc2VydmljZXMvam9iLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFVekQsV0FBVztBQUNYLE1BQU0sT0FBTyxRQUFRO0lBRW5CLE1BQU0sQ0FBQyxNQUFNLENBQTJDLFlBQTRDLEVBQUUsSUFBUTtRQUM1RyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUEyQyxRQUFzQyxFQUFFLElBQVE7UUFDckcsT0FBTyxLQUFLLENBQXFCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQTJDLFFBQXNDLEVBQUUsSUFBTztRQUVsRyxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUNuRCxRQUFRLGlDQUFLLElBQUksS0FBRSxXQUFXLElBQUU7YUFDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULElBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGNBQWM7Z0JBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEUsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxHQUFH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aW9yU3ViamVjdCwgZGVmZXIsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzTmlsLCBpc05vdE5pbCwgdG9OdW1iZXIgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdCwgTG9hZFJlc3VsdEJ5UGFnZUZuIH0gZnJvbSAnLi9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5cbmV4cG9ydCB0eXBlIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uRm48TyBleHRlbmRzIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucz4gPSAob3B0cz86IE8pID0+IFByb21pc2U8dm9pZD47XG5leHBvcnQgaW50ZXJmYWNlIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucyB7XG4gIG1heFByb2dyZXNzaW9uPzogbnVtYmVyO1xuICBwcm9ncmVzc2lvbj86IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgSm9iVXRpbHMge1xuXG4gIHN0YXRpYyBkZWZlcnM8TyBleHRlbmRzIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucz4ocnVubmFibGVMaXN0OiBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8+W10sIG9wdHM/OiBPKTogT2JzZXJ2YWJsZTxudW1iZXI+W10ge1xuICAgIHJldHVybiBydW5uYWJsZUxpc3QubWFwKHJ1bm5hYmxlID0+IEpvYlV0aWxzLmRlZmVyKHJ1bm5hYmxlLCBvcHRzKSk7XG4gIH1cblxuICBzdGF0aWMgZGVmZXI8TyBleHRlbmRzIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucz4ocnVubmFibGU6IENhbGxhYmxlV2l0aFByb2dyZXNzaW9uRm48Tz4sIG9wdHM/OiBPKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gZGVmZXI8T2JzZXJ2YWJsZTxudW1iZXI+PigoKSA9PiBKb2JVdGlscy5ydW4ocnVubmFibGUsIG9wdHMpKTtcbiAgfVxuXG4gIHN0YXRpYyBydW48TyBleHRlbmRzIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucz4ocnVubmFibGU6IENhbGxhYmxlV2l0aFByb2dyZXNzaW9uRm48Tz4sIG9wdHM6IE8pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuXG4gICAgY29uc3QgcHJvZ3Jlc3Npb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgcnVubmFibGUoey4uLm9wdHMsIHByb2dyZXNzaW9ufSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdHM/Lm1heFByb2dyZXNzaW9uKSBwcm9ncmVzc2lvbi5uZXh0KG9wdHMubWF4UHJvZ3Jlc3Npb24pO1xuICAgICAgICBwcm9ncmVzc2lvbi5jb21wbGV0ZSgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnIgPT4gcHJvZ3Jlc3Npb24uZXJyb3IoZXJyKSk7XG4gICAgcmV0dXJuIHByb2dyZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGZldGNoQWxsUGFnZXM8VD4oXG4gICAgbG9hZFBhZ2VGbjogTG9hZFJlc3VsdEJ5UGFnZUZuPFQ+LFxuICAgIG9wdHM/OiB7XG4gICAgICBwcm9ncmVzc2lvbj86IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuICAgICAgbWF4UHJvZ3Jlc3Npb24/OiBudW1iZXI7XG4gICAgICBvblBhZ2VMb2FkZWQ/OiAocGFnZVJlc3VsdDogTG9hZFJlc3VsdDxUPikgPT4gYW55O1xuICAgICAgbG9nUHJlZml4Pzogc3RyaW5nO1xuICAgICAgZmV0Y2hTaXplPzogbnVtYmVyO1xuICAgIH0pOiBQcm9taXNlPExvYWRSZXN1bHQ8VD4+IHtcblxuICAgIGNvbnN0IG1heFByb2dyZXNzaW9uID0gdG9OdW1iZXIob3B0cz8ubWF4UHJvZ3Jlc3Npb24sIDEwMCk7XG4gICAgY29uc3QgcHJvZ3Jlc3Npb24gPSBvcHRzPy5wcm9ncmVzc2lvbjtcbiAgICBsZXQgdG90YWw7IGxldCBwYWdlQ291bnQ7IGxldCBwcm9ncmVzc2lvblN0ZXA7IGxldCBjdXJyZW50UGFnZURhdGFDb3VudDogbnVtYmVyO1xuICAgIGNvbnN0IGZldGNoU2l6ZSA9IHRvTnVtYmVyKG9wdHM/LmZldGNoU2l6ZSwgMTAwMCk7XG4gICAgaWYgKGZldGNoU2l6ZSA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmZXRjaCBwYWdlczogaW52YWxpZCBmZXRjaFNpemU6ICcgKyBmZXRjaFNpemUpO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBkYXRhOiBUW10gPSBbXTtcbiAgICBkbyB7XG5cbiAgICAgIGlmIChvcHRzICYmIG9wdHMubG9nUHJlZml4KSBjb25zb2xlLmRlYnVnKGAke29wdHMubG9nUHJlZml4fSBGZXRjaGluZyBwYWdlICMke29mZnNldCAvIGZldGNoU2l6ZX0uLi5gKTtcblxuICAgICAgLy8gRmV0Y2ggYSBwYWdlXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBsb2FkUGFnZUZuKG9mZnNldCwgZmV0Y2hTaXplKTtcblxuICAgICAgLy8gQ29uY2F0IHRvIHByZXZpb3VzIHJlc3VsdFxuICAgICAgZGF0YSA9IGRhdGEuY29uY2F0KHJlcy5kYXRhKTtcblxuICAgICAgLy8gQ29tcHV0ZSB2YXJpYWJsZXMsIGZvciBuZXh0IGxvb3BcbiAgICAgIGN1cnJlbnRQYWdlRGF0YUNvdW50ID0gcmVzLmRhdGEgJiYgcmVzLmRhdGEubGVuZ3RoIHx8IDA7XG4gICAgICBvZmZzZXQgKz0gY3VycmVudFBhZ2VEYXRhQ291bnQ7XG5cbiAgICAgIC8vIFNldCB0b3RhbCBjb3VudCAob25seSBvbmNlKVxuICAgICAgaWYgKGlzTmlsKHRvdGFsKSAmJiBpc05vdE5pbChyZXMudG90YWwpKSB7XG4gICAgICAgIHRvdGFsID0gcmVzLnRvdGFsO1xuICAgICAgICAvLyBDb21wdXRlIHRoZSBudW1iZXIgb2YgcGFnZVxuICAgICAgICBwYWdlQ291bnQgPSBNYXRoLnJvdW5kKHJlcy50b3RhbCAvIGZldGNoU2l6ZSArIDAuNSk7IC8vIFJvdW5kIHRvIEhBTEZfVVAgaW50ZWdlclxuICAgICAgICAvLyBDb21wdXRlIHN0ZXAsIGJ5IGRpdmlkaW5nIG1heFByb2dyZXNzaW9uIGJ5IG51bWJlciBvZiBwYWdlXG4gICAgICAgIGlmIChwcm9ncmVzc2lvbikge1xuICAgICAgICAgIHByb2dyZXNzaW9uU3RlcCA9IG1heFByb2dyZXNzaW9uIC8gcGFnZUNvdW50O1xuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5sb2dQcmVmaXgpIGNvbnNvbGUuZGVidWcoYCR7b3B0cy5sb2dQcmVmaXh9IHtwYWdlQ291bnQ6ICR7cGFnZUNvdW50fSwgcHJvZ3Jlc3Npb246ICR7cHJvZ3Jlc3Npb24udmFsdWV9LCBwYWdlUHJvZ3Jlc3Npb25TdGVwOiAke3Byb2dyZXNzaW9uU3RlcH19YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSW5jcmVtZW50IHByb2dyZXNzaW9uIG9uIGVhY2ggaXRlcmF0aW9uIChpZiBwb3NzaWJsZSlcbiAgICAgIGlmIChpc05vdE5pbChwcm9ncmVzc2lvblN0ZXApKSB7XG4gICAgICAgIHByb2dyZXNzaW9uLm5leHQocHJvZ3Jlc3Npb24udmFsdWUgKyBwcm9ncmVzc2lvblN0ZXApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cz8ub25QYWdlTG9hZGVkKSBvcHRzLm9uUGFnZUxvYWRlZChyZXMpO1xuXG4gICAgfSB3aGlsZSAoY3VycmVudFBhZ2VEYXRhQ291bnQgPiAwICYmICgoaXNOaWwodG90YWwpICYmIGN1cnJlbnRQYWdlRGF0YUNvdW50ID09PSBmZXRjaFNpemUpIHx8IChpc05vdE5pbCh0b3RhbCkgJiYgKG9mZnNldCA8IHRvdGFsKSkpKTtcblxuICAgIC8vIENvbXBsZXRlIHByb2dyZXNzaW9uIHRvIHJlYWNoIHByb2dyZXNzaW9uU3RlcCB2YWx1ZSAoYmVjYXVzZSBvZiByb3VuZClcbiAgICBpZiAoaXNOb3ROaWwocHJvZ3Jlc3Npb25TdGVwKSkge1xuXG4gICAgICAvLyBJZiB0b3RhbCByZXR1cm4gYnkgbG9hZEFsbCB3YXMgYmFkICFcbiAgICAgIGlmIChpc05vdE5pbCh0b3RhbCkgJiYgZGF0YS5sZW5ndGggPCB0b3RhbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEEgZnVuY3Rpb24gbG9hZEFsbCgpIHJldHVybmVkIGEgYmFkIHRvdGFsIChsZXNzIHRoYW4gYWxsIHBhZ2UncyBkYXRhKSEgRXhwZWN0ZWQgJHt0b3RhbH0gYnV0IGZldGNoICR7ZGF0YS5sZW5ndGh9YCk7XG4gICAgICAgIHRvdGFsID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIHBhZ2VDb3VudCA9IE1hdGgucm91bmQoZGF0YS5sZW5ndGggLyBmZXRjaFNpemUgKyAwLjUpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb21wdXRlIGZpbmFsIGluY3JlbWVudCwgdXNpbmcgdGhlIHJlYWwgcGFnZSBjb3VudFxuICAgICAgcHJvZ3Jlc3Npb25TdGVwID0gTWF0aC5tYXgoMCwgbWF4UHJvZ3Jlc3Npb24gLSAocHJvZ3Jlc3Npb25TdGVwICogcGFnZUNvdW50KSk7XG5cbiAgICB9XG5cbiAgICAvLyBPciBpbmNyZW1lbnQgb25jZSAoZS5nLiB3aGVuIHRvdGFsIGlzIG5vdCBrbm93biwgaW4gcmVjZWl2ZWQgTG9hZFJlc3VsdClcbiAgICBlbHNlIGlmIChwcm9ncmVzc2lvbikge1xuICAgICAgcHJvZ3Jlc3Npb25TdGVwID0gbWF4UHJvZ3Jlc3Npb247XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICBpZiAob3B0cyAmJiBvcHRzLmxvZ1ByZWZpeCkgY29uc29sZS5kZWJ1ZyhgJHtvcHRzLmxvZ1ByZWZpeH0gQWxsIHBhZ2VzIGZldGNoZWQgLSB7cHJvZ3Jlc3Npb246ICR7cHJvZ3Jlc3Npb24udmFsdWV9LCBsYXN0UHJvZ3Jlc3Npb25TdGVwOiAke3Byb2dyZXNzaW9uU3RlcH1gKTtcblxuICAgIC8vIEZpbmFsIGluY3JlbWVudFxuICAgIGlmIChwcm9ncmVzc2lvbiAmJiBwcm9ncmVzc2lvblN0ZXAgPiAwKSB7XG4gICAgICBwcm9ncmVzc2lvbi5uZXh0KHByb2dyZXNzaW9uLnZhbHVlICsgcHJvZ3Jlc3Npb25TdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIHRvdGFsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -17692,47 +17692,52 @@ class JobUtils {
17692
17692
  .then(() => {
17693
17693
  if (opts === null || opts === void 0 ? void 0 : opts.maxProgression)
17694
17694
  progression.next(opts.maxProgression);
17695
- if (opts === null || opts === void 0 ? void 0 : opts.progression)
17696
- opts.progression.complete();
17695
+ progression.complete();
17697
17696
  })
17698
17697
  .catch(err => progression.error(err));
17699
17698
  return progression;
17700
17699
  }
17701
17700
  static fetchAllPages(loadPageFn, opts) {
17702
- var _a;
17703
17701
  return __awaiter(this, void 0, void 0, function* () {
17704
- const maxProgression = opts && opts.maxProgression || undefined;
17702
+ const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100);
17703
+ const progression = opts === null || opts === void 0 ? void 0 : opts.progression;
17705
17704
  let total;
17706
17705
  let pageCount;
17707
17706
  let progressionStep;
17708
17707
  let currentPageDataCount;
17709
- const fetchSize = opts && opts.fetchSize || 1000;
17708
+ const fetchSize = toNumber(opts === null || opts === void 0 ? void 0 : opts.fetchSize, 1000);
17709
+ if (fetchSize <= 0)
17710
+ throw new Error('Unable to fetch pages: invalid fetchSize: ' + fetchSize);
17710
17711
  let offset = 0;
17711
17712
  let data = [];
17712
17713
  do {
17713
17714
  if (opts && opts.logPrefix)
17714
17715
  console.debug(`${opts.logPrefix} Fetching page #${offset / fetchSize}...`);
17715
- // Get some items, using paging
17716
+ // Fetch a page
17716
17717
  const res = yield loadPageFn(offset, fetchSize);
17718
+ // Concat to previous result
17717
17719
  data = data.concat(res.data);
17720
+ // Compute variables, for next loop
17718
17721
  currentPageDataCount = res.data && res.data.length || 0;
17719
17722
  offset += currentPageDataCount;
17720
- // Set total count (only if not already set)
17723
+ // Set total count (only once)
17721
17724
  if (isNil(total) && isNotNil(res.total)) {
17722
17725
  total = res.total;
17723
17726
  // Compute the number of page
17724
17727
  pageCount = Math.round(res.total / fetchSize + 0.5); // Round to HALF_UP integer
17725
17728
  // Compute step, by dividing maxProgression by number of page
17726
- const actualProgression = Math.max(0, toNumber(opts && ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.value), 0));
17727
- progressionStep = maxProgression
17728
- ? (maxProgression - actualProgression) / pageCount
17729
- : undefined /*if 0 reset to undefined*/;
17729
+ if (progression) {
17730
+ progressionStep = maxProgression / pageCount;
17731
+ // DEBUG
17732
+ if (opts && opts.logPrefix)
17733
+ console.debug(`${opts.logPrefix} {pageCount: ${pageCount}, progression: ${progression.value}, pageProgressionStep: ${progressionStep}}`);
17734
+ }
17730
17735
  }
17731
17736
  // Increment progression on each iteration (if possible)
17732
- if (opts && opts.progression && isNotNil(progressionStep)) {
17733
- opts.progression.next(opts.progression.value + progressionStep);
17737
+ if (isNotNil(progressionStep)) {
17738
+ progression.next(progression.value + progressionStep);
17734
17739
  }
17735
- if (opts && opts.onPageLoaded)
17740
+ if (opts === null || opts === void 0 ? void 0 : opts.onPageLoaded)
17736
17741
  opts.onPageLoaded(res);
17737
17742
  } while (currentPageDataCount > 0 && ((isNil(total) && currentPageDataCount === fetchSize) || (isNotNil(total) && (offset < total))));
17738
17743
  // Complete progression to reach progressionStep value (because of round)
@@ -17743,14 +17748,19 @@ class JobUtils {
17743
17748
  total = data.length;
17744
17749
  pageCount = Math.round(data.length / fetchSize + 0.5);
17745
17750
  }
17746
- const lastProgressionStep = opts.maxProgression - (progressionStep * pageCount);
17747
- if (opts && opts.progression && lastProgressionStep > 0) {
17748
- opts.progression.next(opts.progression.value + lastProgressionStep);
17749
- }
17751
+ // Compute final increment, using the real page count
17752
+ progressionStep = Math.max(0, maxProgression - (progressionStep * pageCount));
17753
+ }
17754
+ // Or increment once (e.g. when total is not known, in received LoadResult)
17755
+ else if (progression) {
17756
+ progressionStep = maxProgression;
17750
17757
  }
17751
- // Or increment once
17752
- else if (opts && opts.progression && opts.maxProgression) {
17753
- opts.progression.next(opts.maxProgression);
17758
+ // DEBUG
17759
+ if (opts && opts.logPrefix)
17760
+ console.debug(`${opts.logPrefix} All pages fetched - {progression: ${progression.value}, lastProgressionStep: ${progressionStep}`);
17761
+ // Final increment
17762
+ if (progression && progressionStep > 0) {
17763
+ progression.next(progression.value + progressionStep);
17754
17764
  }
17755
17765
  return {
17756
17766
  data,