@zajno/common 1.2.8 → 1.3.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 (189) hide show
  1. package/coverage/clover.xml +587 -275
  2. package/coverage/coverage-final.json +39 -30
  3. package/coverage/lcov-report/NumberModel.ts.html +188 -0
  4. package/coverage/lcov-report/arrays.ts.html +602 -0
  5. package/coverage/lcov-report/calc.ts.html +278 -0
  6. package/coverage/lcov-report/enumHelper.ts.html +449 -0
  7. package/coverage/lcov-report/index.html +48 -33
  8. package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
  9. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +2 -2
  10. package/coverage/lcov-report/src/async/arrays.ts.html +5 -5
  11. package/coverage/lcov-report/src/async/index.html +1 -1
  12. package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
  13. package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
  14. package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
  15. package/coverage/lcov-report/src/dates/format.ts.html +1 -1
  16. package/coverage/lcov-report/src/dates/index.html +1 -1
  17. package/coverage/lcov-report/src/dates/index.ts.html +1 -1
  18. package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
  19. package/coverage/lcov-report/src/dates/period.ts.html +1 -1
  20. package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
  21. package/coverage/lcov-report/src/dates/types.ts.html +1 -1
  22. package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
  23. package/coverage/lcov-report/src/enumHelper.ts.html +11 -11
  24. package/coverage/lcov-report/src/event.ts.html +3 -3
  25. package/coverage/lcov-report/src/index.html +41 -11
  26. package/coverage/lcov-report/src/lazy.light.ts.html +155 -0
  27. package/coverage/lcov-report/src/logger/batch.ts.html +107 -0
  28. package/coverage/lcov-report/src/logger/console.ts.html +10 -25
  29. package/coverage/lcov-report/src/logger/index.html +54 -39
  30. package/coverage/lcov-report/src/logger/index.ts.html +88 -61
  31. package/coverage/lcov-report/src/logger/named.ts.html +31 -31
  32. package/coverage/lcov-report/src/logger/proxy.ts.html +13 -13
  33. package/coverage/lcov-report/src/math/arrays.ts.html +269 -32
  34. package/coverage/lcov-report/src/math/calc.ts.html +11 -11
  35. package/coverage/lcov-report/src/math/distribution.ts.html +2 -2
  36. package/coverage/lcov-report/src/math/index.html +11 -11
  37. package/coverage/lcov-report/src/math/index.ts.html +6 -6
  38. package/coverage/lcov-report/src/transitionObserver.ts.html +5 -5
  39. package/coverage/lcov-report/src/types.ts.html +158 -0
  40. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +22 -22
  41. package/coverage/lcov-report/src/validation/creditCard.ts.html +4 -4
  42. package/coverage/lcov-report/src/validation/helpers.ts.html +6 -6
  43. package/coverage/lcov-report/src/validation/index.html +1 -1
  44. package/coverage/lcov-report/src/validation/index.ts.html +6 -6
  45. package/coverage/lcov-report/src/validation/types.ts.html +2 -2
  46. package/coverage/lcov-report/src/validation/validators.ts.html +5 -5
  47. package/coverage/lcov-report/src/validation/wrappers.ts.html +5 -5
  48. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +212 -0
  49. package/coverage/lcov-report/src/viewModels/LabeledFlagModel.ts.html +137 -0
  50. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +563 -0
  51. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +197 -0
  52. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +464 -0
  53. package/coverage/lcov-report/src/viewModels/SelectViewModel.ts.html +437 -0
  54. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +329 -0
  55. package/coverage/lcov-report/src/viewModels/index.html +186 -0
  56. package/coverage/lcov-report/src/viewModels/labeled.ts.html +128 -0
  57. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +227 -0
  58. package/coverage/lcov-report/transitionObserver.ts.html +41 -77
  59. package/coverage/lcov.info +1128 -438
  60. package/lib/event.d.ts.map +1 -1
  61. package/lib/event.js +1 -1
  62. package/lib/event.js.map +1 -1
  63. package/lib/logger/batch.d.ts +3 -0
  64. package/lib/logger/batch.d.ts.map +1 -0
  65. package/lib/logger/batch.js +12 -0
  66. package/lib/logger/batch.js.map +1 -0
  67. package/lib/logger/console.d.ts +0 -1
  68. package/lib/logger/console.d.ts.map +1 -1
  69. package/lib/logger/console.js +0 -3
  70. package/lib/logger/console.js.map +1 -1
  71. package/lib/logger/file.d.ts +15 -0
  72. package/lib/logger/file.d.ts.map +1 -0
  73. package/lib/logger/file.js +43 -0
  74. package/lib/logger/file.js.map +1 -0
  75. package/lib/logger/index.d.ts +7 -6
  76. package/lib/logger/index.d.ts.map +1 -1
  77. package/lib/logger/index.js +34 -21
  78. package/lib/logger/index.js.map +1 -1
  79. package/lib/logger/named.js +3 -3
  80. package/lib/logger/named.js.map +1 -1
  81. package/lib/logger/proxy.d.ts +1 -1
  82. package/lib/logger/proxy.d.ts.map +1 -1
  83. package/lib/logger/proxy.js +2 -2
  84. package/lib/logger/proxy.js.map +1 -1
  85. package/lib/math/arrays.d.ts +15 -0
  86. package/lib/math/arrays.d.ts.map +1 -1
  87. package/lib/math/arrays.js +69 -1
  88. package/lib/math/arrays.js.map +1 -1
  89. package/lib/transitionObserver.d.ts.map +1 -1
  90. package/lib/transitionObserver.js +2 -2
  91. package/lib/transitionObserver.js.map +1 -1
  92. package/lib/types.d.ts +9 -0
  93. package/lib/types.d.ts.map +1 -1
  94. package/lib/types.js +18 -0
  95. package/lib/types.js.map +1 -1
  96. package/lib/viewModels/FlagModel.d.ts +19 -0
  97. package/lib/viewModels/FlagModel.d.ts.map +1 -0
  98. package/lib/viewModels/FlagModel.js +39 -0
  99. package/lib/viewModels/FlagModel.js.map +1 -0
  100. package/lib/viewModels/MultiSelectModel.d.ts +45 -0
  101. package/lib/viewModels/MultiSelectModel.d.ts.map +1 -0
  102. package/lib/viewModels/MultiSelectModel.js +162 -0
  103. package/lib/viewModels/MultiSelectModel.js.map +1 -0
  104. package/lib/viewModels/NumberModel.d.ts +18 -0
  105. package/lib/viewModels/NumberModel.d.ts.map +1 -0
  106. package/lib/viewModels/NumberModel.js +41 -0
  107. package/lib/viewModels/NumberModel.js.map +1 -0
  108. package/lib/viewModels/PromptModal.d.ts +31 -0
  109. package/lib/viewModels/PromptModal.d.ts.map +1 -0
  110. package/lib/viewModels/PromptModal.js +57 -0
  111. package/lib/viewModels/PromptModal.js.map +1 -0
  112. package/lib/viewModels/SelectModel.d.ts +33 -0
  113. package/lib/viewModels/SelectModel.d.ts.map +1 -0
  114. package/lib/viewModels/SelectModel.js +110 -0
  115. package/lib/viewModels/SelectModel.js.map +1 -0
  116. package/lib/viewModels/{TextInputViewModel.d.ts → TextModel.d.ts} +12 -10
  117. package/lib/viewModels/TextModel.d.ts.map +1 -0
  118. package/lib/viewModels/{TextInputViewModel.js → TextModel.js} +13 -28
  119. package/lib/viewModels/TextModel.js.map +1 -0
  120. package/lib/viewModels/Validatable.d.ts +9 -7
  121. package/lib/viewModels/Validatable.d.ts.map +1 -1
  122. package/lib/viewModels/Validatable.js +22 -8
  123. package/lib/viewModels/Validatable.js.map +1 -1
  124. package/lib/viewModels/ValuesCollector.d.ts +26 -0
  125. package/lib/viewModels/ValuesCollector.d.ts.map +1 -0
  126. package/lib/viewModels/ValuesCollector.js +51 -0
  127. package/lib/viewModels/ValuesCollector.js.map +1 -0
  128. package/lib/viewModels/index.d.ts +8 -5
  129. package/lib/viewModels/index.d.ts.map +1 -1
  130. package/lib/viewModels/index.js +8 -5
  131. package/lib/viewModels/index.js.map +1 -1
  132. package/lib/viewModels/types.d.ts +16 -0
  133. package/lib/viewModels/types.d.ts.map +1 -0
  134. package/lib/viewModels/types.js +3 -0
  135. package/lib/viewModels/types.js.map +1 -0
  136. package/lib/viewModels/wrappers.d.ts +12 -0
  137. package/lib/viewModels/wrappers.d.ts.map +1 -0
  138. package/lib/viewModels/wrappers.js +43 -0
  139. package/lib/viewModels/wrappers.js.map +1 -0
  140. package/package.json +1 -1
  141. package/src/event.ts +2 -2
  142. package/src/logger/__tests__/{index.test.ts → logger.test.ts} +97 -41
  143. package/src/logger/batch.ts +9 -0
  144. package/src/logger/console.ts +0 -5
  145. package/src/logger/file.ts +46 -0
  146. package/src/logger/index.ts +37 -28
  147. package/src/logger/named.ts +3 -3
  148. package/src/logger/proxy.ts +2 -2
  149. package/src/math/__tests__/arrays.test.ts +53 -0
  150. package/src/math/arrays.ts +79 -0
  151. package/src/transitionObserver.ts +2 -2
  152. package/src/types.ts +21 -0
  153. package/src/viewModels/FlagModel.ts +44 -0
  154. package/src/viewModels/MultiSelectModel.ts +161 -0
  155. package/src/viewModels/NumberModel.ts +39 -0
  156. package/src/viewModels/PromptModal.ts +65 -0
  157. package/src/viewModels/SelectModel.ts +128 -0
  158. package/src/viewModels/{TextInputViewModel.ts → TextModel.ts} +25 -28
  159. package/src/viewModels/Validatable.ts +26 -11
  160. package/src/viewModels/ValuesCollector.ts +81 -0
  161. package/src/viewModels/__tests__/multiSelect.test.ts +23 -0
  162. package/src/viewModels/__tests__/select.test.ts +71 -0
  163. package/src/viewModels/__tests__/wrappers.test.ts +79 -0
  164. package/src/viewModels/index.ts +10 -5
  165. package/src/viewModels/types.ts +19 -0
  166. package/src/viewModels/wrappers.ts +49 -0
  167. package/lib/viewModels/PromptModalViewModel.d.ts +0 -27
  168. package/lib/viewModels/PromptModalViewModel.d.ts.map +0 -1
  169. package/lib/viewModels/PromptModalViewModel.js +0 -56
  170. package/lib/viewModels/PromptModalViewModel.js.map +0 -1
  171. package/lib/viewModels/RadioButtonGroupViewModel.d.ts +0 -11
  172. package/lib/viewModels/RadioButtonGroupViewModel.d.ts.map +0 -1
  173. package/lib/viewModels/RadioButtonGroupViewModel.js +0 -51
  174. package/lib/viewModels/RadioButtonGroupViewModel.js.map +0 -1
  175. package/lib/viewModels/RadioButtonViewModel.d.ts +0 -9
  176. package/lib/viewModels/RadioButtonViewModel.d.ts.map +0 -1
  177. package/lib/viewModels/RadioButtonViewModel.js +0 -32
  178. package/lib/viewModels/RadioButtonViewModel.js.map +0 -1
  179. package/lib/viewModels/SelectViewModel.d.ts +0 -25
  180. package/lib/viewModels/SelectViewModel.d.ts.map +0 -1
  181. package/lib/viewModels/SelectViewModel.js +0 -88
  182. package/lib/viewModels/SelectViewModel.js.map +0 -1
  183. package/lib/viewModels/TextInputViewModel.d.ts.map +0 -1
  184. package/lib/viewModels/TextInputViewModel.js.map +0 -1
  185. package/src/viewModels/PromptModalViewModel.ts +0 -71
  186. package/src/viewModels/RadioButtonGroupViewModel.ts +0 -47
  187. package/src/viewModels/RadioButtonViewModel.ts +0 -26
  188. package/src/viewModels/SelectViewModel.ts +0 -88
  189. package/yarn-error.log +0 -3709
@@ -1,23 +1,25 @@
1
- import { ValidatableViewModel, ValidationConfig } from './Validatable';
2
- export declare type StringGetter = (() => string) | string;
1
+ import { Getter } from '../types';
2
+ import { IValueModel } from './types';
3
+ import { ValidatableModel, ValidationConfig } from './Validatable';
4
+ import { IResetableModel } from 'viewModels';
3
5
  export declare type TextInputConfig = {
4
- name?: StringGetter;
5
- title?: StringGetter;
6
- value?: StringGetter;
6
+ name?: Getter<string>;
7
+ title?: Getter<string>;
8
+ value?: Getter<string>;
7
9
  async?: boolean;
8
- validation?: ValidationConfig;
10
+ validation?: ValidationConfig<string>;
9
11
  noSubscribe?: boolean;
10
12
  };
11
13
  export declare class Text {
12
14
  private _value;
13
15
  constructor(config: {
14
- value: StringGetter;
16
+ value: Getter<string>;
15
17
  async?: boolean;
16
18
  noSubscribe?: boolean;
17
19
  });
18
20
  get value(): string;
19
21
  }
20
- export declare class TextInputVM extends ValidatableViewModel {
22
+ export declare class TextInputVM extends ValidatableModel implements IValueModel<string>, IResetableModel {
21
23
  private _value;
22
24
  private _focused;
23
25
  private _name;
@@ -33,6 +35,6 @@ export declare class TextInputVM extends ValidatableViewModel {
33
35
  set focused(val: boolean);
34
36
  protected get valueToValidate(): string;
35
37
  private onBlur;
36
- reset(): void;
38
+ reset: () => void;
37
39
  }
38
- //# sourceMappingURL=TextInputViewModel.d.ts.map
40
+ //# sourceMappingURL=TextModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextModel.d.ts","sourceRoot":"","sources":["../../src/viewModels/TextModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,oBAAY,eAAe,GAAG;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,UAAU,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAeF,qBAAa,IAAI;IAEb,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAKrF,IAAI,KAAK,WAA0B;CACtC;AAED,qBAAa,WAAY,SAAQ,gBAAiB,YAAW,WAAW,CAAC,MAAM,CAAC,EAAE,eAAe;IAE7F,OAAO,CAAC,MAAM,CAAM;IAGpB,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,KAAK,CAAgB;IAG7B,OAAO,CAAC,MAAM,CAAgB;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;gBAExC,MAAM,CAAC,EAAE,eAAe;IAYpC,IAAI,KAAK,WAA0B;IACnC,IAAI,IAAI,WAAyB;IACjC,IAAI,KAAK,WAA0B;IAEnC,IAAI,KAAK,CAAC,GAAG,QAAA,EAMZ;IAED,IACI,OAAO,YAEV;IAED,IAAI,OAAO,YAEV;IAED,IAAI,OAAO,CAAC,GAAG,SAAA,EAQd;IAED,SAAS,KAAK,eAAe,WAAwC;IAErE,OAAO,CAAC,MAAM;IAId,KAAK,aAIH;CAEL"}
@@ -3,24 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TextInputVM = exports.Text = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const mobx_1 = require("mobx");
6
+ const types_1 = require("../types");
6
7
  const logger_1 = tslib_1.__importDefault(require("../logger"));
7
8
  const Validatable_1 = require("./Validatable");
8
9
  function FromGetter(getter, setter, autorunDelay = null, noAutorun = null) {
9
- if (typeof getter === 'function') {
10
- if (noAutorun) {
11
- setter(getter());
12
- }
13
- else {
14
- mobx_1.autorun(() => {
15
- setter(getter());
16
- }, { delay: autorunDelay });
17
- return true;
18
- }
10
+ if (noAutorun || typeof getter !== 'function') {
11
+ setter(types_1.Getter.getValue(getter));
12
+ return null;
19
13
  }
20
- else if (typeof getter === 'string') {
21
- setter(getter);
22
- }
23
- return false;
14
+ return mobx_1.reaction(() => types_1.Getter.getValue(getter), setter, { delay: autorunDelay, fireImmediately: true });
24
15
  }
25
16
  class Text {
26
17
  constructor(config) {
@@ -35,7 +26,7 @@ tslib_1.__decorate([
35
26
  tslib_1.__metadata("design:type", String)
36
27
  ], Text.prototype, "_value", void 0);
37
28
  exports.Text = Text;
38
- class TextInputVM extends Validatable_1.ValidatableViewModel {
29
+ class TextInputVM extends Validatable_1.ValidatableModel {
39
30
  constructor(config) {
40
31
  super(config && config.validation);
41
32
  this._value = '';
@@ -43,6 +34,11 @@ class TextInputVM extends Validatable_1.ValidatableViewModel {
43
34
  this._name = null;
44
35
  this._title = null;
45
36
  this._valueObserving = null;
37
+ this.reset = () => {
38
+ this._value = '';
39
+ this._focused = false;
40
+ super.reset();
41
+ };
46
42
  mobx_1.makeObservable(this);
47
43
  config = config || {};
48
44
  const delay = config.async ? 100 : null;
@@ -75,15 +71,10 @@ class TextInputVM extends Validatable_1.ValidatableViewModel {
75
71
  }
76
72
  super.reset();
77
73
  }
78
- get valueToValidate() { return this.value; }
74
+ get valueToValidate() { var _a; return ((_a = this.value) !== null && _a !== void 0 ? _a : '').trim(); }
79
75
  onBlur() {
80
76
  this.validate();
81
77
  }
82
- reset() {
83
- this._value = '';
84
- this._focused = false;
85
- super.reset();
86
- }
87
78
  }
88
79
  tslib_1.__decorate([
89
80
  mobx_1.observable,
@@ -106,11 +97,5 @@ tslib_1.__decorate([
106
97
  tslib_1.__metadata("design:type", Object),
107
98
  tslib_1.__metadata("design:paramtypes", [])
108
99
  ], TextInputVM.prototype, "isEmpty", null);
109
- tslib_1.__decorate([
110
- mobx_1.action,
111
- tslib_1.__metadata("design:type", Function),
112
- tslib_1.__metadata("design:paramtypes", []),
113
- tslib_1.__metadata("design:returntype", void 0)
114
- ], TextInputVM.prototype, "reset", null);
115
100
  exports.TextInputVM = TextInputVM;
116
- //# sourceMappingURL=TextInputViewModel.js.map
101
+ //# sourceMappingURL=TextModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextModel.js","sourceRoot":"","sources":["../../src/viewModels/TextModel.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,25 @@
1
1
  import { ValidatorFunction, ValidatorFunctionAsync } from '../validation';
2
- export declare type ValueValidator = ValidatorFunction | ValidatorFunctionAsync;
2
+ export declare type ValueValidator<T> = ValidatorFunction<T> | ValidatorFunctionAsync<T>;
3
3
  export declare type ValidationErrorsStrings = {
4
4
  [code: number]: string;
5
5
  };
6
- export declare type ValidationConfig = {
7
- validator: ValueValidator;
6
+ export declare type ValidationConfig<T> = {
7
+ validator: ValueValidator<Readonly<T>>;
8
8
  errors: ValidationErrorsStrings;
9
9
  };
10
- export declare abstract class ValidatableViewModel {
10
+ export declare abstract class ValidatableModel<T = string> {
11
11
  private _validator;
12
12
  private _strings;
13
13
  private _error;
14
14
  private _validationError;
15
- constructor(config?: ValidationConfig);
16
- protected abstract get valueToValidate(): string;
15
+ constructor(config?: ValidationConfig<T>);
16
+ protected abstract get valueToValidate(): Readonly<T>;
17
17
  get isValid(): boolean;
18
18
  get error(): string;
19
+ setValidationConfig(config?: ValidationConfig<T>): this;
19
20
  validate(): Promise<boolean>;
21
+ getIsInvalid(): Promise<boolean>;
20
22
  reset(): void;
21
- static IsSomeInvalid(validatables: ValidatableViewModel[], stopOnFail?: boolean): Promise<boolean>;
23
+ static IsSomeInvalid(validatables: ReadonlyArray<Readonly<ValidatableModel>>, stopOnFail?: boolean): Promise<boolean>;
22
24
  }
23
25
  //# sourceMappingURL=Validatable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Validatable.d.ts","sourceRoot":"","sources":["../../src/viewModels/Validatable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAqC,MAAM,eAAe,CAAC;AAG7G,oBAAY,cAAc,GAAG,iBAAiB,GAAG,sBAAsB,CAAC;AACxE,oBAAY,uBAAuB,GAAG;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAEjE,oBAAY,gBAAgB,GAAG;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAE9F,8BAAsB,oBAAoB;IAEtC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,QAAQ,CAAiC;IAGjD,OAAO,CAAC,MAAM,CAAgB;IAE9B,OAAO,CAAC,gBAAgB,CAAyB;gBAErC,MAAM,CAAC,EAAE,gBAAgB;IAMrC,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,MAAM,CAAC;IAEjD,IAAI,OAAO,YAA2B;IAEtC,IAAI,KAAK,WAA0B;IAE7B,QAAQ;IAuBd,KAAK;WAKQ,aAAa,CAAC,YAAY,EAAE,oBAAoB,EAAE,EAAE,UAAU,UAAO;CAQrF"}
1
+ {"version":3,"file":"Validatable.d.ts","sourceRoot":"","sources":["../../src/viewModels/Validatable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAqC,MAAM,eAAe,CAAC;AAG7G,oBAAY,cAAc,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;AACjF,oBAAY,uBAAuB,GAAG;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAEjE,oBAAY,gBAAgB,CAAC,CAAC,IAAI;IAC9B,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,uBAAuB,CAAC;CACnC,CAAC;AAGF,8BAAsB,gBAAgB,CAAC,CAAC,GAAG,MAAM;IAE7C,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,QAAQ,CAAiC;IAGjD,OAAO,CAAC,MAAM,CAAgB;IAE9B,OAAO,CAAC,gBAAgB,CAAyB;gBAErC,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAKxC,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtD,IAAI,OAAO,YAA2B;IAEtC,IAAI,KAAK,WAA0B;IAE5B,mBAAmB,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAMjD,QAAQ;IAuBR,YAAY;IAMlB,KAAK;WAKQ,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,UAAU,UAAO;CAQxG"}
@@ -1,29 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ValidatableViewModel = void 0;
3
+ exports.ValidatableModel = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const mobx_1 = require("mobx");
6
6
  const validation_1 = require("../validation");
7
7
  const arrays_1 = require("../async/arrays");
8
- class ValidatableViewModel {
8
+ const EmptyValidator = () => validation_1.ValidationErrors.None;
9
+ class ValidatableModel {
9
10
  constructor(config) {
10
11
  this._validator = null;
11
12
  this._strings = null;
12
13
  this._error = null;
13
14
  this._validationError = null;
14
15
  mobx_1.makeObservable(this);
15
- this._validator = (config && config.validator) || (() => validation_1.ValidationErrors.None);
16
- this._strings = config && config.errors;
16
+ this.setValidationConfig(config);
17
17
  }
18
18
  get isValid() { return !this._error; }
19
19
  get error() { return this._error; }
20
+ setValidationConfig(config) {
21
+ this._validator = (config === null || config === void 0 ? void 0 : config.validator) || EmptyValidator;
22
+ this._strings = config === null || config === void 0 ? void 0 : config.errors;
23
+ return this;
24
+ }
20
25
  async validate() {
21
- var _a;
22
26
  if (!this._validator) {
23
27
  return true;
24
28
  }
25
29
  try {
26
- const valid = await this._validator(((_a = this.valueToValidate) !== null && _a !== void 0 ? _a : '').trim());
30
+ const valid = await this._validator(this.valueToValidate);
27
31
  this._validationError = valid === validation_1.ValidationErrors.None
28
32
  ? null
29
33
  : new validation_1.ValidationError('Unknown error', valid);
@@ -40,6 +44,10 @@ class ValidatableViewModel {
40
44
  }
41
45
  return this._validationError == null;
42
46
  }
47
+ async getIsInvalid() {
48
+ const valid = await this.validate();
49
+ return !valid;
50
+ }
43
51
  reset() {
44
52
  this._validationError = null;
45
53
  this._error = null;
@@ -55,6 +63,12 @@ class ValidatableViewModel {
55
63
  tslib_1.__decorate([
56
64
  mobx_1.observable,
57
65
  tslib_1.__metadata("design:type", String)
58
- ], ValidatableViewModel.prototype, "_error", void 0);
59
- exports.ValidatableViewModel = ValidatableViewModel;
66
+ ], ValidatableModel.prototype, "_error", void 0);
67
+ tslib_1.__decorate([
68
+ mobx_1.action,
69
+ tslib_1.__metadata("design:type", Function),
70
+ tslib_1.__metadata("design:paramtypes", []),
71
+ tslib_1.__metadata("design:returntype", void 0)
72
+ ], ValidatableModel.prototype, "reset", null);
73
+ exports.ValidatableModel = ValidatableModel;
60
74
  //# sourceMappingURL=Validatable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Validatable.js","sourceRoot":"","sources":["../../src/viewModels/Validatable.ts"],"names":[],"mappings":";;;;AAAA,+BAAkD;AAClD,8CAA6G;AAC7G,4CAA4C;AAO5C,MAAsB,oBAAoB;IAUtC,YAAY,MAAyB;QAR7B,eAAU,GAAmB,IAAI,CAAC;QAClC,aAAQ,GAA4B,IAAI,CAAC;QAGzC,WAAM,GAAW,IAAI,CAAC;QAEtB,qBAAgB,GAAoB,IAAI,CAAC;QAG7C,qBAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,6BAAgB,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;IAC5C,CAAC;IAID,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtC,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnC,KAAK,CAAC,QAAQ;;QACV,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO,IAAI,CAAC;SACf;QAED,IAAI;YACA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAC,IAAI,CAAC,eAAe,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,gBAAgB,GAAG,KAAK,KAAK,6BAAgB,CAAC,IAAI;gBACnD,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI,4BAAe,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;SACrD;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,gBAAgB,GAAG,GAAsB,CAAC;SAClD;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;aAAM;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACtD;QACD,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,KAAK;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,YAAoC,EAAE,UAAU,GAAG,IAAI;QAC9E,IAAI,UAAU,EAAE;YACZ,OAAO,kBAAS,CAAC,YAAY,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;SACpE;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;CACJ;AApDG;IADC,iBAAU;;oDACmB;AANlC,oDA0DC"}
1
+ {"version":3,"file":"Validatable.js","sourceRoot":"","sources":["../../src/viewModels/Validatable.ts"],"names":[],"mappings":";;;;AAAA,+BAA0D;AAC1D,8CAA6G;AAC7G,4CAA4C;AAU5C,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,6BAAgB,CAAC,IAAI,CAAC;AACnD,MAAsB,gBAAgB;IAUlC,YAAY,MAA4B;QARhC,eAAU,GAAgC,IAAI,CAAC;QAC/C,aAAQ,GAA4B,IAAI,CAAC;QAGzC,WAAM,GAAW,IAAI,CAAC;QAEtB,qBAAgB,GAAoB,IAAI,CAAC;QAG7C,qBAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAID,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtC,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5B,mBAAmB,CAAC,MAA4B;QACnD,IAAI,CAAC,UAAU,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,KAAI,cAAc,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO,IAAI,CAAC;SACf;QAED,IAAI;YACA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC1D,IAAI,CAAC,gBAAgB,GAAG,KAAK,KAAK,6BAAgB,CAAC,IAAI;gBACnD,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI,4BAAe,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;SACrD;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,gBAAgB,GAAG,GAAsB,CAAC;SAClD;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;aAAM;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACtD;QACD,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,YAAY;QACd,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC;IAClB,CAAC;IAGD,KAAK;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,YAAuD,EAAE,UAAU,GAAG,IAAI;QACjG,IAAI,UAAU,EAAE;YACZ,OAAO,kBAAS,CAAC,YAAY,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;SACpE;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;CACJ;AA/DG;IADC,iBAAU;;gDACmB;AAkD9B;IADC,aAAM;;;;6CAIN;AA3DL,4CAqEC"}
@@ -0,0 +1,26 @@
1
+ import { IValueModel } from './types';
2
+ export interface IValueCollector<TSource, TValue> {
3
+ getValue(source: TSource): TValue;
4
+ setValue(source: TSource, value: TValue): void;
5
+ }
6
+ declare type SimpleCollector<T> = {
7
+ get: () => T;
8
+ set: (t: T) => void;
9
+ };
10
+ export declare type ModelCollectorsMap<T> = {
11
+ [P in keyof T]?: IValueModel<T[P]>;
12
+ };
13
+ export declare type CollectorsMap<T> = {
14
+ [P in keyof T]?: SimpleCollector<T[P]>;
15
+ };
16
+ export declare class ModelCollector<T extends Object> {
17
+ private readonly _collectors;
18
+ addModels(models: ModelCollectorsMap<T>): this;
19
+ addModel<TKey extends keyof T, TSource extends IValueModel<T[TKey]>>(key: TKey, source: TSource): this;
20
+ addCollector<TKey extends keyof T, TModel, TCollector extends IValueCollector<TModel, T[TKey]>>(key: TKey, model: TModel, collector: TCollector): this;
21
+ remove(key: keyof T): this;
22
+ collect(): T;
23
+ populate(data: T): void;
24
+ }
25
+ export {};
26
+ //# sourceMappingURL=ValuesCollector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValuesCollector.d.ts","sourceRoot":"","sources":["../../src/viewModels/ValuesCollector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,eAAe,CAAC,OAAO,EAAE,MAAM;IAC5C,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD;AAED,aAAK,eAAe,CAAC,CAAC,IAAI;IACtB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;CACvB,CAAC;AAMF,oBAAY,kBAAkB,CAAC,CAAC,IAAI;KAC/B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACrC,CAAC;AAEF,oBAAY,aAAa,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACzC,CAAC;AAEF,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM;IAExC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAEpD,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAKvC,QAAQ,CAAC,IAAI,SAAS,MAAM,CAAC,EAAE,OAAO,SAAS,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO;IAS/F,YAAY,CAAC,IAAI,SAAS,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,SAAS,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;IAS/I,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;IAMnB,OAAO,IAAI,CAAC;IAYZ,QAAQ,CAAC,IAAI,EAAE,CAAC;CAW1B"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelCollector = void 0;
4
+ class ModelCollector {
5
+ constructor() {
6
+ this._collectors = {};
7
+ }
8
+ addModels(models) {
9
+ Object.entries(models).forEach(pair => this.addModel(pair[0], pair[1]));
10
+ return this;
11
+ }
12
+ addModel(key, source) {
13
+ this._collectors[key] = {
14
+ get: () => source.value,
15
+ set: v => { source.value = v; },
16
+ };
17
+ return this;
18
+ }
19
+ addCollector(key, model, collector) {
20
+ this._collectors[key] = {
21
+ get: () => collector.getValue(model),
22
+ set: v => collector.setValue(model, v),
23
+ };
24
+ return this;
25
+ }
26
+ remove(key) {
27
+ delete this._collectors[key];
28
+ return this;
29
+ }
30
+ collect() {
31
+ const res = {};
32
+ Object.entries(this._collectors).forEach(pair => {
33
+ const key = pair[0];
34
+ const collector = pair[1];
35
+ res[key] = collector.get();
36
+ });
37
+ return res;
38
+ }
39
+ populate(data) {
40
+ Object.entries(data).forEach(pair => {
41
+ const key = pair[0];
42
+ const value = pair[1];
43
+ const collector = this._collectors[key];
44
+ if (collector) {
45
+ collector.set(value);
46
+ }
47
+ });
48
+ }
49
+ }
50
+ exports.ModelCollector = ModelCollector;
51
+ //# sourceMappingURL=ValuesCollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValuesCollector.js","sourceRoot":"","sources":["../../src/viewModels/ValuesCollector.ts"],"names":[],"mappings":";;;AAwBA,MAAa,cAAc;IAA3B;QAEqB,gBAAW,GAA2B,EAAG,CAAC;IAsD/D,CAAC;IApDU,SAAS,CAAC,MAA6B;QAC1C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,QAAQ,CAA6D,GAAS,EAAE,MAAe;QAClG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG;YACpB,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK;YACvB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;SAClC,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAY,CAAoF,GAAS,EAAE,KAAa,EAAE,SAAqB;QAClJ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG;YACpB,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;SACzC,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,GAAY;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAE7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO;QACV,MAAM,GAAG,GAAG,EAAQ,CAAC;QAErB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAY,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAgC,CAAC;YACzD,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,QAAQ,CAAC,IAAO;QACnB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAY,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAe,CAAC;YAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,SAAS,EAAE;gBACX,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACxB;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAxDD,wCAwDC"}
@@ -1,7 +1,10 @@
1
- export * from './PromptModalViewModel';
2
- export * from './RadioButtonGroupViewModel';
3
- export * from './RadioButtonViewModel';
4
- export * from './SelectViewModel';
5
- export * from './TextInputViewModel';
1
+ export * from './types';
6
2
  export * from './Validatable';
3
+ export * from './TextModel';
4
+ export * from './FlagModel';
5
+ export * from './NumberModel';
6
+ export * from './wrappers';
7
+ export * from './SelectModel';
8
+ export * from './MultiSelectModel';
9
+ export * from './PromptModal';
7
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/viewModels/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/viewModels/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAE3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AAEnC,cAAc,eAAe,CAAC"}
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./PromptModalViewModel"), exports);
5
- tslib_1.__exportStar(require("./RadioButtonGroupViewModel"), exports);
6
- tslib_1.__exportStar(require("./RadioButtonViewModel"), exports);
7
- tslib_1.__exportStar(require("./SelectViewModel"), exports);
8
- tslib_1.__exportStar(require("./TextInputViewModel"), exports);
4
+ tslib_1.__exportStar(require("./types"), exports);
9
5
  tslib_1.__exportStar(require("./Validatable"), exports);
6
+ tslib_1.__exportStar(require("./TextModel"), exports);
7
+ tslib_1.__exportStar(require("./FlagModel"), exports);
8
+ tslib_1.__exportStar(require("./NumberModel"), exports);
9
+ tslib_1.__exportStar(require("./wrappers"), exports);
10
+ tslib_1.__exportStar(require("./SelectModel"), exports);
11
+ tslib_1.__exportStar(require("./MultiSelectModel"), exports);
12
+ tslib_1.__exportStar(require("./PromptModal"), exports);
10
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/viewModels/index.ts"],"names":[],"mappings":";;;AAAA,iEAAuC;AACvC,sEAA4C;AAC5C,iEAAuC;AACvC,4DAAkC;AAClC,+DAAqC;AACrC,wDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/viewModels/index.ts"],"names":[],"mappings":";;;AAAA,kDAAwB;AACxB,wDAA8B;AAC9B,sDAA4B;AAC5B,sDAA4B;AAC5B,wDAA8B;AAC9B,qDAA2B;AAE3B,wDAA8B;AAC9B,6DAAmC;AAEnC,wDAA8B"}
@@ -0,0 +1,16 @@
1
+ export interface IValueModel<TValue> {
2
+ value: TValue;
3
+ }
4
+ export interface ILabel<T> {
5
+ readonly label: T;
6
+ }
7
+ export interface IResetableModel {
8
+ readonly reset: () => void;
9
+ readonly isDefault?: boolean;
10
+ }
11
+ export interface ICountableModel {
12
+ readonly count: number;
13
+ readonly selectedCount?: number;
14
+ readonly isEmpty: boolean;
15
+ }
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/viewModels/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,WAAW,CAAC,MAAM;IAC/B,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM,CAAC,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC7B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/viewModels/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { Getter } from '../types';
2
+ import { ILabel, IValueModel } from './types';
3
+ export declare function withLabel<T, TModel extends IValueModel<T>, TLabel = string>(model: TModel, label: Getter<TLabel>): TModel & ILabel<TLabel>;
4
+ export declare function inject<T, TModel extends IValueModel<T>>(model: TModel, source: IValueModel<T>): TModel;
5
+ export declare function wrap<T, TModel extends IValueModel<T>, TRes>(model: TModel, getter: (m: TModel) => TRes, setter: (v: TRes, model: TModel) => void): IValueModel<TRes>;
6
+ declare type LabeledModel<T, TModel extends IValueModel<T>, TLabel = string> = TModel & ILabel<TLabel>;
7
+ interface LabeledModelCtor<T, TModel extends IValueModel<T>, TLabel = string> {
8
+ new (label?: Getter<TLabel>, initial?: T): LabeledModel<T, TModel, TLabel>;
9
+ }
10
+ export declare function mixinLabel<T, TModel extends IValueModel<T>, TLabel = string>(Superclass: new (initial?: T) => TModel): LabeledModelCtor<T, TModel, TLabel>;
11
+ export {};
12
+ //# sourceMappingURL=wrappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappers.d.ts","sourceRoot":"","sources":["../../src/viewModels/wrappers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,2BAShH;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,UAS7F;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAKpK;AAED,aAAK,YAAY,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE/F,UAAU,gBAAgB,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IACxE,KAAK,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9E;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAU1J"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mixinLabel = exports.wrap = exports.inject = exports.withLabel = void 0;
4
+ const types_1 = require("../types");
5
+ function withLabel(model, label) {
6
+ const _label = label;
7
+ Object.defineProperty(model, 'label', {
8
+ configurable: true,
9
+ enumerable: false,
10
+ get() { return types_1.Getter.getValue(_label); },
11
+ });
12
+ return model;
13
+ }
14
+ exports.withLabel = withLabel;
15
+ function inject(model, source) {
16
+ Object.defineProperty(model, 'value', {
17
+ configurable: true,
18
+ enumerable: false,
19
+ get() { return source.value; },
20
+ set(v) { source.value = v; },
21
+ });
22
+ return model;
23
+ }
24
+ exports.inject = inject;
25
+ function wrap(model, getter, setter) {
26
+ return {
27
+ get value() { return getter(model); },
28
+ set value(v) { setter(v, model); },
29
+ };
30
+ }
31
+ exports.wrap = wrap;
32
+ function mixinLabel(Superclass) {
33
+ // @ts-ignore
34
+ class Sub extends Superclass {
35
+ constructor(label, initial) {
36
+ super(initial);
37
+ withLabel(this, label);
38
+ }
39
+ }
40
+ return Sub;
41
+ }
42
+ exports.mixinLabel = mixinLabel;
43
+ //# sourceMappingURL=wrappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappers.js","sourceRoot":"","sources":["../../src/viewModels/wrappers.ts"],"names":[],"mappings":";;;AAAA,oCAAkC;AAGlC,SAAgB,SAAS,CAAoD,KAAa,EAAE,KAAqB;IAC7G,MAAM,MAAM,GAAG,KAAK,CAAC;IACrB,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;QAClC,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,KAAK;QACjB,GAAG,KAAK,OAAO,cAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC5C,CAAC,CAAC;IAEH,OAAO,KAAgC,CAAC;AAC5C,CAAC;AATD,8BASC;AAED,SAAgB,MAAM,CAAmC,KAAa,EAAE,MAAsB;IAC1F,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;QAClC,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,KAAK;QACjB,GAAG,KAAK,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,GAAG,CAAC,CAAI,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;KAClC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACjB,CAAC;AATD,wBASC;AAED,SAAgB,IAAI,CAAyC,KAAa,EAAE,MAA2B,EAAE,MAAwC;IAC7I,OAAO;QACH,IAAI,KAAK,KAAK,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,CAAO,IAAI,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;KAC3C,CAAC;AACN,CAAC;AALD,oBAKC;AAQD,SAAgB,UAAU,CAAoD,UAAuC;IACjH,aAAa;IACb,MAAM,GAAI,SAAQ,UAAU;QACxB,YAAY,KAAqB,EAAE,OAAW;YAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;YACf,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;KACJ;IAED,OAAO,GAAU,CAAC;AACtB,CAAC;AAVD,gCAUC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "1.2.8",
3
+ "version": "1.3.2",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "repository": {
6
6
  "type": "git",
package/src/event.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import './async/arrays';
2
2
  import { forEachAsync } from './async/arrays';
3
- import { ILogger, ConsoleLogger } from './logger';
3
+ import { ILogger, createLogger } from './logger';
4
4
 
5
5
  export type EventHandler<T = any> = (data?: T) => void | Promise<void>;
6
6
 
@@ -19,7 +19,7 @@ export class Event<T = any> implements IEvent<T> {
19
19
 
20
20
  constructor(loggerOrName?: ILogger | string) {
21
21
  this._logger = (!loggerOrName || typeof loggerOrName === 'string')
22
- ? new ConsoleLogger(`[Event:${loggerOrName || '?'}]`)
22
+ ? createLogger(`[Event:${loggerOrName || '?'}]`)
23
23
  : loggerOrName;
24
24
  }
25
25