@zajno/common 1.5.4 → 1.5.7

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 (171) hide show
  1. package/coverage/clover.xml +451 -366
  2. package/coverage/coverage-final.json +38 -37
  3. package/coverage/lcov-report/async/index.html +12 -7
  4. package/coverage/lcov-report/async/timeout.ts.html +24 -19
  5. package/coverage/lcov-report/block-navigation.js +8 -0
  6. package/coverage/lcov-report/disposer.ts.html +376 -0
  7. package/coverage/lcov-report/enumHelper.ts.html +454 -0
  8. package/coverage/lcov-report/favicon.png +0 -0
  9. package/coverage/lcov-report/index.html +59 -39
  10. package/coverage/lcov-report/logger/index.html +116 -0
  11. package/coverage/lcov-report/logger/index.ts.html +298 -0
  12. package/coverage/lcov-report/parallel.ts.html +388 -0
  13. package/coverage/lcov-report/queue/index.html +116 -0
  14. package/coverage/lcov-report/queue/parallel.ts.html +409 -0
  15. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  16. package/coverage/lcov-report/sorter.js +26 -0
  17. package/coverage/lcov-report/src/__tests__/helpers/index.html +8 -3
  18. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +8 -3
  19. package/coverage/lcov-report/src/async/arrays.ts.html +15 -10
  20. package/coverage/lcov-report/src/async/index.html +13 -8
  21. package/coverage/lcov-report/src/async/timeout.ts.html +24 -19
  22. package/coverage/lcov-report/src/cache.ts.html +15 -10
  23. package/coverage/lcov-report/src/dates/calc.ts.html +10 -5
  24. package/coverage/lcov-report/src/dates/convert.ts.html +9 -4
  25. package/coverage/lcov-report/src/dates/datex.ts.html +8 -3
  26. package/coverage/lcov-report/src/dates/format.ts.html +10 -5
  27. package/coverage/lcov-report/src/dates/index.html +19 -14
  28. package/coverage/lcov-report/src/dates/index.ts.html +8 -3
  29. package/coverage/lcov-report/src/dates/parse.ts.html +9 -4
  30. package/coverage/lcov-report/src/dates/period.ts.html +8 -3
  31. package/coverage/lcov-report/src/dates/shift.ts.html +9 -4
  32. package/coverage/lcov-report/src/dates/types.ts.html +8 -3
  33. package/coverage/lcov-report/src/dates/yearDate.ts.html +10 -5
  34. package/coverage/lcov-report/src/disposer.ts.html +65 -21
  35. package/coverage/lcov-report/src/enumHelper.ts.html +12 -7
  36. package/coverage/lcov-report/src/event.ts.html +50 -21
  37. package/coverage/lcov-report/src/fields/index.html +21 -16
  38. package/coverage/lcov-report/src/fields/update.ts.html +49 -23
  39. package/coverage/lcov-report/src/functions.ts.html +10 -5
  40. package/coverage/lcov-report/src/index.html +52 -47
  41. package/coverage/lcov-report/src/lazy.light.ts.html +9 -4
  42. package/coverage/lcov-report/src/logger/batch.ts.html +9 -4
  43. package/coverage/lcov-report/src/logger/console.ts.html +16 -11
  44. package/coverage/lcov-report/src/logger/index.html +13 -8
  45. package/coverage/lcov-report/src/logger/index.ts.html +38 -33
  46. package/coverage/lcov-report/src/logger/named.ts.html +26 -21
  47. package/coverage/lcov-report/src/logger/proxy.ts.html +20 -15
  48. package/coverage/lcov-report/src/math/arrays.ts.html +33 -28
  49. package/coverage/lcov-report/src/math/calc.ts.html +18 -13
  50. package/coverage/lcov-report/src/math/distribution.ts.html +10 -5
  51. package/coverage/lcov-report/src/math/index.html +16 -11
  52. package/coverage/lcov-report/src/math/index.ts.html +14 -9
  53. package/coverage/lcov-report/src/observersMap.ts.html +12 -7
  54. package/coverage/lcov-report/src/observingCache.ts.html +12 -7
  55. package/coverage/lcov-report/src/queue/index.html +116 -0
  56. package/coverage/lcov-report/src/queue/parallel.ts.html +499 -0
  57. package/coverage/lcov-report/src/tempoCache.ts.html +9 -4
  58. package/coverage/lcov-report/src/transitionObserver.ts.html +14 -9
  59. package/coverage/lcov-report/src/types.ts.html +13 -8
  60. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +8 -3
  61. package/coverage/lcov-report/src/validation/creditCard.ts.html +8 -3
  62. package/coverage/lcov-report/src/validation/helpers.ts.html +13 -8
  63. package/coverage/lcov-report/src/validation/index.html +11 -6
  64. package/coverage/lcov-report/src/validation/index.ts.html +8 -3
  65. package/coverage/lcov-report/src/validation/types.ts.html +8 -3
  66. package/coverage/lcov-report/src/validation/validators.ts.html +10 -5
  67. package/coverage/lcov-report/src/validation/wrappers.ts.html +8 -3
  68. package/coverage/lcov-report/src/viewModels/CommonModel.ts.html +10 -5
  69. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +8 -3
  70. package/coverage/lcov-report/src/viewModels/LoadingModel.ts.html +10 -5
  71. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +13 -8
  72. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +8 -3
  73. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +10 -5
  74. package/coverage/lcov-report/src/viewModels/TextModel.ts.html +13 -8
  75. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +12 -7
  76. package/coverage/lcov-report/src/viewModels/index.html +22 -17
  77. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +8 -3
  78. package/coverage/lcov.info +598 -556
  79. package/lib/async/arrays.extend.js +4 -4
  80. package/lib/async/arrays.extend.js.map +1 -1
  81. package/lib/cache.js +6 -6
  82. package/lib/cache.js.map +1 -1
  83. package/lib/dates/calc.js +7 -7
  84. package/lib/dates/calc.js.map +1 -1
  85. package/lib/dates/convert.js +11 -11
  86. package/lib/dates/convert.js.map +1 -1
  87. package/lib/dates/format.js +6 -6
  88. package/lib/dates/format.js.map +1 -1
  89. package/lib/dates/period.js +2 -2
  90. package/lib/dates/period.js.map +1 -1
  91. package/lib/dates/shift.js +5 -5
  92. package/lib/dates/shift.js.map +1 -1
  93. package/lib/dates/yearDate.js +2 -2
  94. package/lib/dates/yearDate.js.map +1 -1
  95. package/lib/disposer.d.ts +4 -2
  96. package/lib/disposer.d.ts.map +1 -1
  97. package/lib/disposer.js +10 -5
  98. package/lib/disposer.js.map +1 -1
  99. package/lib/enumHelper.d.ts +2 -2
  100. package/lib/enumHelper.d.ts.map +1 -1
  101. package/lib/enumHelper.js.map +1 -1
  102. package/lib/event.d.ts.map +1 -1
  103. package/lib/event.js +8 -2
  104. package/lib/event.js.map +1 -1
  105. package/lib/fields/update.d.ts +5 -4
  106. package/lib/fields/update.d.ts.map +1 -1
  107. package/lib/fields/update.js +13 -7
  108. package/lib/fields/update.js.map +1 -1
  109. package/lib/lazy.js +2 -2
  110. package/lib/lazy.js.map +1 -1
  111. package/lib/logger/file.js.map +1 -1
  112. package/lib/logger/index.d.ts +1 -1
  113. package/lib/logger/index.d.ts.map +1 -1
  114. package/lib/logger/index.js +1 -1
  115. package/lib/logger/index.js.map +1 -1
  116. package/lib/math/arrays.js +2 -2
  117. package/lib/math/arrays.js.map +1 -1
  118. package/lib/models/EntityWithStatus.js.map +1 -1
  119. package/lib/observersMap.js +2 -2
  120. package/lib/observersMap.js.map +1 -1
  121. package/lib/observingCache.js +1 -1
  122. package/lib/observingCache.js.map +1 -1
  123. package/lib/pool.js +1 -1
  124. package/lib/pool.js.map +1 -1
  125. package/lib/queue/parallel.d.ts +22 -0
  126. package/lib/queue/parallel.d.ts.map +1 -0
  127. package/lib/queue/parallel.js +117 -0
  128. package/lib/queue/parallel.js.map +1 -0
  129. package/lib/services/localization/LocalizationManager.js +1 -1
  130. package/lib/services/localization/LocalizationManager.js.map +1 -1
  131. package/lib/services/storage/web/localStorage.js +1 -1
  132. package/lib/services/storage/web/localStorage.js.map +1 -1
  133. package/lib/services/storage/web/sessionStorage.js +1 -1
  134. package/lib/services/storage/web/sessionStorage.js.map +1 -1
  135. package/lib/transitionObserver.js +3 -3
  136. package/lib/transitionObserver.js.map +1 -1
  137. package/lib/validation/validators.js +1 -1
  138. package/lib/validation/validators.js.map +1 -1
  139. package/lib/validation/wrappers.js +1 -1
  140. package/lib/validation/wrappers.js.map +1 -1
  141. package/lib/viewModels/CommonModel.js +1 -1
  142. package/lib/viewModels/CommonModel.js.map +1 -1
  143. package/lib/viewModels/FlagModel.js +1 -1
  144. package/lib/viewModels/FlagModel.js.map +1 -1
  145. package/lib/viewModels/MultiSelectModel.js +5 -5
  146. package/lib/viewModels/MultiSelectModel.js.map +1 -1
  147. package/lib/viewModels/NumberModel.js +1 -1
  148. package/lib/viewModels/NumberModel.js.map +1 -1
  149. package/lib/viewModels/PromptModal.js +1 -1
  150. package/lib/viewModels/PromptModal.js.map +1 -1
  151. package/lib/viewModels/SelectModel.js +4 -4
  152. package/lib/viewModels/SelectModel.js.map +1 -1
  153. package/lib/viewModels/TextModel.js +3 -3
  154. package/lib/viewModels/TextModel.js.map +1 -1
  155. package/lib/viewModels/Validatable.js +3 -3
  156. package/lib/viewModels/Validatable.js.map +1 -1
  157. package/lib/viewModels/ValueModel.js +1 -1
  158. package/lib/viewModels/ValueModel.js.map +1 -1
  159. package/package.json +10 -11
  160. package/src/.DS_Store +0 -0
  161. package/src/disposer.ts +19 -6
  162. package/src/enumHelper.ts +2 -2
  163. package/src/event.ts +8 -0
  164. package/src/fields/update.ts +18 -11
  165. package/src/queue/__tests__/parallel.test.ts +57 -0
  166. package/src/queue/parallel.ts +138 -0
  167. package/src/services/storage/web/localStorage.ts +1 -1
  168. package/src/services/storage/web/sessionStorage.ts +1 -1
  169. package/src/validation/__tests__/validator.test.ts +12 -0
  170. package/src/validation/validators.ts +1 -1
  171. package/yarn.lock +1066 -1441
@@ -0,0 +1,138 @@
1
+ import { createLogger, ILogger } from '../logger';
2
+ import { Event } from '../event';
3
+
4
+ export type QueueItem = () => void | Promise<void>;
5
+
6
+ type Queue = QueueItem[];
7
+
8
+ export class ParallelQueue {
9
+
10
+ private readonly _queues: Record<number, Queue> = { };
11
+
12
+ private _inProgress: boolean = null;
13
+ private _currentIndex = 0;
14
+ private _maxIndex = 0;
15
+
16
+ private _logger: ILogger = null;
17
+
18
+ private readonly _beforePriorityRun = new Event<number>();
19
+ private readonly _afterPriorityRun = new Event<number>();
20
+
21
+ public get currentoPriority() { return this._currentIndex; }
22
+ public get inProgress() { return this._inProgress; }
23
+
24
+ public get beforePriorityRun() { return this._beforePriorityRun.expose(); }
25
+ public get afterPriorityRun() { return this._afterPriorityRun.expose(); }
26
+
27
+ public withLogger(name?: string) {
28
+ this._logger = createLogger(`[Queue:${name || '?'}]`);
29
+ return this;
30
+ }
31
+
32
+ /** @returns A callback that will try to cancel queued item */
33
+ public enqueue(cb: QueueItem, priority?: number): () => void {
34
+ const p = Math.round(priority || 0);
35
+
36
+ // if it's started and the priority has been processing already
37
+ // or it has just finished
38
+ if (this._inProgress && p <= this._currentIndex || this._inProgress === false) {
39
+ // just start the loader
40
+ this._executeLoader(cb, p, 1000);
41
+ return () => false;
42
+ }
43
+
44
+ // Enqueue for future execution
45
+ const q = this.getQueue(p);
46
+ q.push(cb);
47
+ this._maxIndex = Math.max(this._maxIndex, p);
48
+
49
+ // Return callback for removing the item from the queue
50
+ return () => {
51
+ // The processing has started and this queue has been passed already
52
+ if (this._inProgress != null && this._currentIndex >= p) {
53
+ return false;
54
+ }
55
+
56
+ // find and remove the item
57
+ const i = q.findIndex(qi => qi === cb);
58
+ if (i >= 0) {
59
+ q.splice(i, 1);
60
+ // return true if we're sure that the item hasn't been executed yet
61
+ return true;
62
+ }
63
+ return false;
64
+ };
65
+ }
66
+
67
+ public async start() {
68
+ if (this._inProgress) {
69
+ return undefined;
70
+ }
71
+
72
+ this._inProgress = true;
73
+ try {
74
+ await this.tryStartQueue();
75
+ } catch (err) {
76
+ this._logger?.warn('Failed to process queue:', err);
77
+ return false;
78
+ }
79
+
80
+ return true;
81
+ }
82
+
83
+ private getQueue(priority: number = 0) {
84
+ let q = this._queues[priority];
85
+ if (!q) {
86
+ q = [];
87
+ this._queues[priority] = q;
88
+ }
89
+
90
+ return q;
91
+ }
92
+
93
+ private async tryStartQueue() {
94
+ let current: QueueItem[] = null;
95
+ let iterations = 0;
96
+
97
+ await this._beforePriorityRun.triggerAsync(this._currentIndex);
98
+
99
+ while ((current = this._queues[this._currentIndex])?.length) {
100
+ if (iterations++ > 5) {
101
+ break;
102
+ }
103
+
104
+ this._logger?.log('Processing priority =', this._currentIndex, '; count =', current.length);
105
+
106
+ const items = current.slice();
107
+ current.length = 0;
108
+
109
+ await Promise.all(items.map((loader, index) => this._executeLoader(loader, this._currentIndex, index)));
110
+ }
111
+
112
+ if (!current?.length && iterations === 0) {
113
+ this._logger?.log('Skipping priority =', this._currentIndex, '; no items');
114
+ }
115
+
116
+ await this._afterPriorityRun.triggerAsync(this._currentIndex);
117
+
118
+ const next = this._currentIndex + 1;
119
+ if (next > this._maxIndex) {
120
+ // looks like we've finished!
121
+ this._inProgress = false;
122
+ this._logger?.log('Finished processing at index =', this._currentIndex);
123
+ return;
124
+ }
125
+
126
+ ++this._currentIndex;
127
+ await this.tryStartQueue();
128
+ }
129
+
130
+ private _executeLoader = async (l: QueueItem, priority: number, index?: number) => {
131
+ try {
132
+ await l();
133
+ } catch (err) {
134
+ this._logger?.warn('Failed to process queue item at priority =', priority, ' at index =', index || '?');
135
+ this._logger?.error(err);
136
+ }
137
+ };
138
+ }
@@ -4,7 +4,7 @@ import { WebStorage } from './webStorage';
4
4
 
5
5
  /* global window */
6
6
 
7
- if (typeof window === undefined) {
7
+ if (typeof window === 'undefined') {
8
8
  throw new Error("Can't use web/Storage module outside browser environment!");
9
9
  }
10
10
 
@@ -4,7 +4,7 @@ import { WebStorage } from './webStorage';
4
4
 
5
5
  /* global window */
6
6
 
7
- if (typeof window === undefined) {
7
+ if (typeof window === 'undefined') {
8
8
  throw new Error("Can't use web/Storage module outside browser environment!");
9
9
  }
10
10
 
@@ -92,4 +92,16 @@ describe('validation websites', () => {
92
92
  it('valid website with directory path', () => {
93
93
  expect(validation.Validators.website('http://www.regexbuddy.com/index.html?source=library')).toEqual(ValidationErrors.None);
94
94
  });
95
+
96
+ it('valid website with many dashes', () => {
97
+ expect(validation.Validators.website('https://www.test-test-test-test.com')).toEqual(ValidationErrors.None);
98
+ });
99
+
100
+ it('valid website with short domain', () => {
101
+ expect(validation.Validators.website('https://t.me')).toEqual(ValidationErrors.None);
102
+ });
103
+
104
+ it('test url with few dashes in a row', () => {
105
+ expect(validation.Validators.website('https://dashedurl-------.com')).toEqual(ValidationErrors.Website);
106
+ });
95
107
  });
@@ -22,7 +22,7 @@ export const ValidatorsRegExps = {
22
22
  expiryDateCard: /^\d+$/,
23
23
  cvv: /^\d+$/,
24
24
  // eslint-disable-next-line no-useless-escape
25
- website: /^(https?:\/\/)?([a-z0-9]+([a-z0-9\-]+\.))+[a-z]{2,}(:[0-9]{1,})?(\/.*)?$/i,
25
+ website: /^(https?:\/\/)?([a-z0-9]+((((-?[a-z0-9]{2,})+)?)\.))+[a-z]{2,}(:[0-9]{1,})?(\/.*)?$/i,
26
26
  linkedin: /^(https?:\/\/)?([a-z]+\d*[a-z]*\.)?linkedin\.com\/.*$/i,
27
27
  };
28
28