@rockcarver/frodo-cli 2.0.0-14 → 2.0.0-15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Fixed
11
+
12
+ - \#276: `frodo script import -A --watch <tenant>` (preceeded by `frodo script export -A --extract <tenant>`) now properly reports errors like scripts not compiling or any REST errors but won't exit the watch thread but keep on watching and pushing local changes to `<tenant>`.
13
+
14
+ ## [2.0.0-14] - 2023-08-16
15
+
10
16
  ### Changed
11
17
 
12
18
  - Update to frodo-lib 2.0.0-21
@@ -1337,7 +1343,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1337
1343
  - Fixed problem with adding connection profiles
1338
1344
  - Miscellaneous bug fixes
1339
1345
 
1340
- [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-13...HEAD
1346
+ [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-14...HEAD
1347
+
1348
+ [2.0.0-14]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-13...v2.0.0-14
1341
1349
 
1342
1350
  [2.0.0-13]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-12...v2.0.0-13
1343
1351
 
package/esm/ops/IdmOps.js CHANGED
@@ -8,7 +8,7 @@ import { createProgressIndicator, printMessage, stopProgressIndicator } from '..
8
8
  import { getTypedFilename, readFiles } from '../utils/ExportImportUtils';
9
9
  const {
10
10
  unSubstituteEnvParams,
11
- validateScriptHooks
11
+ areScriptHooksValid
12
12
  } = frodo.utils;
13
13
  const {
14
14
  testConnectorServers,
@@ -178,7 +178,7 @@ export async function importConfigEntityByIdFromFile(entityId, file, validate) {
178
178
  }
179
179
  const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');
180
180
  const entityData = JSON.parse(fileData);
181
- const isValid = validateScriptHooks(entityData);
181
+ const isValid = areScriptHooksValid(entityData);
182
182
  if (validate && !isValid) {
183
183
  printMessage('Invalid IDM configuration object', 'error');
184
184
  return;
@@ -200,7 +200,7 @@ export async function importConfigEntityFromFile(file, validate) {
200
200
  const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');
201
201
  const entityData = JSON.parse(fileData);
202
202
  const entityId = entityData._id;
203
- const isValid = validateScriptHooks(entityData);
203
+ const isValid = areScriptHooksValid(entityData);
204
204
  if (validate && !isValid) {
205
205
  printMessage('Invalid IDM configuration object', 'error');
206
206
  return;
@@ -237,7 +237,7 @@ export async function importAllRawConfigEntities(baseDirectory, validate) {
237
237
  let everyScriptValid = true;
238
238
  for (const file of jsonFiles) {
239
239
  const jsObject = JSON.parse(file.content);
240
- const isScriptValid = validateScriptHooks(jsObject);
240
+ const isScriptValid = areScriptHooksValid(jsObject);
241
241
  if (!isScriptValid) {
242
242
  printMessage(`Invalid script hook in ${file.path}`, 'error');
243
243
  everyScriptValid = false;
@@ -291,7 +291,7 @@ export async function importAllConfigEntities(baseDirectory, entitiesFile, envFi
291
291
  let everyScriptValid = true;
292
292
  for (const file of jsonFiles) {
293
293
  const jsObject = JSON.parse(file.content);
294
- const isScriptValid = validateScriptHooks(jsObject);
294
+ const isScriptValid = areScriptHooksValid(jsObject);
295
295
  if (!isScriptValid) {
296
296
  printMessage(`Invalid script hook in ${file.path}`, 'error');
297
297
  everyScriptValid = false;
@@ -1 +1 @@
1
- {"version":3,"file":"IdmOps.js","names":["frodo","fs","fse","path","propertiesReader","replaceall","createProgressIndicator","printMessage","stopProgressIndicator","getTypedFilename","readFiles","unSubstituteEnvParams","validateScriptHooks","utils","testConnectorServers","readConfigEntities","readConfigEntity","updateConfigEntity","idm","config","queryManagedObjects","managed","warnAboutOfflineConnectorServers","all","offline","filter","status","ok","map","name","length","join","error","message","listAllConfigEntities","configurations","configEntity","_id","readConfigEntitiesError","exportConfigEntity","id","file","fileName","writeFile","JSON","stringify","err","exportAllRawConfigEntities","directory","existsSync","mkdirSync","undefined","entityPromises","push","catch","readConfigEntityError","_readConfigEntityErro","_readConfigEntityErro2","_readConfigEntityErro3","_readConfigEntityErro4","_readConfigEntityErro5","_readConfigEntityErro6","_readConfigEntityErro7","_readConfigEntityErro8","_readConfigEntityErro9","response","data","includes","reason","_readConfigEntityErro10","results","Promise","item","outputFile","exportAllConfigEntities","entitiesFile","envFile","entriesToExport","readFile","entriesData","parse","envParams","configEntityString","each","key","value","importConfigEntityByIdFromFile","entityId","validate","fileData","readFileSync","resolve","process","cwd","entityData","isValid","updateConfigEntityError","importConfigEntityFromFile","importAllRawConfigEntities","baseDirectory","files","jsonFiles","toLowerCase","endsWith","content","substring","everyScriptValid","jsObject","isScriptValid","allSettled","errors","result","importAllConfigEntities","entriesToImport","envReader","unsubstituted","countManagedObjects","type"],"sources":["../../src/ops/IdmOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport path from 'path';\nimport propertiesReader from 'properties-reader';\nimport replaceall from 'replaceall';\n\nimport {\n createProgressIndicator,\n printMessage,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename, readFiles } from '../utils/ExportImportUtils';\n\nconst { unSubstituteEnvParams, validateScriptHooks } = frodo.utils;\nconst {\n testConnectorServers,\n readConfigEntities,\n readConfigEntity,\n updateConfigEntity,\n} = frodo.idm.config;\nconst { queryManagedObjects } = frodo.idm.managed;\n\n/**\n * Warn about and list offline remote connector servers\n */\nexport async function warnAboutOfflineConnectorServers() {\n try {\n const all = await testConnectorServers();\n const offline = all\n .filter((status) => !status.ok)\n .map((status) => status.name);\n if (offline.length) {\n printMessage(\n `\\nThe following connector server(s) are offline and their connectors and configuration unavailable:\\n${offline.join(\n '\\n'\n )}`,\n 'warn'\n );\n }\n } catch (error) {\n printMessage(error, 'error');\n printMessage(\n `Error getting offline connector servers: ${error.message}`,\n 'error'\n );\n }\n}\n\n/**\n * List all IDM configuration objects\n */\nexport async function listAllConfigEntities() {\n try {\n const configurations = await readConfigEntities();\n for (const configEntity of configurations) {\n printMessage(`${configEntity._id}`, 'data');\n }\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export an IDM configuration object.\n * @param {String} id the desired configuration object\n * @param {String} file optional export file\n */\nexport async function exportConfigEntity(id, file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`${id}`, 'idm');\n }\n const configEntity = await readConfigEntity(id);\n fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${id} export to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Export all IDM configuration objects into separate JSON files in a directory specified by <directory>\n * @param {String} directory export directory\n */\nexport async function exportAllRawConfigEntities(directory) {\n try {\n const configurations = await readConfigEntities();\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n entityPromises.push(\n readConfigEntity(configEntity._id).catch((readConfigEntityError) => {\n if (\n !(\n readConfigEntityError.response?.status === 403 &&\n readConfigEntityError.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n ) &&\n !(\n // list of config entities, which do not exist by default or ever.\n (\n [\n 'script',\n 'notificationFactory',\n 'apiVersion',\n 'metrics',\n 'repo.init',\n 'endpoint/validateQueryFilter',\n 'endpoint/oauthproxy',\n 'external.rest',\n 'scheduler',\n 'org.apache.felix.fileinstall/openidm',\n 'cluster',\n 'endpoint/mappingDetails',\n 'fieldPolicy/teammember',\n ].includes(configEntity._id) &&\n readConfigEntityError.response?.status === 404 &&\n readConfigEntityError.response?.data?.reason === 'Not Found'\n )\n ) &&\n // https://bugster.forgerock.org/jira/browse/OPENIDM-18270\n !(\n readConfigEntityError.response?.status === 404 &&\n readConfigEntityError.response?.data?.message ===\n 'No configuration exists for id org.apache.felix.fileinstall/openidm'\n )\n ) {\n printMessage(readConfigEntityError.response?.data, 'error');\n printMessage(\n `Error getting config entity ${configEntity._id}: ${readConfigEntityError}`,\n 'error'\n );\n }\n })\n );\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n fse.outputFile(\n `${directory}/${item._id}.json`,\n JSON.stringify(item, null, 2),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator('Exported config objects.', 'success');\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all IDM configuration objects\n * @param {String} directory export directory\n * @param {String} entitiesFile JSON file that specifies the config entities to export/import\n * @param {String} envFile File that defines environment specific variables for replacement during configuration export/import\n */\nexport async function exportAllConfigEntities(\n directory,\n entitiesFile,\n envFile\n) {\n let entriesToExport = [];\n // read list of entities to export\n fs.readFile(entitiesFile, 'utf8', async (err, data) => {\n if (err) throw err;\n const entriesData = JSON.parse(data);\n entriesToExport = entriesData.idm;\n // console.log(`entriesToExport ${entriesToExport}`);\n\n // read list of configs to parameterize for environment specific values\n const envParams = propertiesReader(envFile);\n\n try {\n const configurations = await readConfigEntities();\n // create export directory if not exist\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n if (entriesToExport.includes(configEntity._id)) {\n entityPromises.push(readConfigEntity(configEntity._id));\n }\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n let configEntityString = JSON.stringify(item, null, 2);\n envParams.each((key, value) => {\n configEntityString = replaceall(\n value,\n `\\${${key}}`,\n configEntityString\n );\n });\n fse.outputFile(\n `${directory}/${item._id}.json`,\n configEntityString,\n (error) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${error}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator(null, 'success');\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n });\n}\n\n/**\n * Import an IDM configuration object by id from file.\n * @param entityId the configuration object to import\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityByIdFromFile(\n entityId: string,\n file?: string,\n validate?: boolean\n) {\n if (!file) {\n file = getTypedFilename(entityId, 'idm');\n }\n\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n\n const entityData = JSON.parse(fileData);\n const isValid = validateScriptHooks(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await updateConfigEntity(entityId, entityData);\n } catch (updateConfigEntityError) {\n printMessage(updateConfigEntityError, 'error');\n printMessage(`Error: ${updateConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import IDM configuration object from file.\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityFromFile(\n file: string,\n validate?: boolean\n) {\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n const entityData = JSON.parse(fileData);\n const entityId = entityData._id;\n const isValid = validateScriptHooks(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await updateConfigEntity(entityId, entityData);\n } catch (updateConfigEntityError) {\n printMessage(updateConfigEntityError, 'error');\n printMessage(`Error: ${updateConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import all IDM configuration objects from separate JSON files in a directory specified by <directory>\n * @param baseDirectory export directory\n * @param validate validate script hooks\n */\nexport async function importAllRawConfigEntities(\n baseDirectory: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ path, content }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles.map((file) => {\n return updateConfigEntity(file.entityId, JSON.parse(file.content));\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Import all IDM configuration objects\n * @param baseDirectory import directory\n * @param entitiesFile JSON file that specifies the config entities to export/import\n * @param envFile File that defines environment specific variables for replacement during configuration export/import\n * @param validate validate script hooks\n */\nexport async function importAllConfigEntities(\n baseDirectory: string,\n entitiesFile: string,\n envFile: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;\n\n const envReader = propertiesReader(envFile);\n\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ content, path }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles\n .filter(({ entityId }) => {\n return entriesToImport.includes(entityId);\n })\n .map(({ entityId, content }) => {\n const unsubstituted = unSubstituteEnvParams(content, envReader);\n return updateConfigEntity(entityId, JSON.parse(unsubstituted));\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Count number of managed objects of a given type\n * @param {String} type managed object type, e.g. alpha_user\n */\nexport async function countManagedObjects(type: string) {\n try {\n const result = await queryManagedObjects(type);\n printMessage(`${type}: ${result.length}`);\n } catch (error) {\n printMessage(error.response.data, 'error');\n printMessage(`Error querying managed objects by type: ${error}`, 'error');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"IdmOps.js","names":["frodo","fs","fse","path","propertiesReader","replaceall","createProgressIndicator","printMessage","stopProgressIndicator","getTypedFilename","readFiles","unSubstituteEnvParams","areScriptHooksValid","utils","testConnectorServers","readConfigEntities","readConfigEntity","updateConfigEntity","idm","config","queryManagedObjects","managed","warnAboutOfflineConnectorServers","all","offline","filter","status","ok","map","name","length","join","error","message","listAllConfigEntities","configurations","configEntity","_id","readConfigEntitiesError","exportConfigEntity","id","file","fileName","writeFile","JSON","stringify","err","exportAllRawConfigEntities","directory","existsSync","mkdirSync","undefined","entityPromises","push","catch","readConfigEntityError","_readConfigEntityErro","_readConfigEntityErro2","_readConfigEntityErro3","_readConfigEntityErro4","_readConfigEntityErro5","_readConfigEntityErro6","_readConfigEntityErro7","_readConfigEntityErro8","_readConfigEntityErro9","response","data","includes","reason","_readConfigEntityErro10","results","Promise","item","outputFile","exportAllConfigEntities","entitiesFile","envFile","entriesToExport","readFile","entriesData","parse","envParams","configEntityString","each","key","value","importConfigEntityByIdFromFile","entityId","validate","fileData","readFileSync","resolve","process","cwd","entityData","isValid","updateConfigEntityError","importConfigEntityFromFile","importAllRawConfigEntities","baseDirectory","files","jsonFiles","toLowerCase","endsWith","content","substring","everyScriptValid","jsObject","isScriptValid","allSettled","errors","result","importAllConfigEntities","entriesToImport","envReader","unsubstituted","countManagedObjects","type"],"sources":["../../src/ops/IdmOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport path from 'path';\nimport propertiesReader from 'properties-reader';\nimport replaceall from 'replaceall';\n\nimport {\n createProgressIndicator,\n printMessage,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename, readFiles } from '../utils/ExportImportUtils';\n\nconst { unSubstituteEnvParams, areScriptHooksValid } = frodo.utils;\nconst {\n testConnectorServers,\n readConfigEntities,\n readConfigEntity,\n updateConfigEntity,\n} = frodo.idm.config;\nconst { queryManagedObjects } = frodo.idm.managed;\n\n/**\n * Warn about and list offline remote connector servers\n */\nexport async function warnAboutOfflineConnectorServers() {\n try {\n const all = await testConnectorServers();\n const offline = all\n .filter((status) => !status.ok)\n .map((status) => status.name);\n if (offline.length) {\n printMessage(\n `\\nThe following connector server(s) are offline and their connectors and configuration unavailable:\\n${offline.join(\n '\\n'\n )}`,\n 'warn'\n );\n }\n } catch (error) {\n printMessage(error, 'error');\n printMessage(\n `Error getting offline connector servers: ${error.message}`,\n 'error'\n );\n }\n}\n\n/**\n * List all IDM configuration objects\n */\nexport async function listAllConfigEntities() {\n try {\n const configurations = await readConfigEntities();\n for (const configEntity of configurations) {\n printMessage(`${configEntity._id}`, 'data');\n }\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export an IDM configuration object.\n * @param {String} id the desired configuration object\n * @param {String} file optional export file\n */\nexport async function exportConfigEntity(id, file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`${id}`, 'idm');\n }\n const configEntity = await readConfigEntity(id);\n fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${id} export to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Export all IDM configuration objects into separate JSON files in a directory specified by <directory>\n * @param {String} directory export directory\n */\nexport async function exportAllRawConfigEntities(directory) {\n try {\n const configurations = await readConfigEntities();\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n entityPromises.push(\n readConfigEntity(configEntity._id).catch((readConfigEntityError) => {\n if (\n !(\n readConfigEntityError.response?.status === 403 &&\n readConfigEntityError.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n ) &&\n !(\n // list of config entities, which do not exist by default or ever.\n (\n [\n 'script',\n 'notificationFactory',\n 'apiVersion',\n 'metrics',\n 'repo.init',\n 'endpoint/validateQueryFilter',\n 'endpoint/oauthproxy',\n 'external.rest',\n 'scheduler',\n 'org.apache.felix.fileinstall/openidm',\n 'cluster',\n 'endpoint/mappingDetails',\n 'fieldPolicy/teammember',\n ].includes(configEntity._id) &&\n readConfigEntityError.response?.status === 404 &&\n readConfigEntityError.response?.data?.reason === 'Not Found'\n )\n ) &&\n // https://bugster.forgerock.org/jira/browse/OPENIDM-18270\n !(\n readConfigEntityError.response?.status === 404 &&\n readConfigEntityError.response?.data?.message ===\n 'No configuration exists for id org.apache.felix.fileinstall/openidm'\n )\n ) {\n printMessage(readConfigEntityError.response?.data, 'error');\n printMessage(\n `Error getting config entity ${configEntity._id}: ${readConfigEntityError}`,\n 'error'\n );\n }\n })\n );\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n fse.outputFile(\n `${directory}/${item._id}.json`,\n JSON.stringify(item, null, 2),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator('Exported config objects.', 'success');\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all IDM configuration objects\n * @param {String} directory export directory\n * @param {String} entitiesFile JSON file that specifies the config entities to export/import\n * @param {String} envFile File that defines environment specific variables for replacement during configuration export/import\n */\nexport async function exportAllConfigEntities(\n directory,\n entitiesFile,\n envFile\n) {\n let entriesToExport = [];\n // read list of entities to export\n fs.readFile(entitiesFile, 'utf8', async (err, data) => {\n if (err) throw err;\n const entriesData = JSON.parse(data);\n entriesToExport = entriesData.idm;\n // console.log(`entriesToExport ${entriesToExport}`);\n\n // read list of configs to parameterize for environment specific values\n const envParams = propertiesReader(envFile);\n\n try {\n const configurations = await readConfigEntities();\n // create export directory if not exist\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n if (entriesToExport.includes(configEntity._id)) {\n entityPromises.push(readConfigEntity(configEntity._id));\n }\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n let configEntityString = JSON.stringify(item, null, 2);\n envParams.each((key, value) => {\n configEntityString = replaceall(\n value,\n `\\${${key}}`,\n configEntityString\n );\n });\n fse.outputFile(\n `${directory}/${item._id}.json`,\n configEntityString,\n (error) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${error}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator(null, 'success');\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n });\n}\n\n/**\n * Import an IDM configuration object by id from file.\n * @param entityId the configuration object to import\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityByIdFromFile(\n entityId: string,\n file?: string,\n validate?: boolean\n) {\n if (!file) {\n file = getTypedFilename(entityId, 'idm');\n }\n\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n\n const entityData = JSON.parse(fileData);\n const isValid = areScriptHooksValid(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await updateConfigEntity(entityId, entityData);\n } catch (updateConfigEntityError) {\n printMessage(updateConfigEntityError, 'error');\n printMessage(`Error: ${updateConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import IDM configuration object from file.\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityFromFile(\n file: string,\n validate?: boolean\n) {\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n const entityData = JSON.parse(fileData);\n const entityId = entityData._id;\n const isValid = areScriptHooksValid(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await updateConfigEntity(entityId, entityData);\n } catch (updateConfigEntityError) {\n printMessage(updateConfigEntityError, 'error');\n printMessage(`Error: ${updateConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import all IDM configuration objects from separate JSON files in a directory specified by <directory>\n * @param baseDirectory export directory\n * @param validate validate script hooks\n */\nexport async function importAllRawConfigEntities(\n baseDirectory: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ path, content }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = areScriptHooksValid(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles.map((file) => {\n return updateConfigEntity(file.entityId, JSON.parse(file.content));\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Import all IDM configuration objects\n * @param baseDirectory import directory\n * @param entitiesFile JSON file that specifies the config entities to export/import\n * @param envFile File that defines environment specific variables for replacement during configuration export/import\n * @param validate validate script hooks\n */\nexport async function importAllConfigEntities(\n baseDirectory: string,\n entitiesFile: string,\n envFile: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;\n\n const envReader = propertiesReader(envFile);\n\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ content, path }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = areScriptHooksValid(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles\n .filter(({ entityId }) => {\n return entriesToImport.includes(entityId);\n })\n .map(({ entityId, content }) => {\n const unsubstituted = unSubstituteEnvParams(content, envReader);\n return updateConfigEntity(entityId, JSON.parse(unsubstituted));\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Count number of managed objects of a given type\n * @param {String} type managed object type, e.g. alpha_user\n */\nexport async function countManagedObjects(type: string) {\n try {\n const result = await queryManagedObjects(type);\n printMessage(`${type}: ${result.length}`);\n } catch (error) {\n printMessage(error.response.data, 'error');\n printMessage(`Error querying managed objects by type: ${error}`, 'error');\n }\n}\n"],"mappings":"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"}
@@ -253,12 +253,12 @@ export async function importScriptsFromFiles(watch, reUuid, validateScripts) {
253
253
  * Run on file change detection, as well as on initial run.
254
254
  */
255
255
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
256
- function onChange(path, _stats) {
257
- handleScriptFileImport(path, reUuid, validateScripts).catch(error => {
258
- printMessage(`Error importing script: ${error.message}`, 'error');
259
- debugMessage(error);
260
- process.exit(1);
261
- });
256
+ async function onChange(path, _stats) {
257
+ try {
258
+ await handleScriptFileImport(path, reUuid, validateScripts);
259
+ } catch (error) {
260
+ printMessage(`${path}: ${error.message}`, 'error');
261
+ }
262
262
  }
263
263
 
264
264
  // We watch json files and script files.
@@ -288,8 +288,8 @@ async function handleScriptFileImport(file, reUuid, validateScripts) {
288
288
  debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);
289
289
  const scriptFile = getScriptFile(file);
290
290
  const script = getScriptExportByScriptFile(scriptFile);
291
- const success = await importScripts('', script, reUuid, validateScripts);
292
- if (success) {
291
+ const imported = await importScripts('', script, reUuid, validateScripts);
292
+ if (imported) {
293
293
  printMessage(`Imported '${scriptFile}'`);
294
294
  }
295
295
  debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);
@@ -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","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","importScriptsFromFile","reUuid","readFile","err","data","importData","JSON","parse","importScriptsFromFiles","watch","validateScripts","onChange","path","_stats","handleScriptFileImport","catch","process","exit","watcher","persistent","on","close","scriptFile","getScriptFile","getScriptExportByScriptFile","success","endsWith","replace","getScriptExport","extractFile","getExtractFile","scriptRaw","readFileSync","startsWith","scriptExportRaw","getScriptId","scriptIds","Object","keys","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\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 * 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 = JSON.parse(data);\n await importScripts(name, importData, reUuid);\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 function onChange(path: string, _stats?: fs.Stats): void {\n handleScriptFileImport(path, reUuid, validateScripts).catch((error) => {\n printMessage(`Error importing script: ${error.message}`, 'error');\n debugMessage(error);\n process.exit(1);\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 success = await importScripts('', script, reUuid, validateScripts);\n if (success) {\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","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","importScriptsFromFile","reUuid","readFile","err","data","importData","JSON","parse","importScriptsFromFiles","watch","validateScripts","onChange","path","_stats","handleScriptFileImport","watcher","persistent","on","close","scriptFile","getScriptFile","getScriptExportByScriptFile","imported","endsWith","replace","getScriptExport","extractFile","getExtractFile","scriptRaw","readFileSync","startsWith","scriptExportRaw","getScriptId","scriptIds","Object","keys","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\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 * 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 = JSON.parse(data);\n await importScripts(name, importData, reUuid);\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-cli",
3
- "version": "2.0.0-14",
3
+ "version": "2.0.0-15",
4
4
  "type": "module",
5
5
  "description": "A command line interface to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.",
6
6
  "keywords": [
@@ -104,7 +104,7 @@
104
104
  ]
105
105
  },
106
106
  "dependencies": {
107
- "@rockcarver/frodo-lib": "2.0.0-21",
107
+ "@rockcarver/frodo-lib": "2.0.0-22",
108
108
  "chokidar": "^3.5.3",
109
109
  "cli-progress": "^3.11.2",
110
110
  "cli-table3": "^0.6.3",