@develia/commons 0.4.16 → 0.4.19

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 (287) hide show
  1. package/dist/cjs/array.js +22 -2
  2. package/dist/cjs/array.js.map +1 -1
  3. package/dist/cjs/async-pool-executor.js +26 -11
  4. package/dist/cjs/async-pool-executor.js.map +1 -1
  5. package/dist/cjs/browser/form-utilities.js +35 -34
  6. package/dist/cjs/browser/form-utilities.js.map +1 -1
  7. package/dist/cjs/browser/geo-location.js +1 -1
  8. package/dist/cjs/browser/geo-location.js.map +1 -1
  9. package/dist/cjs/browser/index.js +0 -0
  10. package/dist/cjs/browser/index.js.map +0 -0
  11. package/dist/cjs/browser/native-bridge.js +3 -1
  12. package/dist/cjs/browser/native-bridge.js.map +1 -1
  13. package/dist/cjs/cancellable-promise.js +34 -13
  14. package/dist/cjs/cancellable-promise.js.map +1 -1
  15. package/dist/cjs/clean-url-search-params.js +26 -3
  16. package/dist/cjs/clean-url-search-params.js.map +1 -1
  17. package/dist/cjs/collections/cache-dictionary.js +3 -3
  18. package/dist/cjs/collections/cache-dictionary.js.map +1 -1
  19. package/dist/cjs/collections/default-map.js +0 -0
  20. package/dist/cjs/collections/default-map.js.map +1 -1
  21. package/dist/cjs/collections/default-weak-map.js +0 -0
  22. package/dist/cjs/collections/default-weak-map.js.map +1 -1
  23. package/dist/cjs/collections/from.js +3 -3
  24. package/dist/cjs/collections/from.js.map +1 -1
  25. package/dist/cjs/collections/index.js +0 -0
  26. package/dist/cjs/collections/index.js.map +1 -1
  27. package/dist/cjs/draft.js +46 -11
  28. package/dist/cjs/draft.js.map +1 -1
  29. package/dist/cjs/event-bus.js +1 -1
  30. package/dist/cjs/event-bus.js.map +1 -1
  31. package/dist/cjs/functions.js +348 -0
  32. package/dist/cjs/functions.js.map +1 -0
  33. package/dist/cjs/index.js +1 -0
  34. package/dist/cjs/index.js.map +1 -1
  35. package/dist/cjs/key-value-pair.js +0 -0
  36. package/dist/cjs/key-value-pair.js.map +1 -1
  37. package/dist/cjs/lazy.js +0 -0
  38. package/dist/cjs/lazy.js.map +1 -1
  39. package/dist/cjs/math.js +3 -0
  40. package/dist/cjs/math.js.map +1 -1
  41. package/dist/cjs/order.js +0 -0
  42. package/dist/cjs/order.js.map +1 -1
  43. package/dist/cjs/parse.js +10 -1
  44. package/dist/cjs/parse.js.map +1 -1
  45. package/dist/cjs/patch.js +0 -0
  46. package/dist/cjs/patch.js.map +1 -1
  47. package/dist/cjs/range.js +0 -0
  48. package/dist/cjs/range.js.map +0 -0
  49. package/dist/cjs/stopwatch.js +0 -0
  50. package/dist/cjs/stopwatch.js.map +1 -1
  51. package/dist/cjs/string.js +8 -5
  52. package/dist/cjs/string.js.map +1 -1
  53. package/dist/cjs/timer.js +1 -1
  54. package/dist/cjs/timer.js.map +1 -1
  55. package/dist/cjs/timespan.js +21 -8
  56. package/dist/cjs/timespan.js.map +1 -1
  57. package/dist/cjs/type-code.js +0 -0
  58. package/dist/cjs/type-code.js.map +1 -1
  59. package/dist/cjs/type.js +20 -19
  60. package/dist/cjs/type.js.map +1 -1
  61. package/dist/cjs/types.js +0 -0
  62. package/dist/cjs/types.js.map +1 -1
  63. package/dist/cjs/utilities.js +175 -39
  64. package/dist/cjs/utilities.js.map +1 -1
  65. package/dist/esm/array.js +21 -2
  66. package/dist/esm/array.js.map +1 -1
  67. package/dist/esm/async-pool-executor.js +26 -11
  68. package/dist/esm/async-pool-executor.js.map +1 -1
  69. package/dist/esm/browser/form-utilities.js +35 -34
  70. package/dist/esm/browser/form-utilities.js.map +1 -1
  71. package/dist/esm/browser/geo-location.js +1 -1
  72. package/dist/esm/browser/geo-location.js.map +1 -1
  73. package/dist/esm/browser/index.js +0 -0
  74. package/dist/esm/browser/index.js.map +0 -0
  75. package/dist/esm/browser/native-bridge.js +3 -1
  76. package/dist/esm/browser/native-bridge.js.map +1 -1
  77. package/dist/esm/cancellable-promise.js +34 -13
  78. package/dist/esm/cancellable-promise.js.map +1 -1
  79. package/dist/esm/clean-url-search-params.js +26 -3
  80. package/dist/esm/clean-url-search-params.js.map +1 -1
  81. package/dist/esm/collections/cache-dictionary.js +3 -3
  82. package/dist/esm/collections/cache-dictionary.js.map +1 -1
  83. package/dist/esm/collections/default-map.js +0 -0
  84. package/dist/esm/collections/default-map.js.map +1 -1
  85. package/dist/esm/collections/default-weak-map.js +0 -0
  86. package/dist/esm/collections/default-weak-map.js.map +1 -1
  87. package/dist/esm/collections/from.js +3 -3
  88. package/dist/esm/collections/from.js.map +1 -1
  89. package/dist/esm/collections/index.js +0 -0
  90. package/dist/esm/collections/index.js.map +1 -1
  91. package/dist/esm/draft.js +46 -11
  92. package/dist/esm/draft.js.map +1 -1
  93. package/dist/esm/event-bus.js +1 -1
  94. package/dist/esm/event-bus.js.map +1 -1
  95. package/dist/esm/functions.js +336 -0
  96. package/dist/esm/functions.js.map +1 -0
  97. package/dist/esm/index.js +1 -0
  98. package/dist/esm/index.js.map +1 -1
  99. package/dist/esm/key-value-pair.js +0 -0
  100. package/dist/esm/key-value-pair.js.map +1 -1
  101. package/dist/esm/lazy.js +0 -0
  102. package/dist/esm/lazy.js.map +1 -1
  103. package/dist/esm/math.js +3 -0
  104. package/dist/esm/math.js.map +1 -1
  105. package/dist/esm/order.js +0 -0
  106. package/dist/esm/order.js.map +1 -1
  107. package/dist/esm/parse.js +10 -1
  108. package/dist/esm/parse.js.map +1 -1
  109. package/dist/esm/patch.js +0 -0
  110. package/dist/esm/patch.js.map +1 -1
  111. package/dist/esm/range.js +0 -0
  112. package/dist/esm/range.js.map +0 -0
  113. package/dist/esm/stopwatch.js +0 -0
  114. package/dist/esm/stopwatch.js.map +1 -1
  115. package/dist/esm/string.js +8 -5
  116. package/dist/esm/string.js.map +1 -1
  117. package/dist/esm/timer.js +1 -1
  118. package/dist/esm/timer.js.map +1 -1
  119. package/dist/esm/timespan.js +21 -8
  120. package/dist/esm/timespan.js.map +1 -1
  121. package/dist/esm/type-code.js +0 -0
  122. package/dist/esm/type-code.js.map +1 -1
  123. package/dist/esm/type.js +20 -19
  124. package/dist/esm/type.js.map +1 -1
  125. package/dist/esm/types.js +0 -0
  126. package/dist/esm/types.js.map +1 -1
  127. package/dist/esm/utilities.js +174 -39
  128. package/dist/esm/utilities.js.map +1 -1
  129. package/dist/types/array.d.ts +20 -0
  130. package/dist/types/array.d.ts.map +1 -1
  131. package/dist/types/async-pool-executor.d.ts +2 -2
  132. package/dist/types/async-pool-executor.d.ts.map +1 -1
  133. package/dist/types/browser/form-utilities.d.ts +0 -0
  134. package/dist/types/browser/form-utilities.d.ts.map +1 -1
  135. package/dist/types/browser/geo-location.d.ts +0 -0
  136. package/dist/types/browser/geo-location.d.ts.map +0 -0
  137. package/dist/types/browser/index.d.ts +0 -0
  138. package/dist/types/browser/index.d.ts.map +0 -0
  139. package/dist/types/browser/native-bridge.d.ts +0 -0
  140. package/dist/types/browser/native-bridge.d.ts.map +1 -1
  141. package/dist/types/cancellable-promise.d.ts +0 -0
  142. package/dist/types/cancellable-promise.d.ts.map +1 -1
  143. package/dist/types/clean-url-search-params.d.ts +3 -1
  144. package/dist/types/clean-url-search-params.d.ts.map +1 -1
  145. package/dist/types/collections/cache-dictionary.d.ts +0 -0
  146. package/dist/types/collections/cache-dictionary.d.ts.map +0 -0
  147. package/dist/types/collections/default-map.d.ts +0 -0
  148. package/dist/types/collections/default-map.d.ts.map +0 -0
  149. package/dist/types/collections/default-weak-map.d.ts +0 -0
  150. package/dist/types/collections/default-weak-map.d.ts.map +0 -0
  151. package/dist/types/collections/from.d.ts +1 -1
  152. package/dist/types/collections/from.d.ts.map +0 -0
  153. package/dist/types/collections/index.d.ts +0 -0
  154. package/dist/types/collections/index.d.ts.map +0 -0
  155. package/dist/types/draft.d.ts +0 -0
  156. package/dist/types/draft.d.ts.map +1 -1
  157. package/dist/types/event-bus.d.ts +0 -0
  158. package/dist/types/event-bus.d.ts.map +0 -0
  159. package/dist/types/functions.d.ts +231 -0
  160. package/dist/types/functions.d.ts.map +1 -0
  161. package/dist/types/index.d.ts +1 -0
  162. package/dist/types/index.d.ts.map +1 -1
  163. package/dist/types/key-value-pair.d.ts +0 -0
  164. package/dist/types/key-value-pair.d.ts.map +0 -0
  165. package/dist/types/lazy.d.ts +0 -0
  166. package/dist/types/lazy.d.ts.map +0 -0
  167. package/dist/types/math.d.ts +0 -0
  168. package/dist/types/math.d.ts.map +1 -1
  169. package/dist/types/order.d.ts +0 -0
  170. package/dist/types/order.d.ts.map +0 -0
  171. package/dist/types/parse.d.ts +0 -0
  172. package/dist/types/parse.d.ts.map +1 -1
  173. package/dist/types/patch.d.ts +0 -0
  174. package/dist/types/patch.d.ts.map +0 -0
  175. package/dist/types/range.d.ts +0 -0
  176. package/dist/types/range.d.ts.map +0 -0
  177. package/dist/types/stopwatch.d.ts +0 -0
  178. package/dist/types/stopwatch.d.ts.map +0 -0
  179. package/dist/types/string.d.ts +0 -0
  180. package/dist/types/string.d.ts.map +1 -1
  181. package/dist/types/timer.d.ts +1 -1
  182. package/dist/types/timer.d.ts.map +0 -0
  183. package/dist/types/timespan.d.ts +0 -0
  184. package/dist/types/timespan.d.ts.map +1 -1
  185. package/dist/types/type-code.d.ts +0 -0
  186. package/dist/types/type-code.d.ts.map +0 -0
  187. package/dist/types/type.d.ts +2 -0
  188. package/dist/types/type.d.ts.map +1 -1
  189. package/dist/types/types.d.ts +1 -1
  190. package/dist/types/types.d.ts.map +1 -1
  191. package/dist/types/utilities.d.ts +21 -3
  192. package/dist/types/utilities.d.ts.map +1 -1
  193. package/dist/web/array.js +21 -2
  194. package/dist/web/array.js.map +1 -1
  195. package/dist/web/async-pool-executor.js +26 -11
  196. package/dist/web/async-pool-executor.js.map +1 -1
  197. package/dist/web/browser/form-utilities.js +35 -34
  198. package/dist/web/browser/form-utilities.js.map +1 -1
  199. package/dist/web/browser/geo-location.js +1 -1
  200. package/dist/web/browser/geo-location.js.map +1 -1
  201. package/dist/web/browser/index.js +0 -0
  202. package/dist/web/browser/index.js.map +0 -0
  203. package/dist/web/browser/native-bridge.js +3 -1
  204. package/dist/web/browser/native-bridge.js.map +1 -1
  205. package/dist/web/cancellable-promise.js +34 -13
  206. package/dist/web/cancellable-promise.js.map +1 -1
  207. package/dist/web/clean-url-search-params.js +26 -3
  208. package/dist/web/clean-url-search-params.js.map +1 -1
  209. package/dist/web/collections/cache-dictionary.js +3 -3
  210. package/dist/web/collections/cache-dictionary.js.map +1 -1
  211. package/dist/web/collections/default-map.js +0 -0
  212. package/dist/web/collections/default-map.js.map +1 -1
  213. package/dist/web/collections/default-weak-map.js +0 -0
  214. package/dist/web/collections/default-weak-map.js.map +1 -1
  215. package/dist/web/collections/from.js +3 -3
  216. package/dist/web/collections/from.js.map +1 -1
  217. package/dist/web/collections/index.js +0 -0
  218. package/dist/web/collections/index.js.map +1 -1
  219. package/dist/web/draft.js +46 -11
  220. package/dist/web/draft.js.map +1 -1
  221. package/dist/web/event-bus.js +1 -1
  222. package/dist/web/event-bus.js.map +1 -1
  223. package/dist/web/functions.js +336 -0
  224. package/dist/web/functions.js.map +1 -0
  225. package/dist/web/index.js +1 -0
  226. package/dist/web/index.js.map +1 -1
  227. package/dist/web/key-value-pair.js +0 -0
  228. package/dist/web/key-value-pair.js.map +1 -1
  229. package/dist/web/lazy.js +0 -0
  230. package/dist/web/lazy.js.map +1 -1
  231. package/dist/web/math.js +3 -0
  232. package/dist/web/math.js.map +1 -1
  233. package/dist/web/order.js +0 -0
  234. package/dist/web/order.js.map +1 -1
  235. package/dist/web/parse.js +10 -1
  236. package/dist/web/parse.js.map +1 -1
  237. package/dist/web/patch.js +0 -0
  238. package/dist/web/patch.js.map +1 -1
  239. package/dist/web/range.js +0 -0
  240. package/dist/web/range.js.map +0 -0
  241. package/dist/web/stopwatch.js +0 -0
  242. package/dist/web/stopwatch.js.map +1 -1
  243. package/dist/web/string.js +8 -5
  244. package/dist/web/string.js.map +1 -1
  245. package/dist/web/timer.js +1 -1
  246. package/dist/web/timer.js.map +1 -1
  247. package/dist/web/timespan.js +21 -8
  248. package/dist/web/timespan.js.map +1 -1
  249. package/dist/web/type-code.js +0 -0
  250. package/dist/web/type-code.js.map +1 -1
  251. package/dist/web/type.js +20 -19
  252. package/dist/web/type.js.map +1 -1
  253. package/dist/web/types.js +0 -0
  254. package/dist/web/types.js.map +1 -1
  255. package/dist/web/utilities.js +174 -39
  256. package/dist/web/utilities.js.map +1 -1
  257. package/package.json +84 -60
  258. package/src/array.ts +116 -84
  259. package/src/async-pool-executor.ts +107 -85
  260. package/src/browser/form-utilities.ts +32 -31
  261. package/src/browser/geo-location.ts +113 -113
  262. package/src/browser/native-bridge.ts +118 -116
  263. package/src/cancellable-promise.ts +102 -76
  264. package/src/clean-url-search-params.ts +36 -11
  265. package/src/collections/cache-dictionary.ts +115 -115
  266. package/src/collections/default-map.ts +48 -48
  267. package/src/collections/default-weak-map.ts +51 -51
  268. package/src/collections/from.ts +859 -859
  269. package/src/collections/index.ts +3 -3
  270. package/src/draft.ts +55 -16
  271. package/src/event-bus.ts +83 -83
  272. package/src/functions.ts +496 -0
  273. package/src/index.ts +1 -0
  274. package/src/key-value-pair.ts +24 -24
  275. package/src/lazy.ts +32 -32
  276. package/src/math.ts +33 -30
  277. package/src/order.ts +5 -5
  278. package/src/parse.ts +251 -240
  279. package/src/patch.ts +79 -79
  280. package/src/stopwatch.ts +43 -43
  281. package/src/string.ts +8 -5
  282. package/src/timer.ts +67 -67
  283. package/src/timespan.ts +412 -398
  284. package/src/type-code.ts +15 -15
  285. package/src/type.ts +372 -371
  286. package/src/types.ts +34 -30
  287. package/src/utilities.ts +653 -480
package/src/stopwatch.ts CHANGED
@@ -1,43 +1,43 @@
1
- import TimeSpan from "./timespan.js";
2
-
3
- export default class Stopwatch {
4
- private startTime: number | null = null;
5
- private elapsedTime: number | null = null;
6
-
7
- /*static measure<T>(callback: () => T, measure: { value: TimeSpan | null }): T {
8
- const stopwatch = new Stopwatch();
9
- stopwatch.start();
10
- try {
11
- return callback();
12
- } finally {
13
- stopwatch.stop();
14
- measure.value = stopwatch.getElapsedTime();
15
- }
16
- }*/
17
-
18
- start(): void {
19
- this.startTime = performance.now();
20
- this.elapsedTime = null;
21
- }
22
-
23
- stop(): void {
24
- if (this.startTime !== null) {
25
- this.elapsedTime = performance.now() - this.startTime;
26
- this.startTime = null;
27
- }
28
- }
29
-
30
- resume(): void {
31
- if (this.elapsedTime !== null) {
32
- this.startTime = performance.now() - this.elapsedTime;
33
- this.elapsedTime = null;
34
- }
35
- }
36
-
37
- getElapsedTime(): TimeSpan {
38
- if (this.startTime !== null) {
39
- return TimeSpan.fromMilliseconds(performance.now() - this.startTime);
40
- }
41
- return TimeSpan.fromMilliseconds(this.elapsedTime ?? 0.0);
42
- }
43
- }
1
+ import TimeSpan from "./timespan.js";
2
+
3
+ export default class Stopwatch {
4
+ private startTime: number | null = null;
5
+ private elapsedTime: number | null = null;
6
+
7
+ /*static measure<T>(callback: () => T, measure: { value: TimeSpan | null }): T {
8
+ const stopwatch = new Stopwatch();
9
+ stopwatch.start();
10
+ try {
11
+ return callback();
12
+ } finally {
13
+ stopwatch.stop();
14
+ measure.value = stopwatch.getElapsedTime();
15
+ }
16
+ }*/
17
+
18
+ start(): void {
19
+ this.startTime = performance.now();
20
+ this.elapsedTime = null;
21
+ }
22
+
23
+ stop(): void {
24
+ if (this.startTime !== null) {
25
+ this.elapsedTime = performance.now() - this.startTime;
26
+ this.startTime = null;
27
+ }
28
+ }
29
+
30
+ resume(): void {
31
+ if (this.elapsedTime !== null) {
32
+ this.startTime = performance.now() - this.elapsedTime;
33
+ this.elapsedTime = null;
34
+ }
35
+ }
36
+
37
+ getElapsedTime(): TimeSpan {
38
+ if (this.startTime !== null) {
39
+ return TimeSpan.fromMilliseconds(performance.now() - this.startTime);
40
+ }
41
+ return TimeSpan.fromMilliseconds(this.elapsedTime ?? 0.0);
42
+ }
43
+ }
package/src/string.ts CHANGED
@@ -36,7 +36,8 @@ export function ensureSuffix(str: string, suffix: string): string {
36
36
  export function format(template: string, ...args: any[]): string {
37
37
 
38
38
  let regex: RegExp;
39
- if (args.length === 1 && typeof args[0] === 'object') {
39
+ const hasNamedPlaceholders = /{(?!\d+})[^{}]+}/.test(template);
40
+ if (args.length === 1 && args[0] !== null && typeof args[0] === 'object' && hasNamedPlaceholders) {
40
41
  args = args[0];
41
42
  regex = /{(.+?)}/g;
42
43
  } else {
@@ -44,7 +45,9 @@ export function format(template: string, ...args: any[]): string {
44
45
  }
45
46
 
46
47
  return template.replace(regex, (match, key) => {
47
- return typeof args[key] !== 'undefined' ? args[key] : "";
48
+ return Object.prototype.hasOwnProperty.call(args, key) && typeof args[key] !== 'undefined'
49
+ ? args[key]
50
+ : "";
48
51
  });
49
52
  }
50
53
 
@@ -61,11 +64,11 @@ function toWords(str: string): string[] {
61
64
 
62
65
  return str
63
66
  // Insert a space between a lowercase/digit and an uppercase letter (camelCase -> camel Case)
64
- .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
67
+ .replace(/([\p{Ll}\p{N}])(\p{Lu})/gu, '$1 $2')
65
68
  // Insert a space between consecutive uppercase letters followed by a lowercase letter (XMLParser -> XML Parser)
66
- .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
69
+ .replace(/(\p{Lu}+)(\p{Lu}\p{Ll})/gu, '$1 $2')
67
70
  // Replace any non-alphanumeric character with a space
68
- .replace(/[^a-zA-Z0-9]+/g, ' ')
71
+ .replace(/[^\p{L}\p{N}]+/gu, ' ')
69
72
  .trim()
70
73
  .toLowerCase()
71
74
  .split(/\s+/)
package/src/timer.ts CHANGED
@@ -1,68 +1,68 @@
1
- /**
2
- * A class representing a timer that executes a callback function at a specified interval.
3
- */
4
- export default class Timer {
5
-
6
- private _callback: () => void;
7
- private _interval: number;
8
- private _intervalId: any | null;
9
-
10
- /**
11
- * @param callback Callback
12
- * @param interval Seconds between calls
13
- */
14
- constructor(callback: () => void, interval: number) {
15
- this._callback = callback;
16
- this._interval = interval;
17
- this._intervalId = null;
18
- }
19
-
20
-
21
- get running(): boolean {
22
- return this._intervalId !== null && this._intervalId !== undefined;
23
- }
24
-
25
- get interval(): number {
26
- return this._interval;
27
- }
28
-
29
- set interval(value: number) {
30
- if (value != this._interval) {
31
- this._interval = value;
32
- if (this.running)
33
- this.restart();
34
- }
35
- }
36
-
37
- get callback(): () => void {
38
- return this._callback;
39
- }
40
-
41
- set callback(value: () => void) {
42
- if (value != this._callback) {
43
- this._callback = value;
44
- }
45
- }
46
-
47
-
48
- start(): void {
49
- if (this._intervalId === null) {
50
- this._intervalId = setInterval(() => {
51
- if (this._callback != null)
52
- this._callback();
53
- }, this._interval);
54
- }
55
- }
56
-
57
- stop(): void {
58
- if (this._intervalId !== null) {
59
- clearInterval(this._intervalId);
60
- this._intervalId = null;
61
- }
62
- }
63
-
64
- restart(): void {
65
- this.stop();
66
- this.start();
67
- }
1
+ /**
2
+ * A class representing a timer that executes a callback function at a specified interval.
3
+ */
4
+ export default class Timer {
5
+
6
+ private _callback: () => void;
7
+ private _interval: number;
8
+ private _intervalId: any | null;
9
+
10
+ /**
11
+ * @param callback Callback
12
+ * @param interval Milliseconds between calls
13
+ */
14
+ constructor(callback: () => void, interval: number) {
15
+ this._callback = callback;
16
+ this._interval = interval;
17
+ this._intervalId = null;
18
+ }
19
+
20
+
21
+ get running(): boolean {
22
+ return this._intervalId !== null && this._intervalId !== undefined;
23
+ }
24
+
25
+ get interval(): number {
26
+ return this._interval;
27
+ }
28
+
29
+ set interval(value: number) {
30
+ if (value != this._interval) {
31
+ this._interval = value;
32
+ if (this.running)
33
+ this.restart();
34
+ }
35
+ }
36
+
37
+ get callback(): () => void {
38
+ return this._callback;
39
+ }
40
+
41
+ set callback(value: () => void) {
42
+ if (value != this._callback) {
43
+ this._callback = value;
44
+ }
45
+ }
46
+
47
+
48
+ start(): void {
49
+ if (this._intervalId === null) {
50
+ this._intervalId = setInterval(() => {
51
+ if (this._callback != null)
52
+ this._callback();
53
+ }, this._interval);
54
+ }
55
+ }
56
+
57
+ stop(): void {
58
+ if (this._intervalId !== null) {
59
+ clearInterval(this._intervalId);
60
+ this._intervalId = null;
61
+ }
62
+ }
63
+
64
+ restart(): void {
65
+ this.stop();
66
+ this.start();
67
+ }
68
68
  }