@rockcarver/frodo-cli 2.0.0-30 → 2.0.0-32

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,10 @@ 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-31] - 2023-11-17
11
+
12
+ ## [2.0.0-30] - 2023-11-04
13
+
10
14
  ### Added
11
15
 
12
16
  - \#283: Support for authentication settings:
@@ -24,14 +28,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
24
28
  `frodo authn describe --json <myTenant> <realm>`
25
29
 
26
30
  `frodo authn describe <myTenant> <username> <password>`
31
+
27
32
  - Describe authentication settings in machine-readable format (json):<br>
28
33
  `frodo authn describe --json <myTenant> <realm>`
29
34
 
30
35
  `frodo authn describe --json <myTenant> <realm> <username> <password>`
36
+
31
37
  - Export authentication settings to file:<br>
32
38
  `frodo authn export <myTenant> <realm>`
33
39
 
34
40
  `frodo authn export <myTenant> <realm> <username> <password>`
41
+
35
42
  - Import authentication settings from file:<br>
36
43
  `frodo authn import -f alphaRealm.authentication.settings.json <myTenant> <realm>`
37
44
 
@@ -1422,7 +1429,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1422
1429
  - Fixed problem with adding connection profiles
1423
1430
  - Miscellaneous bug fixes
1424
1431
 
1425
- [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-29...HEAD
1432
+ [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-31...HEAD
1433
+
1434
+ [2.0.0-31]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-30...v2.0.0-31
1435
+
1436
+ [2.0.0-30]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-29...v2.0.0-30
1426
1437
 
1427
1438
  [2.0.0-29]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-28...v2.0.0-29
1428
1439
 
@@ -1,17 +1,28 @@
1
- import { frodo } from '@rockcarver/frodo-lib';
1
+ import { frodo, state } from '@rockcarver/frodo-lib';
2
2
  import { Option } from 'commander';
3
+ import { deleteAllScripts, deleteScriptId, deleteScriptName } from '../../ops/ScriptOps';
4
+ import { printMessage, verboseMessage } from '../../utils/Console';
3
5
  import { FrodoCommand } from '../FrodoCommand';
4
6
  const {
5
7
  getTokens
6
8
  } = frodo.login;
7
- const program = new FrodoCommand('frodo cmd delete');
8
- program.description('Cmd delete.').addOption(new Option('-i, --cmd-id <cmd-id>', 'Cmd id. If specified, -a and -A are ignored.')).addOption(new Option('-a, --all', 'Delete all cmds in a realm. Ignored with -i.')).addOption(new Option('--no-deep', 'No deep delete. This leaves orphaned configuration artifacts behind.')).action(
9
+ const program = new FrodoCommand('frodo script delete');
10
+ program.description('Delete scripts.').addOption(new Option('-i, --script-id <script>', 'id of a script. If specified, -a and -A are ignored.')).addOption(new Option('-n, --script-name <script>', 'name of a script. If specified, -a and -A are ignored.')).addOption(new Option('-a, --all', 'Delete all non-default scripts in a realm. Ignored with -i.')).action(
9
11
  // implement command logic inside action handler
10
12
  async (host, realm, user, password, options, command) => {
11
13
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
12
- if (await getTokens()) {
13
- // code goes here
14
+ if (options.scriptId && (await getTokens())) {
15
+ verboseMessage(`Deleting script ${options.scriptId} in realm "${state.getRealm()}"...`);
16
+ deleteScriptId(options.scriptId);
17
+ } else if (options.scriptName && (await getTokens())) {
18
+ verboseMessage(`Deleting script ${options.scriptName} in realm "${state.getRealm()}"...`);
19
+ deleteScriptName(options.scriptName);
20
+ } else if (options.all && (await getTokens())) {
21
+ verboseMessage('Deleting all non-default scripts...');
22
+ deleteAllScripts();
14
23
  } else {
24
+ printMessage('Unrecognized combination of options or no options...', 'error');
25
+ program.help();
15
26
  process.exitCode = 1;
16
27
  }
17
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"script-delete.js","names":["frodo","Option","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","process","exitCode","parse"],"sources":["../../../src/cli/script/script-delete.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo cmd delete');\n\nprogram\n .description('Cmd delete.')\n .addOption(\n new Option(\n '-i, --cmd-id <cmd-id>',\n 'Cmd id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option('-a, --all', 'Delete all cmds in a realm. Ignored with -i.')\n )\n .addOption(\n new Option(\n '--no-deep',\n 'No deep delete. This leaves orphaned configuration artifacts behind.'\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 if (await getTokens()) {\n // code goes here\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGH,KAAK,CAACI,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,kBAAkB,CAAC;AAEpDG,OAAO,CACJC,WAAW,CAAC,aAAa,CAAC,CAC1BC,SAAS,CACR,IAAIN,MAAM,CACR,uBAAuB,EACvB,8CACF,CACF,CAAC,CACAM,SAAS,CACR,IAAIN,MAAM,CAAC,WAAW,EAAE,8CAA8C,CACxE,CAAC,CACAM,SAAS,CACR,IAAIN,MAAM,CACR,WAAW,EACX,sEACF,CACF,CAAC,CACAO,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMX,SAAS,CAAC,CAAC,EAAE;IACrB;EAAA,CACD,MAAM;IACLa,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHZ,OAAO,CAACa,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"script-delete.js","names":["frodo","state","Option","deleteAllScripts","deleteScriptId","deleteScriptName","printMessage","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","scriptId","getRealm","scriptName","all","help","process","exitCode","parse"],"sources":["../../../src/cli/script/script-delete.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n deleteAllScripts,\n deleteScriptId,\n deleteScriptName,\n} from '../../ops/ScriptOps';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo script delete');\n\nprogram\n .description('Delete scripts.')\n .addOption(\n new Option(\n '-i, --script-id <script>',\n 'id of a script. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '-n, --script-name <script>',\n 'name of a script. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '-a, --all',\n 'Delete all non-default scripts in a realm. Ignored with -i.'\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 if (options.scriptId && (await getTokens())) {\n verboseMessage(\n `Deleting script ${\n options.scriptId\n } in realm \"${state.getRealm()}\"...`\n );\n deleteScriptId(options.scriptId);\n } else if (options.scriptName && (await getTokens())) {\n verboseMessage(\n `Deleting script ${\n options.scriptName\n } in realm \"${state.getRealm()}\"...`\n );\n deleteScriptName(options.scriptName);\n } else if (options.all && (await getTokens())) {\n verboseMessage('Deleting all non-default scripts...');\n deleteAllScripts();\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":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SACEC,gBAAgB,EAChBC,cAAc,EACdC,gBAAgB,QACX,qBAAqB;AAC5B,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGT,KAAK,CAACU,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,qBAAqB,CAAC;AAEvDG,OAAO,CACJC,WAAW,CAAC,iBAAiB,CAAC,CAC9BC,SAAS,CACR,IAAIX,MAAM,CACR,0BAA0B,EAC1B,sDACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,4BAA4B,EAC5B,wDACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,WAAW,EACX,6DACF,CACF,CAAC,CACAY,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAID,OAAO,CAACG,QAAQ,KAAK,MAAMb,SAAS,CAAC,CAAC,CAAC,EAAE;IAC3CF,cAAc,CACX,mBACCY,OAAO,CAACG,QACT,cAAarB,KAAK,CAACsB,QAAQ,CAAC,CAAE,MACjC,CAAC;IACDnB,cAAc,CAACe,OAAO,CAACG,QAAQ,CAAC;EAClC,CAAC,MAAM,IAAIH,OAAO,CAACK,UAAU,KAAK,MAAMf,SAAS,CAAC,CAAC,CAAC,EAAE;IACpDF,cAAc,CACX,mBACCY,OAAO,CAACK,UACT,cAAavB,KAAK,CAACsB,QAAQ,CAAC,CAAE,MACjC,CAAC;IACDlB,gBAAgB,CAACc,OAAO,CAACK,UAAU,CAAC;EACtC,CAAC,MAAM,IAAIL,OAAO,CAACM,GAAG,KAAK,MAAMhB,SAAS,CAAC,CAAC,CAAC,EAAE;IAC7CF,cAAc,CAAC,qCAAqC,CAAC;IACrDJ,gBAAgB,CAAC,CAAC;EACpB,CAAC,MAAM;IACLG,YAAY,CACV,sDAAsD,EACtD,OACF,CAAC;IACDK,OAAO,CAACe,IAAI,CAAC,CAAC;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHjB,OAAO,CAACkB,KAAK,CAAC,CAAC"}
@@ -10,9 +10,7 @@ export default function setup() {
10
10
 
11
11
  program.command('export', 'Export scripts.');
12
12
  program.command('import', 'Import scripts.');
13
-
14
- // program.command('delete', 'Delete scripts.');
15
-
13
+ program.command('delete', 'Delete scripts.');
16
14
  return program;
17
15
  }
18
16
  //# sourceMappingURL=script.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"script.js","names":["path","fileURLToPath","FrodoStubCommand","__dirname","dirname","import","meta","url","setup","program","description","executableDir","command"],"sources":["../../../src/cli/script/script.ts"],"sourcesContent":["import path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport { FrodoStubCommand } from '../FrodoCommand';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport default function setup() {\n const program = new FrodoStubCommand('script')\n .description('Manage scripts.')\n .executableDir(__dirname);\n\n program.command('list', 'List scripts.');\n\n // program.command('describe', 'Describe scripts.');\n\n program.command('export', 'Export scripts.');\n\n program.command('import', 'Import scripts.');\n\n // program.command('delete', 'Delete scripts.');\n\n return program;\n}\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,MAAM;AACvB,SAASC,aAAa,QAAQ,KAAK;AAEnC,SAASC,gBAAgB,QAAQ,iBAAiB;AAElD,MAAMC,SAAS,GAAGH,IAAI,CAACI,OAAO,CAACH,aAAa,CAACI,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC;AAE9D,eAAe,SAASC,KAAKA,CAAA,EAAG;EAC9B,MAAMC,OAAO,GAAG,IAAIP,gBAAgB,CAAC,QAAQ,CAAC,CAC3CQ,WAAW,CAAC,iBAAiB,CAAC,CAC9BC,aAAa,CAACR,SAAS,CAAC;EAE3BM,OAAO,CAACG,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC;;EAExC;;EAEAH,OAAO,CAACG,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC;EAE5CH,OAAO,CAACG,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC;;EAE5C;;EAEA,OAAOH,OAAO;AAChB"}
1
+ {"version":3,"file":"script.js","names":["path","fileURLToPath","FrodoStubCommand","__dirname","dirname","import","meta","url","setup","program","description","executableDir","command"],"sources":["../../../src/cli/script/script.ts"],"sourcesContent":["import path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport { FrodoStubCommand } from '../FrodoCommand';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport default function setup() {\n const program = new FrodoStubCommand('script')\n .description('Manage scripts.')\n .executableDir(__dirname);\n\n program.command('list', 'List scripts.');\n\n // program.command('describe', 'Describe scripts.');\n\n program.command('export', 'Export scripts.');\n\n program.command('import', 'Import scripts.');\n\n program.command('delete', 'Delete scripts.');\n\n return program;\n}\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,MAAM;AACvB,SAASC,aAAa,QAAQ,KAAK;AAEnC,SAASC,gBAAgB,QAAQ,iBAAiB;AAElD,MAAMC,SAAS,GAAGH,IAAI,CAACI,OAAO,CAACH,aAAa,CAACI,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC;AAE9D,eAAe,SAASC,KAAKA,CAAA,EAAG;EAC9B,MAAMC,OAAO,GAAG,IAAIP,gBAAgB,CAAC,QAAQ,CAAC,CAC3CQ,WAAW,CAAC,iBAAiB,CAAC,CAC9BC,aAAa,CAACR,SAAS,CAAC;EAE3BM,OAAO,CAACG,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC;;EAExC;;EAEAH,OAAO,CAACG,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC;EAE5CH,OAAO,CAACG,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC;EAE5CH,OAAO,CAACG,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC;EAE5C,OAAOH,OAAO;AAChB"}
@@ -1,7 +1,7 @@
1
1
  import { frodo, state } from '@rockcarver/frodo-lib';
2
2
  import chokidar from 'chokidar';
3
3
  import fs from 'fs';
4
- import { createProgressBar, createTable, debugMessage, failSpinner, printMessage, showSpinner, spinSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
4
+ import { createProgressBar, createProgressIndicator, createTable, debugMessage, failSpinner, printMessage, showSpinner, spinSpinner, stopProgressBar, stopProgressIndicator, succeedSpinner, updateProgressBar } from '../utils/Console';
5
5
  import { getTypedFilename, saveJsonToFile, saveTextToFile, titleCase } from '../utils/ExportImportUtils';
6
6
  import wordwrap from './utils/Wordwrap';
7
7
  const {
@@ -9,7 +9,10 @@ const {
9
9
  exportScript,
10
10
  exportScriptByName,
11
11
  exportScripts,
12
- importScripts
12
+ importScripts,
13
+ deleteScript,
14
+ deleteScriptByName,
15
+ deleteScripts
13
16
  } = frodo.script;
14
17
  const {
15
18
  isBase64Encoded,
@@ -433,4 +436,45 @@ function getScriptId(script) {
433
436
  }
434
437
  return scriptIds[0];
435
438
  }
439
+
440
+ /**
441
+ * Delete script by id
442
+ * @param {String} id script id
443
+ */
444
+ export async function deleteScriptId(id) {
445
+ createProgressIndicator('indeterminate', undefined, `Deleting ${id}...`);
446
+ try {
447
+ await deleteScript(id);
448
+ stopProgressIndicator(`Deleted ${id}.`, 'success');
449
+ } catch (error) {
450
+ stopProgressIndicator(`Error: ${error.message}`, 'fail');
451
+ }
452
+ }
453
+
454
+ /**
455
+ * Delete script by name
456
+ * @param {String} name script name
457
+ */
458
+ export async function deleteScriptName(name) {
459
+ createProgressIndicator('indeterminate', undefined, `Deleting ${name}...`);
460
+ try {
461
+ await deleteScriptByName(name);
462
+ stopProgressIndicator(`Deleted ${name}.`, 'success');
463
+ } catch (error) {
464
+ stopProgressIndicator(`Error: ${error.message}`, 'fail');
465
+ }
466
+ }
467
+
468
+ /**
469
+ * Delete all non-default scripts
470
+ */
471
+ export async function deleteAllScripts() {
472
+ createProgressIndicator('indeterminate', undefined, `Deleting all non-default scripts...`);
473
+ try {
474
+ await deleteScripts();
475
+ stopProgressIndicator(`Deleted all non-default scripts.`, 'success');
476
+ } catch (error) {
477
+ stopProgressIndicator(`Error: ${error.message}`, 'fail');
478
+ }
479
+ }
436
480
  //# sourceMappingURL=ScriptOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScriptOps.js","names":["frodo","state","chokidar","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","spinSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","saveTextToFile","titleCase","wordwrap","readScripts","exportScript","exportScriptByName","exportScripts","importScripts","script","isBase64Encoded","getFilePath","getWorkingDirectory","utils","getOneLineDescription","scriptObj","description","_id","context","name","getTableHeaderMd","markdown","getTableRowMd","langMap","JAVASCRIPT","GROOVY","language","split","join","listScripts","long","outcome","scripts","sort","a","b","localeCompare","table","forEach","push","toString","error","message","exportScriptToFile","scriptId","file","fileName","filePath","scriptExport","exportScriptByNameToFile","exportScriptsToFile","getRealm","exportScriptsToFiles","scriptList","length","exportScriptsToFilesExtract","fileExtension","scriptFileName","scriptFilePath","scriptSkeleton","getScriptSkeleton","scriptText","Array","isArray","isValidUrl","urlString","Boolean","URL","isScriptExtracted","importData","extracted","Object","keys","importScriptsFromFile","reUuid","readFile","err","data","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"],"sources":["../../src/ops/ScriptOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type ScriptSkeleton } from '@rockcarver/frodo-lib/types/api/ScriptApi';\nimport { type ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport chokidar from 'chokidar';\nimport fs from 'fs';\n\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n spinSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n saveTextToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n readScripts,\n exportScript,\n exportScriptByName,\n exportScripts,\n importScripts,\n} = frodo.script;\n\nconst { isBase64Encoded, getFilePath, getWorkingDirectory } = frodo.utils;\n\n/**\n * Get a one-line description of the script object\n * @param {ScriptSkeleton} scriptObj script object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(scriptObj: ScriptSkeleton): string {\n const description = `[${scriptObj._id['brightCyan']}] ${scriptObj.context} - ${scriptObj.name}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name | Language | Type | Id |\\n';\n markdown += '| ---- | -------- | ---- | ---|';\n return markdown;\n}\n\n/**\n * Get a one-line description of the script object in markdown\n * @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe\n * @returns {string} markdown table row\n */\nexport function getTableRowMd(scriptObj: ScriptSkeleton): string {\n const langMap = { JAVASCRIPT: 'JavaSscript', GROOVY: 'Groovy' };\n const description = `| ${scriptObj.name} | ${\n langMap[scriptObj.language]\n } | ${titleCase(scriptObj.context.split('_').join(' '))} | \\`${\n scriptObj._id\n }\\` |`;\n return description;\n}\n\n/**\n * List scripts\n * @param {boolean} long detail list\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function listScripts(long = false): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.listScripts: start`);\n try {\n const scripts = await readScripts();\n scripts.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable([\n 'Name',\n 'UUID',\n 'Language',\n 'Context',\n 'Description',\n ]);\n const langMap = { JAVASCRIPT: 'JS', GROOVY: 'Groovy' };\n scripts.forEach((script) => {\n table.push([\n wordwrap(script.name, 25, ' '),\n script._id,\n langMap[script.language],\n wordwrap(titleCase(script.context.split('_').join(' ')), 25),\n wordwrap(script.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n scripts.forEach((script) => {\n printMessage(`${script.name}`, 'data');\n });\n }\n } catch (error) {\n outcome = false;\n printMessage(`Error listing scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.listScripts: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Export script by id to file\n * @param {string} scriptId script uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptToFile(\n scriptId: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);\n try {\n showSpinner(`Exporting script '${scriptId}'...`);\n let fileName = getTypedFilename(scriptId, 'script');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n spinSpinner(`Exporting script '${scriptId}' to '${filePath}'...`);\n const scriptExport = await exportScript(scriptId);\n saveJsonToFile(scriptExport, filePath);\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 * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);\n try {\n showSpinner(`Exporting script '${name}'...`);\n let fileName = getTypedFilename(name, 'script');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n spinSpinner(`Exporting script '${name}' to '${filePath}'...`);\n const scriptExport = await exportScriptByName(name);\n saveJsonToFile(scriptExport, filePath);\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 * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFile(file: string): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Scripts`,\n 'script'\n );\n if (file) {\n fileName = file;\n }\n const scriptExport = await exportScripts();\n saveJsonToFile(scriptExport, getFilePath(fileName, true));\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);\n return true;\n } catch (error) {\n printMessage(`Error exporting scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to individual files\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFiles(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const scriptList = await readScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileName = getTypedFilename(script.name, 'script');\n const scriptExport = await exportScriptByName(script.name);\n saveJsonToFile(scriptExport, getFilePath(fileName, true));\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);\n return outcome;\n}\n\nexport async function exportScriptsToFilesExtract(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: start`);\n const scriptList = await readScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileExtension = script.language === 'JAVASCRIPT' ? 'js' : 'groovy';\n const scriptFileName = getTypedFilename(\n script.name,\n 'script',\n fileExtension\n );\n const scriptFilePath = getFilePath(scriptFileName, true);\n const fileName = getTypedFilename(script.name, 'script');\n const filePath = getFilePath(fileName, true);\n\n const scriptExport = await exportScriptByName(script.name);\n\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const scriptText = Array.isArray(scriptSkeleton.script)\n ? scriptSkeleton.script.join('\\n')\n : scriptSkeleton.script;\n\n scriptSkeleton.script = `file://${scriptFilePath}`;\n\n saveTextToFile(scriptText, scriptFilePath);\n saveJsonToFile(scriptExport, filePath);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Check if a string is a valid URL\n * @param {string} urlString input string to be evaluated\n * @returns {boolean} true if a valid URL, false otherwise\n */\nfunction isValidUrl(urlString: string): boolean {\n try {\n return Boolean(new URL(urlString));\n } catch (error) {\n return false;\n }\n}\n\nfunction isScriptExtracted(importData: ScriptExportInterface): boolean {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: start`);\n let extracted = true;\n for (const scriptId of Object.keys(importData.script)) {\n const script = importData.script[scriptId].script;\n if (Array.isArray(script)) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is string array`);\n extracted = false;\n break;\n }\n if (isValidUrl(script as string)) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is extracted`);\n extracted = true;\n break;\n }\n if (isBase64Encoded) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is base64-encoded`);\n extracted = false;\n break;\n }\n break;\n }\n debugMessage(`Cli.ScriptOps.isScriptExtracted: end [extracted=${extracted}]`);\n return extracted;\n}\n\n/**\n * Import script(s) from file\n * @param {string} name Optional name of script. If supplied, only the script of that name is imported\n * @param {string} file file name\n * @param {boolean} reUuid true to generate a new uuid for each script on import, false otherwise\n * @returns {Promise<boolean>} true if no errors occurred during import, false otherwise\n */\nexport async function importScriptsFromFile(\n name: string,\n file: string,\n reUuid = false\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n fs.readFile(filePath, 'utf8', async (err, data) => {\n try {\n if (err) throw err;\n const importData: ScriptExportInterface = JSON.parse(data);\n if (isScriptExtracted(importData)) {\n await handleScriptFileImport(filePath, reUuid, false);\n } else {\n await importScripts(name, importData, reUuid);\n }\n outcome = true;\n } catch (error) {\n printMessage(\n `Error exporting script '${name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n });\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import extracted scripts.\n *\n * @param watch whether or not to watch for file changes\n */\nexport async function importScriptsFromFiles(\n watch: boolean,\n reUuid: boolean,\n validateScripts: boolean\n) {\n // If watch is true, it doesn't make sense to reUuid.\n reUuid = watch ? false : reUuid;\n\n /**\n * Run on file change detection, as well as on initial run.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async function onChange(path: string, _stats?: fs.Stats): Promise<void> {\n try {\n await handleScriptFileImport(path, reUuid, validateScripts);\n } catch (error) {\n printMessage(`${path}: ${error.message}`, 'error');\n }\n }\n\n // We watch json files and script files.\n const watcher = chokidar.watch(\n [\n `${getWorkingDirectory()}/**/*.script.json`,\n `${getWorkingDirectory()}/**/*.script.js`,\n `${getWorkingDirectory()}/**/*.script.groovy`,\n ],\n {\n persistent: watch,\n }\n );\n\n watcher\n .on('add', onChange)\n .on('change', onChange)\n .on('error', (error) => {\n printMessage(`Watcher error: ${error}`, 'error');\n watcher.close();\n })\n .on('ready', () => {\n if (watch) {\n printMessage('Watching for changes...');\n } else {\n watcher.close();\n printMessage('Done.');\n }\n });\n}\n\n/**\n * Handle a script file import.\n *\n * @param file Either a script file or an extract file\n * @param reUuid whether or not to generate a new uuid for each script on import\n */\nasync function handleScriptFileImport(\n file: string,\n reUuid: boolean,\n validateScripts: boolean\n) {\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);\n const scriptFile = getScriptFile(file);\n const script = getScriptExportByScriptFile(scriptFile);\n\n const imported = await importScripts('', script, reUuid, validateScripts);\n if (imported) {\n printMessage(`Imported '${scriptFile}'`);\n }\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);\n}\n\n/**\n * Get a script file from a file.\n *\n * @param file Either a script file or an extract file\n * @returns The script file\n */\nfunction getScriptFile(file: string) {\n if (file.endsWith('.script.json')) {\n return file;\n }\n return file.replace(/\\.script\\.(js|groovy)/, '.script.json');\n}\n\n/**\n * Get a script export from a script file.\n *\n * @param scriptFile The path to the script file\n * @returns The script export\n */\nfunction getScriptExportByScriptFile(\n scriptFile: string\n): ScriptExportInterface {\n const scriptExport = getScriptExport(scriptFile);\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const extractFile = getExtractFile(scriptSkeleton);\n if (!extractFile) {\n return scriptExport;\n }\n\n const scriptRaw = fs.readFileSync(extractFile, 'utf8');\n scriptSkeleton.script = scriptRaw.split('\\n');\n\n return scriptExport;\n}\n\n/**\n * Get an extract file from a script skeleton.\n *\n * @param scriptSkeleton The script skeleton\n * @returns The extract file or null if there is no extract file\n */\nfunction getExtractFile(scriptSkeleton: ScriptSkeleton): string | null {\n const extractFile = scriptSkeleton.script;\n if (Array.isArray(extractFile)) {\n return null;\n }\n if (\n extractFile.startsWith('file://') &&\n (extractFile.endsWith('.js') || extractFile.endsWith('.groovy'))\n ) {\n return extractFile.replace('file://', '');\n }\n return null;\n}\n\n/**\n * Get a script export from a file.\n *\n * @param file The path to a script export file\n * @returns The script export\n */\nfunction getScriptExport(file: string): ScriptExportInterface {\n const scriptExportRaw = fs.readFileSync(file, 'utf8');\n const scriptExport = JSON.parse(scriptExportRaw) as ScriptExportInterface;\n\n return scriptExport;\n}\n\n/**\n * Get the main script skeleton from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script Get the main script skeleton from a script export\n * @returns The main script skeleton\n */\nfunction getScriptSkeleton(script: ScriptExportInterface): ScriptSkeleton {\n const scriptId = getScriptId(script);\n return script.script[scriptId];\n}\n\n/**\n * Get the main script ID from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script The script export\n * @returns The main script ID\n */\nfunction getScriptId(script: ScriptExportInterface): string {\n const scriptIds = Object.keys(script.script);\n if (scriptIds.length !== 1) {\n throw new Error(`Expected 1 script, found ${scriptIds.length}`);\n }\n return scriptIds[0];\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ScriptOps.js","names":["frodo","state","chokidar","fs","createProgressBar","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","spinSpinner","stopProgressBar","stopProgressIndicator","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","saveTextToFile","titleCase","wordwrap","readScripts","exportScript","exportScriptByName","exportScripts","importScripts","deleteScript","deleteScriptByName","deleteScripts","script","isBase64Encoded","getFilePath","getWorkingDirectory","utils","getOneLineDescription","scriptObj","description","_id","context","name","getTableHeaderMd","markdown","getTableRowMd","langMap","JAVASCRIPT","GROOVY","language","split","join","listScripts","long","outcome","scripts","sort","a","b","localeCompare","table","forEach","push","toString","error","message","exportScriptToFile","scriptId","file","fileName","filePath","scriptExport","exportScriptByNameToFile","exportScriptsToFile","getRealm","exportScriptsToFiles","scriptList","length","exportScriptsToFilesExtract","fileExtension","scriptFileName","scriptFilePath","scriptSkeleton","getScriptSkeleton","scriptText","Array","isArray","isValidUrl","urlString","Boolean","URL","isScriptExtracted","importData","extracted","Object","keys","importScriptsFromFile","reUuid","readFile","err","data","JSON","parse","handleScriptFileImport","importScriptsFromFiles","watch","validateScripts","onChange","path","_stats","watcher","persistent","on","close","scriptFile","getScriptFile","getScriptExportByScriptFile","imported","endsWith","replace","getScriptExport","extractFile","getExtractFile","scriptRaw","readFileSync","startsWith","scriptExportRaw","getScriptId","scriptIds","Error","deleteScriptId","id","undefined","deleteScriptName","deleteAllScripts"],"sources":["../../src/ops/ScriptOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type ScriptSkeleton } from '@rockcarver/frodo-lib/types/api/ScriptApi';\nimport { type ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport chokidar from 'chokidar';\nimport fs from 'fs';\n\nimport {\n createProgressBar,\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n spinSpinner,\n stopProgressBar,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n saveTextToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n readScripts,\n exportScript,\n exportScriptByName,\n exportScripts,\n importScripts,\n deleteScript,\n deleteScriptByName,\n deleteScripts,\n} = frodo.script;\n\nconst { isBase64Encoded, getFilePath, getWorkingDirectory } = frodo.utils;\n\n/**\n * Get a one-line description of the script object\n * @param {ScriptSkeleton} scriptObj script object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(scriptObj: ScriptSkeleton): string {\n const description = `[${scriptObj._id['brightCyan']}] ${scriptObj.context} - ${scriptObj.name}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name | Language | Type | Id |\\n';\n markdown += '| ---- | -------- | ---- | ---|';\n return markdown;\n}\n\n/**\n * Get a one-line description of the script object in markdown\n * @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe\n * @returns {string} markdown table row\n */\nexport function getTableRowMd(scriptObj: ScriptSkeleton): string {\n const langMap = { JAVASCRIPT: 'JavaSscript', GROOVY: 'Groovy' };\n const description = `| ${scriptObj.name} | ${\n langMap[scriptObj.language]\n } | ${titleCase(scriptObj.context.split('_').join(' '))} | \\`${\n scriptObj._id\n }\\` |`;\n return description;\n}\n\n/**\n * List scripts\n * @param {boolean} long detail list\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function listScripts(long = false): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.listScripts: start`);\n try {\n const scripts = await readScripts();\n scripts.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable([\n 'Name',\n 'UUID',\n 'Language',\n 'Context',\n 'Description',\n ]);\n const langMap = { JAVASCRIPT: 'JS', GROOVY: 'Groovy' };\n scripts.forEach((script) => {\n table.push([\n wordwrap(script.name, 25, ' '),\n script._id,\n langMap[script.language],\n wordwrap(titleCase(script.context.split('_').join(' ')), 25),\n wordwrap(script.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n scripts.forEach((script) => {\n printMessage(`${script.name}`, 'data');\n });\n }\n } catch (error) {\n outcome = false;\n printMessage(`Error listing scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.listScripts: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Export script by id to file\n * @param {string} scriptId script uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptToFile(\n scriptId: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);\n try {\n showSpinner(`Exporting script '${scriptId}'...`);\n let fileName = getTypedFilename(scriptId, 'script');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n spinSpinner(`Exporting script '${scriptId}' to '${filePath}'...`);\n const scriptExport = await exportScript(scriptId);\n saveJsonToFile(scriptExport, filePath);\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 * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);\n try {\n showSpinner(`Exporting script '${name}'...`);\n let fileName = getTypedFilename(name, 'script');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n spinSpinner(`Exporting script '${name}' to '${filePath}'...`);\n const scriptExport = await exportScriptByName(name);\n saveJsonToFile(scriptExport, filePath);\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 * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFile(file: string): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Scripts`,\n 'script'\n );\n if (file) {\n fileName = file;\n }\n const scriptExport = await exportScripts();\n saveJsonToFile(scriptExport, getFilePath(fileName, true));\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);\n return true;\n } catch (error) {\n printMessage(`Error exporting scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to individual files\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFiles(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const scriptList = await readScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileName = getTypedFilename(script.name, 'script');\n const scriptExport = await exportScriptByName(script.name);\n saveJsonToFile(scriptExport, getFilePath(fileName, true));\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);\n return outcome;\n}\n\nexport async function exportScriptsToFilesExtract(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: start`);\n const scriptList = await readScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileExtension = script.language === 'JAVASCRIPT' ? 'js' : 'groovy';\n const scriptFileName = getTypedFilename(\n script.name,\n 'script',\n fileExtension\n );\n const scriptFilePath = getFilePath(scriptFileName, true);\n const fileName = getTypedFilename(script.name, 'script');\n const filePath = getFilePath(fileName, true);\n\n const scriptExport = await exportScriptByName(script.name);\n\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const scriptText = Array.isArray(scriptSkeleton.script)\n ? scriptSkeleton.script.join('\\n')\n : scriptSkeleton.script;\n\n scriptSkeleton.script = `file://${scriptFilePath}`;\n\n saveTextToFile(scriptText, scriptFilePath);\n saveJsonToFile(scriptExport, filePath);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Check if a string is a valid URL\n * @param {string} urlString input string to be evaluated\n * @returns {boolean} true if a valid URL, false otherwise\n */\nfunction isValidUrl(urlString: string): boolean {\n try {\n return Boolean(new URL(urlString));\n } catch (error) {\n return false;\n }\n}\n\nfunction isScriptExtracted(importData: ScriptExportInterface): boolean {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: start`);\n let extracted = true;\n for (const scriptId of Object.keys(importData.script)) {\n const script = importData.script[scriptId].script;\n if (Array.isArray(script)) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is string array`);\n extracted = false;\n break;\n }\n if (isValidUrl(script as string)) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is extracted`);\n extracted = true;\n break;\n }\n if (isBase64Encoded) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is base64-encoded`);\n extracted = false;\n break;\n }\n break;\n }\n debugMessage(`Cli.ScriptOps.isScriptExtracted: end [extracted=${extracted}]`);\n return extracted;\n}\n\n/**\n * Import script(s) from file\n * @param {string} name Optional name of script. If supplied, only the script of that name is imported\n * @param {string} file file name\n * @param {boolean} reUuid true to generate a new uuid for each script on import, false otherwise\n * @returns {Promise<boolean>} true if no errors occurred during import, false otherwise\n */\nexport async function importScriptsFromFile(\n name: string,\n file: string,\n reUuid = false\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n fs.readFile(filePath, 'utf8', async (err, data) => {\n try {\n if (err) throw err;\n const importData: ScriptExportInterface = JSON.parse(data);\n if (isScriptExtracted(importData)) {\n await handleScriptFileImport(filePath, reUuid, false);\n } else {\n await importScripts(name, importData, reUuid);\n }\n outcome = true;\n } catch (error) {\n printMessage(\n `Error exporting script '${name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n });\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import extracted scripts.\n *\n * @param watch whether or not to watch for file changes\n */\nexport async function importScriptsFromFiles(\n watch: boolean,\n reUuid: boolean,\n validateScripts: boolean\n) {\n // If watch is true, it doesn't make sense to reUuid.\n reUuid = watch ? false : reUuid;\n\n /**\n * Run on file change detection, as well as on initial run.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async function onChange(path: string, _stats?: fs.Stats): Promise<void> {\n try {\n await handleScriptFileImport(path, reUuid, validateScripts);\n } catch (error) {\n printMessage(`${path}: ${error.message}`, 'error');\n }\n }\n\n // We watch json files and script files.\n const watcher = chokidar.watch(\n [\n `${getWorkingDirectory()}/**/*.script.json`,\n `${getWorkingDirectory()}/**/*.script.js`,\n `${getWorkingDirectory()}/**/*.script.groovy`,\n ],\n {\n persistent: watch,\n }\n );\n\n watcher\n .on('add', onChange)\n .on('change', onChange)\n .on('error', (error) => {\n printMessage(`Watcher error: ${error}`, 'error');\n watcher.close();\n })\n .on('ready', () => {\n if (watch) {\n printMessage('Watching for changes...');\n } else {\n watcher.close();\n printMessage('Done.');\n }\n });\n}\n\n/**\n * Handle a script file import.\n *\n * @param file Either a script file or an extract file\n * @param reUuid whether or not to generate a new uuid for each script on import\n */\nasync function handleScriptFileImport(\n file: string,\n reUuid: boolean,\n validateScripts: boolean\n) {\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);\n const scriptFile = getScriptFile(file);\n const script = getScriptExportByScriptFile(scriptFile);\n\n const imported = await importScripts('', script, reUuid, validateScripts);\n if (imported) {\n printMessage(`Imported '${scriptFile}'`);\n }\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);\n}\n\n/**\n * Get a script file from a file.\n *\n * @param file Either a script file or an extract file\n * @returns The script file\n */\nfunction getScriptFile(file: string) {\n if (file.endsWith('.script.json')) {\n return file;\n }\n return file.replace(/\\.script\\.(js|groovy)/, '.script.json');\n}\n\n/**\n * Get a script export from a script file.\n *\n * @param scriptFile The path to the script file\n * @returns The script export\n */\nfunction getScriptExportByScriptFile(\n scriptFile: string\n): ScriptExportInterface {\n const scriptExport = getScriptExport(scriptFile);\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const extractFile = getExtractFile(scriptSkeleton);\n if (!extractFile) {\n return scriptExport;\n }\n\n const scriptRaw = fs.readFileSync(extractFile, 'utf8');\n scriptSkeleton.script = scriptRaw.split('\\n');\n\n return scriptExport;\n}\n\n/**\n * Get an extract file from a script skeleton.\n *\n * @param scriptSkeleton The script skeleton\n * @returns The extract file or null if there is no extract file\n */\nfunction getExtractFile(scriptSkeleton: ScriptSkeleton): string | null {\n const extractFile = scriptSkeleton.script;\n if (Array.isArray(extractFile)) {\n return null;\n }\n if (\n extractFile.startsWith('file://') &&\n (extractFile.endsWith('.js') || extractFile.endsWith('.groovy'))\n ) {\n return extractFile.replace('file://', '');\n }\n return null;\n}\n\n/**\n * Get a script export from a file.\n *\n * @param file The path to a script export file\n * @returns The script export\n */\nfunction getScriptExport(file: string): ScriptExportInterface {\n const scriptExportRaw = fs.readFileSync(file, 'utf8');\n const scriptExport = JSON.parse(scriptExportRaw) as ScriptExportInterface;\n\n return scriptExport;\n}\n\n/**\n * Get the main script skeleton from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script Get the main script skeleton from a script export\n * @returns The main script skeleton\n */\nfunction getScriptSkeleton(script: ScriptExportInterface): ScriptSkeleton {\n const scriptId = getScriptId(script);\n return script.script[scriptId];\n}\n\n/**\n * Get the main script ID from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script The script export\n * @returns The main script ID\n */\nfunction getScriptId(script: ScriptExportInterface): string {\n const scriptIds = Object.keys(script.script);\n if (scriptIds.length !== 1) {\n throw new Error(`Expected 1 script, found ${scriptIds.length}`);\n }\n return scriptIds[0];\n}\n\n/**\n * Delete script by id\n * @param {String} id script id\n */\nexport async function deleteScriptId(id) {\n createProgressIndicator('indeterminate', undefined, `Deleting ${id}...`);\n try {\n await deleteScript(id);\n stopProgressIndicator(`Deleted ${id}.`, 'success');\n } catch (error) {\n stopProgressIndicator(`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 createProgressIndicator('indeterminate', undefined, `Deleting ${name}...`);\n try {\n await deleteScriptByName(name);\n stopProgressIndicator(`Deleted ${name}.`, 'success');\n } catch (error) {\n stopProgressIndicator(`Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete all non-default scripts\n */\nexport async function deleteAllScripts() {\n createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting all non-default scripts...`\n );\n try {\n await deleteScripts();\n stopProgressIndicator(`Deleted all non-default scripts.`, 'success');\n } catch (error) {\n stopProgressIndicator(`Error: ${error.message}`, 'fail');\n }\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-30",
3
+ "version": "2.0.0-32",
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": [
@@ -108,7 +108,7 @@
108
108
  ]
109
109
  },
110
110
  "dependencies": {
111
- "@rockcarver/frodo-lib": "2.0.0-48",
111
+ "@rockcarver/frodo-lib": "2.0.0-49",
112
112
  "chokidar": "^3.5.3",
113
113
  "cli-progress": "^3.11.2",
114
114
  "cli-table3": "^0.6.3",