@rockcarver/frodo-cli 2.0.0-21 → 2.0.0-23
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 +9 -1
- package/esm/cli/FrodoCommand.js +3 -1
- package/esm/cli/FrodoCommand.js.map +1 -1
- package/esm/cli/agent/agent-web.js +2 -2
- package/esm/cli/agent/agent-web.js.map +1 -1
- package/esm/cli/app/app-import.js +1 -1
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/idm/idm-export.js +14 -8
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +14 -8
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/journey/journey-export.js +2 -3
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/oauth/oauth-client-import.js +1 -1
- package/esm/cli/oauth/oauth-client-import.js.map +1 -1
- package/esm/cli/service/service-import.js +2 -3
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +29 -20
- package/esm/ops/AdminFederationOps.js.map +1 -1
- package/esm/ops/AgentOps.js +41 -34
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/ApplicationOps.js +23 -17
- package/esm/ops/ApplicationOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +27 -20
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +19 -14
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +14 -22
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +27 -19
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +18 -51
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +23 -17
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +27 -20
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +23 -17
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +27 -20
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +22 -14
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +22 -15
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +21 -16
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +21 -15
- package/esm/ops/ThemeOps.js.map +1 -1
- package/package.json +2 -2
package/esm/ops/ScriptOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptOps.js","names":["frodo","state","chokidar","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","spinSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","saveTextToFile","titleCase","wordwrap","readScripts","exportScript","exportScriptByName","exportScripts","importScripts","script","isBase64Encoded","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","scriptExport","exportScriptByNameToFile","exportScriptsToFile","getRealm","exportScriptsToFiles","scriptList","length","exportScriptsToFilesExtract","fileExtension","scriptFileName","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 } = 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 spinSpinner(`Exporting script '${scriptId}' to '${fileName}'...`);\n const scriptExport = await exportScript(scriptId);\n saveJsonToFile(scriptExport, fileName);\n succeedSpinner(`Exported script '${scriptId}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${scriptId}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [false]`);\n return false;\n}\n\n/**\n * Export script by name to file\n * @param {string} name script name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);\n try {\n showSpinner(`Exporting script '${name}'...`);\n let fileName = getTypedFilename(name, 'script');\n if (file) {\n fileName = file;\n }\n spinSpinner(`Exporting script '${name}' to '${fileName}'...`);\n const scriptExport = await exportScriptByName(name);\n saveJsonToFile(scriptExport, fileName);\n succeedSpinner(`Exported script '${name}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${name}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to single file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFile(file: string): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Scripts`,\n 'script'\n );\n if (file) {\n fileName = file;\n }\n const scriptExport = await exportScripts();\n saveJsonToFile(scriptExport, fileName);\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);\n return true;\n } catch (error) {\n printMessage(`Error exporting scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to individual files\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFiles(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const scriptList = await 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, fileName);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);\n return outcome;\n}\n\nexport async function exportScriptsToFilesExtract(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: start`);\n const scriptList = await 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 fileName = getTypedFilename(script.name, 'script');\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://${scriptFileName}`;\n\n saveTextToFile(scriptText, scriptFileName);\n saveJsonToFile(scriptExport, fileName);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * 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 debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n fs.readFile(file, '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(file, 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 [`./**/*.script.json`, `./**/*.script.js`, `./**/*.script.groovy`],\n {\n persistent: watch,\n }\n );\n\n watcher\n .on('add', onChange)\n .on('change', onChange)\n .on('error', (error) => {\n printMessage(`Watcher error: ${error}`, 'error');\n watcher.close();\n })\n .on('ready', () => {\n if (watch) {\n printMessage('Watching for changes...');\n } else {\n watcher.close();\n printMessage('Done.');\n }\n });\n}\n\n/**\n * Handle a script file import.\n *\n * @param file Either a script file or an extract file\n * @param reUuid whether or not to generate a new uuid for each script on import\n */\nasync function handleScriptFileImport(\n file: string,\n reUuid: boolean,\n validateScripts: boolean\n) {\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);\n const scriptFile = getScriptFile(file);\n const script = getScriptExportByScriptFile(scriptFile);\n\n const 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","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":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AAGpD,OAAOC,QAAQ,MAAM,UAAU;AAC/B,OAAOC,EAAE,MAAM,IAAI;AAEnB,SACEC,iBAAiB,EACjBC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,WAAW,EACXC,eAAe,EACfC,cAAc,EACdC,iBAAiB,QACZ,kBAAkB;AACzB,SACEC,gBAAgB,EAChBC,cAAc,EACdC,cAAc,EACdC,SAAS,QACJ,4BAA4B;AACnC,OAAOC,QAAQ,MAAM,kBAAkB;AAEvC,MAAM;EACJC,WAAW;EACXC,YAAY;EACZC,kBAAkB;EAClBC,aAAa;EACbC;AACF,CAAC,GAAGvB,KAAK,CAACwB,MAAM;AAEhB,MAAM;EAAEC,eAAe;EAAEC,WAAW;EAAEC;AAAoB,CAAC,GAAG3B,KAAK,CAAC4B,KAAK;;AAEzE;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,MAAKxB,SAAS,CAACa,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,OAAO,eAAea,WAAWA,CAACC,IAAI,GAAG,KAAK,EAAoB;EAChE,IAAIC,OAAO,GAAG,IAAI;EAClBxC,YAAY,CAAE,kCAAiC,CAAC;EAChD,IAAI;IACF,MAAMyC,OAAO,GAAG,MAAM5B,WAAW,CAAC,CAAC;IACnC4B,OAAO,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACf,IAAI,CAACiB,aAAa,CAACD,CAAC,CAAChB,IAAI,CAAC,CAAC;IACpD,IAAIW,IAAI,EAAE;MACR,MAAMO,KAAK,GAAG/C,WAAW,CAAC,CACxB,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,CACd,CAAC;MACF,MAAMiC,OAAO,GAAG;QAAEC,UAAU,EAAE,IAAI;QAAEC,MAAM,EAAE;MAAS,CAAC;MACtDO,OAAO,CAACM,OAAO,CAAE7B,MAAM,IAAK;QAC1B4B,KAAK,CAACE,IAAI,CAAC,CACTpC,QAAQ,CAACM,MAAM,CAACU,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAC/BV,MAAM,CAACQ,GAAG,EACVM,OAAO,CAACd,MAAM,CAACiB,QAAQ,CAAC,EACxBvB,QAAQ,CAACD,SAAS,CAACO,MAAM,CAACS,OAAO,CAACS,KAAK,CAAC,GAAG,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAC5DzB,QAAQ,CAACM,MAAM,CAACO,WAAW,EAAE,EAAE,CAAC,CACjC,CAAC;MACJ,CAAC,CAAC;MACFvB,YAAY,CAAC4C,KAAK,CAACG,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACxC,CAAC,MAAM;MACLR,OAAO,CAACM,OAAO,CAAE7B,MAAM,IAAK;QAC1BhB,YAAY,CAAE,GAAEgB,MAAM,CAACU,IAAK,EAAC,EAAE,MAAM,CAAC;MACxC,CAAC,CAAC;IACJ;EACF,CAAC,CAAC,OAAOsB,KAAK,EAAE;IACdV,OAAO,GAAG,KAAK;IACftC,YAAY,CAAE,0BAAyBgD,KAAK,CAACC,OAAQ,EAAC,EAAE,OAAO,CAAC;IAChEnD,YAAY,CAACkD,KAAK,CAAC;EACrB;EACAlD,YAAY,CAAE,mCAAkCwC,OAAQ,GAAE,CAAC;EAC3D,OAAOA,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeY,kBAAkBA,CACtCC,QAAgB,EAChBC,IAAY,EACM;EAClBtD,YAAY,CAAE,yCAAwC,CAAC;EACvD,IAAI;IACFG,WAAW,CAAE,qBAAoBkD,QAAS,MAAK,CAAC;IAChD,IAAIE,QAAQ,GAAG/C,gBAAgB,CAAC6C,QAAQ,EAAE,QAAQ,CAAC;IACnD,IAAIC,IAAI,EAAE;MACRC,QAAQ,GAAGD,IAAI;IACjB;IACA,MAAME,QAAQ,GAAGpC,WAAW,CAACmC,QAAQ,EAAE,IAAI,CAAC;IAC5CnD,WAAW,CAAE,qBAAoBiD,QAAS,SAAQG,QAAS,MAAK,CAAC;IACjE,MAAMC,YAAY,GAAG,MAAM3C,YAAY,CAACuC,QAAQ,CAAC;IACjD5C,cAAc,CAACgD,YAAY,EAAED,QAAQ,CAAC;IACtClD,cAAc,CAAE,oBAAmB+C,QAAS,SAAQG,QAAS,IAAG,CAAC;IACjExD,YAAY,CAAE,8CAA6C,CAAC;IAC5D,OAAO,IAAI;EACb,CAAC,CAAC,OAAOkD,KAAK,EAAE;IACdjD,WAAW,CAAE,2BAA0BoD,QAAS,MAAKH,KAAK,CAACC,OAAQ,EAAC,CAAC;IACrEnD,YAAY,CAACkD,KAAK,CAAC;EACrB;EACAlD,YAAY,CAAE,+CAA8C,CAAC;EAC7D,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe0D,wBAAwBA,CAC5C9B,IAAY,EACZ0B,IAAY,EACM;EAClBtD,YAAY,CAAE,+CAA8C,CAAC;EAC7D,IAAI;IACFG,WAAW,CAAE,qBAAoByB,IAAK,MAAK,CAAC;IAC5C,IAAI2B,QAAQ,GAAG/C,gBAAgB,CAACoB,IAAI,EAAE,QAAQ,CAAC;IAC/C,IAAI0B,IAAI,EAAE;MACRC,QAAQ,GAAGD,IAAI;IACjB;IACA,MAAME,QAAQ,GAAGpC,WAAW,CAACmC,QAAQ,EAAE,IAAI,CAAC;IAC5CnD,WAAW,CAAE,qBAAoBwB,IAAK,SAAQ4B,QAAS,MAAK,CAAC;IAC7D,MAAMC,YAAY,GAAG,MAAM1C,kBAAkB,CAACa,IAAI,CAAC;IACnDnB,cAAc,CAACgD,YAAY,EAAED,QAAQ,CAAC;IACtClD,cAAc,CAAE,oBAAmBsB,IAAK,SAAQ4B,QAAS,IAAG,CAAC;IAC7DxD,YAAY,CAAE,oDAAmD,CAAC;IAClE,OAAO,IAAI;EACb,CAAC,CAAC,OAAOkD,KAAK,EAAE;IACdjD,WAAW,CAAE,2BAA0B2B,IAAK,MAAKsB,KAAK,CAACC,OAAQ,EAAC,CAAC;IACjEnD,YAAY,CAACkD,KAAK,CAAC;EACrB;EACAlD,YAAY,CAAE,qDAAoD,CAAC;EACnE,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe2D,mBAAmBA,CAACL,IAAY,EAAoB;EACxEtD,YAAY,CAAE,0CAAyC,CAAC;EACxD,IAAI;IACF,IAAIuD,QAAQ,GAAG/C,gBAAgB,CAC5B,MAAKG,SAAS,CAAChB,KAAK,CAACiE,QAAQ,CAAC,CAAC,CAAE,SAAQ,EAC1C,QACF,CAAC;IACD,IAAIN,IAAI,EAAE;MACRC,QAAQ,GAAGD,IAAI;IACjB;IACA,MAAMG,YAAY,GAAG,MAAMzC,aAAa,CAAC,CAAC;IAC1CP,cAAc,CAACgD,YAAY,EAAErC,WAAW,CAACmC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzDvD,YAAY,CAAE,+CAA8C,CAAC;IAC7D,OAAO,IAAI;EACb,CAAC,CAAC,OAAOkD,KAAK,EAAE;IACdhD,YAAY,CAAE,4BAA2BgD,KAAK,CAACC,OAAQ,EAAC,EAAE,OAAO,CAAC;IAClEnD,YAAY,CAACkD,KAAK,CAAC;EACrB;EACAlD,YAAY,CAAE,gDAA+C,CAAC;EAC9D,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAe6D,oBAAoBA,CAAA,EAAqB;EAC7D,IAAIrB,OAAO,GAAG,IAAI;EAClBxC,YAAY,CAAE,2CAA0C,CAAC;EACzD,MAAM8D,UAAU,GAAG,MAAMjD,WAAW,CAAC,CAAC;EACtCf,iBAAiB,CACfgE,UAAU,CAACC,MAAM,EACjB,0CACF,CAAC;EACD,KAAK,MAAM7C,MAAM,IAAI4C,UAAU,EAAE;IAC/B,IAAI;MACFvD,iBAAiB,CAAE,kBAAiBW,MAAM,CAACU,IAAK,EAAC,CAAC;MAClD,MAAM2B,QAAQ,GAAG/C,gBAAgB,CAACU,MAAM,CAACU,IAAI,EAAE,QAAQ,CAAC;MACxD,MAAM6B,YAAY,GAAG,MAAM1C,kBAAkB,CAACG,MAAM,CAACU,IAAI,CAAC;MAC1DnB,cAAc,CAACgD,YAAY,EAAErC,WAAW,CAACmC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,OAAOL,KAAK,EAAE;MACdV,OAAO,GAAG,KAAK;MACftC,YAAY,CACT,2BAA0BgB,MAAM,CAACU,IAAK,MAAKsB,KAAK,CAACC,OAAQ,EAAC,EAC3D,OACF,CAAC;MACDnD,YAAY,CAACkD,KAAK,CAAC;IACrB;EACF;EACA7C,eAAe,CAAE,YAAWyD,UAAU,CAACC,MAAO,+BAA8B,CAAC;EAC7E/D,YAAY,CAAE,4CAA2CwC,OAAQ,GAAE,CAAC;EACpE,OAAOA,OAAO;AAChB;AAEA,OAAO,eAAewB,2BAA2BA,CAAA,EAAqB;EACpE,IAAIxB,OAAO,GAAG,IAAI;EAClBxC,YAAY,CAAE,kDAAiD,CAAC;EAChE,MAAM8D,UAAU,GAAG,MAAMjD,WAAW,CAAC,CAAC;EACtCf,iBAAiB,CACfgE,UAAU,CAACC,MAAM,EACjB,0CACF,CAAC;EACD,KAAK,MAAM7C,MAAM,IAAI4C,UAAU,EAAE;IAC/B,IAAI;MACFvD,iBAAiB,CAAE,kBAAiBW,MAAM,CAACU,IAAK,EAAC,CAAC;MAClD,MAAMqC,aAAa,GAAG/C,MAAM,CAACiB,QAAQ,KAAK,YAAY,GAAG,IAAI,GAAG,QAAQ;MACxE,MAAM+B,cAAc,GAAG1D,gBAAgB,CACrCU,MAAM,CAACU,IAAI,EACX,QAAQ,EACRqC,aACF,CAAC;MACD,MAAME,cAAc,GAAG/C,WAAW,CAAC8C,cAAc,EAAE,IAAI,CAAC;MACxD,MAAMX,QAAQ,GAAG/C,gBAAgB,CAACU,MAAM,CAACU,IAAI,EAAE,QAAQ,CAAC;MACxD,MAAM4B,QAAQ,GAAGpC,WAAW,CAACmC,QAAQ,EAAE,IAAI,CAAC;MAE5C,MAAME,YAAY,GAAG,MAAM1C,kBAAkB,CAACG,MAAM,CAACU,IAAI,CAAC;MAE1D,MAAMwC,cAAc,GAAGC,iBAAiB,CAACZ,YAAY,CAAC;MAEtD,MAAMa,UAAU,GAAGC,KAAK,CAACC,OAAO,CAACJ,cAAc,CAAClD,MAAM,CAAC,GACnDkD,cAAc,CAAClD,MAAM,CAACmB,IAAI,CAAC,IAAI,CAAC,GAChC+B,cAAc,CAAClD,MAAM;MAEzBkD,cAAc,CAAClD,MAAM,GAAI,UAASiD,cAAe,EAAC;MAElDzD,cAAc,CAAC4D,UAAU,EAAEH,cAAc,CAAC;MAC1C1D,cAAc,CAACgD,YAAY,EAAED,QAAQ,CAAC;IACxC,CAAC,CAAC,OAAON,KAAK,EAAE;MACdV,OAAO,GAAG,KAAK;MACftC,YAAY,CACT,2BAA0BgB,MAAM,CAACU,IAAK,MAAKsB,KAAK,CAACC,OAAQ,EAAC,EAC3D,OACF,CAAC;MACDnD,YAAY,CAACkD,KAAK,CAAC;IACrB;EACF;EACA7C,eAAe,CAAE,YAAWyD,UAAU,CAACC,MAAO,+BAA8B,CAAC;EAC7E/D,YAAY,CAAE,mDAAkDwC,OAAQ,GAAE,CAAC;EAC3E,OAAOA,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASiC,UAAUA,CAACC,SAAiB,EAAW;EAC9C,IAAI;IACF,OAAOC,OAAO,CAAC,IAAIC,GAAG,CAACF,SAAS,CAAC,CAAC;EACpC,CAAC,CAAC,OAAOxB,KAAK,EAAE;IACd,OAAO,KAAK;EACd;AACF;AAEA,SAAS2B,iBAAiBA,CAACC,UAAiC,EAAW;EACrE9E,YAAY,CAAE,wCAAuC,CAAC;EACtD,IAAI+E,SAAS,GAAG,IAAI;EACpB,KAAK,MAAM1B,QAAQ,IAAI2B,MAAM,CAACC,IAAI,CAACH,UAAU,CAAC5D,MAAM,CAAC,EAAE;IACrD,MAAMA,MAAM,GAAG4D,UAAU,CAAC5D,MAAM,CAACmC,QAAQ,CAAC,CAACnC,MAAM;IACjD,IAAIqD,KAAK,CAACC,OAAO,CAACtD,MAAM,CAAC,EAAE;MACzBlB,YAAY,CAAE,yDAAwD,CAAC;MACvE+E,SAAS,GAAG,KAAK;MACjB;IACF;IACA,IAAIN,UAAU,CAACvD,MAAgB,CAAC,EAAE;MAChClB,YAAY,CAAE,sDAAqD,CAAC;MACpE+E,SAAS,GAAG,IAAI;MAChB;IACF;IACA,IAAI5D,eAAe,EAAE;MACnBnB,YAAY,CAAE,2DAA0D,CAAC;MACzE+E,SAAS,GAAG,KAAK;MACjB;IACF;IACA;EACF;EACA/E,YAAY,CAAE,mDAAkD+E,SAAU,GAAE,CAAC;EAC7E,OAAOA,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeG,qBAAqBA,CACzCtD,IAAY,EACZ0B,IAAY,EACZ6B,MAAM,GAAG,KAAK,EACI;EAClB,IAAI3C,OAAO,GAAG,KAAK;EACnB,MAAMgB,QAAQ,GAAGpC,WAAW,CAACkC,IAAI,CAAC;EAClCtD,YAAY,CAAE,4CAA2C,CAAC;EAC1DH,EAAE,CAACuF,QAAQ,CAAC5B,QAAQ,EAAE,MAAM,EAAE,OAAO6B,GAAG,EAAEC,IAAI,KAAK;IACjD,IAAI;MACF,IAAID,GAAG,EAAE,MAAMA,GAAG;MAClB,MAAMP,UAAiC,GAAGS,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;MAC1D,IAAIT,iBAAiB,CAACC,UAAU,CAAC,EAAE;QACjC,MAAMW,sBAAsB,CAACjC,QAAQ,EAAE2B,MAAM,EAAE,KAAK,CAAC;MACvD,CAAC,MAAM;QACL,MAAMlE,aAAa,CAACW,IAAI,EAAEkD,UAAU,EAAEK,MAAM,CAAC;MAC/C;MACA3C,OAAO,GAAG,IAAI;IAChB,CAAC,CAAC,OAAOU,KAAK,EAAE;MACdhD,YAAY,CACT,2BAA0B0B,IAAK,MAAKsB,KAAK,CAACC,OAAQ,EAAC,EACpD,OACF,CAAC;MACDnD,YAAY,CAACkD,KAAK,CAAC;IACrB;EACF,CAAC,CAAC;EACFlD,YAAY,CAAE,6CAA4CwC,OAAQ,GAAE,CAAC;EACrE,OAAOA,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAekD,sBAAsBA,CAC1CC,KAAc,EACdR,MAAe,EACfS,eAAwB,EACxB;EACA;EACAT,MAAM,GAAGQ,KAAK,GAAG,KAAK,GAAGR,MAAM;;EAE/B;AACF;AACA;EACE;EACA,eAAeU,QAAQA,CAACC,IAAY,EAAEC,MAAiB,EAAiB;IACtE,IAAI;MACF,MAAMN,sBAAsB,CAACK,IAAI,EAAEX,MAAM,EAAES,eAAe,CAAC;IAC7D,CAAC,CAAC,OAAO1C,KAAK,EAAE;MACdhD,YAAY,CAAE,GAAE4F,IAAK,KAAI5C,KAAK,CAACC,OAAQ,EAAC,EAAE,OAAO,CAAC;IACpD;EACF;;EAEA;EACA,MAAM6C,OAAO,GAAGpG,QAAQ,CAAC+F,KAAK,CAC5B,CACG,GAAEtE,mBAAmB,CAAC,CAAE,mBAAkB,EAC1C,GAAEA,mBAAmB,CAAC,CAAE,iBAAgB,EACxC,GAAEA,mBAAmB,CAAC,CAAE,qBAAoB,CAC9C,EACD;IACE4E,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,EAAGhD,KAAK,IAAK;IACtBhD,YAAY,CAAE,kBAAiBgD,KAAM,EAAC,EAAE,OAAO,CAAC;IAChD8C,OAAO,CAACG,KAAK,CAAC,CAAC;EACjB,CAAC,CAAC,CACDD,EAAE,CAAC,OAAO,EAAE,MAAM;IACjB,IAAIP,KAAK,EAAE;MACTzF,YAAY,CAAC,yBAAyB,CAAC;IACzC,CAAC,MAAM;MACL8F,OAAO,CAACG,KAAK,CAAC,CAAC;MACfjG,YAAY,CAAC,OAAO,CAAC;IACvB;EACF,CAAC,CAAC;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAeuF,sBAAsBA,CACnCnC,IAAY,EACZ6B,MAAe,EACfS,eAAwB,EACxB;EACA5F,YAAY,CAAE,6CAA4C,CAAC;EAC3D,MAAMoG,UAAU,GAAGC,aAAa,CAAC/C,IAAI,CAAC;EACtC,MAAMpC,MAAM,GAAGoF,2BAA2B,CAACF,UAAU,CAAC;EAEtD,MAAMG,QAAQ,GAAG,MAAMtF,aAAa,CAAC,EAAE,EAAEC,MAAM,EAAEiE,MAAM,EAAES,eAAe,CAAC;EACzE,IAAIW,QAAQ,EAAE;IACZrG,YAAY,CAAE,aAAYkG,UAAW,GAAE,CAAC;EAC1C;EACApG,YAAY,CAAE,2CAA0C,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASqG,aAAaA,CAAC/C,IAAY,EAAE;EACnC,IAAIA,IAAI,CAACkD,QAAQ,CAAC,cAAc,CAAC,EAAE;IACjC,OAAOlD,IAAI;EACb;EACA,OAAOA,IAAI,CAACmD,OAAO,CAAC,uBAAuB,EAAE,cAAc,CAAC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASH,2BAA2BA,CAClCF,UAAkB,EACK;EACvB,MAAM3C,YAAY,GAAGiD,eAAe,CAACN,UAAU,CAAC;EAChD,MAAMhC,cAAc,GAAGC,iBAAiB,CAACZ,YAAY,CAAC;EAEtD,MAAMkD,WAAW,GAAGC,cAAc,CAACxC,cAAc,CAAC;EAClD,IAAI,CAACuC,WAAW,EAAE;IAChB,OAAOlD,YAAY;EACrB;EAEA,MAAMoD,SAAS,GAAGhH,EAAE,CAACiH,YAAY,CAACH,WAAW,EAAE,MAAM,CAAC;EACtDvC,cAAc,CAAClD,MAAM,GAAG2F,SAAS,CAACzE,KAAK,CAAC,IAAI,CAAC;EAE7C,OAAOqB,YAAY;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASmD,cAAcA,CAACxC,cAA8B,EAAiB;EACrE,MAAMuC,WAAW,GAAGvC,cAAc,CAAClD,MAAM;EACzC,IAAIqD,KAAK,CAACC,OAAO,CAACmC,WAAW,CAAC,EAAE;IAC9B,OAAO,IAAI;EACb;EACA,IACEA,WAAW,CAACI,UAAU,CAAC,SAAS,CAAC,KAChCJ,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,CAACpD,IAAY,EAAyB;EAC5D,MAAM0D,eAAe,GAAGnH,EAAE,CAACiH,YAAY,CAACxD,IAAI,EAAE,MAAM,CAAC;EACrD,MAAMG,YAAY,GAAG8B,IAAI,CAACC,KAAK,CAACwB,eAAe,CAA0B;EAEzE,OAAOvD,YAAY;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASY,iBAAiBA,CAACnD,MAA6B,EAAkB;EACxE,MAAMmC,QAAQ,GAAG4D,WAAW,CAAC/F,MAAM,CAAC;EACpC,OAAOA,MAAM,CAACA,MAAM,CAACmC,QAAQ,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS4D,WAAWA,CAAC/F,MAA6B,EAAU;EAC1D,MAAMgG,SAAS,GAAGlC,MAAM,CAACC,IAAI,CAAC/D,MAAM,CAACA,MAAM,CAAC;EAC5C,IAAIgG,SAAS,CAACnD,MAAM,KAAK,CAAC,EAAE;IAC1B,MAAM,IAAIoD,KAAK,CAAE,4BAA2BD,SAAS,CAACnD,MAAO,EAAC,CAAC;EACjE;EACA,OAAOmD,SAAS,CAAC,CAAC,CAAC;AACrB"}
|
package/esm/ops/ServiceOps.js
CHANGED
|
@@ -8,6 +8,7 @@ const {
|
|
|
8
8
|
getTypedFilename,
|
|
9
9
|
titleCase,
|
|
10
10
|
saveJsonToFile,
|
|
11
|
+
getFilePath,
|
|
11
12
|
getWorkingDirectory
|
|
12
13
|
} = frodo.utils;
|
|
13
14
|
const {
|
|
@@ -56,7 +57,7 @@ export async function exportServicesToFile(file, globalConfig = false) {
|
|
|
56
57
|
if (file) {
|
|
57
58
|
fileName = file;
|
|
58
59
|
}
|
|
59
|
-
saveJsonToFile(exportData, fileName);
|
|
60
|
+
saveJsonToFile(exportData, getFilePath(fileName, true));
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
/**
|
|
@@ -70,7 +71,7 @@ export async function exportServiceToFile(serviceId, file, globalConfig = false)
|
|
|
70
71
|
if (file) {
|
|
71
72
|
fileName = file;
|
|
72
73
|
}
|
|
73
|
-
saveJsonToFile(exportData, fileName);
|
|
74
|
+
saveJsonToFile(exportData, getFilePath(fileName, true));
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
/**
|
|
@@ -81,10 +82,11 @@ export async function exportServicesToFiles(globalConfig = false) {
|
|
|
81
82
|
const services = await getFullServices(globalConfig);
|
|
82
83
|
for (const service of services) {
|
|
83
84
|
const fileName = getTypedFilename(service._type._id, `service`);
|
|
85
|
+
const filePath = getFilePath(fileName, true);
|
|
84
86
|
const exportData = createServiceExportTemplate();
|
|
85
87
|
exportData.service[service._type._id] = service;
|
|
86
|
-
debugMessage(`cli.ServiceOps.exportServicesToFiles: exporting ${service._type._id} to ${
|
|
87
|
-
saveJsonToFile(exportData,
|
|
88
|
+
debugMessage(`cli.ServiceOps.exportServicesToFiles: exporting ${service._type._id} to ${filePath}`);
|
|
89
|
+
saveJsonToFile(exportData, filePath);
|
|
88
90
|
}
|
|
89
91
|
debugMessage(`cli.ServiceOps.exportServicesToFiles: end.`);
|
|
90
92
|
}
|
|
@@ -96,9 +98,10 @@ export async function exportServicesToFiles(globalConfig = false) {
|
|
|
96
98
|
* @param {boolean} clean remove existing service
|
|
97
99
|
*/
|
|
98
100
|
export async function importServiceFromFile(serviceId, file, clean, globalConfig = false) {
|
|
99
|
-
|
|
101
|
+
const filePath = getFilePath(file);
|
|
102
|
+
debugMessage(`cli.ServiceOps.importServiceFromFile: start [serviceId=${serviceId}, file=${filePath}]`);
|
|
100
103
|
const verbose = state.getVerbose();
|
|
101
|
-
fs.readFile(
|
|
104
|
+
fs.readFile(filePath, 'utf8', async (err, data) => {
|
|
102
105
|
if (err) throw err;
|
|
103
106
|
const importData = JSON.parse(data);
|
|
104
107
|
if (importData && importData.service[serviceId]) {
|
|
@@ -119,7 +122,7 @@ export async function importServiceFromFile(serviceId, file, clean, globalConfig
|
|
|
119
122
|
failSpinner(`${serviceId} not found!`);
|
|
120
123
|
}
|
|
121
124
|
});
|
|
122
|
-
debugMessage(`cli.ServiceOps.importServiceFromFile: end [serviceId=${serviceId}, file=${
|
|
125
|
+
debugMessage(`cli.ServiceOps.importServiceFromFile: end [serviceId=${serviceId}, file=${filePath}]`);
|
|
123
126
|
}
|
|
124
127
|
|
|
125
128
|
/**
|
|
@@ -128,9 +131,10 @@ export async function importServiceFromFile(serviceId, file, clean, globalConfig
|
|
|
128
131
|
* @param {boolean} clean remove existing service
|
|
129
132
|
*/
|
|
130
133
|
export async function importFirstServiceFromFile(file, clean, globalConfig = false) {
|
|
131
|
-
|
|
134
|
+
const filePath = getFilePath(file);
|
|
135
|
+
debugMessage(`cli.ServiceOps.importFirstServiceFromFile: start [file=${filePath}]`);
|
|
132
136
|
const verbose = state.getVerbose();
|
|
133
|
-
fs.readFile(
|
|
137
|
+
fs.readFile(filePath, 'utf8', async (err, data) => {
|
|
134
138
|
if (err) throw err;
|
|
135
139
|
const importData = JSON.parse(data);
|
|
136
140
|
if (importData && Object.keys(importData.service).length) {
|
|
@@ -149,9 +153,9 @@ export async function importFirstServiceFromFile(file, clean, globalConfig = fal
|
|
|
149
153
|
}
|
|
150
154
|
} else {
|
|
151
155
|
showSpinner(`Importing service...`);
|
|
152
|
-
failSpinner(`No service found in ${
|
|
156
|
+
failSpinner(`No service found in ${filePath}!`);
|
|
153
157
|
}
|
|
154
|
-
debugMessage(`cli.ServiceOps.importFirstServiceFromFile: end [file=${
|
|
158
|
+
debugMessage(`cli.ServiceOps.importFirstServiceFromFile: end [file=${filePath}]`);
|
|
155
159
|
});
|
|
156
160
|
}
|
|
157
161
|
|
|
@@ -161,10 +165,11 @@ export async function importFirstServiceFromFile(file, clean, globalConfig = fal
|
|
|
161
165
|
* @param {boolean} clean remove existing service
|
|
162
166
|
*/
|
|
163
167
|
export async function importServicesFromFile(file, clean, globalConfig = false) {
|
|
164
|
-
|
|
165
|
-
|
|
168
|
+
const filePath = getFilePath(file);
|
|
169
|
+
debugMessage(`cli.ServiceOps.importServiceFromFile: start [file=${filePath}]`);
|
|
170
|
+
fs.readFile(filePath, 'utf8', async (err, data) => {
|
|
166
171
|
if (err) throw err;
|
|
167
|
-
debugMessage(`cli.ServiceOps.importServiceFromFile: importing ${
|
|
172
|
+
debugMessage(`cli.ServiceOps.importServiceFromFile: importing ${filePath}`);
|
|
168
173
|
const importData = JSON.parse(data);
|
|
169
174
|
try {
|
|
170
175
|
await importServices(importData, clean, globalConfig);
|
|
@@ -172,7 +177,7 @@ export async function importServicesFromFile(file, clean, globalConfig = false)
|
|
|
172
177
|
printMessage(`${error.message}`, 'error');
|
|
173
178
|
printMessage(error.response.status, 'error');
|
|
174
179
|
}
|
|
175
|
-
debugMessage(`cli.ServiceOps.importServiceFromFile: end [file=${
|
|
180
|
+
debugMessage(`cli.ServiceOps.importServiceFromFile: end [file=${filePath}]`);
|
|
176
181
|
});
|
|
177
182
|
}
|
|
178
183
|
|
|
@@ -183,7 +188,7 @@ export async function importServicesFromFile(file, clean, globalConfig = false)
|
|
|
183
188
|
export async function importServicesFromFiles(clean, globalConfig = false) {
|
|
184
189
|
debugMessage(`cli.ServiceOps.importServicesFromFiles: start`);
|
|
185
190
|
const names = fs.readdirSync(getWorkingDirectory());
|
|
186
|
-
const agentFiles = names.filter(name => name.toLowerCase().endsWith('.service.json'));
|
|
191
|
+
const agentFiles = names.filter(name => name.toLowerCase().endsWith('.service.json')).map(name => getFilePath(name));
|
|
187
192
|
for (const file of agentFiles) {
|
|
188
193
|
await importServicesFromFile(file, clean, globalConfig);
|
|
189
194
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceOps.js","names":["frodo","state","fs","createTable","debugMessage","failSpinner","printMessage","showSpinner","succeedSpinner","getRealmName","utils","getTypedFilename","titleCase","saveJsonToFile","getWorkingDirectory","getListOfServices","exportServices","exportService","getFullServices","createServiceExportTemplate","importService","importServices","deleteFullService","deleteFullServices","service","listServices","long","globalConfig","services","sort","a","b","_id","localeCompare","table","push","name","toString","error","stack","exportServicesToFile","file","exportData","fileName","getRealm","exportServiceToFile","serviceId","exportServicesToFiles","_type","importServiceFromFile","clean","verbose","getVerbose","readFile","err","data","importData","JSON","parse","importError","_importError$response","_importError$response2","message","response","detail","importFirstServiceFromFile","Object","keys","length","_importError$response3","_importError$response4","importServicesFromFile","status","importServicesFromFiles","names","readdirSync","agentFiles","filter","toLowerCase","endsWith","deleteService","_error$response","deleteServices"],"sources":["../../src/ops/ServiceOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type ServiceExportInterface } from '@rockcarver/frodo-lib/types/ops/ServiceOps';\nimport fs from 'fs';\n\nimport {\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n succeedSpinner,\n} from '../utils/Console';\n\nconst { getRealmName } = frodo.utils;\nconst { getTypedFilename, titleCase, saveJsonToFile, getWorkingDirectory } =\n frodo.utils;\nconst {\n getListOfServices,\n exportServices,\n exportService,\n getFullServices,\n createServiceExportTemplate,\n importService,\n importServices,\n deleteFullService,\n deleteFullServices,\n} = frodo.service;\n\n/**\n * List services\n */\nexport async function listServices(long = false, globalConfig = false) {\n try {\n const services = await getListOfServices(globalConfig);\n services.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable(['Service Id', 'Service Name']);\n for (const service of services) {\n table.push([\n service._id,\n globalConfig ? service['_type'].name : service.name,\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const service of services) {\n printMessage(`${service._id}`, 'data');\n }\n }\n } catch (error) {\n printMessage(`Error listing agents - ${error}`, 'error');\n printMessage(error.stack, 'error');\n }\n}\n\n/**\n * Export all services to file\n * @param {string} file file name\n */\nexport async function exportServicesToFile(file, globalConfig = false) {\n const exportData = await exportServices(globalConfig);\n let fileName = getTypedFilename(\n `all${\n globalConfig ? 'Global' : titleCase(getRealmName(state.getRealm()))\n }Services`,\n `service`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, fileName);\n}\n\n/**\n * Export service to file\n * @param {string} serviceId service id\n * @param {string} file file name\n */\nexport async function exportServiceToFile(\n serviceId: string,\n file: string,\n globalConfig = false\n) {\n const exportData = await exportService(serviceId, globalConfig);\n let fileName = getTypedFilename(serviceId, `service`);\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, fileName);\n}\n\n/**\n * Export all services to separate files\n */\nexport async function exportServicesToFiles(globalConfig = false) {\n debugMessage(`cli.ServiceOps.exportServicesToFiles: start`);\n const services = await getFullServices(globalConfig);\n for (const service of services) {\n const fileName = getTypedFilename(service._type._id, `service`);\n const exportData = createServiceExportTemplate();\n exportData.service[service._type._id] = service;\n debugMessage(\n `cli.ServiceOps.exportServicesToFiles: exporting ${service._type._id} to ${fileName}`\n );\n saveJsonToFile(exportData, fileName);\n }\n debugMessage(`cli.ServiceOps.exportServicesToFiles: end.`);\n}\n\n/**\n * Import a service from file\n * @param {string} serviceId service id/name\n * @param {string} file import file name\n * @param {boolean} clean remove existing service\n */\nexport async function importServiceFromFile(\n serviceId: string,\n file: string,\n clean: boolean,\n globalConfig = false\n) {\n debugMessage(\n `cli.ServiceOps.importServiceFromFile: start [serviceId=${serviceId}, file=${file}]`\n );\n const verbose = state.getVerbose();\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const importData = JSON.parse(data);\n if (importData && importData.service[serviceId]) {\n if (!verbose) showSpinner(`Importing ${serviceId}...`);\n try {\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n await importService(serviceId, importData, clean, globalConfig);\n succeedSpinner(`Imported ${serviceId}.`);\n } catch (importError) {\n const message = importError.response?.data?.message;\n const detail = importError.response?.data?.detail;\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${detail ? message + ' - ' + detail : message}`);\n }\n } else {\n showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${serviceId} not found!`);\n }\n });\n debugMessage(\n `cli.ServiceOps.importServiceFromFile: end [serviceId=${serviceId}, file=${file}]`\n );\n}\n\n/**\n * Import first service from file\n * @param {string} file import file name\n * @param {boolean} clean remove existing service\n */\nexport async function importFirstServiceFromFile(\n file: string,\n clean: boolean,\n globalConfig = false\n) {\n debugMessage(\n `cli.ServiceOps.importFirstServiceFromFile: start [file=${file}]`\n );\n const verbose = state.getVerbose();\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const importData = JSON.parse(data);\n if (importData && Object.keys(importData.service).length) {\n const serviceId = Object.keys(importData.service)[0];\n if (!verbose) showSpinner(`Importing ${serviceId}...`);\n try {\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n await importService(serviceId, importData, clean, globalConfig);\n succeedSpinner(`Imported ${serviceId}.`);\n } catch (importError) {\n const message = importError.response?.data?.message;\n const detail = importError.response?.data?.detail;\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${detail ? message + ' - ' + detail : message}`);\n }\n } else {\n showSpinner(`Importing service...`);\n failSpinner(`No service found in ${file}!`);\n }\n debugMessage(\n `cli.ServiceOps.importFirstServiceFromFile: end [file=${file}]`\n );\n });\n}\n\n/**\n * Import services from file\n * @param {String} file file name\n * @param {boolean} clean remove existing service\n */\nexport async function importServicesFromFile(\n file: string,\n clean: boolean,\n globalConfig = false\n) {\n debugMessage(`cli.ServiceOps.importServiceFromFile: start [file=${file}]`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n debugMessage(`cli.ServiceOps.importServiceFromFile: importing ${file}`);\n const importData = JSON.parse(data) as ServiceExportInterface;\n try {\n await importServices(importData, clean, globalConfig);\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.status, 'error');\n }\n debugMessage(`cli.ServiceOps.importServiceFromFile: end [file=${file}]`);\n });\n}\n\n/**\n * Import all services from separate files\n * @param {boolean} clean remove existing service\n */\nexport async function importServicesFromFiles(\n clean: boolean,\n globalConfig = false\n) {\n debugMessage(`cli.ServiceOps.importServicesFromFiles: start`);\n const names = fs.readdirSync(getWorkingDirectory());\n const agentFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.service.json')\n );\n for (const file of agentFiles) {\n await importServicesFromFile(file, clean, globalConfig);\n }\n debugMessage(`cli.ServiceOps.importServicesFromFiles: end`);\n}\n\n/**\n * Delete a service by id/name\n * @param {string} serviceId Reference to the service to delete\n */\nexport async function deleteService(serviceId: string, globalConfig = false) {\n try {\n await deleteFullService(serviceId, globalConfig);\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(`Delete service '${serviceId}': ${message}`, 'error');\n }\n}\n\n/**\n * Delete all services\n */\nexport async function deleteServices(globalConfig = false) {\n await deleteFullServices(globalConfig);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ServiceOps.js","names":["frodo","state","fs","createTable","debugMessage","failSpinner","printMessage","showSpinner","succeedSpinner","getRealmName","utils","getTypedFilename","titleCase","saveJsonToFile","getFilePath","getWorkingDirectory","getListOfServices","exportServices","exportService","getFullServices","createServiceExportTemplate","importService","importServices","deleteFullService","deleteFullServices","service","listServices","long","globalConfig","services","sort","a","b","_id","localeCompare","table","push","name","toString","error","stack","exportServicesToFile","file","exportData","fileName","getRealm","exportServiceToFile","serviceId","exportServicesToFiles","_type","filePath","importServiceFromFile","clean","verbose","getVerbose","readFile","err","data","importData","JSON","parse","importError","_importError$response","_importError$response2","message","response","detail","importFirstServiceFromFile","Object","keys","length","_importError$response3","_importError$response4","importServicesFromFile","status","importServicesFromFiles","names","readdirSync","agentFiles","filter","toLowerCase","endsWith","map","deleteService","_error$response","deleteServices"],"sources":["../../src/ops/ServiceOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type ServiceExportInterface } from '@rockcarver/frodo-lib/types/ops/ServiceOps';\nimport fs from 'fs';\n\nimport {\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n succeedSpinner,\n} from '../utils/Console';\n\nconst { getRealmName } = frodo.utils;\nconst {\n getTypedFilename,\n titleCase,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n getListOfServices,\n exportServices,\n exportService,\n getFullServices,\n createServiceExportTemplate,\n importService,\n importServices,\n deleteFullService,\n deleteFullServices,\n} = frodo.service;\n\n/**\n * List services\n */\nexport async function listServices(long = false, globalConfig = false) {\n try {\n const services = await getListOfServices(globalConfig);\n services.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable(['Service Id', 'Service Name']);\n for (const service of services) {\n table.push([\n service._id,\n globalConfig ? service['_type'].name : service.name,\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const service of services) {\n printMessage(`${service._id}`, 'data');\n }\n }\n } catch (error) {\n printMessage(`Error listing agents - ${error}`, 'error');\n printMessage(error.stack, 'error');\n }\n}\n\n/**\n * Export all services to file\n * @param {string} file file name\n */\nexport async function exportServicesToFile(file, globalConfig = false) {\n const exportData = await exportServices(globalConfig);\n let fileName = getTypedFilename(\n `all${\n globalConfig ? 'Global' : titleCase(getRealmName(state.getRealm()))\n }Services`,\n `service`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, getFilePath(fileName, true));\n}\n\n/**\n * Export service to file\n * @param {string} serviceId service id\n * @param {string} file file name\n */\nexport async function exportServiceToFile(\n serviceId: string,\n file: string,\n globalConfig = false\n) {\n const exportData = await exportService(serviceId, globalConfig);\n let fileName = getTypedFilename(serviceId, `service`);\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, getFilePath(fileName, true));\n}\n\n/**\n * Export all services to separate files\n */\nexport async function exportServicesToFiles(globalConfig = false) {\n debugMessage(`cli.ServiceOps.exportServicesToFiles: start`);\n const services = await getFullServices(globalConfig);\n for (const service of services) {\n const fileName = getTypedFilename(service._type._id, `service`);\n const filePath = getFilePath(fileName, true);\n const exportData = createServiceExportTemplate();\n exportData.service[service._type._id] = service;\n debugMessage(\n `cli.ServiceOps.exportServicesToFiles: exporting ${service._type._id} to ${filePath}`\n );\n saveJsonToFile(exportData, filePath);\n }\n debugMessage(`cli.ServiceOps.exportServicesToFiles: end.`);\n}\n\n/**\n * Import a service from file\n * @param {string} serviceId service id/name\n * @param {string} file import file name\n * @param {boolean} clean remove existing service\n */\nexport async function importServiceFromFile(\n serviceId: string,\n file: string,\n clean: boolean,\n globalConfig = false\n) {\n const filePath = getFilePath(file);\n debugMessage(\n `cli.ServiceOps.importServiceFromFile: start [serviceId=${serviceId}, file=${filePath}]`\n );\n const verbose = state.getVerbose();\n fs.readFile(filePath, 'utf8', async (err, data) => {\n if (err) throw err;\n const importData = JSON.parse(data);\n if (importData && importData.service[serviceId]) {\n if (!verbose) showSpinner(`Importing ${serviceId}...`);\n try {\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n await importService(serviceId, importData, clean, globalConfig);\n succeedSpinner(`Imported ${serviceId}.`);\n } catch (importError) {\n const message = importError.response?.data?.message;\n const detail = importError.response?.data?.detail;\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${detail ? message + ' - ' + detail : message}`);\n }\n } else {\n showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${serviceId} not found!`);\n }\n });\n debugMessage(\n `cli.ServiceOps.importServiceFromFile: end [serviceId=${serviceId}, file=${filePath}]`\n );\n}\n\n/**\n * Import first service from file\n * @param {string} file import file name\n * @param {boolean} clean remove existing service\n */\nexport async function importFirstServiceFromFile(\n file: string,\n clean: boolean,\n globalConfig = false\n) {\n const filePath = getFilePath(file);\n debugMessage(\n `cli.ServiceOps.importFirstServiceFromFile: start [file=${filePath}]`\n );\n const verbose = state.getVerbose();\n fs.readFile(filePath, 'utf8', async (err, data) => {\n if (err) throw err;\n const importData = JSON.parse(data);\n if (importData && Object.keys(importData.service).length) {\n const serviceId = Object.keys(importData.service)[0];\n if (!verbose) showSpinner(`Importing ${serviceId}...`);\n try {\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n await importService(serviceId, importData, clean, globalConfig);\n succeedSpinner(`Imported ${serviceId}.`);\n } catch (importError) {\n const message = importError.response?.data?.message;\n const detail = importError.response?.data?.detail;\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${detail ? message + ' - ' + detail : message}`);\n }\n } else {\n showSpinner(`Importing service...`);\n failSpinner(`No service found in ${filePath}!`);\n }\n debugMessage(\n `cli.ServiceOps.importFirstServiceFromFile: end [file=${filePath}]`\n );\n });\n}\n\n/**\n * Import services from file\n * @param {String} file file name\n * @param {boolean} clean remove existing service\n */\nexport async function importServicesFromFile(\n file: string,\n clean: boolean,\n globalConfig = false\n) {\n const filePath = getFilePath(file);\n debugMessage(\n `cli.ServiceOps.importServiceFromFile: start [file=${filePath}]`\n );\n fs.readFile(filePath, 'utf8', async (err, data) => {\n if (err) throw err;\n debugMessage(`cli.ServiceOps.importServiceFromFile: importing ${filePath}`);\n const importData = JSON.parse(data) as ServiceExportInterface;\n try {\n await importServices(importData, clean, globalConfig);\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.status, 'error');\n }\n debugMessage(\n `cli.ServiceOps.importServiceFromFile: end [file=${filePath}]`\n );\n });\n}\n\n/**\n * Import all services from separate files\n * @param {boolean} clean remove existing service\n */\nexport async function importServicesFromFiles(\n clean: boolean,\n globalConfig = false\n) {\n debugMessage(`cli.ServiceOps.importServicesFromFiles: start`);\n const names = fs.readdirSync(getWorkingDirectory());\n const agentFiles = names\n .filter((name) => name.toLowerCase().endsWith('.service.json'))\n .map((name) => getFilePath(name));\n for (const file of agentFiles) {\n await importServicesFromFile(file, clean, globalConfig);\n }\n debugMessage(`cli.ServiceOps.importServicesFromFiles: end`);\n}\n\n/**\n * Delete a service by id/name\n * @param {string} serviceId Reference to the service to delete\n */\nexport async function deleteService(serviceId: string, globalConfig = false) {\n try {\n await deleteFullService(serviceId, globalConfig);\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(`Delete service '${serviceId}': ${message}`, 'error');\n }\n}\n\n/**\n * Delete all services\n */\nexport async function deleteServices(globalConfig = false) {\n await deleteFullServices(globalConfig);\n}\n"],"mappings":"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"}
|
package/esm/ops/ThemeOps.js
CHANGED
|
@@ -5,7 +5,9 @@ import { createProgressIndicator, createTable, printMessage, stopProgressIndicat
|
|
|
5
5
|
import { getTypedFilename, saveToFile } from '../utils/ExportImportUtils';
|
|
6
6
|
const {
|
|
7
7
|
getRealmString,
|
|
8
|
-
validateImport
|
|
8
|
+
validateImport,
|
|
9
|
+
getFilePath,
|
|
10
|
+
getWorkingDirectory
|
|
9
11
|
} = frodo.utils;
|
|
10
12
|
const {
|
|
11
13
|
readThemes,
|
|
@@ -80,12 +82,13 @@ export async function exportThemeByName(name, file) {
|
|
|
80
82
|
if (file) {
|
|
81
83
|
fileName = file;
|
|
82
84
|
}
|
|
85
|
+
const filePath = getFilePath(fileName, true);
|
|
83
86
|
createProgressIndicator('determinate', 1, `Exporting ${name}`);
|
|
84
87
|
try {
|
|
85
88
|
const themeData = await readThemeByName(name);
|
|
86
89
|
if (!themeData._id) themeData._id = uuidv4();
|
|
87
|
-
updateProgressIndicator(`Writing file ${
|
|
88
|
-
saveToFile('theme', [themeData], '_id',
|
|
90
|
+
updateProgressIndicator(`Writing file to ${filePath}`);
|
|
91
|
+
saveToFile('theme', [themeData], '_id', filePath);
|
|
89
92
|
stopProgressIndicator(`Successfully exported theme ${name}.`);
|
|
90
93
|
} catch (error) {
|
|
91
94
|
stopProgressIndicator(`${error.message}`);
|
|
@@ -103,11 +106,12 @@ export async function exportThemeById(id, file) {
|
|
|
103
106
|
if (file) {
|
|
104
107
|
fileName = file;
|
|
105
108
|
}
|
|
109
|
+
const filePath = getFilePath(fileName, true);
|
|
106
110
|
createProgressIndicator('determinate', 1, `Exporting ${id}`);
|
|
107
111
|
try {
|
|
108
112
|
const themeData = await readTheme(id);
|
|
109
|
-
updateProgressIndicator(`Writing file ${
|
|
110
|
-
saveToFile('theme', [themeData], '_id',
|
|
113
|
+
updateProgressIndicator(`Writing file to ${filePath}`);
|
|
114
|
+
saveToFile('theme', [themeData], '_id', filePath);
|
|
111
115
|
stopProgressIndicator(`Successfully exported theme ${id}.`);
|
|
112
116
|
} catch (error) {
|
|
113
117
|
stopProgressIndicator(`${error.message}`);
|
|
@@ -124,14 +128,15 @@ export async function exportThemesToFile(file) {
|
|
|
124
128
|
if (file) {
|
|
125
129
|
fileName = file;
|
|
126
130
|
}
|
|
131
|
+
const filePath = getFilePath(fileName, true);
|
|
127
132
|
const allThemesData = await readThemes();
|
|
128
133
|
createProgressIndicator('determinate', allThemesData.length, 'Exporting themes');
|
|
129
134
|
for (const themeData of allThemesData) {
|
|
130
135
|
if (!themeData._id) themeData._id = uuidv4();
|
|
131
136
|
updateProgressIndicator(`Exporting theme ${themeData.name}`);
|
|
132
137
|
}
|
|
133
|
-
saveToFile('theme', allThemesData, '_id',
|
|
134
|
-
stopProgressIndicator(`${allThemesData.length} themes exported to ${
|
|
138
|
+
saveToFile('theme', allThemesData, '_id', filePath);
|
|
139
|
+
stopProgressIndicator(`${allThemesData.length} themes exported to ${filePath}.`);
|
|
135
140
|
}
|
|
136
141
|
|
|
137
142
|
/**
|
|
@@ -144,7 +149,7 @@ export async function exportThemesToFiles() {
|
|
|
144
149
|
if (!themeData._id) themeData._id = uuidv4();
|
|
145
150
|
updateProgressIndicator(`Writing theme ${themeData.name}`);
|
|
146
151
|
const fileName = getTypedFilename(themeData.name, 'theme');
|
|
147
|
-
saveToFile('theme', themeData, '_id', fileName);
|
|
152
|
+
saveToFile('theme', themeData, '_id', getFilePath(fileName, true));
|
|
148
153
|
}
|
|
149
154
|
stopProgressIndicator(`${allThemesData.length} themes exported.`);
|
|
150
155
|
}
|
|
@@ -155,7 +160,7 @@ export async function exportThemesToFiles() {
|
|
|
155
160
|
* @param {String} file import file name
|
|
156
161
|
*/
|
|
157
162
|
export async function importThemeByName(name, file) {
|
|
158
|
-
fs.readFile(file, 'utf8', async (err, data) => {
|
|
163
|
+
fs.readFile(getFilePath(file), 'utf8', async (err, data) => {
|
|
159
164
|
if (err) throw err;
|
|
160
165
|
const themeData = JSON.parse(data);
|
|
161
166
|
if (validateImport(themeData.meta)) {
|
|
@@ -192,7 +197,7 @@ export async function importThemeByName(name, file) {
|
|
|
192
197
|
* @param {String} file import file name
|
|
193
198
|
*/
|
|
194
199
|
export async function importThemeById(id, file) {
|
|
195
|
-
fs.readFile(file, 'utf8', async (err, data) => {
|
|
200
|
+
fs.readFile(getFilePath(file), 'utf8', async (err, data) => {
|
|
196
201
|
if (err) throw err;
|
|
197
202
|
const themeData = JSON.parse(data);
|
|
198
203
|
if (validateImport(themeData.meta)) {
|
|
@@ -228,7 +233,8 @@ export async function importThemeById(id, file) {
|
|
|
228
233
|
* @param {String} file import file name
|
|
229
234
|
*/
|
|
230
235
|
export async function importThemesFromFile(file) {
|
|
231
|
-
|
|
236
|
+
const filePath = getFilePath(file);
|
|
237
|
+
fs.readFile(filePath, 'utf8', (err, data) => {
|
|
232
238
|
if (err) throw err;
|
|
233
239
|
const fileData = JSON.parse(data);
|
|
234
240
|
if (validateImport(fileData.meta)) {
|
|
@@ -241,7 +247,7 @@ export async function importThemesFromFile(file) {
|
|
|
241
247
|
updateThemes(fileData.theme).then(result => {
|
|
242
248
|
if (result == null) {
|
|
243
249
|
stopProgressIndicator(`Error importing ${Object.keys(fileData.theme).length} themes!`);
|
|
244
|
-
printMessage(`Error importing ${Object.keys(fileData.theme).length} themes from ${
|
|
250
|
+
printMessage(`Error importing ${Object.keys(fileData.theme).length} themes from ${filePath}`, 'error');
|
|
245
251
|
} else {
|
|
246
252
|
stopProgressIndicator(`Successfully imported ${Object.keys(fileData.theme).length} themes.`);
|
|
247
253
|
}
|
|
@@ -256,8 +262,8 @@ export async function importThemesFromFile(file) {
|
|
|
256
262
|
* Import themes from separate files
|
|
257
263
|
*/
|
|
258
264
|
export async function importThemesFromFiles() {
|
|
259
|
-
const names = fs.readdirSync(
|
|
260
|
-
const jsonFiles = names.filter(name => name.toLowerCase().endsWith('.theme.json'));
|
|
265
|
+
const names = fs.readdirSync(getWorkingDirectory());
|
|
266
|
+
const jsonFiles = names.filter(name => name.toLowerCase().endsWith('.theme.json')).map(name => getFilePath(name));
|
|
261
267
|
createProgressIndicator('determinate', jsonFiles.length, 'Importing themes...');
|
|
262
268
|
let fileData = null;
|
|
263
269
|
let count = 0;
|
|
@@ -289,7 +295,7 @@ export async function importThemesFromFiles() {
|
|
|
289
295
|
* @param {String} file import file name
|
|
290
296
|
*/
|
|
291
297
|
export async function importFirstThemeFromFile(file) {
|
|
292
|
-
fs.readFile(file, 'utf8', (err, data) => {
|
|
298
|
+
fs.readFile(getFilePath(file), 'utf8', (err, data) => {
|
|
293
299
|
if (err) throw err;
|
|
294
300
|
const themeData = JSON.parse(data);
|
|
295
301
|
if (validateImport(themeData.meta)) {
|
package/esm/ops/ThemeOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeOps.js","names":["frodo","fs","v4","uuidv4","createProgressIndicator","createTable","printMessage","stopProgressIndicator","updateProgressIndicator","getTypedFilename","saveToFile","getRealmString","validateImport","utils","readThemes","readThemeByName","readTheme","updateThemeByName","updateTheme","updateThemes","deleteTheme","deleteThemeByName","deleteThemes","theme","getOneLineDescription","themeObj","description","_id","name","linkedTrees","join","getTableHeaderMd","markdown","getTableRowMd","row","listThemes","long","themeList","sort","a","b","localeCompare","forEach","isDefault","table","push","toString","exportThemeByName","file","fileName","themeData","error","message","exportThemeById","id","exportThemesToFile","allThemesData","length","exportThemesToFiles","importThemeByName","readFile","err","data","JSON","parse","meta","found","hasOwnProperty","call","importThemeById","themeId","importThemesFromFile","fileData","Object","keys","then","result","importThemesFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","count","total","files","readFileSync","importFirstThemeFromFile","deleteThemeCmd","undefined","deleteThemeByNameCmd","deleteAllThemes","deleteThemesCmd"],"sources":["../../src/ops/ThemeOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { type ThemeSkeleton } from '@rockcarver/frodo-lib/types/ops/ThemeOps';\nimport fs from 'fs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n createProgressIndicator,\n createTable,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename, saveToFile } from '../utils/ExportImportUtils';\n\nconst { getRealmString, validateImport } = frodo.utils;\nconst {\n readThemes,\n readThemeByName,\n readTheme,\n updateThemeByName,\n updateTheme,\n updateThemes,\n deleteTheme,\n deleteThemeByName,\n deleteThemes,\n} = frodo.theme;\n\n/**\n * Get a one-line description of the theme\n * @param {ThemeSkeleton} themeObj theme object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(themeObj: ThemeSkeleton): string {\n const description = `[${themeObj._id['brightCyan']}] ${themeObj.name}${\n themeObj.linkedTrees\n ? ' (' + themeObj.linkedTrees.join(', ')['brightCyan'] + ')'\n : ''\n }`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name | Linked Journey(s) | Id |\\n';\n markdown += '| ---- | ----------------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the theme in markdown\n * @param {ThemeSkeleton} themeObj theme object to describe\n * @returns {string} a table-row of the theme in markdown\n */\nexport function getTableRowMd(themeObj: ThemeSkeleton): string {\n const row = `| ${themeObj.name} | ${\n themeObj.linkedTrees ? themeObj.linkedTrees.join(', ') : ''\n } | \\`${themeObj._id}\\` |`;\n return row;\n}\n\n/**\n * List all the themes\n * @param {boolean} long Long version, more fields\n */\nexport async function listThemes(long = false) {\n const themeList = await readThemes();\n themeList.sort((a, b) => a.name.localeCompare(b.name));\n if (!long) {\n themeList.forEach((theme) => {\n printMessage(\n `${theme.isDefault ? theme.name['brightCyan'] : theme.name}`,\n 'data'\n );\n });\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Id'['brightCyan'],\n 'Default'['brightCyan'],\n ]);\n themeList.forEach((theme) => {\n table.push([\n `${theme.name}`,\n `${theme._id}`,\n `${theme.isDefault ? 'Yes'['brightGreen'] : ''}`,\n ]);\n });\n printMessage(table.toString(), 'data');\n }\n}\n\n/**\n * Export theme by name to file\n * @param {String} name theme name\n * @param {String} file optional export file name\n */\nexport async function exportThemeByName(name, file) {\n let fileName = getTypedFilename(name, 'theme');\n if (file) {\n fileName = file;\n }\n createProgressIndicator('determinate', 1, `Exporting ${name}`);\n try {\n const themeData = await readThemeByName(name);\n if (!themeData._id) themeData._id = uuidv4();\n updateProgressIndicator(`Writing file ${fileName}`);\n saveToFile('theme', [themeData], '_id', fileName);\n stopProgressIndicator(`Successfully exported theme ${name}.`);\n } catch (error) {\n stopProgressIndicator(`${error.message}`);\n printMessage(`${error.message}`, 'error');\n }\n}\n\n/**\n * Export theme by uuid to file\n * @param {String} id theme uuid\n * @param {String} file optional export file name\n */\nexport async function exportThemeById(id, file) {\n let fileName = getTypedFilename(id, 'theme');\n if (file) {\n fileName = file;\n }\n createProgressIndicator('determinate', 1, `Exporting ${id}`);\n try {\n const themeData = await readTheme(id);\n updateProgressIndicator(`Writing file ${fileName}`);\n saveToFile('theme', [themeData], '_id', fileName);\n stopProgressIndicator(`Successfully exported theme ${id}.`);\n } catch (error) {\n stopProgressIndicator(`${error.message}`);\n printMessage(`${error.message}`, 'error');\n }\n}\n\n/**\n * Export all themes to file\n * @param {String} file optional export file name\n */\nexport async function exportThemesToFile(file) {\n let fileName = getTypedFilename(`all${getRealmString()}Themes`, 'theme');\n if (file) {\n fileName = file;\n }\n const allThemesData = await readThemes();\n createProgressIndicator(\n 'determinate',\n allThemesData.length,\n 'Exporting themes'\n );\n for (const themeData of allThemesData) {\n if (!themeData._id) themeData._id = uuidv4();\n updateProgressIndicator(`Exporting theme ${themeData.name}`);\n }\n saveToFile('theme', allThemesData, '_id', fileName);\n stopProgressIndicator(\n `${allThemesData.length} themes exported to ${fileName}.`\n );\n}\n\n/**\n * Export all themes to separate files\n */\nexport async function exportThemesToFiles() {\n const allThemesData = await readThemes();\n createProgressIndicator(\n 'determinate',\n allThemesData.length,\n 'Exporting themes'\n );\n for (const themeData of allThemesData) {\n if (!themeData._id) themeData._id = uuidv4();\n updateProgressIndicator(`Writing theme ${themeData.name}`);\n const fileName = getTypedFilename(themeData.name, 'theme');\n saveToFile('theme', themeData, '_id', fileName);\n }\n stopProgressIndicator(`${allThemesData.length} themes exported.`);\n}\n\n/**\n * Import theme by name from file\n * @param {String} name theme name\n * @param {String} file import file name\n */\nexport async function importThemeByName(name, file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const themeData = JSON.parse(data);\n if (validateImport(themeData.meta)) {\n createProgressIndicator('determinate', 1, 'Importing theme...');\n let found = false;\n for (const id in themeData.theme) {\n if ({}.hasOwnProperty.call(themeData.theme, id)) {\n if (themeData.theme[id].name === name) {\n found = true;\n updateProgressIndicator(`Importing ${themeData.theme[id].name}`);\n try {\n await updateThemeByName(name, themeData.theme[id]);\n stopProgressIndicator(`Successfully imported theme ${name}.`);\n } catch (error) {\n stopProgressIndicator(\n `Error importing theme ${themeData.theme[id].name}: ${error.message}`\n );\n printMessage(\n `Error importing theme ${themeData.theme[id].name}: ${error.message}`,\n 'error'\n );\n }\n break;\n }\n }\n }\n if (!found) {\n stopProgressIndicator(`Theme ${name} not found!`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import theme by uuid from file\n * @param {String} id theme uuid\n * @param {String} file import file name\n */\nexport async function importThemeById(id, file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const themeData = JSON.parse(data);\n if (validateImport(themeData.meta)) {\n createProgressIndicator('determinate', 1, 'Importing theme...');\n let found = false;\n for (const themeId in themeData.theme) {\n if ({}.hasOwnProperty.call(themeData.theme, themeId)) {\n if (themeId === id) {\n found = true;\n updateProgressIndicator(\n `Importing ${themeData.theme[themeId]._id}`\n );\n try {\n await updateTheme(themeId, themeData.theme[themeId]);\n stopProgressIndicator(`Successfully imported theme ${id}.`);\n } catch (error) {\n stopProgressIndicator(\n `Error importing theme ${themeData.theme[themeId]._id}: ${error.message}`\n );\n printMessage(\n `Error importing theme ${themeData.theme[themeId]._id}: ${error.message}`,\n 'error'\n );\n }\n break;\n }\n }\n }\n if (!found) {\n stopProgressIndicator(`Theme ${id} not found!`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all themes from single file\n * @param {String} file import file name\n */\nexport async function importThemesFromFile(file) {\n fs.readFile(file, 'utf8', (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n 'determinate',\n Object.keys(fileData.theme).length,\n 'Importing themes...'\n );\n for (const id in fileData.theme) {\n if ({}.hasOwnProperty.call(fileData.theme, id)) {\n updateProgressIndicator(`Importing ${fileData.theme[id].name}`);\n }\n }\n updateThemes(fileData.theme).then((result) => {\n if (result == null) {\n stopProgressIndicator(\n `Error importing ${Object.keys(fileData.theme).length} themes!`\n );\n printMessage(\n `Error importing ${\n Object.keys(fileData.theme).length\n } themes from ${file}`,\n 'error'\n );\n } else {\n stopProgressIndicator(\n `Successfully imported ${\n Object.keys(fileData.theme).length\n } themes.`\n );\n }\n });\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import themes from separate files\n */\nexport async function importThemesFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.theme.json')\n );\n\n createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing themes...'\n );\n let fileData = null;\n let count = 0;\n let total = 0;\n let files = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n count = Object.keys(fileData.theme).length;\n // eslint-disable-next-line no-await-in-loop\n const result = await updateThemes(fileData.theme);\n if (result == null) {\n printMessage(`Error importing ${count} themes from ${file}`, 'error');\n } else {\n files += 1;\n total += count;\n updateProgressIndicator(`Imported ${count} theme(s) from ${file}`);\n }\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Finished importing ${total} theme(s) from ${files} file(s).`\n );\n}\n\n/**\n * Import first theme from file\n * @param {String} file import file name\n */\nexport async function importFirstThemeFromFile(file) {\n fs.readFile(file, 'utf8', (err, data) => {\n if (err) throw err;\n const themeData = JSON.parse(data);\n if (validateImport(themeData.meta)) {\n createProgressIndicator('determinate', 1, 'Importing theme...');\n for (const id in themeData.theme) {\n if ({}.hasOwnProperty.call(themeData.theme, id)) {\n updateProgressIndicator(`Importing ${themeData.theme[id].name}`);\n updateTheme(id, themeData.theme[id]).then((result) => {\n if (result == null) {\n stopProgressIndicator(\n `Error importing theme ${themeData.theme[id].name}`\n );\n printMessage(\n `Error importing theme ${themeData.theme[id].name}`,\n 'error'\n );\n } else {\n stopProgressIndicator(\n `Successfully imported theme ${themeData.theme[id].name}`\n );\n }\n });\n break;\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Delete theme by id\n * @param {String} id theme id\n */\nexport async function deleteThemeCmd(id) {\n createProgressIndicator('indeterminate', undefined, `Deleting ${id}...`);\n try {\n await deleteTheme(id);\n stopProgressIndicator(`Deleted ${id}.`, 'success');\n } catch (error) {\n stopProgressIndicator(`Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete theme by name\n * @param {String} name theme name\n */\nexport async function deleteThemeByNameCmd(name) {\n createProgressIndicator('indeterminate', undefined, `Deleting ${name}...`);\n try {\n await deleteThemeByName(name);\n stopProgressIndicator(`Deleted ${name}.`, 'success');\n } catch (error) {\n stopProgressIndicator(`Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete all themes\n */\nexport async function deleteAllThemes() {\n createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting all realm themes...`\n );\n try {\n await deleteThemes();\n stopProgressIndicator(`Deleted all realm themes.`, 'success');\n } catch (error) {\n stopProgressIndicator(`Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete all themes\n * @deprecated since version 0.14.0\n */\nexport async function deleteThemesCmd() {\n return deleteAllThemes();\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThemeOps.js","names":["frodo","fs","v4","uuidv4","createProgressIndicator","createTable","printMessage","stopProgressIndicator","updateProgressIndicator","getTypedFilename","saveToFile","getRealmString","validateImport","getFilePath","getWorkingDirectory","utils","readThemes","readThemeByName","readTheme","updateThemeByName","updateTheme","updateThemes","deleteTheme","deleteThemeByName","deleteThemes","theme","getOneLineDescription","themeObj","description","_id","name","linkedTrees","join","getTableHeaderMd","markdown","getTableRowMd","row","listThemes","long","themeList","sort","a","b","localeCompare","forEach","isDefault","table","push","toString","exportThemeByName","file","fileName","filePath","themeData","error","message","exportThemeById","id","exportThemesToFile","allThemesData","length","exportThemesToFiles","importThemeByName","readFile","err","data","JSON","parse","meta","found","hasOwnProperty","call","importThemeById","themeId","importThemesFromFile","fileData","Object","keys","then","result","importThemesFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","map","count","total","files","readFileSync","importFirstThemeFromFile","deleteThemeCmd","undefined","deleteThemeByNameCmd","deleteAllThemes","deleteThemesCmd"],"sources":["../../src/ops/ThemeOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { type ThemeSkeleton } from '@rockcarver/frodo-lib/types/ops/ThemeOps';\nimport fs from 'fs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n createProgressIndicator,\n createTable,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename, saveToFile } from '../utils/ExportImportUtils';\n\nconst { getRealmString, validateImport, getFilePath, getWorkingDirectory } =\n frodo.utils;\nconst {\n readThemes,\n readThemeByName,\n readTheme,\n updateThemeByName,\n updateTheme,\n updateThemes,\n deleteTheme,\n deleteThemeByName,\n deleteThemes,\n} = frodo.theme;\n\n/**\n * Get a one-line description of the theme\n * @param {ThemeSkeleton} themeObj theme object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(themeObj: ThemeSkeleton): string {\n const description = `[${themeObj._id['brightCyan']}] ${themeObj.name}${\n themeObj.linkedTrees\n ? ' (' + themeObj.linkedTrees.join(', ')['brightCyan'] + ')'\n : ''\n }`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name | Linked Journey(s) | Id |\\n';\n markdown += '| ---- | ----------------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the theme in markdown\n * @param {ThemeSkeleton} themeObj theme object to describe\n * @returns {string} a table-row of the theme in markdown\n */\nexport function getTableRowMd(themeObj: ThemeSkeleton): string {\n const row = `| ${themeObj.name} | ${\n themeObj.linkedTrees ? themeObj.linkedTrees.join(', ') : ''\n } | \\`${themeObj._id}\\` |`;\n return row;\n}\n\n/**\n * List all the themes\n * @param {boolean} long Long version, more fields\n */\nexport async function listThemes(long = false) {\n const themeList = await readThemes();\n themeList.sort((a, b) => a.name.localeCompare(b.name));\n if (!long) {\n themeList.forEach((theme) => {\n printMessage(\n `${theme.isDefault ? theme.name['brightCyan'] : theme.name}`,\n 'data'\n );\n });\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Id'['brightCyan'],\n 'Default'['brightCyan'],\n ]);\n themeList.forEach((theme) => {\n table.push([\n `${theme.name}`,\n `${theme._id}`,\n `${theme.isDefault ? 'Yes'['brightGreen'] : ''}`,\n ]);\n });\n printMessage(table.toString(), 'data');\n }\n}\n\n/**\n * Export theme by name to file\n * @param {String} name theme name\n * @param {String} file optional export file name\n */\nexport async function exportThemeByName(name, file) {\n let fileName = getTypedFilename(name, 'theme');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n createProgressIndicator('determinate', 1, `Exporting ${name}`);\n try {\n const themeData = await readThemeByName(name);\n if (!themeData._id) themeData._id = uuidv4();\n updateProgressIndicator(`Writing file to ${filePath}`);\n saveToFile('theme', [themeData], '_id', filePath);\n stopProgressIndicator(`Successfully exported theme ${name}.`);\n } catch (error) {\n stopProgressIndicator(`${error.message}`);\n printMessage(`${error.message}`, 'error');\n }\n}\n\n/**\n * Export theme by uuid to file\n * @param {String} id theme uuid\n * @param {String} file optional export file name\n */\nexport async function exportThemeById(id, file) {\n let fileName = getTypedFilename(id, 'theme');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n createProgressIndicator('determinate', 1, `Exporting ${id}`);\n try {\n const themeData = await readTheme(id);\n updateProgressIndicator(`Writing file to ${filePath}`);\n saveToFile('theme', [themeData], '_id', filePath);\n stopProgressIndicator(`Successfully exported theme ${id}.`);\n } catch (error) {\n stopProgressIndicator(`${error.message}`);\n printMessage(`${error.message}`, 'error');\n }\n}\n\n/**\n * Export all themes to file\n * @param {String} file optional export file name\n */\nexport async function exportThemesToFile(file) {\n let fileName = getTypedFilename(`all${getRealmString()}Themes`, 'theme');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const allThemesData = await readThemes();\n createProgressIndicator(\n 'determinate',\n allThemesData.length,\n 'Exporting themes'\n );\n for (const themeData of allThemesData) {\n if (!themeData._id) themeData._id = uuidv4();\n updateProgressIndicator(`Exporting theme ${themeData.name}`);\n }\n saveToFile('theme', allThemesData, '_id', filePath);\n stopProgressIndicator(\n `${allThemesData.length} themes exported to ${filePath}.`\n );\n}\n\n/**\n * Export all themes to separate files\n */\nexport async function exportThemesToFiles() {\n const allThemesData = await readThemes();\n createProgressIndicator(\n 'determinate',\n allThemesData.length,\n 'Exporting themes'\n );\n for (const themeData of allThemesData) {\n if (!themeData._id) themeData._id = uuidv4();\n updateProgressIndicator(`Writing theme ${themeData.name}`);\n const fileName = getTypedFilename(themeData.name, 'theme');\n saveToFile('theme', themeData, '_id', getFilePath(fileName, true));\n }\n stopProgressIndicator(`${allThemesData.length} themes exported.`);\n}\n\n/**\n * Import theme by name from file\n * @param {String} name theme name\n * @param {String} file import file name\n */\nexport async function importThemeByName(name, file) {\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n const themeData = JSON.parse(data);\n if (validateImport(themeData.meta)) {\n createProgressIndicator('determinate', 1, 'Importing theme...');\n let found = false;\n for (const id in themeData.theme) {\n if ({}.hasOwnProperty.call(themeData.theme, id)) {\n if (themeData.theme[id].name === name) {\n found = true;\n updateProgressIndicator(`Importing ${themeData.theme[id].name}`);\n try {\n await updateThemeByName(name, themeData.theme[id]);\n stopProgressIndicator(`Successfully imported theme ${name}.`);\n } catch (error) {\n stopProgressIndicator(\n `Error importing theme ${themeData.theme[id].name}: ${error.message}`\n );\n printMessage(\n `Error importing theme ${themeData.theme[id].name}: ${error.message}`,\n 'error'\n );\n }\n break;\n }\n }\n }\n if (!found) {\n stopProgressIndicator(`Theme ${name} not found!`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import theme by uuid from file\n * @param {String} id theme uuid\n * @param {String} file import file name\n */\nexport async function importThemeById(id, file) {\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n const themeData = JSON.parse(data);\n if (validateImport(themeData.meta)) {\n createProgressIndicator('determinate', 1, 'Importing theme...');\n let found = false;\n for (const themeId in themeData.theme) {\n if ({}.hasOwnProperty.call(themeData.theme, themeId)) {\n if (themeId === id) {\n found = true;\n updateProgressIndicator(\n `Importing ${themeData.theme[themeId]._id}`\n );\n try {\n await updateTheme(themeId, themeData.theme[themeId]);\n stopProgressIndicator(`Successfully imported theme ${id}.`);\n } catch (error) {\n stopProgressIndicator(\n `Error importing theme ${themeData.theme[themeId]._id}: ${error.message}`\n );\n printMessage(\n `Error importing theme ${themeData.theme[themeId]._id}: ${error.message}`,\n 'error'\n );\n }\n break;\n }\n }\n }\n if (!found) {\n stopProgressIndicator(`Theme ${id} not found!`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all themes from single file\n * @param {String} file import file name\n */\nexport async function importThemesFromFile(file) {\n const filePath = getFilePath(file);\n fs.readFile(filePath, 'utf8', (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n 'determinate',\n Object.keys(fileData.theme).length,\n 'Importing themes...'\n );\n for (const id in fileData.theme) {\n if ({}.hasOwnProperty.call(fileData.theme, id)) {\n updateProgressIndicator(`Importing ${fileData.theme[id].name}`);\n }\n }\n updateThemes(fileData.theme).then((result) => {\n if (result == null) {\n stopProgressIndicator(\n `Error importing ${Object.keys(fileData.theme).length} themes!`\n );\n printMessage(\n `Error importing ${\n Object.keys(fileData.theme).length\n } themes from ${filePath}`,\n 'error'\n );\n } else {\n stopProgressIndicator(\n `Successfully imported ${\n Object.keys(fileData.theme).length\n } themes.`\n );\n }\n });\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import themes from separate files\n */\nexport async function importThemesFromFiles() {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.theme.json'))\n .map((name) => getFilePath(name));\n\n createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing themes...'\n );\n let fileData = null;\n let count = 0;\n let total = 0;\n let files = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n count = Object.keys(fileData.theme).length;\n // eslint-disable-next-line no-await-in-loop\n const result = await updateThemes(fileData.theme);\n if (result == null) {\n printMessage(`Error importing ${count} themes from ${file}`, 'error');\n } else {\n files += 1;\n total += count;\n updateProgressIndicator(`Imported ${count} theme(s) from ${file}`);\n }\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Finished importing ${total} theme(s) from ${files} file(s).`\n );\n}\n\n/**\n * Import first theme from file\n * @param {String} file import file name\n */\nexport async function importFirstThemeFromFile(file) {\n fs.readFile(getFilePath(file), 'utf8', (err, data) => {\n if (err) throw err;\n const themeData = JSON.parse(data);\n if (validateImport(themeData.meta)) {\n createProgressIndicator('determinate', 1, 'Importing theme...');\n for (const id in themeData.theme) {\n if ({}.hasOwnProperty.call(themeData.theme, id)) {\n updateProgressIndicator(`Importing ${themeData.theme[id].name}`);\n updateTheme(id, themeData.theme[id]).then((result) => {\n if (result == null) {\n stopProgressIndicator(\n `Error importing theme ${themeData.theme[id].name}`\n );\n printMessage(\n `Error importing theme ${themeData.theme[id].name}`,\n 'error'\n );\n } else {\n stopProgressIndicator(\n `Successfully imported theme ${themeData.theme[id].name}`\n );\n }\n });\n break;\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Delete theme by id\n * @param {String} id theme id\n */\nexport async function deleteThemeCmd(id) {\n createProgressIndicator('indeterminate', undefined, `Deleting ${id}...`);\n try {\n await deleteTheme(id);\n stopProgressIndicator(`Deleted ${id}.`, 'success');\n } catch (error) {\n stopProgressIndicator(`Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete theme by name\n * @param {String} name theme name\n */\nexport async function deleteThemeByNameCmd(name) {\n createProgressIndicator('indeterminate', undefined, `Deleting ${name}...`);\n try {\n await deleteThemeByName(name);\n stopProgressIndicator(`Deleted ${name}.`, 'success');\n } catch (error) {\n stopProgressIndicator(`Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete all themes\n */\nexport async function deleteAllThemes() {\n createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting all realm themes...`\n );\n try {\n await deleteThemes();\n stopProgressIndicator(`Deleted all realm themes.`, 'success');\n } catch (error) {\n stopProgressIndicator(`Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete all themes\n * @deprecated since version 0.14.0\n */\nexport async function deleteThemesCmd() {\n return deleteAllThemes();\n}\n"],"mappings":"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"}
|