@rockcarver/frodo-cli 2.0.0-51 → 2.0.0-53
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 +42 -1
- package/esm/app.js +7 -2
- package/esm/app.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +3 -6
- 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 +46 -51
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-federation-export.js +1 -1
- package/esm/cli/admin/admin-federation-export.js.map +1 -1
- package/esm/cli/admin/admin-federation-import.js +1 -1
- package/esm/cli/admin/admin-federation-import.js.map +1 -1
- package/esm/cli/admin/admin-federation-list.js +1 -1
- package/esm/cli/admin/admin-federation-list.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +4 -6
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js +4 -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 +4 -9
- 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 +4 -9
- 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 +3 -9
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +3 -6
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +4 -6
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +4 -6
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-show-generic-extension-attributes.js +4 -6
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +8 -21
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-export.js +6 -3
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +7 -20
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +6 -3
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +8 -4
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +2 -1
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-import.js +8 -4
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +7 -20
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +6 -3
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +8 -4
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +2 -1
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-list.js +2 -1
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +7 -20
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +6 -3
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +8 -4
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +2 -1
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/app/app-delete.js +4 -4
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-export.js +6 -6
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +8 -8
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +2 -1
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/conn/conn-delete.js +7 -1
- package/esm/cli/conn/conn-delete.js.map +1 -1
- package/esm/cli/conn/conn-save.js +9 -9
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/email/email-template-export.js +6 -3
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +8 -4
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +2 -1
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +1 -1
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +1 -1
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +1 -1
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +1 -1
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +1 -1
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +1 -1
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +1 -1
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +1 -1
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +1 -1
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +1 -1
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +1 -1
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +1 -1
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +1 -1
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +1 -1
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/idm/idm-count.js +2 -1
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +6 -3
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +8 -4
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +2 -1
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idp/idp-export.js +6 -3
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +8 -4
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +2 -1
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +6 -7
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +15 -9
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-export.js +6 -3
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +8 -4
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +2 -1
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +3 -2
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/log/log-fetch.js +6 -2
- package/esm/cli/log/log-fetch.js.map +1 -1
- package/esm/cli/log/log-list.js +12 -3
- package/esm/cli/log/log-list.js.map +1 -1
- package/esm/cli/log/log-tail.js +6 -2
- package/esm/cli/log/log-tail.js.map +1 -1
- package/esm/cli/oauth/oauth-client-export.js +6 -6
- package/esm/cli/oauth/oauth-client-export.js.map +1 -1
- package/esm/cli/oauth/oauth-client-import.js +8 -8
- package/esm/cli/oauth/oauth-client-import.js.map +1 -1
- package/esm/cli/oauth/oauth-client-list.js +2 -1
- package/esm/cli/oauth/oauth-client-list.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +2 -1
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +6 -3
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +8 -4
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +2 -1
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +10 -2
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/script/script-delete.js +10 -4
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-export.js +9 -13
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +19 -14
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/service/service-delete.js +4 -2
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +6 -3
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +8 -4
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +2 -1
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/shell/shell.js +2 -4
- package/esm/cli/shell/shell.js.map +1 -1
- package/esm/cli/theme/theme-delete.js +7 -4
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +8 -4
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +10 -5
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +2 -1
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/ops/AdminOps.js +790 -3
- package/esm/ops/AdminOps.js.map +1 -1
- package/esm/ops/AgentOps.js +638 -305
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/ApplicationOps.js +91 -79
- package/esm/ops/ApplicationOps.js.map +1 -1
- package/esm/ops/AuthenticateOps.js +4 -9
- package/esm/ops/AuthenticateOps.js.map +1 -1
- package/esm/ops/AuthenticationSettingsOps.js +22 -23
- package/esm/ops/AuthenticationSettingsOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +52 -55
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConfigOps.js +100 -84
- package/esm/ops/ConfigOps.js.map +1 -1
- package/esm/ops/ConnectionProfileOps.js +15 -8
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +64 -47
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +149 -117
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +76 -46
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +333 -238
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js +15 -23
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +43 -36
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +104 -108
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +72 -78
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +84 -99
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +132 -88
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +90 -80
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +125 -87
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +170 -139
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/{AdminFederationOps.js → cloud/AdminFederationOps.js} +10 -16
- package/esm/ops/cloud/AdminFederationOps.js.map +1 -0
- package/esm/ops/{SecretsOps.js → cloud/SecretsOps.js} +123 -129
- package/esm/ops/cloud/SecretsOps.js.map +1 -0
- package/esm/ops/{VariablesOps.js → cloud/VariablesOps.js} +48 -52
- package/esm/ops/cloud/VariablesOps.js.map +1 -0
- package/esm/ops/templates/OAuth2ClientTemplate.json +270 -0
- package/esm/ops/templates/OAuth2TrustedJwtIssuerTemplate.json +38 -0
- package/esm/ops/templates/OrgModelUserAttributesTemplate.json +149 -0
- package/esm/ops/templates/autoaccess/IPAddresses.json +202 -0
- package/esm/ops/templates/autoaccess/UserAgents.json +35 -0
- package/esm/ops/templates/autoaccess/Usernames.json +203 -0
- package/esm/ops/templates/cloud/GenericExtensionAttributesTemplate.json +392 -0
- package/esm/ops/templates/cloud/managed.json +4119 -0
- package/esm/ops/utils/OpsUtils.js.map +1 -1
- package/esm/utils/Console.js +31 -0
- package/esm/utils/Console.js.map +1 -1
- package/package.json +10 -6
- package/esm/ops/AdminFederationOps.js.map +0 -1
- package/esm/ops/SecretsOps.js.map +0 -1
- package/esm/ops/VariablesOps.js.map +0 -1
package/esm/ops/ScriptOps.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
1
|
+
import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';
|
|
2
2
|
import chokidar from 'chokidar';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import { getFullExportConfig, isIdUsed } from '../utils/Config';
|
|
5
|
-
import { createProgressIndicator, createTable, debugMessage, failSpinner, printMessage, showSpinner, spinSpinner, stopProgressIndicator, succeedSpinner, updateProgressIndicator } from '../utils/Console';
|
|
5
|
+
import { createProgressIndicator, createTable, debugMessage, failSpinner, printError, printMessage, showSpinner, spinSpinner, stopProgressIndicator, succeedSpinner, updateProgressIndicator } from '../utils/Console';
|
|
6
6
|
import wordwrap from './utils/Wordwrap';
|
|
7
7
|
const {
|
|
8
8
|
getTypedFilename,
|
|
@@ -65,7 +65,7 @@ export function getTableRowMd(scriptObj) {
|
|
|
65
65
|
* @param {boolean} long detail list
|
|
66
66
|
* @param {boolean} usage display usage field
|
|
67
67
|
* @param {String | null} file Optional filename to determine usage
|
|
68
|
-
* @returns {Promise<boolean>} true if
|
|
68
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
69
69
|
*/
|
|
70
70
|
export async function listScripts(long = false, usage = false, file = null) {
|
|
71
71
|
let spinnerId;
|
|
@@ -77,17 +77,15 @@ export async function listScripts(long = false, usage = false, file = null) {
|
|
|
77
77
|
scripts.sort((a, b) => a.name.localeCompare(b.name));
|
|
78
78
|
stopProgressIndicator(spinnerId, `Successfully read ${scripts.length} scripts.`, 'success');
|
|
79
79
|
} catch (error) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
debugMessage(error);
|
|
83
|
-
debugMessage(`Cli.ScriptOps.listScripts: end [false]`);
|
|
80
|
+
stopProgressIndicator(spinnerId, `Error reading scripts`, 'fail');
|
|
81
|
+
printError(error);
|
|
84
82
|
return false;
|
|
85
83
|
}
|
|
86
84
|
if (!long && !usage) {
|
|
87
85
|
scripts.forEach(script => {
|
|
88
86
|
printMessage(`${script.name}`, 'data');
|
|
89
87
|
});
|
|
90
|
-
debugMessage(`Cli.ScriptOps.listScripts: end
|
|
88
|
+
debugMessage(`Cli.ScriptOps.listScripts: end`);
|
|
91
89
|
return true;
|
|
92
90
|
}
|
|
93
91
|
let fullExport = null;
|
|
@@ -96,9 +94,7 @@ export async function listScripts(long = false, usage = false, file = null) {
|
|
|
96
94
|
try {
|
|
97
95
|
fullExport = await getFullExportConfig(file);
|
|
98
96
|
} catch (error) {
|
|
99
|
-
|
|
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]`);
|
|
97
|
+
printError(error);
|
|
102
98
|
return false;
|
|
103
99
|
}
|
|
104
100
|
//Delete scripts from full export so they aren't mistakenly used for determining usage
|
|
@@ -119,7 +115,7 @@ export async function listScripts(long = false, usage = false, file = null) {
|
|
|
119
115
|
table.push(values);
|
|
120
116
|
});
|
|
121
117
|
printMessage(table.toString(), 'data');
|
|
122
|
-
debugMessage(`Cli.ScriptOps.listScripts: end
|
|
118
|
+
debugMessage(`Cli.ScriptOps.listScripts: end`);
|
|
123
119
|
return true;
|
|
124
120
|
}
|
|
125
121
|
|
|
@@ -128,7 +124,7 @@ export async function listScripts(long = false, usage = false, file = null) {
|
|
|
128
124
|
* @param {string} scriptId script uuid
|
|
129
125
|
* @param {string} file file name
|
|
130
126
|
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
131
|
-
* @returns {Promise<boolean>} true if
|
|
127
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
132
128
|
*/
|
|
133
129
|
export async function exportScriptToFile(scriptId, file, includeMeta = true) {
|
|
134
130
|
debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);
|
|
@@ -143,13 +139,12 @@ export async function exportScriptToFile(scriptId, file, includeMeta = true) {
|
|
|
143
139
|
const scriptExport = await exportScript(scriptId);
|
|
144
140
|
saveJsonToFile(scriptExport, filePath, includeMeta);
|
|
145
141
|
succeedSpinner(`Exported script '${scriptId}' to '${filePath}'.`);
|
|
146
|
-
debugMessage(`Cli.ScriptOps.exportScriptToFile: end
|
|
142
|
+
debugMessage(`Cli.ScriptOps.exportScriptToFile: end`);
|
|
147
143
|
return true;
|
|
148
144
|
} catch (error) {
|
|
149
|
-
failSpinner(`Error exporting script '${scriptId}'
|
|
150
|
-
|
|
145
|
+
failSpinner(`Error exporting script '${scriptId}'`);
|
|
146
|
+
printError(error);
|
|
151
147
|
}
|
|
152
|
-
debugMessage(`Cli.ScriptOps.exportScriptToFile: end [false]`);
|
|
153
148
|
return false;
|
|
154
149
|
}
|
|
155
150
|
|
|
@@ -158,7 +153,7 @@ export async function exportScriptToFile(scriptId, file, includeMeta = true) {
|
|
|
158
153
|
* @param {string} name script name
|
|
159
154
|
* @param {string} file file name
|
|
160
155
|
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
161
|
-
* @returns {Promise<boolean>} true if
|
|
156
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
162
157
|
*/
|
|
163
158
|
export async function exportScriptByNameToFile(name, file, includeMeta = true) {
|
|
164
159
|
debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);
|
|
@@ -173,13 +168,12 @@ export async function exportScriptByNameToFile(name, file, includeMeta = true) {
|
|
|
173
168
|
const scriptExport = await exportScriptByName(name);
|
|
174
169
|
saveJsonToFile(scriptExport, filePath, includeMeta);
|
|
175
170
|
succeedSpinner(`Exported script '${name}' to '${filePath}'.`);
|
|
176
|
-
debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end
|
|
171
|
+
debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end`);
|
|
177
172
|
return true;
|
|
178
173
|
} catch (error) {
|
|
179
174
|
failSpinner(`Error exporting script '${name}': ${error.message}`);
|
|
180
|
-
|
|
175
|
+
printError(error);
|
|
181
176
|
}
|
|
182
|
-
debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [false]`);
|
|
183
177
|
return false;
|
|
184
178
|
}
|
|
185
179
|
|
|
@@ -188,7 +182,7 @@ export async function exportScriptByNameToFile(name, file, includeMeta = true) {
|
|
|
188
182
|
* @param {string} file file name
|
|
189
183
|
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
190
184
|
* @param {boolean} includeDefault true to include default scripts in export, false otherwise. Default: false
|
|
191
|
-
* @returns {Promise<boolean>} true if
|
|
185
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
192
186
|
*/
|
|
193
187
|
export async function exportScriptsToFile(file, includeMeta = true, includeDefault = false) {
|
|
194
188
|
debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);
|
|
@@ -199,13 +193,11 @@ export async function exportScriptsToFile(file, includeMeta = true, includeDefau
|
|
|
199
193
|
}
|
|
200
194
|
const scriptExport = await exportScripts(includeDefault);
|
|
201
195
|
saveJsonToFile(scriptExport, getFilePath(fileName, true), includeMeta);
|
|
202
|
-
debugMessage(`Cli.ScriptOps.exportScriptsToFile: end
|
|
196
|
+
debugMessage(`Cli.ScriptOps.exportScriptsToFile: end`);
|
|
203
197
|
return true;
|
|
204
198
|
} catch (error) {
|
|
205
|
-
|
|
206
|
-
debugMessage(error);
|
|
199
|
+
printError(error);
|
|
207
200
|
}
|
|
208
|
-
debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);
|
|
209
201
|
return false;
|
|
210
202
|
}
|
|
211
203
|
|
|
@@ -214,51 +206,64 @@ export async function exportScriptsToFile(file, includeMeta = true, includeDefau
|
|
|
214
206
|
* @param {boolean} extract Extracts the scripts from the exports into separate files if true
|
|
215
207
|
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
216
208
|
* @param {boolean} includeDefault true to include default scripts in export, false otherwise. Default: false
|
|
217
|
-
* @returns {Promise<boolean>} true if
|
|
209
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
218
210
|
*/
|
|
219
211
|
export async function exportScriptsToFiles(extract = false, includeMeta = true, includeDefault = false) {
|
|
220
|
-
let outcome = true;
|
|
221
212
|
debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
213
|
+
const errors = [];
|
|
214
|
+
let barId;
|
|
215
|
+
try {
|
|
216
|
+
let scriptList = await readScripts();
|
|
217
|
+
if (!includeDefault) scriptList = scriptList.filter(script => !script.default);
|
|
218
|
+
barId = createProgressIndicator('determinate', scriptList.length, 'Exporting scripts to individual files...');
|
|
219
|
+
for (const script of scriptList) {
|
|
220
|
+
const fileBarId = createProgressIndicator('determinate', 1, `Exporting script ${script.name}...`);
|
|
221
|
+
const file = getFilePath(getTypedFilename(script.name, 'script'), true);
|
|
222
|
+
try {
|
|
223
|
+
const scriptExport = await exportScriptByName(script.name);
|
|
224
|
+
if (extract) extractScriptToFile(scriptExport);
|
|
225
|
+
saveJsonToFile(scriptExport, file, includeMeta);
|
|
226
|
+
updateProgressIndicator(fileBarId, `Saving ${script.name} to ${file}.`);
|
|
227
|
+
stopProgressIndicator(fileBarId, `${script.name} saved to ${file}.`);
|
|
228
|
+
} catch (error) {
|
|
229
|
+
stopProgressIndicator(fileBarId, `Error exporting ${script.name}`, 'fail');
|
|
230
|
+
errors.push(error);
|
|
231
|
+
}
|
|
232
|
+
updateProgressIndicator(barId, `Exported script ${script.name}`);
|
|
241
233
|
}
|
|
234
|
+
if (errors.length > 0) {
|
|
235
|
+
throw new FrodoError(`Error exporting scripts`, errors);
|
|
236
|
+
}
|
|
237
|
+
stopProgressIndicator(barId, `Exported ${scriptList.length} scripts to individual files.`);
|
|
238
|
+
debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end`);
|
|
239
|
+
return true;
|
|
240
|
+
} catch (error) {
|
|
241
|
+
stopProgressIndicator(barId, `Error exporting scripts`);
|
|
242
|
+
printError(error);
|
|
242
243
|
}
|
|
243
|
-
stopProgressIndicator(barId, `Exported ${scriptList.length} scripts to individual files.`);
|
|
244
|
-
debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);
|
|
245
|
-
return outcome;
|
|
246
244
|
}
|
|
247
245
|
|
|
248
246
|
/**
|
|
249
247
|
* Extracts a script from a script export into a separate file.
|
|
250
|
-
* @param scriptExport The script export
|
|
251
|
-
* @param scriptId The script id (optional if there is only one script in the export)
|
|
252
|
-
* @param directory The directory within the base directory to save the script file
|
|
248
|
+
* @param {ScriptExportInterface} scriptExport The script export
|
|
249
|
+
* @param {string} scriptId The script id (optional if there is only one script in the export)
|
|
250
|
+
* @param {string} directory The directory within the base directory to save the script file
|
|
251
|
+
* @returns {boolean} true if successful, false otherwise
|
|
253
252
|
*/
|
|
254
253
|
export function extractScriptToFile(scriptExport, scriptId, directory) {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
254
|
+
try {
|
|
255
|
+
const scriptSkeleton = scriptId ? scriptExport.script[scriptId] : getScriptSkeleton(scriptExport);
|
|
256
|
+
const fileExtension = scriptSkeleton.language === 'JAVASCRIPT' ? 'js' : 'groovy';
|
|
257
|
+
const scriptFileName = getTypedFilename(scriptSkeleton.name, 'script', fileExtension);
|
|
258
|
+
const scriptFilePath = getFilePath((directory ? `${directory}/` : '') + scriptFileName, true);
|
|
259
|
+
const scriptText = Array.isArray(scriptSkeleton.script) ? scriptSkeleton.script.join('\n') : scriptSkeleton.script;
|
|
260
|
+
scriptSkeleton.script = `file://${scriptFilePath}`;
|
|
261
|
+
saveTextToFile(scriptText, scriptFilePath);
|
|
262
|
+
return true;
|
|
263
|
+
} catch (error) {
|
|
264
|
+
printError(error);
|
|
265
|
+
}
|
|
266
|
+
return false;
|
|
262
267
|
}
|
|
263
268
|
function isScriptExtracted(importData) {
|
|
264
269
|
debugMessage(`Cli.ScriptOps.isScriptExtracted: start`);
|
|
@@ -291,32 +296,28 @@ function isScriptExtracted(importData) {
|
|
|
291
296
|
* @param {string} name Optional name of script. If supplied, only the script of that name is imported
|
|
292
297
|
* @param {string} file file name
|
|
293
298
|
* @param {ScriptImportOptions} options Script import options
|
|
294
|
-
* @returns {Promise<boolean>} true if
|
|
299
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
295
300
|
*/
|
|
296
301
|
export async function importScriptsFromFile(name, file, options = {
|
|
297
302
|
reUuid: false,
|
|
298
303
|
includeDefault: false
|
|
299
304
|
}) {
|
|
300
|
-
let outcome = false;
|
|
301
305
|
const filePath = getFilePath(file);
|
|
302
306
|
debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
await importScripts(name, importData, options);
|
|
311
|
-
}
|
|
312
|
-
outcome = true;
|
|
313
|
-
} catch (error) {
|
|
314
|
-
printMessage(`Error importing script '${name}': ${error.message}`, 'error');
|
|
315
|
-
debugMessage(error);
|
|
307
|
+
try {
|
|
308
|
+
const data = fs.readFileSync(filePath, 'utf8');
|
|
309
|
+
const importData = JSON.parse(data);
|
|
310
|
+
if (isScriptExtracted(importData)) {
|
|
311
|
+
await handleScriptFileImport(filePath, options, false);
|
|
312
|
+
} else {
|
|
313
|
+
await importScripts(name, importData, options);
|
|
316
314
|
}
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
315
|
+
debugMessage(`Cli.ScriptOps.importScriptsFromFile: end`);
|
|
316
|
+
return true;
|
|
317
|
+
} catch (error) {
|
|
318
|
+
printError(error);
|
|
319
|
+
}
|
|
320
|
+
return false;
|
|
320
321
|
}
|
|
321
322
|
|
|
322
323
|
/**
|
|
@@ -338,7 +339,7 @@ export async function importScriptsFromFiles(watch, options, validateScripts) {
|
|
|
338
339
|
try {
|
|
339
340
|
await handleScriptFileImport(path, options, validateScripts);
|
|
340
341
|
} catch (error) {
|
|
341
|
-
|
|
342
|
+
printError(error, `${path}`);
|
|
342
343
|
}
|
|
343
344
|
}
|
|
344
345
|
|
|
@@ -347,7 +348,7 @@ export async function importScriptsFromFiles(watch, options, validateScripts) {
|
|
|
347
348
|
persistent: watch
|
|
348
349
|
});
|
|
349
350
|
watcher.on('add', onChange).on('change', onChange).on('error', error => {
|
|
350
|
-
|
|
351
|
+
printError(error, `Watcher error`);
|
|
351
352
|
watcher.close();
|
|
352
353
|
}).on('ready', () => {
|
|
353
354
|
if (watch) {
|
|
@@ -467,41 +468,50 @@ function getScriptId(script) {
|
|
|
467
468
|
/**
|
|
468
469
|
* Delete script by id
|
|
469
470
|
* @param {String} id script id
|
|
471
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
470
472
|
*/
|
|
471
473
|
export async function deleteScriptId(id) {
|
|
472
474
|
const spinnerId = createProgressIndicator('indeterminate', undefined, `Deleting ${id}...`);
|
|
473
475
|
try {
|
|
474
476
|
await deleteScript(id);
|
|
475
477
|
stopProgressIndicator(spinnerId, `Deleted ${id}.`, 'success');
|
|
478
|
+
return true;
|
|
476
479
|
} catch (error) {
|
|
477
480
|
stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');
|
|
478
481
|
}
|
|
482
|
+
return false;
|
|
479
483
|
}
|
|
480
484
|
|
|
481
485
|
/**
|
|
482
486
|
* Delete script by name
|
|
483
487
|
* @param {String} name script name
|
|
488
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
484
489
|
*/
|
|
485
490
|
export async function deleteScriptName(name) {
|
|
486
491
|
const spinnerId = createProgressIndicator('indeterminate', undefined, `Deleting ${name}...`);
|
|
487
492
|
try {
|
|
488
493
|
await deleteScriptByName(name);
|
|
489
494
|
stopProgressIndicator(spinnerId, `Deleted ${name}.`, 'success');
|
|
495
|
+
return true;
|
|
490
496
|
} catch (error) {
|
|
491
497
|
stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');
|
|
492
498
|
}
|
|
499
|
+
return false;
|
|
493
500
|
}
|
|
494
501
|
|
|
495
502
|
/**
|
|
496
503
|
* Delete all non-default scripts
|
|
504
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
497
505
|
*/
|
|
498
506
|
export async function deleteAllScripts() {
|
|
499
507
|
const spinnerId = createProgressIndicator('indeterminate', undefined, `Deleting all non-default scripts...`);
|
|
500
508
|
try {
|
|
501
509
|
await deleteScripts();
|
|
502
510
|
stopProgressIndicator(spinnerId, `Deleted all non-default scripts.`, 'success');
|
|
511
|
+
return true;
|
|
503
512
|
} catch (error) {
|
|
504
513
|
stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');
|
|
505
514
|
}
|
|
515
|
+
return false;
|
|
506
516
|
}
|
|
507
517
|
//# sourceMappingURL=ScriptOps.js.map
|
package/esm/ops/ScriptOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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","includeDefault","getRealm","exportScriptsToFiles","extract","outcome","scriptList","filter","default","barId","fileBarId","extractScriptToFile","directory","scriptSkeleton","getScriptSkeleton","fileExtension","scriptFileName","scriptFilePath","scriptText","Array","isArray","isScriptExtracted","importData","extracted","Object","keys","importScriptsFromFile","options","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 {\n type ScriptExportInterface,\n type ScriptImportOptions,\n} 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 * @param {boolean} includeDefault true to include default scripts in export, false otherwise. Default: false\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 includeDefault = false\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(includeDefault);\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 {boolean} 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 * @param {boolean} includeDefault true to include default scripts in export, false otherwise. Default: false\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 includeDefault = false\n): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n let scriptList = await readScripts();\n if (!includeDefault)\n scriptList = scriptList.filter((script) => !script.default);\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 {ScriptImportOptions} options Script import options\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 options: ScriptImportOptions = {\n reUuid: false,\n includeDefault: false,\n }\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, options, false);\n } else {\n await importScripts(name, importData, options);\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 {boolean} watch whether or not to watch for file changes\n * @param {ScriptImportOptions} options Script import options\n * @param {boolean} validateScripts If true, validates Javascript scripts to ensure no errors exist in them. Default: false\n */\nexport async function importScriptsFromFiles(\n watch: boolean,\n options: ScriptImportOptions,\n validateScripts: boolean\n) {\n // If watch is true, it doesn't make sense to reUuid.\n options.reUuid = watch ? false : options.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, options, 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 {string} file Either a script file or an extract file\n * @param {ScriptImportOptions} options Script import options\n * @param {boolean} validateScripts If true, validates Javascript scripts to ensure no errors exist in them. Default: false\n */\nasync function handleScriptFileImport(\n file: string,\n options: ScriptImportOptions,\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, options, 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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"}
|
|
1
|
+
{"version":3,"file":"ScriptOps.js","names":["frodo","FrodoError","state","chokidar","fs","getFullExportConfig","isIdUsed","createProgressIndicator","createTable","debugMessage","failSpinner","printError","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","forEach","fullExport","headers","push","table","values","isScriptUsed","used","location","toString","exportScriptToFile","scriptId","includeMeta","fileName","filePath","scriptExport","exportScriptByNameToFile","message","exportScriptsToFile","includeDefault","getRealm","exportScriptsToFiles","extract","errors","barId","scriptList","filter","default","fileBarId","extractScriptToFile","directory","scriptSkeleton","getScriptSkeleton","fileExtension","scriptFileName","scriptFilePath","scriptText","Array","isArray","isScriptExtracted","importData","extracted","Object","keys","importScriptsFromFile","options","reUuid","data","readFileSync","JSON","parse","handleScriptFileImport","importScriptsFromFiles","watch","validateScripts","onChange","path","_stats","watcher","persistent","on","close","scriptFile","getScriptFile","getScriptExportByScriptFile","imported","endsWith","replace","getScriptExport","extractFile","getExtractFile","scriptRaw","startsWith","scriptExportRaw","getScriptId","scriptIds","Error","deleteScriptId","id","undefined","deleteScriptName","deleteAllScripts"],"sources":["../../src/ops/ScriptOps.ts"],"sourcesContent":["import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';\nimport { type ScriptSkeleton } from '@rockcarver/frodo-lib/types/api/ScriptApi';\nimport {\n type ScriptExportInterface,\n type ScriptImportOptions,\n} 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 printError,\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 successful, 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(spinnerId, `Error reading scripts`, 'fail');\n printError(error);\n return false;\n }\n if (!long && !usage) {\n scripts.forEach((script) => {\n printMessage(`${script.name}`, 'data');\n });\n debugMessage(`Cli.ScriptOps.listScripts: end`);\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 printError(error);\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`);\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 successful, false otherwise\n */\nexport async function exportScriptToFile(\n scriptId: string,\n file: string,\n includeMeta: boolean = 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`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${scriptId}'`);\n printError(error);\n }\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 successful, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string,\n includeMeta: boolean = 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`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${name}': ${error.message}`);\n printError(error);\n }\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 * @param {boolean} includeDefault true to include default scripts in export, false otherwise. Default: false\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportScriptsToFile(\n file: string,\n includeMeta: boolean = true,\n includeDefault: boolean = false\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(includeDefault);\n saveJsonToFile(scriptExport, getFilePath(fileName, true), includeMeta);\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end`);\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Export all scripts to individual files\n * @param {boolean} 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 * @param {boolean} includeDefault true to include default scripts in export, false otherwise. Default: false\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportScriptsToFiles(\n extract: boolean = false,\n includeMeta: boolean = true,\n includeDefault: boolean = false\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const errors: Error[] = [];\n let barId: string;\n try {\n let scriptList = await readScripts();\n if (!includeDefault)\n scriptList = scriptList.filter((script) => !script.default);\n 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 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 stopProgressIndicator(\n fileBarId,\n `Error exporting ${script.name}`,\n 'fail'\n );\n errors.push(error);\n }\n updateProgressIndicator(barId, `Exported script ${script.name}`);\n }\n if (errors.length > 0) {\n throw new FrodoError(`Error exporting scripts`, errors);\n }\n stopProgressIndicator(\n barId,\n `Exported ${scriptList.length} scripts to individual files.`\n );\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end`);\n return true;\n } catch (error) {\n stopProgressIndicator(barId, `Error exporting scripts`);\n printError(error);\n }\n}\n\n/**\n * Extracts a script from a script export into a separate file.\n * @param {ScriptExportInterface} scriptExport The script export\n * @param {string} scriptId The script id (optional if there is only one script in the export)\n * @param {string} directory The directory within the base directory to save the script file\n * @returns {boolean} true if successful, false otherwise\n */\nexport function extractScriptToFile(\n scriptExport: ScriptExportInterface,\n scriptId?: string,\n directory?: string\n): boolean {\n try {\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 return true;\n } catch (error) {\n printError(error);\n }\n return false;\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 {ScriptImportOptions} options Script import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importScriptsFromFile(\n name: string,\n file: string,\n options: ScriptImportOptions = {\n reUuid: false,\n includeDefault: false,\n }\n): Promise<boolean> {\n const filePath = getFilePath(file);\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const importData: ScriptExportInterface = JSON.parse(data);\n if (isScriptExtracted(importData)) {\n await handleScriptFileImport(filePath, options, false);\n } else {\n await importScripts(name, importData, options);\n }\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: end`);\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import extracted scripts.\n *\n * @param {boolean} watch whether or not to watch for file changes\n * @param {ScriptImportOptions} options Script import options\n * @param {boolean} validateScripts If true, validates Javascript scripts to ensure no errors exist in them. Default: false\n */\nexport async function importScriptsFromFiles(\n watch: boolean,\n options: ScriptImportOptions,\n validateScripts: boolean\n): Promise<void> {\n // If watch is true, it doesn't make sense to reUuid.\n options.reUuid = watch ? false : options.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, options, validateScripts);\n } catch (error) {\n printError(error, `${path}`);\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 printError(error, `Watcher 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 {string} file Either a script file or an extract file\n * @param {ScriptImportOptions} options Script import options\n * @param {boolean} validateScripts If true, validates Javascript scripts to ensure no errors exist in them. Default: false\n */\nasync function handleScriptFileImport(\n file: string,\n options: ScriptImportOptions,\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, options, 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): 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 * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteScriptId(id: string): Promise<boolean> {\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 return true;\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n return false;\n}\n\n/**\n * Delete script by name\n * @param {String} name script name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteScriptName(name: string): Promise<boolean> {\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 return true;\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n return false;\n}\n\n/**\n * Delete all non-default scripts\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteAllScripts(): Promise<boolean> {\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 return true;\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n return false;\n}\n"],"mappings":"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"}
|