@zajno/common 1.3.6 → 1.3.10

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 (103) hide show
  1. package/coverage/clover.xml +180 -168
  2. package/coverage/coverage-final.json +8 -8
  3. package/coverage/lcov-report/index.html +29 -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 +1 -1
  22. package/coverage/lcov-report/src/fields/update.ts.html +1 -1
  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 +14 -2
  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.info +349 -330
  54. package/lib/dates/calc.js +3 -3
  55. package/lib/dates/calc.js.map +1 -1
  56. package/lib/dates/convert.d.ts +0 -2
  57. package/lib/dates/convert.d.ts.map +1 -1
  58. package/lib/dates/convert.js +10 -20
  59. package/lib/dates/convert.js.map +1 -1
  60. package/lib/dates/format.d.ts.map +1 -1
  61. package/lib/dates/format.js +4 -3
  62. package/lib/dates/format.js.map +1 -1
  63. package/lib/dates/parse.d.ts +2 -0
  64. package/lib/dates/parse.d.ts.map +1 -1
  65. package/lib/dates/parse.js +12 -1
  66. package/lib/dates/parse.js.map +1 -1
  67. package/lib/dates/shift.js +6 -6
  68. package/lib/dates/shift.js.map +1 -1
  69. package/lib/dates/yearDate.js +3 -3
  70. package/lib/dates/yearDate.js.map +1 -1
  71. package/lib/disposer.d.ts +22 -0
  72. package/lib/disposer.d.ts.map +1 -0
  73. package/lib/disposer.js +65 -0
  74. package/lib/disposer.js.map +1 -0
  75. package/lib/math/calc.d.ts +1 -0
  76. package/lib/math/calc.d.ts.map +1 -1
  77. package/lib/math/calc.js +5 -1
  78. package/lib/math/calc.js.map +1 -1
  79. package/lib/transitionObserver.d.ts +1 -1
  80. package/lib/transitionObserver.d.ts.map +1 -1
  81. package/lib/types.d.ts +3 -0
  82. package/lib/types.d.ts.map +1 -1
  83. package/lib/unsubscriber.d.ts +1 -16
  84. package/lib/unsubscriber.d.ts.map +1 -1
  85. package/lib/unsubscriber.js +6 -49
  86. package/lib/unsubscriber.js.map +1 -1
  87. package/lib/viewModels/FlagModel.d.ts +2 -0
  88. package/lib/viewModels/FlagModel.d.ts.map +1 -1
  89. package/lib/viewModels/FlagModel.js +18 -0
  90. package/lib/viewModels/FlagModel.js.map +1 -1
  91. package/package.json +1 -1
  92. package/src/dates/calc.ts +1 -1
  93. package/src/dates/convert.ts +1 -12
  94. package/src/dates/format.ts +2 -1
  95. package/src/dates/parse.ts +12 -0
  96. package/src/dates/shift.ts +1 -1
  97. package/src/dates/yearDate.ts +1 -1
  98. package/src/disposer.ts +81 -0
  99. package/src/math/calc.ts +3 -0
  100. package/src/transitionObserver.ts +1 -1
  101. package/src/types.ts +4 -0
  102. package/src/unsubscriber.ts +9 -68
  103. package/src/viewModels/FlagModel.ts +14 -0
@@ -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.6",
3
+ "version": "1.3.10",
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
+ }
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
 
package/src/types.ts CHANGED
@@ -24,3 +24,7 @@ export type Comparator<T, C = boolean> = (v1: T, v2: T) => C;
24
24
  export namespace Comparator {
25
25
  export const Default: Comparator<any> = (a, b) => a === b;
26
26
  }
27
+
28
+ export type TypedKeys<T extends Object, K> = {
29
+ [P in keyof T]: T[P] extends K ? P : never
30
+ }[keyof T];
@@ -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.');
@@ -32,6 +32,20 @@ export class FlagModel implements IFlagModel, IFlagModelReadonly {
32
32
 
33
33
  get isDefault() { return this._value === false; }
34
34
 
35
+ @action
36
+ setTrue = () => {
37
+ const v = this.value;
38
+ this.value = true;
39
+ return !v;
40
+ };
41
+
42
+ @action
43
+ setFalse = () => {
44
+ const v = this.value;
45
+ this.value = false;
46
+ return v;
47
+ };
48
+
35
49
  @action
36
50
  toggle = () => {
37
51
  this._value = !this._value;