@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.
- package/CHANGELOG.md +312 -5
- package/esm/app.js +22 -5
- package/esm/app.js.map +1 -1
- package/esm/cli/FrodoCommand.js +33 -7
- package/esm/cli/FrodoCommand.js.map +1 -1
- package/esm/cli/_template/something-delete.js +7 -5
- package/esm/cli/_template/something-delete.js.map +1 -1
- package/esm/cli/_template/something-describe.js +7 -5
- package/esm/cli/_template/something-describe.js.map +1 -1
- package/esm/cli/_template/something-else-delete.js +7 -5
- package/esm/cli/_template/something-else-delete.js.map +1 -1
- package/esm/cli/_template/something-else-describe.js +7 -5
- package/esm/cli/_template/something-else-describe.js.map +1 -1
- package/esm/cli/_template/something-else-export.js +8 -6
- package/esm/cli/_template/something-else-export.js.map +1 -1
- package/esm/cli/_template/something-else-import.js +7 -5
- package/esm/cli/_template/something-else-import.js.map +1 -1
- package/esm/cli/_template/something-else-list.js +7 -5
- package/esm/cli/_template/something-else-list.js.map +1 -1
- package/esm/cli/_template/something-else.js +1 -1
- package/esm/cli/_template/something-else.js.map +1 -1
- package/esm/cli/_template/something-export.js +8 -6
- package/esm/cli/_template/something-export.js.map +1 -1
- package/esm/cli/_template/something-import.js +7 -5
- package/esm/cli/_template/something-import.js.map +1 -1
- package/esm/cli/_template/something-list.js +7 -5
- package/esm/cli/_template/something-list.js.map +1 -1
- package/esm/cli/_template/something-other-delete.js +7 -5
- package/esm/cli/_template/something-other-delete.js.map +1 -1
- package/esm/cli/_template/something-other-describe.js +7 -5
- package/esm/cli/_template/something-other-describe.js.map +1 -1
- package/esm/cli/_template/something-other-export.js +8 -6
- package/esm/cli/_template/something-other-export.js.map +1 -1
- package/esm/cli/_template/something-other-import.js +7 -5
- package/esm/cli/_template/something-other-import.js.map +1 -1
- package/esm/cli/_template/something-other-list.js +7 -5
- package/esm/cli/_template/something-other-list.js.map +1 -1
- package/esm/cli/_template/something-other.js +1 -1
- package/esm/cli/_template/something-other.js.map +1 -1
- package/esm/cli/_template/something.js +2 -2
- package/esm/cli/_template/something.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +10 -5
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +14 -8
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js +41 -0
- package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js.map +1 -0
- package/esm/cli/admin/admin-federation-export.js +44 -0
- package/esm/cli/admin/admin-federation-export.js.map +1 -0
- package/esm/cli/admin/admin-federation-import.js +48 -0
- package/esm/cli/admin/admin-federation-import.js.map +1 -0
- package/esm/cli/admin/admin-federation-list.js +28 -0
- package/esm/cli/admin/admin-federation-list.js.map +1 -0
- package/esm/cli/admin/admin-federation.js +13 -0
- package/esm/cli/admin/admin-federation.js.map +1 -0
- package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.js +43 -0
- package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.js.map +1 -0
- package/esm/cli/admin/admin-get-access-token.js +12 -7
- package/esm/cli/admin/admin-get-access-token.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +13 -8
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js +11 -6
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +11 -6
- package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +11 -6
- package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
- package/esm/cli/admin/admin-list-static-user-mappings.js +12 -7
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +12 -6
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +11 -6
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +12 -7
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-show-generic-extension-attributes.js +11 -6
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin-train-auto-access-model.js +32 -0
- package/esm/cli/admin/admin-train-auto-access-model.js.map +1 -0
- package/esm/cli/admin/admin.js +8 -2
- package/esm/cli/admin/admin.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +13 -7
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-describe.js +7 -5
- package/esm/cli/agent/agent-describe.js.map +1 -1
- package/esm/cli/agent/agent-export.js +12 -10
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +13 -7
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-describe.js +7 -5
- package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +12 -10
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +8 -6
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +7 -5
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-gateway.js +1 -1
- package/esm/cli/agent/agent-gateway.js.map +1 -1
- package/esm/cli/agent/agent-import.js +8 -6
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +13 -7
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-describe.js +7 -5
- package/esm/cli/agent/agent-java-describe.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +12 -10
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +8 -6
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +7 -5
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-java.js +1 -1
- package/esm/cli/agent/agent-java.js.map +1 -1
- package/esm/cli/agent/agent-list.js +7 -5
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +13 -7
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-describe.js +7 -5
- package/esm/cli/agent/agent-web-describe.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +12 -10
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +8 -6
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +7 -5
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/agent/agent-web.js +3 -3
- package/esm/cli/agent/agent-web.js.map +1 -1
- package/esm/cli/agent/agent.js +2 -2
- package/esm/cli/agent/agent.js.map +1 -1
- package/esm/cli/app/app-delete.js +27 -9
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-describe.js +9 -6
- package/esm/cli/app/app-describe.js.map +1 -1
- package/esm/cli/app/app-export.js +17 -14
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +21 -18
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +12 -9
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/app/app.js +8 -12
- package/esm/cli/app/app.js.map +1 -1
- package/esm/cli/authn/authn-describe.js +29 -0
- package/esm/cli/authn/authn-describe.js.map +1 -0
- package/esm/cli/authn/authn-export.js +25 -0
- package/esm/cli/authn/authn-export.js.map +1 -0
- package/esm/cli/authn/authn-import.js +25 -0
- package/esm/cli/authn/authn-import.js.map +1 -0
- package/esm/cli/authn/authn.js +12 -0
- package/esm/cli/authn/authn.js.map +1 -0
- package/esm/cli/authz/authz-policy-delete.js +11 -9
- package/esm/cli/authz/authz-policy-delete.js.map +1 -1
- package/esm/cli/authz/authz-policy-describe.js +8 -6
- package/esm/cli/authz/authz-policy-describe.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +18 -16
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-import.js +11 -9
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-policy-list.js +11 -9
- package/esm/cli/authz/authz-policy-list.js.map +1 -1
- package/esm/cli/authz/authz-policy.js +1 -1
- package/esm/cli/authz/authz-policy.js.map +1 -1
- package/esm/cli/authz/authz-set-delete.js +11 -9
- package/esm/cli/authz/authz-set-delete.js.map +1 -1
- package/esm/cli/authz/authz-set-describe.js +8 -6
- package/esm/cli/authz/authz-set-describe.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +14 -12
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +11 -9
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-set-list.js +8 -6
- package/esm/cli/authz/authz-set-list.js.map +1 -1
- package/esm/cli/authz/authz-set.js +1 -1
- package/esm/cli/authz/authz-set.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +13 -11
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-describe.js +9 -7
- package/esm/cli/authz/authz-type-describe.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +16 -14
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +14 -12
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +9 -7
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/cli/authz/authz-type.js +1 -1
- package/esm/cli/authz/authz-type.js.map +1 -1
- package/esm/cli/authz/authz.js +2 -2
- package/esm/cli/authz/authz.js.map +1 -1
- package/esm/cli/config/config-delete.js +21 -0
- package/esm/cli/config/config-delete.js.map +1 -0
- package/esm/cli/config/config-describe.js +21 -0
- package/esm/cli/config/config-describe.js.map +1 -0
- package/esm/cli/config/config-export.js +43 -0
- package/esm/cli/config/config-export.js.map +1 -0
- package/esm/cli/config/config-import.js +54 -0
- package/esm/cli/config/config-import.js.map +1 -0
- package/esm/cli/config/config-list.js +21 -0
- package/esm/cli/config/config-list.js.map +1 -0
- package/esm/cli/config/config.js +19 -0
- package/esm/cli/config/config.js.map +1 -0
- package/esm/cli/conn/conn-delete.js +2 -3
- package/esm/cli/conn/conn-delete.js.map +1 -1
- package/esm/cli/conn/conn-describe.js +2 -3
- package/esm/cli/conn/conn-describe.js.map +1 -1
- package/esm/cli/conn/conn-list.js +2 -3
- package/esm/cli/conn/conn-list.js.map +1 -1
- package/esm/cli/conn/conn-save.js +31 -16
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/conn/conn.js +2 -2
- package/esm/cli/conn/conn.js.map +1 -1
- package/esm/cli/email/email-template-export.js +14 -12
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +15 -13
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +9 -7
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/email/email-template.js +1 -1
- package/esm/cli/email/email-template.js.map +1 -1
- package/esm/cli/email/email.js +2 -2
- package/esm/cli/email/email.js.map +1 -1
- package/esm/cli/esv/esv-apply.js +18 -9
- package/esm/cli/esv/esv-apply.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +10 -7
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +13 -10
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +10 -7
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +22 -7
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-import.js +7 -5
- package/esm/cli/esv/esv-secret-import.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +11 -8
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +10 -7
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +10 -8
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +10 -7
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +10 -8
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +13 -10
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +10 -7
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-version.js +1 -1
- package/esm/cli/esv/esv-secret-version.js.map +1 -1
- package/esm/cli/esv/esv-secret.js +2 -3
- package/esm/cli/esv/esv-secret.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +11 -7
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +13 -9
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +11 -8
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +23 -7
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-import.js +7 -5
- package/esm/cli/esv/esv-variable-import.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +11 -8
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +12 -8
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/esv/esv-variable.js +2 -3
- package/esm/cli/esv/esv-variable.js.map +1 -1
- package/esm/cli/esv/esv.js +2 -2
- package/esm/cli/esv/esv.js.map +1 -1
- package/esm/cli/idm/idm-count.js +10 -8
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +24 -16
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +22 -14
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +9 -7
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idm/idm.js +2 -2
- package/esm/cli/idm/idm.js.map +1 -1
- package/esm/cli/idp/idp-export.js +12 -10
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +24 -14
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +8 -6
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/idp/idp.js +2 -2
- package/esm/cli/idp/idp.js.map +1 -1
- package/esm/cli/info/info.js +13 -8
- package/esm/cli/info/info.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +14 -8
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +22 -12
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +11 -12
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +11 -12
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-export.js +24 -13
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +15 -13
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +7 -5
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +23 -13
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/journey/journey.js +2 -2
- package/esm/cli/journey/journey.js.map +1 -1
- package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +68 -36
- package/esm/cli/log/log-fetch.js.map +1 -0
- package/esm/cli/log/log-key-delete.js +34 -0
- package/esm/cli/log/log-key-delete.js.map +1 -0
- package/esm/cli/log/log-key-describe.js +21 -0
- package/esm/cli/log/log-key-describe.js.map +1 -0
- package/esm/cli/log/log-key-list.js +25 -0
- package/esm/cli/log/log-key-list.js.map +1 -0
- package/esm/cli/log/log-key.js +8 -0
- package/esm/cli/log/log-key.js.map +1 -0
- package/esm/cli/log/log-list.js +80 -0
- package/esm/cli/log/log-list.js.map +1 -0
- package/esm/cli/log/log-tail.js +77 -0
- package/esm/cli/log/log-tail.js.map +1 -0
- package/esm/cli/{logging/logs.js → log/log.js} +6 -3
- package/esm/cli/log/log.js.map +1 -0
- package/esm/cli/oauth/oauth-client-delete.js +21 -0
- package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
- package/esm/cli/oauth/oauth-client-describe.js +21 -0
- package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
- package/esm/cli/oauth/oauth-client-export.js +51 -0
- package/esm/cli/oauth/oauth-client-export.js.map +1 -0
- package/esm/cli/oauth/oauth-client-import.js +56 -0
- package/esm/cli/oauth/oauth-client-import.js.map +1 -0
- package/esm/cli/oauth/oauth-client-list.js +24 -0
- package/esm/cli/oauth/oauth-client-list.js.map +1 -0
- package/esm/cli/oauth/oauth-client.js +14 -0
- package/esm/cli/oauth/oauth-client.js.map +1 -0
- package/esm/cli/oauth/oauth.js +13 -0
- package/esm/cli/oauth/oauth.js.map +1 -0
- package/esm/cli/realm/realm-add-custom-domain.js +8 -6
- package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm-describe.js +8 -6
- package/esm/cli/realm/realm-describe.js.map +1 -1
- package/esm/cli/realm/realm-list.js +8 -6
- package/esm/cli/realm/realm-list.js.map +1 -1
- package/esm/cli/realm/realm-remove-custom-domain.js +11 -6
- package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm.js +2 -2
- package/esm/cli/realm/realm.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +14 -12
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-import.js +15 -13
- package/esm/cli/saml/saml-cot-import.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +9 -7
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-cot.js +1 -1
- package/esm/cli/saml/saml-cot.js.map +1 -1
- package/esm/cli/saml/saml-delete.js +14 -8
- package/esm/cli/saml/saml-delete.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +9 -7
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +14 -12
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +24 -14
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +9 -7
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +10 -8
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/saml/saml-metadata.js +1 -1
- package/esm/cli/saml/saml-metadata.js.map +1 -1
- package/esm/cli/saml/saml.js +2 -2
- package/esm/cli/saml/saml.js.map +1 -1
- package/esm/cli/script/script-delete.js +21 -8
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-describe.js +7 -5
- package/esm/cli/script/script-describe.js.map +1 -1
- package/esm/cli/script/script-export.js +12 -14
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +9 -7
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/script/script-list.js +10 -8
- package/esm/cli/script/script-list.js.map +1 -1
- package/esm/cli/script/script.js +3 -5
- package/esm/cli/script/script.js.map +1 -1
- package/esm/cli/service/service-delete.js +8 -5
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +13 -11
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +32 -14
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +7 -4
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/service/service.js +2 -2
- package/esm/cli/service/service.js.map +1 -1
- package/esm/cli/shell/shell.js +57 -0
- package/esm/cli/shell/shell.js.map +1 -0
- package/esm/cli/theme/theme-delete.js +13 -11
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +16 -14
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +16 -14
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +8 -6
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/cli/theme/theme.js +2 -2
- package/esm/cli/theme/theme.js.map +1 -1
- package/esm/help/SampleData.js +7 -0
- package/esm/help/SampleData.js.map +1 -0
- package/esm/launch.js +1 -1
- package/esm/launch.js.map +1 -1
- package/esm/loader.js +2 -2
- package/esm/loader.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +231 -0
- package/esm/ops/AdminFederationOps.js.map +1 -0
- package/esm/ops/AdminOps.js +151 -0
- package/esm/ops/AdminOps.js.map +1 -0
- package/esm/ops/AgentOps.js +213 -150
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/ApplicationOps.js +324 -0
- package/esm/ops/ApplicationOps.js.map +1 -0
- package/esm/ops/AuthenticationSettingsOps.js +90 -0
- package/esm/ops/AuthenticationSettingsOps.js.map +1 -0
- package/esm/ops/CirclesOfTrustOps.js +98 -78
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConfigOps.js +162 -0
- package/esm/ops/ConfigOps.js.map +1 -0
- package/esm/ops/ConnectionProfileOps.js +12 -6
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +122 -127
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +101 -182
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +118 -73
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +176 -114
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js +92 -30
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/NodeOps.js +6 -3
- package/esm/ops/NodeOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +71 -49
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/OrganizationOps.js +14 -22
- package/esm/ops/OrganizationOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +127 -86
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +108 -76
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/RealmOps.js +18 -11
- package/esm/ops/RealmOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +105 -87
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +132 -91
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/Saml2Ops.test_.js.map +1 -1
- package/esm/ops/ScriptOps.js +205 -82
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +289 -79
- package/esm/ops/SecretsOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +97 -54
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +164 -158
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +252 -65
- package/esm/ops/VariablesOps.js.map +1 -1
- package/esm/ops/utils/OpsUtils.js +1 -1
- package/esm/ops/utils/OpsUtils.js.map +1 -1
- package/esm/ops/utils/Wordwrap.js +1 -1
- package/esm/ops/utils/Wordwrap.js.map +1 -1
- package/esm/storage/StaticStorage.js +1 -1
- package/esm/storage/StaticStorage.js.map +1 -1
- package/esm/utils/Config.js +162 -4
- package/esm/utils/Config.js.map +1 -1
- package/esm/utils/Console.js +78 -35
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/Version.js +19 -16
- package/esm/utils/Version.js.map +1 -1
- package/global-jest-setup.js +4 -0
- package/package.json +55 -37
- package/esm/cli/logging/logs-fetch.js.map +0 -1
- package/esm/cli/logging/logs-list.js +0 -49
- package/esm/cli/logging/logs-list.js.map +0 -1
- package/esm/cli/logging/logs-tail.js +0 -46
- package/esm/cli/logging/logs-tail.js.map +0 -1
- package/esm/cli/logging/logs.js.map +0 -1
- package/esm/cli/theme/theme-delete.e2e.test_.js.map +0 -1
- package/esm/cli/theme/theme-list.e2e.test_.js.map +0 -1
- package/esm/utils/ExportImportUtils.js +0 -90
- package/esm/utils/ExportImportUtils.js.map +0 -1
package/esm/ops/ScriptOps.js
CHANGED
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
2
2
|
import chokidar from 'chokidar';
|
|
3
3
|
import fs from 'fs';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { getFullExportConfig, isIdUsed } from '../utils/Config';
|
|
5
|
+
import { createProgressIndicator, createTable, debugMessage, failSpinner, printMessage, showSpinner, spinSpinner, stopProgressIndicator, succeedSpinner, updateProgressIndicator } from '../utils/Console';
|
|
6
6
|
import wordwrap from './utils/Wordwrap';
|
|
7
|
+
const {
|
|
8
|
+
getTypedFilename,
|
|
9
|
+
isValidUrl,
|
|
10
|
+
saveJsonToFile,
|
|
11
|
+
saveTextToFile,
|
|
12
|
+
titleCase,
|
|
13
|
+
isBase64Encoded,
|
|
14
|
+
getFilePath,
|
|
15
|
+
getWorkingDirectory
|
|
16
|
+
} = frodo.utils;
|
|
17
|
+
const {
|
|
18
|
+
readScripts,
|
|
19
|
+
exportScript,
|
|
20
|
+
exportScriptByName,
|
|
21
|
+
exportScripts,
|
|
22
|
+
importScripts,
|
|
23
|
+
deleteScript,
|
|
24
|
+
deleteScriptByName,
|
|
25
|
+
deleteScripts
|
|
26
|
+
} = frodo.script;
|
|
27
|
+
|
|
7
28
|
/**
|
|
8
29
|
* Get a one-line description of the script object
|
|
9
30
|
* @param {ScriptSkeleton} scriptObj script object to describe
|
|
@@ -42,45 +63,74 @@ export function getTableRowMd(scriptObj) {
|
|
|
42
63
|
/**
|
|
43
64
|
* List scripts
|
|
44
65
|
* @param {boolean} long detail list
|
|
66
|
+
* @param {boolean} usage display usage field
|
|
67
|
+
* @param {String | null} file Optional filename to determine usage
|
|
45
68
|
* @returns {Promise<boolean>} true if no errors occurred during export, false otherwise
|
|
46
69
|
*/
|
|
47
|
-
export async function listScripts(long = false) {
|
|
48
|
-
let
|
|
70
|
+
export async function listScripts(long = false, usage = false, file = null) {
|
|
71
|
+
let spinnerId;
|
|
72
|
+
let scripts = [];
|
|
49
73
|
debugMessage(`Cli.ScriptOps.listScripts: start`);
|
|
50
74
|
try {
|
|
51
|
-
|
|
75
|
+
spinnerId = createProgressIndicator('indeterminate', 0, `Reading scripts...`);
|
|
76
|
+
scripts = await readScripts();
|
|
52
77
|
scripts.sort((a, b) => a.name.localeCompare(b.name));
|
|
53
|
-
|
|
54
|
-
const table = createTable(['Name', 'UUID', 'Language', 'Context', 'Description']);
|
|
55
|
-
const langMap = {
|
|
56
|
-
JAVASCRIPT: 'JS',
|
|
57
|
-
GROOVY: 'Groovy'
|
|
58
|
-
};
|
|
59
|
-
scripts.forEach(script => {
|
|
60
|
-
table.push([wordwrap(script.name, 25, ' '), script._id, langMap[script.language], wordwrap(titleCase(script.context.split('_').join(' ')), 25), wordwrap(script.description, 30)]);
|
|
61
|
-
});
|
|
62
|
-
printMessage(table.toString(), 'data');
|
|
63
|
-
} else {
|
|
64
|
-
scripts.forEach(script => {
|
|
65
|
-
printMessage(`${script.name}`, 'data');
|
|
66
|
-
});
|
|
67
|
-
}
|
|
78
|
+
stopProgressIndicator(spinnerId, `Successfully read ${scripts.length} scripts.`, 'success');
|
|
68
79
|
} catch (error) {
|
|
69
|
-
|
|
70
|
-
|
|
80
|
+
var _error$response;
|
|
81
|
+
stopProgressIndicator(spinnerId, `Error reading scripts: ${((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) || error.message}`, 'fail');
|
|
71
82
|
debugMessage(error);
|
|
83
|
+
debugMessage(`Cli.ScriptOps.listScripts: end [false]`);
|
|
84
|
+
return false;
|
|
72
85
|
}
|
|
73
|
-
|
|
74
|
-
|
|
86
|
+
if (!long && !usage) {
|
|
87
|
+
scripts.forEach(script => {
|
|
88
|
+
printMessage(`${script.name}`, 'data');
|
|
89
|
+
});
|
|
90
|
+
debugMessage(`Cli.ScriptOps.listScripts: end [true]`);
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
let fullExport = null;
|
|
94
|
+
const headers = long ? ['Name', 'UUID', 'Language', 'Context', 'Description'] : ['Name'];
|
|
95
|
+
if (usage) {
|
|
96
|
+
try {
|
|
97
|
+
fullExport = await getFullExportConfig(file);
|
|
98
|
+
} catch (error) {
|
|
99
|
+
var _error$response2;
|
|
100
|
+
printMessage(`Error getting full export: ${((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) || error.message}`, 'error');
|
|
101
|
+
debugMessage(`Cli.ScriptOps.listScripts: end [false]`);
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
//Delete scripts from full export so they aren't mistakenly used for determining usage
|
|
105
|
+
delete fullExport.script;
|
|
106
|
+
headers.push('Used');
|
|
107
|
+
}
|
|
108
|
+
const table = createTable(headers);
|
|
109
|
+
const langMap = {
|
|
110
|
+
JAVASCRIPT: 'JS',
|
|
111
|
+
GROOVY: 'Groovy'
|
|
112
|
+
};
|
|
113
|
+
scripts.forEach(script => {
|
|
114
|
+
const values = long ? [wordwrap(script.name, 25, ' '), script._id, langMap[script.language], wordwrap(titleCase(script.context.split('_').join(' ')), 25), wordwrap(script.description, 30)] : [wordwrap(script.name, 25, ' ')];
|
|
115
|
+
if (usage) {
|
|
116
|
+
const isScriptUsed = isIdUsed(fullExport, script._id, false);
|
|
117
|
+
values.push(isScriptUsed.used ? `${'yes'['brightGreen']} (at ${isScriptUsed.location})` : 'no'['brightRed']);
|
|
118
|
+
}
|
|
119
|
+
table.push(values);
|
|
120
|
+
});
|
|
121
|
+
printMessage(table.toString(), 'data');
|
|
122
|
+
debugMessage(`Cli.ScriptOps.listScripts: end [true]`);
|
|
123
|
+
return true;
|
|
75
124
|
}
|
|
76
125
|
|
|
77
126
|
/**
|
|
78
127
|
* Export script by id to file
|
|
79
128
|
* @param {string} scriptId script uuid
|
|
80
129
|
* @param {string} file file name
|
|
130
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
81
131
|
* @returns {Promise<boolean>} true if no errors occurred during export, false otherwise
|
|
82
132
|
*/
|
|
83
|
-
export async function exportScriptToFile(scriptId, file) {
|
|
133
|
+
export async function exportScriptToFile(scriptId, file, includeMeta = true) {
|
|
84
134
|
debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);
|
|
85
135
|
try {
|
|
86
136
|
showSpinner(`Exporting script '${scriptId}'...`);
|
|
@@ -88,10 +138,11 @@ export async function exportScriptToFile(scriptId, file) {
|
|
|
88
138
|
if (file) {
|
|
89
139
|
fileName = file;
|
|
90
140
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
141
|
+
const filePath = getFilePath(fileName, true);
|
|
142
|
+
spinSpinner(`Exporting script '${scriptId}' to '${filePath}'...`);
|
|
143
|
+
const scriptExport = await exportScript(scriptId);
|
|
144
|
+
saveJsonToFile(scriptExport, filePath, includeMeta);
|
|
145
|
+
succeedSpinner(`Exported script '${scriptId}' to '${filePath}'.`);
|
|
95
146
|
debugMessage(`Cli.ScriptOps.exportScriptToFile: end [true]`);
|
|
96
147
|
return true;
|
|
97
148
|
} catch (error) {
|
|
@@ -106,9 +157,10 @@ export async function exportScriptToFile(scriptId, file) {
|
|
|
106
157
|
* Export script by name to file
|
|
107
158
|
* @param {string} name script name
|
|
108
159
|
* @param {string} file file name
|
|
160
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
109
161
|
* @returns {Promise<boolean>} true if no errors occurred during export, false otherwise
|
|
110
162
|
*/
|
|
111
|
-
export async function exportScriptByNameToFile(name, file) {
|
|
163
|
+
export async function exportScriptByNameToFile(name, file, includeMeta = true) {
|
|
112
164
|
debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);
|
|
113
165
|
try {
|
|
114
166
|
showSpinner(`Exporting script '${name}'...`);
|
|
@@ -116,10 +168,11 @@ export async function exportScriptByNameToFile(name, file) {
|
|
|
116
168
|
if (file) {
|
|
117
169
|
fileName = file;
|
|
118
170
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
171
|
+
const filePath = getFilePath(fileName, true);
|
|
172
|
+
spinSpinner(`Exporting script '${name}' to '${filePath}'...`);
|
|
173
|
+
const scriptExport = await exportScriptByName(name);
|
|
174
|
+
saveJsonToFile(scriptExport, filePath, includeMeta);
|
|
175
|
+
succeedSpinner(`Exported script '${name}' to '${filePath}'.`);
|
|
123
176
|
debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [true]`);
|
|
124
177
|
return true;
|
|
125
178
|
} catch (error) {
|
|
@@ -133,17 +186,18 @@ export async function exportScriptByNameToFile(name, file) {
|
|
|
133
186
|
/**
|
|
134
187
|
* Export all scripts to single file
|
|
135
188
|
* @param {string} file file name
|
|
189
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
136
190
|
* @returns {Promise<boolean>} true if no errors occurred during export, false otherwise
|
|
137
191
|
*/
|
|
138
|
-
export async function exportScriptsToFile(file) {
|
|
192
|
+
export async function exportScriptsToFile(file, includeMeta = true) {
|
|
139
193
|
debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);
|
|
140
194
|
try {
|
|
141
195
|
let fileName = getTypedFilename(`all${titleCase(state.getRealm())}Scripts`, 'script');
|
|
142
196
|
if (file) {
|
|
143
197
|
fileName = file;
|
|
144
198
|
}
|
|
145
|
-
const scriptExport = await
|
|
146
|
-
saveJsonToFile(scriptExport, fileName);
|
|
199
|
+
const scriptExport = await exportScripts();
|
|
200
|
+
saveJsonToFile(scriptExport, getFilePath(fileName, true), includeMeta);
|
|
147
201
|
debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);
|
|
148
202
|
return true;
|
|
149
203
|
} catch (error) {
|
|
@@ -156,55 +210,77 @@ export async function exportScriptsToFile(file) {
|
|
|
156
210
|
|
|
157
211
|
/**
|
|
158
212
|
* Export all scripts to individual files
|
|
213
|
+
* @param extract Extracts the scripts from the exports into separate files if true
|
|
214
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
159
215
|
* @returns {Promise<boolean>} true if no errors occurred during export, false otherwise
|
|
160
216
|
*/
|
|
161
|
-
export async function exportScriptsToFiles() {
|
|
217
|
+
export async function exportScriptsToFiles(extract = false, includeMeta = true) {
|
|
162
218
|
let outcome = true;
|
|
163
219
|
debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);
|
|
164
|
-
const scriptList = await
|
|
165
|
-
|
|
220
|
+
const scriptList = await readScripts();
|
|
221
|
+
const barId = createProgressIndicator('determinate', scriptList.length, 'Exporting scripts to individual files...');
|
|
166
222
|
for (const script of scriptList) {
|
|
223
|
+
const fileBarId = createProgressIndicator('determinate', 1, `Exporting script ${script.name}...`);
|
|
224
|
+
updateProgressIndicator(barId, `Reading script ${script.name}`);
|
|
225
|
+
const file = getFilePath(getTypedFilename(script.name, 'script'), true);
|
|
167
226
|
try {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
227
|
+
const scriptExport = await exportScriptByName(script.name);
|
|
228
|
+
if (extract) extractScriptToFile(scriptExport);
|
|
229
|
+
saveJsonToFile(scriptExport, file, includeMeta);
|
|
230
|
+
updateProgressIndicator(fileBarId, `Saving ${script.name} to ${file}.`);
|
|
231
|
+
stopProgressIndicator(fileBarId, `${script.name} saved to ${file}.`);
|
|
172
232
|
} catch (error) {
|
|
173
233
|
outcome = false;
|
|
234
|
+
updateProgressIndicator(barId, `Error exporting ${script.name}.`);
|
|
235
|
+
stopProgressIndicator(fileBarId, `Error saving ${script.name} to ${file}.`);
|
|
174
236
|
printMessage(`Error exporting script '${script.name}': ${error.message}`, 'error');
|
|
175
237
|
debugMessage(error);
|
|
176
238
|
}
|
|
177
239
|
}
|
|
178
|
-
|
|
240
|
+
stopProgressIndicator(barId, `Exported ${scriptList.length} scripts to individual files.`);
|
|
179
241
|
debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);
|
|
180
242
|
return outcome;
|
|
181
243
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Extracts a script from a script export into a separate file.
|
|
247
|
+
* @param scriptExport The script export
|
|
248
|
+
* @param scriptId The script id (optional if there is only one script in the export)
|
|
249
|
+
* @param directory The directory within the base directory to save the script file
|
|
250
|
+
*/
|
|
251
|
+
export function extractScriptToFile(scriptExport, scriptId, directory) {
|
|
252
|
+
const scriptSkeleton = scriptId ? scriptExport.script[scriptId] : getScriptSkeleton(scriptExport);
|
|
253
|
+
const fileExtension = scriptSkeleton.language === 'JAVASCRIPT' ? 'js' : 'groovy';
|
|
254
|
+
const scriptFileName = getTypedFilename(scriptSkeleton.name, 'script', fileExtension);
|
|
255
|
+
const scriptFilePath = getFilePath((directory ? `${directory}/` : '') + scriptFileName, true);
|
|
256
|
+
const scriptText = Array.isArray(scriptSkeleton.script) ? scriptSkeleton.script.join('\n') : scriptSkeleton.script;
|
|
257
|
+
scriptSkeleton.script = `file://${scriptFilePath}`;
|
|
258
|
+
saveTextToFile(scriptText, scriptFilePath);
|
|
259
|
+
}
|
|
260
|
+
function isScriptExtracted(importData) {
|
|
261
|
+
debugMessage(`Cli.ScriptOps.isScriptExtracted: start`);
|
|
262
|
+
let extracted = true;
|
|
263
|
+
for (const scriptId of Object.keys(importData.script)) {
|
|
264
|
+
const script = importData.script[scriptId].script;
|
|
265
|
+
if (Array.isArray(script)) {
|
|
266
|
+
debugMessage(`Cli.ScriptOps.isScriptExtracted: script is string array`);
|
|
267
|
+
extracted = false;
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
if (isValidUrl(script)) {
|
|
271
|
+
debugMessage(`Cli.ScriptOps.isScriptExtracted: script is extracted`);
|
|
272
|
+
extracted = true;
|
|
273
|
+
break;
|
|
203
274
|
}
|
|
275
|
+
if (isBase64Encoded) {
|
|
276
|
+
debugMessage(`Cli.ScriptOps.isScriptExtracted: script is base64-encoded`);
|
|
277
|
+
extracted = false;
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
break;
|
|
204
281
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
return outcome;
|
|
282
|
+
debugMessage(`Cli.ScriptOps.isScriptExtracted: end [extracted=${extracted}]`);
|
|
283
|
+
return extracted;
|
|
208
284
|
}
|
|
209
285
|
|
|
210
286
|
/**
|
|
@@ -216,14 +292,20 @@ export async function exportScriptsToFilesExtract() {
|
|
|
216
292
|
*/
|
|
217
293
|
export async function importScriptsFromFile(name, file, reUuid = false) {
|
|
218
294
|
let outcome = false;
|
|
295
|
+
const filePath = getFilePath(file);
|
|
219
296
|
debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);
|
|
220
|
-
fs.readFile(
|
|
297
|
+
fs.readFile(filePath, 'utf8', async (err, data) => {
|
|
221
298
|
try {
|
|
222
299
|
if (err) throw err;
|
|
223
300
|
const importData = JSON.parse(data);
|
|
224
|
-
|
|
301
|
+
if (isScriptExtracted(importData)) {
|
|
302
|
+
await handleScriptFileImport(filePath, reUuid, false);
|
|
303
|
+
} else {
|
|
304
|
+
await importScripts(name, importData, reUuid);
|
|
305
|
+
}
|
|
306
|
+
outcome = true;
|
|
225
307
|
} catch (error) {
|
|
226
|
-
printMessage(`Error
|
|
308
|
+
printMessage(`Error importing script '${name}': ${error.message}`, 'error');
|
|
227
309
|
debugMessage(error);
|
|
228
310
|
}
|
|
229
311
|
});
|
|
@@ -244,16 +326,16 @@ export async function importScriptsFromFiles(watch, reUuid, validateScripts) {
|
|
|
244
326
|
* Run on file change detection, as well as on initial run.
|
|
245
327
|
*/
|
|
246
328
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
247
|
-
function onChange(path, _stats) {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
329
|
+
async function onChange(path, _stats) {
|
|
330
|
+
try {
|
|
331
|
+
await handleScriptFileImport(path, reUuid, validateScripts);
|
|
332
|
+
} catch (error) {
|
|
333
|
+
printMessage(`${path}: ${error.message}`, 'error');
|
|
334
|
+
}
|
|
253
335
|
}
|
|
254
336
|
|
|
255
337
|
// We watch json files and script files.
|
|
256
|
-
const watcher = chokidar.watch([
|
|
338
|
+
const watcher = chokidar.watch([`${getWorkingDirectory()}/**/*.script.json`, `${getWorkingDirectory()}/**/*.script.js`, `${getWorkingDirectory()}/**/*.script.groovy`], {
|
|
257
339
|
persistent: watch
|
|
258
340
|
});
|
|
259
341
|
watcher.on('add', onChange).on('change', onChange).on('error', error => {
|
|
@@ -279,8 +361,8 @@ async function handleScriptFileImport(file, reUuid, validateScripts) {
|
|
|
279
361
|
debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);
|
|
280
362
|
const scriptFile = getScriptFile(file);
|
|
281
363
|
const script = getScriptExportByScriptFile(scriptFile);
|
|
282
|
-
const
|
|
283
|
-
if (
|
|
364
|
+
const imported = await importScripts('', script, reUuid, validateScripts);
|
|
365
|
+
if (imported) {
|
|
284
366
|
printMessage(`Imported '${scriptFile}'`);
|
|
285
367
|
}
|
|
286
368
|
debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);
|
|
@@ -372,4 +454,45 @@ function getScriptId(script) {
|
|
|
372
454
|
}
|
|
373
455
|
return scriptIds[0];
|
|
374
456
|
}
|
|
375
|
-
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Delete script by id
|
|
460
|
+
* @param {String} id script id
|
|
461
|
+
*/
|
|
462
|
+
export async function deleteScriptId(id) {
|
|
463
|
+
const spinnerId = createProgressIndicator('indeterminate', undefined, `Deleting ${id}...`);
|
|
464
|
+
try {
|
|
465
|
+
await deleteScript(id);
|
|
466
|
+
stopProgressIndicator(spinnerId, `Deleted ${id}.`, 'success');
|
|
467
|
+
} catch (error) {
|
|
468
|
+
stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Delete script by name
|
|
474
|
+
* @param {String} name script name
|
|
475
|
+
*/
|
|
476
|
+
export async function deleteScriptName(name) {
|
|
477
|
+
const spinnerId = createProgressIndicator('indeterminate', undefined, `Deleting ${name}...`);
|
|
478
|
+
try {
|
|
479
|
+
await deleteScriptByName(name);
|
|
480
|
+
stopProgressIndicator(spinnerId, `Deleted ${name}.`, 'success');
|
|
481
|
+
} catch (error) {
|
|
482
|
+
stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Delete all non-default scripts
|
|
488
|
+
*/
|
|
489
|
+
export async function deleteAllScripts() {
|
|
490
|
+
const spinnerId = createProgressIndicator('indeterminate', undefined, `Deleting all non-default scripts...`);
|
|
491
|
+
try {
|
|
492
|
+
await deleteScripts();
|
|
493
|
+
stopProgressIndicator(spinnerId, `Deleted all non-default scripts.`, 'success');
|
|
494
|
+
} catch (error) {
|
|
495
|
+
stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
//# sourceMappingURL=ScriptOps.js.map
|
package/esm/ops/ScriptOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptOps.js","names":["frodo","state","chokidar","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","spinSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","saveTextToFile","titleCase","wordwrap","getOneLineDescription","scriptObj","description","_id","context","name","getTableHeaderMd","markdown","getTableRowMd","langMap","JAVASCRIPT","GROOVY","language","split","join","listScripts","long","outcome","scripts","script","getScripts","sort","a","b","localeCompare","table","forEach","push","toString","error","message","exportScriptToFile","scriptId","file","fileName","scriptExport","exportScript","exportScriptByNameToFile","exportScriptByName","exportScriptsToFile","getRealm","exportScripts","exportScriptsToFiles","scriptList","length","exportScriptsToFilesExtract","fileExtension","scriptFileName","scriptSkeleton","getScriptSkeleton","scriptText","Array","isArray","importScriptsFromFile","reUuid","readFile","err","data","importData","JSON","parse","importScripts","importScriptsFromFiles","watch","validateScripts","onChange","path","_stats","handleScriptFileImport","catch","process","exit","watcher","persistent","on","close","scriptFile","getScriptFile","getScriptExportByScriptFile","success","endsWith","replace","getScriptExport","extractFile","getExtractFile","scriptRaw","readFileSync","startsWith","scriptExportRaw","getScriptId","scriptIds","Object","keys","Error"],"sources":["ops/ScriptOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport chokidar from 'chokidar';\nimport fs from 'fs';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n spinSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n saveTextToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\nimport type { ScriptSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport type { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/OpsTypes';\n\n/**\n * Get a one-line description of the script object\n * @param {ScriptSkeleton} scriptObj script object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(scriptObj: ScriptSkeleton): string {\n const description = `[${scriptObj._id['brightCyan']}] ${scriptObj.context} - ${scriptObj.name}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name | Language | Type | Id |\\n';\n markdown += '| ---- | -------- | ---- | ---|';\n return markdown;\n}\n\n/**\n * Get a one-line description of the script object in markdown\n * @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe\n * @returns {string} markdown table row\n */\nexport function getTableRowMd(scriptObj: ScriptSkeleton): string {\n const langMap = { JAVASCRIPT: 'JavaSscript', GROOVY: 'Groovy' };\n const description = `| ${scriptObj.name} | ${\n langMap[scriptObj.language]\n } | ${titleCase(scriptObj.context.split('_').join(' '))} | \\`${\n scriptObj._id\n }\\` |`;\n return description;\n}\n\n/**\n * List scripts\n * @param {boolean} long detail list\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function listScripts(long = false): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.listScripts: start`);\n try {\n const scripts = await frodo.script.getScripts();\n scripts.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable([\n 'Name',\n 'UUID',\n 'Language',\n 'Context',\n 'Description',\n ]);\n const langMap = { JAVASCRIPT: 'JS', GROOVY: 'Groovy' };\n scripts.forEach((script) => {\n table.push([\n wordwrap(script.name, 25, ' '),\n script._id,\n langMap[script.language],\n wordwrap(titleCase(script.context.split('_').join(' ')), 25),\n wordwrap(script.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n scripts.forEach((script) => {\n printMessage(`${script.name}`, 'data');\n });\n }\n } catch (error) {\n outcome = false;\n printMessage(`Error listing scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.listScripts: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Export script by id to file\n * @param {string} scriptId script uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptToFile(\n scriptId: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);\n try {\n showSpinner(`Exporting script '${scriptId}'...`);\n let fileName = getTypedFilename(scriptId, 'script');\n if (file) {\n fileName = file;\n }\n spinSpinner(`Exporting script '${scriptId}' to '${fileName}'...`);\n const scriptExport = await frodo.script.exportScript(scriptId);\n saveJsonToFile(scriptExport, fileName);\n succeedSpinner(`Exported script '${scriptId}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${scriptId}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [false]`);\n return false;\n}\n\n/**\n * Export script by name to file\n * @param {string} name script name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);\n try {\n showSpinner(`Exporting script '${name}'...`);\n let fileName = getTypedFilename(name, 'script');\n if (file) {\n fileName = file;\n }\n spinSpinner(`Exporting script '${name}' to '${fileName}'...`);\n const scriptExport = await frodo.script.exportScriptByName(name);\n saveJsonToFile(scriptExport, fileName);\n succeedSpinner(`Exported script '${name}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${name}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to single file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFile(file: string): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Scripts`,\n 'script'\n );\n if (file) {\n fileName = file;\n }\n const scriptExport = await frodo.script.exportScripts();\n saveJsonToFile(scriptExport, fileName);\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);\n return true;\n } catch (error) {\n printMessage(`Error exporting scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to individual files\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFiles(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const scriptList = await frodo.script.getScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileName = getTypedFilename(script.name, 'script');\n const scriptExport = await frodo.script.exportScriptByName(script.name);\n saveJsonToFile(scriptExport, fileName);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);\n return outcome;\n}\n\nexport async function exportScriptsToFilesExtract(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: start`);\n const scriptList = await frodo.script.getScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileExtension = script.language === 'JAVASCRIPT' ? 'js' : 'groovy';\n const scriptFileName = getTypedFilename(\n script.name,\n 'script',\n fileExtension\n );\n const fileName = getTypedFilename(script.name, 'script');\n\n const scriptExport = await frodo.script.exportScriptByName(script.name);\n\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const scriptText = Array.isArray(scriptSkeleton.script)\n ? scriptSkeleton.script.join('\\n')\n : scriptSkeleton.script;\n\n scriptSkeleton.script = `file://${scriptFileName}`;\n\n saveTextToFile(scriptText, scriptFileName);\n saveJsonToFile(scriptExport, fileName);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import script(s) from file\n * @param {string} name Optional name of script. If supplied, only the script of that name is imported\n * @param {string} file file name\n * @param {boolean} reUuid true to generate a new uuid for each script on import, false otherwise\n * @returns {Promise<boolean>} true if no errors occurred during import, false otherwise\n */\nexport async function importScriptsFromFile(\n name: string,\n file: string,\n reUuid = false\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n fs.readFile(file, 'utf8', async (err, data) => {\n try {\n if (err) throw err;\n const importData = JSON.parse(data);\n outcome = await frodo.script.importScripts(name, importData, reUuid);\n } catch (error) {\n printMessage(\n `Error exporting script '${name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n });\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import extracted scripts.\n *\n * @param watch whether or not to watch for file changes\n */\nexport async function importScriptsFromFiles(\n watch: boolean,\n reUuid: boolean,\n validateScripts: boolean\n) {\n // If watch is true, it doesn't make sense to reUuid.\n reUuid = watch ? false : reUuid;\n\n /**\n * Run on file change detection, as well as on initial run.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function onChange(path: string, _stats?: fs.Stats): void {\n handleScriptFileImport(path, reUuid, validateScripts).catch((error) => {\n printMessage(`Error importing script: ${error.message}`, 'error');\n debugMessage(error);\n process.exit(1);\n });\n }\n\n // We watch json files and script files.\n const watcher = chokidar.watch(\n [`./**/*.script.json`, `./**/*.script.js`, `./**/*.script.groovy`],\n {\n persistent: watch,\n }\n );\n\n watcher\n .on('add', onChange)\n .on('change', onChange)\n .on('error', (error) => {\n printMessage(`Watcher error: ${error}`, 'error');\n watcher.close();\n })\n .on('ready', () => {\n if (watch) {\n printMessage('Watching for changes...');\n } else {\n watcher.close();\n printMessage('Done.');\n }\n });\n}\n\n/**\n * Handle a script file import.\n *\n * @param file Either a script file or an extract file\n * @param reUuid whether or not to generate a new uuid for each script on import\n */\nasync function handleScriptFileImport(\n file: string,\n reUuid: boolean,\n validateScripts: boolean\n) {\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);\n const scriptFile = getScriptFile(file);\n const script = getScriptExportByScriptFile(scriptFile);\n\n const success = await frodo.script.importScripts(\n '',\n script,\n reUuid,\n validateScripts\n );\n if (success) {\n printMessage(`Imported '${scriptFile}'`);\n }\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);\n}\n\n/**\n * Get a script file from a file.\n *\n * @param file Either a script file or an extract file\n * @returns The script file\n */\nfunction getScriptFile(file: string) {\n if (file.endsWith('.script.json')) {\n return file;\n }\n return file.replace(/\\.script\\.(js|groovy)/, '.script.json');\n}\n\n/**\n * Get a script export from a script file.\n *\n * @param scriptFile The path to the script file\n * @returns The script export\n */\nfunction getScriptExportByScriptFile(\n scriptFile: string\n): ScriptExportInterface {\n const scriptExport = getScriptExport(scriptFile);\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const extractFile = getExtractFile(scriptSkeleton);\n if (!extractFile) {\n return scriptExport;\n }\n\n const scriptRaw = fs.readFileSync(extractFile, 'utf8');\n scriptSkeleton.script = scriptRaw.split('\\n');\n\n return scriptExport;\n}\n\n/**\n * Get an extract file from a script skeleton.\n *\n * @param scriptSkeleton The script skeleton\n * @returns The extract file or null if there is no extract file\n */\nfunction getExtractFile(scriptSkeleton: ScriptSkeleton): string | null {\n const extractFile = scriptSkeleton.script;\n if (Array.isArray(extractFile)) {\n return null;\n }\n if (\n extractFile.startsWith('file://') &&\n (extractFile.endsWith('.js') || extractFile.endsWith('.groovy'))\n ) {\n return extractFile.replace('file://', '');\n }\n return null;\n}\n\n/**\n * Get a script export from a file.\n *\n * @param file The path to a script export file\n * @returns The script export\n */\nfunction getScriptExport(file: string): ScriptExportInterface {\n const scriptExportRaw = fs.readFileSync(file, 'utf8');\n const scriptExport = JSON.parse(scriptExportRaw) as ScriptExportInterface;\n\n return scriptExport;\n}\n\n/**\n * Get the main script skeleton from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script Get the main script skeleton from a script export\n * @returns The main script skeleton\n */\nfunction getScriptSkeleton(script: ScriptExportInterface): ScriptSkeleton {\n const scriptId = getScriptId(script);\n return script.script[scriptId];\n}\n\n/**\n * Get the main script ID from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script The script export\n * @returns The main script ID\n */\nfunction getScriptId(script: ScriptExportInterface): string {\n const scriptIds = Object.keys(script.script);\n if (scriptIds.length !== 1) {\n throw new Error(`Expected 1 script, found ${scriptIds.length}`);\n }\n return scriptIds[0];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScriptOps.js","names":["frodo","state","chokidar","fs","getFullExportConfig","isIdUsed","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","spinSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","wordwrap","getTypedFilename","isValidUrl","saveJsonToFile","saveTextToFile","titleCase","isBase64Encoded","getFilePath","getWorkingDirectory","utils","readScripts","exportScript","exportScriptByName","exportScripts","importScripts","deleteScript","deleteScriptByName","deleteScripts","script","getOneLineDescription","scriptObj","description","_id","context","name","getTableHeaderMd","markdown","getTableRowMd","langMap","JAVASCRIPT","GROOVY","language","split","join","listScripts","long","usage","file","spinnerId","scripts","sort","a","b","localeCompare","length","error","_error$response","response","data","message","forEach","fullExport","headers","_error$response2","push","table","values","isScriptUsed","used","location","toString","exportScriptToFile","scriptId","includeMeta","fileName","filePath","scriptExport","exportScriptByNameToFile","exportScriptsToFile","getRealm","exportScriptsToFiles","extract","outcome","scriptList","barId","fileBarId","extractScriptToFile","directory","scriptSkeleton","getScriptSkeleton","fileExtension","scriptFileName","scriptFilePath","scriptText","Array","isArray","isScriptExtracted","importData","extracted","Object","keys","importScriptsFromFile","reUuid","readFile","err","JSON","parse","handleScriptFileImport","importScriptsFromFiles","watch","validateScripts","onChange","path","_stats","watcher","persistent","on","close","scriptFile","getScriptFile","getScriptExportByScriptFile","imported","endsWith","replace","getScriptExport","extractFile","getExtractFile","scriptRaw","readFileSync","startsWith","scriptExportRaw","getScriptId","scriptIds","Error","deleteScriptId","id","undefined","deleteScriptName","deleteAllScripts"],"sources":["../../src/ops/ScriptOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type ScriptSkeleton } from '@rockcarver/frodo-lib/types/api/ScriptApi';\nimport { type ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport chokidar from 'chokidar';\nimport fs from 'fs';\n\nimport { getFullExportConfig, isIdUsed } from '../utils/Config';\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n spinSpinner,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressIndicator,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n getTypedFilename,\n isValidUrl,\n saveJsonToFile,\n saveTextToFile,\n titleCase,\n isBase64Encoded,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readScripts,\n exportScript,\n exportScriptByName,\n exportScripts,\n importScripts,\n deleteScript,\n deleteScriptByName,\n deleteScripts,\n} = frodo.script;\n\n/**\n * Get a one-line description of the script object\n * @param {ScriptSkeleton} scriptObj script object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(scriptObj: ScriptSkeleton): string {\n const description = `[${scriptObj._id['brightCyan']}] ${scriptObj.context} - ${scriptObj.name}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name | Language | Type | Id |\\n';\n markdown += '| ---- | -------- | ---- | ---|';\n return markdown;\n}\n\n/**\n * Get a one-line description of the script object in markdown\n * @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe\n * @returns {string} markdown table row\n */\nexport function getTableRowMd(scriptObj: ScriptSkeleton): string {\n const langMap = { JAVASCRIPT: 'JavaSscript', GROOVY: 'Groovy' };\n const description = `| ${scriptObj.name} | ${\n langMap[scriptObj.language]\n } | ${titleCase(scriptObj.context.split('_').join(' '))} | \\`${\n scriptObj._id\n }\\` |`;\n return description;\n}\n\n/**\n * List scripts\n * @param {boolean} long detail list\n * @param {boolean} usage display usage field\n * @param {String | null} file Optional filename to determine usage\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function listScripts(\n long: boolean = false,\n usage: boolean = false,\n file: string | null = null\n): Promise<boolean> {\n let spinnerId: string;\n let scripts: ScriptSkeleton[] = [];\n debugMessage(`Cli.ScriptOps.listScripts: start`);\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading scripts...`\n );\n scripts = await readScripts();\n scripts.sort((a, b) => a.name.localeCompare(b.name));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${scripts.length} scripts.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading scripts: ${error.response?.data || error.message}`,\n 'fail'\n );\n debugMessage(error);\n debugMessage(`Cli.ScriptOps.listScripts: end [false]`);\n return false;\n }\n if (!long && !usage) {\n scripts.forEach((script) => {\n printMessage(`${script.name}`, 'data');\n });\n debugMessage(`Cli.ScriptOps.listScripts: end [true]`);\n return true;\n }\n let fullExport = null;\n const headers = long\n ? ['Name', 'UUID', 'Language', 'Context', 'Description']\n : ['Name'];\n if (usage) {\n try {\n fullExport = await getFullExportConfig(file);\n } catch (error) {\n printMessage(\n `Error getting full export: ${error.response?.data || error.message}`,\n 'error'\n );\n debugMessage(`Cli.ScriptOps.listScripts: end [false]`);\n return false;\n }\n //Delete scripts from full export so they aren't mistakenly used for determining usage\n delete fullExport.script;\n headers.push('Used');\n }\n const table = createTable(headers);\n const langMap = { JAVASCRIPT: 'JS', GROOVY: 'Groovy' };\n scripts.forEach((script) => {\n const values = long\n ? [\n wordwrap(script.name, 25, ' '),\n script._id,\n langMap[script.language],\n wordwrap(titleCase(script.context.split('_').join(' ')), 25),\n wordwrap(script.description, 30),\n ]\n : [wordwrap(script.name, 25, ' ')];\n if (usage) {\n const isScriptUsed = isIdUsed(fullExport, script._id, false);\n values.push(\n isScriptUsed.used\n ? `${'yes'['brightGreen']} (at ${isScriptUsed.location})`\n : 'no'['brightRed']\n );\n }\n table.push(values);\n });\n printMessage(table.toString(), 'data');\n debugMessage(`Cli.ScriptOps.listScripts: end [true]`);\n return true;\n}\n\n/**\n * Export script by id to file\n * @param {string} scriptId script uuid\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptToFile(\n scriptId: string,\n file: string,\n includeMeta = true\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);\n try {\n showSpinner(`Exporting script '${scriptId}'...`);\n let fileName = getTypedFilename(scriptId, 'script');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n spinSpinner(`Exporting script '${scriptId}' to '${filePath}'...`);\n const scriptExport = await exportScript(scriptId);\n saveJsonToFile(scriptExport, filePath, includeMeta);\n succeedSpinner(`Exported script '${scriptId}' to '${filePath}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${scriptId}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [false]`);\n return false;\n}\n\n/**\n * Export script by name to file\n * @param {string} name script name\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string,\n includeMeta = true\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);\n try {\n showSpinner(`Exporting script '${name}'...`);\n let fileName = getTypedFilename(name, 'script');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n spinSpinner(`Exporting script '${name}' to '${filePath}'...`);\n const scriptExport = await exportScriptByName(name);\n saveJsonToFile(scriptExport, filePath, includeMeta);\n succeedSpinner(`Exported script '${name}' to '${filePath}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${name}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to single file\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFile(\n file: string,\n includeMeta = true\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Scripts`,\n 'script'\n );\n if (file) {\n fileName = file;\n }\n const scriptExport = await exportScripts();\n saveJsonToFile(scriptExport, getFilePath(fileName, true), includeMeta);\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);\n return true;\n } catch (error) {\n printMessage(`Error exporting scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to individual files\n * @param extract Extracts the scripts from the exports into separate files if true\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFiles(\n extract = false,\n includeMeta = true\n): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const scriptList = await readScripts();\n const barId = createProgressIndicator(\n 'determinate',\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n const fileBarId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting script ${script.name}...`\n );\n updateProgressIndicator(barId, `Reading script ${script.name}`);\n const file = getFilePath(getTypedFilename(script.name, 'script'), true);\n try {\n const scriptExport = await exportScriptByName(script.name);\n if (extract) extractScriptToFile(scriptExport);\n saveJsonToFile(scriptExport, file, includeMeta);\n updateProgressIndicator(fileBarId, `Saving ${script.name} to ${file}.`);\n stopProgressIndicator(fileBarId, `${script.name} saved to ${file}.`);\n } catch (error) {\n outcome = false;\n updateProgressIndicator(barId, `Error exporting ${script.name}.`);\n stopProgressIndicator(\n fileBarId,\n `Error saving ${script.name} to ${file}.`\n );\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressIndicator(\n barId,\n `Exported ${scriptList.length} scripts to individual files.`\n );\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Extracts a script from a script export into a separate file.\n * @param scriptExport The script export\n * @param scriptId The script id (optional if there is only one script in the export)\n * @param directory The directory within the base directory to save the script file\n */\nexport function extractScriptToFile(\n scriptExport: ScriptExportInterface,\n scriptId?: string,\n directory?: string\n) {\n const scriptSkeleton = scriptId\n ? scriptExport.script[scriptId]\n : getScriptSkeleton(scriptExport);\n const fileExtension =\n scriptSkeleton.language === 'JAVASCRIPT' ? 'js' : 'groovy';\n const scriptFileName = getTypedFilename(\n scriptSkeleton.name,\n 'script',\n fileExtension\n );\n const scriptFilePath = getFilePath(\n (directory ? `${directory}/` : '') + scriptFileName,\n true\n );\n const scriptText = Array.isArray(scriptSkeleton.script)\n ? scriptSkeleton.script.join('\\n')\n : scriptSkeleton.script;\n scriptSkeleton.script = `file://${scriptFilePath}`;\n saveTextToFile(scriptText, scriptFilePath);\n}\n\nfunction isScriptExtracted(importData: ScriptExportInterface): boolean {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: start`);\n let extracted = true;\n for (const scriptId of Object.keys(importData.script)) {\n const script = importData.script[scriptId].script;\n if (Array.isArray(script)) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is string array`);\n extracted = false;\n break;\n }\n if (isValidUrl(script as string)) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is extracted`);\n extracted = true;\n break;\n }\n if (isBase64Encoded) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is base64-encoded`);\n extracted = false;\n break;\n }\n break;\n }\n debugMessage(`Cli.ScriptOps.isScriptExtracted: end [extracted=${extracted}]`);\n return extracted;\n}\n\n/**\n * Import script(s) from file\n * @param {string} name Optional name of script. If supplied, only the script of that name is imported\n * @param {string} file file name\n * @param {boolean} reUuid true to generate a new uuid for each script on import, false otherwise\n * @returns {Promise<boolean>} true if no errors occurred during import, false otherwise\n */\nexport async function importScriptsFromFile(\n name: string,\n file: string,\n reUuid = false\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n fs.readFile(filePath, 'utf8', async (err, data) => {\n try {\n if (err) throw err;\n const importData: ScriptExportInterface = JSON.parse(data);\n if (isScriptExtracted(importData)) {\n await handleScriptFileImport(filePath, reUuid, false);\n } else {\n await importScripts(name, importData, reUuid);\n }\n outcome = true;\n } catch (error) {\n printMessage(\n `Error importing script '${name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n });\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import extracted scripts.\n *\n * @param watch whether or not to watch for file changes\n */\nexport async function importScriptsFromFiles(\n watch: boolean,\n reUuid: boolean,\n validateScripts: boolean\n) {\n // If watch is true, it doesn't make sense to reUuid.\n reUuid = watch ? false : reUuid;\n\n /**\n * Run on file change detection, as well as on initial run.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async function onChange(path: string, _stats?: fs.Stats): Promise<void> {\n try {\n await handleScriptFileImport(path, reUuid, validateScripts);\n } catch (error) {\n printMessage(`${path}: ${error.message}`, 'error');\n }\n }\n\n // We watch json files and script files.\n const watcher = chokidar.watch(\n [\n `${getWorkingDirectory()}/**/*.script.json`,\n `${getWorkingDirectory()}/**/*.script.js`,\n `${getWorkingDirectory()}/**/*.script.groovy`,\n ],\n {\n persistent: watch,\n }\n );\n\n watcher\n .on('add', onChange)\n .on('change', onChange)\n .on('error', (error) => {\n printMessage(`Watcher error: ${error}`, 'error');\n watcher.close();\n })\n .on('ready', () => {\n if (watch) {\n printMessage('Watching for changes...');\n } else {\n watcher.close();\n printMessage('Done.');\n }\n });\n}\n\n/**\n * Handle a script file import.\n *\n * @param file Either a script file or an extract file\n * @param reUuid whether or not to generate a new uuid for each script on import\n */\nasync function handleScriptFileImport(\n file: string,\n reUuid: boolean,\n validateScripts: boolean\n) {\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);\n const scriptFile = getScriptFile(file);\n const script = getScriptExportByScriptFile(scriptFile);\n\n const imported = await importScripts('', script, reUuid, validateScripts);\n if (imported) {\n printMessage(`Imported '${scriptFile}'`);\n }\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);\n}\n\n/**\n * Get a script file from a file.\n *\n * @param file Either a script file or an extract file\n * @returns The script file\n */\nfunction getScriptFile(file: string) {\n if (file.endsWith('.script.json')) {\n return file;\n }\n return file.replace(/\\.script\\.(js|groovy)/, '.script.json');\n}\n\n/**\n * Get a script export from a script file.\n *\n * @param scriptFile The path to the script file\n * @returns The script export\n */\nfunction getScriptExportByScriptFile(\n scriptFile: string\n): ScriptExportInterface {\n const scriptExport = getScriptExport(scriptFile);\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const extractFile = getExtractFile(scriptSkeleton);\n if (!extractFile) {\n return scriptExport;\n }\n\n const scriptRaw = fs.readFileSync(extractFile, 'utf8');\n scriptSkeleton.script = scriptRaw.split('\\n');\n\n return scriptExport;\n}\n\n/**\n * Get an extract file from a script skeleton.\n *\n * @param scriptSkeleton The script skeleton\n * @returns The extract file or null if there is no extract file\n */\nfunction getExtractFile(scriptSkeleton: ScriptSkeleton): string | null {\n const extractFile = scriptSkeleton.script;\n if (Array.isArray(extractFile)) {\n return null;\n }\n if (\n extractFile.startsWith('file://') &&\n (extractFile.endsWith('.js') || extractFile.endsWith('.groovy'))\n ) {\n return extractFile.replace('file://', '');\n }\n return null;\n}\n\n/**\n * Get a script export from a file.\n *\n * @param file The path to a script export file\n * @returns The script export\n */\nfunction getScriptExport(file: string): ScriptExportInterface {\n const scriptExportRaw = fs.readFileSync(file, 'utf8');\n const scriptExport = JSON.parse(scriptExportRaw) as ScriptExportInterface;\n\n return scriptExport;\n}\n\n/**\n * Get the main script skeleton from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script Get the main script skeleton from a script export\n * @returns The main script skeleton\n */\nfunction getScriptSkeleton(script: ScriptExportInterface): ScriptSkeleton {\n const scriptId = getScriptId(script);\n return script.script[scriptId];\n}\n\n/**\n * Get the main script ID from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script The script export\n * @returns The main script ID\n */\nfunction getScriptId(script: ScriptExportInterface): string {\n const scriptIds = Object.keys(script.script);\n if (scriptIds.length !== 1) {\n throw new Error(`Expected 1 script, found ${scriptIds.length}`);\n }\n return scriptIds[0];\n}\n\n/**\n * Delete script by id\n * @param {String} id script id\n */\nexport async function deleteScriptId(id) {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting ${id}...`\n );\n try {\n await deleteScript(id);\n stopProgressIndicator(spinnerId, `Deleted ${id}.`, 'success');\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete script by name\n * @param {String} name script name\n */\nexport async function deleteScriptName(name) {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting ${name}...`\n );\n try {\n await deleteScriptByName(name);\n stopProgressIndicator(spinnerId, `Deleted ${name}.`, 'success');\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete all non-default scripts\n */\nexport async function deleteAllScripts() {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting all non-default scripts...`\n );\n try {\n await deleteScripts();\n stopProgressIndicator(\n spinnerId,\n `Deleted all non-default scripts.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n}\n"],"mappings":"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"}
|