@rockcarver/frodo-cli 2.0.0-55 → 2.0.0-56

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 CHANGED
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.0.0-55] - 2024-04-09
11
+
10
12
  ### Changed
11
13
 
12
14
  - Update to frodo-lib 2.0.0-77
@@ -1541,7 +1543,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1541
1543
  - Fixed problem with adding connection profiles
1542
1544
  - Miscellaneous bug fixes
1543
1545
 
1544
- [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-54...HEAD
1546
+ [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-55...HEAD
1547
+
1548
+ [2.0.0-55]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-54...v2.0.0-55
1545
1549
 
1546
1550
  [2.0.0-54]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-53...v2.0.0-54
1547
1551
 
@@ -13,14 +13,14 @@ program.description('Export scripts.').addOption(new Option('-n, --script-name <
13
13
  // )
14
14
  .addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export all scripts to a single file. Ignored with -n.')).addOption(new Option('-A, --all-separate', 'Export all scripts to separate files (*.script.json) in the current directory. Ignored with -n or -a.')).addOption(new Option('-N, --no-metadata', 'Does not include metadata in the export file.'))
15
15
  // deprecated option
16
- .addOption(new Option('-s, --script <script>', 'DEPRECATED! Use -n/--script-name instead. Name of the script.')).addOption(new Option('-x, --extract', 'Extract the script from the exported file, and save it to a separate file. Ignored with -n or -a.')).addOption(new Option('-d, --default', 'Export all scripts including the default scripts. Ignored with -n.')).action(
16
+ .addOption(new Option('-s, --script <script>', 'DEPRECATED! Use -n/--script-name instead. Name of the script.')).addOption(new Option('-x, --extract', 'Extract the script from the exported file, and save it to a separate file. Ignored with -a.')).addOption(new Option('-d, --default', 'Export all scripts including the default scripts. Ignored with -n.')).action(
17
17
  // implement command logic inside action handler
18
18
  async (host, realm, user, password, options, command) => {
19
19
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
20
20
  // export by name
21
21
  if ((options.scriptName || options.script) && (await getTokens())) {
22
22
  verboseMessage('Exporting script...');
23
- const outcome = await exportScriptByNameToFile(options.scriptName || options.script, options.file, options.metadata);
23
+ const outcome = await exportScriptByNameToFile(options.scriptName || options.script, options.file, options.metadata, options.extract);
24
24
  if (!outcome) process.exitCode = 1;
25
25
  }
26
26
  // -a / --all
@@ -1 +1 @@
1
- {"version":3,"file":"script-export.js","names":["Option","getTokens","exportScriptByNameToFile","exportScriptsToFile","exportScriptsToFiles","printMessage","verboseMessage","FrodoCommand","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","scriptName","script","outcome","file","metadata","process","exitCode","all","default","allSeparate","extract","help","parse"],"sources":["../../../src/cli/script/script-export.ts"],"sourcesContent":["import { Option } from 'commander';\n\nimport { getTokens } from '../../ops/AuthenticateOps';\nimport {\n exportScriptByNameToFile,\n exportScriptsToFile,\n exportScriptsToFiles,\n} from '../../ops/ScriptOps';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst program = new FrodoCommand('frodo script export');\n\nprogram\n .description('Export scripts.')\n .addOption(\n new Option(\n '-n, --script-name <name>',\n 'Name of the script. If specified, -a and -A are ignored.'\n )\n )\n // .addOption(\n // new Option(\n // '-i, --script-id <uuid>',\n // 'Uuid of the script. If specified, -a and -A are ignored.'\n // )\n // )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export all scripts to a single file. Ignored with -n.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all scripts to separate files (*.script.json) in the current directory. Ignored with -n or -a.'\n )\n )\n .addOption(\n new Option(\n '-N, --no-metadata',\n 'Does not include metadata in the export file.'\n )\n )\n // deprecated option\n .addOption(\n new Option(\n '-s, --script <script>',\n 'DEPRECATED! Use -n/--script-name instead. Name of the script.'\n )\n )\n .addOption(\n new Option(\n '-x, --extract',\n 'Extract the script from the exported file, and save it to a separate file. Ignored with -n or -a.'\n )\n )\n .addOption(\n new Option(\n '-d, --default',\n 'Export all scripts including the default scripts. Ignored with -n.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // export by name\n if ((options.scriptName || options.script) && (await getTokens())) {\n verboseMessage('Exporting script...');\n const outcome = await exportScriptByNameToFile(\n options.scriptName || options.script,\n options.file,\n options.metadata\n );\n if (!outcome) process.exitCode = 1;\n }\n // -a / --all\n else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all scripts to a single file...');\n const outcome = await exportScriptsToFile(\n options.file,\n options.metadata,\n options.default\n );\n if (!outcome) process.exitCode = 1;\n }\n // -A / --all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Exporting all scripts to separate files...');\n // -x / --extract\n const outcome = await exportScriptsToFiles(\n options.extract,\n options.metadata,\n options.default\n );\n if (!outcome) process.exitCode = 1;\n }\n\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
1
+ {"version":3,"file":"script-export.js","names":["Option","getTokens","exportScriptByNameToFile","exportScriptsToFile","exportScriptsToFiles","printMessage","verboseMessage","FrodoCommand","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","scriptName","script","outcome","file","metadata","extract","process","exitCode","all","default","allSeparate","help","parse"],"sources":["../../../src/cli/script/script-export.ts"],"sourcesContent":["import { Option } from 'commander';\n\nimport { getTokens } from '../../ops/AuthenticateOps';\nimport {\n exportScriptByNameToFile,\n exportScriptsToFile,\n exportScriptsToFiles,\n} from '../../ops/ScriptOps';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst program = new FrodoCommand('frodo script export');\n\nprogram\n .description('Export scripts.')\n .addOption(\n new Option(\n '-n, --script-name <name>',\n 'Name of the script. If specified, -a and -A are ignored.'\n )\n )\n // .addOption(\n // new Option(\n // '-i, --script-id <uuid>',\n // 'Uuid of the script. If specified, -a and -A are ignored.'\n // )\n // )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export all scripts to a single file. Ignored with -n.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all scripts to separate files (*.script.json) in the current directory. Ignored with -n or -a.'\n )\n )\n .addOption(\n new Option(\n '-N, --no-metadata',\n 'Does not include metadata in the export file.'\n )\n )\n // deprecated option\n .addOption(\n new Option(\n '-s, --script <script>',\n 'DEPRECATED! Use -n/--script-name instead. Name of the script.'\n )\n )\n .addOption(\n new Option(\n '-x, --extract',\n 'Extract the script from the exported file, and save it to a separate file. Ignored with -a.'\n )\n )\n .addOption(\n new Option(\n '-d, --default',\n 'Export all scripts including the default scripts. Ignored with -n.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // export by name\n if ((options.scriptName || options.script) && (await getTokens())) {\n verboseMessage('Exporting script...');\n const outcome = await exportScriptByNameToFile(\n options.scriptName || options.script,\n options.file,\n options.metadata,\n options.extract\n );\n if (!outcome) process.exitCode = 1;\n }\n // -a / --all\n else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all scripts to a single file...');\n const outcome = await exportScriptsToFile(\n options.file,\n options.metadata,\n options.default\n );\n if (!outcome) process.exitCode = 1;\n }\n // -A / --all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Exporting all scripts to separate files...');\n // -x / --extract\n const outcome = await exportScriptsToFiles(\n options.extract,\n options.metadata,\n options.default\n );\n if (!outcome) process.exitCode = 1;\n }\n\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigOps.js","names":["frodo","FrodoError","state","fs","fse","getFullExportConfig","getFullExportConfigFromDirectory","cleanupProgressIndicators","printError","printMessage","extractScriptToFile","getRealmName","getTypedFilename","titleCase","saveJsonToFile","getFilePath","getWorkingDirectory","utils","stringify","json","exportFullConfiguration","importFullConfiguration","config","exportEverythingToFile","file","includeMeta","options","useStringArrays","noDecode","coords","includeDefault","collectErrors","exportData","fileName","getRealm","length","error","exportEverythingToFiles","extract","meta","baseDirectory","Object","entries","forEach","type","obj","existsSync","mkdirSync","samlData","saml","cot","hosted","metadata","remote","id","value","concat","filename","entityId","samlType","authentication","includes","slice","lastIndexOf","recursive","outputFile","err","name","importEverythingFromFile","reUuidJourneys","reUuidScripts","cleanServices","global","realm","data","importEverythingFromFiles","getDirectory"],"sources":["../../src/ops/ConfigOps.ts"],"sourcesContent":["import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';\nimport {\n FullExportInterface,\n FullExportOptions,\n FullImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ConfigOps';\nimport { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport fs from 'fs';\nimport fse from 'fs-extra';\n\nimport {\n getFullExportConfig,\n getFullExportConfigFromDirectory,\n} from '../utils/Config';\nimport { cleanupProgressIndicators, printError, printMessage } from '../utils/Console';\nimport { extractScriptToFile } from './ScriptOps';\n\nconst {\n getRealmName,\n getTypedFilename,\n titleCase,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst { stringify } = frodo.utils.json;\nconst { exportFullConfiguration, importFullConfiguration } = frodo.config;\n\n/**\n * Export everything to separate files\n * @param {String} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEverythingToFile(\n file: string,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const collectErrors: Error[] = [];\n const exportData = await exportFullConfiguration(options, collectErrors);\n let fileName = getTypedFilename(\n `${titleCase(getRealmName(state.getRealm()))}`,\n `everything`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, getFilePath(fileName, true), includeMeta);\n if (collectErrors.length > 0) {\n throw new FrodoError(`Errors occurred during full export`, collectErrors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Export everything to separate 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 {FullExportOptions} options export options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEverythingToFiles(\n extract: boolean = false,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const collectErrors: Error[] = [];\n const exportData: FullExportInterface = await exportFullConfiguration(\n options,\n collectErrors\n );\n delete exportData.meta;\n const baseDirectory = getWorkingDirectory(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(exportData).forEach(([type, obj]: [string, any]) => {\n if (obj) {\n if (!fs.existsSync(`${baseDirectory}/${type}`)) {\n fs.mkdirSync(`${baseDirectory}/${type}`);\n }\n if (type == 'saml') {\n const samlData = {\n saml: {\n cot: {},\n hosted: {},\n metadata: {},\n remote: {},\n },\n };\n if (obj.cot) {\n if (!fs.existsSync(`${baseDirectory}/cot`)) {\n fs.mkdirSync(`${baseDirectory}/cot`);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj.cot).forEach(([id, value]: [string, any]) => {\n samlData.saml.cot = {\n [id]: value,\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/cot/${getTypedFilename(id, 'cot.saml')}`,\n includeMeta\n );\n });\n samlData.saml.cot = {};\n }\n Object.entries(obj.hosted)\n .concat(Object.entries(obj.remote))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach(([id, value]: [string, any]) => {\n const filename = getTypedFilename(\n value.entityId ? value.entityId : id,\n type\n );\n const samlType = obj.hosted[id] ? 'hosted' : 'remote';\n samlData.saml[samlType][id] = value;\n samlData.saml.metadata = {\n [id]: obj.metadata[id],\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n samlData.saml[samlType] = {};\n });\n } else if (type == 'authentication') {\n const fileName = getTypedFilename(\n `${frodo.utils.getRealmName(state.getRealm())}Realm`,\n 'authentication.settings'\n );\n saveJsonToFile(\n {\n authentication: obj,\n },\n `${baseDirectory}/${type}/${fileName}`,\n includeMeta\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj).forEach(([id, value]: [string, any]) => {\n if (type == 'config') {\n if (value != null) {\n const filename = `${id}.json`;\n if (filename.includes('/')) {\n fs.mkdirSync(\n `${baseDirectory}/${type}/${filename.slice(\n 0,\n filename.lastIndexOf('/')\n )}`,\n {\n recursive: true,\n }\n );\n }\n fse.outputFile(\n `${baseDirectory}/${type}/${filename}`,\n stringify(value),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n } else {\n const filename = getTypedFilename(\n value && value.name && type !== 'emailTemplate'\n ? value.name\n : id,\n type\n );\n if (extract && type == 'script') {\n extractScriptToFile(\n exportData as ScriptExportInterface,\n id,\n type\n );\n }\n saveJsonToFile(\n {\n [type]: {\n [id]: value,\n },\n },\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n }\n });\n }\n }\n });\n if (collectErrors.length > 0) {\n throw new FrodoError(`Errors occurred during full export`, collectErrors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import everything from a single file\n * @param {string} file The file path\n * @param {FullImportOptions} options import options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEverythingFromFile(\n file: string,\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const data = await getFullExportConfig(file);\n const collectErrors: Error[] = [];\n await importFullConfiguration(data, options, collectErrors);\n if (collectErrors.length > 0) {\n throw new FrodoError(\n `Errors occurred during full config import`,\n collectErrors\n );\n }\n return true;\n } catch (error) {\n cleanupProgressIndicators();\n printError(error);\n }\n return false;\n}\n\n/**\n * Import everything from separate files\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEverythingFromFiles(\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const data = await getFullExportConfigFromDirectory(state.getDirectory());\n const collectErrors: Error[] = [];\n await importFullConfiguration(data, options, collectErrors);\n if (collectErrors.length > 0) {\n throw new FrodoError(\n `Errors occurred during full config import`,\n collectErrors\n );\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConfigOps.js","names":["frodo","FrodoError","state","fs","fse","getFullExportConfig","getFullExportConfigFromDirectory","cleanupProgressIndicators","printError","printMessage","extractScriptToFile","getRealmName","getTypedFilename","titleCase","saveJsonToFile","getFilePath","getWorkingDirectory","utils","stringify","json","exportFullConfiguration","importFullConfiguration","config","exportEverythingToFile","file","includeMeta","options","useStringArrays","noDecode","coords","includeDefault","collectErrors","exportData","fileName","getRealm","length","error","exportEverythingToFiles","extract","meta","baseDirectory","Object","entries","forEach","type","obj","existsSync","mkdirSync","samlData","saml","cot","hosted","metadata","remote","id","value","concat","filename","entityId","samlType","authentication","includes","slice","lastIndexOf","recursive","outputFile","err","name","importEverythingFromFile","reUuidJourneys","reUuidScripts","cleanServices","global","realm","data","importEverythingFromFiles","getDirectory"],"sources":["../../src/ops/ConfigOps.ts"],"sourcesContent":["import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';\nimport {\n FullExportInterface,\n FullExportOptions,\n FullImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ConfigOps';\nimport { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport fs from 'fs';\nimport fse from 'fs-extra';\n\nimport {\n getFullExportConfig,\n getFullExportConfigFromDirectory,\n} from '../utils/Config';\nimport {\n cleanupProgressIndicators,\n printError,\n printMessage,\n} from '../utils/Console';\nimport { extractScriptToFile } from './ScriptOps';\n\nconst {\n getRealmName,\n getTypedFilename,\n titleCase,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst { stringify } = frodo.utils.json;\nconst { exportFullConfiguration, importFullConfiguration } = frodo.config;\n\n/**\n * Export everything to separate files\n * @param {String} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEverythingToFile(\n file: string,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const collectErrors: Error[] = [];\n const exportData = await exportFullConfiguration(options, collectErrors);\n let fileName = getTypedFilename(\n `${titleCase(getRealmName(state.getRealm()))}`,\n `everything`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, getFilePath(fileName, true), includeMeta);\n if (collectErrors.length > 0) {\n throw new FrodoError(`Errors occurred during full export`, collectErrors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Export everything to separate 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 {FullExportOptions} options export options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEverythingToFiles(\n extract: boolean = false,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const collectErrors: Error[] = [];\n const exportData: FullExportInterface = await exportFullConfiguration(\n options,\n collectErrors\n );\n delete exportData.meta;\n const baseDirectory = getWorkingDirectory(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(exportData).forEach(([type, obj]: [string, any]) => {\n if (obj) {\n if (!fs.existsSync(`${baseDirectory}/${type}`)) {\n fs.mkdirSync(`${baseDirectory}/${type}`);\n }\n if (type == 'saml') {\n const samlData = {\n saml: {\n cot: {},\n hosted: {},\n metadata: {},\n remote: {},\n },\n };\n if (obj.cot) {\n if (!fs.existsSync(`${baseDirectory}/cot`)) {\n fs.mkdirSync(`${baseDirectory}/cot`);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj.cot).forEach(([id, value]: [string, any]) => {\n samlData.saml.cot = {\n [id]: value,\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/cot/${getTypedFilename(id, 'cot.saml')}`,\n includeMeta\n );\n });\n samlData.saml.cot = {};\n }\n Object.entries(obj.hosted)\n .concat(Object.entries(obj.remote))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach(([id, value]: [string, any]) => {\n const filename = getTypedFilename(\n value.entityId ? value.entityId : id,\n type\n );\n const samlType = obj.hosted[id] ? 'hosted' : 'remote';\n samlData.saml[samlType][id] = value;\n samlData.saml.metadata = {\n [id]: obj.metadata[id],\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n samlData.saml[samlType] = {};\n });\n } else if (type == 'authentication') {\n const fileName = getTypedFilename(\n `${frodo.utils.getRealmName(state.getRealm())}Realm`,\n 'authentication.settings'\n );\n saveJsonToFile(\n {\n authentication: obj,\n },\n `${baseDirectory}/${type}/${fileName}`,\n includeMeta\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj).forEach(([id, value]: [string, any]) => {\n if (type == 'config') {\n if (value != null) {\n const filename = `${id}.json`;\n if (filename.includes('/')) {\n fs.mkdirSync(\n `${baseDirectory}/${type}/${filename.slice(\n 0,\n filename.lastIndexOf('/')\n )}`,\n {\n recursive: true,\n }\n );\n }\n fse.outputFile(\n `${baseDirectory}/${type}/${filename}`,\n stringify(value),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n } else {\n const filename = getTypedFilename(\n value && value.name && type !== 'emailTemplate'\n ? value.name\n : id,\n type\n );\n if (extract && type == 'script') {\n extractScriptToFile(\n exportData as ScriptExportInterface,\n id,\n type\n );\n }\n saveJsonToFile(\n {\n [type]: {\n [id]: value,\n },\n },\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n }\n });\n }\n }\n });\n if (collectErrors.length > 0) {\n throw new FrodoError(`Errors occurred during full export`, collectErrors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import everything from a single file\n * @param {string} file The file path\n * @param {FullImportOptions} options import options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEverythingFromFile(\n file: string,\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const data = await getFullExportConfig(file);\n const collectErrors: Error[] = [];\n await importFullConfiguration(data, options, collectErrors);\n if (collectErrors.length > 0) {\n throw new FrodoError(\n `Errors occurred during full config import`,\n collectErrors\n );\n }\n return true;\n } catch (error) {\n cleanupProgressIndicators();\n printError(error);\n }\n return false;\n}\n\n/**\n * Import everything from separate files\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEverythingFromFiles(\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const data = await getFullExportConfigFromDirectory(state.getDirectory());\n const collectErrors: Error[] = [];\n await importFullConfiguration(data, options, collectErrors);\n if (collectErrors.length > 0) {\n throw new FrodoError(\n `Errors occurred during full config import`,\n collectErrors\n );\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n"],"mappings":"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"}
@@ -153,9 +153,10 @@ export async function exportScriptToFile(scriptId, file, includeMeta = true) {
153
153
  * @param {string} name script name
154
154
  * @param {string} file file name
155
155
  * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
156
+ * @param {boolean} extract Extracts the scripts from the exports into separate files if true
156
157
  * @returns {Promise<boolean>} true if successful, false otherwise
157
158
  */
158
- export async function exportScriptByNameToFile(name, file, includeMeta = true) {
159
+ export async function exportScriptByNameToFile(name, file, includeMeta = true, extract = false) {
159
160
  debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);
160
161
  try {
161
162
  showSpinner(`Exporting script '${name}'...`);
@@ -166,6 +167,7 @@ export async function exportScriptByNameToFile(name, file, includeMeta = true) {
166
167
  const filePath = getFilePath(fileName, true);
167
168
  spinSpinner(`Exporting script '${name}' to '${filePath}'...`);
168
169
  const scriptExport = await exportScriptByName(name);
170
+ if (extract) extractScriptToFile(scriptExport);
169
171
  saveJsonToFile(scriptExport, filePath, includeMeta);
170
172
  succeedSpinner(`Exported script '${name}' to '${filePath}'.`);
171
173
  debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end`);
@@ -345,7 +347,8 @@ export async function importScriptsFromFiles(watch, options, validateScripts) {
345
347
 
346
348
  // We watch json files and script files.
347
349
  const watcher = chokidar.watch([`${getWorkingDirectory()}/**/*.script.json`, `${getWorkingDirectory()}/**/*.script.js`, `${getWorkingDirectory()}/**/*.script.groovy`], {
348
- persistent: watch
350
+ persistent: watch,
351
+ ignoreInitial: watch
349
352
  });
350
353
  watcher.on('add', onChange).on('change', onChange).on('error', error => {
351
354
  printError(error, `Watcher error`);
@@ -1 +1 @@
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":"AAAA,SAASA,KAAK,EAAEC,UAAU,EAAEC,KAAK,QAAQ,uBAAuB;AAMhE,OAAOC,QAAQ,MAAM,UAAU;AAC/B,OAAOC,EAAE,MAAM,IAAI;AAEnB,SAASC,mBAAmB,EAAEC,QAAQ,QAAQ,iBAAiB;AAC/D,SACEC,uBAAuB,EACvBC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,UAAU,EACVC,YAAY,EACZC,WAAW,EACXC,WAAW,EACXC,qBAAqB,EACrBC,cAAc,EACdC,uBAAuB,QAClB,kBAAkB;AACzB,OAAOC,QAAQ,MAAM,kBAAkB;AAEvC,MAAM;EACJC,gBAAgB;EAChBC,UAAU;EACVC,cAAc;EACdC,cAAc;EACdC,SAAS;EACTC,eAAe;EACfC,WAAW;EACXC;AACF,CAAC,GAAG1B,KAAK,CAAC2B,KAAK;AACf,MAAM;EACJC,WAAW;EACXC,YAAY;EACZC,kBAAkB;EAClBC,aAAa;EACbC,aAAa;EACbC,YAAY;EACZC,kBAAkB;EAClBC;AACF,CAAC,GAAGnC,KAAK,CAACoC,MAAM;;AAEhB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAACC,SAAyB,EAAU;EACvE,MAAMC,WAAW,GAAI,IAAGD,SAAS,CAACE,GAAG,CAAC,YAAY,CAAE,KAAIF,SAAS,CAACG,OAAQ,MAAKH,SAAS,CAACI,IAAK,EAAC;EAC/F,OAAOH,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASI,gBAAgBA,CAAA,EAAW;EACzC,IAAIC,QAAQ,GAAG,EAAE;EACjBA,QAAQ,IAAI,mCAAmC;EAC/CA,QAAQ,IAAI,iCAAiC;EAC7C,OAAOA,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACP,SAAyB,EAAU;EAC/D,MAAMQ,OAAO,GAAG;IAAEC,UAAU,EAAE,aAAa;IAAEC,MAAM,EAAE;EAAS,CAAC;EAC/D,MAAMT,WAAW,GAAI,KAAID,SAAS,CAACI,IAAK,MACtCI,OAAO,CAACR,SAAS,CAACW,QAAQ,CAC3B,MAAK1B,SAAS,CAACe,SAAS,CAACG,OAAO,CAACS,KAAK,CAAC,GAAG,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,CAAE,QACtDb,SAAS,CAACE,GACX,MAAK;EACN,OAAOD,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAea,WAAWA,CAC/BC,IAAa,GAAG,KAAK,EACrBC,KAAc,GAAG,KAAK,EACtBC,IAAmB,GAAG,IAAI,EACR;EAClB,IAAIC,SAAiB;EACrB,IAAIC,OAAyB,GAAG,EAAE;EAClChD,YAAY,CAAE,kCAAiC,CAAC;EAChD,IAAI;IACF+C,SAAS,GAAGjD,uBAAuB,CACjC,eAAe,EACf,CAAC,EACA,oBACH,CAAC;IACDkD,OAAO,GAAG,MAAM7B,WAAW,CAAC,CAAC;IAC7B6B,OAAO,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACjB,IAAI,CAACmB,aAAa,CAACD,CAAC,CAAClB,IAAI,CAAC,CAAC;IACpD3B,qBAAqB,CACnByC,SAAS,EACR,qBAAoBC,OAAO,CAACK,MAAO,WAAU,EAC9C,SACF,CAAC;EACH,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdhD,qBAAqB,CAACyC,SAAS,EAAG,uBAAsB,EAAE,MAAM,CAAC;IACjE7C,UAAU,CAACoD,KAAK,CAAC;IACjB,OAAO,KAAK;EACd;EACA,IAAI,CAACV,IAAI,IAAI,CAACC,KAAK,EAAE;IACnBG,OAAO,CAACO,OAAO,CAAE5B,MAAM,IAAK;MAC1BxB,YAAY,CAAE,GAAEwB,MAAM,CAACM,IAAK,EAAC,EAAE,MAAM,CAAC;IACxC,CAAC,CAAC;IACFjC,YAAY,CAAE,gCAA+B,CAAC;IAC9C,OAAO,IAAI;EACb;EACA,IAAIwD,UAAU,GAAG,IAAI;EACrB,MAAMC,OAAO,GAAGb,IAAI,GAChB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,GACtD,CAAC,MAAM,CAAC;EACZ,IAAIC,KAAK,EAAE;IACT,IAAI;MACFW,UAAU,GAAG,MAAM5D,mBAAmB,CAACkD,IAAI,CAAC;IAC9C,CAAC,CAAC,OAAOQ,KAAK,EAAE;MACdpD,UAAU,CAACoD,KAAK,CAAC;MACjB,OAAO,KAAK;IACd;IACA;IACA,OAAOE,UAAU,CAAC7B,MAAM;IACxB8B,OAAO,CAACC,IAAI,CAAC,MAAM,CAAC;EACtB;EACA,MAAMC,KAAK,GAAG5D,WAAW,CAAC0D,OAAO,CAAC;EAClC,MAAMpB,OAAO,GAAG;IAAEC,UAAU,EAAE,IAAI;IAAEC,MAAM,EAAE;EAAS,CAAC;EACtDS,OAAO,CAACO,OAAO,CAAE5B,MAAM,IAAK;IAC1B,MAAMiC,MAAM,GAAGhB,IAAI,GACf,CACEnC,QAAQ,CAACkB,MAAM,CAACM,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAC/BN,MAAM,CAACI,GAAG,EACVM,OAAO,CAACV,MAAM,CAACa,QAAQ,CAAC,EACxB/B,QAAQ,CAACK,SAAS,CAACa,MAAM,CAACK,OAAO,CAACS,KAAK,CAAC,GAAG,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAC5DjC,QAAQ,CAACkB,MAAM,CAACG,WAAW,EAAE,EAAE,CAAC,CACjC,GACD,CAACrB,QAAQ,CAACkB,MAAM,CAACM,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACrC,IAAIY,KAAK,EAAE;MACT,MAAMgB,YAAY,GAAGhE,QAAQ,CAAC2D,UAAU,EAAE7B,MAAM,CAACI,GAAG,EAAE,KAAK,CAAC;MAC5D6B,MAAM,CAACF,IAAI,CACTG,YAAY,CAACC,IAAI,GACZ,GAAE,KAAK,CAAC,aAAa,CAAE,QAAOD,YAAY,CAACE,QAAS,GAAE,GACvD,IAAI,CAAC,WAAW,CACtB,CAAC;IACH;IACAJ,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC;EACpB,CAAC,CAAC;EACFzD,YAAY,CAACwD,KAAK,CAACK,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;EACtChE,YAAY,CAAE,gCAA+B,CAAC;EAC9C,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeiE,kBAAkBA,CACtCC,QAAgB,EAChBpB,IAAY,EACZqB,WAAoB,GAAG,IAAI,EACT;EAClBnE,YAAY,CAAE,yCAAwC,CAAC;EACvD,IAAI;IACFI,WAAW,CAAE,qBAAoB8D,QAAS,MAAK,CAAC;IAChD,IAAIE,QAAQ,GAAG1D,gBAAgB,CAACwD,QAAQ,EAAE,QAAQ,CAAC;IACnD,IAAIpB,IAAI,EAAE;MACRsB,QAAQ,GAAGtB,IAAI;IACjB;IACA,MAAMuB,QAAQ,GAAGrD,WAAW,CAACoD,QAAQ,EAAE,IAAI,CAAC;IAC5C/D,WAAW,CAAE,qBAAoB6D,QAAS,SAAQG,QAAS,MAAK,CAAC;IACjE,MAAMC,YAAY,GAAG,MAAMlD,YAAY,CAAC8C,QAAQ,CAAC;IACjDtD,cAAc,CAAC0D,YAAY,EAAED,QAAQ,EAAEF,WAAW,CAAC;IACnD5D,cAAc,CAAE,oBAAmB2D,QAAS,SAAQG,QAAS,IAAG,CAAC;IACjErE,YAAY,CAAE,uCAAsC,CAAC;IACrD,OAAO,IAAI;EACb,CAAC,CAAC,OAAOsD,KAAK,EAAE;IACdrD,WAAW,CAAE,2BAA0BiE,QAAS,GAAE,CAAC;IACnDhE,UAAU,CAACoD,KAAK,CAAC;EACnB;EACA,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeiB,wBAAwBA,CAC5CtC,IAAY,EACZa,IAAY,EACZqB,WAAoB,GAAG,IAAI,EACT;EAClBnE,YAAY,CAAE,+CAA8C,CAAC;EAC7D,IAAI;IACFI,WAAW,CAAE,qBAAoB6B,IAAK,MAAK,CAAC;IAC5C,IAAImC,QAAQ,GAAG1D,gBAAgB,CAACuB,IAAI,EAAE,QAAQ,CAAC;IAC/C,IAAIa,IAAI,EAAE;MACRsB,QAAQ,GAAGtB,IAAI;IACjB;IACA,MAAMuB,QAAQ,GAAGrD,WAAW,CAACoD,QAAQ,EAAE,IAAI,CAAC;IAC5C/D,WAAW,CAAE,qBAAoB4B,IAAK,SAAQoC,QAAS,MAAK,CAAC;IAC7D,MAAMC,YAAY,GAAG,MAAMjD,kBAAkB,CAACY,IAAI,CAAC;IACnDrB,cAAc,CAAC0D,YAAY,EAAED,QAAQ,EAAEF,WAAW,CAAC;IACnD5D,cAAc,CAAE,oBAAmB0B,IAAK,SAAQoC,QAAS,IAAG,CAAC;IAC7DrE,YAAY,CAAE,6CAA4C,CAAC;IAC3D,OAAO,IAAI;EACb,CAAC,CAAC,OAAOsD,KAAK,EAAE;IACdrD,WAAW,CAAE,2BAA0BgC,IAAK,MAAKqB,KAAK,CAACkB,OAAQ,EAAC,CAAC;IACjEtE,UAAU,CAACoD,KAAK,CAAC;EACnB;EACA,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAemB,mBAAmBA,CACvC3B,IAAY,EACZqB,WAAoB,GAAG,IAAI,EAC3BO,cAAuB,GAAG,KAAK,EACb;EAClB1E,YAAY,CAAE,0CAAyC,CAAC;EACxD,IAAI;IACF,IAAIoE,QAAQ,GAAG1D,gBAAgB,CAC5B,MAAKI,SAAS,CAACrB,KAAK,CAACkF,QAAQ,CAAC,CAAC,CAAE,SAAQ,EAC1C,QACF,CAAC;IACD,IAAI7B,IAAI,EAAE;MACRsB,QAAQ,GAAGtB,IAAI;IACjB;IACA,MAAMwB,YAAY,GAAG,MAAMhD,aAAa,CAACoD,cAAc,CAAC;IACxD9D,cAAc,CAAC0D,YAAY,EAAEtD,WAAW,CAACoD,QAAQ,EAAE,IAAI,CAAC,EAAED,WAAW,CAAC;IACtEnE,YAAY,CAAE,wCAAuC,CAAC;IACtD,OAAO,IAAI;EACb,CAAC,CAAC,OAAOsD,KAAK,EAAE;IACdpD,UAAU,CAACoD,KAAK,CAAC;EACnB;EACA,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAesB,oBAAoBA,CACxCC,OAAgB,GAAG,KAAK,EACxBV,WAAoB,GAAG,IAAI,EAC3BO,cAAuB,GAAG,KAAK,EACb;EAClB1E,YAAY,CAAE,2CAA0C,CAAC;EACzD,MAAM8E,MAAe,GAAG,EAAE;EAC1B,IAAIC,KAAa;EACjB,IAAI;IACF,IAAIC,UAAU,GAAG,MAAM7D,WAAW,CAAC,CAAC;IACpC,IAAI,CAACuD,cAAc,EACjBM,UAAU,GAAGA,UAAU,CAACC,MAAM,CAAEtD,MAAM,IAAK,CAACA,MAAM,CAACuD,OAAO,CAAC;IAC7DH,KAAK,GAAGjF,uBAAuB,CAC7B,aAAa,EACbkF,UAAU,CAAC3B,MAAM,EACjB,0CACF,CAAC;IACD,KAAK,MAAM1B,MAAM,IAAIqD,UAAU,EAAE;MAC/B,MAAMG,SAAS,GAAGrF,uBAAuB,CACvC,aAAa,EACb,CAAC,EACA,oBAAmB6B,MAAM,CAACM,IAAK,KAClC,CAAC;MACD,MAAMa,IAAI,GAAG9B,WAAW,CAACN,gBAAgB,CAACiB,MAAM,CAACM,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC;MACvE,IAAI;QACF,MAAMqC,YAAY,GAAG,MAAMjD,kBAAkB,CAACM,MAAM,CAACM,IAAI,CAAC;QAC1D,IAAI4C,OAAO,EAAEO,mBAAmB,CAACd,YAAY,CAAC;QAC9C1D,cAAc,CAAC0D,YAAY,EAAExB,IAAI,EAAEqB,WAAW,CAAC;QAC/C3D,uBAAuB,CAAC2E,SAAS,EAAG,UAASxD,MAAM,CAACM,IAAK,OAAMa,IAAK,GAAE,CAAC;QACvExC,qBAAqB,CAAC6E,SAAS,EAAG,GAAExD,MAAM,CAACM,IAAK,aAAYa,IAAK,GAAE,CAAC;MACtE,CAAC,CAAC,OAAOQ,KAAK,EAAE;QACdhD,qBAAqB,CACnB6E,SAAS,EACR,mBAAkBxD,MAAM,CAACM,IAAK,EAAC,EAChC,MACF,CAAC;QACD6C,MAAM,CAACpB,IAAI,CAACJ,KAAK,CAAC;MACpB;MACA9C,uBAAuB,CAACuE,KAAK,EAAG,mBAAkBpD,MAAM,CAACM,IAAK,EAAC,CAAC;IAClE;IACA,IAAI6C,MAAM,CAACzB,MAAM,GAAG,CAAC,EAAE;MACrB,MAAM,IAAI7D,UAAU,CAAE,yBAAwB,EAAEsF,MAAM,CAAC;IACzD;IACAxE,qBAAqB,CACnByE,KAAK,EACJ,YAAWC,UAAU,CAAC3B,MAAO,+BAChC,CAAC;IACDrD,YAAY,CAAE,yCAAwC,CAAC;IACvD,OAAO,IAAI;EACb,CAAC,CAAC,OAAOsD,KAAK,EAAE;IACdhD,qBAAqB,CAACyE,KAAK,EAAG,yBAAwB,CAAC;IACvD7E,UAAU,CAACoD,KAAK,CAAC;EACnB;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS8B,mBAAmBA,CACjCd,YAAmC,EACnCJ,QAAiB,EACjBmB,SAAkB,EACT;EACT,IAAI;IACF,MAAMC,cAAc,GAAGpB,QAAQ,GAC3BI,YAAY,CAAC3C,MAAM,CAACuC,QAAQ,CAAC,GAC7BqB,iBAAiB,CAACjB,YAAY,CAAC;IACnC,MAAMkB,aAAa,GACjBF,cAAc,CAAC9C,QAAQ,KAAK,YAAY,GAAG,IAAI,GAAG,QAAQ;IAC5D,MAAMiD,cAAc,GAAG/E,gBAAgB,CACrC4E,cAAc,CAACrD,IAAI,EACnB,QAAQ,EACRuD,aACF,CAAC;IACD,MAAME,cAAc,GAAG1E,WAAW,CAChC,CAACqE,SAAS,GAAI,GAAEA,SAAU,GAAE,GAAG,EAAE,IAAII,cAAc,EACnD,IACF,CAAC;IACD,MAAME,UAAU,GAAGC,KAAK,CAACC,OAAO,CAACP,cAAc,CAAC3D,MAAM,CAAC,GACnD2D,cAAc,CAAC3D,MAAM,CAACe,IAAI,CAAC,IAAI,CAAC,GAChC4C,cAAc,CAAC3D,MAAM;IACzB2D,cAAc,CAAC3D,MAAM,GAAI,UAAS+D,cAAe,EAAC;IAClD7E,cAAc,CAAC8E,UAAU,EAAED,cAAc,CAAC;IAC1C,OAAO,IAAI;EACb,CAAC,CAAC,OAAOpC,KAAK,EAAE;IACdpD,UAAU,CAACoD,KAAK,CAAC;EACnB;EACA,OAAO,KAAK;AACd;AAEA,SAASwC,iBAAiBA,CAACC,UAAiC,EAAW;EACrE/F,YAAY,CAAE,wCAAuC,CAAC;EACtD,IAAIgG,SAAS,GAAG,IAAI;EACpB,KAAK,MAAM9B,QAAQ,IAAI+B,MAAM,CAACC,IAAI,CAACH,UAAU,CAACpE,MAAM,CAAC,EAAE;IACrD,MAAMA,MAAM,GAAGoE,UAAU,CAACpE,MAAM,CAACuC,QAAQ,CAAC,CAACvC,MAAM;IACjD,IAAIiE,KAAK,CAACC,OAAO,CAAClE,MAAM,CAAC,EAAE;MACzB3B,YAAY,CAAE,yDAAwD,CAAC;MACvEgG,SAAS,GAAG,KAAK;MACjB;IACF;IACA,IAAIrF,UAAU,CAACgB,MAAgB,CAAC,EAAE;MAChC3B,YAAY,CAAE,sDAAqD,CAAC;MACpEgG,SAAS,GAAG,IAAI;MAChB;IACF;IACA,IAAIjF,eAAe,EAAE;MACnBf,YAAY,CAAE,2DAA0D,CAAC;MACzEgG,SAAS,GAAG,KAAK;MACjB;IACF;IACA;EACF;EACAhG,YAAY,CAAE,mDAAkDgG,SAAU,GAAE,CAAC;EAC7E,OAAOA,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeG,qBAAqBA,CACzClE,IAAY,EACZa,IAAY,EACZsD,OAA4B,GAAG;EAC7BC,MAAM,EAAE,KAAK;EACb3B,cAAc,EAAE;AAClB,CAAC,EACiB;EAClB,MAAML,QAAQ,GAAGrD,WAAW,CAAC8B,IAAI,CAAC;EAClC9C,YAAY,CAAE,4CAA2C,CAAC;EAC1D,IAAI;IACF,MAAMsG,IAAI,GAAG3G,EAAE,CAAC4G,YAAY,CAAClC,QAAQ,EAAE,MAAM,CAAC;IAC9C,MAAM0B,UAAiC,GAAGS,IAAI,CAACC,KAAK,CAACH,IAAI,CAAC;IAC1D,IAAIR,iBAAiB,CAACC,UAAU,CAAC,EAAE;MACjC,MAAMW,sBAAsB,CAACrC,QAAQ,EAAE+B,OAAO,EAAE,KAAK,CAAC;IACxD,CAAC,MAAM;MACL,MAAM7E,aAAa,CAACU,IAAI,EAAE8D,UAAU,EAAEK,OAAO,CAAC;IAChD;IACApG,YAAY,CAAE,0CAAyC,CAAC;IACxD,OAAO,IAAI;EACb,CAAC,CAAC,OAAOsD,KAAK,EAAE;IACdpD,UAAU,CAACoD,KAAK,CAAC;EACnB;EACA,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeqD,sBAAsBA,CAC1CC,KAAc,EACdR,OAA4B,EAC5BS,eAAwB,EACT;EACf;EACAT,OAAO,CAACC,MAAM,GAAGO,KAAK,GAAG,KAAK,GAAGR,OAAO,CAACC,MAAM;;EAE/C;AACF;AACA;EACE;EACA,eAAeS,QAAQA,CAACC,IAAY,EAAEC,MAAiB,EAAiB;IACtE,IAAI;MACF,MAAMN,sBAAsB,CAACK,IAAI,EAAEX,OAAO,EAAES,eAAe,CAAC;IAC9D,CAAC,CAAC,OAAOvD,KAAK,EAAE;MACdpD,UAAU,CAACoD,KAAK,EAAG,GAAEyD,IAAK,EAAC,CAAC;IAC9B;EACF;;EAEA;EACA,MAAME,OAAO,GAAGvH,QAAQ,CAACkH,KAAK,CAC5B,CACG,GAAE3F,mBAAmB,CAAC,CAAE,mBAAkB,EAC1C,GAAEA,mBAAmB,CAAC,CAAE,iBAAgB,EACxC,GAAEA,mBAAmB,CAAC,CAAE,qBAAoB,CAC9C,EACD;IACEiG,UAAU,EAAEN;EACd,CACF,CAAC;EAEDK,OAAO,CACJE,EAAE,CAAC,KAAK,EAAEL,QAAQ,CAAC,CACnBK,EAAE,CAAC,QAAQ,EAAEL,QAAQ,CAAC,CACtBK,EAAE,CAAC,OAAO,EAAG7D,KAAK,IAAK;IACtBpD,UAAU,CAACoD,KAAK,EAAG,eAAc,CAAC;IAClC2D,OAAO,CAACG,KAAK,CAAC,CAAC;EACjB,CAAC,CAAC,CACDD,EAAE,CAAC,OAAO,EAAE,MAAM;IACjB,IAAIP,KAAK,EAAE;MACTzG,YAAY,CAAC,yBAAyB,CAAC;IACzC,CAAC,MAAM;MACL8G,OAAO,CAACG,KAAK,CAAC,CAAC;MACfjH,YAAY,CAAC,OAAO,CAAC;IACvB;EACF,CAAC,CAAC;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAeuG,sBAAsBA,CACnC5D,IAAY,EACZsD,OAA4B,EAC5BS,eAAwB,EACxB;EACA7G,YAAY,CAAE,6CAA4C,CAAC;EAC3D,MAAMqH,UAAU,GAAGC,aAAa,CAACxE,IAAI,CAAC;EACtC,MAAMnB,MAAM,GAAG4F,2BAA2B,CAACF,UAAU,CAAC;EAEtD,MAAMG,QAAQ,GAAG,MAAMjG,aAAa,CAAC,EAAE,EAAEI,MAAM,EAAEyE,OAAO,EAAES,eAAe,CAAC;EAC1E,IAAIW,QAAQ,EAAE;IACZrH,YAAY,CAAE,aAAYkH,UAAW,GAAE,CAAC;EAC1C;EACArH,YAAY,CAAE,2CAA0C,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASsH,aAAaA,CAACxE,IAAY,EAAU;EAC3C,IAAIA,IAAI,CAAC2E,QAAQ,CAAC,cAAc,CAAC,EAAE;IACjC,OAAO3E,IAAI;EACb;EACA,OAAOA,IAAI,CAAC4E,OAAO,CAAC,uBAAuB,EAAE,cAAc,CAAC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASH,2BAA2BA,CAClCF,UAAkB,EACK;EACvB,MAAM/C,YAAY,GAAGqD,eAAe,CAACN,UAAU,CAAC;EAChD,MAAM/B,cAAc,GAAGC,iBAAiB,CAACjB,YAAY,CAAC;EAEtD,MAAMsD,WAAW,GAAGC,cAAc,CAACvC,cAAc,CAAC;EAClD,IAAI,CAACsC,WAAW,EAAE;IAChB,OAAOtD,YAAY;EACrB;EAEA,MAAMwD,SAAS,GAAGnI,EAAE,CAAC4G,YAAY,CAACqB,WAAW,EAAE,MAAM,CAAC;EACtDtC,cAAc,CAAC3D,MAAM,GAAGmG,SAAS,CAACrF,KAAK,CAAC,IAAI,CAAC;EAE7C,OAAO6B,YAAY;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASuD,cAAcA,CAACvC,cAA8B,EAAiB;EACrE,MAAMsC,WAAW,GAAGtC,cAAc,CAAC3D,MAAM;EACzC,IAAIiE,KAAK,CAACC,OAAO,CAAC+B,WAAW,CAAC,EAAE;IAC9B,OAAO,IAAI;EACb;EACA,IACEA,WAAW,CAACG,UAAU,CAAC,SAAS,CAAC,KAChCH,WAAW,CAACH,QAAQ,CAAC,KAAK,CAAC,IAAIG,WAAW,CAACH,QAAQ,CAAC,SAAS,CAAC,CAAC,EAChE;IACA,OAAOG,WAAW,CAACF,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;EAC3C;EACA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,eAAeA,CAAC7E,IAAY,EAAyB;EAC5D,MAAMkF,eAAe,GAAGrI,EAAE,CAAC4G,YAAY,CAACzD,IAAI,EAAE,MAAM,CAAC;EACrD,MAAMwB,YAAY,GAAGkC,IAAI,CAACC,KAAK,CAACuB,eAAe,CAA0B;EAEzE,OAAO1D,YAAY;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASiB,iBAAiBA,CAAC5D,MAA6B,EAAkB;EACxE,MAAMuC,QAAQ,GAAG+D,WAAW,CAACtG,MAAM,CAAC;EACpC,OAAOA,MAAM,CAACA,MAAM,CAACuC,QAAQ,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS+D,WAAWA,CAACtG,MAA6B,EAAU;EAC1D,MAAMuG,SAAS,GAAGjC,MAAM,CAACC,IAAI,CAACvE,MAAM,CAACA,MAAM,CAAC;EAC5C,IAAIuG,SAAS,CAAC7E,MAAM,KAAK,CAAC,EAAE;IAC1B,MAAM,IAAI8E,KAAK,CAAE,4BAA2BD,SAAS,CAAC7E,MAAO,EAAC,CAAC;EACjE;EACA,OAAO6E,SAAS,CAAC,CAAC,CAAC;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeE,cAAcA,CAACC,EAAU,EAAoB;EACjE,MAAMtF,SAAS,GAAGjD,uBAAuB,CACvC,eAAe,EACfwI,SAAS,EACR,YAAWD,EAAG,KACjB,CAAC;EACD,IAAI;IACF,MAAM7G,YAAY,CAAC6G,EAAE,CAAC;IACtB/H,qBAAqB,CAACyC,SAAS,EAAG,WAAUsF,EAAG,GAAE,EAAE,SAAS,CAAC;IAC7D,OAAO,IAAI;EACb,CAAC,CAAC,OAAO/E,KAAK,EAAE;IACdhD,qBAAqB,CAACyC,SAAS,EAAG,UAASO,KAAK,CAACkB,OAAQ,EAAC,EAAE,MAAM,CAAC;EACrE;EACA,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe+D,gBAAgBA,CAACtG,IAAY,EAAoB;EACrE,MAAMc,SAAS,GAAGjD,uBAAuB,CACvC,eAAe,EACfwI,SAAS,EACR,YAAWrG,IAAK,KACnB,CAAC;EACD,IAAI;IACF,MAAMR,kBAAkB,CAACQ,IAAI,CAAC;IAC9B3B,qBAAqB,CAACyC,SAAS,EAAG,WAAUd,IAAK,GAAE,EAAE,SAAS,CAAC;IAC/D,OAAO,IAAI;EACb,CAAC,CAAC,OAAOqB,KAAK,EAAE;IACdhD,qBAAqB,CAACyC,SAAS,EAAG,UAASO,KAAK,CAACkB,OAAQ,EAAC,EAAE,MAAM,CAAC;EACrE;EACA,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAegE,gBAAgBA,CAAA,EAAqB;EACzD,MAAMzF,SAAS,GAAGjD,uBAAuB,CACvC,eAAe,EACfwI,SAAS,EACR,qCACH,CAAC;EACD,IAAI;IACF,MAAM5G,aAAa,CAAC,CAAC;IACrBpB,qBAAqB,CACnByC,SAAS,EACR,kCAAiC,EAClC,SACF,CAAC;IACD,OAAO,IAAI;EACb,CAAC,CAAC,OAAOO,KAAK,EAAE;IACdhD,qBAAqB,CAACyC,SAAS,EAAG,UAASO,KAAK,CAACkB,OAAQ,EAAC,EAAE,MAAM,CAAC;EACrE;EACA,OAAO,KAAK;AACd"}
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","extract","extractScriptToFile","message","exportScriptsToFile","includeDefault","getRealm","exportScriptsToFiles","errors","barId","scriptList","filter","default","fileBarId","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","ignoreInitial","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 * @param {boolean} extract Extracts the scripts from the exports into separate files if 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 extract: boolean = false\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 if (extract) extractScriptToFile(scriptExport);\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 ignoreInitial: 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-cli",
3
- "version": "2.0.0-55",
3
+ "version": "2.0.0-56",
4
4
  "type": "module",
5
5
  "description": "A command line interface to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.",
6
6
  "keywords": [