@rockcarver/frodo-cli 0.18.2-7 → 0.18.2-9
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 +12 -1
- package/esm/app.js +2 -2
- package/esm/app.js.map +1 -1
- package/esm/cli/_template/something-delete.js +7 -4
- package/esm/cli/_template/something-delete.js.map +1 -1
- package/esm/cli/_template/something-describe.js +7 -4
- package/esm/cli/_template/something-describe.js.map +1 -1
- package/esm/cli/_template/something-else-delete.js +7 -4
- package/esm/cli/_template/something-else-delete.js.map +1 -1
- package/esm/cli/_template/something-else-describe.js +7 -4
- package/esm/cli/_template/something-else-describe.js.map +1 -1
- package/esm/cli/_template/something-else-export.js +7 -4
- package/esm/cli/_template/something-else-export.js.map +1 -1
- package/esm/cli/_template/something-else-import.js +7 -4
- package/esm/cli/_template/something-else-import.js.map +1 -1
- package/esm/cli/_template/something-else-list.js +7 -4
- package/esm/cli/_template/something-else-list.js.map +1 -1
- package/esm/cli/_template/something-else.js.map +1 -1
- package/esm/cli/_template/something-export.js +7 -4
- package/esm/cli/_template/something-export.js.map +1 -1
- package/esm/cli/_template/something-import.js +7 -4
- package/esm/cli/_template/something-import.js.map +1 -1
- package/esm/cli/_template/something-list.js +7 -4
- package/esm/cli/_template/something-list.js.map +1 -1
- package/esm/cli/_template/something-other-delete.js +7 -4
- package/esm/cli/_template/something-other-delete.js.map +1 -1
- package/esm/cli/_template/something-other-describe.js +7 -4
- package/esm/cli/_template/something-other-describe.js.map +1 -1
- package/esm/cli/_template/something-other-export.js +7 -4
- package/esm/cli/_template/something-other-export.js.map +1 -1
- package/esm/cli/_template/something-other-import.js +7 -4
- package/esm/cli/_template/something-other-import.js.map +1 -1
- package/esm/cli/_template/something-other-list.js +7 -4
- package/esm/cli/_template/something-other-list.js.map +1 -1
- package/esm/cli/_template/something-other.js.map +1 -1
- package/esm/cli/_template/something.js +0 -2
- package/esm/cli/_template/something.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +5 -3
- 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 +7 -11
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-get-access-token.js +5 -3
- package/esm/cli/admin/admin-get-access-token.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +5 -3
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js +5 -3
- 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 +5 -3
- 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 +5 -3
- 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 +5 -3
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +5 -3
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +5 -3
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +5 -3
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-show-generic-extension-attributes.js +5 -3
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin.js +0 -2
- package/esm/cli/admin/admin.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +9 -7
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-describe.js +7 -4
- package/esm/cli/agent/agent-describe.js.map +1 -1
- package/esm/cli/agent/agent-export.js +11 -6
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +9 -7
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-describe.js +7 -4
- package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +11 -6
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +13 -7
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +5 -3
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-gateway.js.map +1 -1
- package/esm/cli/agent/agent-import.js +13 -7
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +9 -7
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-describe.js +7 -4
- package/esm/cli/agent/agent-java-describe.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +11 -6
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +13 -7
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +5 -3
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-java.js.map +1 -1
- package/esm/cli/agent/agent-list.js +5 -3
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +9 -7
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-describe.js +7 -4
- package/esm/cli/agent/agent-web-describe.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +11 -6
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +13 -7
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +5 -3
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/agent/agent-web.js.map +1 -1
- package/esm/cli/agent/agent.js +0 -2
- package/esm/cli/agent/agent.js.map +1 -1
- package/esm/cli/app/app-delete.js +7 -4
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-describe.js +7 -4
- package/esm/cli/app/app-describe.js.map +1 -1
- package/esm/cli/app/app-export.js +11 -6
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +9 -5
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +5 -3
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/app/app.js +8 -5
- package/esm/cli/app/app.js.map +1 -1
- package/esm/cli/cmd_common.js +2 -1
- package/esm/cli/cmd_common.js.map +1 -1
- package/esm/cli/conn/conn-add.js +5 -5
- package/esm/cli/conn/conn-add.js.map +1 -1
- package/esm/cli/conn/conn-delete.js +5 -2
- package/esm/cli/conn/conn-delete.js.map +1 -1
- package/esm/cli/conn/conn-describe.js +5 -2
- package/esm/cli/conn/conn-describe.js.map +1 -1
- package/esm/cli/conn/conn-list.js +7 -3
- package/esm/cli/conn/conn-list.js.map +1 -1
- package/esm/cli/conn/conn.js +2 -3
- package/esm/cli/conn/conn.js.map +1 -1
- package/esm/cli/email/email-template-export.js +13 -12
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +15 -14
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +7 -7
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/email/email-template.js.map +1 -1
- package/esm/cli/email/email.js +0 -2
- package/esm/cli/email/email.js.map +1 -1
- package/esm/cli/esv/esv-apply.js +9 -11
- package/esm/cli/esv/esv-apply.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +5 -3
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +9 -5
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +5 -3
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +7 -4
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-import.js +7 -4
- package/esm/cli/esv/esv-secret-import.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +5 -3
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +5 -3
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +7 -4
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +5 -3
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +7 -4
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +7 -4
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +5 -3
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-version.js.map +1 -1
- package/esm/cli/esv/esv-secret.js +4 -1
- package/esm/cli/esv/esv-secret.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +5 -3
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +9 -5
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +5 -3
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +7 -4
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-import.js +7 -4
- package/esm/cli/esv/esv-variable-import.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +5 -3
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +7 -4
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/esv/esv-variable.js +4 -1
- package/esm/cli/esv/esv-variable.js.map +1 -1
- package/esm/cli/esv/esv.js +0 -2
- package/esm/cli/esv/esv.js.map +1 -1
- package/esm/cli/idm/idm-count.js +5 -3
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +11 -6
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +11 -6
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +7 -4
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idm/idm.js +2 -3
- package/esm/cli/idm/idm.js.map +1 -1
- package/esm/cli/idp/idp-export.js +11 -6
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +13 -7
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +7 -4
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/idp/idp.js +0 -2
- package/esm/cli/idp/idp.js.map +1 -1
- package/esm/cli/info/info.js +0 -5
- package/esm/cli/info/info.js.map +1 -1
- package/esm/cli/journey/journey-delete.e2e.test_.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +9 -5
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +31 -28
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +9 -6
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +9 -6
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-export.js +11 -6
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +13 -7
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.e2e.test_.js.map +1 -1
- package/esm/cli/journey/journey-list.js +5 -3
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +5 -5
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/journey/journey.js +0 -2
- package/esm/cli/journey/journey.js.map +1 -1
- package/esm/cli/logging/logs-fetch.js +2 -11
- package/esm/cli/logging/logs-fetch.js.map +1 -1
- package/esm/cli/logging/logs-list.js +0 -5
- package/esm/cli/logging/logs-list.js.map +1 -1
- package/esm/cli/logging/logs-tail.js +0 -4
- package/esm/cli/logging/logs-tail.js.map +1 -1
- package/esm/cli/logging/logs.js +2 -4
- package/esm/cli/logging/logs.js.map +1 -1
- package/esm/cli/realm/realm-add-custom-domain.js +5 -3
- package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm-describe.js +5 -3
- package/esm/cli/realm/realm-describe.js.map +1 -1
- package/esm/cli/realm/realm-list.js +5 -3
- package/esm/cli/realm/realm-list.js.map +1 -1
- package/esm/cli/realm/realm-remove-custom-domain.js +5 -3
- package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm.js +5 -4
- package/esm/cli/realm/realm.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +11 -6
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-import.js +13 -7
- package/esm/cli/saml/saml-cot-import.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +5 -3
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-cot.js.map +1 -1
- package/esm/cli/saml/saml-delete.js +11 -6
- package/esm/cli/saml/saml-delete.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +5 -3
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +13 -7
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +13 -7
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +5 -3
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +7 -4
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/saml/saml-metadata.js.map +1 -1
- package/esm/cli/saml/saml.js +0 -2
- package/esm/cli/saml/saml.js.map +1 -1
- package/esm/cli/script/script-delete.js +7 -4
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-describe.js +7 -4
- package/esm/cli/script/script-describe.js.map +1 -1
- package/esm/cli/script/script-export.js +15 -8
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +7 -4
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/script/script-list.js +5 -3
- package/esm/cli/script/script-list.js.map +1 -1
- package/esm/cli/script/script.js +6 -4
- package/esm/cli/script/script.js.map +1 -1
- package/esm/cli/service/service-delete.js +0 -1
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +11 -6
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +13 -6
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +0 -1
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/service/service.js +0 -2
- package/esm/cli/service/service.js.map +1 -1
- package/esm/cli/theme/theme-delete.e2e.test_.js.map +1 -1
- package/esm/cli/theme/theme-delete.js +16 -14
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +17 -15
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +19 -17
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.e2e.test_.js.map +1 -1
- package/esm/cli/theme/theme-list.js +7 -7
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/cli/theme/theme.js +0 -2
- package/esm/cli/theme/theme.js.map +1 -1
- package/esm/ops/AgentOps.js +48 -126
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +2 -2
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +270 -6
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdpOps.js +2 -2
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +96 -152
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/NodeOps.js +6 -12
- package/esm/ops/NodeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +25 -78
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/Saml2Ops.test_.js.map +1 -1
- package/esm/ops/ScriptOps.js +3 -3
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +10 -31
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +331 -2
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/utils/Wordwrap.js.map +1 -1
- package/esm/storage/StaticStorage.js.map +1 -1
- package/esm/utils/Config.js +0 -9
- package/esm/utils/Config.js.map +1 -1
- package/esm/utils/Console.js +32 -79
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +46 -0
- package/esm/utils/ExportImportUtils.js.map +1 -0
- package/esm/utils/Version.js +6 -24
- package/esm/utils/Version.js.map +1 -1
- package/package.json +18 -17
package/esm/ops/ThemeOps.js
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import { Theme, ExportImportUtils } from '@rockcarver/frodo-lib';
|
|
3
|
+
import { printMessage, createTable, createProgressIndicator, updateProgressIndicator, stopProgressIndicator } from '../utils/Console';
|
|
4
|
+
import { saveToFile, getTypedFilename } from '../utils/ExportImportUtils';
|
|
5
|
+
const {
|
|
6
|
+
getTheme,
|
|
7
|
+
getThemes,
|
|
8
|
+
getThemeByName,
|
|
9
|
+
putThemeByName,
|
|
10
|
+
putTheme,
|
|
11
|
+
putThemes,
|
|
12
|
+
deleteTheme,
|
|
13
|
+
deleteThemeByName,
|
|
14
|
+
deleteThemes
|
|
15
|
+
} = Theme;
|
|
16
|
+
const {
|
|
17
|
+
getRealmString,
|
|
18
|
+
validateImport
|
|
19
|
+
} = ExportImportUtils;
|
|
1
20
|
/**
|
|
2
21
|
* Get a one-line description of the theme
|
|
3
22
|
* @param {ThemeSkeleton} themeObj theme object to describe
|
|
@@ -7,25 +26,335 @@ export function getOneLineDescription(themeObj) {
|
|
|
7
26
|
const description = `[${themeObj._id['brightCyan']}] ${themeObj.name}${themeObj.linkedTrees ? ' (' + themeObj.linkedTrees.join(', ')['brightCyan'] + ')' : ''}`;
|
|
8
27
|
return description;
|
|
9
28
|
}
|
|
29
|
+
|
|
10
30
|
/**
|
|
11
31
|
* Get markdown table header
|
|
12
32
|
* @returns {string} markdown table header
|
|
13
33
|
*/
|
|
14
|
-
|
|
15
34
|
export function getTableHeaderMd() {
|
|
16
35
|
let markdown = '';
|
|
17
36
|
markdown += '| Name | Linked Journey(s) | Id |\n';
|
|
18
37
|
markdown += '| ---- | ----------------- | ---|';
|
|
19
38
|
return markdown;
|
|
20
39
|
}
|
|
40
|
+
|
|
21
41
|
/**
|
|
22
42
|
* Get a table-row of the theme in markdown
|
|
23
43
|
* @param {ThemeSkeleton} themeObj theme object to describe
|
|
24
44
|
* @returns {string} a table-row of the theme in markdown
|
|
25
45
|
*/
|
|
26
|
-
|
|
27
46
|
export function getTableRowMd(themeObj) {
|
|
28
47
|
const row = `| ${themeObj.name} | ${themeObj.linkedTrees ? themeObj.linkedTrees.join(', ') : ''} | \`${themeObj._id}\` |`;
|
|
29
48
|
return row;
|
|
30
49
|
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* List all the themes
|
|
53
|
+
* @param {boolean} long Long version, more fields
|
|
54
|
+
*/
|
|
55
|
+
export async function listThemes(long = false) {
|
|
56
|
+
const themeList = await getThemes();
|
|
57
|
+
themeList.sort((a, b) => a.name.localeCompare(b.name));
|
|
58
|
+
if (!long) {
|
|
59
|
+
themeList.forEach(theme => {
|
|
60
|
+
printMessage(`${theme.isDefault ? theme.name['brightCyan'] : theme.name}`, 'data');
|
|
61
|
+
});
|
|
62
|
+
} else {
|
|
63
|
+
const table = createTable(['Name'['brightCyan'], 'Id'['brightCyan'], 'Default'['brightCyan']]);
|
|
64
|
+
themeList.forEach(theme => {
|
|
65
|
+
table.push([`${theme.name}`, `${theme._id}`, `${theme.isDefault ? 'Yes'['brightGreen'] : ''}`]);
|
|
66
|
+
});
|
|
67
|
+
printMessage(table.toString(), 'data');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Export theme by name to file
|
|
73
|
+
* @param {String} name theme name
|
|
74
|
+
* @param {String} file optional export file name
|
|
75
|
+
*/
|
|
76
|
+
export async function exportThemeByName(name, file) {
|
|
77
|
+
let fileName = getTypedFilename(name, 'theme');
|
|
78
|
+
if (file) {
|
|
79
|
+
fileName = file;
|
|
80
|
+
}
|
|
81
|
+
createProgressIndicator('determinate', 1, `Exporting ${name}`);
|
|
82
|
+
try {
|
|
83
|
+
const themeData = await getThemeByName(name);
|
|
84
|
+
updateProgressIndicator(`Writing file ${fileName}`);
|
|
85
|
+
saveToFile('theme', [themeData], '_id', fileName);
|
|
86
|
+
stopProgressIndicator(`Successfully exported theme ${name}.`);
|
|
87
|
+
} catch (error) {
|
|
88
|
+
stopProgressIndicator(`${error.message}`);
|
|
89
|
+
printMessage(`${error.message}`, 'error');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Export theme by uuid to file
|
|
95
|
+
* @param {String} id theme uuid
|
|
96
|
+
* @param {String} file optional export file name
|
|
97
|
+
*/
|
|
98
|
+
export async function exportThemeById(id, file) {
|
|
99
|
+
let fileName = getTypedFilename(id, 'theme');
|
|
100
|
+
if (file) {
|
|
101
|
+
fileName = file;
|
|
102
|
+
}
|
|
103
|
+
createProgressIndicator('determinate', 1, `Exporting ${id}`);
|
|
104
|
+
try {
|
|
105
|
+
const themeData = await getTheme(id);
|
|
106
|
+
updateProgressIndicator(`Writing file ${fileName}`);
|
|
107
|
+
saveToFile('theme', [themeData], '_id', fileName);
|
|
108
|
+
stopProgressIndicator(`Successfully exported theme ${id}.`);
|
|
109
|
+
} catch (error) {
|
|
110
|
+
stopProgressIndicator(`${error.message}`);
|
|
111
|
+
printMessage(`${error.message}`, 'error');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Export all themes to file
|
|
117
|
+
* @param {String} file optional export file name
|
|
118
|
+
*/
|
|
119
|
+
export async function exportThemesToFile(file) {
|
|
120
|
+
let fileName = getTypedFilename(`all${getRealmString()}Themes`, 'theme');
|
|
121
|
+
if (file) {
|
|
122
|
+
fileName = file;
|
|
123
|
+
}
|
|
124
|
+
const allThemesData = await getThemes();
|
|
125
|
+
createProgressIndicator('determinate', allThemesData.length, 'Exporting themes');
|
|
126
|
+
for (const themeData of allThemesData) {
|
|
127
|
+
updateProgressIndicator(`Exporting theme ${themeData.name}`);
|
|
128
|
+
}
|
|
129
|
+
saveToFile('theme', allThemesData, '_id', fileName);
|
|
130
|
+
stopProgressIndicator(`${allThemesData.length} themes exported to ${fileName}.`);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Export all themes to separate files
|
|
135
|
+
*/
|
|
136
|
+
export async function exportThemesToFiles() {
|
|
137
|
+
const allThemesData = await getThemes();
|
|
138
|
+
createProgressIndicator('determinate', allThemesData.length, 'Exporting themes');
|
|
139
|
+
for (const themeData of allThemesData) {
|
|
140
|
+
updateProgressIndicator(`Writing theme ${themeData.name}`);
|
|
141
|
+
const fileName = getTypedFilename(themeData.name, 'theme');
|
|
142
|
+
saveToFile('theme', themeData, '_id', fileName);
|
|
143
|
+
}
|
|
144
|
+
stopProgressIndicator(`${allThemesData.length} themes exported.`);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Import theme by name from file
|
|
149
|
+
* @param {String} name theme name
|
|
150
|
+
* @param {String} file import file name
|
|
151
|
+
*/
|
|
152
|
+
export async function importThemeByName(name, file) {
|
|
153
|
+
fs.readFile(file, 'utf8', async (err, data) => {
|
|
154
|
+
if (err) throw err;
|
|
155
|
+
const themeData = JSON.parse(data);
|
|
156
|
+
if (validateImport(themeData.meta)) {
|
|
157
|
+
createProgressIndicator('determinate', 1, 'Importing theme...');
|
|
158
|
+
let found = false;
|
|
159
|
+
for (const id in themeData.theme) {
|
|
160
|
+
if ({}.hasOwnProperty.call(themeData.theme, id)) {
|
|
161
|
+
if (themeData.theme[id].name === name) {
|
|
162
|
+
found = true;
|
|
163
|
+
updateProgressIndicator(`Importing ${themeData.theme[id].name}`);
|
|
164
|
+
try {
|
|
165
|
+
await putThemeByName(name, themeData.theme[id]);
|
|
166
|
+
stopProgressIndicator(`Successfully imported theme ${name}.`);
|
|
167
|
+
} catch (error) {
|
|
168
|
+
stopProgressIndicator(`Error importing theme ${themeData.theme[id].name}: ${error.message}`);
|
|
169
|
+
printMessage(`Error importing theme ${themeData.theme[id].name}: ${error.message}`, 'error');
|
|
170
|
+
}
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (!found) {
|
|
176
|
+
stopProgressIndicator(`Theme ${name} not found!`);
|
|
177
|
+
}
|
|
178
|
+
} else {
|
|
179
|
+
printMessage('Import validation failed...', 'error');
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Import theme by uuid from file
|
|
186
|
+
* @param {String} id theme uuid
|
|
187
|
+
* @param {String} file import file name
|
|
188
|
+
*/
|
|
189
|
+
export async function importThemeById(id, file) {
|
|
190
|
+
fs.readFile(file, 'utf8', async (err, data) => {
|
|
191
|
+
if (err) throw err;
|
|
192
|
+
const themeData = JSON.parse(data);
|
|
193
|
+
if (validateImport(themeData.meta)) {
|
|
194
|
+
createProgressIndicator('determinate', 1, 'Importing theme...');
|
|
195
|
+
let found = false;
|
|
196
|
+
for (const themeId in themeData.theme) {
|
|
197
|
+
if ({}.hasOwnProperty.call(themeData.theme, themeId)) {
|
|
198
|
+
if (themeId === id) {
|
|
199
|
+
found = true;
|
|
200
|
+
updateProgressIndicator(`Importing ${themeData.theme[themeId]._id}`);
|
|
201
|
+
try {
|
|
202
|
+
await putTheme(themeId, themeData.theme[themeId]);
|
|
203
|
+
stopProgressIndicator(`Successfully imported theme ${id}.`);
|
|
204
|
+
} catch (error) {
|
|
205
|
+
stopProgressIndicator(`Error importing theme ${themeData.theme[themeId]._id}: ${error.message}`);
|
|
206
|
+
printMessage(`Error importing theme ${themeData.theme[themeId]._id}: ${error.message}`, 'error');
|
|
207
|
+
}
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (!found) {
|
|
213
|
+
stopProgressIndicator(`Theme ${id} not found!`);
|
|
214
|
+
}
|
|
215
|
+
} else {
|
|
216
|
+
printMessage('Import validation failed...', 'error');
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Import all themes from single file
|
|
223
|
+
* @param {String} file import file name
|
|
224
|
+
*/
|
|
225
|
+
export async function importThemesFromFile(file) {
|
|
226
|
+
fs.readFile(file, 'utf8', (err, data) => {
|
|
227
|
+
if (err) throw err;
|
|
228
|
+
const fileData = JSON.parse(data);
|
|
229
|
+
if (validateImport(fileData.meta)) {
|
|
230
|
+
createProgressIndicator('determinate', Object.keys(fileData.theme).length, 'Importing themes...');
|
|
231
|
+
for (const id in fileData.theme) {
|
|
232
|
+
if ({}.hasOwnProperty.call(fileData.theme, id)) {
|
|
233
|
+
updateProgressIndicator(`Importing ${fileData.theme[id].name}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
putThemes(fileData.theme).then(result => {
|
|
237
|
+
if (result == null) {
|
|
238
|
+
stopProgressIndicator(`Error importing ${Object.keys(fileData.theme).length} themes!`);
|
|
239
|
+
printMessage(`Error importing ${Object.keys(fileData.theme).length} themes from ${file}`, 'error');
|
|
240
|
+
} else {
|
|
241
|
+
stopProgressIndicator(`Successfully imported ${Object.keys(fileData.theme).length} themes.`);
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
} else {
|
|
245
|
+
printMessage('Import validation failed...', 'error');
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Import themes from separate files
|
|
252
|
+
*/
|
|
253
|
+
export async function importThemesFromFiles() {
|
|
254
|
+
const names = fs.readdirSync('.');
|
|
255
|
+
const jsonFiles = names.filter(name => name.toLowerCase().endsWith('.theme.json'));
|
|
256
|
+
createProgressIndicator('determinate', jsonFiles.length, 'Importing themes...');
|
|
257
|
+
let fileData = null;
|
|
258
|
+
let count = 0;
|
|
259
|
+
let total = 0;
|
|
260
|
+
let files = 0;
|
|
261
|
+
for (const file of jsonFiles) {
|
|
262
|
+
const data = fs.readFileSync(file, 'utf8');
|
|
263
|
+
fileData = JSON.parse(data);
|
|
264
|
+
if (validateImport(fileData.meta)) {
|
|
265
|
+
count = Object.keys(fileData.theme).length;
|
|
266
|
+
// eslint-disable-next-line no-await-in-loop
|
|
267
|
+
const result = await putThemes(fileData.theme);
|
|
268
|
+
if (result == null) {
|
|
269
|
+
printMessage(`Error importing ${count} themes from ${file}`, 'error');
|
|
270
|
+
} else {
|
|
271
|
+
files += 1;
|
|
272
|
+
total += count;
|
|
273
|
+
updateProgressIndicator(`Imported ${count} theme(s) from ${file}`);
|
|
274
|
+
}
|
|
275
|
+
} else {
|
|
276
|
+
printMessage(`Validation of ${file} failed!`, 'error');
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
stopProgressIndicator(`Finished importing ${total} theme(s) from ${files} file(s).`);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Import first theme from file
|
|
284
|
+
* @param {String} file import file name
|
|
285
|
+
*/
|
|
286
|
+
export async function importFirstThemeFromFile(file) {
|
|
287
|
+
fs.readFile(file, 'utf8', (err, data) => {
|
|
288
|
+
if (err) throw err;
|
|
289
|
+
const themeData = JSON.parse(data);
|
|
290
|
+
if (validateImport(themeData.meta)) {
|
|
291
|
+
createProgressIndicator('determinate', 1, 'Importing theme...');
|
|
292
|
+
for (const id in themeData.theme) {
|
|
293
|
+
if ({}.hasOwnProperty.call(themeData.theme, id)) {
|
|
294
|
+
updateProgressIndicator(`Importing ${themeData.theme[id].name}`);
|
|
295
|
+
putTheme(id, themeData.theme[id]).then(result => {
|
|
296
|
+
if (result == null) {
|
|
297
|
+
stopProgressIndicator(`Error importing theme ${themeData.theme[id].name}`);
|
|
298
|
+
printMessage(`Error importing theme ${themeData.theme[id].name}`, 'error');
|
|
299
|
+
} else {
|
|
300
|
+
stopProgressIndicator(`Successfully imported theme ${themeData.theme[id].name}`);
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
} else {
|
|
307
|
+
printMessage('Import validation failed...', 'error');
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Delete theme by id
|
|
314
|
+
* @param {String} id theme id
|
|
315
|
+
*/
|
|
316
|
+
export async function deleteThemeCmd(id) {
|
|
317
|
+
createProgressIndicator('indeterminate', undefined, `Deleting ${id}...`);
|
|
318
|
+
try {
|
|
319
|
+
await deleteTheme(id);
|
|
320
|
+
stopProgressIndicator(`Deleted ${id}.`, 'success');
|
|
321
|
+
} catch (error) {
|
|
322
|
+
stopProgressIndicator(`Error: ${error.message}`, 'fail');
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Delete theme by name
|
|
328
|
+
* @param {String} name theme name
|
|
329
|
+
*/
|
|
330
|
+
export async function deleteThemeByNameCmd(name) {
|
|
331
|
+
createProgressIndicator('indeterminate', undefined, `Deleting ${name}...`);
|
|
332
|
+
try {
|
|
333
|
+
await deleteThemeByName(name);
|
|
334
|
+
stopProgressIndicator(`Deleted ${name}.`, 'success');
|
|
335
|
+
} catch (error) {
|
|
336
|
+
stopProgressIndicator(`Error: ${error.message}`, 'fail');
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Delete all themes
|
|
342
|
+
*/
|
|
343
|
+
export async function deleteAllThemes() {
|
|
344
|
+
createProgressIndicator('indeterminate', undefined, `Deleting all realm themes...`);
|
|
345
|
+
try {
|
|
346
|
+
await deleteThemes();
|
|
347
|
+
stopProgressIndicator(`Deleted all realm themes.`, 'success');
|
|
348
|
+
} catch (error) {
|
|
349
|
+
stopProgressIndicator(`Error: ${error.message}`, 'fail');
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Delete all themes
|
|
355
|
+
* @deprecated since version 0.14.0
|
|
356
|
+
*/
|
|
357
|
+
export async function deleteThemesCmd() {
|
|
358
|
+
return deleteAllThemes();
|
|
359
|
+
}
|
|
31
360
|
//# sourceMappingURL=ThemeOps.js.map
|
package/esm/ops/ThemeOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeOps.js","names":["getOneLineDescription","themeObj","description","_id","name","linkedTrees","join","getTableHeaderMd","markdown","getTableRowMd","row"],"sources":["ops/ThemeOps.ts"],"sourcesContent":["import { ThemeSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\n\n/**\n * Get a one-line description of the theme\n * @param {ThemeSkeleton} themeObj theme object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(themeObj: ThemeSkeleton): string {\n const description = `[${themeObj._id['brightCyan']}] ${themeObj.name}${\n themeObj.linkedTrees\n ? ' (' + themeObj.linkedTrees.join(', ')['brightCyan'] + ')'\n : ''\n }`;\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 | Linked Journey(s) | Id |\\n';\n markdown += '| ---- | ----------------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the theme in markdown\n * @param {ThemeSkeleton} themeObj theme object to describe\n * @returns {string} a table-row of the theme in markdown\n */\nexport function getTableRowMd(themeObj: ThemeSkeleton): string {\n const row = `| ${themeObj.name} | ${\n themeObj.linkedTrees ? themeObj.linkedTrees.join(', ') : ''\n } | \\`${themeObj._id}\\` |`;\n return row;\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,qBAAT,CAA+BC,QAA/B,EAAgE;EACrE,MAAMC,WAAW,GAAI,IAAGD,QAAQ,CAACE,GAAT,CAAa,YAAb,CAA2B,KAAIF,QAAQ,CAACG,IAAK,GACnEH,QAAQ,CAACI,WAAT,GACI,OAAOJ,QAAQ,CAACI,WAAT,CAAqBC,IAArB,CAA0B,IAA1B,EAAgC,YAAhC,CAAP,GAAuD,GAD3D,GAEI,EACL,EAJD;EAKA,OAAOJ,WAAP;AACD;AAED;AACA;AACA;AACA;;AACA,OAAO,SAASK,gBAAT,GAAoC;EACzC,IAAIC,QAAQ,GAAG,EAAf;EACAA,QAAQ,IAAI,qCAAZ;EACAA,QAAQ,IAAI,mCAAZ;EACA,OAAOA,QAAP;AACD;AAED;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,aAAT,CAAuBR,QAAvB,EAAwD;EAC7D,MAAMS,GAAG,GAAI,KAAIT,QAAQ,CAACG,IAAK,MAC7BH,QAAQ,CAACI,WAAT,GAAuBJ,QAAQ,CAACI,WAAT,CAAqBC,IAArB,CAA0B,IAA1B,CAAvB,GAAyD,EAC1D,QAAOL,QAAQ,CAACE,GAAI,MAFrB;EAGA,OAAOO,GAAP;AACD"}
|
|
1
|
+
{"version":3,"file":"ThemeOps.js","names":["fs","Theme","ExportImportUtils","printMessage","createTable","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","saveToFile","getTypedFilename","getTheme","getThemes","getThemeByName","putThemeByName","putTheme","putThemes","deleteTheme","deleteThemeByName","deleteThemes","getRealmString","validateImport","getOneLineDescription","themeObj","description","_id","name","linkedTrees","join","getTableHeaderMd","markdown","getTableRowMd","row","listThemes","long","themeList","sort","a","b","localeCompare","forEach","theme","isDefault","table","push","toString","exportThemeByName","file","fileName","themeData","error","message","exportThemeById","id","exportThemesToFile","allThemesData","length","exportThemesToFiles","importThemeByName","readFile","err","data","JSON","parse","meta","found","hasOwnProperty","call","importThemeById","themeId","importThemesFromFile","fileData","Object","keys","then","result","importThemesFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","count","total","files","readFileSync","importFirstThemeFromFile","deleteThemeCmd","undefined","deleteThemeByNameCmd","deleteAllThemes","deleteThemesCmd"],"sources":["ops/ThemeOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { Theme, ExportImportUtils } from '@rockcarver/frodo-lib';\nimport { ThemeSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport {\n printMessage,\n createTable,\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { saveToFile, getTypedFilename } from '../utils/ExportImportUtils';\n\nconst {\n getTheme,\n getThemes,\n getThemeByName,\n putThemeByName,\n putTheme,\n putThemes,\n deleteTheme,\n deleteThemeByName,\n deleteThemes,\n} = Theme;\nconst { getRealmString, validateImport } = ExportImportUtils;\n/**\n * Get a one-line description of the theme\n * @param {ThemeSkeleton} themeObj theme object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(themeObj: ThemeSkeleton): string {\n const description = `[${themeObj._id['brightCyan']}] ${themeObj.name}${\n themeObj.linkedTrees\n ? ' (' + themeObj.linkedTrees.join(', ')['brightCyan'] + ')'\n : ''\n }`;\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 | Linked Journey(s) | Id |\\n';\n markdown += '| ---- | ----------------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the theme in markdown\n * @param {ThemeSkeleton} themeObj theme object to describe\n * @returns {string} a table-row of the theme in markdown\n */\nexport function getTableRowMd(themeObj: ThemeSkeleton): string {\n const row = `| ${themeObj.name} | ${\n themeObj.linkedTrees ? themeObj.linkedTrees.join(', ') : ''\n } | \\`${themeObj._id}\\` |`;\n return row;\n}\n\n/**\n * List all the themes\n * @param {boolean} long Long version, more fields\n */\nexport async function listThemes(long = false) {\n const themeList = await getThemes();\n themeList.sort((a, b) => a.name.localeCompare(b.name));\n if (!long) {\n themeList.forEach((theme) => {\n printMessage(\n `${theme.isDefault ? theme.name['brightCyan'] : theme.name}`,\n 'data'\n );\n });\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Id'['brightCyan'],\n 'Default'['brightCyan'],\n ]);\n themeList.forEach((theme) => {\n table.push([\n `${theme.name}`,\n `${theme._id}`,\n `${theme.isDefault ? 'Yes'['brightGreen'] : ''}`,\n ]);\n });\n printMessage(table.toString(), 'data');\n }\n}\n\n/**\n * Export theme by name to file\n * @param {String} name theme name\n * @param {String} file optional export file name\n */\nexport async function exportThemeByName(name, file) {\n let fileName = getTypedFilename(name, 'theme');\n if (file) {\n fileName = file;\n }\n createProgressIndicator('determinate', 1, `Exporting ${name}`);\n try {\n const themeData = await getThemeByName(name);\n updateProgressIndicator(`Writing file ${fileName}`);\n saveToFile('theme', [themeData], '_id', fileName);\n stopProgressIndicator(`Successfully exported theme ${name}.`);\n } catch (error) {\n stopProgressIndicator(`${error.message}`);\n printMessage(`${error.message}`, 'error');\n }\n}\n\n/**\n * Export theme by uuid to file\n * @param {String} id theme uuid\n * @param {String} file optional export file name\n */\nexport async function exportThemeById(id, file) {\n let fileName = getTypedFilename(id, 'theme');\n if (file) {\n fileName = file;\n }\n createProgressIndicator('determinate', 1, `Exporting ${id}`);\n try {\n const themeData = await getTheme(id);\n updateProgressIndicator(`Writing file ${fileName}`);\n saveToFile('theme', [themeData], '_id', fileName);\n stopProgressIndicator(`Successfully exported theme ${id}.`);\n } catch (error) {\n stopProgressIndicator(`${error.message}`);\n printMessage(`${error.message}`, 'error');\n }\n}\n\n/**\n * Export all themes to file\n * @param {String} file optional export file name\n */\nexport async function exportThemesToFile(file) {\n let fileName = getTypedFilename(`all${getRealmString()}Themes`, 'theme');\n if (file) {\n fileName = file;\n }\n const allThemesData = await getThemes();\n createProgressIndicator(\n 'determinate',\n allThemesData.length,\n 'Exporting themes'\n );\n for (const themeData of allThemesData) {\n updateProgressIndicator(`Exporting theme ${themeData.name}`);\n }\n saveToFile('theme', allThemesData, '_id', fileName);\n stopProgressIndicator(\n `${allThemesData.length} themes exported to ${fileName}.`\n );\n}\n\n/**\n * Export all themes to separate files\n */\nexport async function exportThemesToFiles() {\n const allThemesData = await getThemes();\n createProgressIndicator(\n 'determinate',\n allThemesData.length,\n 'Exporting themes'\n );\n for (const themeData of allThemesData) {\n updateProgressIndicator(`Writing theme ${themeData.name}`);\n const fileName = getTypedFilename(themeData.name, 'theme');\n saveToFile('theme', themeData, '_id', fileName);\n }\n stopProgressIndicator(`${allThemesData.length} themes exported.`);\n}\n\n/**\n * Import theme by name from file\n * @param {String} name theme name\n * @param {String} file import file name\n */\nexport async function importThemeByName(name, file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const themeData = JSON.parse(data);\n if (validateImport(themeData.meta)) {\n createProgressIndicator('determinate', 1, 'Importing theme...');\n let found = false;\n for (const id in themeData.theme) {\n if ({}.hasOwnProperty.call(themeData.theme, id)) {\n if (themeData.theme[id].name === name) {\n found = true;\n updateProgressIndicator(`Importing ${themeData.theme[id].name}`);\n try {\n await putThemeByName(name, themeData.theme[id]);\n stopProgressIndicator(`Successfully imported theme ${name}.`);\n } catch (error) {\n stopProgressIndicator(\n `Error importing theme ${themeData.theme[id].name}: ${error.message}`\n );\n printMessage(\n `Error importing theme ${themeData.theme[id].name}: ${error.message}`,\n 'error'\n );\n }\n break;\n }\n }\n }\n if (!found) {\n stopProgressIndicator(`Theme ${name} not found!`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import theme by uuid from file\n * @param {String} id theme uuid\n * @param {String} file import file name\n */\nexport async function importThemeById(id, file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const themeData = JSON.parse(data);\n if (validateImport(themeData.meta)) {\n createProgressIndicator('determinate', 1, 'Importing theme...');\n let found = false;\n for (const themeId in themeData.theme) {\n if ({}.hasOwnProperty.call(themeData.theme, themeId)) {\n if (themeId === id) {\n found = true;\n updateProgressIndicator(\n `Importing ${themeData.theme[themeId]._id}`\n );\n try {\n await putTheme(themeId, themeData.theme[themeId]);\n stopProgressIndicator(`Successfully imported theme ${id}.`);\n } catch (error) {\n stopProgressIndicator(\n `Error importing theme ${themeData.theme[themeId]._id}: ${error.message}`\n );\n printMessage(\n `Error importing theme ${themeData.theme[themeId]._id}: ${error.message}`,\n 'error'\n );\n }\n break;\n }\n }\n }\n if (!found) {\n stopProgressIndicator(`Theme ${id} not found!`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all themes from single file\n * @param {String} file import file name\n */\nexport async function importThemesFromFile(file) {\n fs.readFile(file, 'utf8', (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n 'determinate',\n Object.keys(fileData.theme).length,\n 'Importing themes...'\n );\n for (const id in fileData.theme) {\n if ({}.hasOwnProperty.call(fileData.theme, id)) {\n updateProgressIndicator(`Importing ${fileData.theme[id].name}`);\n }\n }\n putThemes(fileData.theme).then((result) => {\n if (result == null) {\n stopProgressIndicator(\n `Error importing ${Object.keys(fileData.theme).length} themes!`\n );\n printMessage(\n `Error importing ${\n Object.keys(fileData.theme).length\n } themes from ${file}`,\n 'error'\n );\n } else {\n stopProgressIndicator(\n `Successfully imported ${\n Object.keys(fileData.theme).length\n } themes.`\n );\n }\n });\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import themes from separate files\n */\nexport async function importThemesFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.theme.json')\n );\n\n createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing themes...'\n );\n let fileData = null;\n let count = 0;\n let total = 0;\n let files = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n count = Object.keys(fileData.theme).length;\n // eslint-disable-next-line no-await-in-loop\n const result = await putThemes(fileData.theme);\n if (result == null) {\n printMessage(`Error importing ${count} themes from ${file}`, 'error');\n } else {\n files += 1;\n total += count;\n updateProgressIndicator(`Imported ${count} theme(s) from ${file}`);\n }\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Finished importing ${total} theme(s) from ${files} file(s).`\n );\n}\n\n/**\n * Import first theme from file\n * @param {String} file import file name\n */\nexport async function importFirstThemeFromFile(file) {\n fs.readFile(file, 'utf8', (err, data) => {\n if (err) throw err;\n const themeData = JSON.parse(data);\n if (validateImport(themeData.meta)) {\n createProgressIndicator('determinate', 1, 'Importing theme...');\n for (const id in themeData.theme) {\n if ({}.hasOwnProperty.call(themeData.theme, id)) {\n updateProgressIndicator(`Importing ${themeData.theme[id].name}`);\n putTheme(id, themeData.theme[id]).then((result) => {\n if (result == null) {\n stopProgressIndicator(\n `Error importing theme ${themeData.theme[id].name}`\n );\n printMessage(\n `Error importing theme ${themeData.theme[id].name}`,\n 'error'\n );\n } else {\n stopProgressIndicator(\n `Successfully imported theme ${themeData.theme[id].name}`\n );\n }\n });\n break;\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Delete theme by id\n * @param {String} id theme id\n */\nexport async function deleteThemeCmd(id) {\n createProgressIndicator('indeterminate', undefined, `Deleting ${id}...`);\n try {\n await deleteTheme(id);\n stopProgressIndicator(`Deleted ${id}.`, 'success');\n } catch (error) {\n stopProgressIndicator(`Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete theme by name\n * @param {String} name theme name\n */\nexport async function deleteThemeByNameCmd(name) {\n createProgressIndicator('indeterminate', undefined, `Deleting ${name}...`);\n try {\n await deleteThemeByName(name);\n stopProgressIndicator(`Deleted ${name}.`, 'success');\n } catch (error) {\n stopProgressIndicator(`Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete all themes\n */\nexport async function deleteAllThemes() {\n createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting all realm themes...`\n );\n try {\n await deleteThemes();\n stopProgressIndicator(`Deleted all realm themes.`, 'success');\n } catch (error) {\n stopProgressIndicator(`Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete all themes\n * @deprecated since version 0.14.0\n */\nexport async function deleteThemesCmd() {\n return deleteAllThemes();\n}\n"],"mappings":"AAAA,OAAOA,EAAE,MAAM,IAAI;AACnB,SAASC,KAAK,EAAEC,iBAAiB,QAAQ,uBAAuB;AAEhE,SACEC,YAAY,EACZC,WAAW,EACXC,uBAAuB,EACvBC,uBAAuB,EACvBC,qBAAqB,QAChB,kBAAkB;AACzB,SAASC,UAAU,EAAEC,gBAAgB,QAAQ,4BAA4B;AAEzE,MAAM;EACJC,QAAQ;EACRC,SAAS;EACTC,cAAc;EACdC,cAAc;EACdC,QAAQ;EACRC,SAAS;EACTC,WAAW;EACXC,iBAAiB;EACjBC;AACF,CAAC,GAAGjB,KAAK;AACT,MAAM;EAAEkB,cAAc;EAAEC;AAAe,CAAC,GAAGlB,iBAAiB;AAC5D;AACA;AACA;AACA;AACA;AACA,OAAO,SAASmB,qBAAqB,CAACC,QAAuB,EAAU;EACrE,MAAMC,WAAW,GAAI,IAAGD,QAAQ,CAACE,GAAG,CAAC,YAAY,CAAE,KAAIF,QAAQ,CAACG,IAAK,GACnEH,QAAQ,CAACI,WAAW,GAChB,IAAI,GAAGJ,QAAQ,CAACI,WAAW,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,GAAG,GAC1D,EACL,EAAC;EACF,OAAOJ,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASK,gBAAgB,GAAW;EACzC,IAAIC,QAAQ,GAAG,EAAE;EACjBA,QAAQ,IAAI,qCAAqC;EACjDA,QAAQ,IAAI,mCAAmC;EAC/C,OAAOA,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAa,CAACR,QAAuB,EAAU;EAC7D,MAAMS,GAAG,GAAI,KAAIT,QAAQ,CAACG,IAAK,MAC7BH,QAAQ,CAACI,WAAW,GAAGJ,QAAQ,CAACI,WAAW,CAACC,IAAI,CAAC,IAAI,CAAC,GAAG,EAC1D,QAAOL,QAAQ,CAACE,GAAI,MAAK;EAC1B,OAAOO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeC,UAAU,CAACC,IAAI,GAAG,KAAK,EAAE;EAC7C,MAAMC,SAAS,GAAG,MAAMvB,SAAS,EAAE;EACnCuB,SAAS,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACX,IAAI,CAACa,aAAa,CAACD,CAAC,CAACZ,IAAI,CAAC,CAAC;EACtD,IAAI,CAACQ,IAAI,EAAE;IACTC,SAAS,CAACK,OAAO,CAAEC,KAAK,IAAK;MAC3BrC,YAAY,CACT,GAAEqC,KAAK,CAACC,SAAS,GAAGD,KAAK,CAACf,IAAI,CAAC,YAAY,CAAC,GAAGe,KAAK,CAACf,IAAK,EAAC,EAC5D,MAAM,CACP;IACH,CAAC,CAAC;EACJ,CAAC,MAAM;IACL,MAAMiB,KAAK,GAAGtC,WAAW,CAAC,CACxB,MAAM,CAAC,YAAY,CAAC,EACpB,IAAI,CAAC,YAAY,CAAC,EAClB,SAAS,CAAC,YAAY,CAAC,CACxB,CAAC;IACF8B,SAAS,CAACK,OAAO,CAAEC,KAAK,IAAK;MAC3BE,KAAK,CAACC,IAAI,CAAC,CACR,GAAEH,KAAK,CAACf,IAAK,EAAC,EACd,GAAEe,KAAK,CAAChB,GAAI,EAAC,EACb,GAAEgB,KAAK,CAACC,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAG,EAAC,CACjD,CAAC;IACJ,CAAC,CAAC;IACFtC,YAAY,CAACuC,KAAK,CAACE,QAAQ,EAAE,EAAE,MAAM,CAAC;EACxC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,iBAAiB,CAACpB,IAAI,EAAEqB,IAAI,EAAE;EAClD,IAAIC,QAAQ,GAAGtC,gBAAgB,CAACgB,IAAI,EAAE,OAAO,CAAC;EAC9C,IAAIqB,IAAI,EAAE;IACRC,QAAQ,GAAGD,IAAI;EACjB;EACAzC,uBAAuB,CAAC,aAAa,EAAE,CAAC,EAAG,aAAYoB,IAAK,EAAC,CAAC;EAC9D,IAAI;IACF,MAAMuB,SAAS,GAAG,MAAMpC,cAAc,CAACa,IAAI,CAAC;IAC5CnB,uBAAuB,CAAE,gBAAeyC,QAAS,EAAC,CAAC;IACnDvC,UAAU,CAAC,OAAO,EAAE,CAACwC,SAAS,CAAC,EAAE,KAAK,EAAED,QAAQ,CAAC;IACjDxC,qBAAqB,CAAE,+BAA8BkB,IAAK,GAAE,CAAC;EAC/D,CAAC,CAAC,OAAOwB,KAAK,EAAE;IACd1C,qBAAqB,CAAE,GAAE0C,KAAK,CAACC,OAAQ,EAAC,CAAC;IACzC/C,YAAY,CAAE,GAAE8C,KAAK,CAACC,OAAQ,EAAC,EAAE,OAAO,CAAC;EAC3C;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,eAAe,CAACC,EAAE,EAAEN,IAAI,EAAE;EAC9C,IAAIC,QAAQ,GAAGtC,gBAAgB,CAAC2C,EAAE,EAAE,OAAO,CAAC;EAC5C,IAAIN,IAAI,EAAE;IACRC,QAAQ,GAAGD,IAAI;EACjB;EACAzC,uBAAuB,CAAC,aAAa,EAAE,CAAC,EAAG,aAAY+C,EAAG,EAAC,CAAC;EAC5D,IAAI;IACF,MAAMJ,SAAS,GAAG,MAAMtC,QAAQ,CAAC0C,EAAE,CAAC;IACpC9C,uBAAuB,CAAE,gBAAeyC,QAAS,EAAC,CAAC;IACnDvC,UAAU,CAAC,OAAO,EAAE,CAACwC,SAAS,CAAC,EAAE,KAAK,EAAED,QAAQ,CAAC;IACjDxC,qBAAqB,CAAE,+BAA8B6C,EAAG,GAAE,CAAC;EAC7D,CAAC,CAAC,OAAOH,KAAK,EAAE;IACd1C,qBAAqB,CAAE,GAAE0C,KAAK,CAACC,OAAQ,EAAC,CAAC;IACzC/C,YAAY,CAAE,GAAE8C,KAAK,CAACC,OAAQ,EAAC,EAAE,OAAO,CAAC;EAC3C;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeG,kBAAkB,CAACP,IAAI,EAAE;EAC7C,IAAIC,QAAQ,GAAGtC,gBAAgB,CAAE,MAAKU,cAAc,EAAG,QAAO,EAAE,OAAO,CAAC;EACxE,IAAI2B,IAAI,EAAE;IACRC,QAAQ,GAAGD,IAAI;EACjB;EACA,MAAMQ,aAAa,GAAG,MAAM3C,SAAS,EAAE;EACvCN,uBAAuB,CACrB,aAAa,EACbiD,aAAa,CAACC,MAAM,EACpB,kBAAkB,CACnB;EACD,KAAK,MAAMP,SAAS,IAAIM,aAAa,EAAE;IACrChD,uBAAuB,CAAE,mBAAkB0C,SAAS,CAACvB,IAAK,EAAC,CAAC;EAC9D;EACAjB,UAAU,CAAC,OAAO,EAAE8C,aAAa,EAAE,KAAK,EAAEP,QAAQ,CAAC;EACnDxC,qBAAqB,CAClB,GAAE+C,aAAa,CAACC,MAAO,uBAAsBR,QAAS,GAAE,CAC1D;AACH;;AAEA;AACA;AACA;AACA,OAAO,eAAeS,mBAAmB,GAAG;EAC1C,MAAMF,aAAa,GAAG,MAAM3C,SAAS,EAAE;EACvCN,uBAAuB,CACrB,aAAa,EACbiD,aAAa,CAACC,MAAM,EACpB,kBAAkB,CACnB;EACD,KAAK,MAAMP,SAAS,IAAIM,aAAa,EAAE;IACrChD,uBAAuB,CAAE,iBAAgB0C,SAAS,CAACvB,IAAK,EAAC,CAAC;IAC1D,MAAMsB,QAAQ,GAAGtC,gBAAgB,CAACuC,SAAS,CAACvB,IAAI,EAAE,OAAO,CAAC;IAC1DjB,UAAU,CAAC,OAAO,EAAEwC,SAAS,EAAE,KAAK,EAAED,QAAQ,CAAC;EACjD;EACAxC,qBAAqB,CAAE,GAAE+C,aAAa,CAACC,MAAO,mBAAkB,CAAC;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeE,iBAAiB,CAAChC,IAAI,EAAEqB,IAAI,EAAE;EAClD9C,EAAE,CAAC0D,QAAQ,CAACZ,IAAI,EAAE,MAAM,EAAE,OAAOa,GAAG,EAAEC,IAAI,KAAK;IAC7C,IAAID,GAAG,EAAE,MAAMA,GAAG;IAClB,MAAMX,SAAS,GAAGa,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;IAClC,IAAIxC,cAAc,CAAC4B,SAAS,CAACe,IAAI,CAAC,EAAE;MAClC1D,uBAAuB,CAAC,aAAa,EAAE,CAAC,EAAE,oBAAoB,CAAC;MAC/D,IAAI2D,KAAK,GAAG,KAAK;MACjB,KAAK,MAAMZ,EAAE,IAAIJ,SAAS,CAACR,KAAK,EAAE;QAChC,IAAI,CAAC,CAAC,CAACyB,cAAc,CAACC,IAAI,CAAClB,SAAS,CAACR,KAAK,EAAEY,EAAE,CAAC,EAAE;UAC/C,IAAIJ,SAAS,CAACR,KAAK,CAACY,EAAE,CAAC,CAAC3B,IAAI,KAAKA,IAAI,EAAE;YACrCuC,KAAK,GAAG,IAAI;YACZ1D,uBAAuB,CAAE,aAAY0C,SAAS,CAACR,KAAK,CAACY,EAAE,CAAC,CAAC3B,IAAK,EAAC,CAAC;YAChE,IAAI;cACF,MAAMZ,cAAc,CAACY,IAAI,EAAEuB,SAAS,CAACR,KAAK,CAACY,EAAE,CAAC,CAAC;cAC/C7C,qBAAqB,CAAE,+BAA8BkB,IAAK,GAAE,CAAC;YAC/D,CAAC,CAAC,OAAOwB,KAAK,EAAE;cACd1C,qBAAqB,CAClB,yBAAwByC,SAAS,CAACR,KAAK,CAACY,EAAE,CAAC,CAAC3B,IAAK,KAAIwB,KAAK,CAACC,OAAQ,EAAC,CACtE;cACD/C,YAAY,CACT,yBAAwB6C,SAAS,CAACR,KAAK,CAACY,EAAE,CAAC,CAAC3B,IAAK,KAAIwB,KAAK,CAACC,OAAQ,EAAC,EACrE,OAAO,CACR;YACH;YACA;UACF;QACF;MACF;MACA,IAAI,CAACc,KAAK,EAAE;QACVzD,qBAAqB,CAAE,SAAQkB,IAAK,aAAY,CAAC;MACnD;IACF,CAAC,MAAM;MACLtB,YAAY,CAAC,6BAA6B,EAAE,OAAO,CAAC;IACtD;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAegE,eAAe,CAACf,EAAE,EAAEN,IAAI,EAAE;EAC9C9C,EAAE,CAAC0D,QAAQ,CAACZ,IAAI,EAAE,MAAM,EAAE,OAAOa,GAAG,EAAEC,IAAI,KAAK;IAC7C,IAAID,GAAG,EAAE,MAAMA,GAAG;IAClB,MAAMX,SAAS,GAAGa,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;IAClC,IAAIxC,cAAc,CAAC4B,SAAS,CAACe,IAAI,CAAC,EAAE;MAClC1D,uBAAuB,CAAC,aAAa,EAAE,CAAC,EAAE,oBAAoB,CAAC;MAC/D,IAAI2D,KAAK,GAAG,KAAK;MACjB,KAAK,MAAMI,OAAO,IAAIpB,SAAS,CAACR,KAAK,EAAE;QACrC,IAAI,CAAC,CAAC,CAACyB,cAAc,CAACC,IAAI,CAAClB,SAAS,CAACR,KAAK,EAAE4B,OAAO,CAAC,EAAE;UACpD,IAAIA,OAAO,KAAKhB,EAAE,EAAE;YAClBY,KAAK,GAAG,IAAI;YACZ1D,uBAAuB,CACpB,aAAY0C,SAAS,CAACR,KAAK,CAAC4B,OAAO,CAAC,CAAC5C,GAAI,EAAC,CAC5C;YACD,IAAI;cACF,MAAMV,QAAQ,CAACsD,OAAO,EAAEpB,SAAS,CAACR,KAAK,CAAC4B,OAAO,CAAC,CAAC;cACjD7D,qBAAqB,CAAE,+BAA8B6C,EAAG,GAAE,CAAC;YAC7D,CAAC,CAAC,OAAOH,KAAK,EAAE;cACd1C,qBAAqB,CAClB,yBAAwByC,SAAS,CAACR,KAAK,CAAC4B,OAAO,CAAC,CAAC5C,GAAI,KAAIyB,KAAK,CAACC,OAAQ,EAAC,CAC1E;cACD/C,YAAY,CACT,yBAAwB6C,SAAS,CAACR,KAAK,CAAC4B,OAAO,CAAC,CAAC5C,GAAI,KAAIyB,KAAK,CAACC,OAAQ,EAAC,EACzE,OAAO,CACR;YACH;YACA;UACF;QACF;MACF;MACA,IAAI,CAACc,KAAK,EAAE;QACVzD,qBAAqB,CAAE,SAAQ6C,EAAG,aAAY,CAAC;MACjD;IACF,CAAC,MAAM;MACLjD,YAAY,CAAC,6BAA6B,EAAE,OAAO,CAAC;IACtD;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAekE,oBAAoB,CAACvB,IAAI,EAAE;EAC/C9C,EAAE,CAAC0D,QAAQ,CAACZ,IAAI,EAAE,MAAM,EAAE,CAACa,GAAG,EAAEC,IAAI,KAAK;IACvC,IAAID,GAAG,EAAE,MAAMA,GAAG;IAClB,MAAMW,QAAQ,GAAGT,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;IACjC,IAAIxC,cAAc,CAACkD,QAAQ,CAACP,IAAI,CAAC,EAAE;MACjC1D,uBAAuB,CACrB,aAAa,EACbkE,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC9B,KAAK,CAAC,CAACe,MAAM,EAClC,qBAAqB,CACtB;MACD,KAAK,MAAMH,EAAE,IAAIkB,QAAQ,CAAC9B,KAAK,EAAE;QAC/B,IAAI,CAAC,CAAC,CAACyB,cAAc,CAACC,IAAI,CAACI,QAAQ,CAAC9B,KAAK,EAAEY,EAAE,CAAC,EAAE;UAC9C9C,uBAAuB,CAAE,aAAYgE,QAAQ,CAAC9B,KAAK,CAACY,EAAE,CAAC,CAAC3B,IAAK,EAAC,CAAC;QACjE;MACF;MACAV,SAAS,CAACuD,QAAQ,CAAC9B,KAAK,CAAC,CAACiC,IAAI,CAAEC,MAAM,IAAK;QACzC,IAAIA,MAAM,IAAI,IAAI,EAAE;UAClBnE,qBAAqB,CAClB,mBAAkBgE,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC9B,KAAK,CAAC,CAACe,MAAO,UAAS,CAChE;UACDpD,YAAY,CACT,mBACCoE,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC9B,KAAK,CAAC,CAACe,MAC7B,gBAAeT,IAAK,EAAC,EACtB,OAAO,CACR;QACH,CAAC,MAAM;UACLvC,qBAAqB,CAClB,yBACCgE,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC9B,KAAK,CAAC,CAACe,MAC7B,UAAS,CACX;QACH;MACF,CAAC,CAAC;IACJ,CAAC,MAAM;MACLpD,YAAY,CAAC,6BAA6B,EAAE,OAAO,CAAC;IACtD;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA,OAAO,eAAewE,qBAAqB,GAAG;EAC5C,MAAMC,KAAK,GAAG5E,EAAE,CAAC6E,WAAW,CAAC,GAAG,CAAC;EACjC,MAAMC,SAAS,GAAGF,KAAK,CAACG,MAAM,CAAEtD,IAAI,IAClCA,IAAI,CAACuD,WAAW,EAAE,CAACC,QAAQ,CAAC,aAAa,CAAC,CAC3C;EAED5E,uBAAuB,CACrB,aAAa,EACbyE,SAAS,CAACvB,MAAM,EAChB,qBAAqB,CACtB;EACD,IAAIe,QAAQ,GAAG,IAAI;EACnB,IAAIY,KAAK,GAAG,CAAC;EACb,IAAIC,KAAK,GAAG,CAAC;EACb,IAAIC,KAAK,GAAG,CAAC;EACb,KAAK,MAAMtC,IAAI,IAAIgC,SAAS,EAAE;IAC5B,MAAMlB,IAAI,GAAG5D,EAAE,CAACqF,YAAY,CAACvC,IAAI,EAAE,MAAM,CAAC;IAC1CwB,QAAQ,GAAGT,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;IAC3B,IAAIxC,cAAc,CAACkD,QAAQ,CAACP,IAAI,CAAC,EAAE;MACjCmB,KAAK,GAAGX,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC9B,KAAK,CAAC,CAACe,MAAM;MAC1C;MACA,MAAMmB,MAAM,GAAG,MAAM3D,SAAS,CAACuD,QAAQ,CAAC9B,KAAK,CAAC;MAC9C,IAAIkC,MAAM,IAAI,IAAI,EAAE;QAClBvE,YAAY,CAAE,mBAAkB+E,KAAM,gBAAepC,IAAK,EAAC,EAAE,OAAO,CAAC;MACvE,CAAC,MAAM;QACLsC,KAAK,IAAI,CAAC;QACVD,KAAK,IAAID,KAAK;QACd5E,uBAAuB,CAAE,YAAW4E,KAAM,kBAAiBpC,IAAK,EAAC,CAAC;MACpE;IACF,CAAC,MAAM;MACL3C,YAAY,CAAE,iBAAgB2C,IAAK,UAAS,EAAE,OAAO,CAAC;IACxD;EACF;EACAvC,qBAAqB,CAClB,sBAAqB4E,KAAM,kBAAiBC,KAAM,WAAU,CAC9D;AACH;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeE,wBAAwB,CAACxC,IAAI,EAAE;EACnD9C,EAAE,CAAC0D,QAAQ,CAACZ,IAAI,EAAE,MAAM,EAAE,CAACa,GAAG,EAAEC,IAAI,KAAK;IACvC,IAAID,GAAG,EAAE,MAAMA,GAAG;IAClB,MAAMX,SAAS,GAAGa,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;IAClC,IAAIxC,cAAc,CAAC4B,SAAS,CAACe,IAAI,CAAC,EAAE;MAClC1D,uBAAuB,CAAC,aAAa,EAAE,CAAC,EAAE,oBAAoB,CAAC;MAC/D,KAAK,MAAM+C,EAAE,IAAIJ,SAAS,CAACR,KAAK,EAAE;QAChC,IAAI,CAAC,CAAC,CAACyB,cAAc,CAACC,IAAI,CAAClB,SAAS,CAACR,KAAK,EAAEY,EAAE,CAAC,EAAE;UAC/C9C,uBAAuB,CAAE,aAAY0C,SAAS,CAACR,KAAK,CAACY,EAAE,CAAC,CAAC3B,IAAK,EAAC,CAAC;UAChEX,QAAQ,CAACsC,EAAE,EAAEJ,SAAS,CAACR,KAAK,CAACY,EAAE,CAAC,CAAC,CAACqB,IAAI,CAAEC,MAAM,IAAK;YACjD,IAAIA,MAAM,IAAI,IAAI,EAAE;cAClBnE,qBAAqB,CAClB,yBAAwByC,SAAS,CAACR,KAAK,CAACY,EAAE,CAAC,CAAC3B,IAAK,EAAC,CACpD;cACDtB,YAAY,CACT,yBAAwB6C,SAAS,CAACR,KAAK,CAACY,EAAE,CAAC,CAAC3B,IAAK,EAAC,EACnD,OAAO,CACR;YACH,CAAC,MAAM;cACLlB,qBAAqB,CAClB,+BAA8ByC,SAAS,CAACR,KAAK,CAACY,EAAE,CAAC,CAAC3B,IAAK,EAAC,CAC1D;YACH;UACF,CAAC,CAAC;UACF;QACF;MACF;IACF,CAAC,MAAM;MACLtB,YAAY,CAAC,6BAA6B,EAAE,OAAO,CAAC;IACtD;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeoF,cAAc,CAACnC,EAAE,EAAE;EACvC/C,uBAAuB,CAAC,eAAe,EAAEmF,SAAS,EAAG,YAAWpC,EAAG,KAAI,CAAC;EACxE,IAAI;IACF,MAAMpC,WAAW,CAACoC,EAAE,CAAC;IACrB7C,qBAAqB,CAAE,WAAU6C,EAAG,GAAE,EAAE,SAAS,CAAC;EACpD,CAAC,CAAC,OAAOH,KAAK,EAAE;IACd1C,qBAAqB,CAAE,UAAS0C,KAAK,CAACC,OAAQ,EAAC,EAAE,MAAM,CAAC;EAC1D;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeuC,oBAAoB,CAAChE,IAAI,EAAE;EAC/CpB,uBAAuB,CAAC,eAAe,EAAEmF,SAAS,EAAG,YAAW/D,IAAK,KAAI,CAAC;EAC1E,IAAI;IACF,MAAMR,iBAAiB,CAACQ,IAAI,CAAC;IAC7BlB,qBAAqB,CAAE,WAAUkB,IAAK,GAAE,EAAE,SAAS,CAAC;EACtD,CAAC,CAAC,OAAOwB,KAAK,EAAE;IACd1C,qBAAqB,CAAE,UAAS0C,KAAK,CAACC,OAAQ,EAAC,EAAE,MAAM,CAAC;EAC1D;AACF;;AAEA;AACA;AACA;AACA,OAAO,eAAewC,eAAe,GAAG;EACtCrF,uBAAuB,CACrB,eAAe,EACfmF,SAAS,EACR,8BAA6B,CAC/B;EACD,IAAI;IACF,MAAMtE,YAAY,EAAE;IACpBX,qBAAqB,CAAE,2BAA0B,EAAE,SAAS,CAAC;EAC/D,CAAC,CAAC,OAAO0C,KAAK,EAAE;IACd1C,qBAAqB,CAAE,UAAS0C,KAAK,CAACC,OAAQ,EAAC,EAAE,MAAM,CAAC;EAC1D;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeyC,eAAe,GAAG;EACtC,OAAOD,eAAe,EAAE;AAC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Wordwrap.js","names":["wordwrap","str","len","indent","undefined","match","RegExp","length","join"],"sources":["ops/utils/Wordwrap.ts"],"sourcesContent":["export default function wordwrap(str, len, indent = undefined) {\n if (!str) return '';\n return (\n str.match(\n new RegExp(\n `(\\\\S.{0,${len - 1 - (indent ? indent.length : 0)}})(?=\\\\s+|$)`,\n 'g'\n )\n ) || []\n ).join(indent ? `\\n${indent}` : '\\n');\n}\n"],"mappings":"AAAA,eAAe,SAASA,
|
|
1
|
+
{"version":3,"file":"Wordwrap.js","names":["wordwrap","str","len","indent","undefined","match","RegExp","length","join"],"sources":["ops/utils/Wordwrap.ts"],"sourcesContent":["export default function wordwrap(str, len, indent = undefined) {\n if (!str) return '';\n return (\n str.match(\n new RegExp(\n `(\\\\S.{0,${len - 1 - (indent ? indent.length : 0)}})(?=\\\\s+|$)`,\n 'g'\n )\n ) || []\n ).join(indent ? `\\n${indent}` : '\\n');\n}\n"],"mappings":"AAAA,eAAe,SAASA,QAAQ,CAACC,GAAG,EAAEC,GAAG,EAAEC,MAAM,GAAGC,SAAS,EAAE;EAC7D,IAAI,CAACH,GAAG,EAAE,OAAO,EAAE;EACnB,OAAO,CACLA,GAAG,CAACI,KAAK,CACP,IAAIC,MAAM,CACP,WAAUJ,GAAG,GAAG,CAAC,IAAIC,MAAM,GAAGA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAE,cAAa,EAC/D,GAAG,CACJ,CACF,IAAI,EAAE,EACPC,IAAI,CAACL,MAAM,GAAI,KAAIA,MAAO,EAAC,GAAG,IAAI,CAAC;AACvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticStorage.js","names":["DEFAULT_REALM_KEY","CLASSIC_DEPLOYMENT_TYPE_KEY","CLOUD_DEPLOYMENT_TYPE_KEY","FORGEOPS_DEPLOYMENT_TYPE_KEY","DEPLOYMENT_TYPES","DEPLOYMENT_TYPE_REALM_MAP","FRODO_METADATA_ID"],"sources":["storage/StaticStorage.ts"],"sourcesContent":["export const DEFAULT_REALM_KEY = '__default__realm__';\nexport const CLASSIC_DEPLOYMENT_TYPE_KEY = 'classic';\nexport const CLOUD_DEPLOYMENT_TYPE_KEY = 'cloud';\nexport const FORGEOPS_DEPLOYMENT_TYPE_KEY = 'forgeops';\nexport const DEPLOYMENT_TYPES = [\n CLASSIC_DEPLOYMENT_TYPE_KEY,\n CLOUD_DEPLOYMENT_TYPE_KEY,\n FORGEOPS_DEPLOYMENT_TYPE_KEY,\n];\nexport const DEPLOYMENT_TYPE_REALM_MAP = {\n [CLASSIC_DEPLOYMENT_TYPE_KEY]: '/',\n [CLOUD_DEPLOYMENT_TYPE_KEY]: 'alpha',\n [FORGEOPS_DEPLOYMENT_TYPE_KEY]: '/',\n};\nexport const FRODO_METADATA_ID = 'frodo';\n"],"mappings":"AAAA,OAAO,MAAMA,iBAAiB,GAAG,
|
|
1
|
+
{"version":3,"file":"StaticStorage.js","names":["DEFAULT_REALM_KEY","CLASSIC_DEPLOYMENT_TYPE_KEY","CLOUD_DEPLOYMENT_TYPE_KEY","FORGEOPS_DEPLOYMENT_TYPE_KEY","DEPLOYMENT_TYPES","DEPLOYMENT_TYPE_REALM_MAP","FRODO_METADATA_ID"],"sources":["storage/StaticStorage.ts"],"sourcesContent":["export const DEFAULT_REALM_KEY = '__default__realm__';\nexport const CLASSIC_DEPLOYMENT_TYPE_KEY = 'classic';\nexport const CLOUD_DEPLOYMENT_TYPE_KEY = 'cloud';\nexport const FORGEOPS_DEPLOYMENT_TYPE_KEY = 'forgeops';\nexport const DEPLOYMENT_TYPES = [\n CLASSIC_DEPLOYMENT_TYPE_KEY,\n CLOUD_DEPLOYMENT_TYPE_KEY,\n FORGEOPS_DEPLOYMENT_TYPE_KEY,\n];\nexport const DEPLOYMENT_TYPE_REALM_MAP = {\n [CLASSIC_DEPLOYMENT_TYPE_KEY]: '/',\n [CLOUD_DEPLOYMENT_TYPE_KEY]: 'alpha',\n [FORGEOPS_DEPLOYMENT_TYPE_KEY]: '/',\n};\nexport const FRODO_METADATA_ID = 'frodo';\n"],"mappings":"AAAA,OAAO,MAAMA,iBAAiB,GAAG,oBAAoB;AACrD,OAAO,MAAMC,2BAA2B,GAAG,SAAS;AACpD,OAAO,MAAMC,yBAAyB,GAAG,OAAO;AAChD,OAAO,MAAMC,4BAA4B,GAAG,UAAU;AACtD,OAAO,MAAMC,gBAAgB,GAAG,CAC9BH,2BAA2B,EAC3BC,yBAAyB,EACzBC,4BAA4B,CAC7B;AACD,OAAO,MAAME,yBAAyB,GAAG;EACvC,CAACJ,2BAA2B,GAAG,GAAG;EAClC,CAACC,yBAAyB,GAAG,OAAO;EACpC,CAACC,4BAA4B,GAAG;AAClC,CAAC;AACD,OAAO,MAAMG,iBAAiB,GAAG,OAAO"}
|
package/esm/utils/Config.js
CHANGED
|
@@ -10,35 +10,27 @@ export const FRODO_LOG_NOISEFILTER_FILENAME = 'LoggingNoiseFilter.json';
|
|
|
10
10
|
export function getConfigPath() {
|
|
11
11
|
return process.env[FRODO_CONFIG_PATH_KEY] || `${os.homedir()}/.frodo`;
|
|
12
12
|
}
|
|
13
|
-
|
|
14
13
|
function getCustomNoiseFilters() {
|
|
15
14
|
const filename = `${getConfigPath()}/${FRODO_LOG_NOISEFILTER_FILENAME}`;
|
|
16
15
|
let noiseFilter = [];
|
|
17
|
-
|
|
18
16
|
try {
|
|
19
17
|
const data = fs.readFileSync(filename, 'utf8');
|
|
20
18
|
noiseFilter = JSON.parse(data);
|
|
21
19
|
} catch (e) {
|
|
22
20
|
printMessage(`Error reading ${filename} (${e.message})`, 'error');
|
|
23
21
|
}
|
|
24
|
-
|
|
25
22
|
return noiseFilter;
|
|
26
23
|
}
|
|
27
|
-
|
|
28
24
|
export function getNoiseFilters(defaults) {
|
|
29
25
|
const filename = `${getConfigPath()}/${FRODO_LOG_NOISEFILTER_FILENAME}`;
|
|
30
|
-
|
|
31
26
|
if (defaults) {
|
|
32
27
|
printMessage(`Using default logging noise filters.`, 'info');
|
|
33
28
|
return defaultNoiseFilter();
|
|
34
29
|
}
|
|
35
|
-
|
|
36
30
|
let noiseFilter = getCustomNoiseFilters();
|
|
37
|
-
|
|
38
31
|
if (noiseFilter.length == 0) {
|
|
39
32
|
printMessage(`No custom noise filters defined. Using defaults.`, 'info');
|
|
40
33
|
noiseFilter = defaultNoiseFilter();
|
|
41
|
-
|
|
42
34
|
try {
|
|
43
35
|
fs.writeFileSync(filename, JSON.stringify(noiseFilter, null, 2));
|
|
44
36
|
printMessage(`The default filters were saved in ${filename}. You can change the filters as needed.`, 'info');
|
|
@@ -46,7 +38,6 @@ export function getNoiseFilters(defaults) {
|
|
|
46
38
|
printMessage(`Error creating noise filter configuration with default values.`, 'error');
|
|
47
39
|
}
|
|
48
40
|
}
|
|
49
|
-
|
|
50
41
|
return noiseFilter;
|
|
51
42
|
}
|
|
52
43
|
//# sourceMappingURL=Config.js.map
|
package/esm/utils/Config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.js","names":["fs","os","Log","printMessage","defaultNoiseFilter","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"],"sources":["utils/Config.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport { Log } from '@rockcarver/frodo-lib';\n\nimport { printMessage } from './Console';\n\nconst { defaultNoiseFilter } = 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 defaultNoiseFilter();\n }\n let noiseFilter = getCustomNoiseFilters();\n if (noiseFilter.length == 0) {\n printMessage(`No custom noise filters defined. Using defaults.`, 'info');\n noiseFilter = defaultNoiseFilter();\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,
|
|
1
|
+
{"version":3,"file":"Config.js","names":["fs","os","Log","printMessage","defaultNoiseFilter","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"],"sources":["utils/Config.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport { Log } from '@rockcarver/frodo-lib';\n\nimport { printMessage } from './Console';\n\nconst { defaultNoiseFilter } = 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 defaultNoiseFilter();\n }\n let noiseFilter = getCustomNoiseFilters();\n if (noiseFilter.length == 0) {\n printMessage(`No custom noise filters defined. Using defaults.`, 'info');\n noiseFilter = defaultNoiseFilter();\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,GAAG,QAAQ,uBAAuB;AAE3C,SAASC,YAAY,QAAQ,WAAW;AAExC,MAAM;EAAEC;AAAmB,CAAC,GAAGF,GAAG;AAElC,OAAO,MAAMG,qBAAqB,GAAG,mBAAmB;AACxD,OAAO,MAAMC,8BAA8B,GAAG,yBAAyB;AAEvE,OAAO,SAASC,aAAa,GAAW;EACtC,OAAOC,OAAO,CAACC,GAAG,CAACJ,qBAAqB,CAAC,IAAK,GAAEJ,EAAE,CAACS,OAAO,EAAG,SAAQ;AACvE;AAEA,SAASC,qBAAqB,GAAkB;EAC9C,MAAMC,QAAQ,GAAI,GAAEL,aAAa,EAAG,IAAGD,8BAA+B,EAAC;EACvE,IAAIO,WAAW,GAAG,EAAE;EACpB,IAAI;IACF,MAAMC,IAAI,GAAGd,EAAE,CAACe,YAAY,CAACH,QAAQ,EAAE,MAAM,CAAC;IAC9CC,WAAW,GAAGG,IAAI,CAACC,KAAK,CAACH,IAAI,CAAC;EAChC,CAAC,CAAC,OAAOI,CAAC,EAAE;IACVf,YAAY,CAAE,iBAAgBS,QAAS,KAAIM,CAAC,CAACC,OAAQ,GAAE,EAAE,OAAO,CAAC;EACnE;EACA,OAAON,WAAW;AACpB;AAEA,OAAO,SAASO,eAAe,CAACC,QAAiB,EAAiB;EAChE,MAAMT,QAAQ,GAAI,GAAEL,aAAa,EAAG,IAAGD,8BAA+B,EAAC;EACvE,IAAIe,QAAQ,EAAE;IACZlB,YAAY,CAAE,sCAAqC,EAAE,MAAM,CAAC;IAC5D,OAAOC,kBAAkB,EAAE;EAC7B;EACA,IAAIS,WAAW,GAAGF,qBAAqB,EAAE;EACzC,IAAIE,WAAW,CAACS,MAAM,IAAI,CAAC,EAAE;IAC3BnB,YAAY,CAAE,kDAAiD,EAAE,MAAM,CAAC;IACxEU,WAAW,GAAGT,kBAAkB,EAAE;IAClC,IAAI;MACFJ,EAAE,CAACuB,aAAa,CAACX,QAAQ,EAAEI,IAAI,CAACQ,SAAS,CAACX,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;MAChEV,YAAY,CACT,qCAAoCS,QAAS,yCAAwC,EACtF,MAAM,CACP;IACH,CAAC,CAAC,OAAOM,CAAC,EAAE;MACVf,YAAY,CACT,gEAA+D,EAChE,OAAO,CACR;IACH;EACF;EACA,OAAOU,WAAW;AACpB"}
|