@zajno/common 2.6.2 → 2.6.4

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 (35) hide show
  1. package/cjs/async/arrays.js.map +1 -1
  2. package/cjs/localization/LocalizationManager.js +52 -28
  3. package/cjs/localization/LocalizationManager.js.map +1 -1
  4. package/cjs/localization/LocalizedValidationErrors.js.map +1 -1
  5. package/cjs/observing/event.js +4 -4
  6. package/cjs/observing/event.js.map +1 -1
  7. package/cjs/observing/event.late.js +8 -0
  8. package/cjs/observing/event.late.js.map +1 -1
  9. package/cjs/observing/timeout.js +49 -0
  10. package/cjs/observing/timeout.js.map +1 -0
  11. package/cjs/observing/timer.js +5 -0
  12. package/cjs/observing/timer.js.map +1 -1
  13. package/esm/async/arrays.js.map +1 -1
  14. package/esm/localization/LocalizationManager.js +52 -28
  15. package/esm/localization/LocalizationManager.js.map +1 -1
  16. package/esm/localization/LocalizedValidationErrors.js.map +1 -1
  17. package/esm/observing/event.js +4 -4
  18. package/esm/observing/event.js.map +1 -1
  19. package/esm/observing/event.late.js +8 -0
  20. package/esm/observing/event.late.js.map +1 -1
  21. package/esm/observing/timeout.js +45 -0
  22. package/esm/observing/timeout.js.map +1 -0
  23. package/esm/observing/timer.js +5 -0
  24. package/esm/observing/timer.js.map +1 -1
  25. package/package.json +1 -1
  26. package/tsconfig.cjs.tsbuildinfo +1 -1
  27. package/tsconfig.esm.tsbuildinfo +1 -1
  28. package/tsconfig.types.tsbuildinfo +1 -1
  29. package/types/async/arrays.d.ts +4 -4
  30. package/types/localization/LocalizationManager.d.ts +13 -12
  31. package/types/localization/LocalizedValidationErrors.d.ts +2 -2
  32. package/types/localization/abstractions.d.ts +6 -3
  33. package/types/observing/event.late.d.ts +8 -0
  34. package/types/observing/timeout.d.ts +25 -0
  35. package/types/observing/timer.d.ts +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../../src/async/arrays.ts"],"names":[],"mappings":";;AAEA,8BASC;AAED,gCASC;AAED,oCAIC;AAGD,4BAOC;AApCM,KAAK,UAAU,SAAS,CAAI,MAAwB,EAAE,SAA6E;IACtI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,EAAE,EAAE,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,UAAU,CAAI,MAAwB,EAAE,SAA6E;IACvI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,YAAY,CAAI,MAAwB,EAAE,EAAmE;IAC/H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;AACL,CAAC;AAED,wEAAwE;AACjE,KAAK,UAAU,QAAQ,CAAO,MAAwB,EAAE,EAAgE;IAC3H,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../../src/async/arrays.ts"],"names":[],"mappings":";;AAEA,8BASC;AAED,gCASC;AAED,oCAIC;AAGD,4BAOC;AApCM,KAAK,UAAU,SAAS,CAAI,MAAwB,EAAE,SAA2E;IACpI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,EAAE,EAAE,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,UAAU,CAAI,MAAwB,EAAE,SAA2E;IACrI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,YAAY,CAAI,MAAwB,EAAE,EAAiE;IAC7H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;AACL,CAAC;AAED,wEAAwE;AACjE,KAAK,UAAU,QAAQ,CAAO,MAAwB,EAAE,EAA8D;IACzH,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -4,46 +4,70 @@ exports.LocalizationManager = void 0;
4
4
  const event_js_1 = require("../observing/event.js");
5
5
  class LocalizationManager {
6
6
  _dataSource;
7
- _currentLocale = null;
7
+ // initial value is intentionally a nonsense to be updated on first useLocale call
8
+ _currentLocale = '';
8
9
  _currentStrings = null;
9
- _defaultStrings;
10
- _dependents = [];
11
10
  _localeUpdatedEvent = new event_js_1.Event();
12
- constructor(_dataSource, initialLocale, defaultLocale = null) {
11
+ _firstInit;
12
+ constructor(_dataSource, locale, fallbackStrings = null) {
13
13
  this._dataSource = _dataSource;
14
- this._defaultStrings = this.getStrings(defaultLocale || initialLocale);
15
- this.useLocale(initialLocale);
14
+ this._currentStrings = fallbackStrings;
15
+ this._firstInit = this.useLocale(locale);
16
16
  }
17
17
  get Locale() { return this._currentLocale; }
18
18
  get Current() { return this._currentStrings; }
19
+ get firstInitialized() { return this._firstInit; }
19
20
  get localeUpdated() { return this._localeUpdatedEvent.expose(); }
21
+ /**
22
+ * Updates locale synchronously, and then loads corresponding strings from datasource.
23
+ * If loader for the locale is sync, this method updates instantly and returns resolved Promise.
24
+ * Otherwise, strings will be updated asynchronously.
25
+ */
20
26
  useLocale(locale) {
21
- this._currentLocale = locale;
22
- this._currentStrings = this.getStrings(this._currentLocale) || this._defaultStrings;
23
- this.updateDependencies();
24
- this._localeUpdatedEvent.trigger(this._currentLocale);
25
- return this;
26
- }
27
- useDependency(dep, remove = false) {
28
- const i = this._dependents.indexOf(dep);
29
- if (i < 0 && !remove) {
30
- this._dependents.push(dep);
31
- this.updateDependencies();
27
+ if (locale === this._currentLocale) {
28
+ return Promise.resolve();
32
29
  }
33
- else if (i >= 0 && remove) {
34
- this._dependents.splice(i, 1);
30
+ const prevLocale = this._currentLocale;
31
+ const loader = this._dataSource[locale];
32
+ if (!loader) {
33
+ // just for throwing the same error
34
+ return this.doUpdateStrings(locale, null);
35
35
  }
36
- return this;
37
- }
38
- updateDependencies() {
39
- const { _currentLocale: locale, _currentStrings: strings } = this;
40
- if (!strings || !locale) {
41
- return;
36
+ // set locale immediately so it won't be updated twice in case instant second call
37
+ this._currentLocale = locale;
38
+ // revert locale in case of error
39
+ const tryRevert = () => {
40
+ if (this._currentLocale === locale) {
41
+ this._currentLocale = prevLocale;
42
+ }
43
+ };
44
+ if (typeof loader !== 'function') {
45
+ return this.doUpdateStrings(locale, loader, tryRevert);
42
46
  }
43
- this._dependents.forEach(d => d.updateLocale(strings, locale));
47
+ // async part is separated to make the method synchronous
48
+ return (async () => {
49
+ let result = null;
50
+ try {
51
+ result = await loader();
52
+ }
53
+ catch (e) {
54
+ tryRevert();
55
+ throw new Error(`LocalizationManager: Failed to load localization data for locale "${locale}"`, { cause: e });
56
+ }
57
+ await this.doUpdateStrings(locale, result, tryRevert);
58
+ })();
44
59
  }
45
- getStrings(locale) {
46
- return this._dataSource[locale];
60
+ doUpdateStrings(locale, strings, revert) {
61
+ if (!strings) {
62
+ revert?.();
63
+ return Promise.reject(new Error(`LocalizationManager: No localization data for locale "${locale}"`));
64
+ }
65
+ this._currentStrings = strings;
66
+ this._localeUpdatedEvent.trigger({
67
+ locale: this._currentLocale,
68
+ strings: this._currentStrings,
69
+ });
70
+ return Promise.resolve();
47
71
  }
48
72
  }
49
73
  exports.LocalizationManager = LocalizationManager;
@@ -1 +1 @@
1
- {"version":3,"file":"LocalizationManager.js","sourceRoot":"","sources":["../../../src/localization/LocalizationManager.ts"],"names":[],"mappings":";;;AAEA,oDAA8C;AAE9C,MAAa,mBAAmB;IAUP;IATb,cAAc,GAAuB,IAAI,CAAC;IAC1C,eAAe,GAAoB,IAAI,CAAC;IAE/B,eAAe,CAAW;IAC1B,WAAW,GAAqD,EAAE,CAAC;IAEnE,mBAAmB,GAAG,IAAI,gBAAK,EAAe,CAAC;IAEhE,YACqB,WAA2C,EAC5D,aAA0B,EAC1B,gBAAoC,IAAI;QAFvB,gBAAW,GAAX,WAAW,CAAgC;QAI5D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;IAED,IAAW,MAAM,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACnD,IAAW,OAAO,KAAK,OAAO,IAAI,CAAC,eAAgB,CAAC,CAAC,CAAC;IACtD,IAAW,aAAa,KAAK,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEjE,SAAS,CAAC,MAAmB;QAChC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC;QACpF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,aAAa,CAAC,GAAmD,EAAE,MAAM,GAAG,KAAK;QACpF,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,kBAAkB;QACtB,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAClE,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,CAAC;IAEO,UAAU,CAAC,MAAc;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;CACJ;AArDD,kDAqDC"}
1
+ {"version":3,"file":"LocalizationManager.js","sourceRoot":"","sources":["../../../src/localization/LocalizationManager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LocalizedValidationErrors.js","sourceRoot":"","sources":["../../../src/localization/LocalizedValidationErrors.ts"],"names":[],"mappings":";;;AAQA,MAAa,yBAAyB;IAKL;IAFrB,QAAQ,GAA4C,IAAI,CAAC;IAEjE,YAA6B,OAAmD;QAAnD,YAAO,GAAP,OAAO,CAA4C;IAAI,CAAC;IAErF,IAAW,MAAM;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEM,YAAY,CAAC,OAAiB;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;CACJ;AAlBD,8DAkBC"}
1
+ {"version":3,"file":"LocalizedValidationErrors.js","sourceRoot":"","sources":["../../../src/localization/LocalizedValidationErrors.ts"],"names":[],"mappings":";;;AAOA,MAAa,yBAAyB;IAKL;IAFrB,QAAQ,GAA4C,IAAI,CAAC;IAEjE,YAA6B,OAAmD;QAAnD,YAAO,GAAP,OAAO,CAA4C;IAAI,CAAC;IAErF,IAAW,MAAM;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEM,YAAY,CAAC,OAAiB;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;CACJ;AAlBD,8DAkBC"}
@@ -57,20 +57,20 @@ class Event {
57
57
  }
58
58
  const hh = this._handlers.slice(0);
59
59
  const errors = [];
60
- await (0, arrays_js_1.forEachAsync)(hh, async (cb) => {
60
+ await (0, arrays_js_1.forEachAsync)(hh, async (cb, index) => {
61
61
  try {
62
62
  await cb(data);
63
63
  }
64
64
  catch (err) {
65
65
  this.logError(data, cb, err);
66
66
  if (err instanceof Error) {
67
- errors.push(err);
67
+ errors[index] = err;
68
68
  }
69
69
  else if (typeof err === 'string') {
70
- errors.push(new Error(err));
70
+ errors[index] = new Error(err);
71
71
  }
72
72
  else {
73
- errors.push(new Error(`Event handler thrown an exception: ${err}`));
73
+ errors[index] = new Error(`Event handler thrown an exception: ${err}`);
74
74
  }
75
75
  }
76
76
  });
@@ -1 +1 @@
1
- {"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/observing/event.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/observing/event.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OneTimeLateEvent = void 0;
4
4
  const safe_js_1 = require("../functions/safe.js");
5
5
  const event_js_1 = require("./event.js");
6
+ /**
7
+ * One-time event that can be triggered only once, but listeners will be notified at the time of event or subscription, if it happens later.
8
+ *
9
+ * Useful for solving race conditions, when components initialization order is undetermined.
10
+ *
11
+ * Example usage: app initialization finished event, but some async components can subscribe later and be notified;
12
+ * So subscribers can be sure that the main initialization is finished.
13
+ */
6
14
  class OneTimeLateEvent extends event_js_1.Event {
7
15
  _triggeredWith = undefined;
8
16
  _triggered = false;
@@ -1 +1 @@
1
- {"version":3,"file":"event.late.js","sourceRoot":"","sources":["../../../src/observing/event.late.ts"],"names":[],"mappings":";;;AAAA,kDAAoD;AACpD,yCAAiD;AAEjD,MAAa,gBAA0B,SAAQ,gBAAQ;IAE3C,cAAc,GAAkB,SAAS,CAAC;IAC1C,UAAU,GAAG,KAAK,CAAC;IAE3B,OAAO,CAAC,IAAQ;QACZ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,IAAQ;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAa,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,EAAE,CAAC,OAAwB;QACvB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAA,sBAAY,EACR,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAC/B,CAAC;YACF,iEAAiE;QACrE,CAAC;QAED,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,qFAAqF;IACrF,KAAK,GAAG,GAAG,EAAE;QACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IACpC,CAAC,CAAC;CACL;AA3CD,4CA2CC"}
1
+ {"version":3,"file":"event.late.js","sourceRoot":"","sources":["../../../src/observing/event.late.ts"],"names":[],"mappings":";;;AAAA,kDAAoD;AACpD,yCAAiD;AAEjD;;;;;;;GAOG;AACH,MAAa,gBAA0B,SAAQ,gBAAQ;IAE3C,cAAc,GAAkB,SAAS,CAAC;IAC1C,UAAU,GAAG,KAAK,CAAC;IAE3B,OAAO,CAAC,IAAQ;QACZ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,IAAQ;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAa,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,EAAE,CAAC,OAAwB;QACvB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAA,sBAAY,EACR,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAC/B,CAAC;YACF,iEAAiE;QACrE,CAAC;QAED,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,qFAAqF;IACrF,KAAK,GAAG,GAAG,EAAE;QACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IACpC,CAAC,CAAC;CACL;AA3CD,4CA2CC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Timeout = void 0;
4
+ const timeout_js_1 = require("../async/timeout.js");
5
+ const event_js_1 = require("./event.js");
6
+ /**
7
+ * Simple one-off `setTimeout` wrapper/abstraction.
8
+ * Handle timeout via event, callback or Promise.
9
+ */
10
+ class Timeout {
11
+ _cancelCb = null;
12
+ _event = new event_js_1.Event();
13
+ get event() { return this._event.expose(); }
14
+ get isRunning() { return this._cancelCb !== null; }
15
+ async start(delay, callback) {
16
+ this.stop();
17
+ const startTime = Date.now();
18
+ try {
19
+ await (0, timeout_js_1.setTimeoutAsync)(delay, cancelCb => {
20
+ this._cancelCb = cancelCb;
21
+ });
22
+ }
23
+ finally {
24
+ this._cancelCb = null;
25
+ }
26
+ const elapsed = Date.now() - startTime;
27
+ this._event.trigger(elapsed);
28
+ if (callback) {
29
+ try {
30
+ callback();
31
+ }
32
+ catch (_err) {
33
+ // ignore
34
+ }
35
+ }
36
+ return elapsed;
37
+ }
38
+ stop() {
39
+ if (this._cancelCb) {
40
+ this._cancelCb();
41
+ this._cancelCb = null;
42
+ }
43
+ }
44
+ dispose() {
45
+ this.stop();
46
+ }
47
+ }
48
+ exports.Timeout = Timeout;
49
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../../src/observing/timeout.ts"],"names":[],"mappings":";;;AAAA,oDAAsD;AAEtD,yCAAgD;AAchD;;;GAGG;AACH,MAAa,OAAO;IAER,SAAS,GAAwB,IAAI,CAAC;IAC7B,MAAM,GAAkB,IAAI,gBAAK,EAAU,CAAC;IAE7D,IAAW,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnD,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;IAE1D,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,QAAqB;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACD,MAAM,IAAA,4BAAe,EAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;gBACpC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC9B,CAAC,CAAC,CAAC;QACP,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC;gBACD,QAAQ,EAAE,CAAC;YACf,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;gBACZ,SAAS;YACb,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,OAAO;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;CACJ;AA7CD,0BA6CC"}
@@ -2,6 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Timer = void 0;
4
4
  const event_js_1 = require("./event.js");
5
+ /**
6
+ * A timer wraps `setInterval` and provides a more convenient API.
7
+ * It will fire an event every `interval` milliseconds.
8
+ * It also may have duration which means it will stop when elapsed time is greater than or equal to the duration.
9
+ */
5
10
  class Timer {
6
11
  interval;
7
12
  _event = new event_js_1.Event();
@@ -1 +1 @@
1
- {"version":3,"file":"timer.js","sourceRoot":"","sources":["../../../src/observing/timer.ts"],"names":[],"mappings":";;;AAEA,yCAAyD;AASzD,MAAa,KAAK;IAiBO;IAhBJ,MAAM,GAAG,IAAI,gBAAK,EAAc,CAAC;IACjC,WAAW,GAAG,IAAI,gBAAK,EAAc,CAAC;IAE/C,IAAI,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IAE1B,QAAQ,GAAW,CAAC,CAAC;IACrB,KAAK,CAAmB;IAExB,SAAS,CAAmB;IAE5B,OAAO,GAA0C,IAAI,CAAC;IAE9D;;;OAGG;IACH,YAAqB,WAAW,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI;QAApC,aAAQ,GAAR,QAAQ,CAAc;QACvC,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACL,CAAC;IAED,+CAA+C;IAC/C,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,2FAA2F;IAC3F,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACpE,uDAAuD;IACvD,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,2FAA2F;IAC3F,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAE5D,4DAA4D;IAC5D,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEtD,mGAAmG;IACnG,YAAY,CAAC,QAAgB;QACzB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,EAAE,CAAC,OAAiC;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,OAAiC;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,4BAA4B;IACrB,OAAO;QACV,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;QAE5B,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;YACpB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,IAAI;SACjB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,SAAS,GAAG,KAAK,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;YAEhB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;gBACvB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC;YAEX,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEhC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzC,CAAC;QACL,CAAC,CAAC;QAEF,+BAA+B;QAC/B,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,uDAAuD;IAChD,OAAO;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;CACJ;AAhGD,sBAgGC"}
1
+ {"version":3,"file":"timer.js","sourceRoot":"","sources":["../../../src/observing/timer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../../src/async/arrays.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,MAAwB,EAAE,SAA6E;IACtI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,EAAE,EAAE,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAI,MAAwB,EAAE,SAA6E;IACvI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,MAAwB,EAAE,EAAmE;IAC/H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAO,MAAwB,EAAE,EAAgE;IAC3H,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../../src/async/arrays.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,MAAwB,EAAE,SAA2E;IACpI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,EAAE,EAAE,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAI,MAAwB,EAAE,SAA2E;IACrI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,MAAwB,EAAE,EAAiE;IAC7H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAO,MAAwB,EAAE,EAA8D;IACzH,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -1,46 +1,70 @@
1
1
  import { Event } from '../observing/event.js';
2
2
  export class LocalizationManager {
3
3
  _dataSource;
4
- _currentLocale = null;
4
+ // initial value is intentionally a nonsense to be updated on first useLocale call
5
+ _currentLocale = '';
5
6
  _currentStrings = null;
6
- _defaultStrings;
7
- _dependents = [];
8
7
  _localeUpdatedEvent = new Event();
9
- constructor(_dataSource, initialLocale, defaultLocale = null) {
8
+ _firstInit;
9
+ constructor(_dataSource, locale, fallbackStrings = null) {
10
10
  this._dataSource = _dataSource;
11
- this._defaultStrings = this.getStrings(defaultLocale || initialLocale);
12
- this.useLocale(initialLocale);
11
+ this._currentStrings = fallbackStrings;
12
+ this._firstInit = this.useLocale(locale);
13
13
  }
14
14
  get Locale() { return this._currentLocale; }
15
15
  get Current() { return this._currentStrings; }
16
+ get firstInitialized() { return this._firstInit; }
16
17
  get localeUpdated() { return this._localeUpdatedEvent.expose(); }
18
+ /**
19
+ * Updates locale synchronously, and then loads corresponding strings from datasource.
20
+ * If loader for the locale is sync, this method updates instantly and returns resolved Promise.
21
+ * Otherwise, strings will be updated asynchronously.
22
+ */
17
23
  useLocale(locale) {
18
- this._currentLocale = locale;
19
- this._currentStrings = this.getStrings(this._currentLocale) || this._defaultStrings;
20
- this.updateDependencies();
21
- this._localeUpdatedEvent.trigger(this._currentLocale);
22
- return this;
23
- }
24
- useDependency(dep, remove = false) {
25
- const i = this._dependents.indexOf(dep);
26
- if (i < 0 && !remove) {
27
- this._dependents.push(dep);
28
- this.updateDependencies();
24
+ if (locale === this._currentLocale) {
25
+ return Promise.resolve();
29
26
  }
30
- else if (i >= 0 && remove) {
31
- this._dependents.splice(i, 1);
27
+ const prevLocale = this._currentLocale;
28
+ const loader = this._dataSource[locale];
29
+ if (!loader) {
30
+ // just for throwing the same error
31
+ return this.doUpdateStrings(locale, null);
32
32
  }
33
- return this;
34
- }
35
- updateDependencies() {
36
- const { _currentLocale: locale, _currentStrings: strings } = this;
37
- if (!strings || !locale) {
38
- return;
33
+ // set locale immediately so it won't be updated twice in case instant second call
34
+ this._currentLocale = locale;
35
+ // revert locale in case of error
36
+ const tryRevert = () => {
37
+ if (this._currentLocale === locale) {
38
+ this._currentLocale = prevLocale;
39
+ }
40
+ };
41
+ if (typeof loader !== 'function') {
42
+ return this.doUpdateStrings(locale, loader, tryRevert);
39
43
  }
40
- this._dependents.forEach(d => d.updateLocale(strings, locale));
44
+ // async part is separated to make the method synchronous
45
+ return (async () => {
46
+ let result = null;
47
+ try {
48
+ result = await loader();
49
+ }
50
+ catch (e) {
51
+ tryRevert();
52
+ throw new Error(`LocalizationManager: Failed to load localization data for locale "${locale}"`, { cause: e });
53
+ }
54
+ await this.doUpdateStrings(locale, result, tryRevert);
55
+ })();
41
56
  }
42
- getStrings(locale) {
43
- return this._dataSource[locale];
57
+ doUpdateStrings(locale, strings, revert) {
58
+ if (!strings) {
59
+ revert?.();
60
+ return Promise.reject(new Error(`LocalizationManager: No localization data for locale "${locale}"`));
61
+ }
62
+ this._currentStrings = strings;
63
+ this._localeUpdatedEvent.trigger({
64
+ locale: this._currentLocale,
65
+ strings: this._currentStrings,
66
+ });
67
+ return Promise.resolve();
44
68
  }
45
69
  }
46
70
  //# sourceMappingURL=LocalizationManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LocalizationManager.js","sourceRoot":"","sources":["../../../src/localization/LocalizationManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,MAAM,OAAO,mBAAmB;IAUP;IATb,cAAc,GAAuB,IAAI,CAAC;IAC1C,eAAe,GAAoB,IAAI,CAAC;IAE/B,eAAe,CAAW;IAC1B,WAAW,GAAqD,EAAE,CAAC;IAEnE,mBAAmB,GAAG,IAAI,KAAK,EAAe,CAAC;IAEhE,YACqB,WAA2C,EAC5D,aAA0B,EAC1B,gBAAoC,IAAI;QAFvB,gBAAW,GAAX,WAAW,CAAgC;QAI5D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;IAED,IAAW,MAAM,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACnD,IAAW,OAAO,KAAK,OAAO,IAAI,CAAC,eAAgB,CAAC,CAAC,CAAC;IACtD,IAAW,aAAa,KAAK,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEjE,SAAS,CAAC,MAAmB;QAChC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC;QACpF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,aAAa,CAAC,GAAmD,EAAE,MAAM,GAAG,KAAK;QACpF,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,kBAAkB;QACtB,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAClE,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,CAAC;IAEO,UAAU,CAAC,MAAc;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;CACJ"}
1
+ {"version":3,"file":"LocalizationManager.js","sourceRoot":"","sources":["../../../src/localization/LocalizationManager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LocalizedValidationErrors.js","sourceRoot":"","sources":["../../../src/localization/LocalizedValidationErrors.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,yBAAyB;IAKL;IAFrB,QAAQ,GAA4C,IAAI,CAAC;IAEjE,YAA6B,OAAmD;QAAnD,YAAO,GAAP,OAAO,CAA4C;IAAI,CAAC;IAErF,IAAW,MAAM;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEM,YAAY,CAAC,OAAiB;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;CACJ"}
1
+ {"version":3,"file":"LocalizedValidationErrors.js","sourceRoot":"","sources":["../../../src/localization/LocalizedValidationErrors.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,yBAAyB;IAKL;IAFrB,QAAQ,GAA4C,IAAI,CAAC;IAEjE,YAA6B,OAAmD;QAAnD,YAAO,GAAP,OAAO,CAA4C;IAAI,CAAC;IAErF,IAAW,MAAM;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEM,YAAY,CAAC,OAAiB;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;CACJ"}
@@ -53,20 +53,20 @@ export class Event {
53
53
  }
54
54
  const hh = this._handlers.slice(0);
55
55
  const errors = [];
56
- await forEachAsync(hh, async (cb) => {
56
+ await forEachAsync(hh, async (cb, index) => {
57
57
  try {
58
58
  await cb(data);
59
59
  }
60
60
  catch (err) {
61
61
  this.logError(data, cb, err);
62
62
  if (err instanceof Error) {
63
- errors.push(err);
63
+ errors[index] = err;
64
64
  }
65
65
  else if (typeof err === 'string') {
66
- errors.push(new Error(err));
66
+ errors[index] = new Error(err);
67
67
  }
68
68
  else {
69
- errors.push(new Error(`Event handler thrown an exception: ${err}`));
69
+ errors[index] = new Error(`Event handler thrown an exception: ${err}`);
70
70
  }
71
71
  }
72
72
  });
@@ -1 +1 @@
1
- {"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/observing/event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAW,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAUpD,MAAM,OAAO,KAAK;IACN,SAAS,GAAsB,EAAE,CAAC;IAClC,OAAO,GAAmB,IAAI,CAAC;IAEvC,YAAY,iBAAiB,GAAG,IAAI;QAChC,IAAI,iBAAiB,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IAED,IAAW,OAAO,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;IAKrD,UAAU,CAAC,YAAiD;QAC/D,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,YAAY,KAAK,QAAQ;YAC3C,CAAC,CAAC,YAAY,CAAC,UAAU,YAAY,IAAI,GAAG,GAAG,CAAC;YAChD,CAAC,CAAC,YAAY,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,2BAA2B;IACpB,aAAa,GAAG,GAAG,EAAE;QACxB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACxB,CAAC,CAAC;IAEK,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,CAAC;YACzB,OAAO;QACX,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACZ,IAAI,CAAC;gBACD,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACjC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,IAAQ;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACd,CAAC;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,CAAC;gBACD,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC7B,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;qBAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,sCAAsC,GAAU,EAAE,CAAC,CAAC,CAAC;gBAC/E,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,MAAM;QACT,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,QAAQ,CAAC,IAA0B,EAAE,EAAmB,EAAE,GAAY;QAC1E,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,OAAO,IAAI,aAAa,EAAE,CAAC,IAAI,wBAAwB,EAAE,GAAG,CAAC,CAAC;IAChG,CAAC;CACJ;AAED,MAAM,UAAU,mBAAmB,CAAI,CAAY,EAAE,MAAiC;IAClF,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;QAC1C,IAAI,WAAW,GAAuB,IAAI,CAAC;QAC3C,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACnB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvB,6FAA6F;gBAC7F,uDAAuD;gBACvD,WAAW,EAAE,EAAE,CAAC;gBAChB,OAAO,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/observing/event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAW,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAUpD,MAAM,OAAO,KAAK;IACN,SAAS,GAAsB,EAAE,CAAC;IAClC,OAAO,GAAmB,IAAI,CAAC;IAEvC,YAAY,iBAAiB,GAAG,IAAI;QAChC,IAAI,iBAAiB,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IAED,IAAW,OAAO,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;IAKrD,UAAU,CAAC,YAAiD;QAC/D,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,YAAY,KAAK,QAAQ;YAC3C,CAAC,CAAC,YAAY,CAAC,UAAU,YAAY,IAAI,GAAG,GAAG,CAAC;YAChD,CAAC,CAAC,YAAY,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,2BAA2B;IACpB,aAAa,GAAG,GAAG,EAAE;QACxB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACxB,CAAC,CAAC;IAEK,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,CAAC;YACzB,OAAO;QACX,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACZ,IAAI,CAAC;gBACD,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACjC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,IAAQ;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACd,CAAC;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,KAAa,EAAE,EAAE;YAChE,IAAI,CAAC;gBACD,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC7B,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;oBACvB,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;gBACxB,CAAC;qBAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACjC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,sCAAsC,GAAU,EAAE,CAAC,CAAC;gBAClF,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,MAAM;QACT,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,QAAQ,CAAC,IAA0B,EAAE,EAAmB,EAAE,GAAY;QAC1E,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,OAAO,IAAI,aAAa,EAAE,CAAC,IAAI,wBAAwB,EAAE,GAAG,CAAC,CAAC;IAChG,CAAC;CACJ;AAED,MAAM,UAAU,mBAAmB,CAAI,CAAY,EAAE,MAAiC;IAClF,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;QAC1C,IAAI,WAAW,GAAuB,IAAI,CAAC;QAC3C,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACnB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvB,6FAA6F;gBAC7F,uDAAuD;gBACvD,WAAW,EAAE,EAAE,CAAC;gBAChB,OAAO,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,5 +1,13 @@
1
1
  import { catchPromise } from '../functions/safe.js';
2
2
  import { Event } from './event.js';
3
+ /**
4
+ * One-time event that can be triggered only once, but listeners will be notified at the time of event or subscription, if it happens later.
5
+ *
6
+ * Useful for solving race conditions, when components initialization order is undetermined.
7
+ *
8
+ * Example usage: app initialization finished event, but some async components can subscribe later and be notified;
9
+ * So subscribers can be sure that the main initialization is finished.
10
+ */
3
11
  export class OneTimeLateEvent extends Event {
4
12
  _triggeredWith = undefined;
5
13
  _triggered = false;
@@ -1 +1 @@
1
- {"version":3,"file":"event.late.js","sourceRoot":"","sources":["../../../src/observing/event.late.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAgB,MAAM,YAAY,CAAC;AAEjD,MAAM,OAAO,gBAA0B,SAAQ,KAAQ;IAE3C,cAAc,GAAkB,SAAS,CAAC;IAC1C,UAAU,GAAG,KAAK,CAAC;IAE3B,OAAO,CAAC,IAAQ;QACZ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,IAAQ;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAa,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,EAAE,CAAC,OAAwB;QACvB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,YAAY,CACR,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAC/B,CAAC;YACF,iEAAiE;QACrE,CAAC;QAED,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,qFAAqF;IACrF,KAAK,GAAG,GAAG,EAAE;QACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IACpC,CAAC,CAAC;CACL"}
1
+ {"version":3,"file":"event.late.js","sourceRoot":"","sources":["../../../src/observing/event.late.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAgB,MAAM,YAAY,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,OAAO,gBAA0B,SAAQ,KAAQ;IAE3C,cAAc,GAAkB,SAAS,CAAC;IAC1C,UAAU,GAAG,KAAK,CAAC;IAE3B,OAAO,CAAC,IAAQ;QACZ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,IAAQ;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAa,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,EAAE,CAAC,OAAwB;QACvB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,YAAY,CACR,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAC/B,CAAC;YACF,iEAAiE;QACrE,CAAC;QAED,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,qFAAqF;IACrF,KAAK,GAAG,GAAG,EAAE;QACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IACpC,CAAC,CAAC;CACL"}
@@ -0,0 +1,45 @@
1
+ import { setTimeoutAsync } from '../async/timeout.js';
2
+ import { Event } from './event.js';
3
+ /**
4
+ * Simple one-off `setTimeout` wrapper/abstraction.
5
+ * Handle timeout via event, callback or Promise.
6
+ */
7
+ export class Timeout {
8
+ _cancelCb = null;
9
+ _event = new Event();
10
+ get event() { return this._event.expose(); }
11
+ get isRunning() { return this._cancelCb !== null; }
12
+ async start(delay, callback) {
13
+ this.stop();
14
+ const startTime = Date.now();
15
+ try {
16
+ await setTimeoutAsync(delay, cancelCb => {
17
+ this._cancelCb = cancelCb;
18
+ });
19
+ }
20
+ finally {
21
+ this._cancelCb = null;
22
+ }
23
+ const elapsed = Date.now() - startTime;
24
+ this._event.trigger(elapsed);
25
+ if (callback) {
26
+ try {
27
+ callback();
28
+ }
29
+ catch (_err) {
30
+ // ignore
31
+ }
32
+ }
33
+ return elapsed;
34
+ }
35
+ stop() {
36
+ if (this._cancelCb) {
37
+ this._cancelCb();
38
+ this._cancelCb = null;
39
+ }
40
+ }
41
+ dispose() {
42
+ this.stop();
43
+ }
44
+ }
45
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../../src/observing/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAe,MAAM,YAAY,CAAC;AAchD;;;GAGG;AACH,MAAM,OAAO,OAAO;IAER,SAAS,GAAwB,IAAI,CAAC;IAC7B,MAAM,GAAkB,IAAI,KAAK,EAAU,CAAC;IAE7D,IAAW,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnD,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;IAE1D,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,QAAqB;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACD,MAAM,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;gBACpC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC9B,CAAC,CAAC,CAAC;QACP,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC;gBACD,QAAQ,EAAE,CAAC;YACf,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;gBACZ,SAAS;YACb,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,OAAO;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;CACJ"}
@@ -1,4 +1,9 @@
1
1
  import { Event } from './event.js';
2
+ /**
3
+ * A timer wraps `setInterval` and provides a more convenient API.
4
+ * It will fire an event every `interval` milliseconds.
5
+ * It also may have duration which means it will stop when elapsed time is greater than or equal to the duration.
6
+ */
2
7
  export class Timer {
3
8
  interval;
4
9
  _event = new Event();
@@ -1 +1 @@
1
- {"version":3,"file":"timer.js","sourceRoot":"","sources":["../../../src/observing/timer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"timer.js","sourceRoot":"","sources":["../../../src/observing/timer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "2.6.2",
3
+ "version": "2.6.4",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "private": false,
6
6
  "type": "module",
@@ -1 +1 @@
1
- {"root":["../src/api/builder.ts","../src/api/call.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/helpers.ts","../src/api/index.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/processor.ts","../src/api/register.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/functions/throttle.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/abstractions.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/file.ts","../src/logger/index.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/proxy.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/throttledevent.ts","../src/observing/timer.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.ts","../src/structures/path/utils.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
1
+ {"root":["../src/api/builder.ts","../src/api/call.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/helpers.ts","../src/api/index.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/processor.ts","../src/api/register.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/functions/throttle.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/abstractions.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/file.ts","../src/logger/index.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/proxy.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/throttledevent.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.ts","../src/structures/path/utils.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
@@ -1 +1 @@
1
- {"root":["../src/api/builder.ts","../src/api/call.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/helpers.ts","../src/api/index.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/processor.ts","../src/api/register.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/functions/throttle.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/abstractions.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/file.ts","../src/logger/index.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/proxy.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/throttledevent.ts","../src/observing/timer.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.ts","../src/structures/path/utils.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
1
+ {"root":["../src/api/builder.ts","../src/api/call.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/helpers.ts","../src/api/index.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/processor.ts","../src/api/register.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/functions/throttle.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/abstractions.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/file.ts","../src/logger/index.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/proxy.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/throttledevent.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.ts","../src/structures/path/utils.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
@@ -1 +1 @@
1
- {"root":["../src/api/builder.ts","../src/api/call.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/helpers.ts","../src/api/index.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/processor.ts","../src/api/register.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/functions/throttle.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/abstractions.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/file.ts","../src/logger/index.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/proxy.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/throttledevent.ts","../src/observing/timer.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.ts","../src/structures/path/utils.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
1
+ {"root":["../src/api/builder.ts","../src/api/call.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/helpers.ts","../src/api/index.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/processor.ts","../src/api/register.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/functions/throttle.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/abstractions.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/file.ts","../src/logger/index.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/proxy.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/throttledevent.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.ts","../src/structures/path/utils.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
@@ -1,4 +1,4 @@
1
- export declare function someAsync<T>(target: ReadonlyArray<T>, condition: (v: T, index?: number, arr?: ReadonlyArray<T>) => Promise<boolean>): Promise<boolean>;
2
- export declare function everyAsync<T>(target: ReadonlyArray<T>, condition: (v: T, index?: number, arr?: ReadonlyArray<T>) => Promise<boolean>): Promise<boolean>;
3
- export declare function forEachAsync<T>(target: ReadonlyArray<T>, cb: (v: T, index?: number, arr?: ReadonlyArray<T>) => Promise<void>): Promise<void>;
4
- export declare function mapAsync<T, R>(target: ReadonlyArray<T>, cb: (v: T, index?: number, arr?: ReadonlyArray<T>) => Promise<R>): Promise<R[]>;
1
+ export declare function someAsync<T>(target: ReadonlyArray<T>, condition: (v: T, index: number, arr: ReadonlyArray<T>) => Promise<boolean>): Promise<boolean>;
2
+ export declare function everyAsync<T>(target: ReadonlyArray<T>, condition: (v: T, index: number, arr: ReadonlyArray<T>) => Promise<boolean>): Promise<boolean>;
3
+ export declare function forEachAsync<T>(target: ReadonlyArray<T>, cb: (v: T, index: number, arr: ReadonlyArray<T>) => Promise<void>): Promise<void>;
4
+ export declare function mapAsync<T, R>(target: ReadonlyArray<T>, cb: (v: T, index: number, arr: ReadonlyArray<T>) => Promise<R>): Promise<R[]>;
@@ -1,20 +1,21 @@
1
- import type { ILocalization, ILocalizationDependency } from './abstractions.js';
1
+ import type { ILocalization, LocaleStrings, StringsDataSource } from './abstractions.js';
2
2
  import type { AnyObject } from '../types/misc.js';
3
3
  export declare class LocalizationManager<TLocaleType extends string, TStrings extends AnyObject> implements ILocalization<TStrings> {
4
4
  private readonly _dataSource;
5
5
  private _currentLocale;
6
6
  private _currentStrings;
7
- private readonly _defaultStrings;
8
- private readonly _dependents;
9
7
  private readonly _localeUpdatedEvent;
10
- constructor(_dataSource: {
11
- [locale: string]: TStrings;
12
- }, initialLocale: TLocaleType, defaultLocale?: TLocaleType | null);
13
- get Locale(): TLocaleType | null;
8
+ private readonly _firstInit;
9
+ constructor(_dataSource: StringsDataSource<TLocaleType, TStrings>, locale: TLocaleType, fallbackStrings?: TStrings | null);
10
+ get Locale(): TLocaleType;
14
11
  get Current(): TStrings;
15
- get localeUpdated(): import("../observing/event.js").IEvent<TLocaleType>;
16
- useLocale(locale: TLocaleType): this;
17
- useDependency(dep: ILocalizationDependency<TStrings, TLocaleType>, remove?: boolean): this;
18
- private updateDependencies;
19
- private getStrings;
12
+ get firstInitialized(): Promise<void>;
13
+ get localeUpdated(): import("../observing/event.js").IEvent<LocaleStrings<TLocaleType, TStrings>>;
14
+ /**
15
+ * Updates locale synchronously, and then loads corresponding strings from datasource.
16
+ * If loader for the locale is sync, this method updates instantly and returns resolved Promise.
17
+ * Otherwise, strings will be updated asynchronously.
18
+ */
19
+ useLocale(locale: TLocaleType): Promise<void>;
20
+ protected doUpdateStrings(locale: TLocaleType, strings: TStrings | null, revert?: () => void): Promise<void>;
20
21
  }
@@ -1,6 +1,6 @@
1
- import { IErrorsLocalization, ILocalizationDependency, ValidationErrorsFactory } from './abstractions.js';
1
+ import { IErrorsLocalization, ValidationErrorsFactory } from './abstractions.js';
2
2
  import type { AnyObject } from '../types/misc.js';
3
- export declare class LocalizedValidationErrors<TStrings extends AnyObject, TErrors extends string | number> implements IErrorsLocalization<TErrors>, ILocalizationDependency<TStrings> {
3
+ export declare class LocalizedValidationErrors<TStrings extends AnyObject, TErrors extends string | number> implements IErrorsLocalization<TErrors> {
4
4
  private readonly factory;
5
5
  private _strings;
6
6
  constructor(factory: ValidationErrorsFactory<TStrings, TErrors>);
@@ -5,8 +5,11 @@ export interface ILocalization<TStrings extends AnyObject> {
5
5
  export interface IErrorsLocalization<TErrors extends string | number> {
6
6
  readonly Errors: ValidationErrorsStrings<TErrors>;
7
7
  }
8
- export interface ILocalizationDependency<TStrings extends AnyObject, TLocale extends string = any> {
9
- updateLocale(strings: TStrings, locale?: TLocale): void;
10
- }
8
+ export type StringsLoader<TStrings> = TStrings | (() => Promise<TStrings>);
9
+ export type StringsDataSource<TLocale extends string, TStrings extends AnyObject> = Record<TLocale, StringsLoader<TStrings>>;
10
+ export type LocaleStrings<TLocale extends string, TStrings extends AnyObject> = {
11
+ locale: TLocale;
12
+ strings: TStrings;
13
+ };
11
14
  export type ValidationErrorsStrings<T extends string | number> = Partial<Record<T, string>>;
12
15
  export type ValidationErrorsFactory<TStrings extends AnyObject, TErrors extends string | number> = (strings: TStrings) => ValidationErrorsStrings<TErrors>;
@@ -1,4 +1,12 @@
1
1
  import { Event, EventHandler } from './event.js';
2
+ /**
3
+ * One-time event that can be triggered only once, but listeners will be notified at the time of event or subscription, if it happens later.
4
+ *
5
+ * Useful for solving race conditions, when components initialization order is undetermined.
6
+ *
7
+ * Example usage: app initialization finished event, but some async components can subscribe later and be notified;
8
+ * So subscribers can be sure that the main initialization is finished.
9
+ */
2
10
  export declare class OneTimeLateEvent<T = any> extends Event<T> {
3
11
  private _triggeredWith;
4
12
  private _triggered;
@@ -0,0 +1,25 @@
1
+ import type { IDisposable } from '../functions/disposer.js';
2
+ import { type IEvent } from './event.js';
3
+ export interface ITimeout extends IDisposable {
4
+ /** Fired when the timeout has elapsed. Passes actual elapsed milliseconds. */
5
+ readonly event: IEvent<number>;
6
+ /** Whether the timeout is running */
7
+ readonly isRunning: boolean;
8
+ /** Starts the timeout */
9
+ start(delay: number, callback?: () => void): Promise<number>;
10
+ /** Stops the timeout, event will not be triggered. */
11
+ stop(): void;
12
+ }
13
+ /**
14
+ * Simple one-off `setTimeout` wrapper/abstraction.
15
+ * Handle timeout via event, callback or Promise.
16
+ */
17
+ export declare class Timeout implements ITimeout {
18
+ private _cancelCb;
19
+ private readonly _event;
20
+ get event(): IEvent<number>;
21
+ get isRunning(): boolean;
22
+ start(delay: number, callback?: () => void): Promise<number>;
23
+ stop(): void;
24
+ dispose(): void;
25
+ }
@@ -6,6 +6,11 @@ export type TimerState = {
6
6
  left: number;
7
7
  now: number;
8
8
  };
9
+ /**
10
+ * A timer wraps `setInterval` and provides a more convenient API.
11
+ * It will fire an event every `interval` milliseconds.
12
+ * It also may have duration which means it will stop when elapsed time is greater than or equal to the duration.
13
+ */
9
14
  export declare class Timer implements IDisposable, IEvent<TimerState> {
10
15
  readonly interval: number;
11
16
  private readonly _event;