@zajno/common 3.0.10 → 3.0.12

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/dates/tz.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ /** This is experimental stuff, so no tests provided, see comments in the code */
2
+ export declare namespace Timezones {
3
+ const Current: string;
4
+ const CurrentOffset: number;
5
+ const getOffset: (timeZone: string) => number;
6
+ }
7
+ //# sourceMappingURL=tz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tz.d.ts","sourceRoot":"","sources":["../../src/dates/tz.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,yBAAiB,SAAS,CAAC;IAEhB,MAAM,OAAO,QAAmD,CAAC;IACjE,MAAM,aAAa,QAAiC,CAAC;IAKrD,MAAM,SAAS,aAAc,MAAM,WA4BzC,CAAC;CAUL"}
package/dates/tz.js ADDED
@@ -0,0 +1,42 @@
1
+ /** This is experimental stuff, so no tests provided, see comments in the code */
2
+ export var Timezones;
3
+ (function (Timezones) {
4
+ Timezones.Current = Intl.DateTimeFormat().resolvedOptions().timeZone;
5
+ Timezones.CurrentOffset = new Date().getTimezoneOffset();
6
+ // https://stackoverflow.com/a/64262840/9053142
7
+ // tested locally, but it's hard to write tests since they are based on the local timezone, browser implementation and whether DST is active
8
+ // it's recommended to wrap with try/catch and don't rely it will always work
9
+ Timezones.getOffset = (timeZone) => {
10
+ const timeZoneName = Intl.DateTimeFormat('ia', {
11
+ timeZoneName: 'short',
12
+ timeZone,
13
+ })
14
+ .formatToParts()
15
+ .find((i) => i.type === 'timeZoneName').value;
16
+ const offset = timeZoneName.slice(3);
17
+ if (!offset) {
18
+ return 0;
19
+ }
20
+ const matchData = offset.match(/([+-])(\d+)(?::(\d+))?/);
21
+ if (!matchData) {
22
+ throw `cannot parse timezone name: ${timeZoneName}`;
23
+ }
24
+ const [, sign, hour, minute] = matchData;
25
+ let result = parseInt(hour, 10) * 60;
26
+ if (sign === '+') {
27
+ result *= -1;
28
+ }
29
+ if (minute) {
30
+ result += parseInt(minute, 10);
31
+ }
32
+ return result;
33
+ };
34
+ // Tests may look like this:
35
+ /*
36
+ expect(Timezones.getOffset('America/New_York')).toBe(240);
37
+ expect(Timezones.getOffset('Europe/Paris')).toBe(-120);
38
+ expect(Timezones.getOffset('Europe/Kiev')).toBe(-180);
39
+ expect(Timezones.getOffset('Asia/Kolkata')).toBe(-270);
40
+ */
41
+ })(Timezones || (Timezones = {}));
42
+ //# sourceMappingURL=tz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tz.js","sourceRoot":"","sources":["../../src/dates/tz.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,MAAM,KAAW,SAAS,CA8CzB;AA9CD,WAAiB,SAAS;IAET,iBAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;IAC3D,uBAAa,GAAG,IAAI,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC;IAE5D,+CAA+C;IAC/C,4IAA4I;IAC5I,6EAA6E;IAChE,mBAAS,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;YAC3C,YAAY,EAAE,OAAO;YACrB,QAAQ;SACX,CAAC;aACG,aAAa,EAAE;aACf,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,KAAK,CAAC;QAElD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,CAAC,CAAC;SACZ;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,EAAE;YACZ,MAAM,+BAA+B,YAAY,EAAE,CAAC;SACvD;QAED,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;QACzC,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;QACrC,IAAI,IAAI,KAAK,GAAG,EAAE;YACd,MAAM,IAAI,CAAC,CAAC,CAAC;SAChB;QACD,IAAI,MAAM,EAAE;YACR,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SAClC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF,4BAA4B;IAC5B;;;;;MAKE;AAEN,CAAC,EA9CgB,SAAS,KAAT,SAAS,QA8CzB"}
@@ -1,6 +1,7 @@
1
1
  import type { Predicate } from '../types';
2
2
  import { ILogger } from '../logger';
3
3
  export type EventHandler<T = any> = (data?: T) => void | Promise<void>;
4
+ type Unsubscribe = () => void;
4
5
  export interface IEvent<T = any> {
5
6
  on(handler: EventHandler<T>): () => void;
6
7
  off(handler: EventHandler<T>): void;
@@ -8,10 +9,10 @@ export interface IEvent<T = any> {
8
9
  export declare class Event<T = any> implements IEvent<T> {
9
10
  private _handlers;
10
11
  private _logger;
11
- constructor();
12
- constructor(logger?: ILogger);
13
- constructor(name?: string);
14
- on(handler: EventHandler<T>): () => void;
12
+ constructor(withDefaultLogger?: boolean);
13
+ withLogger(logger?: ILogger): this;
14
+ withLogger(name?: string): this;
15
+ on(handler: EventHandler<T>): Unsubscribe;
15
16
  off(handler: EventHandler<T>): void;
16
17
  trigger(data?: T): void;
17
18
  triggerAsync(data?: T): Promise<Error[]>;
@@ -19,4 +20,5 @@ export declare class Event<T = any> implements IEvent<T> {
19
20
  private logError;
20
21
  }
21
22
  export declare function oneTimeSubscription<T>(e: IEvent<T>, filter?: Predicate<T>): Promise<T>;
23
+ export {};
22
24
  //# sourceMappingURL=event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/observing/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvE,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,GAAG;IAC3B,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IACzC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACvC;AAED,qBAAa,KAAK,CAAC,CAAC,GAAG,GAAG,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,OAAO,CAAiB;;gBAGpB,MAAM,CAAC,EAAE,OAAO;gBAChB,IAAI,CAAC,EAAE,MAAM;IAQlB,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAOxC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAInC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IAeV,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAqB9C,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;IAI1B,OAAO,CAAC,QAAQ;CAGnB;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAStF"}
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/observing/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACvE,KAAK,WAAW,GAAG,MAAM,IAAI,CAAC;AAE9B,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,GAAG;IAC3B,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IACzC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACvC;AAED,qBAAa,KAAK,CAAC,CAAC,GAAG,GAAG,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,OAAO,CAAiB;gBAEpB,iBAAiB,UAAO;IAM7B,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAClC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAS/B,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,WAAW;IAOzC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAInC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IAeV,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAqB9C,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;IAI1B,OAAO,CAAC,QAAQ;CAGnB;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAYtF"}
@@ -1,12 +1,18 @@
1
1
  import { forEachAsync } from '../async/arrays';
2
2
  import { createLogger } from '../logger';
3
3
  export class Event {
4
- constructor(loggerOrName) {
4
+ constructor(withDefaultLogger = true) {
5
5
  this._handlers = [];
6
6
  this._logger = null;
7
+ if (withDefaultLogger) {
8
+ this.withLogger();
9
+ }
10
+ }
11
+ withLogger(loggerOrName) {
7
12
  this._logger = (!loggerOrName || typeof loggerOrName === 'string')
8
13
  ? createLogger(`[Event:${loggerOrName || '?'}]`)
9
14
  : loggerOrName;
15
+ return this;
10
16
  }
11
17
  on(handler) {
12
18
  this._handlers.push(handler);
@@ -52,14 +58,17 @@ export class Event {
52
58
  return this;
53
59
  }
54
60
  logError(data, cb, err) {
55
- this._logger.error(`[Event.${typeof data}] Handler ${cb.name} thrown an exception: `, err);
61
+ this._logger?.error(`[Event.${typeof data}] Handler ${cb.name} thrown an exception: `, err);
56
62
  }
57
63
  }
58
64
  export function oneTimeSubscription(e, filter) {
59
65
  return new Promise((resolve) => {
60
- const unsub = e.on(v => {
66
+ let unsubscribe = null;
67
+ unsubscribe = e.on(v => {
61
68
  if (!filter || filter(v)) {
62
- unsub();
69
+ // the callback can be called during subscription, so unsubscribe may not be initialized yet.
70
+ // in that case assume that unsubscribing is not needed
71
+ unsubscribe?.();
63
72
  resolve(v);
64
73
  }
65
74
  });
@@ -1 +1 @@
1
- {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/observing/event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAW,YAAY,EAAE,MAAM,WAAW,CAAC;AASlD,MAAM,OAAO,KAAK;IAQd,YAAY,YAA+B;QAPnC,cAAS,GAAsB,EAAE,CAAC;QAClC,YAAO,GAAY,IAAI,CAAC;QAO5B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,CAAC;YAC9D,CAAC,CAAC,YAAY,CAAC,UAAU,YAAY,IAAI,GAAG,GAAG,CAAC;YAChD,CAAC,CAAC,YAAY,CAAC;IACvB,CAAC;IAEM,EAAE,CAAC,OAAwB;QAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC;IACN,CAAC;IAEM,GAAG,CAAC,OAAwB;QAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;IAC/D,CAAC;IAEM,OAAO,CAAC,IAAQ;QACnB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACxB,OAAO;SACV;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACZ,IAAI;gBACA,EAAE,CAAC,IAAI,CAAC,CAAC;aACZ;YAAC,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;aAChC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,IAAQ;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACxB,OAAO,EAAE,CAAC;SACb;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEnC,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,MAAM,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,EAAmB,EAAE,EAAE;YACjD,IAAI;gBACA,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;aAClB;YAAC,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACpB;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,MAAM;QACT,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,QAAQ,CAAC,IAAO,EAAE,EAAmB,EAAE,GAAU;QACrD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,IAAI,aAAa,EAAE,CAAC,IAAI,wBAAwB,EAAE,GAAG,CAAC,CAAC;IAC/F,CAAC;CACJ;AAED,MAAM,UAAU,mBAAmB,CAAI,CAAY,EAAE,MAAqB;IACtE,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACnB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;gBACtB,KAAK,EAAE,CAAC;gBACR,OAAO,CAAC,CAAC,CAAC,CAAC;aACd;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/observing/event.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "3.0.10",
3
+ "version": "3.0.12",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1 +1 @@
1
- {"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../../../src/structures/queue/parallel.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAInD,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IAEtD,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuB;IAC1D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuB;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IAEzC,IAAW,eAAe,WAAiC;IAC3D,IAAW,UAAU,YAA+B;IAEpD,IAAW,iBAAiB,mDAA+C;IAC3E,IAAW,gBAAgB,mDAA8C;IAEzE,IAAW,QAAQ,gDAAsC;IAElD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;IAK/B,8DAA8D;IACvD,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI;IAkC/C,KAAK;IAgBlB,OAAO,CAAC,QAAQ;YAUF,aAAa;IAsC3B,OAAO,CAAC,cAAc,CAOpB;CACL"}
1
+ {"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../../../src/structures/queue/parallel.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAInD,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IAEtD,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuB;IAC1D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuB;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IAEpD,IAAW,eAAe,WAAiC;IAC3D,IAAW,UAAU,YAA+B;IAEpD,IAAW,iBAAiB,mDAA+C;IAC3E,IAAW,gBAAgB,mDAA8C;IAEzE,IAAW,QAAQ,gDAAsC;IAElD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;IAK/B,8DAA8D;IACvD,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI;IAkC/C,KAAK;IAgBlB,OAAO,CAAC,QAAQ;YAUF,aAAa;IA2C3B,OAAO,CAAC,cAAc,CAOpB;CACL"}
@@ -1,5 +1,6 @@
1
1
  import { createLogger } from '../../logger';
2
2
  import { Event } from '../../observing/event';
3
+ import { OneTimeLateEvent } from '../../observing/event.late';
3
4
  export class ParallelQueue {
4
5
  constructor() {
5
6
  this._queues = {};
@@ -9,7 +10,7 @@ export class ParallelQueue {
9
10
  this._logger = null;
10
11
  this._beforePriorityRun = new Event();
11
12
  this._afterPriorityRun = new Event();
12
- this._finished = new Event();
13
+ this._finished = new OneTimeLateEvent();
13
14
  this._executeLoader = async (l, priority, index) => {
14
15
  try {
15
16
  await l();
@@ -60,7 +61,7 @@ export class ParallelQueue {
60
61
  };
61
62
  }
62
63
  async start() {
63
- if (this._inProgress) {
64
+ if (this._inProgress != null) {
64
65
  return undefined;
65
66
  }
66
67
  this._inProgress = true;
@@ -84,14 +85,18 @@ export class ParallelQueue {
84
85
  async tryStartQueue() {
85
86
  let current = null;
86
87
  let iterations = 0;
88
+ let totalItems = 0;
87
89
  await this._beforePriorityRun.triggerAsync(this._currentIndex);
90
+ const MAX_ATTEMPTS = 5;
88
91
  while ((current = this._queues[this._currentIndex])?.length) {
89
- if (iterations++ > 5) {
92
+ if (iterations++ > MAX_ATTEMPTS) {
93
+ this._logger?.warn('Tried to purge queue for priority =', this._currentIndex, 'for too many times of', MAX_ATTEMPTS, '; totalItems =', totalItems, '; skipping.');
90
94
  break;
91
95
  }
92
96
  this._logger?.log('Processing priority =', this._currentIndex, '; count =', current.length);
93
97
  const items = current.slice();
94
98
  current.length = 0;
99
+ totalItems += items.length;
95
100
  await Promise.all(items.map((loader, index) => this._executeLoader(loader, this._currentIndex, index)));
96
101
  }
97
102
  if (!current?.length && iterations === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"parallel.js","sourceRoot":"","sources":["../../../src/structures/queue/parallel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parallel.js","sourceRoot":"","sources":["../../../src/structures/queue/parallel.ts"],"names":[],"mappings":"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"}