@zajno/common 2.4.0 → 2.4.2

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 (43) hide show
  1. package/README.md +63 -19
  2. package/cjs/async/manualPromise.js +17 -0
  3. package/cjs/async/manualPromise.js.map +1 -0
  4. package/cjs/async/misc.js +2 -14
  5. package/cjs/async/misc.js.map +1 -1
  6. package/cjs/functions/assert.js +2 -2
  7. package/cjs/functions/assert.js.map +1 -1
  8. package/cjs/functions/safe.js +8 -0
  9. package/cjs/functions/safe.js.map +1 -1
  10. package/cjs/math/object/ops.js +4 -1
  11. package/cjs/math/object/ops.js.map +1 -1
  12. package/cjs/models/Loading.js +72 -0
  13. package/cjs/models/Loading.js.map +1 -0
  14. package/cjs/models/LogicModel.js +120 -0
  15. package/cjs/models/LogicModel.js.map +1 -0
  16. package/cjs/models/Model.js +1 -1
  17. package/cjs/models/Model.js.map +1 -1
  18. package/esm/async/manualPromise.js +14 -0
  19. package/esm/async/manualPromise.js.map +1 -0
  20. package/esm/async/misc.js +1 -13
  21. package/esm/async/misc.js.map +1 -1
  22. package/esm/functions/assert.js +2 -2
  23. package/esm/functions/assert.js.map +1 -1
  24. package/esm/functions/safe.js +7 -0
  25. package/esm/functions/safe.js.map +1 -1
  26. package/esm/math/object/ops.js +4 -1
  27. package/esm/math/object/ops.js.map +1 -1
  28. package/esm/models/Loading.js +67 -0
  29. package/esm/models/Loading.js.map +1 -0
  30. package/esm/models/LogicModel.js +116 -0
  31. package/esm/models/LogicModel.js.map +1 -0
  32. package/esm/models/Model.js +1 -1
  33. package/esm/models/Model.js.map +1 -1
  34. package/package.json +1 -1
  35. package/tsconfig.cjs.tsbuildinfo +1 -1
  36. package/tsconfig.esm.tsbuildinfo +1 -1
  37. package/tsconfig.types.tsbuildinfo +1 -1
  38. package/types/async/manualPromise.d.ts +6 -0
  39. package/types/async/misc.d.ts +1 -6
  40. package/types/functions/safe.d.ts +5 -1
  41. package/types/models/Loading.d.ts +31 -0
  42. package/types/models/LogicModel.d.ts +34 -0
  43. package/types/models/Model.d.ts +2 -2
package/README.md CHANGED
@@ -4,26 +4,78 @@
4
4
 
5
5
  This is a library with a useful utils/helpers to share across our projects.
6
6
 
7
- Doesn't pretend to be useful in outer world because probably everything is invented, tested and released to NPM already.
8
-
9
7
  The motivation to have this – just to control and organize some shared code that we ever wanted to write by ourselves.
10
8
 
9
+ ## Contents
10
+
11
+ * [API](./src/api/index.ts): a middle-layer REST API endpoints definition helpers, to have communication described declarative & type-safely.
12
+
13
+ * [Async](./src/async)
14
+ * [Timeouts](./src/async/timeout.ts): a promisified `setTimeout` - `setTimeoutAsync`; `timeoutPromise` - a promise that rejects after a timeout;
15
+ * [ManualPromise](./src/async/manualPromise.ts): a promise that can be resolved/rejected manually;
16
+ * [Array extensions](./src/async/arrays.ts): `someAsync`, `everyAsync`, `forEachAsync`, `mapAsync` (previously were Array.prototype extensions);
17
+
18
+ * [Date extensions & helpers](./src/dates/index.ts): operations with granularity, date formatting etc;
19
+ * [Period](./src/dates/period.ts): a structure to work with date periods e.g. 1 day, 5 years etc;
20
+ * [CalendarIndex](./src/dates/calendarIndex.ts): a structure to work with day, week, month indexes;
21
+ * [Shift dates](./src/dates/shift.ts): shift dates by period, get start/end of with granularity etc;
22
+
23
+ * [Fields](./src/fields/index.ts): work with object fields: skip/filter falsy, transfer falsy/changed; merge arrays of objects.
24
+
25
+ * [Functions](./src/functions): [`assert`](./src/functions/assert.ts), [`IDisposable`/`Disposable`/`Disposer`](./src/functions/disposer.ts), [`ThrottleAction`/`ThrottleProcessor`](./src/functions/throttle.ts).
26
+
27
+ * [Lazy](./src/lazy): [`Lazy`](./src/lazy/singleton.ts) (sync), [`LazyPromise`](./src/lazy/promise.ts).
28
+
29
+ * [Logger interface & console implementation](./src/logger/index.ts): create instance of logger, inject your own implementation or globally enable/disable logger instances by calling `setMode`.
30
+
31
+ * [Math](./src/math/index.ts)
32
+ * [General helpers](./src/math/calc.ts): `clamp`, `round`, `random`, intersections helpers and more;
33
+ * [Array helpers]('./src/math/arrays.ts'): compare, max, min, average, count, normalize, shuffle, etc;
34
+ * [Math Objects helpers](./src/math/object/index.ts): do arithmetical operations on objects with number fields;
35
+ * [Distribution](./src/math/distribution.ts): simple distribution by a type;
36
+
37
+ * [Models](./src/models/): helpers for moving on towards OOP world.
38
+ - [`EntityWithStatus`](./src/models/EntityWithStatus.ts): a base class for entities with a string status, keeps history of status changes;
39
+ - [`Model`](./src/models/Model.ts): a simple base class (box) for `value`s setter/getter;
40
+ - [`LoadingModel`](./src/models/Loading.ts): aggregates multiple loading flags into one;
41
+ - [`LogicModel`](./src/models/LogicModel.ts): a helper base class which helps to run async logic with `PromiseExtended` (see below);
42
+ - various interfaces and helpers for models.
11
43
 
12
- * [Math and Array extensions](./src/math/index.ts)
44
+ * [Observing](./src/observing)
45
+ - [`Event`](./src/observing/event.ts): a simple event emitter;
46
+ - [`OneTimeLateEvent`](./src/observing/event.late.ts): an event emitter that can be listened to after it's been emitted;
47
+ - Others: `ThrottledEvent`, `Timer`, `ProgressTracker` and more.
13
48
 
14
- * [Date extensions & helpers](./src/dates/index.ts)
49
+ * [Storage](./src/storage/index.ts): abstractions + helpers for sync/async storages;
15
50
 
16
- * [Logger interface & console implementation](./src/logger/index.ts) – create instance of logger, inject your own implementation or globally enable/disable logger instances by callling `setMode`
51
+ * [Structures](./src/structures)
52
+ - [`Path`](./src/structures/path/index.ts): a helper to build (almost) type-safe dynamic paths (useful for routing definitions);
53
+ - [`Queues`](./src/structures/queue/): [`ParallelQueue`](./src/structures/queue/parallel.ts) (helps run & track multiple prioritized async tasks), [`TasksQueue`](./src/structures/queue/tasks.ts) (a simple queue for async tasks with a limit for concurrent tasks);
54
+ - [`PromiseCache`](./src/structures/promiseCache.ts): a cache for Promise'd values; supports TTL, invalidation, custom keys, deferred getters and more;
55
+ - [`PromiseExtended`](./src/structures/promiseExtended.ts): a Promise wrapper which never rejects but provides `onSuccess` and `onError` callbacks;
56
+ - [`PromiseProxy`](./src/structures/promiseProxy.ts): a Promise wrapper to mimic (fake) a resolved value's properties until it's actually resolved;
57
+ - [`Enum helpers`](./src/structures/helpers/enum.ts): `EnumHelper`, `EnumStringHelper`, `EnumBitwiseHelper`;
58
+ - Misc: [`Pool`](./src/structures/pool.ts), [`LinkedList`](./src/structures/linkedList.ts), [`TempoCache`](./src/structures/tempoCache.ts) (invalidates sync values after a timeout), [`ExpireTracker`](./src/structures/expire.ts), [`NamesHelper`](./src/structures/helpers/name.ts) and more.
17
59
 
18
- * Cache, EnumHelper, Event, Lazy, Pool, Throttle, Disposer
60
+ * [`Types`](./src/types/index.ts): [`DeepReadonly`, `DeepMutable`, `DeepPartial`, `DeepRequired` etc.](./src/types/deep.ts), [`Getter`](./src/types/getter.ts), [`Ident`](./src/types/ident.ts) and various others.
19
61
 
20
- ...and other more or less noteworthy stuff.
62
+ * [`Validation`](./src/validation/index.ts): abstractions & helpers for validation.
21
63
 
22
- The source code is written in TypeScript, and intended to be used in TS project, so no built JS sources included.
64
+ ### Tests
65
+
66
+ Tests are written with Vitest, coverage is (kinda) tracked with Coveralls. Test coverage is mainly dictated by real-world usage in the projects.
23
67
 
24
68
  ## Usage
25
69
 
26
- It can be used a git submodule if you're brave enough, but it's possible to use it as npm package (kinda) as well. In your project:
70
+ Sources are in TypeScript, shipped as CJS & ESM modules targeted on `ES2022`.
71
+
72
+ ### Distribution
73
+
74
+ There's no barrel exports, so you can import each module separately. Each `index.ts` file is outlined in generated `package.json`'s `exports` field. Might require `tslib` as a peer dependency.
75
+
76
+ The package does't really use `semver` for now, breaking changes to existing modules can be introduced in minor versions, so it's recommended to use `~` in your `package.json`'s dependencies. New modules can be introduced in minor & patch versions.
77
+
78
+ ### Install
27
79
 
28
80
  1. Install from NPM:
29
81
 
@@ -31,21 +83,13 @@ It can be used a git submodule if you're brave enough, but it's possible to use
31
83
  npm i @zajno/common
32
84
  ```
33
85
 
34
- [`tslib`](https://www.npmjs.com/package/tslib) is the only peer dependency.
35
-
36
86
  2. In your code, use each module separately:
37
87
 
38
88
  ```typescript
39
89
  import logger, { ILogger } from '@zajno/common/logger';
40
90
  ```
41
91
 
42
- ### Note on imports in v1
43
-
44
- Previously one had to import from like `@zajno/common/lib/logger` since compiling had been doing at `postinstall` time so Typescript with its config was a peer dependency. Currently it's not the case and this packages is provided with build artifacts (js + d.ts + source maps); so no need to include `/lib` part in imports anymore.
45
-
46
- Although install time has been decreased, the main downside is that sources are built being targeted on [CommonJS & ES2019+](./tsconfig.json#L13-L14) (for now!). This might be not always suitable and/or optimal for all build setups.
47
-
48
- ## Local development
92
+ ### Local development (a guide to Yalc)
49
93
 
50
94
  If you plan to update the sources while using it in your project, we'd recommend using [`yalc`](https://www.npmjs.com/package/yalc). It does some magic to allow both using it in your project and updating it.
51
95
 
@@ -56,7 +100,7 @@ The flow will look like the following. [1] – operations made on this project,
56
100
  3. `[1]` run `yalc publish --private`
57
101
  4. `[2]` run `yalc add @zajno/common && npm i`
58
102
  5. `[1]` make changes in local copy, run tests etc.
59
- 6. `[1]` run some magic: `npm run push:local` – this should deliver your updated copy to local project(s) [2]
103
+ 6. `[1]` run some magic: `npm run publish:local` – this should deliver your updated copy to local project(s) [2]
60
104
  7. `[2]` notice the changes in your project, repeat 5-7 until you're done
61
105
  8. `[2]` to cleanup, run `yalc remove @zajno/common` or just `yalc remove --all`
62
106
  9. `[1]` push your changes after making sure it's OK, we'd say thank you for a PR!
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createManualPromise = createManualPromise;
4
+ function createManualPromise() {
5
+ let resolve;
6
+ let reject;
7
+ const promise = new Promise((_resolve, _reject) => {
8
+ resolve = _resolve;
9
+ reject = _reject;
10
+ });
11
+ return {
12
+ get promise() { return promise; },
13
+ get resolve() { return resolve; },
14
+ get reject() { return reject; },
15
+ };
16
+ }
17
+ //# sourceMappingURL=manualPromise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manualPromise.js","sourceRoot":"","sources":["../../../src/async/manualPromise.ts"],"names":[],"mappings":";;AAOA,kDAeC;AAfD,SAAgB,mBAAmB;IAE/B,IAAI,OAAyB,CAAC;IAC9B,IAAI,MAA4B,CAAC;IAEjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QACjD,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,OAAO,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,IAAI,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC;KAClC,CAAC;AACN,CAAC"}
package/cjs/async/misc.js CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OptAwait = OptAwait;
4
4
  exports.chainPromises = chainPromises;
5
- exports.createManualPromise = createManualPromise;
5
+ const tslib_1 = require("tslib");
6
6
  async function OptAwait(cb, doAwait) {
7
7
  return cb && (doAwait ? (await cb()) : cb());
8
8
  }
@@ -10,17 +10,5 @@ async function chainPromises(...promises) {
10
10
  const applyAsync = (acc, val) => acc.then(val);
11
11
  return promises.reduce(applyAsync, Promise.resolve());
12
12
  }
13
- function createManualPromise() {
14
- let resolve;
15
- let reject;
16
- const promise = new Promise((_resolve, _reject) => {
17
- resolve = _resolve;
18
- reject = _reject;
19
- });
20
- return {
21
- get promise() { return promise; },
22
- get resolve() { return resolve; },
23
- get reject() { return reject; },
24
- };
25
- }
13
+ tslib_1.__exportStar(require("./manualPromise"), exports);
26
14
  //# sourceMappingURL=misc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/async/misc.ts"],"names":[],"mappings":";;AACA,4BAEC;AAED,sCAKC;AAQD,kDAeC;AAhCM,KAAK,UAAU,QAAQ,CAAI,EAA0B,EAAE,OAAgB;IAC1E,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,GAAG,QAAiC;IAEpE,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,GAAwB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnF,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1D,CAAC;AAQD,SAAgB,mBAAmB;IAE/B,IAAI,OAAyB,CAAC;IAC9B,IAAI,MAA4B,CAAC;IAEjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QACjD,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,OAAO,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,IAAI,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC;KAClC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/async/misc.ts"],"names":[],"mappings":";;AACA,4BAEC;AAED,sCAKC;;AATM,KAAK,UAAU,QAAQ,CAAI,EAA0B,EAAE,OAAgB;IAC1E,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,GAAG,QAAiC;IAEpE,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,GAAwB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnF,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,0DAAgC"}
@@ -8,9 +8,9 @@ function assert(condition, error, objectToLog) {
8
8
  if (condition) {
9
9
  return;
10
10
  }
11
- const e = types_1.Getter.getValue(error);
11
+ const e = types_1.Getter.toValue(error);
12
12
  if (objectToLog) {
13
- logger_1.default.error('Assertion failed:', e, types_1.Getter.getValue(objectToLog));
13
+ logger_1.default.error('Assertion failed:', e, types_1.Getter.toValue(objectToLog));
14
14
  }
15
15
  if (typeof e === 'string') {
16
16
  throw new Error(e);
@@ -1 +1 @@
1
- {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../src/functions/assert.ts"],"names":[],"mappings":";;AAGA,wBAeC;;AAlBD,oCAAkC;AAClC,+DAA+B;AAE/B,SAAgB,MAAM,CAAC,SAAkB,EAAE,KAA6B,EAAE,WAAyB;IAC/F,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO;IACX,CAAC;IAED,MAAM,CAAC,GAAG,cAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,WAAW,EAAE,CAAC;QACd,gBAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,EAAE,cAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../src/functions/assert.ts"],"names":[],"mappings":";;AAGA,wBAeC;;AAlBD,oCAAkC;AAClC,+DAA+B;AAE/B,SAAgB,MAAM,CAAC,SAAkB,EAAE,KAA6B,EAAE,WAAyB;IAC/F,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO;IACX,CAAC;IAED,MAAM,CAAC,GAAG,cAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,WAAW,EAAE,CAAC;QACd,gBAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,EAAE,cAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,CAAC;AACZ,CAAC"}
@@ -1,7 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.catchPromise = catchPromise;
4
+ exports.wrapAsync = wrapAsync;
4
5
  function catchPromise(promise, cb) {
5
6
  Promise.resolve(promise).catch(err => cb?.(err));
6
7
  }
8
+ function wrapAsync(fn, cb) {
9
+ return (...args) => {
10
+ if (fn) {
11
+ catchPromise(fn(...args), cb);
12
+ }
13
+ };
14
+ }
7
15
  //# sourceMappingURL=safe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe.js","sourceRoot":"","sources":["../../../src/functions/safe.ts"],"names":[],"mappings":";;AACA,oCAEC;AAFD,SAAgB,YAAY,CAAC,OAA4B,EAAE,EAAuB;IAC9E,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"safe.js","sourceRoot":"","sources":["../../../src/functions/safe.ts"],"names":[],"mappings":";;AAIA,oCAEC;AAED,8BAMC;AAVD,SAAgB,YAAY,CAAC,OAAwB,EAAE,EAAuB;IAC1E,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,SAAS,CAAyB,EAA+C,EAAE,EAAuB;IACtH,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;QACtB,IAAI,EAAE,EAAE,CAAC;YACL,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
@@ -27,7 +27,10 @@ class ObjectOps {
27
27
  if (o != null) {
28
28
  this.keys.forEach(key => {
29
29
  const kk = key;
30
- result[key] = o[kk];
30
+ const v = o[kk];
31
+ if (v !== undefined) {
32
+ result[key] = v;
33
+ }
31
34
  });
32
35
  }
33
36
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../../../src/math/object/ops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../../../src/math/object/ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoadingModel = void 0;
4
+ exports.withLoading = withLoading;
5
+ const Model_1 = require("./Model");
6
+ async function withLoading(model, cb, exclusive = false) {
7
+ if (exclusive && model.value) {
8
+ if (exclusive === 'throw') {
9
+ throw new Error('Operation cannot be started because another one is in progress already.');
10
+ }
11
+ return { exclusivenessFailed: true };
12
+ }
13
+ model.value = true;
14
+ try {
15
+ const res = await cb();
16
+ return {
17
+ exclusivenessFailed: false,
18
+ result: res,
19
+ };
20
+ }
21
+ finally {
22
+ model.value = false;
23
+ }
24
+ }
25
+ class LoadingModel {
26
+ _number;
27
+ _firstInit;
28
+ /**
29
+ * @param useFirstInit - if true, then `isLoading` will be returning 'true' until first `useLoading` call. Defaults to false.
30
+ */
31
+ constructor(useFirstInit = false) {
32
+ this._firstInit = useFirstInit;
33
+ this._number = this.pureConstructNumberModel();
34
+ }
35
+ get isLoading() { return this.value || this._firstInit; }
36
+ get value() { return this._number.value > 0; }
37
+ set value(v) {
38
+ this.setValue(v);
39
+ }
40
+ useLoading(cb, exclusive = false) {
41
+ return withLoading(this, cb, exclusive);
42
+ }
43
+ reset = () => {
44
+ this._firstInit = false;
45
+ this._number.reset();
46
+ };
47
+ setValue(isLoading) {
48
+ if (isLoading) {
49
+ this.incrementLoading();
50
+ }
51
+ else {
52
+ this._firstInit = false;
53
+ this.decrementLoading();
54
+ }
55
+ }
56
+ /** override me */
57
+ incrementLoading() {
58
+ this._number.value++;
59
+ }
60
+ /** override me */
61
+ decrementLoading() {
62
+ this._number.value--;
63
+ }
64
+ /** override me
65
+ *
66
+ * Called in the ctor. Should be pure and should NOT access `this`. */
67
+ pureConstructNumberModel() {
68
+ return new Model_1.Model(0);
69
+ }
70
+ }
71
+ exports.LoadingModel = LoadingModel;
72
+ //# sourceMappingURL=Loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loading.js","sourceRoot":"","sources":["../../../src/models/Loading.ts"],"names":[],"mappings":";;;AAYA,kCAmBC;AA/BD,mCAAgC;AAYzB,KAAK,UAAU,WAAW,CAAgB,KAA2B,EAAE,EAAoB,EAAE,YAA+B,KAAK;IACpI,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAEnB,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,EAAE,EAAE,CAAC;QACvB,OAAO;YACH,mBAAmB,EAAE,KAAK;YAC1B,MAAM,EAAE,GAAG;SACd,CAAC;IACN,CAAC;YAAS,CAAC;QACP,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACxB,CAAC;AACL,CAAC;AAED,MAAa,YAAY;IAEJ,OAAO,CAAwC;IACtD,UAAU,CAAU;IAE9B;;OAEG;IACH,YAAY,YAAY,GAAG,KAAK;QAC5B,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACnD,CAAC;IAED,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAEhE,IAAW,KAAK,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAE9D,IAAW,KAAK,CAAC,CAAU;QACvB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAEM,UAAU,CAAI,EAAoB,EAAE,YAA+B,KAAK;QAC3E,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK,GAAG,GAAG,EAAE;QAChB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC,CAAC;IAEQ,QAAQ,CAAC,SAAkB;QACjC,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,kBAAkB;IACR,gBAAgB;QACtB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,kBAAkB;IACR,gBAAgB;QACtB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;0EAEsE;IAC5D,wBAAwB;QAC9B,OAAO,IAAI,aAAK,CAAS,CAAC,CAAC,CAAC;IAChC,CAAC;CACJ;AAvDD,oCAuDC"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LogicModel = void 0;
4
+ const Loading_1 = require("./Loading");
5
+ const types_1 = require("../types");
6
+ const promiseExtended_1 = require("../structures/promiseExtended");
7
+ const logger_1 = require("../logger");
8
+ class LogicModel {
9
+ _loading;
10
+ get isLoading() { return this._loading.isLoading; }
11
+ logger;
12
+ _namedRunners = new Map();
13
+ _runningActionNames = new Set();
14
+ constructor(name, useFirstInit = true) {
15
+ this.logger = (0, logger_1.createLogger)(`[${name || this.constructor.name}]`);
16
+ this._loading = this.pureConstructLoadingModel(useFirstInit);
17
+ }
18
+ pureConstructLoadingModel(useFirstInit) {
19
+ return new Loading_1.LoadingModel(useFirstInit);
20
+ }
21
+ runAction(worker, options = {}, errorCtx) {
22
+ const started = Date.now();
23
+ const name = options.name;
24
+ if (name && !options.noLogs) {
25
+ this.logger.log(`runAction "${name}" started...`);
26
+ }
27
+ const runner = async () => {
28
+ const { exclusive = false, noLoading = false, join } = options;
29
+ let existingRunner;
30
+ if (join && name) {
31
+ existingRunner = this._namedRunners.get(name);
32
+ if (existingRunner != null) {
33
+ if (join === 'cancel') {
34
+ if (!options.noLogs) {
35
+ this.logger.warn(`runAction "${name}" has been skipped because another instance of it is in progress`);
36
+ }
37
+ return undefined;
38
+ }
39
+ else if (join === 'merge') {
40
+ if (!options.noLogs) {
41
+ this.logger.log(`runAction "${name}" merging with existing instance...`);
42
+ }
43
+ return existingRunner;
44
+ }
45
+ }
46
+ }
47
+ const wrapWorker = async () => {
48
+ const storedName = name || `<unnamed:${Date.now()}>`;
49
+ this._runningActionNames.add(storedName);
50
+ try {
51
+ let result;
52
+ if (!noLoading) {
53
+ const resultWithLoading = await (0, Loading_1.withLoading)(this._loading, worker, !!exclusive);
54
+ if (resultWithLoading.exclusivenessFailed) {
55
+ const othersNames = Array.from(this._runningActionNames, n => `"${n}"`).join(', ') || '<?>';
56
+ const message = `runAction(exclusive=${exclusive}): "${storedName}" has been skipped, others in progress: ${othersNames}`;
57
+ if (exclusive === 'throw') {
58
+ throw new Error(message);
59
+ }
60
+ this.logger.warn(message);
61
+ return undefined;
62
+ }
63
+ result = resultWithLoading.result;
64
+ }
65
+ else {
66
+ result = await worker();
67
+ }
68
+ if (name && !options.noLogs) {
69
+ this.logger.log(`runAction "${storedName}" succeed in ${Date.now() - started}ms`);
70
+ }
71
+ return result;
72
+ }
73
+ finally {
74
+ this._runningActionNames.delete(storedName);
75
+ }
76
+ };
77
+ const wrapped = wrapWorker();
78
+ if (!name) {
79
+ return await wrapped;
80
+ }
81
+ try {
82
+ this._namedRunners.set(name, wrapped);
83
+ return await wrapped;
84
+ }
85
+ finally {
86
+ this._namedRunners.delete(name);
87
+ }
88
+ };
89
+ return promiseExtended_1.PromiseExtended.run(runner)
90
+ // .expectError('network', NetworkError)
91
+ .onError(data => {
92
+ this.logger.error(...formatError({
93
+ name,
94
+ err: data.source,
95
+ errorCtx,
96
+ elapsed: Date.now() - started,
97
+ }));
98
+ });
99
+ }
100
+ }
101
+ exports.LogicModel = LogicModel;
102
+ function formatError({ name, err, errorCtx, elapsed }) {
103
+ const prepend = (val, ...strs) => (val ? [...strs, ...(Array.isArray(val) ? val : [val])] : [null]);
104
+ const getErrorCause = () => {
105
+ if (!err) {
106
+ return [''];
107
+ }
108
+ if (Array.isArray(err)) {
109
+ return err.map(e => e.cause ?? '');
110
+ }
111
+ return [err.cause ?? ''];
112
+ };
113
+ return [
114
+ `runAction "${name || '<unnamed>'}" got an error(s) after ${elapsed}ms:`,
115
+ err,
116
+ ...prepend(getErrorCause(), '\nCause:'),
117
+ ...prepend(types_1.Getter.toValue(errorCtx), '\nContext:'),
118
+ ];
119
+ }
120
+ //# sourceMappingURL=LogicModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogicModel.js","sourceRoot":"","sources":["../../../src/models/LogicModel.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ class Model {
9
9
  this._value = v;
10
10
  this._defaultValue = v;
11
11
  }
12
- get value() { return getter_1.Getter.getValue(this._value); }
12
+ get value() { return getter_1.Getter.toValue(this._value); }
13
13
  set value(v) {
14
14
  this.setValue(v);
15
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/models/Model.ts"],"names":[],"mappings":";;;AACA,4CAAyC;AAGzC,MAAa,KAAK;IACN,MAAM,CAAsB;IAEnB,aAAa,CAAsB;IAEpD,YAAY,IAAyB,IAAI;QACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,IAAW,KAAK,KAAK,OAAO,eAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC;IAC5D,IAAW,KAAK,CAAC,CAAI;QACjB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAEM,QAAQ,CAAC,KAA0B;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;CACJ;AAtBD,sBAsBC"}
1
+ {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/models/Model.ts"],"names":[],"mappings":";;;AACA,4CAAyC;AAGzC,MAAa,KAAK;IACN,MAAM,CAAsB;IAEnB,aAAa,CAAsB;IAEpD,YAAY,IAAyB,IAAI;QACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,IAAW,KAAK,KAAK,OAAO,eAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC;IAC3D,IAAW,KAAK,CAAC,CAAI;QACjB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAEM,QAAQ,CAAC,KAA0B;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;CACJ;AAtBD,sBAsBC"}
@@ -0,0 +1,14 @@
1
+ export function createManualPromise() {
2
+ let resolve;
3
+ let reject;
4
+ const promise = new Promise((_resolve, _reject) => {
5
+ resolve = _resolve;
6
+ reject = _reject;
7
+ });
8
+ return {
9
+ get promise() { return promise; },
10
+ get resolve() { return resolve; },
11
+ get reject() { return reject; },
12
+ };
13
+ }
14
+ //# sourceMappingURL=manualPromise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manualPromise.js","sourceRoot":"","sources":["../../../src/async/manualPromise.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,mBAAmB;IAE/B,IAAI,OAAyB,CAAC;IAC9B,IAAI,MAA4B,CAAC;IAEjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QACjD,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,OAAO,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,IAAI,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC;KAClC,CAAC;AACN,CAAC"}
package/esm/async/misc.js CHANGED
@@ -5,17 +5,5 @@ export async function chainPromises(...promises) {
5
5
  const applyAsync = (acc, val) => acc.then(val);
6
6
  return promises.reduce(applyAsync, Promise.resolve());
7
7
  }
8
- export function createManualPromise() {
9
- let resolve;
10
- let reject;
11
- const promise = new Promise((_resolve, _reject) => {
12
- resolve = _resolve;
13
- reject = _reject;
14
- });
15
- return {
16
- get promise() { return promise; },
17
- get resolve() { return resolve; },
18
- get reject() { return reject; },
19
- };
20
- }
8
+ export * from './manualPromise';
21
9
  //# sourceMappingURL=misc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/async/misc.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAI,EAA0B,EAAE,OAAgB;IAC1E,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAG,QAAiC;IAEpE,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,GAAwB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnF,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1D,CAAC;AAQD,MAAM,UAAU,mBAAmB;IAE/B,IAAI,OAAyB,CAAC;IAC9B,IAAI,MAA4B,CAAC;IAEjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QACjD,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,OAAO,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,IAAI,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC;KAClC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/async/misc.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAI,EAA0B,EAAE,OAAgB;IAC1E,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAG,QAAiC;IAEpE,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,GAAwB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnF,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,cAAc,iBAAiB,CAAC"}
@@ -4,9 +4,9 @@ export function assert(condition, error, objectToLog) {
4
4
  if (condition) {
5
5
  return;
6
6
  }
7
- const e = Getter.getValue(error);
7
+ const e = Getter.toValue(error);
8
8
  if (objectToLog) {
9
- logger.error('Assertion failed:', e, Getter.getValue(objectToLog));
9
+ logger.error('Assertion failed:', e, Getter.toValue(objectToLog));
10
10
  }
11
11
  if (typeof e === 'string') {
12
12
  throw new Error(e);
@@ -1 +1 @@
1
- {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../src/functions/assert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,MAAM,UAAU,MAAM,CAAC,SAAkB,EAAE,KAA6B,EAAE,WAAyB;IAC/F,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO;IACX,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../src/functions/assert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,MAAM,UAAU,MAAM,CAAC,SAAkB,EAAE,KAA6B,EAAE,WAAyB;IAC/F,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO;IACX,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,CAAC;AACZ,CAAC"}
@@ -1,4 +1,11 @@
1
1
  export function catchPromise(promise, cb) {
2
2
  Promise.resolve(promise).catch(err => cb?.(err));
3
3
  }
4
+ export function wrapAsync(fn, cb) {
5
+ return (...args) => {
6
+ if (fn) {
7
+ catchPromise(fn(...args), cb);
8
+ }
9
+ };
10
+ }
4
11
  //# sourceMappingURL=safe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe.js","sourceRoot":"","sources":["../../../src/functions/safe.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,YAAY,CAAC,OAA4B,EAAE,EAAuB;IAC9E,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"safe.js","sourceRoot":"","sources":["../../../src/functions/safe.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,YAAY,CAAC,OAAwB,EAAE,EAAuB;IAC1E,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,SAAS,CAAyB,EAA+C,EAAE,EAAuB;IACtH,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;QACtB,IAAI,EAAE,EAAE,CAAC;YACL,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
@@ -24,7 +24,10 @@ export class ObjectOps {
24
24
  if (o != null) {
25
25
  this.keys.forEach(key => {
26
26
  const kk = key;
27
- result[key] = o[kk];
27
+ const v = o[kk];
28
+ if (v !== undefined) {
29
+ result[key] = v;
30
+ }
28
31
  });
29
32
  }
30
33
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../../../src/math/object/ops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../../../src/math/object/ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { Model } from './Model';
2
+ export async function withLoading(model, cb, exclusive = false) {
3
+ if (exclusive && model.value) {
4
+ if (exclusive === 'throw') {
5
+ throw new Error('Operation cannot be started because another one is in progress already.');
6
+ }
7
+ return { exclusivenessFailed: true };
8
+ }
9
+ model.value = true;
10
+ try {
11
+ const res = await cb();
12
+ return {
13
+ exclusivenessFailed: false,
14
+ result: res,
15
+ };
16
+ }
17
+ finally {
18
+ model.value = false;
19
+ }
20
+ }
21
+ export class LoadingModel {
22
+ _number;
23
+ _firstInit;
24
+ /**
25
+ * @param useFirstInit - if true, then `isLoading` will be returning 'true' until first `useLoading` call. Defaults to false.
26
+ */
27
+ constructor(useFirstInit = false) {
28
+ this._firstInit = useFirstInit;
29
+ this._number = this.pureConstructNumberModel();
30
+ }
31
+ get isLoading() { return this.value || this._firstInit; }
32
+ get value() { return this._number.value > 0; }
33
+ set value(v) {
34
+ this.setValue(v);
35
+ }
36
+ useLoading(cb, exclusive = false) {
37
+ return withLoading(this, cb, exclusive);
38
+ }
39
+ reset = () => {
40
+ this._firstInit = false;
41
+ this._number.reset();
42
+ };
43
+ setValue(isLoading) {
44
+ if (isLoading) {
45
+ this.incrementLoading();
46
+ }
47
+ else {
48
+ this._firstInit = false;
49
+ this.decrementLoading();
50
+ }
51
+ }
52
+ /** override me */
53
+ incrementLoading() {
54
+ this._number.value++;
55
+ }
56
+ /** override me */
57
+ decrementLoading() {
58
+ this._number.value--;
59
+ }
60
+ /** override me
61
+ *
62
+ * Called in the ctor. Should be pure and should NOT access `this`. */
63
+ pureConstructNumberModel() {
64
+ return new Model(0);
65
+ }
66
+ }
67
+ //# sourceMappingURL=Loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loading.js","sourceRoot":"","sources":["../../../src/models/Loading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAYhC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAgB,KAA2B,EAAE,EAAoB,EAAE,YAA+B,KAAK;IACpI,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAEnB,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,EAAE,EAAE,CAAC;QACvB,OAAO;YACH,mBAAmB,EAAE,KAAK;YAC1B,MAAM,EAAE,GAAG;SACd,CAAC;IACN,CAAC;YAAS,CAAC;QACP,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACxB,CAAC;AACL,CAAC;AAED,MAAM,OAAO,YAAY;IAEJ,OAAO,CAAwC;IACtD,UAAU,CAAU;IAE9B;;OAEG;IACH,YAAY,YAAY,GAAG,KAAK;QAC5B,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACnD,CAAC;IAED,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAEhE,IAAW,KAAK,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAE9D,IAAW,KAAK,CAAC,CAAU;QACvB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAEM,UAAU,CAAI,EAAoB,EAAE,YAA+B,KAAK;QAC3E,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK,GAAG,GAAG,EAAE;QAChB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC,CAAC;IAEQ,QAAQ,CAAC,SAAkB;QACjC,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,kBAAkB;IACR,gBAAgB;QACtB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,kBAAkB;IACR,gBAAgB;QACtB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;0EAEsE;IAC5D,wBAAwB;QAC9B,OAAO,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;IAChC,CAAC;CACJ"}
@@ -0,0 +1,116 @@
1
+ import { LoadingModel, withLoading } from './Loading';
2
+ import { Getter } from '../types';
3
+ import { PromiseExtended } from '../structures/promiseExtended';
4
+ import { createLogger } from '../logger';
5
+ export class LogicModel {
6
+ _loading;
7
+ get isLoading() { return this._loading.isLoading; }
8
+ logger;
9
+ _namedRunners = new Map();
10
+ _runningActionNames = new Set();
11
+ constructor(name, useFirstInit = true) {
12
+ this.logger = createLogger(`[${name || this.constructor.name}]`);
13
+ this._loading = this.pureConstructLoadingModel(useFirstInit);
14
+ }
15
+ pureConstructLoadingModel(useFirstInit) {
16
+ return new LoadingModel(useFirstInit);
17
+ }
18
+ runAction(worker, options = {}, errorCtx) {
19
+ const started = Date.now();
20
+ const name = options.name;
21
+ if (name && !options.noLogs) {
22
+ this.logger.log(`runAction "${name}" started...`);
23
+ }
24
+ const runner = async () => {
25
+ const { exclusive = false, noLoading = false, join } = options;
26
+ let existingRunner;
27
+ if (join && name) {
28
+ existingRunner = this._namedRunners.get(name);
29
+ if (existingRunner != null) {
30
+ if (join === 'cancel') {
31
+ if (!options.noLogs) {
32
+ this.logger.warn(`runAction "${name}" has been skipped because another instance of it is in progress`);
33
+ }
34
+ return undefined;
35
+ }
36
+ else if (join === 'merge') {
37
+ if (!options.noLogs) {
38
+ this.logger.log(`runAction "${name}" merging with existing instance...`);
39
+ }
40
+ return existingRunner;
41
+ }
42
+ }
43
+ }
44
+ const wrapWorker = async () => {
45
+ const storedName = name || `<unnamed:${Date.now()}>`;
46
+ this._runningActionNames.add(storedName);
47
+ try {
48
+ let result;
49
+ if (!noLoading) {
50
+ const resultWithLoading = await withLoading(this._loading, worker, !!exclusive);
51
+ if (resultWithLoading.exclusivenessFailed) {
52
+ const othersNames = Array.from(this._runningActionNames, n => `"${n}"`).join(', ') || '<?>';
53
+ const message = `runAction(exclusive=${exclusive}): "${storedName}" has been skipped, others in progress: ${othersNames}`;
54
+ if (exclusive === 'throw') {
55
+ throw new Error(message);
56
+ }
57
+ this.logger.warn(message);
58
+ return undefined;
59
+ }
60
+ result = resultWithLoading.result;
61
+ }
62
+ else {
63
+ result = await worker();
64
+ }
65
+ if (name && !options.noLogs) {
66
+ this.logger.log(`runAction "${storedName}" succeed in ${Date.now() - started}ms`);
67
+ }
68
+ return result;
69
+ }
70
+ finally {
71
+ this._runningActionNames.delete(storedName);
72
+ }
73
+ };
74
+ const wrapped = wrapWorker();
75
+ if (!name) {
76
+ return await wrapped;
77
+ }
78
+ try {
79
+ this._namedRunners.set(name, wrapped);
80
+ return await wrapped;
81
+ }
82
+ finally {
83
+ this._namedRunners.delete(name);
84
+ }
85
+ };
86
+ return PromiseExtended.run(runner)
87
+ // .expectError('network', NetworkError)
88
+ .onError(data => {
89
+ this.logger.error(...formatError({
90
+ name,
91
+ err: data.source,
92
+ errorCtx,
93
+ elapsed: Date.now() - started,
94
+ }));
95
+ });
96
+ }
97
+ }
98
+ function formatError({ name, err, errorCtx, elapsed }) {
99
+ const prepend = (val, ...strs) => (val ? [...strs, ...(Array.isArray(val) ? val : [val])] : [null]);
100
+ const getErrorCause = () => {
101
+ if (!err) {
102
+ return [''];
103
+ }
104
+ if (Array.isArray(err)) {
105
+ return err.map(e => e.cause ?? '');
106
+ }
107
+ return [err.cause ?? ''];
108
+ };
109
+ return [
110
+ `runAction "${name || '<unnamed>'}" got an error(s) after ${elapsed}ms:`,
111
+ err,
112
+ ...prepend(getErrorCause(), '\nCause:'),
113
+ ...prepend(Getter.toValue(errorCtx), '\nContext:'),
114
+ ];
115
+ }
116
+ //# sourceMappingURL=LogicModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogicModel.js","sourceRoot":"","sources":["../../../src/models/LogicModel.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export class Model {
6
6
  this._value = v;
7
7
  this._defaultValue = v;
8
8
  }
9
- get value() { return Getter.getValue(this._value); }
9
+ get value() { return Getter.toValue(this._value); }
10
10
  set value(v) {
11
11
  this.setValue(v);
12
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/models/Model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,MAAM,OAAO,KAAK;IACN,MAAM,CAAsB;IAEnB,aAAa,CAAsB;IAEpD,YAAY,IAAyB,IAAI;QACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,IAAW,KAAK,KAAK,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC;IAC5D,IAAW,KAAK,CAAC,CAAI;QACjB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAEM,QAAQ,CAAC,KAA0B;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;CACJ"}
1
+ {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/models/Model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,MAAM,OAAO,KAAK;IACN,MAAM,CAAsB;IAEnB,aAAa,CAAsB;IAEpD,YAAY,IAAyB,IAAI;QACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,IAAW,KAAK,KAAK,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC;IAC3D,IAAW,KAAK,CAAC,CAAI;QACjB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAEM,QAAQ,CAAC,KAA0B;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "2.4.0",
3
+ "version": "2.4.2",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "private": false,
6
6
  "repository": {
@@ -1 +1 @@
1
- {"root":["../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/async/arrays.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/safe.ts","../src/functions/throttle.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/singleton.ts","../src/lazy/types.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/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.6.2"}
1
+ {"root":["../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/async/arrays.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/safe.ts","../src/functions/throttle.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/singleton.ts","../src/lazy/types.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.6.2"}
@@ -1 +1 @@
1
- {"root":["../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/async/arrays.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/safe.ts","../src/functions/throttle.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/singleton.ts","../src/lazy/types.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/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.6.2"}
1
+ {"root":["../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/async/arrays.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/safe.ts","../src/functions/throttle.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/singleton.ts","../src/lazy/types.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.6.2"}
@@ -1 +1 @@
1
- {"root":["../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/async/arrays.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/safe.ts","../src/functions/throttle.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/singleton.ts","../src/lazy/types.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/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.6.2"}
1
+ {"root":["../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/async/arrays.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/safe.ts","../src/functions/throttle.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/singleton.ts","../src/lazy/types.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.6.2"}
@@ -0,0 +1,6 @@
1
+ export type ManualPromise<T> = {
2
+ readonly promise: Promise<T>;
3
+ readonly resolve: (res: T) => void;
4
+ readonly reject: (err: Error) => void;
5
+ };
6
+ export declare function createManualPromise<T = void>(): ManualPromise<T>;
@@ -1,8 +1,3 @@
1
1
  export declare function OptAwait<T>(cb: () => (T | Promise<T>), doAwait: boolean): Promise<T>;
2
2
  export declare function chainPromises(...promises: (() => Promise<void>)[]): Promise<void>;
3
- export type ManualPromise<T> = {
4
- readonly promise: Promise<T>;
5
- readonly resolve: (res: T) => void;
6
- readonly reject: (err: Error) => void;
7
- };
8
- export declare function createManualPromise<T = void>(): ManualPromise<T>;
3
+ export * from './manualPromise';
@@ -1 +1,5 @@
1
- export declare function catchPromise(promise: Promise<any> | void, cb?: (err: any) => void): void;
1
+ import { Nullable } from '../types';
2
+ type LaxPromise<T> = Promise<T> | T | void;
3
+ export declare function catchPromise(promise: LaxPromise<any>, cb?: (err: any) => void): void;
4
+ export declare function wrapAsync<T, TArgs extends any[]>(fn: Nullable<(...args: TArgs) => LaxPromise<T>>, cb?: (err: any) => void): (...args: TArgs) => void;
5
+ export {};
@@ -0,0 +1,31 @@
1
+ import type { IResetableModel, IValueModel } from './types';
2
+ export type LoadingWorker<T> = () => (T | Promise<T>);
3
+ export type LoadingResult<T = unknown> = {
4
+ exclusivenessFailed: true;
5
+ } | {
6
+ exclusivenessFailed: false;
7
+ result: T;
8
+ };
9
+ export declare function withLoading<T>(this: void, model: IValueModel<boolean>, cb: LoadingWorker<T>, exclusive?: boolean | 'throw'): Promise<LoadingResult<T>>;
10
+ export declare class LoadingModel implements IValueModel<boolean>, IResetableModel {
11
+ private readonly _number;
12
+ protected _firstInit: boolean;
13
+ /**
14
+ * @param useFirstInit - if true, then `isLoading` will be returning 'true' until first `useLoading` call. Defaults to false.
15
+ */
16
+ constructor(useFirstInit?: boolean);
17
+ get isLoading(): boolean;
18
+ get value(): boolean;
19
+ set value(v: boolean);
20
+ useLoading<T>(cb: LoadingWorker<T>, exclusive?: boolean | 'throw'): Promise<LoadingResult<T>>;
21
+ reset: () => void;
22
+ protected setValue(isLoading: boolean): void;
23
+ /** override me */
24
+ protected incrementLoading(): void;
25
+ /** override me */
26
+ protected decrementLoading(): void;
27
+ /** override me
28
+ *
29
+ * Called in the ctor. Should be pure and should NOT access `this`. */
30
+ protected pureConstructNumberModel(): IValueModel<number> & IResetableModel;
31
+ }
@@ -0,0 +1,34 @@
1
+ import { LoadingModel } from './Loading';
2
+ import { Getter } from '../types';
3
+ import { PromiseExtended } from '../structures/promiseExtended';
4
+ import { ILogger } from '../logger';
5
+ type RunOptions = {
6
+ /** Action name, required for logging and joining. */
7
+ name?: string;
8
+ /** If set to truthy, will not start an action if another is still in progress.
9
+ * Additionally, if set to 'throw', will throw an error. Otherwise, will return undefined.
10
+ *
11
+ * Note: if a current action runs in an exclusive mode, but the next one is not, the next one will still be allowed.
12
+ */
13
+ exclusive?: boolean | 'throw';
14
+ /** If an action with the same name (should be specified) runs already, this action is skipped:
15
+ * - 'cancel' - this action is skipped immediately, no result returned;
16
+ * - 'merge' - this action waits for the previous one to finish and returns its result;
17
+ */
18
+ join?: 'merge' | 'cancel';
19
+ /** If set to true, loading indicator will not be increased, and exclusiveness will not be checked. */
20
+ noLoading?: boolean;
21
+ /** Whether to disable logging for the action. */
22
+ noLogs?: boolean;
23
+ };
24
+ export declare class LogicModel {
25
+ protected readonly _loading: LoadingModel;
26
+ get isLoading(): boolean;
27
+ protected logger: ILogger;
28
+ private readonly _namedRunners;
29
+ private readonly _runningActionNames;
30
+ constructor(name?: string, useFirstInit?: boolean);
31
+ protected pureConstructLoadingModel(useFirstInit: boolean): LoadingModel;
32
+ protected runAction<T = unknown>(worker: () => Promise<T>, options?: RunOptions, errorCtx?: Getter<unknown>): PromiseExtended<T | undefined>;
33
+ }
34
+ export {};
@@ -1,7 +1,7 @@
1
- import type { IValueModel } from './types';
1
+ import type { IResetableModel, IValueModel } from './types';
2
2
  import { Getter } from '../types/getter';
3
3
  import { Nullable } from '../types/misc';
4
- export declare class Model<T> implements IValueModel<Nullable<T>> {
4
+ export declare class Model<T> implements IValueModel<Nullable<T>>, IResetableModel {
5
5
  private _value;
6
6
  private readonly _defaultValue;
7
7
  constructor(v?: Getter<Nullable<T>>);