tnp-helpers 16.100.4 → 16.100.5

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 (203) hide show
  1. package/assets/shared/shared_folder_info.txt +1 -1
  2. package/browser/README.md +24 -24
  3. package/browser/esm2022/lib/base/base-project.mjs +21 -4
  4. package/browser/esm2022/lib/base/core-project.mjs +54 -0
  5. package/browser/esm2022/lib/base/index.mjs +3 -1
  6. package/browser/esm2022/lib/base/linked-project.mjs +77 -0
  7. package/browser/esm2022/lib/helpers/for-browser/angular.helper.mjs +89 -0
  8. package/browser/esm2022/lib/helpers/for-browser/helpers-browser.mjs +48 -0
  9. package/browser/esm2022/lib/helpers/helpers-array-obj.mjs +117 -0
  10. package/browser/esm2022/lib/helpers/helpers-numbers.mjs +12 -0
  11. package/browser/esm2022/lib/helpers/helpers-strings-regexes.mjs +51 -0
  12. package/browser/esm2022/lib/helpers/helpers-strings.mjs +258 -0
  13. package/browser/esm2022/lib/helpers/helpers.mjs +358 -0
  14. package/browser/esm2022/lib/index.mjs +3 -4
  15. package/browser/fesm2022/tnp-helpers.mjs +156 -96
  16. package/browser/fesm2022/tnp-helpers.mjs.map +1 -1
  17. package/browser/lib/base/base-project.d.ts +4 -1
  18. package/browser/lib/base/core-project.d.ts +54 -0
  19. package/browser/lib/base/index.d.ts +3 -1
  20. package/{websql/lib/models.d.ts → browser/lib/base/linked-project.d.ts} +6 -21
  21. package/{client/lib → browser/lib/helpers}/helpers.d.ts +1 -1
  22. package/browser/lib/index.d.ts +2 -3
  23. package/client/README.md +24 -24
  24. package/client/esm2022/lib/base/base-project.mjs +21 -4
  25. package/client/esm2022/lib/base/core-project.mjs +54 -0
  26. package/client/esm2022/lib/base/index.mjs +3 -1
  27. package/client/esm2022/lib/base/linked-project.mjs +77 -0
  28. package/client/esm2022/lib/helpers/for-browser/angular.helper.mjs +89 -0
  29. package/client/esm2022/lib/helpers/for-browser/helpers-browser.mjs +48 -0
  30. package/client/esm2022/lib/helpers/helpers-array-obj.mjs +117 -0
  31. package/client/esm2022/lib/helpers/helpers-numbers.mjs +12 -0
  32. package/client/esm2022/lib/helpers/helpers-strings-regexes.mjs +51 -0
  33. package/client/esm2022/lib/helpers/helpers-strings.mjs +258 -0
  34. package/client/esm2022/lib/helpers/helpers.mjs +358 -0
  35. package/client/esm2022/lib/index.mjs +3 -4
  36. package/client/fesm2022/tnp-helpers.mjs +156 -96
  37. package/client/fesm2022/tnp-helpers.mjs.map +1 -1
  38. package/client/lib/base/base-project.d.ts +4 -1
  39. package/client/lib/base/core-project.d.ts +54 -0
  40. package/client/lib/base/index.d.ts +3 -1
  41. package/{browser/lib/models.d.ts → client/lib/base/linked-project.d.ts} +6 -21
  42. package/{browser/lib → client/lib/helpers}/helpers.d.ts +1 -1
  43. package/client/lib/index.d.ts +2 -3
  44. package/client/package.json +35 -34
  45. package/{package.json_tnp.json5 → firedev.jsonc} +59 -59
  46. package/lib/base/base-command-line.backend.js +5 -3
  47. package/lib/base/base-command-line.backend.js.map +1 -1
  48. package/lib/base/base-project.d.ts +16 -1
  49. package/lib/base/base-project.js +29 -10
  50. package/lib/base/base-project.js.map +1 -1
  51. package/lib/base/core-project.d.ts +53 -0
  52. package/lib/base/core-project.js +78 -0
  53. package/lib/base/core-project.js.map +1 -0
  54. package/lib/base/index.d.ts +2 -0
  55. package/lib/base/index.js +2 -0
  56. package/lib/base/index.js.map +1 -1
  57. package/lib/base/linked-project.d.ts +35 -0
  58. package/lib/base/linked-project.js +96 -0
  59. package/lib/base/linked-project.js.map +1 -0
  60. package/lib/{for-backend → helpers/for-backend}/helpers-cli-tool.backend.d.ts +1 -1
  61. package/lib/{for-backend → helpers/for-backend}/helpers-cli-tool.backend.js +1 -1
  62. package/lib/{for-backend → helpers/for-backend}/helpers-cli-tool.backend.js.map +1 -1
  63. package/lib/{for-backend → helpers/for-backend}/helpers-console-gui.js +1 -1
  64. package/lib/{for-backend → helpers/for-backend}/helpers-console-gui.js.map +1 -1
  65. package/lib/{for-backend → helpers/for-backend}/helpers-dependencies.backend.js +1 -1
  66. package/lib/{for-backend → helpers/for-backend}/helpers-dependencies.backend.js.map +1 -1
  67. package/lib/{for-backend → helpers/for-backend}/helpers-file-folders.backend.d.ts +2 -7
  68. package/lib/{for-backend → helpers/for-backend}/helpers-file-folders.backend.js +13 -69
  69. package/lib/helpers/for-backend/helpers-file-folders.backend.js.map +1 -0
  70. package/lib/{for-backend → helpers/for-backend}/helpers-git.backend.d.ts +7 -1
  71. package/lib/{for-backend → helpers/for-backend}/helpers-git.backend.js +70 -7
  72. package/lib/helpers/for-backend/helpers-git.backend.js.map +1 -0
  73. package/lib/{for-backend → helpers/for-backend}/helpers-path.backend.js +1 -1
  74. package/lib/{for-backend → helpers/for-backend}/helpers-path.backend.js.map +1 -1
  75. package/lib/{for-backend → helpers/for-backend}/helpers-process.backend.d.ts +0 -1
  76. package/lib/{for-backend → helpers/for-backend}/helpers-process.backend.js +1 -5
  77. package/lib/{for-backend → helpers/for-backend}/helpers-process.backend.js.map +1 -1
  78. package/lib/{for-backend → helpers/for-backend}/helpers-system-terminal.backend.js +1 -1
  79. package/lib/{for-backend → helpers/for-backend}/helpers-system-terminal.backend.js.map +1 -1
  80. package/lib/{for-backend → helpers/for-backend}/helpers-vscode.backend.d.ts +1 -1
  81. package/lib/{for-backend → helpers/for-backend}/helpers-vscode.backend.js +1 -1
  82. package/lib/{for-backend → helpers/for-backend}/helpers-vscode.backend.js.map +1 -1
  83. package/lib/{for-backend → helpers/for-backend}/ts-code/ts-code-extractor.js +1 -1
  84. package/lib/{for-backend → helpers/for-backend}/ts-code/ts-code-extractor.js.map +1 -1
  85. package/lib/{for-backend → helpers/for-backend}/ts-code/ts-code-modifier.backend.js +1 -1
  86. package/lib/{for-backend → helpers/for-backend}/ts-code/ts-code-modifier.backend.js.map +1 -1
  87. package/lib/helpers/for-browser/angular.helper.js +6 -0
  88. package/lib/{helpers-strings.js → helpers/helpers-strings.js} +1 -1
  89. package/lib/{helpers-strings.js.map → helpers/helpers-strings.js.map} +1 -1
  90. package/lib/{helpers.d.ts → helpers/helpers.d.ts} +1 -1
  91. package/lib/{helpers.js → helpers/helpers.js} +1 -1
  92. package/lib/{helpers.js.map → helpers/helpers.js.map} +1 -1
  93. package/lib/index.d.ts +2 -3
  94. package/lib/index.js +1 -2
  95. package/lib/index.js.map +1 -1
  96. package/lib/models.d.ts +0 -50
  97. package/lib/models.js +3 -107
  98. package/lib/models.js.map +1 -1
  99. package/lib/old/base-component.js +3 -3
  100. package/lib/old/base-formly-component.js +3 -3
  101. package/lib/old/dual-component-ctrl.js +3 -3
  102. package/package.json +4 -4
  103. package/tmp-environment.json +39 -38
  104. package/websql/README.md +24 -24
  105. package/websql/esm2022/lib/base/base-project.mjs +21 -4
  106. package/websql/esm2022/lib/base/core-project.mjs +54 -0
  107. package/websql/esm2022/lib/base/index.mjs +3 -1
  108. package/websql/esm2022/lib/base/linked-project.mjs +77 -0
  109. package/websql/esm2022/lib/helpers/for-browser/angular.helper.mjs +89 -0
  110. package/websql/esm2022/lib/helpers/for-browser/helpers-browser.mjs +48 -0
  111. package/websql/esm2022/lib/helpers/helpers-array-obj.mjs +117 -0
  112. package/websql/esm2022/lib/helpers/helpers-numbers.mjs +12 -0
  113. package/websql/esm2022/lib/helpers/helpers-strings-regexes.mjs +51 -0
  114. package/websql/esm2022/lib/helpers/helpers-strings.mjs +258 -0
  115. package/websql/esm2022/lib/helpers/helpers.mjs +358 -0
  116. package/websql/esm2022/lib/index.mjs +3 -4
  117. package/websql/fesm2022/tnp-helpers.mjs +157 -97
  118. package/websql/fesm2022/tnp-helpers.mjs.map +1 -1
  119. package/websql/lib/base/base-project.d.ts +4 -1
  120. package/websql/lib/base/core-project.d.ts +54 -0
  121. package/websql/lib/base/index.d.ts +3 -1
  122. package/{client/lib/models.d.ts → websql/lib/base/linked-project.d.ts} +6 -21
  123. package/websql/lib/{helpers.d.ts → helpers/helpers.d.ts} +1 -1
  124. package/websql/lib/index.d.ts +2 -3
  125. package/browser/esm2022/lib/for-browser/angular.helper.mjs +0 -89
  126. package/browser/esm2022/lib/for-browser/helpers-browser.mjs +0 -48
  127. package/browser/esm2022/lib/helpers-array-obj.mjs +0 -117
  128. package/browser/esm2022/lib/helpers-numbers.mjs +0 -12
  129. package/browser/esm2022/lib/helpers-strings-regexes.mjs +0 -51
  130. package/browser/esm2022/lib/helpers-strings.mjs +0 -258
  131. package/browser/esm2022/lib/helpers.mjs +0 -358
  132. package/browser/esm2022/lib/models.mjs +0 -87
  133. package/client/esm2022/lib/for-browser/angular.helper.mjs +0 -89
  134. package/client/esm2022/lib/for-browser/helpers-browser.mjs +0 -48
  135. package/client/esm2022/lib/helpers-array-obj.mjs +0 -117
  136. package/client/esm2022/lib/helpers-numbers.mjs +0 -12
  137. package/client/esm2022/lib/helpers-strings-regexes.mjs +0 -51
  138. package/client/esm2022/lib/helpers-strings.mjs +0 -258
  139. package/client/esm2022/lib/helpers.mjs +0 -358
  140. package/client/esm2022/lib/models.mjs +0 -87
  141. package/lib/for-backend/helpers-file-folders.backend.js.map +0 -1
  142. package/lib/for-backend/helpers-git.backend.js.map +0 -1
  143. package/lib/for-browser/angular.helper.js +0 -6
  144. package/package.json_devDependencies.json +0 -222
  145. package/websql/esm2022/lib/for-browser/angular.helper.mjs +0 -89
  146. package/websql/esm2022/lib/for-browser/helpers-browser.mjs +0 -48
  147. package/websql/esm2022/lib/helpers-array-obj.mjs +0 -117
  148. package/websql/esm2022/lib/helpers-numbers.mjs +0 -12
  149. package/websql/esm2022/lib/helpers-strings-regexes.mjs +0 -51
  150. package/websql/esm2022/lib/helpers-strings.mjs +0 -258
  151. package/websql/esm2022/lib/helpers.mjs +0 -358
  152. package/websql/esm2022/lib/models.mjs +0 -87
  153. /package/browser/lib/{for-browser → helpers/for-browser}/angular.helper.d.ts +0 -0
  154. /package/browser/lib/{for-browser → helpers/for-browser}/helpers-browser.d.ts +0 -0
  155. /package/browser/lib/{helpers-array-obj.d.ts → helpers/helpers-array-obj.d.ts} +0 -0
  156. /package/browser/lib/{helpers-numbers.d.ts → helpers/helpers-numbers.d.ts} +0 -0
  157. /package/browser/lib/{helpers-strings-regexes.d.ts → helpers/helpers-strings-regexes.d.ts} +0 -0
  158. /package/browser/lib/{helpers-strings.d.ts → helpers/helpers-strings.d.ts} +0 -0
  159. /package/client/lib/{for-browser → helpers/for-browser}/angular.helper.d.ts +0 -0
  160. /package/client/lib/{for-browser → helpers/for-browser}/helpers-browser.d.ts +0 -0
  161. /package/client/lib/{helpers-array-obj.d.ts → helpers/helpers-array-obj.d.ts} +0 -0
  162. /package/client/lib/{helpers-numbers.d.ts → helpers/helpers-numbers.d.ts} +0 -0
  163. /package/client/lib/{helpers-strings-regexes.d.ts → helpers/helpers-strings-regexes.d.ts} +0 -0
  164. /package/client/lib/{helpers-strings.d.ts → helpers/helpers-strings.d.ts} +0 -0
  165. /package/lib/{for-backend → helpers/for-backend}/helpers-console-gui.d.ts +0 -0
  166. /package/lib/{for-backend → helpers/for-backend}/helpers-dependencies.backend.d.ts +0 -0
  167. /package/lib/{for-backend → helpers/for-backend}/helpers-network.backend.d.ts +0 -0
  168. /package/lib/{for-backend → helpers/for-backend}/helpers-network.backend.js +0 -0
  169. /package/lib/{for-backend → helpers/for-backend}/helpers-network.backend.js.map +0 -0
  170. /package/lib/{for-backend → helpers/for-backend}/helpers-npm.backend.d.ts +0 -0
  171. /package/lib/{for-backend → helpers/for-backend}/helpers-npm.backend.js +0 -0
  172. /package/lib/{for-backend → helpers/for-backend}/helpers-npm.backend.js.map +0 -0
  173. /package/lib/{for-backend → helpers/for-backend}/helpers-path.backend.d.ts +0 -0
  174. /package/lib/{for-backend → helpers/for-backend}/helpers-system-terminal.backend.d.ts +0 -0
  175. /package/lib/{for-backend → helpers/for-backend}/ts-code/index.d.ts +0 -0
  176. /package/lib/{for-backend → helpers/for-backend}/ts-code/index.js +0 -0
  177. /package/lib/{for-backend → helpers/for-backend}/ts-code/index.js.map +0 -0
  178. /package/lib/{for-backend → helpers/for-backend}/ts-code/ts-code-extractor.d.ts +0 -0
  179. /package/lib/{for-backend → helpers/for-backend}/ts-code/ts-code-modifier.backend.d.ts +0 -0
  180. /package/lib/{for-browser → helpers/for-browser}/angular.helper.d.ts +0 -0
  181. /package/lib/{for-browser → helpers/for-browser}/angular.helper.js.map +0 -0
  182. /package/lib/{for-browser → helpers/for-browser}/helpers-browser.d.ts +0 -0
  183. /package/lib/{for-browser → helpers/for-browser}/helpers-browser.js +0 -0
  184. /package/lib/{for-browser → helpers/for-browser}/helpers-browser.js.map +0 -0
  185. /package/lib/{helpers-array-obj.d.ts → helpers/helpers-array-obj.d.ts} +0 -0
  186. /package/lib/{helpers-array-obj.js → helpers/helpers-array-obj.js} +0 -0
  187. /package/lib/{helpers-array-obj.js.map → helpers/helpers-array-obj.js.map} +0 -0
  188. /package/lib/{helpers-json5.backend.d.ts → helpers/helpers-json5.backend.d.ts} +0 -0
  189. /package/lib/{helpers-json5.backend.js → helpers/helpers-json5.backend.js} +0 -0
  190. /package/lib/{helpers-json5.backend.js.map → helpers/helpers-json5.backend.js.map} +0 -0
  191. /package/lib/{helpers-numbers.d.ts → helpers/helpers-numbers.d.ts} +0 -0
  192. /package/lib/{helpers-numbers.js → helpers/helpers-numbers.js} +0 -0
  193. /package/lib/{helpers-numbers.js.map → helpers/helpers-numbers.js.map} +0 -0
  194. /package/lib/{helpers-strings-regexes.d.ts → helpers/helpers-strings-regexes.d.ts} +0 -0
  195. /package/lib/{helpers-strings-regexes.js → helpers/helpers-strings-regexes.js} +0 -0
  196. /package/lib/{helpers-strings-regexes.js.map → helpers/helpers-strings-regexes.js.map} +0 -0
  197. /package/lib/{helpers-strings.d.ts → helpers/helpers-strings.d.ts} +0 -0
  198. /package/websql/lib/{for-browser → helpers/for-browser}/angular.helper.d.ts +0 -0
  199. /package/websql/lib/{for-browser → helpers/for-browser}/helpers-browser.d.ts +0 -0
  200. /package/websql/lib/{helpers-array-obj.d.ts → helpers/helpers-array-obj.d.ts} +0 -0
  201. /package/websql/lib/{helpers-numbers.d.ts → helpers/helpers-numbers.d.ts} +0 -0
  202. /package/websql/lib/{helpers-strings-regexes.d.ts → helpers/helpers-strings-regexes.d.ts} +0 -0
  203. /package/websql/lib/{helpers-strings.d.ts → helpers/helpers-strings.d.ts} +0 -0
@@ -0,0 +1,89 @@
1
+ import { Subject } from "rxjs";
2
+ const componentContextSymbol = Symbol();
3
+ const componentsDestroy$Subjects = {};
4
+ export var HelpersAngular;
5
+ (function (HelpersAngular) {
6
+ class SerializedSubject {
7
+ constructor(id) {
8
+ this.id = id;
9
+ }
10
+ }
11
+ HelpersAngular.SerializedSubject = SerializedSubject;
12
+ function subjectId(destroySubject) {
13
+ const id = Math.random().toString(36).substring(2);
14
+ if (!destroySubject[componentContextSymbol]) {
15
+ destroySubject[componentContextSymbol] = new SerializedSubject(id);
16
+ componentsDestroy$Subjects[id] = destroySubject;
17
+ }
18
+ return destroySubject[componentContextSymbol];
19
+ }
20
+ /**
21
+ * if you are using this.. please call Helpers.ng.unsubscribe(this.$destroy) in ngOnDestroy();
22
+ */
23
+ function serialize(destroy$) {
24
+ return subjectId(destroy$);
25
+ }
26
+ HelpersAngular.serialize = serialize;
27
+ /**
28
+ * if you are using this.. please call Helpers.ng.unsubscribe(this.$destroy) in ngOnDestroy();
29
+ */
30
+ function deserialize(destroy$) {
31
+ if (destroy$?.id) {
32
+ const realDestroySubject = componentsDestroy$Subjects[destroy$.id];
33
+ return realDestroySubject;
34
+ }
35
+ return new Subject();
36
+ }
37
+ HelpersAngular.deserialize = deserialize;
38
+ function unsubscribe(destroy$) {
39
+ const destroySubject = subjectId(destroy$);
40
+ if (destroySubject?.id) {
41
+ delete componentsDestroy$Subjects[destroySubject.id];
42
+ delete destroySubject[componentContextSymbol];
43
+ }
44
+ }
45
+ HelpersAngular.unsubscribe = unsubscribe;
46
+ /**
47
+ get properties from scss file
48
+
49
+
50
+ import styles from './tasks-ngrx-data.component.scss';
51
+
52
+ export class ExampleComponent {
53
+ sassFile = sassFile(styles);
54
+
55
+ async ngOnInit() {
56
+ this.tasksService.getAll();
57
+ console.log(this.sassFile.stringValue('--max-container-size'))
58
+ console.log(this.sassFile.numberValue('--max-container-size'))
59
+ }
60
+ }
61
+ */
62
+ function sassFile(styles) {
63
+ const lines = (styles.split('\n'));
64
+ return {
65
+ stringValue: (name) => {
66
+ for (let index = 0; index < lines.length; index++) {
67
+ const l = lines[index];
68
+ const [varName, value] = l.trim().split(':');
69
+ if (varName === name) {
70
+ return value.replace(';', '');
71
+ }
72
+ }
73
+ },
74
+ numberValue: (name) => {
75
+ for (let index = 0; index < lines.length; index++) {
76
+ const l = lines[index];
77
+ const [varName, value] = l.trim().split(':');
78
+ if (varName === name) {
79
+ return Number(value.replace('px', '').replace(';', ''));
80
+ }
81
+ }
82
+ }
83
+ };
84
+ }
85
+ HelpersAngular.sassFile = sassFile;
86
+ })(HelpersAngular || (HelpersAngular = {}));
87
+ ;
88
+ ({}); // @--end-of-file-for-module=tnp-helpers lib/helpers/for-browser/angular.helper.ts
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90bnAtaGVscGVycy9wcm9qZWN0cy90bnAtaGVscGVycy9zcmMvbGliL2hlbHBlcnMvZm9yLWJyb3dzZXIvYW5ndWxhci5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3hDLE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBR3RDLE1BQU0sS0FBVyxjQUFjLENBcUY5QjtBQXJGRCxXQUFpQixjQUFjO0lBRTdCLE1BQWEsaUJBQWlCO1FBQzVCLFlBQ1MsRUFBVTtZQUFWLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDZixDQUFDO0tBQ047SUFKWSxnQ0FBaUIsb0JBSTdCLENBQUE7SUFHRCxTQUFTLFNBQVMsQ0FBQyxjQUE0QjtRQUM3QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7WUFDM0MsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSwwQkFBMEIsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUM7U0FDakQ7UUFDRCxPQUFPLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNILFNBQWdCLFNBQVMsQ0FBQyxRQUFzQjtRQUM5QyxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRmUsd0JBQVMsWUFFeEIsQ0FBQTtJQUVEOztPQUVHO0lBQ0gsU0FBZ0IsV0FBVyxDQUFDLFFBQWdDO1FBQzFELElBQUksUUFBUSxFQUFFLEVBQUUsRUFBRTtZQUNoQixNQUFNLGtCQUFrQixHQUFHLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSxPQUFPLGtCQUFrQixDQUFDO1NBQzNCO1FBQ0QsT0FBTyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFOZSwwQkFBVyxjQU0xQixDQUFBO0lBRUQsU0FBZ0IsV0FBVyxDQUFDLFFBQXNCO1FBQ2hELE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLGNBQWMsRUFBRSxFQUFFLEVBQUU7WUFDdEIsT0FBTywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckQsT0FBTyxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7SUFOZSwwQkFBVyxjQU0xQixDQUFBO0lBSUQ7Ozs7Ozs7Ozs7Ozs7OztTQWVLO0lBQ0wsU0FBZ0IsUUFBUSxDQUFDLE1BQWM7UUFDckMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkMsT0FBTztZQUNMLFdBQVcsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO2dCQUM1QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDakQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN2QixNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzdDLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTt3QkFDcEIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDL0I7aUJBQ0Y7WUFDSCxDQUFDO1lBQ0QsV0FBVyxFQUFFLENBQUMsSUFBWSxFQUFVLEVBQUU7Z0JBQ3BDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUNqRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3ZCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO3dCQUNwQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3pEO2lCQUNGO1lBQ0gsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0lBdEJlLHVCQUFRLFdBc0J2QixDQUFBO0FBQ0gsQ0FBQyxFQXJGZ0IsY0FBYyxLQUFkLGNBQWMsUUFxRjlCO0FBSUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxrRkFBa0YiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcblxuY29uc3QgY29tcG9uZW50Q29udGV4dFN5bWJvbCA9IFN5bWJvbCgpO1xuY29uc3QgY29tcG9uZW50c0Rlc3Ryb3kkU3ViamVjdHMgPSB7fTtcblxuXG5leHBvcnQgbmFtZXNwYWNlIEhlbHBlcnNBbmd1bGFyIHtcblxuICBleHBvcnQgY2xhc3MgU2VyaWFsaXplZFN1YmplY3Q8VD4ge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgcHVibGljIGlkOiBzdHJpbmdcbiAgICApIHsgfVxuICB9XG5cblxuICBmdW5jdGlvbiBzdWJqZWN0SWQoZGVzdHJveVN1YmplY3Q6IFN1YmplY3Q8YW55Pik6IFNlcmlhbGl6ZWRTdWJqZWN0PGFueT4ge1xuICAgIGNvbnN0IGlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO1xuICAgIGlmICghZGVzdHJveVN1YmplY3RbY29tcG9uZW50Q29udGV4dFN5bWJvbF0pIHtcbiAgICAgIGRlc3Ryb3lTdWJqZWN0W2NvbXBvbmVudENvbnRleHRTeW1ib2xdID0gbmV3IFNlcmlhbGl6ZWRTdWJqZWN0KGlkKTtcbiAgICAgIGNvbXBvbmVudHNEZXN0cm95JFN1YmplY3RzW2lkXSA9IGRlc3Ryb3lTdWJqZWN0O1xuICAgIH1cbiAgICByZXR1cm4gZGVzdHJveVN1YmplY3RbY29tcG9uZW50Q29udGV4dFN5bWJvbF07XG4gIH1cblxuICAvKipcbiAgICogaWYgeW91IGFyZSB1c2luZyB0aGlzLi4gcGxlYXNlIGNhbGwgSGVscGVycy5uZy51bnN1YnNjcmliZSh0aGlzLiRkZXN0cm95KSBpbiBuZ09uRGVzdHJveSgpO1xuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZShkZXN0cm95JDogU3ViamVjdDxhbnk+KTogU2VyaWFsaXplZFN1YmplY3Q8YW55PiB7XG4gICAgcmV0dXJuIHN1YmplY3RJZChkZXN0cm95JCk7XG4gIH1cblxuICAvKipcbiAgICogaWYgeW91IGFyZSB1c2luZyB0aGlzLi4gcGxlYXNlIGNhbGwgSGVscGVycy5uZy51bnN1YnNjcmliZSh0aGlzLiRkZXN0cm95KSBpbiBuZ09uRGVzdHJveSgpO1xuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplKGRlc3Ryb3kkOiBTZXJpYWxpemVkU3ViamVjdDxhbnk+KTogU3ViamVjdDxhbnk+IHtcbiAgICBpZiAoZGVzdHJveSQ/LmlkKSB7XG4gICAgICBjb25zdCByZWFsRGVzdHJveVN1YmplY3QgPSBjb21wb25lbnRzRGVzdHJveSRTdWJqZWN0c1tkZXN0cm95JC5pZF07XG4gICAgICByZXR1cm4gcmVhbERlc3Ryb3lTdWJqZWN0O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN1YmplY3QoKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB1bnN1YnNjcmliZShkZXN0cm95JDogU3ViamVjdDxhbnk+KSB7XG4gICAgY29uc3QgZGVzdHJveVN1YmplY3QgPSBzdWJqZWN0SWQoZGVzdHJveSQpO1xuICAgIGlmIChkZXN0cm95U3ViamVjdD8uaWQpIHtcbiAgICAgIGRlbGV0ZSBjb21wb25lbnRzRGVzdHJveSRTdWJqZWN0c1tkZXN0cm95U3ViamVjdC5pZF07XG4gICAgICBkZWxldGUgZGVzdHJveVN1YmplY3RbY29tcG9uZW50Q29udGV4dFN5bWJvbF07XG4gICAgfVxuICB9XG5cblxuXG4gIC8qKlxuICBnZXQgcHJvcGVydGllcyBmcm9tIHNjc3MgZmlsZVxuXG5cbiAgaW1wb3J0IHN0eWxlcyBmcm9tICcuL3Rhc2tzLW5ncngtZGF0YS5jb21wb25lbnQuc2Nzcyc7XG5cbiAgZXhwb3J0IGNsYXNzIEV4YW1wbGVDb21wb25lbnQge1xuICAgIHNhc3NGaWxlID0gc2Fzc0ZpbGUoc3R5bGVzKTtcblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgdGhpcy50YXNrc1NlcnZpY2UuZ2V0QWxsKCk7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnNhc3NGaWxlLnN0cmluZ1ZhbHVlKCctLW1heC1jb250YWluZXItc2l6ZScpKVxuICAgICAgY29uc29sZS5sb2codGhpcy5zYXNzRmlsZS5udW1iZXJWYWx1ZSgnLS1tYXgtY29udGFpbmVyLXNpemUnKSlcbiAgICB9XG4gIH1cbiAgICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHNhc3NGaWxlKHN0eWxlczogc3RyaW5nKSB7XG4gICAgY29uc3QgbGluZXMgPSAoc3R5bGVzLnNwbGl0KCdcXG4nKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmluZ1ZhbHVlOiAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBsID0gbGluZXNbaW5kZXhdO1xuICAgICAgICAgIGNvbnN0IFt2YXJOYW1lLCB2YWx1ZV0gPSBsLnRyaW0oKS5zcGxpdCgnOicpO1xuICAgICAgICAgIGlmICh2YXJOYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgnOycsICcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBudW1iZXJWYWx1ZTogKG5hbWU6IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBsID0gbGluZXNbaW5kZXhdO1xuICAgICAgICAgIGNvbnN0IFt2YXJOYW1lLCB2YWx1ZV0gPSBsLnRyaW0oKS5zcGxpdCgnOicpO1xuICAgICAgICAgIGlmICh2YXJOYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlLnJlcGxhY2UoJ3B4JywgJycpLnJlcGxhY2UoJzsnLCAnJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRucC1oZWxwZXJzIGxpYi9oZWxwZXJzL2Zvci1icm93c2VyL2FuZ3VsYXIuaGVscGVyLnRzIl19
@@ -0,0 +1,48 @@
1
+ const key = Symbol('[firedev-helpers] helper browser key');
2
+ class HelpersBrowser {
3
+ static { this.callbacks = []; }
4
+ static onInit(callback) {
5
+ this.callbacks.push(callback);
6
+ }
7
+ get win() {
8
+ let win = window;
9
+ return win;
10
+ }
11
+ get tabIdSessionStorage() {
12
+ return Number(this.win.sessionStorage?.tabId) || 0;
13
+ }
14
+ constructor(win) {
15
+ this.init = (() => {
16
+ const win = this.win;
17
+ if (!win[key]) {
18
+ win[key] = new HelpersBrowser(win);
19
+ }
20
+ HelpersBrowser.inst = win[key];
21
+ })();
22
+ win.addEventListener("beforeunload", (e) => {
23
+ win.sessionStorage.tabId = this.tabId;
24
+ return null;
25
+ });
26
+ setTimeout(() => {
27
+ if (win.sessionStorage?.tabId) {
28
+ // @ts-ignore
29
+ this.tabId = Number(win.sessionStorage.tabId);
30
+ win.sessionStorage.removeItem("tabId");
31
+ }
32
+ else {
33
+ // @ts-ignore
34
+ this.tabId = Math.floor(Math.random() * 1000000) + (new Date()).getTime();
35
+ }
36
+ HelpersBrowser.callbacks.forEach((c) => {
37
+ c(this);
38
+ });
39
+ });
40
+ }
41
+ static get instance() {
42
+ return HelpersBrowser.inst;
43
+ }
44
+ }
45
+ export { HelpersBrowser };
46
+ ;
47
+ ({}); // @--end-of-file-for-module=tnp-helpers lib/helpers/for-browser/helpers-browser.ts
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1icm93c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9oZWxwZXJzL2Zvci1icm93c2VyL2hlbHBlcnMtYnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtBQUUxRCxNQUFhLGNBQWM7YUFFVixjQUFTLEdBQUcsRUFBRSxBQUFMLENBQU07SUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFzQztRQUNsRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQVksbUJBQW1CO1FBQzdCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBY0QsWUFBb0IsR0FBVztRQVQvQixTQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBRXJCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3BDO1lBQ0QsY0FBYyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUlILEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN6QyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFSCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBRWQsSUFBSSxHQUFHLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRTtnQkFDN0IsYUFBYTtnQkFDYixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN4QztpQkFDSTtnQkFDSCxhQUFhO2dCQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDM0U7WUFDRCxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDVixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBR0osQ0FBQztJQUdELE1BQU0sS0FBSyxRQUFRO1FBQ2pCLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQztJQUM3QixDQUFDOztTQXpEVSxjQUFjO0FBa0UxQixDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1GQUFtRiIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5cblxuXG5jb25zdCBrZXkgPSBTeW1ib2woJ1tmaXJlZGV2LWhlbHBlcnNdIGhlbHBlciBicm93c2VyIGtleScpXG5cbmV4cG9ydCBjbGFzcyBIZWxwZXJzQnJvd3NlciB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY2FsbGJhY2tzID0gW107XG4gIHN0YXRpYyBvbkluaXQoY2FsbGJhY2s6IChpbnM6IEhlbHBlcnNCcm93c2VyKSA9PiBhbnkpIHtcbiAgICB0aGlzLmNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGdldCB3aW4oKSB7XG4gICAgbGV0IHdpbiA9IHdpbmRvdztcbiAgICByZXR1cm4gd2luO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgdGFiSWRTZXNzaW9uU3RvcmFnZSgpIHtcbiAgICByZXR1cm4gTnVtYmVyKHRoaXMud2luLnNlc3Npb25TdG9yYWdlPy50YWJJZCkgfHwgMDtcbiAgfVxuXG4gIHJlYWRvbmx5IHRhYklkOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdDogSGVscGVyc0Jyb3dzZXI7XG4gIGluaXQgPSAoKCkgPT4ge1xuICAgIGNvbnN0IHdpbiA9IHRoaXMud2luO1xuXG4gICAgaWYgKCF3aW5ba2V5XSkge1xuICAgICAgd2luW2tleV0gPSBuZXcgSGVscGVyc0Jyb3dzZXIod2luKTtcbiAgICB9XG4gICAgSGVscGVyc0Jyb3dzZXIuaW5zdCA9IHdpbltrZXldO1xuICB9KSgpO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2luOiBXaW5kb3cpIHtcblxuICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIChlKSA9PiB7XG4gICAgICB3aW4uc2Vzc2lvblN0b3JhZ2UudGFiSWQgPSB0aGlzLnRhYklkO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgaWYgKHdpbi5zZXNzaW9uU3RvcmFnZT8udGFiSWQpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLnRhYklkID0gTnVtYmVyKHdpbi5zZXNzaW9uU3RvcmFnZS50YWJJZCk7XG4gICAgICAgIHdpbi5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidGFiSWRcIik7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLnRhYklkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCkgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgICAgfVxuICAgICAgSGVscGVyc0Jyb3dzZXIuY2FsbGJhY2tzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgYyh0aGlzKTtcbiAgICAgIH0pO1xuICAgIH0pXG5cblxuICB9XG5cblxuICBzdGF0aWMgZ2V0IGluc3RhbmNlKCkge1xuICAgIHJldHVybiBIZWxwZXJzQnJvd3Nlci5pbnN0O1xuICB9XG5cbn1cblxuXG5cblxuXG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10bnAtaGVscGVycyBsaWIvaGVscGVycy9mb3ItYnJvd3Nlci9oZWxwZXJzLWJyb3dzZXIudHMiXX0=
@@ -0,0 +1,117 @@
1
+ import { _ } from 'tnp-core/browser';
2
+ import * as fuzzy from 'fuzzy';
3
+ export class HelpersArrayObj {
4
+ from(s) {
5
+ if (_.isArray(s)) {
6
+ return s;
7
+ }
8
+ if (_.isString(s)) {
9
+ return s.split(' ');
10
+ }
11
+ }
12
+ second(arr) {
13
+ if (!Array.isArray(arr) || arr.length < 2) {
14
+ return void 0;
15
+ }
16
+ return arr[1];
17
+ }
18
+ /**
19
+ * @deprecated
20
+ * use moveObjectBefore
21
+ */
22
+ arrayMoveElementBefore(arr, a, b, prop) {
23
+ let indexA = prop ? arr.findIndex(elem => elem[prop] === a[prop]) : arr.indexOf(a);
24
+ _.pullAt(arr, indexA);
25
+ let indexB = prop ? arr.findIndex(elem => elem[prop] === b[prop]) : arr.indexOf(b);
26
+ if (indexB === 0) {
27
+ arr.unshift(a);
28
+ }
29
+ else {
30
+ arr.splice(indexB - 1, 0, a);
31
+ }
32
+ return arr;
33
+ }
34
+ /**
35
+ * @deprecated
36
+ * use moveObjectAfter
37
+ */
38
+ arrayMoveElementAfterB(arr, a, b, prop) {
39
+ let indexA = prop ? arr.findIndex(elem => elem[prop] === a[prop]) : arr.indexOf(a);
40
+ _.pullAt(arr, indexA);
41
+ let indexB = prop ? arr.findIndex(elem => elem[prop] === b[prop]) : arr.indexOf(b);
42
+ if (indexB === arr.length - 1) {
43
+ arr.push(a);
44
+ }
45
+ else {
46
+ arr.splice(indexB + 1, 0, a);
47
+ }
48
+ return arr;
49
+ }
50
+ moveObjectBefore(array, target, before) {
51
+ const newArray = [...array];
52
+ const targetIndex = newArray.findIndex(item => item === target);
53
+ const beforeIndex = newArray.findIndex(item => item === before);
54
+ if (targetIndex === -1 || beforeIndex === -1) {
55
+ console.error("Target or Before object not found in the array");
56
+ return newArray;
57
+ }
58
+ newArray.splice(targetIndex, 1);
59
+ newArray.splice(beforeIndex, 0, target);
60
+ return newArray;
61
+ }
62
+ moveObjectAfter(array, target, after) {
63
+ const newArray = [...array];
64
+ const targetIndex = newArray.findIndex(item => item === target);
65
+ const afterIndex = newArray.findIndex(item => item === after);
66
+ if (targetIndex === -1 || afterIndex === -1) {
67
+ console.error("Target or After object not found in the array");
68
+ return newArray;
69
+ }
70
+ newArray.splice(targetIndex, 1);
71
+ newArray.splice(afterIndex + 1, 0, target);
72
+ return newArray;
73
+ }
74
+ /**
75
+ * @deprecated
76
+ */
77
+ uniqArray(array, uniqueProperty) {
78
+ var seen = {};
79
+ return array
80
+ .filter(f => !!f)
81
+ .filter(function (item) {
82
+ return seen.hasOwnProperty(uniqueProperty ? item[uniqueProperty] : item) ? false
83
+ : (seen[uniqueProperty ? item[uniqueProperty] : item] = true);
84
+ });
85
+ }
86
+ sortKeys(obj) {
87
+ if (_.isArray(obj)) {
88
+ return obj.map(this.sortKeys);
89
+ }
90
+ if (_.isObject(obj)) {
91
+ return _.fromPairs(_.keys(obj).sort().map(key => [key, this.sortKeys(obj[key])]));
92
+ }
93
+ return obj;
94
+ }
95
+ ;
96
+ /**
97
+ * Fuzzy search
98
+ */
99
+ fuzzy(query, list, valueFn) {
100
+ const resultsFuzzy = fuzzy.filter(query, list.map(k => valueFn ? valueFn(k) : k));
101
+ const resultsFuzzyKebab = fuzzy.filter(_.kebabCase(query), list.map(k => _.kebabCase((valueFn ? valueFn(k) : k))));
102
+ const matches = resultsFuzzy.map((el) => el.string);
103
+ const matchesKebab = resultsFuzzyKebab.map((el) => el.string);
104
+ const results = (resultsFuzzy.length === 0) ? [] : list.filter(k => {
105
+ return matches.includes((valueFn ? valueFn(k) : k));
106
+ });
107
+ if (matches.length === 0 && matchesKebab.length > 0) {
108
+ const m = list.find(k => _.kebabCase((valueFn ? valueFn(k) : k)) === _.first(matchesKebab));
109
+ results.push(m);
110
+ matches.push((valueFn ? valueFn(m) : m));
111
+ }
112
+ return { matches, results };
113
+ }
114
+ }
115
+ ;
116
+ ({}); // @--end-of-file-for-module=tnp-helpers lib/helpers/helpers-array-obj.ts
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1hcnJheS1vYmouanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90bnAtaGVscGVycy9wcm9qZWN0cy90bnAtaGVscGVycy9zcmMvbGliL2hlbHBlcnMvaGVscGVycy1hcnJheS1vYmoudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRy9CLE1BQU0sT0FBTyxlQUFlO0lBRTFCLElBQUksQ0FBQyxDQUFvQjtRQUN2QixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEIsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNqQixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDcEI7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUc7UUFDUixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6QyxPQUFPLEtBQUssQ0FBQyxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQVUsR0FBVSxFQUFFLENBQU0sRUFBRSxDQUFNLEVBQUUsSUFBYztRQUN4RSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFP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ZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgKiBhcyBmdXp6eSBmcm9tICdmdXp6eSc7XG5cblxuZXhwb3J0IGNsYXNzIEhlbHBlcnNBcnJheU9iaiB7XG5cbiAgZnJvbShzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBpZiAoXy5pc0FycmF5KHMpKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9XG4gICAgaWYgKF8uaXNTdHJpbmcocykpIHtcbiAgICAgIHJldHVybiBzLnNwbGl0KCcgJylcbiAgICB9XG4gIH1cblxuICBzZWNvbmQoYXJyKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikgfHwgYXJyLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiBhcnJbMV07XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogdXNlIG1vdmVPYmplY3RCZWZvcmVcbiAgICovXG4gIGFycmF5TW92ZUVsZW1lbnRCZWZvcmU8VCA9IGFueT4oYXJyOiBhbnlbXSwgYTogYW55LCBiOiBhbnksIHByb3A/OiBrZXlvZiBUKSB7XG4gICAgbGV0IGluZGV4QSA9IHByb3AgPyBhcnIuZmluZEluZGV4KGVsZW0gPT4gZWxlbVtwcm9wXSA9PT0gYVtwcm9wXSkgOiBhcnIuaW5kZXhPZihhKTtcbiAgICBfLnB1bGxBdChhcnIsIGluZGV4QSk7XG4gICAgbGV0IGluZGV4QiA9IHByb3AgPyBhcnIuZmluZEluZGV4KGVsZW0gPT4gZWxlbVtwcm9wXSA9PT0gYltwcm9wXSkgOiBhcnIuaW5kZXhPZihiKTtcbiAgICBpZiAoaW5kZXhCID09PSAwKSB7XG4gICAgICBhcnIudW5zaGlmdChhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJyLnNwbGljZShpbmRleEIgLSAxLCAwLCBhKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiB1c2UgbW92ZU9iamVjdEFmdGVyXG4gICAqL1xuICBhcnJheU1vdmVFbGVtZW50QWZ0ZXJCPFQgPSBhbnk+KGFycjogYW55W10sIGE6IGFueSwgYjogYW55LCBwcm9wPzoga2V5b2YgVCkge1xuICAgIGxldCBpbmRleEEgPSBwcm9wID8gYXJyLmZpbmRJbmRleChlbGVtID0+IGVsZW1bcHJvcF0gPT09IGFbcHJvcF0pIDogYXJyLmluZGV4T2YoYSk7XG4gICAgXy5wdWxsQXQoYXJyLCBpbmRleEEpO1xuICAgIGxldCBpbmRleEIgPSBwcm9wID8gYXJyLmZpbmRJbmRleChlbGVtID0+IGVsZW1bcHJvcF0gPT09IGJbcHJvcF0pIDogYXJyLmluZGV4T2YoYik7XG4gICAgaWYgKGluZGV4QiA9PT0gYXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgIGFyci5wdXNoKGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcnIuc3BsaWNlKGluZGV4QiArIDEsIDAsIGEpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgbW92ZU9iamVjdEJlZm9yZTxUID0gYW55PihhcnJheTogVFtdLCB0YXJnZXQ6IFQsIGJlZm9yZTogVCk6IFRbXSB7XG4gICAgY29uc3QgbmV3QXJyYXkgPSBbLi4uYXJyYXldO1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gbmV3QXJyYXkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGFyZ2V0KTtcbiAgICBjb25zdCBiZWZvcmVJbmRleCA9IG5ld0FycmF5LmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IGJlZm9yZSk7XG5cbiAgICBpZiAodGFyZ2V0SW5kZXggPT09IC0xIHx8IGJlZm9yZUluZGV4ID09PSAtMSkge1xuXG4gICAgICBjb25zb2xlLmVycm9yKFwiVGFyZ2V0IG9yIEJlZm9yZSBvYmplY3Qgbm90IGZvdW5kIGluIHRoZSBhcnJheVwiKTtcbiAgICAgIHJldHVybiBuZXdBcnJheTtcbiAgICB9XG5cblxuICAgIG5ld0FycmF5LnNwbGljZSh0YXJnZXRJbmRleCwgMSk7XG5cblxuICAgIG5ld0FycmF5LnNwbGljZShiZWZvcmVJbmRleCwgMCwgdGFyZ2V0KTtcblxuICAgIHJldHVybiBuZXdBcnJheTtcbiAgfVxuXG4gIG1vdmVPYmplY3RBZnRlcjxUID0gYW55PihhcnJheTogVFtdLCB0YXJnZXQ6IFQsIGFmdGVyOiBUKTogVFtdIHtcbiAgICBjb25zdCBuZXdBcnJheSA9IFsuLi5hcnJheV07XG4gICAgY29uc3QgdGFyZ2V0SW5kZXggPSBuZXdBcnJheS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSB0YXJnZXQpO1xuICAgIGNvbnN0IGFmdGVySW5kZXggPSBuZXdBcnJheS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSBhZnRlcik7XG5cbiAgICBpZiAodGFyZ2V0SW5kZXggPT09IC0xIHx8IGFmdGVySW5kZXggPT09IC0xKSB7XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJUYXJnZXQgb3IgQWZ0ZXIgb2JqZWN0IG5vdCBmb3VuZCBpbiB0aGUgYXJyYXlcIik7XG4gICAgICByZXR1cm4gbmV3QXJyYXk7XG4gICAgfVxuXG5cbiAgICBuZXdBcnJheS5zcGxpY2UodGFyZ2V0SW5kZXgsIDEpO1xuXG5cbiAgICBuZXdBcnJheS5zcGxpY2UoYWZ0ZXJJbmRleCArIDEsIDAsIHRhcmdldCk7XG5cbiAgICByZXR1cm4gbmV3QXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHVuaXFBcnJheTxUID0gYW55PihhcnJheTogYW55W10sIHVuaXF1ZVByb3BlcnR5PzogKGtleW9mIFQpKSB7XG4gICAgdmFyIHNlZW4gPSB7fTtcbiAgICByZXR1cm4gYXJyYXlcbiAgICAgIC5maWx0ZXIoZiA9PiAhIWYpXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBzZWVuLmhhc093blByb3BlcnR5KHVuaXF1ZVByb3BlcnR5ID8gaXRlbVt1bmlxdWVQcm9wZXJ0eV0gOiBpdGVtKSA/IGZhbHNlXG4gICAgICAgICAgOiAoc2Vlblt1bmlxdWVQcm9wZXJ0eSA/IGl0ZW1bdW5pcXVlUHJvcGVydHldIDogaXRlbV0gPSB0cnVlKTtcbiAgICAgIH0pIGFzIFRbXTtcbiAgfVxuXG4gIHNvcnRLZXlzKG9iaikge1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuIG9iai5tYXAodGhpcy5zb3J0S2V5cyk7XG4gICAgfVxuICAgIGlmIChfLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgIHJldHVybiBfLmZyb21QYWlycyhfLmtleXMob2JqKS5zb3J0KCkubWFwKGtleSA9PiBba2V5LCB0aGlzLnNvcnRLZXlzKG9ialtrZXldKV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvKipcbiAgICogRnV6enkgc2VhcmNoXG4gICAqL1xuICBmdXp6eTxUID0gYW55PihxdWVyeTogc3RyaW5nLCBsaXN0OiBUW10sIHZhbHVlRm4/OiAobW9kZWxGcm9tTGlzdDogVCkgPT4gc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0c0Z1enp5ID0gZnV6enkuZmlsdGVyKFxuICAgICAgcXVlcnksXG4gICAgICBsaXN0Lm1hcChrID0+IHZhbHVlRm4gPyB2YWx1ZUZuKGspIDogayksXG4gICAgKVxuICAgIGNvbnN0IHJlc3VsdHNGdXp6eUtlYmFiID0gZnV6enkuZmlsdGVyKFxuICAgICAgXy5rZWJhYkNhc2UocXVlcnkpLFxuICAgICAgbGlzdC5tYXAoayA9PiBfLmtlYmFiQ2FzZSgodmFsdWVGbiA/IHZhbHVlRm4oaykgOiBrKSBhcyBhbnkpKSxcbiAgICApXG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlc3VsdHNGdXp6eS5tYXAoKGVsKSA9PiBlbC5zdHJpbmcpO1xuICAgIGNvbnN0IG1hdGNoZXNLZWJhYiA9IHJlc3VsdHNGdXp6eUtlYmFiLm1hcCgoZWwpID0+IGVsLnN0cmluZyk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gKHJlc3VsdHNGdXp6eS5sZW5ndGggPT09IDApID8gW10gOiBsaXN0LmZpbHRlcihrID0+IHtcbiAgICAgIHJldHVybiBtYXRjaGVzLmluY2x1ZGVzKCh2YWx1ZUZuID8gdmFsdWVGbihrKSA6IGspIGFzIGFueSk7XG4gICAgfSlcblxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCAmJiBtYXRjaGVzS2ViYWIubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbSA9IGxpc3QuZmluZChrID0+IF8ua2ViYWJDYXNlKCh2YWx1ZUZuID8gdmFsdWVGbihrKSA6IGspIGFzIGFueSkgPT09IF8uZmlyc3QobWF0Y2hlc0tlYmFiKSk7XG4gICAgICByZXN1bHRzLnB1c2gobSk7XG4gICAgICBtYXRjaGVzLnB1c2goKHZhbHVlRm4gPyB2YWx1ZUZuKG0pIDogbSkgYXMgYW55KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBtYXRjaGVzLCByZXN1bHRzIH07XG4gIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWhlbHBlcnMgbGliL2hlbHBlcnMvaGVscGVycy1hcnJheS1vYmoudHMiXX0=
@@ -0,0 +1,12 @@
1
+ export class HelpersNumber {
2
+ constructor() {
3
+ /**
4
+ * @deprecated
5
+ * use _.random()
6
+ */
7
+ this.randomInteger = (max, min) => Math.round(Math.random() * (max - min)) + min;
8
+ }
9
+ }
10
+ ;
11
+ ({}); // @--end-of-file-for-module=tnp-helpers lib/helpers/helpers-numbers.ts
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1udW1iZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9oZWxwZXJzL2hlbHBlcnMtbnVtYmVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sYUFBYTtJQUExQjtRQUNFOzs7V0FHRztRQUNILGtCQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUc5RSxDQUFDO0NBQUE7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHVFQUF1RSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5cbmV4cG9ydCBjbGFzcyBIZWxwZXJzTnVtYmVyIHtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIHVzZSBfLnJhbmRvbSgpXG4gICAqL1xuICByYW5kb21JbnRlZ2VyID0gKG1heCwgbWluKSA9PiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG5cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWhlbHBlcnMgbGliL2hlbHBlcnMvaGVscGVycy1udW1iZXJzLnRzIl19
@@ -0,0 +1,51 @@
1
+ import { _ } from 'tnp-core/browser';
2
+ export class HelpersStringsRegexes {
3
+ escapeStringForRegEx(s) {
4
+ return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
5
+ }
6
+ matchExactOnce(s, regex) {
7
+ if (!_.isString(s) || !_.isRegExp(regex)) {
8
+ return void 0;
9
+ }
10
+ const result = s.match(regex);
11
+ if (_.isNil(result)) {
12
+ return void 0;
13
+ }
14
+ return result.length >= 1 ? _.first(result) : void 0;
15
+ }
16
+ get regex() {
17
+ return {
18
+ /**
19
+ * mathes
20
+ * xxx.xxx.xxx.xxx
21
+ * xxx.xxx.xxx.xxx:port
22
+ * http://xxx.xxx.xxx.xxx:port
23
+ * http://xxx.xxx.xxx.xxx
24
+ * https://xxx.xxx.xxx.xxx:port
25
+ * https://xxx.xxx.xxx.xxx *
26
+ */
27
+ get forStringWithIpHost() {
28
+ const regex = /(http(s)?\:\/\/)?(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\:[0-9]+)?/;
29
+ return regex;
30
+ },
31
+ /**
32
+ * mathes
33
+ * http://domain.com:port
34
+ * http://domain.com
35
+ * http://domain:port
36
+ * http://domain
37
+ * https://domain.com:port
38
+ * https://domain.com
39
+ * https://domain:port
40
+ * https://domain
41
+ */
42
+ get forStringWithDomainHost() {
43
+ const regex = /(((http(s)?\:\/\/)?[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+(\:[0-9]+)?)|((http(s)?\:\/\/)[a-zA-Z0-9-]{1,61}))/;
44
+ return regex;
45
+ }
46
+ };
47
+ }
48
+ }
49
+ ;
50
+ ({}); // @--end-of-file-for-module=tnp-helpers lib/helpers/helpers-strings-regexes.ts
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1zdHJpbmdzLXJlZ2V4ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90bnAtaGVscGVycy9wcm9qZWN0cy90bnAtaGVscGVycy9zcmMvbGliL2hlbHBlcnMvaGVscGVycy1zdHJpbmdzLXJlZ2V4ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE1BQU0sT0FBTyxxQkFBcUI7SUFJaEMsb0JBQW9CLENBQUMsQ0FBUztRQUM1QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGNBQWMsQ0FBQyxDQUFTLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEMsT0FBTyxLQUFLLENBQUMsQ0FBQztTQUNmO1FBQ0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkIsT0FBTyxLQUFLLENBQUMsQ0FBQztTQUNmO1FBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU87WUFDTDs7Ozs7Ozs7YUFRQztZQUNELElBQUksbUJBQW1CO2dCQUNyQixNQUFNLEtBQUssR0FBRyw0TEFBNEwsQ0FBQztnQkFDM00sT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0Q7Ozs7Ozs7Ozs7WUFVQTtZQUNBLElBQUksdUJBQXVCO2dCQUN6QixNQUFNLEtBQUssR0FBRyxrSUFBa0ksQ0FBQztnQkFDakosT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1NBQ0YsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsK0VBQStFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IF8gfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmV4cG9ydCBjbGFzcyBIZWxwZXJzU3RyaW5nc1JlZ2V4ZXMge1xuXG5cblxuICBlc2NhcGVTdHJpbmdGb3JSZWdFeChzOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgfVxuXG4gIG1hdGNoRXhhY3RPbmNlKHM6IHN0cmluZywgcmVnZXg6IFJlZ0V4cCk6IHN0cmluZyB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKHMpIHx8ICFfLmlzUmVnRXhwKHJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gcy5tYXRjaChyZWdleCk7XG4gICAgaWYgKF8uaXNOaWwocmVzdWx0KSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPj0gMSA/IF8uZmlyc3QocmVzdWx0KSA6IHZvaWQgMDtcbiAgfVxuXG4gIGdldCByZWdleCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICogbWF0aGVzXG4gICAgICogeHh4Lnh4eC54eHgueHh4XG4gICAgICogeHh4Lnh4eC54eHgueHh4OnBvcnRcbiAgICAgKiBodHRwOi8veHh4Lnh4eC54eHgueHh4OnBvcnRcbiAgICAgKiBodHRwOi8veHh4Lnh4eC54eHgueHh4XG4gICAgICogaHR0cHM6Ly94eHgueHh4Lnh4eC54eHg6cG9ydFxuICAgICAqIGh0dHBzOi8veHh4Lnh4eC54eHgueHh4ICAgKlxuICAgICAqL1xuICAgICAgZ2V0IGZvclN0cmluZ1dpdGhJcEhvc3QoKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gLyhodHRwKHMpP1xcOlxcL1xcLyk/KDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4oMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxcLigyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPykoXFw6WzAtOV0rKT8vO1xuICAgICAgICByZXR1cm4gcmVnZXg7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgKiBtYXRoZXNcbiAgICAqIGh0dHA6Ly9kb21haW4uY29tOnBvcnRcbiAgICAqIGh0dHA6Ly9kb21haW4uY29tXG4gICAgKiBodHRwOi8vZG9tYWluOnBvcnRcbiAgICAqIGh0dHA6Ly9kb21haW5cbiAgICAqIGh0dHBzOi8vZG9tYWluLmNvbTpwb3J0XG4gICAgKiBodHRwczovL2RvbWFpbi5jb21cbiAgICAqIGh0dHBzOi8vZG9tYWluOnBvcnRcbiAgICAqIGh0dHBzOi8vZG9tYWluXG4gICAgKi9cbiAgICAgIGdldCBmb3JTdHJpbmdXaXRoRG9tYWluSG9zdCgpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSAvKCgoaHR0cChzKT9cXDpcXC9cXC8pP1thLXpBLVowLTldW2EtekEtWjAtOS1dezEsNjF9W2EtekEtWjAtOV0oPzpcXC5bYS16QS1aXXsyLH0pKyhcXDpbMC05XSspPyl8KChodHRwKHMpP1xcOlxcL1xcLylbYS16QS1aMC05LV17MSw2MX0pKS87XG4gICAgICAgIHJldHVybiByZWdleDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRucC1oZWxwZXJzIGxpYi9oZWxwZXJzL2hlbHBlcnMtc3RyaW5ncy1yZWdleGVzLnRzIl19
@@ -0,0 +1,258 @@
1
+ import { _ } from 'tnp-core/browser';
2
+ import { Helpers } from '../index';
3
+ export class HelpersStrings {
4
+ /**
5
+ * Example:
6
+ *
7
+ * const result = interpolateString("I'm {age} years old!")
8
+ * .withParameters({ age: 29 });
9
+ *
10
+ * const result = interpolateString("The {a} says {n}, {n}, {n}!")
11
+ * .withParameters({ a: 'cow', n: 'moo' });
12
+ *
13
+ *
14
+ * @param value string to interpolate
15
+ * @param parameters object with parametes
16
+ */
17
+ interpolateString(value) {
18
+ if (typeof value !== 'string') {
19
+ Helpers.warn('[firedev-heleprs] Value for interpolation is not string: ', value);
20
+ return value;
21
+ }
22
+ return {
23
+ withParameters(parameters) {
24
+ if (typeof parameters !== 'object') {
25
+ Helpers.log(parameters);
26
+ Helpers.warn('[firedev-heleprs] Parameters are not a object: ');
27
+ return value;
28
+ }
29
+ return value.replace(/{([^{}]*)}/g, function (a, b) {
30
+ var r = parameters[b];
31
+ return typeof r === 'string' || typeof r === 'number' ? r : a;
32
+ });
33
+ }
34
+ };
35
+ }
36
+ /**
37
+ *
38
+ * @param pixelsCss exmaple: 100px
39
+ * @returns number value
40
+ */
41
+ numValue(pixelsCss) {
42
+ return parseInt(pixelsCss.replace('px', ''));
43
+ }
44
+ /**
45
+ * examples:
46
+ * 'aa bb bb' => ['aa','bb','cc'],
47
+ * 'aa' => ['aa']
48
+ * ['aa'] => ['aa']
49
+ */
50
+ splitIfNeed(stringOrArr) {
51
+ let res = [];
52
+ if (_.isArray(stringOrArr)) {
53
+ res = stringOrArr.map(s => {
54
+ return s.trim();
55
+ });
56
+ }
57
+ if (_.isString(stringOrArr)) {
58
+ res = stringOrArr.split(/\s*[\s,]\s*/);
59
+ }
60
+ return res.filter(f => !!f && (f.trim() !== ''));
61
+ }
62
+ removeDoubleOrMoreEmptyLines(s) {
63
+ s = s?.split('\n').map(f => f.trimRight()).join('\n');
64
+ return s?.replace(/(\r\n|\r|\n){2,}/g, '$1\n');
65
+ }
66
+ /**
67
+ *
68
+ * https://stackoverflow.com/a/57129703/1345101
69
+ *
70
+ * Returns the plural of an English word.
71
+ *
72
+ * @export
73
+ * @param {string} word
74
+ * @param {number} [amount]
75
+ * @returns {string}
76
+ */
77
+ plural(word, amount) {
78
+ if (amount !== undefined && amount === 1) {
79
+ return word;
80
+ }
81
+ const plural = {
82
+ '(quiz)$': "$1zes",
83
+ '^(ox)$': "$1en",
84
+ '([m|l])ouse$': "$1ice",
85
+ '(matr|vert|ind)ix|ex$': "$1ices",
86
+ '(x|ch|ss|sh)$': "$1es",
87
+ '([^aeiouy]|qu)y$': "$1ies",
88
+ '(hive)$': "$1s",
89
+ '(?:([^f])fe|([lr])f)$': "$1$2ves",
90
+ '(shea|lea|loa|thie)f$': "$1ves",
91
+ 'sis$': "ses",
92
+ '([ti])um$': "$1a",
93
+ '(tomat|potat|ech|her|vet)o$': "$1oes",
94
+ '(bu)s$': "$1ses",
95
+ '(alias)$': "$1es",
96
+ '(octop)us$': "$1i",
97
+ '(ax|test)is$': "$1es",
98
+ '(us)$': "$1es",
99
+ '([^s]+)$': "$1s"
100
+ };
101
+ const irregular = {
102
+ 'move': 'moves',
103
+ 'foot': 'feet',
104
+ 'goose': 'geese',
105
+ 'sex': 'sexes',
106
+ 'child': 'children',
107
+ 'man': 'men',
108
+ 'tooth': 'teeth',
109
+ 'person': 'people'
110
+ };
111
+ const uncountable = [
112
+ 'sheep',
113
+ 'fish',
114
+ 'deer',
115
+ 'moose',
116
+ 'series',
117
+ 'species',
118
+ 'money',
119
+ 'rice',
120
+ 'information',
121
+ 'equipment',
122
+ 'bison',
123
+ 'cod',
124
+ 'offspring',
125
+ 'pike',
126
+ 'salmon',
127
+ 'shrimp',
128
+ 'swine',
129
+ 'trout',
130
+ 'aircraft',
131
+ 'hovercraft',
132
+ 'spacecraft',
133
+ 'sugar',
134
+ 'tuna',
135
+ 'you',
136
+ 'wood'
137
+ ];
138
+ if (uncountable.indexOf(word.toLowerCase()) >= 0) {
139
+ return word;
140
+ }
141
+ for (const w in irregular) {
142
+ const pattern = new RegExp(`${w}$`, 'i');
143
+ const replace = irregular[w];
144
+ if (pattern.test(word)) {
145
+ return word.replace(pattern, replace);
146
+ }
147
+ }
148
+ for (const reg in plural) {
149
+ const pattern = new RegExp(reg, 'i');
150
+ if (pattern.test(word)) {
151
+ return word.replace(pattern, plural[reg]);
152
+ }
153
+ }
154
+ return word;
155
+ }
156
+ /**
157
+ * https://stackoverflow.com/a/57129703/1345101
158
+ *
159
+ * Returns the singular of an English word.
160
+ *
161
+ * @export
162
+ * @param {string} word
163
+ * @param {number} [amount]
164
+ * @returns {string}
165
+ */
166
+ singular(word, amount) {
167
+ if (amount !== undefined && amount !== 1) {
168
+ return word;
169
+ }
170
+ const singular = {
171
+ '(quiz)zes$': "$1",
172
+ '(matr)ices$': "$1ix",
173
+ '(vert|ind)ices$': "$1ex",
174
+ '^(ox)en$': "$1",
175
+ '(alias)es$': "$1",
176
+ '(octop|vir)i$': "$1us",
177
+ '(cris|ax|test)es$': "$1is",
178
+ '(shoe)s$': "$1",
179
+ '(o)es$': "$1",
180
+ '(bus)es$': "$1",
181
+ '([m|l])ice$': "$1ouse",
182
+ '(x|ch|ss|sh)es$': "$1",
183
+ '(m)ovies$': "$1ovie",
184
+ '(s)eries$': "$1eries",
185
+ '([^aeiouy]|qu)ies$': "$1y",
186
+ '([lr])ves$': "$1f",
187
+ '(tive)s$': "$1",
188
+ '(hive)s$': "$1",
189
+ '(li|wi|kni)ves$': "$1fe",
190
+ '(shea|loa|lea|thie)ves$': "$1f",
191
+ '(^analy)ses$': "$1sis",
192
+ '((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$': "$1$2sis",
193
+ '([ti])a$': "$1um",
194
+ '(n)ews$': "$1ews",
195
+ '(h|bl)ouses$': "$1ouse",
196
+ '(corpse)s$': "$1",
197
+ '(us)es$': "$1",
198
+ 's$': ""
199
+ };
200
+ const irregular = {
201
+ 'move': 'moves',
202
+ 'foot': 'feet',
203
+ 'goose': 'geese',
204
+ 'sex': 'sexes',
205
+ 'child': 'children',
206
+ 'man': 'men',
207
+ 'tooth': 'teeth',
208
+ 'person': 'people'
209
+ };
210
+ const uncountable = [
211
+ 'sheep',
212
+ 'fish',
213
+ 'deer',
214
+ 'moose',
215
+ 'series',
216
+ 'species',
217
+ 'money',
218
+ 'rice',
219
+ 'information',
220
+ 'equipment',
221
+ 'bison',
222
+ 'cod',
223
+ 'offspring',
224
+ 'pike',
225
+ 'salmon',
226
+ 'shrimp',
227
+ 'swine',
228
+ 'trout',
229
+ 'aircraft',
230
+ 'hovercraft',
231
+ 'spacecraft',
232
+ 'sugar',
233
+ 'tuna',
234
+ 'you',
235
+ 'wood'
236
+ ];
237
+ if (uncountable.indexOf(word.toLowerCase()) >= 0) {
238
+ return word;
239
+ }
240
+ for (const w in irregular) {
241
+ const pattern = new RegExp(`${irregular[w]}$`, 'i');
242
+ const replace = w;
243
+ if (pattern.test(word)) {
244
+ return word.replace(pattern, replace);
245
+ }
246
+ }
247
+ for (const reg in singular) {
248
+ const pattern = new RegExp(reg, 'i');
249
+ if (pattern.test(word)) {
250
+ return word.replace(pattern, singular[reg]);
251
+ }
252
+ }
253
+ return word;
254
+ }
255
+ }
256
+ ;
257
+ ({}); // @--end-of-file-for-module=tnp-helpers lib/helpers/helpers-strings.ts
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1zdHJpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9oZWxwZXJzL2hlbHBlcnMtc3RyaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuQyxNQUFNLE9BQU8sY0FBYztJQUV6Qjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxpQkFBaUIsQ0FBVSxLQUFhO1FBQ3RDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkRBQTJELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakYsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU87WUFDTCxjQUFjLENBQUMsVUFBYTtnQkFDMUIsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7b0JBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBaUIsQ0FBQyxDQUFDO29CQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7b0JBQ2hFLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN0QixPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxDQUFRLENBQUMsQ0FBQztZQUNaLENBQUM7U0FDRixDQUFBO0lBRUgsQ0FB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QUFVO1lBQ1YsWUFBWTtZQUNaLFlBQVk7WUFDWixPQUFPO1lBQ1AsTUFBTTtZQUNOLEtBQUs7WUFDTCxNQUFNO1NBQ1AsQ0FBQTtRQUVELElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEQsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFBO1lBQ2pCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTthQUN0QztTQUNGO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUU7WUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBQ3BDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTthQUM1QztTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0NBRUY7QUFHQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHVFQUF1RSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5leHBvcnQgY2xhc3MgSGVscGVyc1N0cmluZ3Mge1xuXG4gIC8qKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiBjb25zdCByZXN1bHQgPSBpbnRlcnBvbGF0ZVN0cmluZyhcIkknbSB7YWdlfSB5ZWFycyBvbGQhXCIpXG4gICAqIC53aXRoUGFyYW1ldGVycyh7IGFnZTogMjkgfSk7XG4gICAqXG4gICAqIGNvbnN0IHJlc3VsdCA9IGludGVycG9sYXRlU3RyaW5nKFwiVGhlIHthfSBzYXlzIHtufSwge259LCB7bn0hXCIpXG4gICAqIC53aXRoUGFyYW1ldGVycyh7IGE6ICdjb3cnLCBuOiAnbW9vJyB9KTtcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIHN0cmluZyB0byBpbnRlcnBvbGF0ZVxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBvYmplY3Qgd2l0aCBwYXJhbWV0ZXNcbiAgICovXG4gIGludGVycG9sYXRlU3RyaW5nPFQgPSBhbnk+KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgSGVscGVycy53YXJuKCdbZmlyZWRldi1oZWxlcHJzXSBWYWx1ZSBmb3IgaW50ZXJwb2xhdGlvbiBpcyBub3Qgc3RyaW5nOiAnLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpdGhQYXJhbWV0ZXJzKHBhcmFtZXRlcnM6IFQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIEhlbHBlcnMubG9nKHBhcmFtZXRlcnMgYXMgYW55KTtcbiAgICAgICAgICBIZWxwZXJzLndhcm4oJ1tmaXJlZGV2LWhlbGVwcnNdIFBhcmFtZXRlcnMgYXJlIG5vdCBhIG9iamVjdDogJyk7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC97KFtee31dKil9L2csIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgdmFyIHIgPSBwYXJhbWV0ZXJzW2JdO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHIgPT09ICdudW1iZXInID8gciA6IGE7XG4gICAgICAgIH0gYXMgYW55KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcGl4ZWxzQ3NzIGV4bWFwbGU6IDEwMHB4XG4gICAqIEByZXR1cm5zIG51bWJlciB2YWx1ZVxuICAgKi9cbiAgbnVtVmFsdWUocGl4ZWxzQ3NzOiBzdHJpbmcpIHtcblxuICAgIHJldHVybiBwYXJzZUludChwaXhlbHNDc3MucmVwbGFjZSgncHgnLCAnJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4YW1wbGVzOlxuICAgKiAnYWEgYmIgYmInID0+IFsnYWEnLCdiYicsJ2NjJ10sXG4gICAqICdhYScgPT4gWydhYSddXG4gICAqIFsnYWEnXSA9PiBbJ2FhJ11cbiAgICovXG4gIHNwbGl0SWZOZWVkKHN0cmluZ09yQXJyOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzID0gW107XG4gICAgaWYgKF8uaXNBcnJheShzdHJpbmdPckFycikpIHtcbiAgICAgIHJlcyA9IHN0cmluZ09yQXJyLm1hcChzID0+IHtcbiAgICAgICAgcmV0dXJuIHMudHJpbSgpO1xuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKF8uaXNTdHJpbmcoc3RyaW5nT3JBcnIpKSB7XG4gICAgICByZXMgPSBzdHJpbmdPckFyci5zcGxpdCgvXFxzKltcXHMsXVxccyovKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5maWx0ZXIoZiA9PiAhIWYgJiYgKGYudHJpbSgpICE9PSAnJykpO1xuICB9XG5cbiAgcmVtb3ZlRG91YmxlT3JNb3JlRW1wdHlMaW5lcyhzOiBzdHJpbmcpIHtcbiAgICBzID0gcz8uc3BsaXQoJ1xcbicpLm1hcChmID0+IGYudHJpbVJpZ2h0KCkpLmpvaW4oJ1xcbicpO1xuICAgIHJldHVybiBzPy5yZXBsYWNlKC8oXFxyXFxufFxccnxcXG4pezIsfS9nLCAnJDFcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTcxMjk3MDMvMTM0NTEwMVxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSBwbHVyYWwgb2YgYW4gRW5nbGlzaCB3b3JkLlxuICAgKlxuICAgKiBAZXhwb3J0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB3b3JkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYW1vdW50XVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcGx1cmFsKHdvcmQ6IHN0cmluZywgYW1vdW50PzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoYW1vdW50ICE9PSB1bmRlZmluZWQgJiYgYW1vdW50ID09PSAxKSB7XG4gICAgICByZXR1cm4gd29yZFxuICAgIH1cbiAgICBjb25zdCBwbHVyYWw6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnKHF1aXopJCc6IFwiJDF6ZXNcIixcbiAgICAgICdeKG94KSQnOiBcIiQxZW5cIixcbiAgICAgICcoW218bF0pb3VzZSQnOiBcIiQxaWNlXCIsXG4gICAgICAnKG1hdHJ8dmVydHxpbmQpaXh8ZXgkJzogXCIkMWljZXNcIixcbiAgICAgICcoeHxjaHxzc3xzaCkkJzogXCIkMWVzXCIsXG4gICAgICAnKFteYWVpb3V5XXxxdSl5JCc6IFwiJDFpZXNcIixcbiAgICAgICcoaGl2ZSkkJzogXCIkMXNcIixcbiAgICAgICcoPzooW15mXSlmZXwoW2xyXSlmKSQnOiBcIiQxJDJ2ZXNcIixcbiAgICAgICcoc2hlYXxsZWF8bG9hfHRoaWUpZiQnOiBcIiQxdmVzXCIsXG4gICAgICAnc2lzJCc6IFwic2VzXCIsXG4gICAgICAnKFt0aV0pdW0kJzogXCIkMWFcIixcbiAgICAgICcodG9tYXR8cG90YXR8ZWNofGhlcnx2ZXQpbyQnOiBcIiQxb2VzXCIsXG4gICAgICAnKGJ1KXMkJzogXCIkMXNlc1wiLFxuICAgICAgJyhhbGlhcykkJzogXCIkMWVzXCIsXG4gICAgICAnKG9jdG9wKXVzJCc6IFwiJDFpXCIsXG4gICAgICAnKGF4fHRlc3QpaXMkJzogXCIkMWVzXCIsXG4gICAgICAnKHVzKSQnOiBcIiQxZXNcIixcbiAgICAgICcoW15zXSspJCc6IFwiJDFzXCJcbiAgICB9XG4gICAgY29uc3QgaXJyZWd1bGFyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgJ21vdmUnOiAnbW92ZXMnLFxuICAgICAgJ2Zvb3QnOiAnZmVldCcsXG4gICAgICAnZ29vc2UnOiAnZ2Vlc2UnLFxuICAgICAgJ3NleCc6ICdzZXhlcycsXG4gICAgICAnY2hpbGQnOiAnY2hpbGRyZW4nLFxuICAgICAgJ21hbic6ICdtZW4nLFxuICAgICAgJ3Rvb3RoJzogJ3RlZXRoJyxcbiAgICAgICdwZXJzb24nOiAncGVvcGxlJ1xuICAgIH1cbiAgICBjb25zdCB1bmNvdW50YWJsZTogc3RyaW5nW10gPSBbXG4gICAgICAnc2hlZXAnLFxuICAgICAgJ2Zpc2gnLFxuICAgICAgJ2RlZXInLFxuICAgICAgJ21vb3NlJyxcbiAgICAgICdzZXJpZXMnLFxuICAgICAgJ3NwZWNpZXMnLFxuICAgICAgJ21vbmV5JyxcbiAgICAgICdyaWNlJyxcbiAgICAgICdpbmZvcm1hdGlvbicsXG4gICAgICAnZXF1aXBtZW50JyxcbiAgICAgICdiaXNvbicsXG4gICAgICAnY29kJyxcbiAgICAgICdvZmZzcHJpbmcnLFxuICAgICAgJ3Bpa2UnLFxuICAgICAgJ3NhbG1vbicsXG4gICAgICAnc2hyaW1wJyxcbiAgICAgICdzd2luZScsXG4gICAgICAndHJvdXQnLFxuICAgICAgJ2FpcmNyYWZ0JyxcbiAgICAgICdob3ZlcmNyYWZ0JyxcbiAgICAgICdzcGFjZWNyYWZ0JyxcbiAgICAgICdzdWdhcicsXG4gICAgICAndHVuYScsXG4gICAgICAneW91JyxcbiAgICAgICd3b29kJ1xuICAgIF1cblxuICAgIGlmICh1bmNvdW50YWJsZS5pbmRleE9mKHdvcmQudG9Mb3dlckNhc2UoKSkgPj0gMCkge1xuICAgICAgcmV0dXJuIHdvcmRcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHcgaW4gaXJyZWd1bGFyKSB7XG4gICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgJHt3fSRgLCAnaScpXG4gICAgICBjb25zdCByZXBsYWNlID0gaXJyZWd1bGFyW3ddXG4gICAgICBpZiAocGF0dGVybi50ZXN0KHdvcmQpKSB7XG4gICAgICAgIHJldHVybiB3b3JkLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlZyBpbiBwbHVyYWwpIHtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKHJlZywgJ2knKVxuICAgICAgaWYgKHBhdHRlcm4udGVzdCh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC5yZXBsYWNlKHBhdHRlcm4sIHBsdXJhbFtyZWddKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd29yZFxuICB9XG5cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU3MTI5NzAzLzEzNDUxMDFcbiAgICpcbiAgKiBSZXR1cm5zIHRoZSBzaW5ndWxhciBvZiBhbiBFbmdsaXNoIHdvcmQuXG4gICpcbiAgKiBAZXhwb3J0XG4gICogQHBhcmFtIHtzdHJpbmd9IHdvcmRcbiAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudF1cbiAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAqL1xuICBzaW5ndWxhcih3b3JkOiBzdHJpbmcsIGFtb3VudD86IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGFtb3VudCAhPT0gdW5kZWZpbmVkICYmIGFtb3VudCAhPT0gMSkge1xuICAgICAgcmV0dXJuIHdvcmRcbiAgICB9XG4gICAgY29uc3Qgc2luZ3VsYXI6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnKHF1aXopemVzJCc6IFwiJDFcIixcbiAgICAgICcobWF0cilpY2VzJCc6IFwiJDFpeFwiLFxuICAgICAgJyh2ZXJ0fGluZClpY2VzJCc6IFwiJDFleFwiLFxuICAgICAgJ14ob3gpZW4kJzogXCIkMVwiLFxuICAgICAgJyhhbGlhcyllcyQnOiBcIiQxXCIsXG4gICAgICAnKG9jdG9wfHZpcilpJCc6IFwiJDF1c1wiLFxuICAgICAgJyhjcmlzfGF4fHRlc3QpZXMkJzogXCIkMWlzXCIsXG4gICAgICAnKHNob2UpcyQnOiBcIiQxXCIsXG4gICAgICAnKG8pZXMkJzogXCIkMVwiLFxuICAgICAgJyhidXMpZXMkJzogXCIkMVwiLFxuICAgICAgJyhbbXxsXSlpY2UkJzogXCIkMW91c2VcIixcbiAgICAgICcoeHxjaHxzc3xzaCllcyQnOiBcIiQxXCIsXG4gICAgICAnKG0pb3ZpZXMkJzogXCIkMW92aWVcIixcbiAgICAgICcocyllcmllcyQnOiBcIiQxZXJpZXNcIixcbiAgICAgICcoW15hZWlvdXldfHF1KWllcyQnOiBcIiQxeVwiLFxuICAgICAgJyhbbHJdKXZlcyQnOiBcIiQxZlwiLFxuICAgICAgJyh0aXZlKXMkJzogXCIkMVwiLFxuICAgICAgJyhoaXZlKXMkJzogXCIkMVwiLFxuICAgICAgJyhsaXx3aXxrbmkpdmVzJCc6IFwiJDFmZVwiLFxuICAgICAgJyhzaGVhfGxvYXxsZWF8dGhpZSl2ZXMkJzogXCIkMWZcIixcbiAgICAgICcoXmFuYWx5KXNlcyQnOiBcIiQxc2lzXCIsXG4gICAgICAnKChhKW5hbHl8KGIpYXwoZClpYWdub3wocClhcmVudGhlfChwKXJvZ25vfChzKXlub3B8KHQpaGUpc2VzJCc6IFwiJDEkMnNpc1wiLFxuICAgICAgJyhbdGldKWEkJzogXCIkMXVtXCIsXG4gICAgICAnKG4pZXdzJCc6IFwiJDFld3NcIixcbiAgICAgICcoaHxibClvdXNlcyQnOiBcIiQxb3VzZVwiLFxuICAgICAgJyhjb3Jwc2UpcyQnOiBcIiQxXCIsXG4gICAgICAnKHVzKWVzJCc6IFwiJDFcIixcbiAgICAgICdzJCc6IFwiXCJcbiAgICB9XG4gICAgY29uc3QgaXJyZWd1bGFyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgJ21vdmUnOiAnbW92ZXMnLFxuICAgICAgJ2Zvb3QnOiAnZmVldCcsXG4gICAgICAnZ29vc2UnOiAnZ2Vlc2UnLFxuICAgICAgJ3NleCc6ICdzZXhlcycsXG4gICAgICAnY2hpbGQnOiAnY2hpbGRyZW4nLFxuICAgICAgJ21hbic6ICdtZW4nLFxuICAgICAgJ3Rvb3RoJzogJ3RlZXRoJyxcbiAgICAgICdwZXJzb24nOiAncGVvcGxlJ1xuICAgIH1cbiAgICBjb25zdCB1bmNvdW50YWJsZTogc3RyaW5nW10gPSBbXG4gICAgICAnc2hlZXAnLFxuICAgICAgJ2Zpc2gnLFxuICAgICAgJ2RlZXInLFxuICAgICAgJ21vb3NlJyxcbiAgICAgICdzZXJpZXMnLFxuICAgICAgJ3NwZWNpZXMnLFxuICAgICAgJ21vbmV5JyxcbiAgICAgICdyaWNlJyxcbiAgICAgICdpbmZvcm1hdGlvbicsXG4gICAgICAnZXF1aXBtZW50JyxcbiAgICAgICdiaXNvbicsXG4gICAgICAnY29kJyxcbiAgICAgICdvZmZzcHJpbmcnLFxuICAgICAgJ3Bpa2UnLFxuICAgICAgJ3NhbG1vbicsXG4gICAgICAnc2hyaW1wJyxcbiAgICAgICdzd2luZScsXG4gICAgICAndHJvdXQnLFxuICAgICAgJ2FpcmNyYWZ0JyxcbiAgICAgICdob3ZlcmNyYWZ0JyxcbiAgICAgICdzcGFjZWNyYWZ0JyxcbiAgICAgICdzdWdhcicsXG4gICAgICAndHVuYScsXG4gICAgICAneW91JyxcbiAgICAgICd3b29kJ1xuICAgIF1cblxuICAgIGlmICh1bmNvdW50YWJsZS5pbmRleE9mKHdvcmQudG9Mb3dlckNhc2UoKSkgPj0gMCkge1xuICAgICAgcmV0dXJuIHdvcmRcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHcgaW4gaXJyZWd1bGFyKSB7XG4gICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgJHtpcnJlZ3VsYXJbd119JGAsICdpJylcbiAgICAgIGNvbnN0IHJlcGxhY2UgPSB3XG4gICAgICBpZiAocGF0dGVybi50ZXN0KHdvcmQpKSB7XG4gICAgICAgIHJldHVybiB3b3JkLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlZyBpbiBzaW5ndWxhcikge1xuICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAocmVnLCAnaScpXG4gICAgICBpZiAocGF0dGVybi50ZXN0KHdvcmQpKSB7XG4gICAgICAgIHJldHVybiB3b3JkLnJlcGxhY2UocGF0dGVybiwgc2luZ3VsYXJbcmVnXSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHdvcmRcbiAgfVxuXG59XG5cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRucC1oZWxwZXJzIGxpYi9oZWxwZXJzL2hlbHBlcnMtc3RyaW5ncy50cyJdfQ==