tnp-helpers 18.0.25 → 19.0.1

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 (502) hide show
  1. package/assets/shared/shared_folder_info.txt +1 -1
  2. package/browser/README.md +24 -24
  3. package/browser/fesm2022/tnp-helpers.mjs +468 -431
  4. package/browser/fesm2022/tnp-helpers.mjs.map +1 -1
  5. package/browser/lib/base/classes/{base-cli-worker-config.d.ts → base-cli-worker/base-cli-worker-config.d.ts} +2 -2
  6. package/browser/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.d.ts +40 -0
  7. package/{websql/lib/base/classes → browser/lib/base/classes/base-cli-worker}/base-cli-worker.d.ts +23 -45
  8. package/browser/lib/base/classes/base-cli-worker/index.d.ts +5 -0
  9. package/browser/lib/base/classes/base-git.d.ts +1 -1
  10. package/browser/lib/base/classes/base-node-modules.d.ts +1 -1
  11. package/browser/lib/base/classes/index.d.ts +0 -2
  12. package/browser/lib/base/tcp-udp-ports/ports.controller.d.ts +2 -2
  13. package/browser/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
  14. package/browser/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.d.ts +20 -0
  15. package/browser/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +6 -22
  16. package/browser/lib/models.d.ts +3 -1
  17. package/client/README.md +24 -24
  18. package/client/fesm2022/tnp-helpers.mjs +468 -431
  19. package/client/fesm2022/tnp-helpers.mjs.map +1 -1
  20. package/client/lib/base/classes/{base-cli-worker-config.d.ts → base-cli-worker/base-cli-worker-config.d.ts} +2 -2
  21. package/client/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.d.ts +40 -0
  22. package/client/lib/base/classes/{base-cli-worker.d.ts → base-cli-worker/base-cli-worker.d.ts} +23 -45
  23. package/client/lib/base/classes/base-cli-worker/index.d.ts +5 -0
  24. package/client/lib/base/classes/base-git.d.ts +1 -1
  25. package/client/lib/base/classes/base-node-modules.d.ts +1 -1
  26. package/client/lib/base/classes/index.d.ts +0 -2
  27. package/client/lib/base/tcp-udp-ports/ports.controller.d.ts +2 -2
  28. package/client/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
  29. package/client/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.d.ts +20 -0
  30. package/client/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +6 -22
  31. package/client/lib/models.d.ts +3 -1
  32. package/index.js.map +1 -1
  33. package/lib/base/classes/base-bower-json.js.map +1 -1
  34. package/lib/base/classes/{base-cli-worker-config.d.ts → base-cli-worker/base-cli-worker-config.d.ts} +1 -1
  35. package/lib/base/classes/base-cli-worker/base-cli-worker-config.js.map +1 -0
  36. package/lib/base/classes/base-cli-worker/base-cli-worker-controller.js.map +1 -0
  37. package/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.d.ts +39 -0
  38. package/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.js +148 -0
  39. package/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.js.map +1 -0
  40. package/lib/base/classes/{base-cli-worker.d.ts → base-cli-worker/base-cli-worker.d.ts} +21 -43
  41. package/lib/base/classes/{base-cli-worker.js → base-cli-worker/base-cli-worker.js} +93 -173
  42. package/lib/base/classes/base-cli-worker/base-cli-worker.js.map +1 -0
  43. package/lib/base/classes/base-cli-worker/index.d.ts +4 -0
  44. package/lib/base/classes/base-cli-worker/index.js +21 -0
  45. package/lib/base/classes/base-cli-worker/index.js.map +1 -0
  46. package/lib/base/classes/base-command-line-feature.backend.js.map +1 -1
  47. package/lib/base/classes/base-compiler-for-project.js.map +1 -1
  48. package/lib/base/classes/base-db.js.map +1 -1
  49. package/lib/base/classes/base-debounce-compiler-for-project.js.map +1 -1
  50. package/lib/base/classes/base-feature-for-project.js.map +1 -1
  51. package/lib/base/classes/base-git.js.map +1 -1
  52. package/lib/base/classes/base-global-command-line.backend.d.ts +2 -0
  53. package/lib/base/classes/base-global-command-line.backend.js +36 -1
  54. package/lib/base/classes/base-global-command-line.backend.js.map +1 -1
  55. package/lib/base/classes/base-ignore-hide.js.map +1 -1
  56. package/lib/base/classes/base-json-file-reader.js.map +1 -1
  57. package/lib/base/classes/base-library-build.js.map +1 -1
  58. package/lib/base/classes/base-linked-projects.js.map +1 -1
  59. package/lib/base/classes/base-node-modules.d.ts +1 -1
  60. package/lib/base/classes/base-node-modules.js.map +1 -1
  61. package/lib/base/classes/base-npm-helpers.js.map +1 -1
  62. package/lib/base/classes/base-package-json.js.map +1 -1
  63. package/lib/base/classes/base-powershell.js.map +1 -1
  64. package/lib/base/classes/base-process-manager.js.map +1 -1
  65. package/lib/base/classes/base-project-resolver.js.map +1 -1
  66. package/lib/base/classes/base-project.d.ts +1 -1
  67. package/lib/base/classes/base-project.js.map +1 -1
  68. package/lib/base/classes/base-quick-fixes.js.map +1 -1
  69. package/lib/base/classes/base-release-process.js.map +1 -1
  70. package/lib/base/classes/base-start-config.backend.js.map +1 -1
  71. package/lib/base/classes/base-static-pages.js.map +1 -1
  72. package/lib/base/classes/base-vscode.js +8 -12
  73. package/lib/base/classes/base-vscode.js.map +1 -1
  74. package/lib/base/classes/index.d.ts +0 -2
  75. package/lib/base/classes/index.js +0 -2
  76. package/lib/base/classes/index.js.map +1 -1
  77. package/lib/base/commit-data.js.map +1 -1
  78. package/lib/base/config-database.js.map +1 -1
  79. package/lib/base/core-project.js.map +1 -1
  80. package/lib/base/gh-temp-code.js.map +1 -1
  81. package/lib/base/index-rebuilder.backend.js.map +1 -1
  82. package/lib/base/index.js.map +1 -1
  83. package/lib/base/linked-project.js.map +1 -1
  84. package/lib/base/project-database.js.map +1 -1
  85. package/lib/base/tcp-udp-ports/index.js.map +1 -1
  86. package/lib/base/tcp-udp-ports/not-assignable-port.entity.js +2 -2
  87. package/lib/base/tcp-udp-ports/not-assignable-port.entity.js.map +1 -1
  88. package/lib/base/tcp-udp-ports/ports.controller.d.ts +2 -2
  89. package/lib/base/tcp-udp-ports/ports.controller.js +2 -2
  90. package/lib/base/tcp-udp-ports/ports.controller.js.map +1 -1
  91. package/lib/base/tcp-udp-ports/ports.entity.js.map +1 -1
  92. package/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
  93. package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js +2 -2
  94. package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js.map +1 -1
  95. package/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.d.ts +32 -0
  96. package/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.js +256 -0
  97. package/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.js.map +1 -0
  98. package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +6 -35
  99. package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js +4 -284
  100. package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js.map +1 -1
  101. package/lib/base/translate.js.map +1 -1
  102. package/lib/build-info._auto-generated_.js.map +1 -1
  103. package/lib/helpers/for-backend/helpers-cli-tool.backend.js.map +1 -1
  104. package/lib/helpers/for-backend/helpers-console-gui.js.map +1 -1
  105. package/lib/helpers/for-backend/helpers-dependencies.backend.js.map +1 -1
  106. package/lib/helpers/for-backend/helpers-file-folders.js.map +1 -1
  107. package/lib/helpers/for-backend/helpers-git.backend.d.ts +2 -0
  108. package/lib/helpers/for-backend/helpers-git.backend.js +34 -23
  109. package/lib/helpers/for-backend/helpers-git.backend.js.map +1 -1
  110. package/lib/helpers/for-backend/helpers-network.backend.js.map +1 -1
  111. package/lib/helpers/for-backend/helpers-npm.backend.js.map +1 -1
  112. package/lib/helpers/for-backend/helpers-path.backend.js.map +1 -1
  113. package/lib/helpers/for-backend/helpers-process.js.map +1 -1
  114. package/lib/helpers/for-backend/helpers-system-terminal.backend.js.map +1 -1
  115. package/lib/helpers/for-backend/helpers-vscode.backend.js.map +1 -1
  116. package/lib/helpers/for-browser/angular.helper.js +2 -2
  117. package/lib/helpers/for-browser/angular.helper.js.map +1 -1
  118. package/lib/helpers/for-browser/helpers-browser.js.map +1 -1
  119. package/lib/helpers/helpers-array-obj.js.map +1 -1
  120. package/lib/helpers/helpers-json5.backend.js.map +1 -1
  121. package/lib/helpers/helpers-numbers.js.map +1 -1
  122. package/lib/helpers/helpers-strings-regexes.js.map +1 -1
  123. package/lib/helpers/helpers-strings.js.map +1 -1
  124. package/lib/helpers/helpers.js.map +1 -1
  125. package/lib/index._auto-generated_.js.map +1 -1
  126. package/lib/index.js.map +1 -1
  127. package/lib/lowdb/adapters/Memory.js.map +1 -1
  128. package/lib/lowdb/adapters/browser/LocalStorage.js.map +1 -1
  129. package/lib/lowdb/adapters/browser/SessionStorage.js.map +1 -1
  130. package/lib/lowdb/adapters/browser/WebStorage.js.map +1 -1
  131. package/lib/lowdb/adapters/node/DataFile.js.map +1 -1
  132. package/lib/lowdb/adapters/node/JSONFile.js.map +1 -1
  133. package/lib/lowdb/adapters/node/TextFile.js.map +1 -1
  134. package/lib/lowdb/adapters/node/steno.js.map +1 -1
  135. package/lib/lowdb/browser.js.map +1 -1
  136. package/lib/lowdb/core/Low.js.map +1 -1
  137. package/lib/lowdb/examples/browser.js.map +1 -1
  138. package/lib/lowdb/examples/cli.js.map +1 -1
  139. package/lib/lowdb/examples/in-memory.js.map +1 -1
  140. package/lib/lowdb/examples/server.js.map +1 -1
  141. package/lib/lowdb/index.js.map +1 -1
  142. package/lib/lowdb/node.js.map +1 -1
  143. package/lib/lowdb/presets/browser.js.map +1 -1
  144. package/lib/lowdb/presets/node.js.map +1 -1
  145. package/lib/models.d.ts +2 -0
  146. package/lib/models.js.map +1 -1
  147. package/lib/old/base-component.js +2 -2
  148. package/lib/old/base-component.js.map +1 -1
  149. package/lib/old/base-formly-component.js +2 -2
  150. package/lib/old/base-formly-component.js.map +1 -1
  151. package/lib/old/condition-wait.js.map +1 -1
  152. package/lib/old/dual-component-ctrl.js +2 -2
  153. package/lib/old/dual-component-ctrl.js.map +1 -1
  154. package/lib/old/execute-command.js.map +1 -1
  155. package/lib/old/helpers.js.map +1 -1
  156. package/lib/old/models.js.map +1 -1
  157. package/lib/utils.js.map +1 -1
  158. package/lib/validators/validators-firedev.js.map +1 -1
  159. package/lib/validators/validators-git.js.map +1 -1
  160. package/lib/validators/validators-network.js.map +1 -1
  161. package/lib/validators/validators.js.map +1 -1
  162. package/migrations/1736198527297_init.js.map +1 -1
  163. package/migrations/1736199486472_addingNotAssignablePorts.js.map +1 -1
  164. package/migrations/1736454437350_addFreePorts.js.map +1 -1
  165. package/migrations/index.js.map +1 -1
  166. package/migrations/migrations_index._auto-generated_.js.map +1 -1
  167. package/package.json +5 -5
  168. package/tmp-environment.json +2 -2
  169. package/websql/README.md +24 -24
  170. package/websql/fesm2022/tnp-helpers.mjs +468 -431
  171. package/websql/fesm2022/tnp-helpers.mjs.map +1 -1
  172. package/websql/lib/base/classes/{base-cli-worker-config.d.ts → base-cli-worker/base-cli-worker-config.d.ts} +2 -2
  173. package/websql/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.d.ts +40 -0
  174. package/{browser/lib/base/classes → websql/lib/base/classes/base-cli-worker}/base-cli-worker.d.ts +23 -45
  175. package/websql/lib/base/classes/base-cli-worker/index.d.ts +5 -0
  176. package/websql/lib/base/classes/base-git.d.ts +1 -1
  177. package/websql/lib/base/classes/base-node-modules.d.ts +1 -1
  178. package/websql/lib/base/classes/index.d.ts +0 -2
  179. package/websql/lib/base/tcp-udp-ports/ports.controller.d.ts +2 -2
  180. package/websql/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
  181. package/websql/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.d.ts +20 -0
  182. package/websql/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +6 -22
  183. package/websql/lib/models.d.ts +3 -1
  184. package/browser/esm2022/lib/base/classes/base-bower-json.mjs +0 -14
  185. package/browser/esm2022/lib/base/classes/base-cli-worker-config.mjs +0 -37
  186. package/browser/esm2022/lib/base/classes/base-cli-worker-controller.mjs +0 -125
  187. package/browser/esm2022/lib/base/classes/base-cli-worker.mjs +0 -523
  188. package/browser/esm2022/lib/base/classes/base-compiler-for-project.mjs +0 -61
  189. package/browser/esm2022/lib/base/classes/base-db.mjs +0 -31
  190. package/browser/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +0 -56
  191. package/browser/esm2022/lib/base/classes/base-feature-for-project.mjs +0 -11
  192. package/browser/esm2022/lib/base/classes/base-git.mjs +0 -1175
  193. package/browser/esm2022/lib/base/classes/base-json-file-reader.mjs +0 -114
  194. package/browser/esm2022/lib/base/classes/base-library-build.mjs +0 -613
  195. package/browser/esm2022/lib/base/classes/base-linked-projects.mjs +0 -323
  196. package/browser/esm2022/lib/base/classes/base-node-modules.mjs +0 -417
  197. package/browser/esm2022/lib/base/classes/base-npm-helpers.mjs +0 -266
  198. package/browser/esm2022/lib/base/classes/base-package-json.mjs +0 -340
  199. package/browser/esm2022/lib/base/classes/base-process-manager.mjs +0 -285
  200. package/browser/esm2022/lib/base/classes/base-project-resolver.mjs +0 -282
  201. package/browser/esm2022/lib/base/classes/base-project.mjs +0 -922
  202. package/browser/esm2022/lib/base/classes/base-quick-fixes.mjs +0 -88
  203. package/browser/esm2022/lib/base/classes/base-release-process.mjs +0 -599
  204. package/browser/esm2022/lib/base/classes/base-static-pages.mjs +0 -110
  205. package/browser/esm2022/lib/base/classes/base-vscode.mjs +0 -534
  206. package/browser/esm2022/lib/base/classes/index.mjs +0 -26
  207. package/browser/esm2022/lib/base/commit-data.mjs +0 -633
  208. package/browser/esm2022/lib/base/config-database.mjs +0 -46
  209. package/browser/esm2022/lib/base/core-project.mjs +0 -115
  210. package/browser/esm2022/lib/base/index.mjs +0 -10
  211. package/browser/esm2022/lib/base/linked-project.mjs +0 -90
  212. package/browser/esm2022/lib/base/project-database.mjs +0 -18
  213. package/browser/esm2022/lib/base/tcp-udp-ports/index.mjs +0 -6
  214. package/browser/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +0 -260
  215. package/browser/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +0 -33
  216. package/browser/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +0 -32
  217. package/browser/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +0 -298
  218. package/browser/esm2022/lib/base/translate.mjs +0 -566
  219. package/browser/esm2022/lib/helpers/for-backend/helpers-file-folders.mjs +0 -1008
  220. package/browser/esm2022/lib/helpers/for-backend/helpers-process.mjs +0 -493
  221. package/browser/esm2022/lib/helpers/for-browser/angular.helper.mjs +0 -89
  222. package/browser/esm2022/lib/helpers/for-browser/helpers-browser.mjs +0 -47
  223. package/browser/esm2022/lib/helpers/helpers-array-obj.mjs +0 -118
  224. package/browser/esm2022/lib/helpers/helpers-numbers.mjs +0 -12
  225. package/browser/esm2022/lib/helpers/helpers-strings-regexes.mjs +0 -51
  226. package/browser/esm2022/lib/helpers/helpers-strings.mjs +0 -258
  227. package/browser/esm2022/lib/helpers/helpers.mjs +0 -428
  228. package/browser/esm2022/lib/index.mjs +0 -13
  229. package/browser/esm2022/lib/models.mjs +0 -175
  230. package/browser/esm2022/lib/utils.mjs +0 -952
  231. package/browser/esm2022/lib/validators/validators-git.mjs +0 -12
  232. package/browser/esm2022/lib/validators/validators-network.mjs +0 -18
  233. package/browser/esm2022/lib/validators/validators.mjs +0 -10
  234. package/browser/esm2022/migrations/1736198527297_init.mjs +0 -41
  235. package/browser/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +0 -63
  236. package/browser/esm2022/migrations/1736454437350_addFreePorts.mjs +0 -50
  237. package/browser/esm2022/migrations/index.mjs +0 -5
  238. package/browser/esm2022/migrations/migrations_index._auto-generated_.mjs +0 -16
  239. package/browser/esm2022/public-api.mjs +0 -2
  240. package/browser/esm2022/tnp-helpers.mjs +0 -5
  241. package/cli.d.ts +0 -6
  242. package/client/esm2022/lib/base/classes/base-bower-json.mjs +0 -14
  243. package/client/esm2022/lib/base/classes/base-cli-worker-config.mjs +0 -37
  244. package/client/esm2022/lib/base/classes/base-cli-worker-controller.mjs +0 -125
  245. package/client/esm2022/lib/base/classes/base-cli-worker.mjs +0 -523
  246. package/client/esm2022/lib/base/classes/base-compiler-for-project.mjs +0 -61
  247. package/client/esm2022/lib/base/classes/base-db.mjs +0 -31
  248. package/client/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +0 -56
  249. package/client/esm2022/lib/base/classes/base-feature-for-project.mjs +0 -11
  250. package/client/esm2022/lib/base/classes/base-git.mjs +0 -1175
  251. package/client/esm2022/lib/base/classes/base-json-file-reader.mjs +0 -114
  252. package/client/esm2022/lib/base/classes/base-library-build.mjs +0 -613
  253. package/client/esm2022/lib/base/classes/base-linked-projects.mjs +0 -323
  254. package/client/esm2022/lib/base/classes/base-node-modules.mjs +0 -417
  255. package/client/esm2022/lib/base/classes/base-npm-helpers.mjs +0 -266
  256. package/client/esm2022/lib/base/classes/base-package-json.mjs +0 -340
  257. package/client/esm2022/lib/base/classes/base-process-manager.mjs +0 -285
  258. package/client/esm2022/lib/base/classes/base-project-resolver.mjs +0 -282
  259. package/client/esm2022/lib/base/classes/base-project.mjs +0 -922
  260. package/client/esm2022/lib/base/classes/base-quick-fixes.mjs +0 -88
  261. package/client/esm2022/lib/base/classes/base-release-process.mjs +0 -599
  262. package/client/esm2022/lib/base/classes/base-static-pages.mjs +0 -110
  263. package/client/esm2022/lib/base/classes/base-vscode.mjs +0 -534
  264. package/client/esm2022/lib/base/classes/index.mjs +0 -26
  265. package/client/esm2022/lib/base/commit-data.mjs +0 -633
  266. package/client/esm2022/lib/base/config-database.mjs +0 -46
  267. package/client/esm2022/lib/base/core-project.mjs +0 -115
  268. package/client/esm2022/lib/base/index.mjs +0 -10
  269. package/client/esm2022/lib/base/linked-project.mjs +0 -90
  270. package/client/esm2022/lib/base/project-database.mjs +0 -18
  271. package/client/esm2022/lib/base/tcp-udp-ports/index.mjs +0 -6
  272. package/client/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +0 -260
  273. package/client/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +0 -33
  274. package/client/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +0 -32
  275. package/client/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +0 -298
  276. package/client/esm2022/lib/base/translate.mjs +0 -566
  277. package/client/esm2022/lib/helpers/for-backend/helpers-file-folders.mjs +0 -1008
  278. package/client/esm2022/lib/helpers/for-backend/helpers-process.mjs +0 -493
  279. package/client/esm2022/lib/helpers/for-browser/angular.helper.mjs +0 -89
  280. package/client/esm2022/lib/helpers/for-browser/helpers-browser.mjs +0 -47
  281. package/client/esm2022/lib/helpers/helpers-array-obj.mjs +0 -118
  282. package/client/esm2022/lib/helpers/helpers-numbers.mjs +0 -12
  283. package/client/esm2022/lib/helpers/helpers-strings-regexes.mjs +0 -51
  284. package/client/esm2022/lib/helpers/helpers-strings.mjs +0 -258
  285. package/client/esm2022/lib/helpers/helpers.mjs +0 -428
  286. package/client/esm2022/lib/index.mjs +0 -13
  287. package/client/esm2022/lib/models.mjs +0 -175
  288. package/client/esm2022/lib/utils.mjs +0 -952
  289. package/client/esm2022/lib/validators/validators-git.mjs +0 -12
  290. package/client/esm2022/lib/validators/validators-network.mjs +0 -18
  291. package/client/esm2022/lib/validators/validators.mjs +0 -10
  292. package/client/esm2022/migrations/1736198527297_init.mjs +0 -41
  293. package/client/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +0 -63
  294. package/client/esm2022/migrations/1736454437350_addFreePorts.mjs +0 -50
  295. package/client/esm2022/migrations/index.mjs +0 -5
  296. package/client/esm2022/migrations/migrations_index._auto-generated_.mjs +0 -16
  297. package/client/esm2022/public-api.mjs +0 -2
  298. package/client/esm2022/tnp-helpers.mjs +0 -5
  299. package/env.d.ts +0 -3
  300. package/environments/angular-node-app/env.angular-node-app.__.d.ts +0 -3
  301. package/environments/angular-node-app/env.angular-node-app.prod.d.ts +0 -3
  302. package/environments/docs-webapp/env.docs-webapp.__.d.ts +0 -3
  303. package/environments/electron-app/env.electron-app.__.d.ts +0 -3
  304. package/environments/electron-app/env.electron-app.prod.d.ts +0 -3
  305. package/environments/mobile-app/env.mobile-app.__.d.ts +0 -3
  306. package/environments/mobile-app/env.mobile-app.prod.d.ts +0 -3
  307. package/environments/npm-lib-and-cli-tool/env.npm-lib-and-cli-tool.__.d.ts +0 -3
  308. package/environments/npm-lib-and-cli-tool/env.npm-lib-and-cli-tool.prod.d.ts +0 -3
  309. package/environments/vscode-plugin/env.vscode-plugin.__.d.ts +0 -6
  310. package/environments/vscode-plugin/env.vscode-plugin.prod.d.ts +0 -4
  311. package/global-typings.d.ts +0 -41
  312. package/lib/base/classes/base-cli-worker-config.js.map +0 -1
  313. package/lib/base/classes/base-cli-worker-controller.js.map +0 -1
  314. package/lib/base/classes/base-cli-worker.js.map +0 -1
  315. package/lib/base/classes/base-detached-service.d.ts +0 -5
  316. package/lib/base/classes/base-detached-service.js +0 -12
  317. package/lib/base/classes/base-detached-service.js.map +0 -1
  318. package/lib/base/classes/base-github-pages.d.ts +0 -14
  319. package/lib/constants.d.ts +0 -77
  320. package/lib/helpers/for-backend/helpers-file-folders.backend.d.ts +0 -104
  321. package/lib/helpers/for-backend/helpers-file-folders.backend.js +0 -956
  322. package/lib/helpers/for-backend/helpers-file-folders.backend.js.map +0 -1
  323. package/lib/helpers/for-backend/helpers-process.backend.d.ts +0 -87
  324. package/lib/helpers/for-backend/helpers-process.backend.js +0 -496
  325. package/lib/helpers/for-backend/helpers-process.backend.js.map +0 -1
  326. package/lib/helpers/for-backend/ts-code/index.d.ts +0 -1
  327. package/lib/helpers/for-backend/ts-code/ts-import-export-extractor.d.ts +0 -29
  328. package/lib/helpers.d.ts +0 -0
  329. package/lib/options.d.ts +0 -252
  330. package/lib/project/abstract/artifacts/__helpers__/artifacts-helpers.d.ts +0 -28
  331. package/lib/project/abstract/artifacts/__helpers__/branding.d.ts +0 -13
  332. package/lib/project/abstract/artifacts/__helpers__/environment-config/environment-config.d.ts +0 -26
  333. package/lib/project/abstract/artifacts/angular-node-app/artifact-angular-node-app.d.ts +0 -53
  334. package/lib/project/abstract/artifacts/angular-node-app/index.d.ts +0 -1
  335. package/lib/project/abstract/artifacts/angular-node-app/tools/assets-list-file-generator.d.ts +0 -19
  336. package/lib/project/abstract/artifacts/angular-node-app/tools/assets-manager.d.ts +0 -5
  337. package/lib/project/abstract/artifacts/angular-node-app/tools/basename-manager.d.ts +0 -17
  338. package/lib/project/abstract/artifacts/angular-node-app/tools/docs-app-build-config.d.ts +0 -21
  339. package/lib/project/abstract/artifacts/angular-node-app/tools/inside-struct-angular13-app.d.ts +0 -6
  340. package/lib/project/abstract/artifacts/angular-node-app/tools/migrations-helper.d.ts +0 -18
  341. package/lib/project/abstract/artifacts/artifacts-manager.d.ts +0 -39
  342. package/lib/project/abstract/artifacts/base-artifact.d.ts +0 -52
  343. package/lib/project/abstract/artifacts/docs-webapp/artifact-docs-webapp.d.ts +0 -27
  344. package/lib/project/abstract/artifacts/docs-webapp/docs.d.ts +0 -55
  345. package/lib/project/abstract/artifacts/docs-webapp/index.d.ts +0 -1
  346. package/lib/project/abstract/artifacts/electron-app/artifact-electron-app.d.ts +0 -22
  347. package/lib/project/abstract/artifacts/electron-app/index.d.ts +0 -1
  348. package/lib/project/abstract/artifacts/mobile-app/artifact-mobile-app.d.ts +0 -16
  349. package/lib/project/abstract/artifacts/mobile-app/index.d.ts +0 -1
  350. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/artifact-npm-lib-and-cli-tool.d.ts +0 -82
  351. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/index.d.ts +0 -1
  352. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/build-isomorphic-lib/code-cut/browser-code-cut.d.ts +0 -102
  353. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/build-isomorphic-lib/code-cut/code-cut.d.ts +0 -41
  354. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/build-isomorphic-lib/code-cut/code-split-process.enum.d.ts +0 -44
  355. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/build-isomorphic-lib/code-cut/cut-fn.d.ts +0 -1
  356. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/build-isomorphic-lib/code-cut/file-split-process.d.ts +0 -14
  357. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/build-isomorphic-lib/compilations/compilation-backend.d.ts +0 -60
  358. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/build-isomorphic-lib/compilations/compilation-browser.d.ts +0 -41
  359. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/build-isomorphic-lib/compilations/incremental-build-process.d.ts +0 -23
  360. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/copy-manager/base-copy-manager.d.ts +0 -85
  361. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/copy-manager/copy-manager-helpers.d.ts +0 -12
  362. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/copy-manager/copy-manager-organization.d.ts +0 -0
  363. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/copy-manager/copy-manager-standalone.d.ts +0 -77
  364. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/copy-manager/copy-manager.d.ts +0 -7
  365. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/copy-manager/mjs-fesm-module-spliter.d.ts +0 -46
  366. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/copy-manager/source-maping-url.d.ts +0 -11
  367. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/copy-manager/typescript-dts-fixer.d.ts +0 -25
  368. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/files-recreation/files-recreator.d.ts +0 -133
  369. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/files-recreation/files-templates.d.ts +0 -8
  370. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/files-recreation/index.d.ts +0 -2
  371. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/index-autogen-provider.d.ts +0 -15
  372. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-struct-angular13-lib.d.ts +0 -6
  373. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/inside-struct.d.ts +0 -44
  374. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/inside-structures.d.ts +0 -17
  375. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/structs/base-inside-struct.d.ts +0 -12
  376. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/structs/inside-struct-constants.d.ts +0 -2
  377. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/structs/inside-struct-helpers.d.ts +0 -12
  378. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/structs/loaders/image-loader.d.ts +0 -1
  379. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/structs/loaders/loader-ids-default.d.ts +0 -1
  380. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/structs/loaders/loader-ids-ellipsis.d.ts +0 -1
  381. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/structs/loaders/loader-ids-facebook.d.ts +0 -1
  382. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/structs/loaders/loader-ids-grid.d.ts +0 -1
  383. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/structs/loaders/loader-ids-heart.d.ts +0 -1
  384. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/structs/loaders/loader-ids-ripple.d.ts +0 -1
  385. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/inside-structures/structs/loaders/loaders.d.ts +0 -2
  386. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/lib-project/lib-project-base.d.ts +0 -9
  387. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/lib-project/lib-project-standalone.d.ts +0 -9
  388. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/singular-build.d.ts +0 -0
  389. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/test-runner/cypress-test-runner.d.ts +0 -7
  390. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/test-runner/index.d.ts +0 -3
  391. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/test-runner/jest-test-runner.d.ts +0 -8
  392. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/tools/test-runner/mocha-test-runner.d.ts +0 -7
  393. package/lib/project/abstract/artifacts/npm-lib-and-cli-tool/webpack-backend-compilation.d.ts +0 -0
  394. package/lib/project/abstract/artifacts/vscode-plugin/artifact-vscode-plugin.d.ts +0 -33
  395. package/lib/project/abstract/artifacts/vscode-plugin/index.d.ts +0 -1
  396. package/lib/project/abstract/framework.d.ts +0 -61
  397. package/lib/project/abstract/git.d.ts +0 -26
  398. package/lib/project/abstract/library-build.d.ts +0 -9
  399. package/lib/project/abstract/linked-projects.d.ts +0 -4
  400. package/lib/project/abstract/linter.d.ts +0 -9
  401. package/lib/project/abstract/node-modules.d.ts +0 -35
  402. package/lib/project/abstract/npm-helpers.d.ts +0 -22
  403. package/lib/project/abstract/package-json.d.ts +0 -14
  404. package/lib/project/abstract/packages-recognition.d.ts +0 -16
  405. package/lib/project/abstract/project-resolve.d.ts +0 -37
  406. package/lib/project/abstract/project.d.ts +0 -63
  407. package/lib/project/abstract/quick-fixes.d.ts +0 -18
  408. package/lib/project/abstract/release-process/index.d.ts +0 -1
  409. package/lib/project/abstract/release-process/release-config.d.ts +0 -0
  410. package/lib/project/abstract/release-process/release-process.d.ts +0 -26
  411. package/lib/project/abstract/taon-worker/taon-build.controller.d.ts +0 -5
  412. package/lib/project/abstract/taon-worker/taon-build.entity.d.ts +0 -8
  413. package/lib/project/abstract/taon-worker/taon-env.entity.d.ts +0 -10
  414. package/lib/project/abstract/taon-worker/taon-project.entity.d.ts +0 -8
  415. package/lib/project/abstract/taon-worker/taon.context.d.ts +0 -56
  416. package/lib/project/abstract/taon-worker/taon.controller.d.ts +0 -7
  417. package/lib/project/abstract/taon-worker/taon.worker.d.ts +0 -40
  418. package/lib/project/abstract/taonJson.d.ts +0 -49
  419. package/lib/project/abstract/vscode.d.ts +0 -80
  420. package/lib/project/cli/base-cli.d.ts +0 -8
  421. package/lib/project/cli/cli-BRANDING.d.ts +0 -23
  422. package/lib/project/cli/cli-BUILD.d.ts +0 -4
  423. package/lib/project/cli/cli-DOCS.d.ts +0 -4
  424. package/lib/project/cli/cli-INIT.d.ts +0 -13
  425. package/lib/project/cli/cli-LINK.d.ts +0 -23
  426. package/lib/project/cli/cli-MIGRATION.d.ts +0 -4
  427. package/lib/project/cli/cli-NEW.d.ts +0 -15
  428. package/lib/project/cli/cli-OPEN.d.ts +0 -15
  429. package/lib/project/cli/cli-RELEASE.d.ts +0 -4
  430. package/lib/project/cli/cli-TEST.d.ts +0 -23
  431. package/lib/project/cli/cli-VERSION.d.ts +0 -16
  432. package/lib/project/cli/cli-VSCODE.d.ts +0 -17
  433. package/lib/project/cli/cli-_GLOBAL_.d.ts +0 -85
  434. package/lib/project/cli/index.d.ts +0 -29
  435. package/lib/project/index.d.ts +0 -0
  436. package/lib/templates.d.ts +0 -1
  437. package/migrations/1737301724542_addingSampleData.d.ts +0 -14
  438. package/start.backend.d.ts +0 -2
  439. package/taon.jsonc +0 -34
  440. package/websql/esm2022/lib/base/classes/base-bower-json.mjs +0 -14
  441. package/websql/esm2022/lib/base/classes/base-cli-worker-config.mjs +0 -37
  442. package/websql/esm2022/lib/base/classes/base-cli-worker-controller.mjs +0 -125
  443. package/websql/esm2022/lib/base/classes/base-cli-worker.mjs +0 -523
  444. package/websql/esm2022/lib/base/classes/base-compiler-for-project.mjs +0 -61
  445. package/websql/esm2022/lib/base/classes/base-db.mjs +0 -31
  446. package/websql/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +0 -56
  447. package/websql/esm2022/lib/base/classes/base-feature-for-project.mjs +0 -11
  448. package/websql/esm2022/lib/base/classes/base-git.mjs +0 -1175
  449. package/websql/esm2022/lib/base/classes/base-json-file-reader.mjs +0 -114
  450. package/websql/esm2022/lib/base/classes/base-library-build.mjs +0 -613
  451. package/websql/esm2022/lib/base/classes/base-linked-projects.mjs +0 -323
  452. package/websql/esm2022/lib/base/classes/base-node-modules.mjs +0 -417
  453. package/websql/esm2022/lib/base/classes/base-npm-helpers.mjs +0 -266
  454. package/websql/esm2022/lib/base/classes/base-package-json.mjs +0 -340
  455. package/websql/esm2022/lib/base/classes/base-process-manager.mjs +0 -285
  456. package/websql/esm2022/lib/base/classes/base-project-resolver.mjs +0 -272
  457. package/websql/esm2022/lib/base/classes/base-project.mjs +0 -891
  458. package/websql/esm2022/lib/base/classes/base-quick-fixes.mjs +0 -88
  459. package/websql/esm2022/lib/base/classes/base-release-process.mjs +0 -599
  460. package/websql/esm2022/lib/base/classes/base-static-pages.mjs +0 -110
  461. package/websql/esm2022/lib/base/classes/base-vscode.mjs +0 -534
  462. package/websql/esm2022/lib/base/classes/index.mjs +0 -26
  463. package/websql/esm2022/lib/base/commit-data.mjs +0 -633
  464. package/websql/esm2022/lib/base/config-database.mjs +0 -46
  465. package/websql/esm2022/lib/base/core-project.mjs +0 -115
  466. package/websql/esm2022/lib/base/index.mjs +0 -10
  467. package/websql/esm2022/lib/base/linked-project.mjs +0 -90
  468. package/websql/esm2022/lib/base/project-database.mjs +0 -18
  469. package/websql/esm2022/lib/base/tcp-udp-ports/index.mjs +0 -6
  470. package/websql/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +0 -260
  471. package/websql/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +0 -56
  472. package/websql/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +0 -32
  473. package/websql/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +0 -298
  474. package/websql/esm2022/lib/base/translate.mjs +0 -566
  475. package/websql/esm2022/lib/helpers/for-backend/helpers-file-folders.mjs +0 -1008
  476. package/websql/esm2022/lib/helpers/for-backend/helpers-process.mjs +0 -493
  477. package/websql/esm2022/lib/helpers/for-browser/angular.helper.mjs +0 -89
  478. package/websql/esm2022/lib/helpers/for-browser/helpers-browser.mjs +0 -47
  479. package/websql/esm2022/lib/helpers/helpers-array-obj.mjs +0 -118
  480. package/websql/esm2022/lib/helpers/helpers-numbers.mjs +0 -12
  481. package/websql/esm2022/lib/helpers/helpers-strings-regexes.mjs +0 -51
  482. package/websql/esm2022/lib/helpers/helpers-strings.mjs +0 -258
  483. package/websql/esm2022/lib/helpers/helpers.mjs +0 -428
  484. package/websql/esm2022/lib/index.mjs +0 -13
  485. package/websql/esm2022/lib/models.mjs +0 -175
  486. package/websql/esm2022/lib/utils.mjs +0 -952
  487. package/websql/esm2022/lib/validators/validators-git.mjs +0 -12
  488. package/websql/esm2022/lib/validators/validators-network.mjs +0 -18
  489. package/websql/esm2022/lib/validators/validators.mjs +0 -10
  490. package/websql/esm2022/migrations/1736198527297_init.mjs +0 -41
  491. package/websql/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +0 -63
  492. package/websql/esm2022/migrations/1736454437350_addFreePorts.mjs +0 -50
  493. package/websql/esm2022/migrations/index.mjs +0 -5
  494. package/websql/esm2022/migrations/migrations_index._auto-generated_.mjs +0 -16
  495. package/websql/esm2022/public-api.mjs +0 -2
  496. package/websql/esm2022/tnp-helpers.mjs +0 -5
  497. /package/browser/lib/base/classes/{base-cli-worker-controller.d.ts → base-cli-worker/base-cli-worker-controller.d.ts} +0 -0
  498. /package/client/lib/base/classes/{base-cli-worker-controller.d.ts → base-cli-worker/base-cli-worker-controller.d.ts} +0 -0
  499. /package/lib/base/classes/{base-cli-worker-config.js → base-cli-worker/base-cli-worker-config.js} +0 -0
  500. /package/lib/base/classes/{base-cli-worker-controller.d.ts → base-cli-worker/base-cli-worker-controller.d.ts} +0 -0
  501. /package/lib/base/classes/{base-cli-worker-controller.js → base-cli-worker/base-cli-worker-controller.js} +0 -0
  502. /package/websql/lib/base/classes/{base-cli-worker-controller.d.ts → base-cli-worker/base-cli-worker-controller.d.ts} +0 -0
@@ -1,118 +0,0 @@
1
- import { _, Utils } 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
24
- ? arr.findIndex(elem => elem[prop] === a[prop])
25
- : arr.indexOf(a);
26
- _.pullAt(arr, indexA);
27
- let indexB = prop
28
- ? arr.findIndex(elem => elem[prop] === b[prop])
29
- : arr.indexOf(b);
30
- if (indexB === 0) {
31
- arr.unshift(a);
32
- }
33
- else {
34
- arr.splice(indexB - 1, 0, a);
35
- }
36
- return arr;
37
- }
38
- /**
39
- * @deprecated
40
- * use moveObjectAfter
41
- */
42
- arrayMoveElementAfterB(arr, a, b, prop) {
43
- let indexA = prop
44
- ? arr.findIndex(elem => elem[prop] === a[prop])
45
- : arr.indexOf(a);
46
- _.pullAt(arr, indexA);
47
- let indexB = prop
48
- ? arr.findIndex(elem => elem[prop] === b[prop])
49
- : arr.indexOf(b);
50
- if (indexB === arr.length - 1) {
51
- arr.push(a);
52
- }
53
- else {
54
- arr.splice(indexB + 1, 0, a);
55
- }
56
- return arr;
57
- }
58
- moveObjectBefore(array, target, before) {
59
- const newArray = [...array];
60
- const targetIndex = newArray.findIndex(item => item === target);
61
- const beforeIndex = newArray.findIndex(item => item === before);
62
- if (targetIndex === -1 || beforeIndex === -1) {
63
- console.error('Target or Before object not found in the array');
64
- return newArray;
65
- }
66
- newArray.splice(targetIndex, 1);
67
- newArray.splice(beforeIndex, 0, target);
68
- return newArray;
69
- }
70
- moveObjectAfter(array, target, after) {
71
- const newArray = [...array];
72
- const targetIndex = newArray.findIndex(item => item === target);
73
- const afterIndex = newArray.findIndex(item => item === after);
74
- if (targetIndex === -1 || afterIndex === -1) {
75
- console.error('Target or After object not found in the array');
76
- return newArray;
77
- }
78
- newArray.splice(targetIndex, 1);
79
- newArray.splice(afterIndex + 1, 0, target);
80
- return newArray;
81
- }
82
- /**
83
- * @deprecated use Utils.uniqArray from tnp-core
84
- */
85
- uniqArray(array, uniqueProperty) {
86
- return Utils.uniqArray(array, uniqueProperty);
87
- }
88
- /**
89
- * @deprecated use Utils.uniqArray from tnp-core
90
- */
91
- sortKeys(obj) {
92
- return Utils.sortKeys(obj);
93
- }
94
- /**
95
- * Fuzzy search
96
- */
97
- fuzzy(query, list, valueFn) {
98
- const resultsFuzzy = fuzzy.filter(query, list.map(k => (valueFn ? valueFn(k) : k)));
99
- const resultsFuzzyKebab = fuzzy.filter(_.kebabCase(query), list.map(k => _.kebabCase((valueFn ? valueFn(k) : k))));
100
- const matches = resultsFuzzy.map(el => el.string);
101
- const matchesKebab = resultsFuzzyKebab.map(el => el.string);
102
- const results = resultsFuzzy.length === 0
103
- ? []
104
- : 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)) ===
109
- _.first(matchesKebab));
110
- results.push(m);
111
- matches.push((valueFn ? valueFn(m) : m));
112
- }
113
- return { matches, results };
114
- }
115
- }
116
- ;
117
- ({}); // @--end-of-file-for-module=tnp-helpers lib/helpers/helpers-array-obj.ts
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1hcnJheS1vYmouanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90bnAtaGVscGVycy9wcm9qZWN0cy90bnAtaGVscGVycy9zcmMvbGliL2hlbHBlcnMvaGVscGVycy1hcnJheS1vYmoudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixNQUFNLE9BQU8sZUFBZTtJQUMxQixJQUFJLENBQUMsQ0FBb0I7UUFDdkIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUc7UUFDUixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sS0FBSyxDQUFDLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxzQkFBc0IsQ0FBVSxHQUFVLEVBQUUsQ0FBTSxFQUFFLENBQU0sRUFBRSxJQUFjO1FBQ3hFLElBQUksTUFBTSxHQUFHLElBQUk7WUFDZixDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFB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QUMsQ0FBQyxDQUFRLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQ3hCLENBQUM7WUFDRixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFRLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHlFQUF5RSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBfLCBVdGlscyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0ICogYXMgZnV6enkgZnJvbSAnZnV6enknO1xuXG5leHBvcnQgY2xhc3MgSGVscGVyc0FycmF5T2JqIHtcbiAgZnJvbShzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBpZiAoXy5pc0FycmF5KHMpKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9XG4gICAgaWYgKF8uaXNTdHJpbmcocykpIHtcbiAgICAgIHJldHVybiBzLnNwbGl0KCcgJyk7XG4gICAgfVxuICB9XG5cbiAgc2Vjb25kKGFycikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpIHx8IGFyci5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gYXJyWzFdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIHVzZSBtb3ZlT2JqZWN0QmVmb3JlXG4gICAqL1xuICBhcnJheU1vdmVFbGVtZW50QmVmb3JlPFQgPSBhbnk+KGFycjogYW55W10sIGE6IGFueSwgYjogYW55LCBwcm9wPzoga2V5b2YgVCkge1xuICAgIGxldCBpbmRleEEgPSBwcm9wXG4gICAgICA/IGFyci5maW5kSW5kZXgoZWxlbSA9PiBlbGVtW3Byb3BdID09PSBhW3Byb3BdKVxuICAgICAgOiBhcnIuaW5kZXhPZihhKTtcbiAgICBfLnB1bGxBdChhcnIsIGluZGV4QSk7XG4gICAgbGV0IGluZGV4QiA9IHByb3BcbiAgICAgID8gYXJyLmZpbmRJbmRleChlbGVtID0+IGVsZW1bcHJvcF0gPT09IGJbcHJvcF0pXG4gICAgICA6IGFyci5pbmRleE9mKGIpO1xuICAgIGlmIChpbmRleEIgPT09IDApIHtcbiAgICAgIGFyci51bnNoaWZ0KGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcnIuc3BsaWNlKGluZGV4QiAtIDEsIDAsIGEpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIHVzZSBtb3ZlT2JqZWN0QWZ0ZXJcbiAgICovXG4gIGFycmF5TW92ZUVsZW1lbnRBZnRlckI8VCA9IGFueT4oYXJyOiBhbnlbXSwgYTogYW55LCBiOiBhbnksIHByb3A/OiBrZXlvZiBUKSB7XG4gICAgbGV0IGluZGV4QSA9IHByb3BcbiAgICAgID8gYXJyLmZpbmRJbmRleChlbGVtID0+IGVsZW1bcHJvcF0gPT09IGFbcHJvcF0pXG4gICAgICA6IGFyci5pbmRleE9mKGEpO1xuICAgIF8ucHVsbEF0KGFyciwgaW5kZXhBKTtcbiAgICBsZXQgaW5kZXhCID0gcHJvcFxuICAgICAgPyBhcnIuZmluZEluZGV4KGVsZW0gPT4gZWxlbVtwcm9wXSA9PT0gYltwcm9wXSlcbiAgICAgIDogYXJyLmluZGV4T2YoYik7XG4gICAgaWYgKGluZGV4QiA9PT0gYXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgIGFyci5wdXNoKGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcnIuc3BsaWNlKGluZGV4QiArIDEsIDAsIGEpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgbW92ZU9iamVjdEJlZm9yZTxUID0gYW55PihhcnJheTogVFtdLCB0YXJnZXQ6IFQsIGJlZm9yZTogVCk6IFRbXSB7XG4gICAgY29uc3QgbmV3QXJyYXkgPSBbLi4uYXJyYXldO1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gbmV3QXJyYXkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGFyZ2V0KTtcbiAgICBjb25zdCBiZWZvcmVJbmRleCA9IG5ld0FycmF5LmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IGJlZm9yZSk7XG5cbiAgICBpZiAodGFyZ2V0SW5kZXggPT09IC0xIHx8IGJlZm9yZUluZGV4ID09PSAtMSkge1xuXG4gICAgICBjb25zb2xlLmVycm9yKCdUYXJnZXQgb3IgQmVmb3JlIG9iamVjdCBub3QgZm91bmQgaW4gdGhlIGFycmF5Jyk7XG4gICAgICByZXR1cm4gbmV3QXJyYXk7XG4gICAgfVxuXG5cbiAgICBuZXdBcnJheS5zcGxpY2UodGFyZ2V0SW5kZXgsIDEpO1xuXG5cbiAgICBuZXdBcnJheS5zcGxpY2UoYmVmb3JlSW5kZXgsIDAsIHRhcmdldCk7XG5cbiAgICByZXR1cm4gbmV3QXJyYXk7XG4gIH1cblxuICBtb3ZlT2JqZWN0QWZ0ZXI8VCA9IGFueT4oYXJyYXk6IFRbXSwgdGFyZ2V0OiBULCBhZnRlcjogVCk6IFRbXSB7XG4gICAgY29uc3QgbmV3QXJyYXkgPSBbLi4uYXJyYXldO1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gbmV3QXJyYXkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGFyZ2V0KTtcbiAgICBjb25zdCBhZnRlckluZGV4ID0gbmV3QXJyYXkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gYWZ0ZXIpO1xuXG4gICAgaWYgKHRhcmdldEluZGV4ID09PSAtMSB8fCBhZnRlckluZGV4ID09PSAtMSkge1xuXG4gICAgICBjb25zb2xlLmVycm9yKCdUYXJnZXQgb3IgQWZ0ZXIgb2JqZWN0IG5vdCBmb3VuZCBpbiB0aGUgYXJyYXknKTtcbiAgICAgIHJldHVybiBuZXdBcnJheTtcbiAgICB9XG5cblxuICAgIG5ld0FycmF5LnNwbGljZSh0YXJnZXRJbmRleCwgMSk7XG5cblxuICAgIG5ld0FycmF5LnNwbGljZShhZnRlckluZGV4ICsgMSwgMCwgdGFyZ2V0KTtcblxuICAgIHJldHVybiBuZXdBcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgVXRpbHMudW5pcUFycmF5IGZyb20gdG5wLWNvcmVcbiAgICovXG4gIHVuaXFBcnJheTxUID0gYW55PihhcnJheTogYW55W10sIHVuaXF1ZVByb3BlcnR5Pzoga2V5b2YgVCkge1xuICAgIHJldHVybiBVdGlscy51bmlxQXJyYXkoYXJyYXksIHVuaXF1ZVByb3BlcnR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgVXRpbHMudW5pcUFycmF5IGZyb20gdG5wLWNvcmVcbiAgICovXG4gIHNvcnRLZXlzKG9iaikge1xuICAgIHJldHVybiBVdGlscy5zb3J0S2V5cyhvYmopO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1enp5IHNlYXJjaFxuICAgKi9cbiAgZnV6enk8VCA9IGFueT4oXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBsaXN0OiBUW10sXG4gICAgdmFsdWVGbj86IChtb2RlbEZyb21MaXN0OiBUKSA9PiBzdHJpbmcsXG4gICkge1xuXG4gICAgY29uc3QgcmVzdWx0c0Z1enp5ID0gZnV6enkuZmlsdGVyKFxuICAgICAgcXVlcnksXG4gICAgICBsaXN0Lm1hcChrID0+ICh2YWx1ZUZuID8gdmFsdWVGbihrKSA6IGspKSxcbiAgICApO1xuICAgIGNvbnN0IHJlc3VsdHNGdXp6eUtlYmFiID0gZnV6enkuZmlsdGVyKFxuICAgICAgXy5rZWJhYkNhc2UocXVlcnkpLFxuICAgICAgbGlzdC5tYXAoayA9PiBfLmtlYmFiQ2FzZSgodmFsdWVGbiA/IHZhbHVlRm4oaykgOiBrKSBhcyBhbnkpKSxcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoZXMgPSByZXN1bHRzRnV6enkubWFwKGVsID0+IGVsLnN0cmluZyk7XG4gICAgY29uc3QgbWF0Y2hlc0tlYmFiID0gcmVzdWx0c0Z1enp5S2ViYWIubWFwKGVsID0+IGVsLnN0cmluZyk7XG5cbiAgICBjb25zdCByZXN1bHRzID1cbiAgICAgIHJlc3VsdHNGdXp6eS5sZW5ndGggPT09IDBcbiAgICAgICAgPyBbXVxuICAgICAgICA6IGxpc3QuZmlsdGVyKGsgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMuaW5jbHVkZXMoKHZhbHVlRm4gPyB2YWx1ZUZuKGspIDogaykgYXMgYW55KTtcbiAgICAgICAgICB9KTtcblxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCAmJiBtYXRjaGVzS2ViYWIubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbSA9IGxpc3QuZmluZChcbiAgICAgICAgayA9PlxuICAgICAgICAgIF8ua2ViYWJDYXNlKCh2YWx1ZUZuID8gdmFsdWVGbihrKSA6IGspIGFzIGFueSkgPT09XG4gICAgICAgICAgXy5maXJzdChtYXRjaGVzS2ViYWIpLFxuICAgICAgKTtcbiAgICAgIHJlc3VsdHMucHVzaChtKTtcbiAgICAgIG1hdGNoZXMucHVzaCgodmFsdWVGbiA/IHZhbHVlRm4obSkgOiBtKSBhcyBhbnkpO1xuICAgIH1cblxuICAgIHJldHVybiB7IG1hdGNoZXMsIHJlc3VsdHMgfTtcbiAgfVxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWhlbHBlcnMgbGliL2hlbHBlcnMvaGVscGVycy1hcnJheS1vYmoudHMiXX0=
@@ -1,12 +0,0 @@
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
@@ -1,51 +0,0 @@
1
- import { Utils, _ } from 'tnp-core/browser';
2
- export class HelpersStringsRegexes {
3
- escapeStringForRegEx(s) {
4
- return Utils.escapeStringForRegEx(s);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1zdHJpbmdzLXJlZ2V4ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90bnAtaGVscGVycy9wcm9qZWN0cy90bnAtaGVscGVycy9zcmMvbGliL2hlbHBlcnMvaGVscGVycy1zdHJpbmdzLXJlZ2V4ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxNQUFNLE9BQU8scUJBQXFCO0lBSWhDLG9CQUFvQixDQUFDLENBQVM7UUFDNUIsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGNBQWMsQ0FBQyxDQUFTLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEtBQUssQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sS0FBSyxDQUFDLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPO1lBQ0w7Ozs7Ozs7O2FBUUM7WUFDRCxJQUFJLG1CQUFtQjtnQkFDckIsTUFBTSxLQUFLLEdBQUcsNExBQTRMLENBQUM7Z0JBQzNNLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNEOzs7Ozs7Ozs7O1lBVUE7WUFDQSxJQUFJLHVCQUF1QjtnQkFDekIsTUFBTSxLQUFLLEdBQUcsa0lBQWtJLENBQUM7Z0JBQ2pKLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLCtFQUErRSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBVdGlscywgXyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuZXhwb3J0IGNsYXNzIEhlbHBlcnNTdHJpbmdzUmVnZXhlcyB7XG5cblxuXG4gIGVzY2FwZVN0cmluZ0ZvclJlZ0V4KHM6IHN0cmluZykge1xuICAgIHJldHVybiBVdGlscy5lc2NhcGVTdHJpbmdGb3JSZWdFeChzKTtcbiAgfVxuXG4gIG1hdGNoRXhhY3RPbmNlKHM6IHN0cmluZywgcmVnZXg6IFJlZ0V4cCk6IHN0cmluZyB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKHMpIHx8ICFfLmlzUmVnRXhwKHJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gcy5tYXRjaChyZWdleCk7XG4gICAgaWYgKF8uaXNOaWwocmVzdWx0KSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPj0gMSA/IF8uZmlyc3QocmVzdWx0KSA6IHZvaWQgMDtcbiAgfVxuXG4gIGdldCByZWdleCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICogbWF0aGVzXG4gICAgICogeHh4Lnh4eC54eHgueHh4XG4gICAgICogeHh4Lnh4eC54eHgueHh4OnBvcnRcbiAgICAgKiBodHRwOi8veHh4Lnh4eC54eHgueHh4OnBvcnRcbiAgICAgKiBodHRwOi8veHh4Lnh4eC54eHgueHh4XG4gICAgICogaHR0cHM6Ly94eHgueHh4Lnh4eC54eHg6cG9ydFxuICAgICAqIGh0dHBzOi8veHh4Lnh4eC54eHgueHh4ICAgKlxuICAgICAqL1xuICAgICAgZ2V0IGZvclN0cmluZ1dpdGhJcEhvc3QoKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gLyhodHRwKHMpP1xcOlxcL1xcLyk/KDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4oMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxcLigyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPykoXFw6WzAtOV0rKT8vO1xuICAgICAgICByZXR1cm4gcmVnZXg7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgKiBtYXRoZXNcbiAgICAqIGh0dHA6Ly9kb21haW4uY29tOnBvcnRcbiAgICAqIGh0dHA6Ly9kb21haW4uY29tXG4gICAgKiBodHRwOi8vZG9tYWluOnBvcnRcbiAgICAqIGh0dHA6Ly9kb21haW5cbiAgICAqIGh0dHBzOi8vZG9tYWluLmNvbTpwb3J0XG4gICAgKiBodHRwczovL2RvbWFpbi5jb21cbiAgICAqIGh0dHBzOi8vZG9tYWluOnBvcnRcbiAgICAqIGh0dHBzOi8vZG9tYWluXG4gICAgKi9cbiAgICAgIGdldCBmb3JTdHJpbmdXaXRoRG9tYWluSG9zdCgpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSAvKCgoaHR0cChzKT9cXDpcXC9cXC8pP1thLXpBLVowLTldW2EtekEtWjAtOS1dezEsNjF9W2EtekEtWjAtOV0oPzpcXC5bYS16QS1aXXsyLH0pKyhcXDpbMC05XSspPyl8KChodHRwKHMpP1xcOlxcL1xcLylbYS16QS1aMC05LV17MSw2MX0pKS87XG4gICAgICAgIHJldHVybiByZWdleDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRucC1oZWxwZXJzIGxpYi9oZWxwZXJzL2hlbHBlcnMtc3RyaW5ncy1yZWdleGVzLnRzIl19
@@ -1,258 +0,0 @@
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('[taon-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('[taon-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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1zdHJpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9oZWxwZXJzL2hlbHBlcnMtc3RyaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuQyxNQUFNLE9BQU8sY0FBYztJQUV6Qjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxpQkFBaUIsQ0FBVSxLQUFhO1FBQ3RDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyx3REFBd0QsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPO1lBQ0wsY0FBYyxDQUFDLFVBQWE7Z0JBQzFCLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBaUIsQ0FBQyxDQUFDO29CQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7b0JBQzdELE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUNoRCxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3RCLE9BQU8sT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLENBQVEsQ0FBQyxDQUFDO1lBQ1osQ0FBQztTQUNGLENBQUE7SUFFSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxTQUFpQjtRQUV4QixPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxXQUE4QjtRQUN4QyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMzQixHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsNEJBQTRCLENBQUMsQ0FBUztRQUNwQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsTUFBTSxDQUFDLElBQVksRUFBRSxNQUFlO1FBQ2xDLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQThCO1lBQ3hDLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLGNBQWMsRUFBRSxPQUFPO1lBQ3ZCLHVCQUF1QixFQUFFLFFBQVE7WUFDakMsZUFBZSxFQUFFLE1BQU07WUFDdkIsa0JBQWtCLEVBQUUsT0FBTztZQUMzQixTQUFTLEVBQUUsS0FBSztZQUNoQix1QkFBdUIsRUFBRSxTQUFTO1lBQ2xDLHVCQUF1QixFQUFFLE9BQU87WUFDaEMsTUFBTSxFQUFFLEtBQUs7WUFDYixXQUFXLEVBQUUsS0FBSztZQUNsQiw2QkFBNkIsRUFBRSxPQUFPO1lBQ3RDLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFlBQVksRUFBRSxLQUFLO1lBQ25CLGNBQWMsRUFBRSxNQUFNO1lBQ3RCLE9BQU8sRUFBRSxNQUFNO1lBQ2YsVUFBVSxFQUFFLEtBQUs7U0FDbEIsQ0FBQTtRQUNELE1BQU0sU0FBUyxHQUE4QjtZQUMzQyxNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFLE9BQU87WUFDaEIsS0FBSyxFQUFFLE9BQU87WUFDZCxPQUFPLEVBQUUsVUFBVTtZQUNuQixLQUFLLEVBQUUsS0FBSztZQUNaLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUE7UUFDRCxNQUFNLFdBQVcsR0FBYTtZQUM1QixPQUFPO1lBQ1AsTUFBTTtZQUNOLE1BQU07WUFDTixPQUFPO1lBQ1AsUUFBUTtZQUNSLFNBQVM7WUFDVCxPQUFPO1lBQ1AsTUFBTTtZQUNOLGFBQWE7WUFDYixXQUFXO1lBQ1gsT0FBTztZQUNQLEtBQUs7WUFDTCxXQUFXO1lBQ1gsTUFBTTtZQUNOLFFBQVE7WUFDUixRQUFRO1lBQ1IsT0FBTztZQUNQLE9BQU87WUFDUCxVQUFVO1lBQ1YsWUFBWTtZQUNaLFlBQVk7WUFDWixPQUFPO1lBQ1AsTUFBTTtZQUNOLEtBQUs7WUFDTCxNQUFNO1NBQ1AsQ0FBQTtRQUVELElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFFRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDeEMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzVCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDcEMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDM0MsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFHRDs7Ozs7Ozs7O01BU0U7SUFDRixRQUFRLENBQUMsSUFBWSxFQUFFLE1BQWU7UUFDcEMsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBOEI7WUFDMUMsWUFBWSxFQUFFLElBQUk7WUFDbEIsYUFBYSxFQUFFLE1BQU07WUFDckIsaUJBQWlCLEVBQUUsTUFBTTtZQUN6QixVQUFVLEVBQUUsSUFBSTtZQUNoQixZQUFZLEVBQUUsSUFBSTtZQUNsQixlQUFlLEVBQUUsTUFBTTtZQUN2QixtQkFBbUIsRUFBRSxNQUFNO1lBQzNCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLElBQUk7WUFDaEIsYUFBYSxFQUFFLFFBQVE7WUFDdkIsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixXQUFXLEVBQUUsUUFBUTtZQUNyQixXQUFXLEVBQUUsU0FBUztZQUN0QixvQkFBb0IsRUFBRSxLQUFLO1lBQzNCLFlBQVksRUFBRSxLQUFLO1lBQ25CLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGlCQUFpQixFQUFFLE1BQU07WUFDekIseUJBQXlCLEVBQUUsS0FBSztZQUNoQyxjQUFjLEVBQUUsT0FBTztZQUN2QiwrREFBK0QsRUFBRSxTQUFTO1lBQzFFLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLGNBQWMsRUFBRSxRQUFRO1lBQ3hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsSUFBSSxFQUFFLEVBQUU7U0FDVCxDQUFBO1FBQ0QsTUFBTSxTQUFTLEdBQThCO1lBQzNDLE1BQU0sRUFBRSxPQUFPO1lBQ2YsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUUsT0FBTztZQUNoQixLQUFLLEVBQUUsT0FBTztZQUNkLE9BQU8sRUFBRSxVQUFVO1lBQ25CLEtBQUssRUFBRSxLQUFLO1lBQ1osT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQTtRQUNELE1BQU0sV0FBVyxHQUFhO1lBQzVCLE9BQU87WUFDUCxNQUFNO1lBQ04sTUFBTTtZQUNOLE9BQU87WUFDUCxRQUFRO1lBQ1IsU0FBUztZQUNULE9BQU87WUFDUCxNQUFNO1lBQ04sYUFBYTtZQUNiLFdBQVc7WUFDWCxPQUFPO1lBQ1AsS0FBSztZQUNMLFdBQVc7WUFDWCxNQUFNO1lBQ04sUUFBUTtZQUNSLFFBQVE7WUFDUixPQUFPO1lBQ1AsT0FBTztZQUNQLFVBQVU7WUFDVixZQUFZO1lBQ1osWUFBWTtZQUNaLE9BQU87WUFDUCxNQUFNO1lBQ04sS0FBSztZQUNMLE1BQU07U0FDUCxDQUFBO1FBRUQsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVELEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUNuRCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUE7WUFDakIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDdkMsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUNwQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUM3QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUVGO0FBR0EsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx1RUFBdUUiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgXyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJy4uL2luZGV4JztcblxuZXhwb3J0IGNsYXNzIEhlbHBlcnNTdHJpbmdzIHtcblxuICAvKipcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogY29uc3QgcmVzdWx0ID0gaW50ZXJwb2xhdGVTdHJpbmcoXCJJJ20ge2FnZX0geWVhcnMgb2xkIVwiKVxuICAgKiAud2l0aFBhcmFtZXRlcnMoeyBhZ2U6IDI5IH0pO1xuICAgKlxuICAgKiBjb25zdCByZXN1bHQgPSBpbnRlcnBvbGF0ZVN0cmluZyhcIlRoZSB7YX0gc2F5cyB7bn0sIHtufSwge259IVwiKVxuICAgKiAud2l0aFBhcmFtZXRlcnMoeyBhOiAnY293JywgbjogJ21vbycgfSk7XG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBzdHJpbmcgdG8gaW50ZXJwb2xhdGVcbiAgICogQHBhcmFtIHBhcmFtZXRlcnMgb2JqZWN0IHdpdGggcGFyYW1ldGVzXG4gICAqL1xuICBpbnRlcnBvbGF0ZVN0cmluZzxUID0gYW55Pih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIEhlbHBlcnMud2FybignW3Rhb24taGVsZXByc10gVmFsdWUgZm9yIGludGVycG9sYXRpb24gaXMgbm90IHN0cmluZzogJywgdmFsdWUpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB3aXRoUGFyYW1ldGVycyhwYXJhbWV0ZXJzOiBUKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBIZWxwZXJzLmxvZyhwYXJhbWV0ZXJzIGFzIGFueSk7XG4gICAgICAgICAgSGVscGVycy53YXJuKCdbdGFvbi1oZWxlcHJzXSBQYXJhbWV0ZXJzIGFyZSBub3QgYSBvYmplY3Q6ICcpO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgveyhbXnt9XSopfS9nLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHZhciByID0gcGFyYW1ldGVyc1tiXTtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIHIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiByID09PSAnbnVtYmVyJyA/IHIgOiBhO1xuICAgICAgICB9IGFzIGFueSk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHBpeGVsc0NzcyBleG1hcGxlOiAxMDBweFxuICAgKiBAcmV0dXJucyBudW1iZXIgdmFsdWVcbiAgICovXG4gIG51bVZhbHVlKHBpeGVsc0Nzczogc3RyaW5nKSB7XG5cbiAgICByZXR1cm4gcGFyc2VJbnQocGl4ZWxzQ3NzLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleGFtcGxlczpcbiAgICogJ2FhIGJiIGJiJyA9PiBbJ2FhJywnYmInLCdjYyddLFxuICAgKiAnYWEnID0+IFsnYWEnXVxuICAgKiBbJ2FhJ10gPT4gWydhYSddXG4gICAqL1xuICBzcGxpdElmTmVlZChzdHJpbmdPckFycjogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJlcyA9IFtdO1xuICAgIGlmIChfLmlzQXJyYXkoc3RyaW5nT3JBcnIpKSB7XG4gICAgICByZXMgPSBzdHJpbmdPckFyci5tYXAocyA9PiB7XG4gICAgICAgIHJldHVybiBzLnRyaW0oKTtcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChfLmlzU3RyaW5nKHN0cmluZ09yQXJyKSkge1xuICAgICAgcmVzID0gc3RyaW5nT3JBcnIuc3BsaXQoL1xccypbXFxzLF1cXHMqLyk7XG4gICAgfVxuICAgIHJldHVybiByZXMuZmlsdGVyKGYgPT4gISFmICYmIChmLnRyaW0oKSAhPT0gJycpKTtcbiAgfVxuXG4gIHJlbW92ZURvdWJsZU9yTW9yZUVtcHR5TGluZXMoczogc3RyaW5nKSB7XG4gICAgcyA9IHM/LnNwbGl0KCdcXG4nKS5tYXAoZiA9PiBmLnRyaW1SaWdodCgpKS5qb2luKCdcXG4nKTtcbiAgICByZXR1cm4gcz8ucmVwbGFjZSgvKFxcclxcbnxcXHJ8XFxuKXsyLH0vZywgJyQxXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU3MTI5NzAzLzEzNDUxMDFcbiAgICpcbiAgICogUmV0dXJucyB0aGUgcGx1cmFsIG9mIGFuIEVuZ2xpc2ggd29yZC5cbiAgICpcbiAgICogQGV4cG9ydFxuICAgKiBAcGFyYW0ge3N0cmluZ30gd29yZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudF1cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHBsdXJhbCh3b3JkOiBzdHJpbmcsIGFtb3VudD86IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGFtb3VudCAhPT0gdW5kZWZpbmVkICYmIGFtb3VudCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHdvcmRcbiAgICB9XG4gICAgY29uc3QgcGx1cmFsOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgJyhxdWl6KSQnOiBcIiQxemVzXCIsXG4gICAgICAnXihveCkkJzogXCIkMWVuXCIsXG4gICAgICAnKFttfGxdKW91c2UkJzogXCIkMWljZVwiLFxuICAgICAgJyhtYXRyfHZlcnR8aW5kKWl4fGV4JCc6IFwiJDFpY2VzXCIsXG4gICAgICAnKHh8Y2h8c3N8c2gpJCc6IFwiJDFlc1wiLFxuICAgICAgJyhbXmFlaW91eV18cXUpeSQnOiBcIiQxaWVzXCIsXG4gICAgICAnKGhpdmUpJCc6IFwiJDFzXCIsXG4gICAgICAnKD86KFteZl0pZmV8KFtscl0pZikkJzogXCIkMSQydmVzXCIsXG4gICAgICAnKHNoZWF8bGVhfGxvYXx0aGllKWYkJzogXCIkMXZlc1wiLFxuICAgICAgJ3NpcyQnOiBcInNlc1wiLFxuICAgICAgJyhbdGldKXVtJCc6IFwiJDFhXCIsXG4gICAgICAnKHRvbWF0fHBvdGF0fGVjaHxoZXJ8dmV0KW8kJzogXCIkMW9lc1wiLFxuICAgICAgJyhidSlzJCc6IFwiJDFzZXNcIixcbiAgICAgICcoYWxpYXMpJCc6IFwiJDFlc1wiLFxuICAgICAgJyhvY3RvcCl1cyQnOiBcIiQxaVwiLFxuICAgICAgJyhheHx0ZXN0KWlzJCc6IFwiJDFlc1wiLFxuICAgICAgJyh1cykkJzogXCIkMWVzXCIsXG4gICAgICAnKFtec10rKSQnOiBcIiQxc1wiXG4gICAgfVxuICAgIGNvbnN0IGlycmVndWxhcjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICdtb3ZlJzogJ21vdmVzJyxcbiAgICAgICdmb290JzogJ2ZlZXQnLFxuICAgICAgJ2dvb3NlJzogJ2dlZXNlJyxcbiAgICAgICdzZXgnOiAnc2V4ZXMnLFxuICAgICAgJ2NoaWxkJzogJ2NoaWxkcmVuJyxcbiAgICAgICdtYW4nOiAnbWVuJyxcbiAgICAgICd0b290aCc6ICd0ZWV0aCcsXG4gICAgICAncGVyc29uJzogJ3Blb3BsZSdcbiAgICB9XG4gICAgY29uc3QgdW5jb3VudGFibGU6IHN0cmluZ1tdID0gW1xuICAgICAgJ3NoZWVwJyxcbiAgICAgICdmaXNoJyxcbiAgICAgICdkZWVyJyxcbiAgICAgICdtb29zZScsXG4gICAgICAnc2VyaWVzJyxcbiAgICAgICdzcGVjaWVzJyxcbiAgICAgICdtb25leScsXG4gICAgICAncmljZScsXG4gICAgICAnaW5mb3JtYXRpb24nLFxuICAgICAgJ2VxdWlwbWVudCcsXG4gICAgICAnYmlzb24nLFxuICAgICAgJ2NvZCcsXG4gICAgICAnb2Zmc3ByaW5nJyxcbiAgICAgICdwaWtlJyxcbiAgICAgICdzYWxtb24nLFxuICAgICAgJ3NocmltcCcsXG4gICAgICAnc3dpbmUnLFxuICAgICAgJ3Ryb3V0JyxcbiAgICAgICdhaXJjcmFmdCcsXG4gICAgICAnaG92ZXJjcmFmdCcsXG4gICAgICAnc3BhY2VjcmFmdCcsXG4gICAgICAnc3VnYXInLFxuICAgICAgJ3R1bmEnLFxuICAgICAgJ3lvdScsXG4gICAgICAnd29vZCdcbiAgICBdXG5cbiAgICBpZiAodW5jb3VudGFibGUuaW5kZXhPZih3b3JkLnRvTG93ZXJDYXNlKCkpID49IDApIHtcbiAgICAgIHJldHVybiB3b3JkXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB3IGluIGlycmVndWxhcikge1xuICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7d30kYCwgJ2knKVxuICAgICAgY29uc3QgcmVwbGFjZSA9IGlycmVndWxhclt3XVxuICAgICAgaWYgKHBhdHRlcm4udGVzdCh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZWcgaW4gcGx1cmFsKSB7XG4gICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChyZWcsICdpJylcbiAgICAgIGlmIChwYXR0ZXJuLnRlc3Qod29yZCkpIHtcbiAgICAgICAgcmV0dXJuIHdvcmQucmVwbGFjZShwYXR0ZXJuLCBwbHVyYWxbcmVnXSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHdvcmRcbiAgfVxuXG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NzEyOTcwMy8xMzQ1MTAxXG4gICAqXG4gICogUmV0dXJucyB0aGUgc2luZ3VsYXIgb2YgYW4gRW5nbGlzaCB3b3JkLlxuICAqXG4gICogQGV4cG9ydFxuICAqIEBwYXJhbSB7c3RyaW5nfSB3b3JkXG4gICogQHBhcmFtIHtudW1iZXJ9IFthbW91bnRdXG4gICogQHJldHVybnMge3N0cmluZ31cbiAgKi9cbiAgc2luZ3VsYXIod29yZDogc3RyaW5nLCBhbW91bnQ/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChhbW91bnQgIT09IHVuZGVmaW5lZCAmJiBhbW91bnQgIT09IDEpIHtcbiAgICAgIHJldHVybiB3b3JkXG4gICAgfVxuICAgIGNvbnN0IHNpbmd1bGFyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgJyhxdWl6KXplcyQnOiBcIiQxXCIsXG4gICAgICAnKG1hdHIpaWNlcyQnOiBcIiQxaXhcIixcbiAgICAgICcodmVydHxpbmQpaWNlcyQnOiBcIiQxZXhcIixcbiAgICAgICdeKG94KWVuJCc6IFwiJDFcIixcbiAgICAgICcoYWxpYXMpZXMkJzogXCIkMVwiLFxuICAgICAgJyhvY3RvcHx2aXIpaSQnOiBcIiQxdXNcIixcbiAgICAgICcoY3Jpc3xheHx0ZXN0KWVzJCc6IFwiJDFpc1wiLFxuICAgICAgJyhzaG9lKXMkJzogXCIkMVwiLFxuICAgICAgJyhvKWVzJCc6IFwiJDFcIixcbiAgICAgICcoYnVzKWVzJCc6IFwiJDFcIixcbiAgICAgICcoW218bF0paWNlJCc6IFwiJDFvdXNlXCIsXG4gICAgICAnKHh8Y2h8c3N8c2gpZXMkJzogXCIkMVwiLFxuICAgICAgJyhtKW92aWVzJCc6IFwiJDFvdmllXCIsXG4gICAgICAnKHMpZXJpZXMkJzogXCIkMWVyaWVzXCIsXG4gICAgICAnKFteYWVpb3V5XXxxdSlpZXMkJzogXCIkMXlcIixcbiAgICAgICcoW2xyXSl2ZXMkJzogXCIkMWZcIixcbiAgICAgICcodGl2ZSlzJCc6IFwiJDFcIixcbiAgICAgICcoaGl2ZSlzJCc6IFwiJDFcIixcbiAgICAgICcobGl8d2l8a25pKXZlcyQnOiBcIiQxZmVcIixcbiAgICAgICcoc2hlYXxsb2F8bGVhfHRoaWUpdmVzJCc6IFwiJDFmXCIsXG4gICAgICAnKF5hbmFseSlzZXMkJzogXCIkMXNpc1wiLFxuICAgICAgJygoYSluYWx5fChiKWF8KGQpaWFnbm98KHApYXJlbnRoZXwocClyb2dub3wocyl5bm9wfCh0KWhlKXNlcyQnOiBcIiQxJDJzaXNcIixcbiAgICAgICcoW3RpXSlhJCc6IFwiJDF1bVwiLFxuICAgICAgJyhuKWV3cyQnOiBcIiQxZXdzXCIsXG4gICAgICAnKGh8Ymwpb3VzZXMkJzogXCIkMW91c2VcIixcbiAgICAgICcoY29ycHNlKXMkJzogXCIkMVwiLFxuICAgICAgJyh1cyllcyQnOiBcIiQxXCIsXG4gICAgICAncyQnOiBcIlwiXG4gICAgfVxuICAgIGNvbnN0IGlycmVndWxhcjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICdtb3ZlJzogJ21vdmVzJyxcbiAgICAgICdmb290JzogJ2ZlZXQnLFxuICAgICAgJ2dvb3NlJzogJ2dlZXNlJyxcbiAgICAgICdzZXgnOiAnc2V4ZXMnLFxuICAgICAgJ2NoaWxkJzogJ2NoaWxkcmVuJyxcbiAgICAgICdtYW4nOiAnbWVuJyxcbiAgICAgICd0b290aCc6ICd0ZWV0aCcsXG4gICAgICAncGVyc29uJzogJ3Blb3BsZSdcbiAgICB9XG4gICAgY29uc3QgdW5jb3VudGFibGU6IHN0cmluZ1tdID0gW1xuICAgICAgJ3NoZWVwJyxcbiAgICAgICdmaXNoJyxcbiAgICAgICdkZWVyJyxcbiAgICAgICdtb29zZScsXG4gICAgICAnc2VyaWVzJyxcbiAgICAgICdzcGVjaWVzJyxcbiAgICAgICdtb25leScsXG4gICAgICAncmljZScsXG4gICAgICAnaW5mb3JtYXRpb24nLFxuICAgICAgJ2VxdWlwbWVudCcsXG4gICAgICAnYmlzb24nLFxuICAgICAgJ2NvZCcsXG4gICAgICAnb2Zmc3ByaW5nJyxcbiAgICAgICdwaWtlJyxcbiAgICAgICdzYWxtb24nLFxuICAgICAgJ3NocmltcCcsXG4gICAgICAnc3dpbmUnLFxuICAgICAgJ3Ryb3V0JyxcbiAgICAgICdhaXJjcmFmdCcsXG4gICAgICAnaG92ZXJjcmFmdCcsXG4gICAgICAnc3BhY2VjcmFmdCcsXG4gICAgICAnc3VnYXInLFxuICAgICAgJ3R1bmEnLFxuICAgICAgJ3lvdScsXG4gICAgICAnd29vZCdcbiAgICBdXG5cbiAgICBpZiAodW5jb3VudGFibGUuaW5kZXhPZih3b3JkLnRvTG93ZXJDYXNlKCkpID49IDApIHtcbiAgICAgIHJldHVybiB3b3JkXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB3IGluIGlycmVndWxhcikge1xuICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7aXJyZWd1bGFyW3ddfSRgLCAnaScpXG4gICAgICBjb25zdCByZXBsYWNlID0gd1xuICAgICAgaWYgKHBhdHRlcm4udGVzdCh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZWcgaW4gc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKHJlZywgJ2knKVxuICAgICAgaWYgKHBhdHRlcm4udGVzdCh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC5yZXBsYWNlKHBhdHRlcm4sIHNpbmd1bGFyW3JlZ10pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB3b3JkXG4gIH1cblxufVxuXG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10bnAtaGVscGVycyBsaWIvaGVscGVycy9oZWxwZXJzLXN0cmluZ3MudHMiXX0=