@rockcarver/frodo-cli 2.0.0-4 → 2.0.0-41

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 (486) hide show
  1. package/CHANGELOG.md +312 -5
  2. package/esm/app.js +22 -5
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/FrodoCommand.js +33 -7
  5. package/esm/cli/FrodoCommand.js.map +1 -1
  6. package/esm/cli/_template/something-delete.js +7 -5
  7. package/esm/cli/_template/something-delete.js.map +1 -1
  8. package/esm/cli/_template/something-describe.js +7 -5
  9. package/esm/cli/_template/something-describe.js.map +1 -1
  10. package/esm/cli/_template/something-else-delete.js +7 -5
  11. package/esm/cli/_template/something-else-delete.js.map +1 -1
  12. package/esm/cli/_template/something-else-describe.js +7 -5
  13. package/esm/cli/_template/something-else-describe.js.map +1 -1
  14. package/esm/cli/_template/something-else-export.js +8 -6
  15. package/esm/cli/_template/something-else-export.js.map +1 -1
  16. package/esm/cli/_template/something-else-import.js +7 -5
  17. package/esm/cli/_template/something-else-import.js.map +1 -1
  18. package/esm/cli/_template/something-else-list.js +7 -5
  19. package/esm/cli/_template/something-else-list.js.map +1 -1
  20. package/esm/cli/_template/something-else.js +1 -1
  21. package/esm/cli/_template/something-else.js.map +1 -1
  22. package/esm/cli/_template/something-export.js +8 -6
  23. package/esm/cli/_template/something-export.js.map +1 -1
  24. package/esm/cli/_template/something-import.js +7 -5
  25. package/esm/cli/_template/something-import.js.map +1 -1
  26. package/esm/cli/_template/something-list.js +7 -5
  27. package/esm/cli/_template/something-list.js.map +1 -1
  28. package/esm/cli/_template/something-other-delete.js +7 -5
  29. package/esm/cli/_template/something-other-delete.js.map +1 -1
  30. package/esm/cli/_template/something-other-describe.js +7 -5
  31. package/esm/cli/_template/something-other-describe.js.map +1 -1
  32. package/esm/cli/_template/something-other-export.js +8 -6
  33. package/esm/cli/_template/something-other-export.js.map +1 -1
  34. package/esm/cli/_template/something-other-import.js +7 -5
  35. package/esm/cli/_template/something-other-import.js.map +1 -1
  36. package/esm/cli/_template/something-other-list.js +7 -5
  37. package/esm/cli/_template/something-other-list.js.map +1 -1
  38. package/esm/cli/_template/something-other.js +1 -1
  39. package/esm/cli/_template/something-other.js.map +1 -1
  40. package/esm/cli/_template/something.js +2 -2
  41. package/esm/cli/_template/something.js.map +1 -1
  42. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +10 -5
  43. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
  44. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +14 -8
  45. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  46. package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js +41 -0
  47. package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js.map +1 -0
  48. package/esm/cli/admin/admin-federation-export.js +44 -0
  49. package/esm/cli/admin/admin-federation-export.js.map +1 -0
  50. package/esm/cli/admin/admin-federation-import.js +48 -0
  51. package/esm/cli/admin/admin-federation-import.js.map +1 -0
  52. package/esm/cli/admin/admin-federation-list.js +28 -0
  53. package/esm/cli/admin/admin-federation-list.js.map +1 -0
  54. package/esm/cli/admin/admin-federation.js +13 -0
  55. package/esm/cli/admin/admin-federation.js.map +1 -0
  56. package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.js +43 -0
  57. package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.js.map +1 -0
  58. package/esm/cli/admin/admin-get-access-token.js +12 -7
  59. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  60. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +13 -8
  61. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  62. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +11 -6
  63. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  64. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +11 -6
  65. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  66. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +11 -6
  67. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  68. package/esm/cli/admin/admin-list-static-user-mappings.js +12 -7
  69. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  70. package/esm/cli/admin/admin-remove-static-user-mapping.js +12 -6
  71. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  72. package/esm/cli/admin/admin-repair-org-model.js +11 -6
  73. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  74. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +12 -7
  75. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  76. package/esm/cli/admin/admin-show-generic-extension-attributes.js +11 -6
  77. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  78. package/esm/cli/admin/admin-train-auto-access-model.js +32 -0
  79. package/esm/cli/admin/admin-train-auto-access-model.js.map +1 -0
  80. package/esm/cli/admin/admin.js +8 -2
  81. package/esm/cli/admin/admin.js.map +1 -1
  82. package/esm/cli/agent/agent-delete.js +13 -7
  83. package/esm/cli/agent/agent-delete.js.map +1 -1
  84. package/esm/cli/agent/agent-describe.js +7 -5
  85. package/esm/cli/agent/agent-describe.js.map +1 -1
  86. package/esm/cli/agent/agent-export.js +12 -10
  87. package/esm/cli/agent/agent-export.js.map +1 -1
  88. package/esm/cli/agent/agent-gateway-delete.js +13 -7
  89. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  90. package/esm/cli/agent/agent-gateway-describe.js +7 -5
  91. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  92. package/esm/cli/agent/agent-gateway-export.js +12 -10
  93. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  94. package/esm/cli/agent/agent-gateway-import.js +8 -6
  95. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  96. package/esm/cli/agent/agent-gateway-list.js +7 -5
  97. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  98. package/esm/cli/agent/agent-gateway.js +1 -1
  99. package/esm/cli/agent/agent-gateway.js.map +1 -1
  100. package/esm/cli/agent/agent-import.js +8 -6
  101. package/esm/cli/agent/agent-import.js.map +1 -1
  102. package/esm/cli/agent/agent-java-delete.js +13 -7
  103. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  104. package/esm/cli/agent/agent-java-describe.js +7 -5
  105. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  106. package/esm/cli/agent/agent-java-export.js +12 -10
  107. package/esm/cli/agent/agent-java-export.js.map +1 -1
  108. package/esm/cli/agent/agent-java-import.js +8 -6
  109. package/esm/cli/agent/agent-java-import.js.map +1 -1
  110. package/esm/cli/agent/agent-java-list.js +7 -5
  111. package/esm/cli/agent/agent-java-list.js.map +1 -1
  112. package/esm/cli/agent/agent-java.js +1 -1
  113. package/esm/cli/agent/agent-java.js.map +1 -1
  114. package/esm/cli/agent/agent-list.js +7 -5
  115. package/esm/cli/agent/agent-list.js.map +1 -1
  116. package/esm/cli/agent/agent-web-delete.js +13 -7
  117. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  118. package/esm/cli/agent/agent-web-describe.js +7 -5
  119. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  120. package/esm/cli/agent/agent-web-export.js +12 -10
  121. package/esm/cli/agent/agent-web-export.js.map +1 -1
  122. package/esm/cli/agent/agent-web-import.js +8 -6
  123. package/esm/cli/agent/agent-web-import.js.map +1 -1
  124. package/esm/cli/agent/agent-web-list.js +7 -5
  125. package/esm/cli/agent/agent-web-list.js.map +1 -1
  126. package/esm/cli/agent/agent-web.js +3 -3
  127. package/esm/cli/agent/agent-web.js.map +1 -1
  128. package/esm/cli/agent/agent.js +2 -2
  129. package/esm/cli/agent/agent.js.map +1 -1
  130. package/esm/cli/app/app-delete.js +27 -9
  131. package/esm/cli/app/app-delete.js.map +1 -1
  132. package/esm/cli/app/app-describe.js +9 -6
  133. package/esm/cli/app/app-describe.js.map +1 -1
  134. package/esm/cli/app/app-export.js +17 -14
  135. package/esm/cli/app/app-export.js.map +1 -1
  136. package/esm/cli/app/app-import.js +21 -18
  137. package/esm/cli/app/app-import.js.map +1 -1
  138. package/esm/cli/app/app-list.js +12 -9
  139. package/esm/cli/app/app-list.js.map +1 -1
  140. package/esm/cli/app/app.js +8 -12
  141. package/esm/cli/app/app.js.map +1 -1
  142. package/esm/cli/authn/authn-describe.js +29 -0
  143. package/esm/cli/authn/authn-describe.js.map +1 -0
  144. package/esm/cli/authn/authn-export.js +25 -0
  145. package/esm/cli/authn/authn-export.js.map +1 -0
  146. package/esm/cli/authn/authn-import.js +25 -0
  147. package/esm/cli/authn/authn-import.js.map +1 -0
  148. package/esm/cli/authn/authn.js +12 -0
  149. package/esm/cli/authn/authn.js.map +1 -0
  150. package/esm/cli/authz/authz-policy-delete.js +11 -9
  151. package/esm/cli/authz/authz-policy-delete.js.map +1 -1
  152. package/esm/cli/authz/authz-policy-describe.js +8 -6
  153. package/esm/cli/authz/authz-policy-describe.js.map +1 -1
  154. package/esm/cli/authz/authz-policy-export.js +18 -16
  155. package/esm/cli/authz/authz-policy-export.js.map +1 -1
  156. package/esm/cli/authz/authz-policy-import.js +11 -9
  157. package/esm/cli/authz/authz-policy-import.js.map +1 -1
  158. package/esm/cli/authz/authz-policy-list.js +11 -9
  159. package/esm/cli/authz/authz-policy-list.js.map +1 -1
  160. package/esm/cli/authz/authz-policy.js +1 -1
  161. package/esm/cli/authz/authz-policy.js.map +1 -1
  162. package/esm/cli/authz/authz-set-delete.js +11 -9
  163. package/esm/cli/authz/authz-set-delete.js.map +1 -1
  164. package/esm/cli/authz/authz-set-describe.js +8 -6
  165. package/esm/cli/authz/authz-set-describe.js.map +1 -1
  166. package/esm/cli/authz/authz-set-export.js +14 -12
  167. package/esm/cli/authz/authz-set-export.js.map +1 -1
  168. package/esm/cli/authz/authz-set-import.js +11 -9
  169. package/esm/cli/authz/authz-set-import.js.map +1 -1
  170. package/esm/cli/authz/authz-set-list.js +8 -6
  171. package/esm/cli/authz/authz-set-list.js.map +1 -1
  172. package/esm/cli/authz/authz-set.js +1 -1
  173. package/esm/cli/authz/authz-set.js.map +1 -1
  174. package/esm/cli/authz/authz-type-delete.js +13 -11
  175. package/esm/cli/authz/authz-type-delete.js.map +1 -1
  176. package/esm/cli/authz/authz-type-describe.js +9 -7
  177. package/esm/cli/authz/authz-type-describe.js.map +1 -1
  178. package/esm/cli/authz/authz-type-export.js +16 -14
  179. package/esm/cli/authz/authz-type-export.js.map +1 -1
  180. package/esm/cli/authz/authz-type-import.js +14 -12
  181. package/esm/cli/authz/authz-type-import.js.map +1 -1
  182. package/esm/cli/authz/authz-type-list.js +9 -7
  183. package/esm/cli/authz/authz-type-list.js.map +1 -1
  184. package/esm/cli/authz/authz-type.js +1 -1
  185. package/esm/cli/authz/authz-type.js.map +1 -1
  186. package/esm/cli/authz/authz.js +2 -2
  187. package/esm/cli/authz/authz.js.map +1 -1
  188. package/esm/cli/config/config-delete.js +21 -0
  189. package/esm/cli/config/config-delete.js.map +1 -0
  190. package/esm/cli/config/config-describe.js +21 -0
  191. package/esm/cli/config/config-describe.js.map +1 -0
  192. package/esm/cli/config/config-export.js +43 -0
  193. package/esm/cli/config/config-export.js.map +1 -0
  194. package/esm/cli/config/config-import.js +54 -0
  195. package/esm/cli/config/config-import.js.map +1 -0
  196. package/esm/cli/config/config-list.js +21 -0
  197. package/esm/cli/config/config-list.js.map +1 -0
  198. package/esm/cli/config/config.js +19 -0
  199. package/esm/cli/config/config.js.map +1 -0
  200. package/esm/cli/conn/conn-delete.js +2 -3
  201. package/esm/cli/conn/conn-delete.js.map +1 -1
  202. package/esm/cli/conn/conn-describe.js +2 -3
  203. package/esm/cli/conn/conn-describe.js.map +1 -1
  204. package/esm/cli/conn/conn-list.js +2 -3
  205. package/esm/cli/conn/conn-list.js.map +1 -1
  206. package/esm/cli/conn/conn-save.js +31 -16
  207. package/esm/cli/conn/conn-save.js.map +1 -1
  208. package/esm/cli/conn/conn.js +2 -2
  209. package/esm/cli/conn/conn.js.map +1 -1
  210. package/esm/cli/email/email-template-export.js +14 -12
  211. package/esm/cli/email/email-template-export.js.map +1 -1
  212. package/esm/cli/email/email-template-import.js +15 -13
  213. package/esm/cli/email/email-template-import.js.map +1 -1
  214. package/esm/cli/email/email-template-list.js +9 -7
  215. package/esm/cli/email/email-template-list.js.map +1 -1
  216. package/esm/cli/email/email-template.js +1 -1
  217. package/esm/cli/email/email-template.js.map +1 -1
  218. package/esm/cli/email/email.js +2 -2
  219. package/esm/cli/email/email.js.map +1 -1
  220. package/esm/cli/esv/esv-apply.js +18 -9
  221. package/esm/cli/esv/esv-apply.js.map +1 -1
  222. package/esm/cli/esv/esv-secret-create.js +10 -7
  223. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  224. package/esm/cli/esv/esv-secret-delete.js +13 -10
  225. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  226. package/esm/cli/esv/esv-secret-describe.js +10 -7
  227. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  228. package/esm/cli/esv/esv-secret-export.js +22 -7
  229. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  230. package/esm/cli/esv/esv-secret-import.js +7 -5
  231. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  232. package/esm/cli/esv/esv-secret-list.js +11 -8
  233. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  234. package/esm/cli/esv/esv-secret-set.js +10 -7
  235. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  236. package/esm/cli/esv/esv-secret-version-activate.js +10 -8
  237. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  238. package/esm/cli/esv/esv-secret-version-create.js +10 -7
  239. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  240. package/esm/cli/esv/esv-secret-version-deactivate.js +10 -8
  241. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  242. package/esm/cli/esv/esv-secret-version-delete.js +13 -10
  243. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  244. package/esm/cli/esv/esv-secret-version-list.js +10 -7
  245. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  246. package/esm/cli/esv/esv-secret-version.js +1 -1
  247. package/esm/cli/esv/esv-secret-version.js.map +1 -1
  248. package/esm/cli/esv/esv-secret.js +2 -3
  249. package/esm/cli/esv/esv-secret.js.map +1 -1
  250. package/esm/cli/esv/esv-variable-create.js +11 -7
  251. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  252. package/esm/cli/esv/esv-variable-delete.js +13 -9
  253. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  254. package/esm/cli/esv/esv-variable-describe.js +11 -8
  255. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  256. package/esm/cli/esv/esv-variable-export.js +23 -7
  257. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  258. package/esm/cli/esv/esv-variable-import.js +7 -5
  259. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  260. package/esm/cli/esv/esv-variable-list.js +11 -8
  261. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  262. package/esm/cli/esv/esv-variable-set.js +12 -8
  263. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  264. package/esm/cli/esv/esv-variable.js +2 -3
  265. package/esm/cli/esv/esv-variable.js.map +1 -1
  266. package/esm/cli/esv/esv.js +2 -2
  267. package/esm/cli/esv/esv.js.map +1 -1
  268. package/esm/cli/idm/idm-count.js +10 -8
  269. package/esm/cli/idm/idm-count.js.map +1 -1
  270. package/esm/cli/idm/idm-export.js +24 -16
  271. package/esm/cli/idm/idm-export.js.map +1 -1
  272. package/esm/cli/idm/idm-import.js +22 -14
  273. package/esm/cli/idm/idm-import.js.map +1 -1
  274. package/esm/cli/idm/idm-list.js +9 -7
  275. package/esm/cli/idm/idm-list.js.map +1 -1
  276. package/esm/cli/idm/idm.js +2 -2
  277. package/esm/cli/idm/idm.js.map +1 -1
  278. package/esm/cli/idp/idp-export.js +12 -10
  279. package/esm/cli/idp/idp-export.js.map +1 -1
  280. package/esm/cli/idp/idp-import.js +24 -14
  281. package/esm/cli/idp/idp-import.js.map +1 -1
  282. package/esm/cli/idp/idp-list.js +8 -6
  283. package/esm/cli/idp/idp-list.js.map +1 -1
  284. package/esm/cli/idp/idp.js +2 -2
  285. package/esm/cli/idp/idp.js.map +1 -1
  286. package/esm/cli/info/info.js +13 -8
  287. package/esm/cli/info/info.js.map +1 -1
  288. package/esm/cli/journey/journey-delete.js +14 -8
  289. package/esm/cli/journey/journey-delete.js.map +1 -1
  290. package/esm/cli/journey/journey-describe.js +22 -12
  291. package/esm/cli/journey/journey-describe.js.map +1 -1
  292. package/esm/cli/journey/journey-disable.js +11 -12
  293. package/esm/cli/journey/journey-disable.js.map +1 -1
  294. package/esm/cli/journey/journey-enable.js +11 -12
  295. package/esm/cli/journey/journey-enable.js.map +1 -1
  296. package/esm/cli/journey/journey-export.js +24 -13
  297. package/esm/cli/journey/journey-export.js.map +1 -1
  298. package/esm/cli/journey/journey-import.js +15 -13
  299. package/esm/cli/journey/journey-import.js.map +1 -1
  300. package/esm/cli/journey/journey-list.js +7 -5
  301. package/esm/cli/journey/journey-list.js.map +1 -1
  302. package/esm/cli/journey/journey-prune.js +23 -13
  303. package/esm/cli/journey/journey-prune.js.map +1 -1
  304. package/esm/cli/journey/journey.js +2 -2
  305. package/esm/cli/journey/journey.js.map +1 -1
  306. package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +68 -36
  307. package/esm/cli/log/log-fetch.js.map +1 -0
  308. package/esm/cli/log/log-key-delete.js +34 -0
  309. package/esm/cli/log/log-key-delete.js.map +1 -0
  310. package/esm/cli/log/log-key-describe.js +21 -0
  311. package/esm/cli/log/log-key-describe.js.map +1 -0
  312. package/esm/cli/log/log-key-list.js +25 -0
  313. package/esm/cli/log/log-key-list.js.map +1 -0
  314. package/esm/cli/log/log-key.js +8 -0
  315. package/esm/cli/log/log-key.js.map +1 -0
  316. package/esm/cli/log/log-list.js +80 -0
  317. package/esm/cli/log/log-list.js.map +1 -0
  318. package/esm/cli/log/log-tail.js +77 -0
  319. package/esm/cli/log/log-tail.js.map +1 -0
  320. package/esm/cli/{logging/logs.js → log/log.js} +6 -3
  321. package/esm/cli/log/log.js.map +1 -0
  322. package/esm/cli/oauth/oauth-client-delete.js +21 -0
  323. package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
  324. package/esm/cli/oauth/oauth-client-describe.js +21 -0
  325. package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
  326. package/esm/cli/oauth/oauth-client-export.js +51 -0
  327. package/esm/cli/oauth/oauth-client-export.js.map +1 -0
  328. package/esm/cli/oauth/oauth-client-import.js +56 -0
  329. package/esm/cli/oauth/oauth-client-import.js.map +1 -0
  330. package/esm/cli/oauth/oauth-client-list.js +24 -0
  331. package/esm/cli/oauth/oauth-client-list.js.map +1 -0
  332. package/esm/cli/oauth/oauth-client.js +14 -0
  333. package/esm/cli/oauth/oauth-client.js.map +1 -0
  334. package/esm/cli/oauth/oauth.js +13 -0
  335. package/esm/cli/oauth/oauth.js.map +1 -0
  336. package/esm/cli/realm/realm-add-custom-domain.js +8 -6
  337. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  338. package/esm/cli/realm/realm-describe.js +8 -6
  339. package/esm/cli/realm/realm-describe.js.map +1 -1
  340. package/esm/cli/realm/realm-list.js +8 -6
  341. package/esm/cli/realm/realm-list.js.map +1 -1
  342. package/esm/cli/realm/realm-remove-custom-domain.js +11 -6
  343. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  344. package/esm/cli/realm/realm.js +2 -2
  345. package/esm/cli/realm/realm.js.map +1 -1
  346. package/esm/cli/saml/saml-cot-export.js +14 -12
  347. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  348. package/esm/cli/saml/saml-cot-import.js +15 -13
  349. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  350. package/esm/cli/saml/saml-cot-list.js +9 -7
  351. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  352. package/esm/cli/saml/saml-cot.js +1 -1
  353. package/esm/cli/saml/saml-cot.js.map +1 -1
  354. package/esm/cli/saml/saml-delete.js +14 -8
  355. package/esm/cli/saml/saml-delete.js.map +1 -1
  356. package/esm/cli/saml/saml-describe.js +9 -7
  357. package/esm/cli/saml/saml-describe.js.map +1 -1
  358. package/esm/cli/saml/saml-export.js +14 -12
  359. package/esm/cli/saml/saml-export.js.map +1 -1
  360. package/esm/cli/saml/saml-import.js +24 -14
  361. package/esm/cli/saml/saml-import.js.map +1 -1
  362. package/esm/cli/saml/saml-list.js +9 -7
  363. package/esm/cli/saml/saml-list.js.map +1 -1
  364. package/esm/cli/saml/saml-metadata-export.js +10 -8
  365. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  366. package/esm/cli/saml/saml-metadata.js +1 -1
  367. package/esm/cli/saml/saml-metadata.js.map +1 -1
  368. package/esm/cli/saml/saml.js +2 -2
  369. package/esm/cli/saml/saml.js.map +1 -1
  370. package/esm/cli/script/script-delete.js +21 -8
  371. package/esm/cli/script/script-delete.js.map +1 -1
  372. package/esm/cli/script/script-describe.js +7 -5
  373. package/esm/cli/script/script-describe.js.map +1 -1
  374. package/esm/cli/script/script-export.js +12 -14
  375. package/esm/cli/script/script-export.js.map +1 -1
  376. package/esm/cli/script/script-import.js +9 -7
  377. package/esm/cli/script/script-import.js.map +1 -1
  378. package/esm/cli/script/script-list.js +10 -8
  379. package/esm/cli/script/script-list.js.map +1 -1
  380. package/esm/cli/script/script.js +3 -5
  381. package/esm/cli/script/script.js.map +1 -1
  382. package/esm/cli/service/service-delete.js +8 -5
  383. package/esm/cli/service/service-delete.js.map +1 -1
  384. package/esm/cli/service/service-export.js +13 -11
  385. package/esm/cli/service/service-export.js.map +1 -1
  386. package/esm/cli/service/service-import.js +32 -14
  387. package/esm/cli/service/service-import.js.map +1 -1
  388. package/esm/cli/service/service-list.js +7 -4
  389. package/esm/cli/service/service-list.js.map +1 -1
  390. package/esm/cli/service/service.js +2 -2
  391. package/esm/cli/service/service.js.map +1 -1
  392. package/esm/cli/shell/shell.js +57 -0
  393. package/esm/cli/shell/shell.js.map +1 -0
  394. package/esm/cli/theme/theme-delete.js +13 -11
  395. package/esm/cli/theme/theme-delete.js.map +1 -1
  396. package/esm/cli/theme/theme-export.js +16 -14
  397. package/esm/cli/theme/theme-export.js.map +1 -1
  398. package/esm/cli/theme/theme-import.js +16 -14
  399. package/esm/cli/theme/theme-import.js.map +1 -1
  400. package/esm/cli/theme/theme-list.js +8 -6
  401. package/esm/cli/theme/theme-list.js.map +1 -1
  402. package/esm/cli/theme/theme.js +2 -2
  403. package/esm/cli/theme/theme.js.map +1 -1
  404. package/esm/help/SampleData.js +7 -0
  405. package/esm/help/SampleData.js.map +1 -0
  406. package/esm/launch.js +1 -1
  407. package/esm/launch.js.map +1 -1
  408. package/esm/loader.js +2 -2
  409. package/esm/loader.js.map +1 -1
  410. package/esm/ops/AdminFederationOps.js +231 -0
  411. package/esm/ops/AdminFederationOps.js.map +1 -0
  412. package/esm/ops/AdminOps.js +151 -0
  413. package/esm/ops/AdminOps.js.map +1 -0
  414. package/esm/ops/AgentOps.js +213 -150
  415. package/esm/ops/AgentOps.js.map +1 -1
  416. package/esm/ops/ApplicationOps.js +324 -0
  417. package/esm/ops/ApplicationOps.js.map +1 -0
  418. package/esm/ops/AuthenticationSettingsOps.js +90 -0
  419. package/esm/ops/AuthenticationSettingsOps.js.map +1 -0
  420. package/esm/ops/CirclesOfTrustOps.js +98 -78
  421. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  422. package/esm/ops/ConfigOps.js +162 -0
  423. package/esm/ops/ConfigOps.js.map +1 -0
  424. package/esm/ops/ConnectionProfileOps.js +12 -6
  425. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  426. package/esm/ops/EmailTemplateOps.js +122 -127
  427. package/esm/ops/EmailTemplateOps.js.map +1 -1
  428. package/esm/ops/IdmOps.js +101 -182
  429. package/esm/ops/IdmOps.js.map +1 -1
  430. package/esm/ops/IdpOps.js +118 -73
  431. package/esm/ops/IdpOps.js.map +1 -1
  432. package/esm/ops/JourneyOps.js +176 -114
  433. package/esm/ops/JourneyOps.js.map +1 -1
  434. package/esm/ops/LogOps.js +92 -30
  435. package/esm/ops/LogOps.js.map +1 -1
  436. package/esm/ops/NodeOps.js +6 -3
  437. package/esm/ops/NodeOps.js.map +1 -1
  438. package/esm/ops/OAuth2ClientOps.js +71 -49
  439. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  440. package/esm/ops/OrganizationOps.js +14 -22
  441. package/esm/ops/OrganizationOps.js.map +1 -1
  442. package/esm/ops/PolicyOps.js +127 -86
  443. package/esm/ops/PolicyOps.js.map +1 -1
  444. package/esm/ops/PolicySetOps.js +108 -76
  445. package/esm/ops/PolicySetOps.js.map +1 -1
  446. package/esm/ops/RealmOps.js +18 -11
  447. package/esm/ops/RealmOps.js.map +1 -1
  448. package/esm/ops/ResourceTypeOps.js +105 -87
  449. package/esm/ops/ResourceTypeOps.js.map +1 -1
  450. package/esm/ops/Saml2Ops.js +132 -91
  451. package/esm/ops/Saml2Ops.js.map +1 -1
  452. package/esm/ops/Saml2Ops.test_.js.map +1 -1
  453. package/esm/ops/ScriptOps.js +205 -82
  454. package/esm/ops/ScriptOps.js.map +1 -1
  455. package/esm/ops/SecretsOps.js +289 -79
  456. package/esm/ops/SecretsOps.js.map +1 -1
  457. package/esm/ops/ServiceOps.js +97 -54
  458. package/esm/ops/ServiceOps.js.map +1 -1
  459. package/esm/ops/ThemeOps.js +164 -158
  460. package/esm/ops/ThemeOps.js.map +1 -1
  461. package/esm/ops/VariablesOps.js +252 -65
  462. package/esm/ops/VariablesOps.js.map +1 -1
  463. package/esm/ops/utils/OpsUtils.js +1 -1
  464. package/esm/ops/utils/OpsUtils.js.map +1 -1
  465. package/esm/ops/utils/Wordwrap.js +1 -1
  466. package/esm/ops/utils/Wordwrap.js.map +1 -1
  467. package/esm/storage/StaticStorage.js +1 -1
  468. package/esm/storage/StaticStorage.js.map +1 -1
  469. package/esm/utils/Config.js +162 -4
  470. package/esm/utils/Config.js.map +1 -1
  471. package/esm/utils/Console.js +78 -35
  472. package/esm/utils/Console.js.map +1 -1
  473. package/esm/utils/Version.js +19 -16
  474. package/esm/utils/Version.js.map +1 -1
  475. package/global-jest-setup.js +4 -0
  476. package/package.json +55 -37
  477. package/esm/cli/logging/logs-fetch.js.map +0 -1
  478. package/esm/cli/logging/logs-list.js +0 -49
  479. package/esm/cli/logging/logs-list.js.map +0 -1
  480. package/esm/cli/logging/logs-tail.js +0 -46
  481. package/esm/cli/logging/logs-tail.js.map +0 -1
  482. package/esm/cli/logging/logs.js.map +0 -1
  483. package/esm/cli/theme/theme-delete.e2e.test_.js.map +0 -1
  484. package/esm/cli/theme/theme-list.e2e.test_.js.map +0 -1
  485. package/esm/utils/ExportImportUtils.js +0 -90
  486. package/esm/utils/ExportImportUtils.js.map +0 -1
@@ -1,7 +1,18 @@
1
+ import { frodo, state } from '@rockcarver/frodo-lib';
1
2
  import fs from 'fs';
2
3
  import os from 'os';
3
- import { frodo } from '@rockcarver/frodo-lib';
4
+ import slugify from 'slugify';
4
5
  import { printMessage } from './Console';
6
+ const {
7
+ getFilePath,
8
+ readFiles
9
+ } = frodo.utils;
10
+ const {
11
+ exportFullConfiguration
12
+ } = frodo.config;
13
+ const {
14
+ getDefaultNoiseFilter
15
+ } = frodo.cloud.log;
5
16
  export const FRODO_CONFIG_PATH_KEY = 'FRODO_CONFIG_PATH';
6
17
  export const FRODO_LOG_NOISEFILTER_FILENAME = 'LoggingNoiseFilter.json';
7
18
  export function getConfigPath() {
@@ -22,12 +33,12 @@ export function getNoiseFilters(defaults) {
22
33
  const filename = `${getConfigPath()}/${FRODO_LOG_NOISEFILTER_FILENAME}`;
23
34
  if (defaults) {
24
35
  printMessage(`Using default logging noise filters.`, 'info');
25
- return frodo.cloud.log.getDefaultNoiseFilter();
36
+ return getDefaultNoiseFilter();
26
37
  }
27
38
  let noiseFilter = getCustomNoiseFilters();
28
39
  if (noiseFilter.length == 0) {
29
40
  printMessage(`No custom noise filters defined. Using defaults.`, 'info');
30
- noiseFilter = frodo.cloud.log.getDefaultNoiseFilter();
41
+ noiseFilter = getDefaultNoiseFilter();
31
42
  try {
32
43
  fs.writeFileSync(filename, JSON.stringify(noiseFilter, null, 2));
33
44
  printMessage(`The default filters were saved in ${filename}. You can change the filters as needed.`, 'info');
@@ -37,4 +48,151 @@ export function getNoiseFilters(defaults) {
37
48
  }
38
49
  return noiseFilter;
39
50
  }
40
- //# sourceMappingURL=Config.js.map
51
+
52
+ /**
53
+ * Gets the full export config from one of three locations:
54
+ * 1. The file passed into the function if one is provided.
55
+ * 2. The working directory if it exists (provided by the user)
56
+ * 3. The cloud tenant if the exports are not locally provided
57
+ * @param file The optional file path
58
+ * @returns The full export config
59
+ */
60
+ export async function getFullExportConfig(file = null) {
61
+ // Get export from file if it exists
62
+ if (file) {
63
+ return JSON.parse(fs.readFileSync(getFilePath(file), 'utf8'));
64
+ }
65
+ // If working directory doesn't exist, export from the cloud
66
+ const workingDirectory = state.getDirectory();
67
+ if (!workingDirectory) {
68
+ return await exportFullConfiguration({
69
+ useStringArrays: true,
70
+ noDecode: false
71
+ });
72
+ }
73
+ // Go through files in the working directory and reconstruct the full export
74
+ return getFullExportConfigFromDirectory(workingDirectory);
75
+ }
76
+
77
+ /**
78
+ * Reconstructs the full export config from files in the given directory
79
+ * @param directory The directory
80
+ * @return The full export config
81
+ */
82
+ export async function getFullExportConfigFromDirectory(directory) {
83
+ const fullExportConfig = {
84
+ meta: {},
85
+ agents: {},
86
+ application: {},
87
+ authentication: {},
88
+ config: {},
89
+ emailTemplate: {},
90
+ idp: {},
91
+ managedApplication: {},
92
+ policy: {},
93
+ policyset: {},
94
+ resourcetype: {},
95
+ saml: {
96
+ hosted: {},
97
+ remote: {},
98
+ metadata: {},
99
+ cot: {}
100
+ },
101
+ script: {},
102
+ secrets: {},
103
+ service: {},
104
+ theme: {},
105
+ trees: {},
106
+ variables: {}
107
+ };
108
+ const files = await readFiles(directory);
109
+ const jsonFiles = files.filter(f => f.path.endsWith('.json'));
110
+ const idmConfigFiles = jsonFiles.filter(f => f.path.startsWith('config/'));
111
+ const samlFiles = jsonFiles.filter(f => f.path.startsWith('saml/') || f.path.startsWith('cot/'));
112
+ const otherFiles = jsonFiles.filter(f => !f.path.startsWith('config/') && !f.path.startsWith('saml/') && !f.path.startsWith('cot/'));
113
+ const scriptFiles = files.filter(f => f.path.endsWith('.js') || f.path.endsWith('.groovy'));
114
+ // Handle json files
115
+ for (const f of otherFiles) {
116
+ for (const [id, value] of Object.entries(JSON.parse(f.content))) {
117
+ if (value == null || fullExportConfig[id] == null) {
118
+ continue;
119
+ }
120
+ Object.assign(fullExportConfig[id], value);
121
+ }
122
+ }
123
+ // Handle saml files
124
+ for (const f of samlFiles) {
125
+ let content = JSON.parse(f.content);
126
+ content = content.saml;
127
+ for (const [id, value] of Object.entries(content)) {
128
+ Object.assign(fullExportConfig.saml[id], value);
129
+ }
130
+ }
131
+ // Handle idm config files
132
+ for (const f of idmConfigFiles) {
133
+ const content = JSON.parse(f.content);
134
+ fullExportConfig.config[content._id] = content;
135
+ }
136
+ // Handle extracted scripts, adding them to their corresponding script objects in the export
137
+ if (scriptFiles.length > 0 && fullExportConfig.script != null) {
138
+ const scriptExports = Object.values(fullExportConfig.script);
139
+ for (const f of scriptFiles) {
140
+ const name = f.path.substring(f.path.lastIndexOf('/') + 1, f.path.indexOf('.', f.path.lastIndexOf('/')));
141
+ const scriptLines = f.content.split('\n');
142
+ const script = scriptExports.find(s => slugify(s.name.replace(/^http(s?):\/\//, ''), {
143
+ remove: /[^\w\s$*_+~.()'"!\-@]+/g
144
+ }) === name);
145
+ if (!script) {
146
+ throw Error(`Can't find the script corresponding to the file '${f.path}' in the export files`);
147
+ }
148
+ script.script = scriptLines;
149
+ }
150
+ }
151
+ return fullExportConfig;
152
+ }
153
+
154
+ /**
155
+ * Determines if a string id is being used anywhere within the given configuration object
156
+ * @param configuration The configuration object
157
+ * @param id The id being search for
158
+ * @param isEsv Whether the id corresponds to an ESV or not
159
+ */
160
+ export function isIdUsed(
161
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
162
+ configuration, id, isEsv) {
163
+ return isIdUsedRecurse(configuration, isEsv ?
164
+ // For ESV ids, they contain either letters, numbers, dashes, or underscores. The dashes get replaced with periods (escaped with a \ for the regex)
165
+ // since anywhere they are being used they will be used with periods, not dashes. Note that the (?:[^a-z0-9._]|$) expressions at the beginning and
166
+ // end are meant to ensure that the id found is not a substring of some other id (i.e. the id found must either be at the beginning or end of the
167
+ // string, or if in the middle of a string, is not preceded or followed by a character that would be part of another id).
168
+ new RegExp(`(?:[^a-z0-9._]|^)${id.replaceAll('-', '\\.')}(?:[^a-z0-9._]|$)`) :
169
+ // For normal ids, they contain only letters, numbers, or dashes.
170
+ new RegExp(`(?:[^a-z0-9-]|^)${id}(?:[^a-z0-9-]|$)`));
171
+ }
172
+
173
+ /**
174
+ * Recursive helper for isIdUsed that finds any strings contained in the configuration that pass the regex
175
+ * @param configuration The configuration (could be anything)
176
+ * @param regex The regex test
177
+ */
178
+ function isIdUsedRecurse(
179
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
180
+ configuration, regex) {
181
+ const type = typeof configuration;
182
+ if (type === 'object' && configuration !== null) {
183
+ for (const [id, value] of Object.entries(
184
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
185
+ configuration)) {
186
+ const isIdUsed = isIdUsedRecurse(value, regex);
187
+ if (isIdUsed.used) {
188
+ isIdUsed.location = id + (value.name ? `(name: '${value.name}')` : '') + (isIdUsed.location === '' ? '' : '.') + isIdUsed.location;
189
+ return isIdUsed;
190
+ }
191
+ }
192
+ }
193
+ return {
194
+ used: type === 'string' && regex.test(configuration),
195
+ location: ''
196
+ };
197
+ }
198
+ //# sourceMappingURL=Config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Config.js","names":["fs","os","frodo","printMessage","FRODO_CONFIG_PATH_KEY","FRODO_LOG_NOISEFILTER_FILENAME","getConfigPath","process","env","homedir","getCustomNoiseFilters","filename","noiseFilter","data","readFileSync","JSON","parse","e","message","getNoiseFilters","defaults","cloud","log","getDefaultNoiseFilter","length","writeFileSync","stringify"],"sources":["utils/Config.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport { frodo } from '@rockcarver/frodo-lib';\n\nimport { printMessage } from './Console';\n\nexport const FRODO_CONFIG_PATH_KEY = 'FRODO_CONFIG_PATH';\nexport const FRODO_LOG_NOISEFILTER_FILENAME = 'LoggingNoiseFilter.json';\n\nexport function getConfigPath(): string {\n return process.env[FRODO_CONFIG_PATH_KEY] || `${os.homedir()}/.frodo`;\n}\n\nfunction getCustomNoiseFilters(): Array<string> {\n const filename = `${getConfigPath()}/${FRODO_LOG_NOISEFILTER_FILENAME}`;\n let noiseFilter = [];\n try {\n const data = fs.readFileSync(filename, 'utf8');\n noiseFilter = JSON.parse(data);\n } catch (e) {\n printMessage(`Error reading ${filename} (${e.message})`, 'error');\n }\n return noiseFilter;\n}\n\nexport function getNoiseFilters(defaults: boolean): Array<string> {\n const filename = `${getConfigPath()}/${FRODO_LOG_NOISEFILTER_FILENAME}`;\n if (defaults) {\n printMessage(`Using default logging noise filters.`, 'info');\n return frodo.cloud.log.getDefaultNoiseFilter();\n }\n let noiseFilter = getCustomNoiseFilters();\n if (noiseFilter.length == 0) {\n printMessage(`No custom noise filters defined. Using defaults.`, 'info');\n noiseFilter = frodo.cloud.log.getDefaultNoiseFilter();\n try {\n fs.writeFileSync(filename, JSON.stringify(noiseFilter, null, 2));\n printMessage(\n `The default filters were saved in ${filename}. You can change the filters as needed.`,\n 'info'\n );\n } catch (e) {\n printMessage(\n `Error creating noise filter configuration with default values.`,\n 'error'\n );\n }\n }\n return noiseFilter;\n}\n"],"mappings":"AAAA,OAAOA,EAAE,MAAM,IAAI;AACnB,OAAOC,EAAE,MAAM,IAAI;AACnB,SAASC,KAAK,QAAQ,uBAAuB;AAE7C,SAASC,YAAY,QAAQ,WAAW;AAExC,OAAO,MAAMC,qBAAqB,GAAG,mBAAmB;AACxD,OAAO,MAAMC,8BAA8B,GAAG,yBAAyB;AAEvE,OAAO,SAASC,aAAaA,CAAA,EAAW;EACtC,OAAOC,OAAO,CAACC,GAAG,CAACJ,qBAAqB,CAAC,IAAK,GAAEH,EAAE,CAACQ,OAAO,CAAC,CAAE,SAAQ;AACvE;AAEA,SAASC,qBAAqBA,CAAA,EAAkB;EAC9C,MAAMC,QAAQ,GAAI,GAAEL,aAAa,CAAC,CAAE,IAAGD,8BAA+B,EAAC;EACvE,IAAIO,WAAW,GAAG,EAAE;EACpB,IAAI;IACF,MAAMC,IAAI,GAAGb,EAAE,CAACc,YAAY,CAACH,QAAQ,EAAE,MAAM,CAAC;IAC9CC,WAAW,GAAGG,IAAI,CAACC,KAAK,CAACH,IAAI,CAAC;EAChC,CAAC,CAAC,OAAOI,CAAC,EAAE;IACVd,YAAY,CAAE,iBAAgBQ,QAAS,KAAIM,CAAC,CAACC,OAAQ,GAAE,EAAE,OAAO,CAAC;EACnE;EACA,OAAON,WAAW;AACpB;AAEA,OAAO,SAASO,eAAeA,CAACC,QAAiB,EAAiB;EAChE,MAAMT,QAAQ,GAAI,GAAEL,aAAa,CAAC,CAAE,IAAGD,8BAA+B,EAAC;EACvE,IAAIe,QAAQ,EAAE;IACZjB,YAAY,CAAE,sCAAqC,EAAE,MAAM,CAAC;IAC5D,OAAOD,KAAK,CAACmB,KAAK,CAACC,GAAG,CAACC,qBAAqB,CAAC,CAAC;EAChD;EACA,IAAIX,WAAW,GAAGF,qBAAqB,CAAC,CAAC;EACzC,IAAIE,WAAW,CAACY,MAAM,IAAI,CAAC,EAAE;IAC3BrB,YAAY,CAAE,kDAAiD,EAAE,MAAM,CAAC;IACxES,WAAW,GAAGV,KAAK,CAACmB,KAAK,CAACC,GAAG,CAACC,qBAAqB,CAAC,CAAC;IACrD,IAAI;MACFvB,EAAE,CAACyB,aAAa,CAACd,QAAQ,EAAEI,IAAI,CAACW,SAAS,CAACd,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;MAChET,YAAY,CACT,qCAAoCQ,QAAS,yCAAwC,EACtF,MACF,CAAC;IACH,CAAC,CAAC,OAAOM,CAAC,EAAE;MACVd,YAAY,CACT,gEAA+D,EAChE,OACF,CAAC;IACH;EACF;EACA,OAAOS,WAAW;AACpB"}
1
+ {"version":3,"file":"Config.js","names":["frodo","state","fs","os","slugify","printMessage","getFilePath","readFiles","utils","exportFullConfiguration","config","getDefaultNoiseFilter","cloud","log","FRODO_CONFIG_PATH_KEY","FRODO_LOG_NOISEFILTER_FILENAME","getConfigPath","process","env","homedir","getCustomNoiseFilters","filename","noiseFilter","data","readFileSync","JSON","parse","e","message","getNoiseFilters","defaults","length","writeFileSync","stringify","getFullExportConfig","file","workingDirectory","getDirectory","useStringArrays","noDecode","getFullExportConfigFromDirectory","directory","fullExportConfig","meta","agents","application","authentication","emailTemplate","idp","managedApplication","policy","policyset","resourcetype","saml","hosted","remote","metadata","cot","script","secrets","service","theme","trees","variables","files","jsonFiles","filter","f","path","endsWith","idmConfigFiles","startsWith","samlFiles","otherFiles","scriptFiles","id","value","Object","entries","content","assign","_id","scriptExports","values","name","substring","lastIndexOf","indexOf","scriptLines","split","find","s","replace","remove","Error","isIdUsed","configuration","isEsv","isIdUsedRecurse","RegExp","replaceAll","regex","type","used","location","test"],"sources":["../../src/utils/Config.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { FullExportInterface } from '@rockcarver/frodo-lib/types/ops/ConfigOps';\nimport fs from 'fs';\nimport os from 'os';\nimport slugify from 'slugify';\n\nimport { printMessage } from './Console';\n\nconst { getFilePath, readFiles } = frodo.utils;\n\nconst { exportFullConfiguration } = frodo.config;\n\nconst { getDefaultNoiseFilter } = frodo.cloud.log;\n\nexport const FRODO_CONFIG_PATH_KEY = 'FRODO_CONFIG_PATH';\nexport const FRODO_LOG_NOISEFILTER_FILENAME = 'LoggingNoiseFilter.json';\n\nexport function getConfigPath(): string {\n return process.env[FRODO_CONFIG_PATH_KEY] || `${os.homedir()}/.frodo`;\n}\n\nfunction getCustomNoiseFilters(): Array<string> {\n const filename = `${getConfigPath()}/${FRODO_LOG_NOISEFILTER_FILENAME}`;\n let noiseFilter = [];\n try {\n const data = fs.readFileSync(filename, 'utf8');\n noiseFilter = JSON.parse(data);\n } catch (e) {\n printMessage(`Error reading ${filename} (${e.message})`, 'error');\n }\n return noiseFilter;\n}\n\nexport function getNoiseFilters(defaults: boolean): Array<string> {\n const filename = `${getConfigPath()}/${FRODO_LOG_NOISEFILTER_FILENAME}`;\n if (defaults) {\n printMessage(`Using default logging noise filters.`, 'info');\n return getDefaultNoiseFilter();\n }\n let noiseFilter = getCustomNoiseFilters();\n if (noiseFilter.length == 0) {\n printMessage(`No custom noise filters defined. Using defaults.`, 'info');\n noiseFilter = getDefaultNoiseFilter();\n try {\n fs.writeFileSync(filename, JSON.stringify(noiseFilter, null, 2));\n printMessage(\n `The default filters were saved in ${filename}. You can change the filters as needed.`,\n 'info'\n );\n } catch (e) {\n printMessage(\n `Error creating noise filter configuration with default values.`,\n 'error'\n );\n }\n }\n return noiseFilter;\n}\n\n/**\n * Gets the full export config from one of three locations:\n * 1. The file passed into the function if one is provided.\n * 2. The working directory if it exists (provided by the user)\n * 3. The cloud tenant if the exports are not locally provided\n * @param file The optional file path\n * @returns The full export config\n */\nexport async function getFullExportConfig(\n file: string | null = null\n): Promise<FullExportInterface> {\n // Get export from file if it exists\n if (file) {\n return JSON.parse(fs.readFileSync(getFilePath(file), 'utf8'));\n }\n // If working directory doesn't exist, export from the cloud\n const workingDirectory = state.getDirectory();\n if (!workingDirectory) {\n return await exportFullConfiguration({\n useStringArrays: true,\n noDecode: false,\n });\n }\n // Go through files in the working directory and reconstruct the full export\n return getFullExportConfigFromDirectory(workingDirectory);\n}\n\n/**\n * Reconstructs the full export config from files in the given directory\n * @param directory The directory\n * @return The full export config\n */\nexport async function getFullExportConfigFromDirectory(\n directory: string\n): Promise<FullExportInterface> {\n const fullExportConfig = {\n meta: {},\n agents: {},\n application: {},\n authentication: {},\n config: {},\n emailTemplate: {},\n idp: {},\n managedApplication: {},\n policy: {},\n policyset: {},\n resourcetype: {},\n saml: {\n hosted: {},\n remote: {},\n metadata: {},\n cot: {},\n },\n script: {},\n secrets: {},\n service: {},\n theme: {},\n trees: {},\n variables: {},\n } as FullExportInterface;\n const files = await readFiles(directory);\n const jsonFiles = files.filter((f) => f.path.endsWith('.json'));\n const idmConfigFiles = jsonFiles.filter((f) => f.path.startsWith('config/'));\n const samlFiles = jsonFiles.filter(\n (f) => f.path.startsWith('saml/') || f.path.startsWith('cot/')\n );\n const otherFiles = jsonFiles.filter(\n (f) =>\n !f.path.startsWith('config/') &&\n !f.path.startsWith('saml/') &&\n !f.path.startsWith('cot/')\n );\n const scriptFiles = files.filter(\n (f) => f.path.endsWith('.js') || f.path.endsWith('.groovy')\n );\n // Handle json files\n for (const f of otherFiles) {\n for (const [id, value] of Object.entries(JSON.parse(f.content))) {\n if (value == null || fullExportConfig[id] == null) {\n continue;\n }\n Object.assign(fullExportConfig[id], value);\n }\n }\n // Handle saml files\n for (const f of samlFiles) {\n let content = JSON.parse(f.content);\n content = content.saml;\n for (const [id, value] of Object.entries(content)) {\n Object.assign(fullExportConfig.saml[id], value);\n }\n }\n // Handle idm config files\n for (const f of idmConfigFiles) {\n const content = JSON.parse(f.content);\n fullExportConfig.config[content._id] = content;\n }\n // Handle extracted scripts, adding them to their corresponding script objects in the export\n if (scriptFiles.length > 0 && fullExportConfig.script != null) {\n const scriptExports = Object.values(fullExportConfig.script);\n for (const f of scriptFiles) {\n const name = f.path.substring(\n f.path.lastIndexOf('/') + 1,\n f.path.indexOf('.', f.path.lastIndexOf('/'))\n );\n const scriptLines = f.content.split('\\n');\n const script = scriptExports.find(\n (s) =>\n slugify(s.name.replace(/^http(s?):\\/\\//, ''), {\n remove: /[^\\w\\s$*_+~.()'\"!\\-@]+/g,\n }) === name\n );\n if (!script) {\n throw Error(\n `Can't find the script corresponding to the file '${f.path}' in the export files`\n );\n }\n script.script = scriptLines;\n }\n }\n return fullExportConfig;\n}\n\n/**\n * Determines if a string id is being used anywhere within the given configuration object\n * @param configuration The configuration object\n * @param id The id being search for\n * @param isEsv Whether the id corresponds to an ESV or not\n */\nexport function isIdUsed(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n configuration: any,\n id: string,\n isEsv: boolean\n): {\n used: boolean;\n location: string;\n} {\n return isIdUsedRecurse(\n configuration,\n isEsv\n ? // For ESV ids, they contain either letters, numbers, dashes, or underscores. The dashes get replaced with periods (escaped with a \\ for the regex)\n // since anywhere they are being used they will be used with periods, not dashes. Note that the (?:[^a-z0-9._]|$) expressions at the beginning and\n // end are meant to ensure that the id found is not a substring of some other id (i.e. the id found must either be at the beginning or end of the\n // string, or if in the middle of a string, is not preceded or followed by a character that would be part of another id).\n new RegExp(\n `(?:[^a-z0-9._]|^)${id.replaceAll('-', '\\\\.')}(?:[^a-z0-9._]|$)`\n )\n : // For normal ids, they contain only letters, numbers, or dashes.\n new RegExp(`(?:[^a-z0-9-]|^)${id}(?:[^a-z0-9-]|$)`)\n );\n}\n\n/**\n * Recursive helper for isIdUsed that finds any strings contained in the configuration that pass the regex\n * @param configuration The configuration (could be anything)\n * @param regex The regex test\n */\nfunction isIdUsedRecurse(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n configuration: any,\n regex: RegExp\n): {\n used: boolean;\n location: string;\n} {\n const type = typeof configuration;\n if (type === 'object' && configuration !== null) {\n for (const [id, value] of Object.entries(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n configuration as Record<string, any>\n )) {\n const isIdUsed = isIdUsedRecurse(value, regex);\n if (isIdUsed.used) {\n isIdUsed.location =\n id +\n (value.name ? `(name: '${value.name}')` : '') +\n (isIdUsed.location === '' ? '' : '.') +\n isIdUsed.location;\n return isIdUsed;\n }\n }\n }\n return {\n used: type === 'string' && regex.test(configuration),\n location: '',\n };\n}\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AAEpD,OAAOC,EAAE,MAAM,IAAI;AACnB,OAAOC,EAAE,MAAM,IAAI;AACnB,OAAOC,OAAO,MAAM,SAAS;AAE7B,SAASC,YAAY,QAAQ,WAAW;AAExC,MAAM;EAAEC,WAAW;EAAEC;AAAU,CAAC,GAAGP,KAAK,CAACQ,KAAK;AAE9C,MAAM;EAAEC;AAAwB,CAAC,GAAGT,KAAK,CAACU,MAAM;AAEhD,MAAM;EAAEC;AAAsB,CAAC,GAAGX,KAAK,CAACY,KAAK,CAACC,GAAG;AAEjD,OAAO,MAAMC,qBAAqB,GAAG,mBAAmB;AACxD,OAAO,MAAMC,8BAA8B,GAAG,yBAAyB;AAEvE,OAAO,SAASC,aAAaA,CAAA,EAAW;EACtC,OAAOC,OAAO,CAACC,GAAG,CAACJ,qBAAqB,CAAC,IAAK,GAAEX,EAAE,CAACgB,OAAO,CAAC,CAAE,SAAQ;AACvE;AAEA,SAASC,qBAAqBA,CAAA,EAAkB;EAC9C,MAAMC,QAAQ,GAAI,GAAEL,aAAa,CAAC,CAAE,IAAGD,8BAA+B,EAAC;EACvE,IAAIO,WAAW,GAAG,EAAE;EACpB,IAAI;IACF,MAAMC,IAAI,GAAGrB,EAAE,CAACsB,YAAY,CAACH,QAAQ,EAAE,MAAM,CAAC;IAC9CC,WAAW,GAAGG,IAAI,CAACC,KAAK,CAACH,IAAI,CAAC;EAChC,CAAC,CAAC,OAAOI,CAAC,EAAE;IACVtB,YAAY,CAAE,iBAAgBgB,QAAS,KAAIM,CAAC,CAACC,OAAQ,GAAE,EAAE,OAAO,CAAC;EACnE;EACA,OAAON,WAAW;AACpB;AAEA,OAAO,SAASO,eAAeA,CAACC,QAAiB,EAAiB;EAChE,MAAMT,QAAQ,GAAI,GAAEL,aAAa,CAAC,CAAE,IAAGD,8BAA+B,EAAC;EACvE,IAAIe,QAAQ,EAAE;IACZzB,YAAY,CAAE,sCAAqC,EAAE,MAAM,CAAC;IAC5D,OAAOM,qBAAqB,CAAC,CAAC;EAChC;EACA,IAAIW,WAAW,GAAGF,qBAAqB,CAAC,CAAC;EACzC,IAAIE,WAAW,CAACS,MAAM,IAAI,CAAC,EAAE;IAC3B1B,YAAY,CAAE,kDAAiD,EAAE,MAAM,CAAC;IACxEiB,WAAW,GAAGX,qBAAqB,CAAC,CAAC;IACrC,IAAI;MACFT,EAAE,CAAC8B,aAAa,CAACX,QAAQ,EAAEI,IAAI,CAACQ,SAAS,CAACX,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;MAChEjB,YAAY,CACT,qCAAoCgB,QAAS,yCAAwC,EACtF,MACF,CAAC;IACH,CAAC,CAAC,OAAOM,CAAC,EAAE;MACVtB,YAAY,CACT,gEAA+D,EAChE,OACF,CAAC;IACH;EACF;EACA,OAAOiB,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeY,mBAAmBA,CACvCC,IAAmB,GAAG,IAAI,EACI;EAC9B;EACA,IAAIA,IAAI,EAAE;IACR,OAAOV,IAAI,CAACC,KAAK,CAACxB,EAAE,CAACsB,YAAY,CAAClB,WAAW,CAAC6B,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;EAC/D;EACA;EACA,MAAMC,gBAAgB,GAAGnC,KAAK,CAACoC,YAAY,CAAC,CAAC;EAC7C,IAAI,CAACD,gBAAgB,EAAE;IACrB,OAAO,MAAM3B,uBAAuB,CAAC;MACnC6B,eAAe,EAAE,IAAI;MACrBC,QAAQ,EAAE;IACZ,CAAC,CAAC;EACJ;EACA;EACA,OAAOC,gCAAgC,CAACJ,gBAAgB,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeI,gCAAgCA,CACpDC,SAAiB,EACa;EAC9B,MAAMC,gBAAgB,GAAG;IACvBC,IAAI,EAAE,CAAC,CAAC;IACRC,MAAM,EAAE,CAAC,CAAC;IACVC,WAAW,EAAE,CAAC,CAAC;IACfC,cAAc,EAAE,CAAC,CAAC;IAClBpC,MAAM,EAAE,CAAC,CAAC;IACVqC,aAAa,EAAE,CAAC,CAAC;IACjBC,GAAG,EAAE,CAAC,CAAC;IACPC,kBAAkB,EAAE,CAAC,CAAC;IACtBC,MAAM,EAAE,CAAC,CAAC;IACVC,SAAS,EAAE,CAAC,CAAC;IACbC,YAAY,EAAE,CAAC,CAAC;IAChBC,IAAI,EAAE;MACJC,MAAM,EAAE,CAAC,CAAC;MACVC,MAAM,EAAE,CAAC,CAAC;MACVC,QAAQ,EAAE,CAAC,CAAC;MACZC,GAAG,EAAE,CAAC;IACR,CAAC;IACDC,MAAM,EAAE,CAAC,CAAC;IACVC,OAAO,EAAE,CAAC,CAAC;IACXC,OAAO,EAAE,CAAC,CAAC;IACXC,KAAK,EAAE,CAAC,CAAC;IACTC,KAAK,EAAE,CAAC,CAAC;IACTC,SAAS,EAAE,CAAC;EACd,CAAwB;EACxB,MAAMC,KAAK,GAAG,MAAMzD,SAAS,CAACkC,SAAS,CAAC;EACxC,MAAMwB,SAAS,GAAGD,KAAK,CAACE,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACC,IAAI,CAACC,QAAQ,CAAC,OAAO,CAAC,CAAC;EAC/D,MAAMC,cAAc,GAAGL,SAAS,CAACC,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACC,IAAI,CAACG,UAAU,CAAC,SAAS,CAAC,CAAC;EAC5E,MAAMC,SAAS,GAAGP,SAAS,CAACC,MAAM,CAC/BC,CAAC,IAAKA,CAAC,CAACC,IAAI,CAACG,UAAU,CAAC,OAAO,CAAC,IAAIJ,CAAC,CAACC,IAAI,CAACG,UAAU,CAAC,MAAM,CAC/D,CAAC;EACD,MAAME,UAAU,GAAGR,SAAS,CAACC,MAAM,CAChCC,CAAC,IACA,CAACA,CAAC,CAACC,IAAI,CAACG,UAAU,CAAC,SAAS,CAAC,IAC7B,CAACJ,CAAC,CAACC,IAAI,CAACG,UAAU,CAAC,OAAO,CAAC,IAC3B,CAACJ,CAAC,CAACC,IAAI,CAACG,UAAU,CAAC,MAAM,CAC7B,CAAC;EACD,MAAMG,WAAW,GAAGV,KAAK,CAACE,MAAM,CAC7BC,CAAC,IAAKA,CAAC,CAACC,IAAI,CAACC,QAAQ,CAAC,KAAK,CAAC,IAAIF,CAAC,CAACC,IAAI,CAACC,QAAQ,CAAC,SAAS,CAC5D,CAAC;EACD;EACA,KAAK,MAAMF,CAAC,IAAIM,UAAU,EAAE;IAC1B,KAAK,MAAM,CAACE,EAAE,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACrD,IAAI,CAACC,KAAK,CAACyC,CAAC,CAACY,OAAO,CAAC,CAAC,EAAE;MAC/D,IAAIH,KAAK,IAAI,IAAI,IAAIlC,gBAAgB,CAACiC,EAAE,CAAC,IAAI,IAAI,EAAE;QACjD;MACF;MACAE,MAAM,CAACG,MAAM,CAACtC,gBAAgB,CAACiC,EAAE,CAAC,EAAEC,KAAK,CAAC;IAC5C;EACF;EACA;EACA,KAAK,MAAMT,CAAC,IAAIK,SAAS,EAAE;IACzB,IAAIO,OAAO,GAAGtD,IAAI,CAACC,KAAK,CAACyC,CAAC,CAACY,OAAO,CAAC;IACnCA,OAAO,GAAGA,OAAO,CAAC1B,IAAI;IACtB,KAAK,MAAM,CAACsB,EAAE,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACC,OAAO,CAAC,EAAE;MACjDF,MAAM,CAACG,MAAM,CAACtC,gBAAgB,CAACW,IAAI,CAACsB,EAAE,CAAC,EAAEC,KAAK,CAAC;IACjD;EACF;EACA;EACA,KAAK,MAAMT,CAAC,IAAIG,cAAc,EAAE;IAC9B,MAAMS,OAAO,GAAGtD,IAAI,CAACC,KAAK,CAACyC,CAAC,CAACY,OAAO,CAAC;IACrCrC,gBAAgB,CAAChC,MAAM,CAACqE,OAAO,CAACE,GAAG,CAAC,GAAGF,OAAO;EAChD;EACA;EACA,IAAIL,WAAW,CAAC3C,MAAM,GAAG,CAAC,IAAIW,gBAAgB,CAACgB,MAAM,IAAI,IAAI,EAAE;IAC7D,MAAMwB,aAAa,GAAGL,MAAM,CAACM,MAAM,CAACzC,gBAAgB,CAACgB,MAAM,CAAC;IAC5D,KAAK,MAAMS,CAAC,IAAIO,WAAW,EAAE;MAC3B,MAAMU,IAAI,GAAGjB,CAAC,CAACC,IAAI,CAACiB,SAAS,CAC3BlB,CAAC,CAACC,IAAI,CAACkB,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAC3BnB,CAAC,CAACC,IAAI,CAACmB,OAAO,CAAC,GAAG,EAAEpB,CAAC,CAACC,IAAI,CAACkB,WAAW,CAAC,GAAG,CAAC,CAC7C,CAAC;MACD,MAAME,WAAW,GAAGrB,CAAC,CAACY,OAAO,CAACU,KAAK,CAAC,IAAI,CAAC;MACzC,MAAM/B,MAAM,GAAGwB,aAAa,CAACQ,IAAI,CAC9BC,CAAC,IACAvF,OAAO,CAACuF,CAAC,CAACP,IAAI,CAACQ,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE;QAC5CC,MAAM,EAAE;MACV,CAAC,CAAC,KAAKT,IACX,CAAC;MACD,IAAI,CAAC1B,MAAM,EAAE;QACX,MAAMoC,KAAK,CACR,oDAAmD3B,CAAC,CAACC,IAAK,uBAC7D,CAAC;MACH;MACAV,MAAM,CAACA,MAAM,GAAG8B,WAAW;IAC7B;EACF;EACA,OAAO9C,gBAAgB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASqD,QAAQA;AACtB;AACAC,aAAkB,EAClBrB,EAAU,EACVsB,KAAc,EAId;EACA,OAAOC,eAAe,CACpBF,aAAa,EACbC,KAAK;EACD;EACA;EACA;EACA;EACA,IAAIE,MAAM,CACP,oBAAmBxB,EAAE,CAACyB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAE,mBAChD,CAAC;EACD;EACA,IAAID,MAAM,CAAE,mBAAkBxB,EAAG,kBAAiB,CACxD,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASuB,eAAeA;AACtB;AACAF,aAAkB,EAClBK,KAAa,EAIb;EACA,MAAMC,IAAI,GAAG,OAAON,aAAa;EACjC,IAAIM,IAAI,KAAK,QAAQ,IAAIN,aAAa,KAAK,IAAI,EAAE;IAC/C,KAAK,MAAM,CAACrB,EAAE,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO;IACtC;IACAkB,aACF,CAAC,EAAE;MACD,MAAMD,QAAQ,GAAGG,eAAe,CAACtB,KAAK,EAAEyB,KAAK,CAAC;MAC9C,IAAIN,QAAQ,CAACQ,IAAI,EAAE;QACjBR,QAAQ,CAACS,QAAQ,GACf7B,EAAE,IACDC,KAAK,CAACQ,IAAI,GAAI,WAAUR,KAAK,CAACQ,IAAK,IAAG,GAAG,EAAE,CAAC,IAC5CW,QAAQ,CAACS,QAAQ,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,GACrCT,QAAQ,CAACS,QAAQ;QACnB,OAAOT,QAAQ;MACjB;IACF;EACF;EACA,OAAO;IACLQ,IAAI,EAAED,IAAI,KAAK,QAAQ,IAAID,KAAK,CAACI,IAAI,CAACT,aAAa,CAAC;IACpDQ,QAAQ,EAAE;EACZ,CAAC;AACH"}
@@ -1,12 +1,18 @@
1
1
  /* eslint-disable no-console */
2
+ import { frodo, state } from '@rockcarver/frodo-lib';
2
3
  import { MultiBar, Presets } from 'cli-progress';
3
- import { createSpinner } from 'nanospinner';
4
4
  import Table from 'cli-table3';
5
- import { frodo, state } from '@rockcarver/frodo-lib';
6
5
  import Color from 'colors';
6
+ import { createSpinner } from 'nanospinner';
7
+ import { v4 as uuidv4 } from 'uuid';
7
8
  Color.enable();
9
+ const {
10
+ appendTextToFile
11
+ } = frodo.utils;
12
+
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+ const progressBars = {};
8
15
  let multiBarContainer = null;
9
- let progressBar = null;
10
16
  let spinner = null;
11
17
 
12
18
  /**
@@ -22,10 +28,11 @@ function data(message, newline = true) {
22
28
  if (newline) {
23
29
  message += '\n';
24
30
  }
25
- frodo.utils.impex.appendTextToFile(message, state.getOutputFile());
31
+ appendTextToFile(message, state.getOutputFile());
26
32
  } else if (typeof message === 'object') {
27
33
  console.dir(message, {
28
- depth: 3
34
+ depth: 10,
35
+ maxArrayLength: null
29
36
  });
30
37
  } else if (newline) {
31
38
  console.log(message);
@@ -198,30 +205,37 @@ export function printMessage(message, type = 'text', newline = true) {
198
205
  * Example:
199
206
  * [========================================] 100% | 49/49 | Analyzing journey - transactional_auth
200
207
  *
201
- * @param {Number} total The total number of entries to track progress for
202
- * @param {String} message optional progress bar message
203
- * @param {Object} options progress bar configuration options
204
- *
208
+ * @param {number} total The total number of entries to track progress for
209
+ * @param {string} message optional progress bar message
210
+ * @param {object} options progress bar configuration options
211
+ * @returns {string} progress bar reference id. Save this id to manage (update, stop) the progress bar.
205
212
  */
206
- export function createProgressBar(total, message = null, options = {
213
+ function createProgressBar(total, message = null, options = {
214
+ clearOnComplete: false,
215
+ hideCursor: true,
207
216
  format: '[{bar}] {percentage}% | {value}/{total} | {data}',
208
217
  noTTYOutput: true
209
218
  }) {
219
+ debugMessage(`cli.Console.createProgressBar: start`);
210
220
  let opt = options;
211
221
  if (message == null) {
212
222
  opt = {
223
+ clearOnComplete: false,
224
+ hideCursor: true,
213
225
  format: '[{bar}] {percentage}% | {value}/{total}',
214
226
  noTTYOutput: true
215
227
  };
216
228
  }
217
- // progressBar = new SingleBar(opt, Presets.legacy); // create only when needed
218
- // progressBar.start(total, 0, {
219
- // data: message,
220
- // });
221
- multiBarContainer = new MultiBar(opt, Presets.legacy);
222
- progressBar = multiBarContainer.create(total, 0, {
229
+ if (!multiBarContainer) {
230
+ multiBarContainer = new MultiBar(opt, Presets.legacy);
231
+ debugMessage(`cli.Console.createProgressBar: initialized multiBarContainer`);
232
+ }
233
+ const id = uuidv4();
234
+ progressBars[id] = multiBarContainer.create(total, 0, {
223
235
  data: message
224
236
  });
237
+ debugMessage(`cli.Console.createProgressBar: end [${id}, ${Object.keys(progressBars).length} bars]`);
238
+ return id;
225
239
  }
226
240
 
227
241
  /**
@@ -229,23 +243,49 @@ export function createProgressBar(total, message = null, options = {
229
243
  * @param {string} message optional message to update the progress bar
230
244
  *
231
245
  */
232
- export function updateProgressBar(message = null) {
233
- if (message) progressBar.increment({
234
- data: message
235
- });else progressBar.increment();
246
+ function updateProgressBar(id, message = null) {
247
+ if (!progressBars[id]) {
248
+ warn(`progressBar is undefined. Make sure to call 'createProgressBar' before calling 'updateProgressBar'.`);
249
+ } else if (message) {
250
+ progressBars[id].increment({
251
+ data: message
252
+ });
253
+ } else {
254
+ progressBars[id].increment();
255
+ }
236
256
  }
237
257
 
238
258
  /**
239
259
  * Stop and hide the progress bar
240
260
  * @param {*} message optional message to update the progress bar
241
261
  */
242
- export function stopProgressBar(message = null) {
243
- if (message) progressBar.update({
244
- data: message
245
- });
246
- // progressBar.stop();
247
- multiBarContainer.stop();
248
- multiBarContainer = null;
262
+ function stopProgressBar(id, message = null) {
263
+ debugMessage(`cli.Console.stopProgressBar: start [${id}]`);
264
+ if (!progressBars[id]) {
265
+ warn(`progressBar is undefined. Make sure to call 'createProgressBar' before calling 'stopProgressBar'.`);
266
+ } else if (message) {
267
+ progressBars[id].update({
268
+ data: message
269
+ });
270
+ }
271
+ progressBars[id].stop();
272
+ // progressBars[id].render();
273
+ debugMessage(`cli.Console.stopProgressBar: end [${Object.keys(progressBars).length} bars]`);
274
+ }
275
+
276
+ /**
277
+ * Clean-up progress bars
278
+ */
279
+ function cleanupProgressBars() {
280
+ debugMessage(`cli.Console.cleanupProgressBars: start`);
281
+ try {
282
+ debugMessage(`cli.Console.cleanupProgressBars: stopping ${Object.keys(progressBars).length} bars`);
283
+ multiBarContainer.stop();
284
+ multiBarContainer = null;
285
+ } catch (error) {
286
+ // ignore
287
+ }
288
+ debugMessage(`cli.Console.cleanupProgressBars: end`);
249
289
  }
250
290
 
251
291
  /**
@@ -328,20 +368,20 @@ export function spinSpinner(message = null) {
328
368
  }
329
369
  export function createProgressIndicator(type = 'determinate', total = 0, message = null) {
330
370
  if (type === 'determinate') {
331
- createProgressBar(total, message);
371
+ return createProgressBar(total, message);
332
372
  } else {
333
373
  showSpinner(message);
334
374
  }
335
375
  }
336
- export function updateProgressIndicator(message) {
337
- if (!progressBar) {
376
+ export function updateProgressIndicator(id, message) {
377
+ if (!progressBars[id]) {
338
378
  spinSpinner(message);
339
379
  } else {
340
- updateProgressBar(message);
380
+ updateProgressBar(id, message);
341
381
  }
342
382
  }
343
- export function stopProgressIndicator(message, status = 'none') {
344
- if (!progressBar) {
383
+ export function stopProgressIndicator(id, message = null, status = 'none') {
384
+ if (!progressBars[id]) {
345
385
  switch (status) {
346
386
  case 'none':
347
387
  stopSpinner(message);
@@ -360,9 +400,12 @@ export function stopProgressIndicator(message, status = 'none') {
360
400
  break;
361
401
  }
362
402
  } else {
363
- stopProgressBar(message);
403
+ stopProgressBar(id, message);
364
404
  }
365
405
  }
406
+ export function cleanupProgressIndicators() {
407
+ cleanupProgressBars();
408
+ }
366
409
 
367
410
  /**
368
411
  * Create an empty table
@@ -531,4 +574,4 @@ export function createObjectTable(object, keyMap = {}) {
531
574
  addRows(object, depth, level + 1, table, keyMap);
532
575
  return table;
533
576
  }
534
- //# sourceMappingURL=Console.js.map
577
+ //# sourceMappingURL=Console.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Console.js","names":["MultiBar","Presets","createSpinner","Table","frodo","state","Color","enable","multiBarContainer","progressBar","spinner","data","message","newline","getOutputFile","JSON","stringify","utils","impex","appendTextToFile","console","dir","depth","log","process","stdout","write","text","error","stderr","info","warn","debug","curlirize","verboseMessage","getVerbose","debugMessage","getDebug","curlirizeMessage","getCurlirize","printMessage","type","createProgressBar","total","options","format","noTTYOutput","opt","legacy","create","updateProgressBar","increment","stopProgressBar","update","stop","showSpinner","start","stopSpinner","succeedSpinner","success","warnSpinner","failSpinner","spinSpinner","spin","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","status","createTable","head","table","chars","top","bottom","left","mid","right","style","createKeyValueTable","wordWrap","getObjectDepth","object","Object","Math","max","values","map","hasValues","has","keys","key","addRows","level","keyMap","space","push","brightCyan","hAlign","content","gray","indention","Array","fill","join","concat","createObjectTable"],"sources":["utils/Console.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { MultiBar, Presets } from 'cli-progress';\nimport { createSpinner } from 'nanospinner';\nimport Table from 'cli-table3';\nimport { frodo, state } from '@rockcarver/frodo-lib';\nimport Color from 'colors';\n\nColor.enable();\n\nlet multiBarContainer = null;\nlet progressBar = null;\nlet spinner = null;\n\n/**\n * Output a message in default color to stdout or append to `state.getOutputFile()`\n * @param {string | object} message the message\n */\nfunction data(message: string | object, newline = true) {\n if (!message) return;\n if (state.getOutputFile()) {\n if (typeof message === 'object') {\n message = JSON.stringify(message, null, 2);\n }\n if (newline) {\n message += '\\n';\n }\n frodo.utils.impex.appendTextToFile(message, state.getOutputFile());\n } else if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.log(message);\n } else {\n process.stdout.write(message);\n }\n}\n\n/**\n * Output a default color message to stderr\n * @param {Object} message the message\n */\nfunction text(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message);\n } else {\n process.stderr.write(message);\n }\n}\n\n/**\n * Output a message in bright cyan to stderr\n * @param {Object} message the message\n */\nfunction info(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightCyan']);\n } else {\n process.stderr.write(message['brightCyan']);\n }\n}\n\n/**\n * Output a message in yellow to stderr\n * @param {Object} message the message\n */\nfunction warn(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['yellow']);\n } else {\n process.stderr.write(message['yellow']);\n }\n}\n\n/**\n * Output a message in bright red to stderr\n * @param {Object} message the message\n */\nfunction error(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightRed']);\n } else {\n process.stderr.write(message['brightRed']);\n }\n}\n\n/**\n * Output a debug message\n * @param {string | object} message the message\n */\nfunction debug(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 6 });\n } else if (newline) {\n console.error(message['brightMagenta']);\n } else {\n process.stderr.write(message['brightMagenta']);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {string} message the message\n */\nfunction curlirize(message: string) {\n if (!message) return;\n console.error(message['brightBlue']);\n}\n\n/**\n * Output a message in default color to stderr\n * @param {Object} message the message\n */\nexport function verboseMessage(message) {\n if (!message) return;\n if (state.getVerbose()) {\n text(message);\n }\n}\n\n/**\n * Output a debug message\n * @param {Object} message the message\n */\nexport function debugMessage(message) {\n if (!message) return;\n if (state.getDebug()) {\n debug(message);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {Object} message the message\n */\nexport function curlirizeMessage(message) {\n if (!message) return;\n if (state.getCurlirize()) {\n curlirize(message);\n }\n}\n\n/**\n * Prints a string message to console\n *\n * @param {string} message The string message to print\n * @param {string} [type=text] \"text\", \"info\", \"warn\", \"error\" or \"data\". All but\n * type=\"data\" will be written to stderr.\n * @param {boolean} [newline=true] Whether to add a newline at the end of message\n *\n */\nexport function printMessage(message, type = 'text', newline = true) {\n switch (type) {\n case 'data':\n data(message, newline);\n break;\n case 'text':\n text(message, newline);\n break;\n case 'info':\n info(message, newline);\n break;\n case 'warn':\n warn(message, newline);\n break;\n case 'error':\n error(message, newline);\n break;\n default:\n text(message, newline);\n }\n}\n\n/**\n * Creates a progress bar on stderr\n *\n * Example:\n * [========================================] 100% | 49/49 | Analyzing journey - transactional_auth\n *\n * @param {Number} total The total number of entries to track progress for\n * @param {String} message optional progress bar message\n * @param {Object} options progress bar configuration options\n *\n */\nexport function createProgressBar(\n total,\n message = null,\n options = {\n format: '[{bar}] {percentage}% | {value}/{total} | {data}',\n noTTYOutput: true,\n }\n) {\n let opt = options;\n if (message == null) {\n opt = {\n format: '[{bar}] {percentage}% | {value}/{total}',\n noTTYOutput: true,\n };\n }\n // progressBar = new SingleBar(opt, Presets.legacy); // create only when needed\n // progressBar.start(total, 0, {\n // data: message,\n // });\n multiBarContainer = new MultiBar(opt, Presets.legacy);\n progressBar = multiBarContainer.create(total, 0, {\n data: message,\n });\n}\n\n/**\n * Updates the progress bar by 1\n * @param {string} message optional message to update the progress bar\n *\n */\nexport function updateProgressBar(message = null) {\n if (message)\n progressBar.increment({\n data: message,\n });\n else progressBar.increment();\n}\n\n/**\n * Stop and hide the progress bar\n * @param {*} message optional message to update the progress bar\n */\nexport function stopProgressBar(message = null) {\n if (message)\n progressBar.update({\n data: message,\n });\n // progressBar.stop();\n multiBarContainer.stop();\n multiBarContainer = null;\n}\n\n/**\n * Create the spinner\n * @param {String} message optional spinner message\n */\nexport function showSpinner(message) {\n spinner = createSpinner(message).start();\n}\n\n/**\n * Stop the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function stopSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.stop(options);\n }\n}\n\n/**\n * Succeed the spinner. Stop and render success checkmark with optional message.\n * @param {String} message optional message to update the spinner\n */\nexport function succeedSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.success(options);\n }\n}\n\n/**\n * Warn the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function warnSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.warn(options);\n }\n}\n\n/**\n * Fail the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function failSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.error(options);\n }\n}\n\n/**\n * Spin the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function spinSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.update(options);\n spinner.spin();\n }\n}\n\nexport function createProgressIndicator(\n type = 'determinate',\n total = 0,\n message = null\n) {\n if (type === 'determinate') {\n createProgressBar(total, message);\n } else {\n showSpinner(message);\n }\n}\n\nexport function updateProgressIndicator(message) {\n if (!progressBar) {\n spinSpinner(message);\n } else {\n updateProgressBar(message);\n }\n}\n\nexport function stopProgressIndicator(message, status = 'none') {\n if (!progressBar) {\n switch (status) {\n case 'none':\n stopSpinner(message);\n break;\n case 'success':\n succeedSpinner(message);\n break;\n case 'warn':\n warnSpinner(message);\n break;\n case 'fail':\n failSpinner(message);\n break;\n default:\n stopSpinner(message);\n break;\n }\n } else {\n stopProgressBar(message);\n }\n}\n\n/**\n * Create an empty table\n * @param {string[]} head header row as an array of strings\n * @returns {any} an empty table\n */\nexport function createTable(head) {\n const table = new Table({\n head,\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n return table;\n}\n\n/**\n * Create a new key/value table\n * @returns {any} an empty key/value table\n */\nexport function createKeyValueTable() {\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0 },\n wordWrap: true,\n });\n return table;\n}\n\n/**\n * Helper function to determine the total depth of an object\n * @param {Object} object input object\n * @returns {Number} total depth of the input object\n */\nfunction getObjectDepth(object) {\n return Object(object) === object\n ? 1 + Math.max(-1, ...Object.values(object).map(getObjectDepth))\n : 0;\n}\n\n/**\n * Helper function to determine if an object has values\n * @param {Object} object input object\n * @returns {boolean} true of the object or any of its sub-objects contain values, false otherwise\n */\nfunction hasValues(object) {\n let has = false;\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n return true;\n }\n has = has || hasValues(object[key]);\n }\n return has;\n}\n\n/**\n * Helper function (recursive) to add rows to an object table\n * @param {object} object object to render\n * @param {number} depth total depth of initial object\n * @param {number} level current level\n * @param {any} table the object table to add the rows to\n * @param {Object} keyMap optional JSON map to map raw config names to human readable names {'raw': 'readable'}\n * @returns the updated object table\n */\nfunction addRows(object, depth, level, table, keyMap) {\n const space = ' ';\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n if (level === 1) {\n table.push([\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan'],\n object[key],\n ]);\n } else {\n table.push([\n {\n hAlign: 'right',\n content: keyMap[key] ? keyMap[key].gray : key.gray,\n },\n object[key],\n ]);\n }\n }\n }\n for (const key of keys) {\n if (Object(object[key]) === object[key]) {\n // only print header if there are any values below\n if (hasValues(object[key])) {\n let indention = new Array(level).fill(space).join('');\n if (level < 3) indention = `\\n${indention}`;\n table.push([\n indention.concat(\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan']\n ),\n '',\n ]);\n }\n // eslint-disable-next-line no-param-reassign\n table = addRows(object[key], depth, level + 1, table, keyMap);\n }\n }\n return table;\n}\n\n/**\n * Create and populate an object table from any JSON object. Use for describe commands.\n * @param {Object} object JSON object to create\n * @param {Object} keyMap optional JSON map to map raw config names to human readable names {'raw': 'readable'}\n * @returns {any} a table that can be printed to the console\n */\nexport function createObjectTable(object, keyMap = {}) {\n // eslint-disable-next-line no-param-reassign\n const depth = getObjectDepth(object);\n // eslint-disable-next-line no-param-reassign\n const level = 0;\n // eslint-disable-next-line no-param-reassign\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n addRows(object, depth, level + 1, table, keyMap);\n return table;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Console.js","names":["frodo","state","MultiBar","Presets","Table","Color","createSpinner","v4","uuidv4","enable","appendTextToFile","utils","progressBars","multiBarContainer","spinner","data","message","newline","getOutputFile","JSON","stringify","console","dir","depth","maxArrayLength","log","process","stdout","write","text","error","stderr","info","warn","debug","curlirize","verboseMessage","getVerbose","debugMessage","getDebug","curlirizeMessage","getCurlirize","printMessage","type","createProgressBar","total","options","clearOnComplete","hideCursor","format","noTTYOutput","opt","legacy","id","create","Object","keys","length","updateProgressBar","increment","stopProgressBar","update","stop","cleanupProgressBars","showSpinner","start","stopSpinner","succeedSpinner","success","warnSpinner","failSpinner","spinSpinner","spin","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","status","cleanupProgressIndicators","createTable","head","table","chars","top","bottom","left","mid","right","style","createKeyValueTable","wordWrap","getObjectDepth","object","Math","max","values","map","hasValues","has","key","addRows","level","keyMap","space","push","brightCyan","hAlign","content","gray","indention","Array","fill","join","concat","createObjectTable"],"sources":["../../src/utils/Console.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n ProgressIndicatorStatusType,\n ProgressIndicatorType,\n} from '@rockcarver/frodo-lib/types/utils/Console';\nimport { MultiBar, Presets } from 'cli-progress';\nimport Table from 'cli-table3';\nimport Color from 'colors';\nimport { createSpinner } from 'nanospinner';\nimport { v4 as uuidv4 } from 'uuid';\n\nColor.enable();\n\nconst { appendTextToFile } = frodo.utils;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst progressBars: { [k: string]: any } = {};\nlet multiBarContainer = null;\nlet spinner = null;\n\n/**\n * Output a message in default color to stdout or append to `state.getOutputFile()`\n * @param {string | object} message the message\n */\nfunction data(message: string | object, newline = true) {\n if (!message) return;\n if (state.getOutputFile()) {\n if (typeof message === 'object') {\n message = JSON.stringify(message, null, 2);\n }\n if (newline) {\n message += '\\n';\n }\n appendTextToFile(message, state.getOutputFile());\n } else if (typeof message === 'object') {\n console.dir(message, { depth: 10, maxArrayLength: null });\n } else if (newline) {\n console.log(message);\n } else {\n process.stdout.write(message);\n }\n}\n\n/**\n * Output a default color message to stderr\n * @param {Object} message the message\n */\nfunction text(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message);\n } else {\n process.stderr.write(message);\n }\n}\n\n/**\n * Output a message in bright cyan to stderr\n * @param {Object} message the message\n */\nfunction info(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightCyan']);\n } else {\n process.stderr.write(message['brightCyan']);\n }\n}\n\n/**\n * Output a message in yellow to stderr\n * @param {Object} message the message\n */\nfunction warn(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['yellow']);\n } else {\n process.stderr.write(message['yellow']);\n }\n}\n\n/**\n * Output a message in bright red to stderr\n * @param {Object} message the message\n */\nfunction error(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightRed']);\n } else {\n process.stderr.write(message['brightRed']);\n }\n}\n\n/**\n * Output a debug message\n * @param {string | object} message the message\n */\nfunction debug(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 6 });\n } else if (newline) {\n console.error(message['brightMagenta']);\n } else {\n process.stderr.write(message['brightMagenta']);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {string} message the message\n */\nfunction curlirize(message: string) {\n if (!message) return;\n console.error(message['brightBlue']);\n}\n\n/**\n * Output a message in default color to stderr\n * @param {Object} message the message\n */\nexport function verboseMessage(message) {\n if (!message) return;\n if (state.getVerbose()) {\n text(message);\n }\n}\n\n/**\n * Output a debug message\n * @param {Object} message the message\n */\nexport function debugMessage(message) {\n if (!message) return;\n if (state.getDebug()) {\n debug(message);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {Object} message the message\n */\nexport function curlirizeMessage(message) {\n if (!message) return;\n if (state.getCurlirize()) {\n curlirize(message);\n }\n}\n\n/**\n * Prints a string message to console\n *\n * @param {string} message The string message to print\n * @param {string} [type=text] \"text\", \"info\", \"warn\", \"error\" or \"data\". All but\n * type=\"data\" will be written to stderr.\n * @param {boolean} [newline=true] Whether to add a newline at the end of message\n *\n */\nexport function printMessage(message, type = 'text', newline = true) {\n switch (type) {\n case 'data':\n data(message, newline);\n break;\n case 'text':\n text(message, newline);\n break;\n case 'info':\n info(message, newline);\n break;\n case 'warn':\n warn(message, newline);\n break;\n case 'error':\n error(message, newline);\n break;\n default:\n text(message, newline);\n }\n}\n\n/**\n * Creates a progress bar on stderr\n *\n * Example:\n * [========================================] 100% | 49/49 | Analyzing journey - transactional_auth\n *\n * @param {number} total The total number of entries to track progress for\n * @param {string} message optional progress bar message\n * @param {object} options progress bar configuration options\n * @returns {string} progress bar reference id. Save this id to manage (update, stop) the progress bar.\n */\nfunction createProgressBar(\n total: number,\n message: string = null,\n options: object = {\n clearOnComplete: false,\n hideCursor: true,\n format: '[{bar}] {percentage}% | {value}/{total} | {data}',\n noTTYOutput: true,\n }\n): string {\n debugMessage(`cli.Console.createProgressBar: start`);\n let opt = options;\n if (message == null) {\n opt = {\n clearOnComplete: false,\n hideCursor: true,\n format: '[{bar}] {percentage}% | {value}/{total}',\n noTTYOutput: true,\n };\n }\n if (!multiBarContainer) {\n multiBarContainer = new MultiBar(opt, Presets.legacy);\n debugMessage(\n `cli.Console.createProgressBar: initialized multiBarContainer`\n );\n }\n const id = uuidv4();\n progressBars[id] = multiBarContainer.create(total, 0, {\n data: message,\n });\n debugMessage(\n `cli.Console.createProgressBar: end [${id}, ${\n Object.keys(progressBars).length\n } bars]`\n );\n return id;\n}\n\n/**\n * Updates the progress bar by 1\n * @param {string} message optional message to update the progress bar\n *\n */\nfunction updateProgressBar(id: string, message: string = null) {\n if (!progressBars[id]) {\n warn(\n `progressBar is undefined. Make sure to call 'createProgressBar' before calling 'updateProgressBar'.`\n );\n } else if (message) {\n progressBars[id].increment({\n data: message,\n });\n } else {\n progressBars[id].increment();\n }\n}\n\n/**\n * Stop and hide the progress bar\n * @param {*} message optional message to update the progress bar\n */\nfunction stopProgressBar(id: string, message: string = null) {\n debugMessage(`cli.Console.stopProgressBar: start [${id}]`);\n if (!progressBars[id]) {\n warn(\n `progressBar is undefined. Make sure to call 'createProgressBar' before calling 'stopProgressBar'.`\n );\n } else if (message) {\n progressBars[id].update({\n data: message,\n });\n }\n progressBars[id].stop();\n // progressBars[id].render();\n debugMessage(\n `cli.Console.stopProgressBar: end [${\n Object.keys(progressBars).length\n } bars]`\n );\n}\n\n/**\n * Clean-up progress bars\n */\nfunction cleanupProgressBars() {\n debugMessage(`cli.Console.cleanupProgressBars: start`);\n try {\n debugMessage(\n `cli.Console.cleanupProgressBars: stopping ${\n Object.keys(progressBars).length\n } bars`\n );\n multiBarContainer.stop();\n multiBarContainer = null;\n } catch (error) {\n // ignore\n }\n debugMessage(`cli.Console.cleanupProgressBars: end`);\n}\n\n/**\n * Create the spinner\n * @param {String} message optional spinner message\n */\nexport function showSpinner(message) {\n spinner = createSpinner(message).start();\n}\n\n/**\n * Stop the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function stopSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.stop(options);\n }\n}\n\n/**\n * Succeed the spinner. Stop and render success checkmark with optional message.\n * @param {String} message optional message to update the spinner\n */\nexport function succeedSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.success(options);\n }\n}\n\n/**\n * Warn the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function warnSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.warn(options);\n }\n}\n\n/**\n * Fail the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function failSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.error(options);\n }\n}\n\n/**\n * Spin the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function spinSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.update(options);\n spinner.spin();\n }\n}\n\nexport function createProgressIndicator(\n type: ProgressIndicatorType = 'determinate',\n total = 0,\n message = null\n): string {\n if (type === 'determinate') {\n return createProgressBar(total, message);\n } else {\n showSpinner(message);\n }\n}\n\nexport function updateProgressIndicator(id: string, message: string) {\n if (!progressBars[id]) {\n spinSpinner(message);\n } else {\n updateProgressBar(id, message);\n }\n}\n\nexport function stopProgressIndicator(\n id: string,\n message: string = null,\n status: ProgressIndicatorStatusType = 'none'\n) {\n if (!progressBars[id]) {\n switch (status) {\n case 'none':\n stopSpinner(message);\n break;\n case 'success':\n succeedSpinner(message);\n break;\n case 'warn':\n warnSpinner(message);\n break;\n case 'fail':\n failSpinner(message);\n break;\n default:\n stopSpinner(message);\n break;\n }\n } else {\n stopProgressBar(id, message);\n }\n}\n\nexport function cleanupProgressIndicators() {\n cleanupProgressBars();\n}\n\n/**\n * Create an empty table\n * @param {string[]} head header row as an array of strings\n * @returns {any} an empty table\n */\nexport function createTable(head) {\n const table = new Table({\n head,\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n return table;\n}\n\n/**\n * Create a new key/value table\n * @returns {any} an empty key/value table\n */\nexport function createKeyValueTable() {\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0 },\n wordWrap: true,\n });\n return table;\n}\n\n/**\n * Helper function to determine the total depth of an object\n * @param {Object} object input object\n * @returns {Number} total depth of the input object\n */\nfunction getObjectDepth(object) {\n return Object(object) === object\n ? 1 + Math.max(-1, ...Object.values(object).map(getObjectDepth))\n : 0;\n}\n\n/**\n * Helper function to determine if an object has values\n * @param {Object} object input object\n * @returns {boolean} true of the object or any of its sub-objects contain values, false otherwise\n */\nfunction hasValues(object) {\n let has = false;\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n return true;\n }\n has = has || hasValues(object[key]);\n }\n return has;\n}\n\n/**\n * Helper function (recursive) to add rows to an object table\n * @param {object} object object to render\n * @param {number} depth total depth of initial object\n * @param {number} level current level\n * @param {any} table the object table to add the rows to\n * @param {Object} keyMap optional JSON map to map raw config names to human readable names {'raw': 'readable'}\n * @returns the updated object table\n */\nfunction addRows(object, depth, level, table, keyMap) {\n const space = ' ';\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n if (level === 1) {\n table.push([\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan'],\n object[key],\n ]);\n } else {\n table.push([\n {\n hAlign: 'right',\n content: keyMap[key] ? keyMap[key].gray : key.gray,\n },\n object[key],\n ]);\n }\n }\n }\n for (const key of keys) {\n if (Object(object[key]) === object[key]) {\n // only print header if there are any values below\n if (hasValues(object[key])) {\n let indention = new Array(level).fill(space).join('');\n if (level < 3) indention = `\\n${indention}`;\n table.push([\n indention.concat(\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan']\n ),\n '',\n ]);\n }\n // eslint-disable-next-line no-param-reassign\n table = addRows(object[key], depth, level + 1, table, keyMap);\n }\n }\n return table;\n}\n\n/**\n * Create and populate an object table from any JSON object. Use for describe commands.\n * @param {Object} object JSON object to create\n * @param {Object} keyMap optional JSON map to map raw config names to human readable names {'raw': 'readable'}\n * @returns {any} a table that can be printed to the console\n */\nexport function createObjectTable(object, keyMap = {}) {\n // eslint-disable-next-line no-param-reassign\n const depth = getObjectDepth(object);\n // eslint-disable-next-line no-param-reassign\n const level = 0;\n // eslint-disable-next-line no-param-reassign\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n addRows(object, depth, level + 1, table, keyMap);\n return table;\n}\n"],"mappings":"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"}