@zajno/common 1.3.5 → 1.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/coverage/clover.xml +223 -168
  2. package/coverage/coverage-final.json +9 -8
  3. package/coverage/lcov-report/index.html +44 -29
  4. package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
  5. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
  6. package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
  7. package/coverage/lcov-report/src/async/index.html +1 -1
  8. package/coverage/lcov-report/src/dates/calc.ts.html +2 -2
  9. package/coverage/lcov-report/src/dates/convert.ts.html +7 -40
  10. package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
  11. package/coverage/lcov-report/src/dates/format.ts.html +8 -5
  12. package/coverage/lcov-report/src/dates/index.html +13 -13
  13. package/coverage/lcov-report/src/dates/index.ts.html +1 -1
  14. package/coverage/lcov-report/src/dates/parse.ts.html +42 -6
  15. package/coverage/lcov-report/src/dates/period.ts.html +1 -1
  16. package/coverage/lcov-report/src/dates/shift.ts.html +2 -2
  17. package/coverage/lcov-report/src/dates/types.ts.html +1 -1
  18. package/coverage/lcov-report/src/dates/yearDate.ts.html +2 -2
  19. package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
  20. package/coverage/lcov-report/src/event.ts.html +1 -1
  21. package/coverage/lcov-report/src/fields/index.html +111 -0
  22. package/coverage/lcov-report/src/{viewModels/SelectViewModel.ts.html → fields/update.ts.html} +118 -178
  23. package/coverage/lcov-report/src/index.html +1 -1
  24. package/coverage/lcov-report/src/lazy.light.ts.html +1 -1
  25. package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
  26. package/coverage/lcov-report/src/logger/console.ts.html +1 -1
  27. package/coverage/lcov-report/src/logger/index.html +1 -1
  28. package/coverage/lcov-report/src/logger/index.ts.html +1 -1
  29. package/coverage/lcov-report/src/logger/named.ts.html +1 -1
  30. package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
  31. package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
  32. package/coverage/lcov-report/src/math/calc.ts.html +19 -10
  33. package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
  34. package/coverage/lcov-report/src/math/index.html +19 -19
  35. package/coverage/lcov-report/src/math/index.ts.html +1 -1
  36. package/coverage/lcov-report/src/transitionObserver.ts.html +2 -2
  37. package/coverage/lcov-report/src/types.ts.html +1 -1
  38. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
  39. package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
  40. package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
  41. package/coverage/lcov-report/src/validation/index.html +1 -1
  42. package/coverage/lcov-report/src/validation/index.ts.html +1 -1
  43. package/coverage/lcov-report/src/validation/types.ts.html +1 -1
  44. package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
  45. package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
  46. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +51 -9
  47. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
  48. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +1 -1
  49. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
  50. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +1 -1
  51. package/coverage/lcov-report/src/viewModels/index.html +16 -16
  52. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
  53. package/coverage/lcov-report/update.ts.html +374 -0
  54. package/coverage/lcov.info +467 -330
  55. package/lib/dates/calc.js +3 -3
  56. package/lib/dates/calc.js.map +1 -1
  57. package/lib/dates/convert.d.ts +0 -2
  58. package/lib/dates/convert.d.ts.map +1 -1
  59. package/lib/dates/convert.js +10 -20
  60. package/lib/dates/convert.js.map +1 -1
  61. package/lib/dates/format.d.ts.map +1 -1
  62. package/lib/dates/format.js +4 -3
  63. package/lib/dates/format.js.map +1 -1
  64. package/lib/dates/parse.d.ts +2 -0
  65. package/lib/dates/parse.d.ts.map +1 -1
  66. package/lib/dates/parse.js +12 -1
  67. package/lib/dates/parse.js.map +1 -1
  68. package/lib/dates/shift.js +6 -6
  69. package/lib/dates/shift.js.map +1 -1
  70. package/lib/dates/yearDate.js +3 -3
  71. package/lib/dates/yearDate.js.map +1 -1
  72. package/lib/disposer.d.ts +22 -0
  73. package/lib/disposer.d.ts.map +1 -0
  74. package/lib/disposer.js +65 -0
  75. package/lib/disposer.js.map +1 -0
  76. package/lib/fields/update.d.ts +17 -6
  77. package/lib/fields/update.d.ts.map +1 -1
  78. package/lib/fields/update.js +29 -13
  79. package/lib/fields/update.js.map +1 -1
  80. package/lib/ident.d.ts +6 -0
  81. package/lib/ident.d.ts.map +1 -0
  82. package/lib/ident.js +3 -0
  83. package/lib/ident.js.map +1 -0
  84. package/lib/math/calc.d.ts +1 -0
  85. package/lib/math/calc.d.ts.map +1 -1
  86. package/lib/math/calc.js +5 -1
  87. package/lib/math/calc.js.map +1 -1
  88. package/lib/transitionObserver.d.ts +1 -1
  89. package/lib/transitionObserver.d.ts.map +1 -1
  90. package/lib/unsubscriber.d.ts +1 -16
  91. package/lib/unsubscriber.d.ts.map +1 -1
  92. package/lib/unsubscriber.js +6 -49
  93. package/lib/unsubscriber.js.map +1 -1
  94. package/lib/viewModels/FlagModel.d.ts +2 -0
  95. package/lib/viewModels/FlagModel.d.ts.map +1 -1
  96. package/lib/viewModels/FlagModel.js +18 -0
  97. package/lib/viewModels/FlagModel.js.map +1 -1
  98. package/package.json +1 -1
  99. package/src/dates/calc.ts +1 -1
  100. package/src/dates/convert.ts +1 -12
  101. package/src/dates/format.ts +2 -1
  102. package/src/dates/parse.ts +12 -0
  103. package/src/dates/shift.ts +1 -1
  104. package/src/dates/yearDate.ts +1 -1
  105. package/src/disposer.ts +81 -0
  106. package/src/fields/__tests__/fields.update.test.ts +73 -0
  107. package/src/fields/update.ts +54 -20
  108. package/src/ident.ts +8 -0
  109. package/src/math/calc.ts +3 -0
  110. package/src/transitionObserver.ts +1 -1
  111. package/src/unsubscriber.ts +9 -68
  112. package/src/viewModels/FlagModel.ts +14 -0
  113. package/coverage/lcov-report/src/viewModels/LabeledFlagModel.ts.html +0 -146
  114. package/coverage/lcov-report/transitionObserver.ts.html +0 -572
  115. package/yarn-error.log +0 -3709
package/lib/math/calc.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.random = exports.roundHalf = exports.roundNumber = exports.getIntersection = exports.contains = exports.clamp01 = exports.clamp = void 0;
3
+ exports.badRandomString = exports.random = exports.roundHalf = exports.roundNumber = exports.getIntersection = exports.contains = exports.clamp01 = exports.clamp = void 0;
4
4
  function clamp(val, min = undefined, max = undefined, cycle = false) {
5
5
  if (min != null && val < min) {
6
6
  return (max != null && cycle) ? max : min;
@@ -67,4 +67,8 @@ function random(min = 0, max = 1, trunc = true) {
67
67
  return trunc ? Math.trunc(res) : res;
68
68
  }
69
69
  exports.random = random;
70
+ function badRandomString(length = 12) {
71
+ return Math.random().toString(26).slice(2, clamp(length, 0, 12));
72
+ }
73
+ exports.badRandomString = badRandomString;
70
74
  //# sourceMappingURL=calc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calc.js","sourceRoot":"","sources":["../../src/math/calc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calc.js","sourceRoot":"","sources":["../../src/math/calc.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { IEvent } from './event';
2
- import { IDisposable } from './unsubscriber';
2
+ import { IDisposable } from './disposer';
3
3
  export declare class TransitionObserver<T> implements IDisposable {
4
4
  private readonly _event;
5
5
  private _getter;
@@ -1 +1 @@
1
- {"version":3,"file":"transitionObserver.d.ts","sourceRoot":"","sources":["../src/transitionObserver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAS,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAAa,kBAAkB,CAAC,CAAC,CAAE,YAAW,WAAW;IAErD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,KAAK,CAAgB;IAE7B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,GAAG,CAAgB;IAE3B,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,MAAM,CAAoC;gBAEtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAM5B,IAAW,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAAwB;IACrD,IAAW,YAAY,MAAyB;IAEhD,IAAW,WAAW,YAAqC;IAC3D,OAAO,KAAK,WAAW,GAA0C;IAEjE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IAQvB,IAAI,CAAC,IAAI,EAAE,CAAC;IAKZ,EAAE,CAAC,EAAE,EAAE,CAAC;IAKR,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG;IAQpB,SAAS;IAOT,QAAQ,CAAC,MAAM,UAAO;IAKtB,UAAU;IAIV,aAAa;IAKb,UAAU,CAAC,OAAO,GAAE,MAAa;IA2BjC,OAAO;IAMP,aAAa,CAAC,IAAI,EAAE,MAAM;IAK1B,OAAO,aASL;IAEF,OAAO,CAAC,WAAW,CAiCjB;IAEF,OAAO,CAAC,cAAc;CAQzB"}
1
+ {"version":3,"file":"transitionObserver.d.ts","sourceRoot":"","sources":["../src/transitionObserver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAS,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,qBAAa,kBAAkB,CAAC,CAAC,CAAE,YAAW,WAAW;IAErD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,KAAK,CAAgB;IAE7B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,GAAG,CAAgB;IAE3B,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,MAAM,CAAoC;gBAEtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAM5B,IAAW,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAAwB;IACrD,IAAW,YAAY,MAAyB;IAEhD,IAAW,WAAW,YAAqC;IAC3D,OAAO,KAAK,WAAW,GAA0C;IAEjE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IAQvB,IAAI,CAAC,IAAI,EAAE,CAAC;IAKZ,EAAE,CAAC,EAAE,EAAE,CAAC;IAKR,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG;IAQpB,SAAS;IAOT,QAAQ,CAAC,MAAM,UAAO;IAKtB,UAAU;IAIV,aAAa;IAKb,UAAU,CAAC,OAAO,GAAE,MAAa;IA2BjC,OAAO;IAMP,aAAa,CAAC,IAAI,EAAE,MAAM;IAK1B,OAAO,aASL;IAEF,OAAO,CAAC,WAAW,CAiCjB;IAEF,OAAO,CAAC,cAAc;CAQzB"}
@@ -1,17 +1,2 @@
1
- export interface IDisposable {
2
- dispose(): void;
3
- }
4
- export interface Disposer {
5
- (): void;
6
- }
7
- export declare class Unsubscriber {
8
- readonly logName: string;
9
- private readonly _disposers;
10
- private readonly _map;
11
- constructor(logName?: string);
12
- add(d: Disposer | IDisposable, id?: string): void;
13
- execute(id: string): void;
14
- dispose(log?: boolean): void;
15
- }
16
- export declare function combineDisposers(...items: Disposer[]): Disposer;
1
+ export { IDisposable, DisposeFunction as Disposer, combineDisposers, Disposer as Unsubscriber, Disposable, } from './disposer';
17
2
  //# sourceMappingURL=unsubscriber.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unsubscriber.d.ts","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IACxB,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,IAAI,CAAC;CACZ;AAED,qBAAa,YAAY;IAKT,QAAQ,CAAC,OAAO,EAAE,MAAM;IAHpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+B;gBAE/B,OAAO,GAAE,MAAa;IAE3C,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,EAAE,EAAE,CAAC,EAAE,MAAM;IAqB1C,OAAO,CAAC,EAAE,EAAE,MAAM;IAelB,OAAO,CAAC,GAAG,UAAQ;CAYtB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAE/D"}
1
+ {"version":3,"file":"unsubscriber.d.ts","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,WAAW,EACX,eAAe,IAAI,QAAQ,EAC3B,gBAAgB,EAChB,QAAQ,IAAI,YAAY,EACxB,UAAU,GACb,MAAM,YAAY,CAAC"}
@@ -1,54 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.combineDisposers = exports.Unsubscriber = void 0;
3
+ exports.Disposable = exports.Unsubscriber = exports.combineDisposers = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const logger_1 = tslib_1.__importDefault(require("./logger"));
6
- class Unsubscriber {
7
- constructor(logName = null) {
8
- this.logName = logName;
9
- this._disposers = [];
10
- this._map = new Map();
11
- }
12
- add(d, id) {
13
- if (!d) {
14
- return;
15
- }
16
- const dd = typeof d !== 'function'
17
- ? (() => d.dispose ? d.dispose() : null)
18
- : d;
19
- this._disposers.push(dd);
20
- if (id) {
21
- // dispose previous identified disposer
22
- if (this._map.has(id)) {
23
- this.execute(id);
24
- }
25
- this._map.set(id, dd);
26
- }
27
- }
28
- execute(id) {
29
- const d = this._map.get(id);
30
- if (!d) {
31
- return;
32
- }
33
- this._map.delete(id);
34
- const i = this._disposers.indexOf(d);
35
- if (i >= 0) {
36
- this._disposers.splice(i, 1);
37
- }
38
- d();
39
- }
40
- dispose(log = false) {
41
- if (log) {
42
- logger_1.default.log(`[Disposer:${this.logName || '<unknown>'}] Disposing ${this._disposers.length} items including named ones:`, Array.from(this._map.entries()).map(e => e[0]));
43
- }
44
- this._disposers.forEach(d => d());
45
- this._disposers.length = 0;
46
- this._map.clear();
47
- }
48
- }
49
- exports.Unsubscriber = Unsubscriber;
50
- function combineDisposers(...items) {
51
- return () => items.forEach(i => i());
52
- }
53
- exports.combineDisposers = combineDisposers;
6
+ var disposer_1 = require("./disposer");
7
+ Object.defineProperty(exports, "combineDisposers", { enumerable: true, get: function () { return disposer_1.combineDisposers; } });
8
+ Object.defineProperty(exports, "Unsubscriber", { enumerable: true, get: function () { return disposer_1.Disposer; } });
9
+ Object.defineProperty(exports, "Disposable", { enumerable: true, get: function () { return disposer_1.Disposable; } });
10
+ logger_1.default.warn('@zajno/common: importing module "unsusbcriber" is deprecated; please change your import to "disposer" module.');
54
11
  //# sourceMappingURL=unsubscriber.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unsubscriber.js","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":";;;;AAAA,8DAA8B;AAU9B,MAAa,YAAY;IAKrB,YAAqB,UAAkB,IAAI;QAAtB,YAAO,GAAP,OAAO,CAAe;QAH1B,eAAU,GAAe,EAAE,CAAC;QAC5B,SAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEL,CAAC;IAEhD,GAAG,CAAC,CAAyB,EAAE,EAAW;QACtC,IAAI,CAAC,CAAC,EAAE;YACJ,OAAO;SACV;QAED,MAAM,EAAE,GAAa,OAAO,CAAC,KAAK,UAAU;YACxC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,CAAC,CAAC,CAAC,CAAC;QAER,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzB,IAAI,EAAE,EAAE;YACJ,uCAAuC;YACvC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACnB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACpB;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SACzB;IACL,CAAC;IAED,OAAO,CAAC,EAAU;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,EAAE;YACJ,OAAO;SACV;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,EAAE;YACR,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAChC;QAED,CAAC,EAAE,CAAC;IACR,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,KAAK;QACf,IAAI,GAAG,EAAE;YACL,gBAAM,CAAC,GAAG,CACN,aAAa,IAAI,CAAC,OAAO,IAAI,WAAW,eAAe,IAAI,CAAC,UAAU,CAAC,MAAM,8BAA8B,EAC3G,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACjD,CAAC;SACL;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACJ;AAvDD,oCAuDC;AAED,SAAgB,gBAAgB,CAAC,GAAG,KAAiB;IACjD,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC;AAFD,4CAEC"}
1
+ {"version":3,"file":"unsubscriber.js","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":";;;;AAAA,8DAA8B;AAE9B,uCAMoB;AAHhB,4GAAA,gBAAgB,OAAA;AAChB,wGAAA,QAAQ,OAAgB;AACxB,sGAAA,UAAU,OAAA;AAGd,gBAAM,CAAC,IAAI,CAAC,+GAA+G,CAAC,CAAC"}
@@ -13,6 +13,8 @@ export declare class FlagModel implements IFlagModel, IFlagModelReadonly {
13
13
  get value(): boolean;
14
14
  set value(value: boolean);
15
15
  get isDefault(): boolean;
16
+ setTrue: () => boolean;
17
+ setFalse: () => boolean;
16
18
  toggle: () => void;
17
19
  reset: () => void;
18
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FlagModel.d.ts","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,UAAW,SAAQ,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe;IACrE,MAAM,IAAI,IAAI,CAAC;CAClB;AAED,oBAAY,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,oBAAY,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE5D,qBAAa,SAAU,YAAW,UAAU,EAAE,kBAAkB;IAG5D,OAAO,CAAC,MAAM,CAAkB;gBAEpB,OAAO,UAAQ;IAK3B,IAAI,KAAK,IAIQ,OAAO,CAFvB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAEvB;IAED,IAAI,SAAS,YAAoC;IAGjD,MAAM,aAEJ;IAGF,KAAK,aAEH;CACL"}
1
+ {"version":3,"file":"FlagModel.d.ts","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,UAAW,SAAQ,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe;IACrE,MAAM,IAAI,IAAI,CAAC;CAClB;AAED,oBAAY,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,oBAAY,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE5D,qBAAa,SAAU,YAAW,UAAU,EAAE,kBAAkB;IAG5D,OAAO,CAAC,MAAM,CAAkB;gBAEpB,OAAO,UAAQ;IAK3B,IAAI,KAAK,IAIQ,OAAO,CAFvB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAEvB;IAED,IAAI,SAAS,YAAoC;IAGjD,OAAO,gBAIL;IAGF,QAAQ,gBAIN;IAGF,MAAM,aAEJ;IAGF,KAAK,aAEH;CACL"}
@@ -6,6 +6,16 @@ const mobx_1 = require("mobx");
6
6
  class FlagModel {
7
7
  constructor(initial = false) {
8
8
  this._value = false;
9
+ this.setTrue = () => {
10
+ const v = this.value;
11
+ this.value = true;
12
+ return !v;
13
+ };
14
+ this.setFalse = () => {
15
+ const v = this.value;
16
+ this.value = false;
17
+ return v;
18
+ };
9
19
  this.toggle = () => {
10
20
  this._value = !this._value;
11
21
  };
@@ -27,6 +37,14 @@ tslib_1.__decorate([
27
37
  mobx_1.observable,
28
38
  tslib_1.__metadata("design:type", Boolean)
29
39
  ], FlagModel.prototype, "_value", void 0);
40
+ tslib_1.__decorate([
41
+ mobx_1.action,
42
+ tslib_1.__metadata("design:type", Object)
43
+ ], FlagModel.prototype, "setTrue", void 0);
44
+ tslib_1.__decorate([
45
+ mobx_1.action,
46
+ tslib_1.__metadata("design:type", Object)
47
+ ], FlagModel.prototype, "setFalse", void 0);
30
48
  tslib_1.__decorate([
31
49
  mobx_1.action,
32
50
  tslib_1.__metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"FlagModel.js","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":";;;;AAAA,+BAA0D;AAc1D,MAAa,SAAS;IAKlB,YAAY,OAAO,GAAG,KAAK;QAFnB,WAAM,GAAY,KAAK,CAAC;QAkBhC,WAAM,GAAG,GAAG,EAAE;YACV,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC;QAGF,UAAK,GAAG,GAAG,EAAE;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC;QAtBE,qBAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,KAAc;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC;CAWpD;AA1BG;IADC,iBAAU;;yCACqB;AAkBhC;IADC,aAAM;;yCAGL;AAGF;IADC,aAAM;;wCAGL;AA5BN,8BA6BC"}
1
+ {"version":3,"file":"FlagModel.js","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":";;;;AAAA,+BAA0D;AAc1D,MAAa,SAAS;IAKlB,YAAY,OAAO,GAAG,KAAK;QAFnB,WAAM,GAAY,KAAK,CAAC;QAkBhC,YAAO,GAAG,GAAG,EAAE;YACX,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO,CAAC,CAAC,CAAC;QACd,CAAC,CAAC;QAGF,aAAQ,GAAG,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;QAGF,WAAM,GAAG,GAAG,EAAE;YACV,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC;QAGF,UAAK,GAAG,GAAG,EAAE;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC;QApCE,qBAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,KAAc;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC;CAyBpD;AAxCG;IADC,iBAAU;;yCACqB;AAkBhC;IADC,aAAM;;0CAKL;AAGF;IADC,aAAM;;2CAKL;AAGF;IADC,aAAM;;yCAGL;AAGF;IADC,aAAM;;wCAGL;AA1CN,8BA2CC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "1.3.5",
3
+ "version": "1.3.9",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "repository": {
6
6
  "type": "git",
package/src/dates/calc.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { getTime } from './convert';
1
+ import { getTime } from './parse';
2
2
  import { endOf, startOf } from './shift';
3
3
  import { Granularity } from './types';
4
4
 
@@ -1,19 +1,8 @@
1
1
  import { DateX } from './datex';
2
+ import { getDate, getTime } from './parse';
2
3
  import { isSame, startOf } from './shift';
3
4
  import { ConstantGranularity, Granularity } from './types';
4
5
 
5
- export function getTime(d: Date | number): number {
6
- return d instanceof Date ? d.getTime() : d;
7
- }
8
-
9
- export function getDate(d: Date | number | string): Date {
10
- if (!d) {
11
- return null;
12
- }
13
-
14
- return new Date(d);
15
- }
16
-
17
6
  type DateFields<T> = {
18
7
  [P in keyof T]: T[P] extends Date ? P : never;
19
8
  }[keyof T];
@@ -1,5 +1,6 @@
1
1
  import * as MathX from '../math';
2
- import { decompose, decomposeDate, getDate, getDiscreteDiff, getTime } from './convert';
2
+ import { decompose, decomposeDate, getDiscreteDiff } from './convert';
3
+ import { getDate, getTime } from './parse';
3
4
  import { YearDate } from './yearDate';
4
5
 
5
6
  export namespace Format {
@@ -1,4 +1,16 @@
1
1
 
2
+ export function getTime(d: Date | number): number {
3
+ return d instanceof Date ? d.getTime() : d;
4
+ }
5
+
6
+ export function getDate(d: Date | number | string): Date {
7
+ if (!d) {
8
+ return null;
9
+ }
10
+
11
+ return new Date(d);
12
+ }
13
+
2
14
  export namespace Parse {
3
15
  /** `YYYY-MM-DD` */
4
16
  export function fromDatePicker(str: string, local = false) {
@@ -1,4 +1,4 @@
1
- import { getDate, getTime } from './convert';
1
+ import { getDate, getTime } from './parse';
2
2
  import { DateX } from './datex';
3
3
  import { ConstantGranularity, Granularity } from './types';
4
4
 
@@ -1,4 +1,4 @@
1
- import { getDate } from './convert';
1
+ import { getDate } from './parse';
2
2
 
3
3
  /** Useful for recurring dates like birthday */
4
4
  export type YearDate = { day: number, month: number };
@@ -0,0 +1,81 @@
1
+ import logger from './logger';
2
+
3
+ export interface IDisposable {
4
+ dispose(): void;
5
+ }
6
+
7
+ export interface DisposeFunction {
8
+ (): void;
9
+ }
10
+
11
+ export class Disposer {
12
+
13
+ private readonly _disposers: DisposeFunction[] = [];
14
+ private readonly _map = new Map<string, DisposeFunction>();
15
+
16
+ constructor(readonly logName: string = null) { }
17
+
18
+ add(d: DisposeFunction | IDisposable, id?: string) {
19
+ if (!d) {
20
+ return;
21
+ }
22
+
23
+ const dd: DisposeFunction = typeof d !== 'function'
24
+ ? (() => d.dispose ? d.dispose() : null)
25
+ : d;
26
+
27
+ this._disposers.push(dd);
28
+
29
+ if (id) {
30
+ // dispose previous identified disposer
31
+ if (this._map.has(id)) {
32
+ this.execute(id);
33
+ }
34
+
35
+ this._map.set(id, dd);
36
+ }
37
+ }
38
+
39
+ execute(id: string) {
40
+ const d = this._map.get(id);
41
+ if (!d) {
42
+ return;
43
+ }
44
+
45
+ this._map.delete(id);
46
+ const i = this._disposers.indexOf(d);
47
+ if (i >= 0) {
48
+ this._disposers.splice(i, 1);
49
+ }
50
+
51
+ d();
52
+ }
53
+
54
+ dispose(log = false) {
55
+ if (log) {
56
+ logger.log(
57
+ `[Disposer:${this.logName || '<unknown>'}] Disposing ${this._disposers.length} items including named ones:`,
58
+ Array.from(this._map.entries()).map(e => e[0]),
59
+ );
60
+ }
61
+
62
+ this._disposers.forEach(d => d());
63
+ this._disposers.length = 0;
64
+ this._map.clear();
65
+ }
66
+ }
67
+
68
+ export function combineDisposers(...items: DisposeFunction[]): DisposeFunction {
69
+ return () => items.forEach(i => i());
70
+ }
71
+
72
+ export class Disposable implements IDisposable {
73
+
74
+ protected readonly disposer = new Disposer();
75
+ protected _isDisposed = false;
76
+
77
+ public dispose = () => {
78
+ this._isDisposed = true;
79
+ this.disposer.dispose();
80
+ };
81
+ }
@@ -0,0 +1,73 @@
1
+ import { updateArray } from '../update';
2
+
3
+ describe('fields/update', () => {
4
+ it('empty input', () => {
5
+ expect(updateArray(null, null)).toStrictEqual({ changed: 0, result: null });
6
+ });
7
+
8
+ it('updates primitives | numbers', () => {
9
+ const target = [1, 5, 3];
10
+ const source = [4, 3, 2];
11
+
12
+ const results1 = updateArray(target, source, { clone: true });
13
+ expect(results1.changed).toBe(4);
14
+ expect(results1.result).toStrictEqual([2, 3, 4]);
15
+
16
+ const results2 = updateArray(target, source, { sorter: null });
17
+ expect(results2.changed).toBe(4);
18
+ expect(results2.result).toStrictEqual([3, 4, 2]);
19
+ });
20
+
21
+ it('updates primitives | strings', () => {
22
+ const target = ['a', 'b', 'c'];
23
+ const source = ['b', 'c', 'd'];
24
+
25
+ const results = updateArray(target, source);
26
+
27
+ expect(results.changed).toBe(2);
28
+ expect(results.result).toStrictEqual(source);
29
+ });
30
+
31
+ describe('updates objects', () => {
32
+ it('no options', () => {
33
+ const res = updateArray([
34
+ { id: 1, v: 'a' },
35
+ { id: 5, v: 'e' },
36
+ { id: 3, v: 'c' },
37
+ ], [
38
+ { id: 2, v: 'b' },
39
+ ]);
40
+
41
+ expect(res.changed).toBe(4);
42
+ expect(res.result).toStrictEqual([
43
+ { id: 2, v: 'b' },
44
+ ]);
45
+ });
46
+
47
+ // eslint-disable-next-line jest/expect-expect
48
+ it('full options', () => {
49
+ const res = updateArray([
50
+ { id: 1, v: 'a' },
51
+ { id: 5, v: 'e' },
52
+ { id: 3, v: 'c' },
53
+ ], [
54
+ { id: 2, v: 'b' },
55
+ { id: 1, v: '1K' },
56
+ ], {
57
+ clone: true,
58
+ comparator: (v1, v2) => v1.id === v2.id,
59
+ updater: (t, s) => {
60
+ t.v = s.v + '_' + t.id;
61
+ return t;
62
+ },
63
+ sorter: (v1, v2) => v1.id - v2.id,
64
+ });
65
+
66
+ expect(res.changed).toBe(3);
67
+ expect(res.result).toStrictEqual([
68
+ { id: 1, v: '1K_1' },
69
+ { id: 2, v: 'b' },
70
+ ]);
71
+ });
72
+ });
73
+ });
@@ -1,9 +1,14 @@
1
+ import { Comparator } from '../types';
2
+
3
+ export namespace Fields {
4
+ export type Getter<T> = (obj: Partial<T>) => T[keyof T];
5
+ export type Setter<T> = (obj: Partial<T>, val: T[keyof T]) => void;
6
+ export type Comparer<T> = (source: Partial<T>, target: Partial<T>) => boolean;
7
+ export type Updater<T> = (target: T, source: T) => T;
8
+ }
1
9
 
2
- export type Getter<T> = (obj: Partial<T>) => T[keyof T];
3
- export type Setter<T> = (obj: Partial<T>, val: T[keyof T]) => void;
4
- export type Comparer<T> = (source: Partial<T>, target: Partial<T>) => boolean;
5
10
 
6
- export function updateField<T>(target: T, source: Partial<T>, diff: Partial<T>, key: keyof T, hasChanged: Comparer<T> = null): boolean {
11
+ export function updateField<T>(target: T, source: Partial<T>, diff: Partial<T>, key: keyof T, hasChanged: Fields.Comparer<T> = null): boolean {
7
12
  return updateFieldExtended(target, source, diff, t => t[key], (t, v) => t[key] = v, hasChanged);
8
13
  }
9
14
 
@@ -11,9 +16,9 @@ export function updateFieldExtended<T>(
11
16
  target: T,
12
17
  source: Partial<T>,
13
18
  diff: Partial<T>,
14
- get: Getter<T>,
15
- set: Setter<T>,
16
- hasChanged: Comparer<T> = null,
19
+ get: Fields.Getter<T>,
20
+ set: Fields.Setter<T>,
21
+ hasChanged: Fields.Comparer<T> = null,
17
22
  ): boolean {
18
23
 
19
24
  hasChanged = hasChanged || ((v1: T, v2: T) => (get(v1) !== get(v2)));
@@ -30,32 +35,61 @@ export function updateFieldExtended<T>(
30
35
 
31
36
  }
32
37
 
33
- export function updateArray<T extends string>(current: T[] | null, updated: T[]): { changed: number, result: T[] } {
34
- if (!updated) {
35
- return { changed: 0, result: current };
38
+ const DefaultComparator: Comparator<any> = (v1, v2) => v1 === v2;
39
+ const DefaultUpdater: Fields.Updater<any> = (v1, v2) => Object.assign(v1, v2);
40
+
41
+ export type UpdateArrayOptions<T> = {
42
+ additive?: boolean,
43
+ clone?: boolean,
44
+ comparator?: Comparator<T>,
45
+ updater?: Fields.Updater<T>,
46
+ sorter?: Comparator<T, number> | null | undefined,
47
+ };
48
+
49
+ export function updateArray<T>(
50
+ target: T[] | null,
51
+ source: T[],
52
+ options?: UpdateArrayOptions<T>,
53
+ ): { changed: number, result: T[] } {
54
+ if (!source) {
55
+ return { changed: 0, result: target };
36
56
  }
37
57
 
38
58
  let changed = 0;
39
- const result = current || [];
59
+ const result = Array.isArray(target)
60
+ ? (options?.clone ? target.slice() : target)
61
+ : [];
62
+
63
+ const comparator = options?.comparator || DefaultComparator;
64
+ const updater = options?.updater || DefaultUpdater;
40
65
 
41
66
  // remove all missing elements
42
- for (let i = 0; i < result.length; ++i) {
43
- if (!updated.includes(result[i])) {
44
- result.splice(i, 1);
45
- ++changed;
46
- --i;
67
+ if (!options?.additive) {
68
+ for (let i = 0; i < result.length; ++i) {
69
+ if (source.find(item => comparator(item, result[i])) == null) {
70
+ result.splice(i, 1);
71
+ ++changed;
72
+ --i;
73
+ }
47
74
  }
48
75
  }
49
76
 
50
- // add all new elements
51
- updated.forEach(i => {
52
- if (!result.includes(i)) {
77
+ // add all new elements and update existing
78
+ source.forEach(i => {
79
+ const existingIndex = result.findIndex(item => comparator(i, item));
80
+ const existingItem = result[existingIndex];
81
+ if (existingIndex < 0) {
53
82
  result.push(i);
54
83
  ++changed;
84
+ } else if (typeof existingItem === 'object') {
85
+ result[existingIndex] = updater(existingItem, i);
55
86
  }
56
87
  });
57
88
 
58
- result.sort();
89
+ const sorter = options?.sorter;
90
+ if (sorter !== null) {
91
+ result.sort(sorter || undefined);
92
+ }
59
93
 
60
94
  return {
61
95
  result,
package/src/ident.ts ADDED
@@ -0,0 +1,8 @@
1
+
2
+ export type Ident<T, K extends keyof any = string> = T & {
3
+ id: K;
4
+ };
5
+
6
+ export type IdentAny = Ident<{}>;
7
+
8
+ export default Ident;
package/src/math/calc.ts CHANGED
@@ -64,3 +64,6 @@ export function random(min: number = 0, max: number = 1, trunc = true) {
64
64
  return trunc ? Math.trunc(res) : res;
65
65
  }
66
66
 
67
+ export function badRandomString(length = 12) {
68
+ return Math.random().toString(26).slice(2, clamp(length, 0, 12));
69
+ }
@@ -1,7 +1,7 @@
1
1
  import { reaction } from 'mobx';
2
2
  import { IEvent, Event } from './event';
3
3
  import { ILogger, createLogger } from './logger';
4
- import { IDisposable } from './unsubscriber';
4
+ import { IDisposable } from './disposer';
5
5
 
6
6
  export class TransitionObserver<T> implements IDisposable {
7
7
 
@@ -1,70 +1,11 @@
1
1
  import logger from './logger';
2
2
 
3
- export interface IDisposable {
4
- dispose(): void;
5
- }
6
-
7
- export interface Disposer {
8
- (): void;
9
- }
10
-
11
- export class Unsubscriber {
12
-
13
- private readonly _disposers: Disposer[] = [];
14
- private readonly _map = new Map<string, Disposer>();
15
-
16
- constructor(readonly logName: string = null) { }
17
-
18
- add(d: Disposer | IDisposable, id?: string) {
19
- if (!d) {
20
- return;
21
- }
22
-
23
- const dd: Disposer = typeof d !== 'function'
24
- ? (() => d.dispose ? d.dispose() : null)
25
- : d;
26
-
27
- this._disposers.push(dd);
28
-
29
- if (id) {
30
- // dispose previous identified disposer
31
- if (this._map.has(id)) {
32
- this.execute(id);
33
- }
34
-
35
- this._map.set(id, dd);
36
- }
37
- }
38
-
39
- execute(id: string) {
40
- const d = this._map.get(id);
41
- if (!d) {
42
- return;
43
- }
44
-
45
- this._map.delete(id);
46
- const i = this._disposers.indexOf(d);
47
- if (i >= 0) {
48
- this._disposers.splice(i, 1);
49
- }
50
-
51
- d();
52
- }
53
-
54
- dispose(log = false) {
55
- if (log) {
56
- logger.log(
57
- `[Disposer:${this.logName || '<unknown>'}] Disposing ${this._disposers.length} items including named ones:`,
58
- Array.from(this._map.entries()).map(e => e[0]),
59
- );
60
- }
61
-
62
- this._disposers.forEach(d => d());
63
- this._disposers.length = 0;
64
- this._map.clear();
65
- }
66
- }
67
-
68
- export function combineDisposers(...items: Disposer[]): Disposer {
69
- return () => items.forEach(i => i());
70
- }
3
+ export {
4
+ IDisposable,
5
+ DisposeFunction as Disposer,
6
+ combineDisposers,
7
+ Disposer as Unsubscriber,
8
+ Disposable,
9
+ } from './disposer';
10
+
11
+ logger.warn('@zajno/common: importing module "unsusbcriber" is deprecated; please change your import to "disposer" module.');