@rockcarver/frodo-cli 2.0.0-41 → 2.0.0-43

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.
@@ -9,7 +9,7 @@ const {
9
9
  const program = new FrodoCommand('frodo script import');
10
10
  program.description('Import scripts.').addOption(new Option('-f, --file <file>', 'Name of the file to import.')).addOption(new Option('-n, --script-name <name>', 'Name of the script. If specified, -a and -A are ignored.')).addOption(new Option('--re-uuid', 'Re-UUID. Create a new UUID for the script upon import. Use this to duplicate a script or create a new version of the same script. Note that you must also choose a new name using -n/--script-name to avoid import errors.').default(false, 'false'))
11
11
  // deprecated option
12
- .addOption(new Option('-s, --script <script>', 'DEPRECATED! Use -n/--script-name instead. Name of the script.')).addOption(new Option('-A, --all-separate', 'Import all scripts from separate files (*.script.json) in the current directory. Ignored with -n.')).addOption(new Option('-w, --watch', 'Watch for changes to the script files and import the scripts automatically when the file changes. Can only be used with -A.').default(false, 'false')).action(
12
+ .addOption(new Option('-s, --script <script>', 'DEPRECATED! Use -n/--script-name instead. Name of the script.')).addOption(new Option('-A, --all-separate', 'Import all scripts from separate files (*.script.json) in the current directory. Ignored with -n.')).addOption(new Option('-w, --watch', 'Watch for changes to the script files and import the scripts automatically when the file changes. Can only be used with -A.').default(false, 'false')).addOption(new Option('-d, --default', 'Import all scripts including the default scripts. Ignored with -n.')).action(
13
13
  // implement command logic inside action handler
14
14
  async (host, realm, user, password, options, command) => {
15
15
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
@@ -22,10 +22,16 @@ async (host, realm, user, password, options, command) => {
22
22
  }
23
23
  verboseMessage(`Importing script(s) into realm "${state.getRealm()}"...`);
24
24
  if (options.file) {
25
- const outcome = await importScriptsFromFile(options.scriptName || options.script, options.file, options.reUuid);
25
+ const outcome = await importScriptsFromFile(options.scriptName || options.script, options.file, {
26
+ reUuid: options.reUuid,
27
+ includeDefault: options.default
28
+ });
26
29
  if (!outcome) process.exitCode = 1;
27
30
  } else if (options.allSeparate) {
28
- await importScriptsFromFiles(options.watch, options.reUuid, true);
31
+ await importScriptsFromFiles(options.watch, {
32
+ reUuid: options.reUuid,
33
+ includeDefault: options.default
34
+ }, true);
29
35
  }
30
36
  }
31
37
  // end command logic inside action handler
@@ -1 +1 @@
1
- {"version":3,"file":"script-import.js","names":["frodo","state","Option","importScriptsFromFile","importScriptsFromFiles","printMessage","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","tokens","help","process","exitCode","getRealm","file","outcome","scriptName","script","reUuid","allSeparate","watch","parse"],"sources":["../../../src/cli/script/script-import.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n importScriptsFromFile,\n importScriptsFromFiles,\n} from '../../ops/ScriptOps';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo script import');\n\nprogram\n .description('Import scripts.')\n .addOption(new Option('-f, --file <file>', 'Name of the file to import.'))\n .addOption(\n new Option(\n '-n, --script-name <name>',\n 'Name of the script. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '--re-uuid',\n 'Re-UUID. Create a new UUID for the script upon import. Use this to duplicate a script or create a new version of the same script. Note that you must also choose a new name using -n/--script-name to avoid import errors.'\n ).default(false, 'false')\n )\n // deprecated option\n .addOption(\n new Option(\n '-s, --script <script>',\n 'DEPRECATED! Use -n/--script-name instead. Name of the script.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Import all scripts from separate files (*.script.json) in the current directory. Ignored with -n.'\n )\n )\n .addOption(\n new Option(\n '-w, --watch',\n 'Watch for changes to the script files and import the scripts automatically when the file changes. Can only be used with -A.'\n ).default(false, 'false')\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n const tokens = await getTokens();\n if (!tokens) {\n printMessage('Unable to get tokens. Exiting...', 'error');\n program.help();\n process.exitCode = 1;\n return;\n }\n\n verboseMessage(`Importing script(s) into realm \"${state.getRealm()}\"...`);\n\n if (options.file) {\n const outcome = await importScriptsFromFile(\n options.scriptName || options.script,\n options.file,\n options.reUuid\n );\n if (!outcome) process.exitCode = 1;\n } else if (options.allSeparate) {\n await importScriptsFromFiles(options.watch, options.reUuid, true);\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SACEC,qBAAqB,EACrBC,sBAAsB,QACjB,qBAAqB;AAC5B,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGR,KAAK,CAACS,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,qBAAqB,CAAC;AAEvDG,OAAO,CACJC,WAAW,CAAC,iBAAiB,CAAC,CAC9BC,SAAS,CAAC,IAAIV,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC,CAAC,CACzEU,SAAS,CACR,IAAIV,MAAM,CACR,0BAA0B,EAC1B,0DACF,CACF,CAAC,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,WAAW,EACX,4NACF,CAAC,CAACW,OAAO,CAAC,KAAK,EAAE,OAAO,CAC1B;AACA;AAAA,CACCD,SAAS,CACR,IAAIV,MAAM,CACR,uBAAuB,EACvB,+DACF,CACF,CAAC,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,oBAAoB,EACpB,mGACF,CACF,CAAC,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,aAAa,EACb,6HACF,CAAC,CAACW,OAAO,CAAC,KAAK,EAAE,OAAO,CAC1B,CAAC,CACAC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,MAAME,MAAM,GAAG,MAAMd,SAAS,CAAC,CAAC;EAChC,IAAI,CAACc,MAAM,EAAE;IACXjB,YAAY,CAAC,kCAAkC,EAAE,OAAO,CAAC;IACzDK,OAAO,CAACa,IAAI,CAAC,CAAC;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;IACpB;EACF;EAEAnB,cAAc,CAAE,mCAAkCL,KAAK,CAACyB,QAAQ,CAAC,CAAE,MAAK,CAAC;EAEzE,IAAIP,OAAO,CAACQ,IAAI,EAAE;IAChB,MAAMC,OAAO,GAAG,MAAMzB,qBAAqB,CACzCgB,OAAO,CAACU,UAAU,IAAIV,OAAO,CAACW,MAAM,EACpCX,OAAO,CAACQ,IAAI,EACZR,OAAO,CAACY,MACV,CAAC;IACD,IAAI,CAACH,OAAO,EAAEJ,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC,CAAC,MAAM,IAAIN,OAAO,CAACa,WAAW,EAAE;IAC9B,MAAM5B,sBAAsB,CAACe,OAAO,CAACc,KAAK,EAAEd,OAAO,CAACY,MAAM,EAAE,IAAI,CAAC;EACnE;AACF;AACA;AACF,CAAC;AAEHrB,OAAO,CAACwB,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"script-import.js","names":["frodo","state","Option","importScriptsFromFile","importScriptsFromFiles","printMessage","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","tokens","help","process","exitCode","getRealm","file","outcome","scriptName","script","reUuid","includeDefault","allSeparate","watch","parse"],"sources":["../../../src/cli/script/script-import.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n importScriptsFromFile,\n importScriptsFromFiles,\n} from '../../ops/ScriptOps';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo script import');\n\nprogram\n .description('Import scripts.')\n .addOption(new Option('-f, --file <file>', 'Name of the file to import.'))\n .addOption(\n new Option(\n '-n, --script-name <name>',\n 'Name of the script. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '--re-uuid',\n 'Re-UUID. Create a new UUID for the script upon import. Use this to duplicate a script or create a new version of the same script. Note that you must also choose a new name using -n/--script-name to avoid import errors.'\n ).default(false, 'false')\n )\n // deprecated option\n .addOption(\n new Option(\n '-s, --script <script>',\n 'DEPRECATED! Use -n/--script-name instead. Name of the script.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Import all scripts from separate files (*.script.json) in the current directory. Ignored with -n.'\n )\n )\n .addOption(\n new Option(\n '-w, --watch',\n 'Watch for changes to the script files and import the scripts automatically when the file changes. Can only be used with -A.'\n ).default(false, 'false')\n )\n .addOption(\n new Option(\n '-d, --default',\n 'Import all scripts including the default scripts. Ignored with -n.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n const tokens = await getTokens();\n if (!tokens) {\n printMessage('Unable to get tokens. Exiting...', 'error');\n program.help();\n process.exitCode = 1;\n return;\n }\n\n verboseMessage(`Importing script(s) into realm \"${state.getRealm()}\"...`);\n\n if (options.file) {\n const outcome = await importScriptsFromFile(\n options.scriptName || options.script,\n options.file,\n {\n reUuid: options.reUuid,\n includeDefault: options.default,\n }\n );\n if (!outcome) process.exitCode = 1;\n } else if (options.allSeparate) {\n await importScriptsFromFiles(\n options.watch,\n {\n reUuid: options.reUuid,\n includeDefault: options.default,\n },\n true\n );\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SACEC,qBAAqB,EACrBC,sBAAsB,QACjB,qBAAqB;AAC5B,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGR,KAAK,CAACS,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,qBAAqB,CAAC;AAEvDG,OAAO,CACJC,WAAW,CAAC,iBAAiB,CAAC,CAC9BC,SAAS,CAAC,IAAIV,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC,CAAC,CACzEU,SAAS,CACR,IAAIV,MAAM,CACR,0BAA0B,EAC1B,0DACF,CACF,CAAC,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,WAAW,EACX,4NACF,CAAC,CAACW,OAAO,CAAC,KAAK,EAAE,OAAO,CAC1B;AACA;AAAA,CACCD,SAAS,CACR,IAAIV,MAAM,CACR,uBAAuB,EACvB,+DACF,CACF,CAAC,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,oBAAoB,EACpB,mGACF,CACF,CAAC,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,aAAa,EACb,6HACF,CAAC,CAACW,OAAO,CAAC,KAAK,EAAE,OAAO,CAC1B,CAAC,CACAD,SAAS,CACR,IAAIV,MAAM,CACR,eAAe,EACf,oEACF,CACF,CAAC,CACAY,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,MAAME,MAAM,GAAG,MAAMd,SAAS,CAAC,CAAC;EAChC,IAAI,CAACc,MAAM,EAAE;IACXjB,YAAY,CAAC,kCAAkC,EAAE,OAAO,CAAC;IACzDK,OAAO,CAACa,IAAI,CAAC,CAAC;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;IACpB;EACF;EAEAnB,cAAc,CAAE,mCAAkCL,KAAK,CAACyB,QAAQ,CAAC,CAAE,MAAK,CAAC;EAEzE,IAAIP,OAAO,CAACQ,IAAI,EAAE;IAChB,MAAMC,OAAO,GAAG,MAAMzB,qBAAqB,CACzCgB,OAAO,CAACU,UAAU,IAAIV,OAAO,CAACW,MAAM,EACpCX,OAAO,CAACQ,IAAI,EACZ;MACEI,MAAM,EAAEZ,OAAO,CAACY,MAAM;MACtBC,cAAc,EAAEb,OAAO,CAACN;IAC1B,CACF,CAAC;IACD,IAAI,CAACe,OAAO,EAAEJ,OAAO,CAACC,QAAQ,GAAG,CAAC;EACpC,CAAC,MAAM,IAAIN,OAAO,CAACc,WAAW,EAAE;IAC9B,MAAM7B,sBAAsB,CAC1Be,OAAO,CAACe,KAAK,EACb;MACEH,MAAM,EAAEZ,OAAO,CAACY,MAAM;MACtBC,cAAc,EAAEb,OAAO,CAACN;IAC1B,CAAC,EACD,IACF,CAAC;EACH;AACF;AACA;AACF,CAAC;AAEHH,OAAO,CAACyB,KAAK,CAAC,CAAC"}
@@ -28,7 +28,9 @@ const {
28
28
  */
29
29
  export async function exportEverythingToFile(file, includeMeta = true, options = {
30
30
  useStringArrays: true,
31
- noDecode: false
31
+ noDecode: false,
32
+ coords: true,
33
+ includeDefault: false
32
34
  }) {
33
35
  const exportData = await exportFullConfiguration(options);
34
36
  let fileName = getTypedFilename(`${titleCase(getRealmName(state.getRealm()))}`, `everything`);
@@ -46,7 +48,9 @@ export async function exportEverythingToFile(file, includeMeta = true, options =
46
48
  */
47
49
  export async function exportEverythingToFiles(extract = false, includeMeta = true, options = {
48
50
  useStringArrays: true,
49
- noDecode: false
51
+ noDecode: false,
52
+ coords: true,
53
+ includeDefault: false
50
54
  }) {
51
55
  const exportData = await exportFullConfiguration(options);
52
56
  delete exportData.meta;
@@ -140,7 +144,8 @@ export async function importEverythingFromFile(file, options = {
140
144
  reUuidScripts: false,
141
145
  cleanServices: false,
142
146
  global: false,
143
- realm: false
147
+ realm: false,
148
+ includeDefault: false
144
149
  }) {
145
150
  const data = await getFullExportConfig(file);
146
151
  await importFullConfiguration(data, options);
@@ -154,7 +159,8 @@ export async function importEverythingFromFiles(options = {
154
159
  reUuidScripts: false,
155
160
  cleanServices: false,
156
161
  global: false,
157
- realm: false
162
+ realm: false,
163
+ includeDefault: false
158
164
  }) {
159
165
  const data = await getFullExportConfigFromDirectory(state.getDirectory());
160
166
  await importFullConfiguration(data, options);
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigOps.js","names":["frodo","state","fs","fse","getFullExportConfig","getFullExportConfigFromDirectory","printMessage","extractScriptToFile","getRealmName","getTypedFilename","titleCase","saveJsonToFile","getFilePath","getWorkingDirectory","utils","exportFullConfiguration","importFullConfiguration","config","stringify","json","exportEverythingToFile","file","includeMeta","options","useStringArrays","noDecode","exportData","fileName","getRealm","exportEverythingToFiles","extract","meta","baseDirectory","Object","entries","forEach","type","obj","existsSync","mkdirSync","samlData","saml","cot","hosted","metadata","remote","id","value","concat","filename","entityId","samlType","authentication","includes","slice","lastIndexOf","recursive","outputFile","err","name","importEverythingFromFile","reUuidJourneys","reUuidScripts","cleanServices","global","realm","data","importEverythingFromFiles","getDirectory"],"sources":["../../src/ops/ConfigOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n type FullExportInterface,\n type FullExportOptions,\n type FullImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ConfigOps';\nimport { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport fs from 'fs';\nimport fse from 'fs-extra';\n\nimport {\n getFullExportConfig,\n getFullExportConfigFromDirectory,\n} from '../utils/Config';\nimport { printMessage } from '../utils/Console';\nimport { extractScriptToFile } from './ScriptOps';\n\nconst {\n getRealmName,\n getTypedFilename,\n titleCase,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst { exportFullConfiguration, importFullConfiguration } = frodo.config;\nconst { stringify } = frodo.utils.json;\n\n/**\n * Export everything to separate files\n * @param {String} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n */\nexport async function exportEverythingToFile(\n file: string,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n }\n): Promise<void> {\n const exportData = await exportFullConfiguration(options);\n let fileName = getTypedFilename(\n `${titleCase(getRealmName(state.getRealm()))}`,\n `everything`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, getFilePath(fileName, true), includeMeta);\n}\n\n/**\n * Export everything to separate files\n * @param {boolean} extract Extracts the scripts from the exports into separate files if true\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n */\nexport async function exportEverythingToFiles(\n extract: boolean = false,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n }\n): Promise<void> {\n const exportData: FullExportInterface =\n await exportFullConfiguration(options);\n delete exportData.meta;\n const baseDirectory = getWorkingDirectory(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(exportData).forEach(([type, obj]: [string, any]) => {\n if (obj) {\n if (!fs.existsSync(`${baseDirectory}/${type}`)) {\n fs.mkdirSync(`${baseDirectory}/${type}`);\n }\n if (type == 'saml') {\n const samlData = {\n saml: {\n cot: {},\n hosted: {},\n metadata: {},\n remote: {},\n },\n };\n if (obj.cot) {\n if (!fs.existsSync(`${baseDirectory}/cot`)) {\n fs.mkdirSync(`${baseDirectory}/cot`);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj.cot).forEach(([id, value]: [string, any]) => {\n samlData.saml.cot = {\n [id]: value,\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/cot/${getTypedFilename(id, 'cot.saml')}`,\n includeMeta\n );\n });\n samlData.saml.cot = {};\n }\n Object.entries(obj.hosted)\n .concat(Object.entries(obj.remote))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach(([id, value]: [string, any]) => {\n const filename = getTypedFilename(\n value.entityId ? value.entityId : id,\n type\n );\n const samlType = obj.hosted[id] ? 'hosted' : 'remote';\n samlData.saml[samlType][id] = value;\n samlData.saml.metadata = {\n [id]: obj.metadata[id],\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n samlData.saml[samlType] = {};\n });\n } else if (type == 'authentication') {\n const fileName = getTypedFilename(\n `${frodo.utils.getRealmName(state.getRealm())}Realm`,\n 'authentication.settings'\n );\n saveJsonToFile(\n {\n authentication: obj,\n },\n `${baseDirectory}/${type}/${fileName}`,\n includeMeta\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj).forEach(([id, value]: [string, any]) => {\n if (type == 'config') {\n if (value != null) {\n const filename = `${id}.json`;\n if (filename.includes('/')) {\n fs.mkdirSync(\n `${baseDirectory}/${type}/${filename.slice(\n 0,\n filename.lastIndexOf('/')\n )}`,\n {\n recursive: true,\n }\n );\n }\n fse.outputFile(\n `${baseDirectory}/${type}/${filename}`,\n stringify(value),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n } else {\n const filename = getTypedFilename(\n value && value.name ? value.name : id,\n type\n );\n if (extract && type == 'script') {\n extractScriptToFile(\n exportData as ScriptExportInterface,\n id,\n type\n );\n }\n saveJsonToFile(\n {\n [type]: {\n [id]: value,\n },\n },\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n }\n });\n }\n }\n });\n}\n\n/**\n * Import everything from a single file\n * @param {String} file The file path\n * @param {FullImportOptions} options import options\n */\nexport async function importEverythingFromFile(\n file: string,\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n }\n) {\n const data = await getFullExportConfig(file);\n await importFullConfiguration(data, options);\n}\n\n/**\n * Import everything from separate files\n */\nexport async function importEverythingFromFiles(\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n }\n) {\n const data = await getFullExportConfigFromDirectory(state.getDirectory());\n await importFullConfiguration(data, options);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConfigOps.js","names":["frodo","state","fs","fse","getFullExportConfig","getFullExportConfigFromDirectory","printMessage","extractScriptToFile","getRealmName","getTypedFilename","titleCase","saveJsonToFile","getFilePath","getWorkingDirectory","utils","exportFullConfiguration","importFullConfiguration","config","stringify","json","exportEverythingToFile","file","includeMeta","options","useStringArrays","noDecode","coords","includeDefault","exportData","fileName","getRealm","exportEverythingToFiles","extract","meta","baseDirectory","Object","entries","forEach","type","obj","existsSync","mkdirSync","samlData","saml","cot","hosted","metadata","remote","id","value","concat","filename","entityId","samlType","authentication","includes","slice","lastIndexOf","recursive","outputFile","err","name","importEverythingFromFile","reUuidJourneys","reUuidScripts","cleanServices","global","realm","data","importEverythingFromFiles","getDirectory"],"sources":["../../src/ops/ConfigOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n type FullExportInterface,\n type FullExportOptions,\n type FullImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ConfigOps';\nimport { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport fs from 'fs';\nimport fse from 'fs-extra';\n\nimport {\n getFullExportConfig,\n getFullExportConfigFromDirectory,\n} from '../utils/Config';\nimport { printMessage } from '../utils/Console';\nimport { extractScriptToFile } from './ScriptOps';\n\nconst {\n getRealmName,\n getTypedFilename,\n titleCase,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst { exportFullConfiguration, importFullConfiguration } = frodo.config;\nconst { stringify } = frodo.utils.json;\n\n/**\n * Export everything to separate files\n * @param {String} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n */\nexport async function exportEverythingToFile(\n file: string,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<void> {\n const exportData = await exportFullConfiguration(options);\n let fileName = getTypedFilename(\n `${titleCase(getRealmName(state.getRealm()))}`,\n `everything`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, getFilePath(fileName, true), includeMeta);\n}\n\n/**\n * Export everything to separate files\n * @param {boolean} extract Extracts the scripts from the exports into separate files if true\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n */\nexport async function exportEverythingToFiles(\n extract: boolean = false,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<void> {\n const exportData: FullExportInterface =\n await exportFullConfiguration(options);\n delete exportData.meta;\n const baseDirectory = getWorkingDirectory(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(exportData).forEach(([type, obj]: [string, any]) => {\n if (obj) {\n if (!fs.existsSync(`${baseDirectory}/${type}`)) {\n fs.mkdirSync(`${baseDirectory}/${type}`);\n }\n if (type == 'saml') {\n const samlData = {\n saml: {\n cot: {},\n hosted: {},\n metadata: {},\n remote: {},\n },\n };\n if (obj.cot) {\n if (!fs.existsSync(`${baseDirectory}/cot`)) {\n fs.mkdirSync(`${baseDirectory}/cot`);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj.cot).forEach(([id, value]: [string, any]) => {\n samlData.saml.cot = {\n [id]: value,\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/cot/${getTypedFilename(id, 'cot.saml')}`,\n includeMeta\n );\n });\n samlData.saml.cot = {};\n }\n Object.entries(obj.hosted)\n .concat(Object.entries(obj.remote))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach(([id, value]: [string, any]) => {\n const filename = getTypedFilename(\n value.entityId ? value.entityId : id,\n type\n );\n const samlType = obj.hosted[id] ? 'hosted' : 'remote';\n samlData.saml[samlType][id] = value;\n samlData.saml.metadata = {\n [id]: obj.metadata[id],\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n samlData.saml[samlType] = {};\n });\n } else if (type == 'authentication') {\n const fileName = getTypedFilename(\n `${frodo.utils.getRealmName(state.getRealm())}Realm`,\n 'authentication.settings'\n );\n saveJsonToFile(\n {\n authentication: obj,\n },\n `${baseDirectory}/${type}/${fileName}`,\n includeMeta\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj).forEach(([id, value]: [string, any]) => {\n if (type == 'config') {\n if (value != null) {\n const filename = `${id}.json`;\n if (filename.includes('/')) {\n fs.mkdirSync(\n `${baseDirectory}/${type}/${filename.slice(\n 0,\n filename.lastIndexOf('/')\n )}`,\n {\n recursive: true,\n }\n );\n }\n fse.outputFile(\n `${baseDirectory}/${type}/${filename}`,\n stringify(value),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n } else {\n const filename = getTypedFilename(\n value && value.name ? value.name : id,\n type\n );\n if (extract && type == 'script') {\n extractScriptToFile(\n exportData as ScriptExportInterface,\n id,\n type\n );\n }\n saveJsonToFile(\n {\n [type]: {\n [id]: value,\n },\n },\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n }\n });\n }\n }\n });\n}\n\n/**\n * Import everything from a single file\n * @param {String} file The file path\n * @param {FullImportOptions} options import options\n */\nexport async function importEverythingFromFile(\n file: string,\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n) {\n const data = await getFullExportConfig(file);\n await importFullConfiguration(data, options);\n}\n\n/**\n * Import everything from separate files\n */\nexport async function importEverythingFromFiles(\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n) {\n const data = await getFullExportConfigFromDirectory(state.getDirectory());\n await importFullConfiguration(data, options);\n}\n"],"mappings":"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"}
@@ -61,7 +61,8 @@ export async function listJourneys(long = false, analyze = false) {
61
61
  for (const journeyStub of journeys) {
62
62
  exportPromises.push(exportJourney(journeyStub['_id'], {
63
63
  useStringArrays: false,
64
- deps: false
64
+ deps: false,
65
+ coords: true
65
66
  }));
66
67
  }
67
68
  const journeyExports = await Promise.all(exportPromises);
@@ -94,7 +95,8 @@ export async function listJourneys(long = false, analyze = false) {
94
95
  */
95
96
  export async function exportJourneyToFile(journeyId, file, includeMeta = true, options = {
96
97
  deps: false,
97
- useStringArrays: false
98
+ useStringArrays: false,
99
+ coords: true
98
100
  }) {
99
101
  debugMessage(`exportJourneyToFile: start`);
100
102
  const verbose = state.getVerbose();
@@ -123,7 +125,8 @@ export async function exportJourneyToFile(journeyId, file, includeMeta = true, o
123
125
  */
124
126
  export async function exportJourneysToFile(file, includeMeta = true, options = {
125
127
  deps: false,
126
- useStringArrays: false
128
+ useStringArrays: false,
129
+ coords: true
127
130
  }) {
128
131
  if (!file) {
129
132
  file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');
@@ -140,7 +143,8 @@ export async function exportJourneysToFile(file, includeMeta = true, options = {
140
143
  */
141
144
  export async function exportJourneysToFiles(includeMeta = true, options = {
142
145
  deps: false,
143
- useStringArrays: false
146
+ useStringArrays: false,
147
+ coords: true
144
148
  }) {
145
149
  const journeysExport = await exportJourneys(options);
146
150
  const trees = Object.entries(journeysExport.trees);
@@ -1 +1 @@
1
- {"version":3,"file":"JourneyOps.js","names":["frodo","state","fs","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","cloneDeep","wordwrap","getTypedFilename","saveJsonToFile","getRealmString","getFilePath","getWorkingDirectory","utils","readJourneys","exportJourney","exportJourneys","resolveDependencies","importJourneys","importJourney","getTreeDescendents","getNodeRef","onlineTreeExportResolver","getJourneyClassification","_getJourneyClassification","disableJourney","_disableJourney","enableJourney","_enableJourney","authn","journey","listJourneys","long","analyze","journeys","journeyStub","table","_journeyStub$uiConfig","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","spinnerId","exportPromises","useStringArrays","deps","journeyExports","Promise","all","journeyExport","_journeyExport$tree$u","tree","error","response","data","_error$response","exportJourneyToFile","journeyId","file","includeMeta","options","verbose","getVerbose","filePath","fileData","exportJourneysToFile","exportJourneysToFiles","journeysExport","trees","Object","entries","treeId","treeValue","indicatorId","meta","importJourneyFromFile","readFileSync","journeyData","installedJourneys","map","x","unresolvedJourneys","resolvedJourneys","indicatorId1","keys","length","indicatorId2","importError","indicatorId3","importFirstJourneyFromFile","hasOwnProperty","call","depSpinnerId","importSpinnerId","importJourneysFromFile","name","message","type","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","allJourneysData","_error$response2","it","getJourneyClassificationMd","getOneLineDescription","treeObj","description","getOneLineDescriptionMd","describeTreeDescendents","descendents","depth","values","indent","Array","fill","descendent","describeTreeDescendentsMd","markdown","describeJourney","resolveTreeExport","_journeyData$meta","_journeyData$tree$uiC","_journeyData$themes","allNodes","nodes","innerNodes","nodeTypeMap","nodeData","_type","getAmVersion","originAmVersion","setAmVersion","stack","nodeType","count","String","getNodeClassification","nodeObj","themes","themeData","scripts","scriptData","emailTemplates","templateData","socialIdentityProviders","socialIdpData","saml2Entities","entityProviderData","circlesOfTrust","cotData","describeJourneyMd","_journeyData$meta2","_journeyData$tree$uiC2","_journeyData$themes2","getNodeClassificationMd","getTableHeaderMd","getTableRowMd"],"sources":["../../src/ops/JourneyOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type NodeSkeleton } from '@rockcarver/frodo-lib/types/api/NodeApi';\nimport { type TreeSkeleton } from '@rockcarver/frodo-lib/types/api/TreeApi';\nimport {\n type JourneyClassificationType,\n type MultiTreeExportInterface,\n type SingleTreeExportInterface,\n type TreeDependencyMapInterface,\n type TreeExportOptions,\n type TreeExportResolverInterface,\n type TreeImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/JourneyOps';\nimport fs from 'fs';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport * as CirclesOfTrust from './CirclesOfTrustOps';\nimport * as EmailTemplate from './EmailTemplateOps';\nimport * as Idp from './IdpOps';\nimport * as Node from './NodeOps';\nimport * as Saml2 from './Saml2Ops';\nimport * as Script from './ScriptOps';\nimport * as Theme from './ThemeOps';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n getTypedFilename,\n saveJsonToFile,\n getRealmString,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readJourneys,\n exportJourney,\n exportJourneys,\n resolveDependencies,\n importJourneys,\n importJourney,\n getTreeDescendents,\n getNodeRef,\n onlineTreeExportResolver,\n getJourneyClassification: _getJourneyClassification,\n disableJourney: _disableJourney,\n enableJourney: _enableJourney,\n} = frodo.authn.journey;\n\n/**\n * List all the journeys/trees\n * @param {boolean} long Long version, all the fields\n * @param {boolean} analyze Analyze journeys/trees for custom nodes (expensive)\n * @returns {Promise<TreeSkeleton[]>} a promise that resolves to an array journey objects\n */\nexport async function listJourneys(\n long = false,\n analyze = false\n): Promise<TreeSkeleton[]> {\n let journeys = [];\n try {\n journeys = await readJourneys();\n if (!long && !analyze) {\n for (const journeyStub of journeys) {\n printMessage(`${journeyStub['_id']}`, 'data');\n }\n } else {\n if (!analyze) {\n const table = createTable(['Name', 'Status', 'Tags']);\n for (const journeyStub of journeys) {\n table.push([\n `${journeyStub._id}`,\n journeyStub.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n journeyStub.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyStub.uiConfig.categories).join(', '),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Retrieving details of all journeys...`\n );\n const exportPromises = [];\n try {\n for (const journeyStub of journeys) {\n exportPromises.push(\n exportJourney(journeyStub['_id'], {\n useStringArrays: false,\n deps: false,\n })\n );\n }\n const journeyExports = await Promise.all(exportPromises);\n stopProgressIndicator(\n spinnerId,\n 'Retrieved details of all journeys.',\n 'success'\n );\n const table = createTable([\n 'Name',\n 'Status',\n 'Classification',\n 'Tags',\n ]);\n for (const journeyExport of journeyExports) {\n table.push([\n `${journeyExport.tree._id}`,\n journeyExport.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n getJourneyClassification(journeyExport).join(', '),\n journeyExport.tree.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyExport.tree.uiConfig.categories).join(\n ', '\n ),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n 'Error retrieving details of all journeys.',\n 'fail'\n );\n printMessage(error.response.data, 'error');\n }\n }\n }\n } catch (error) {\n printMessage(error.response?.data, 'error');\n }\n return journeys;\n}\n\n/**\n * Export journey by id/name to file\n * @param {string} journeyId journey id/name\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneyToFile(\n journeyId: string,\n file: string,\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n }\n): Promise<void> {\n debugMessage(`exportJourneyToFile: start`);\n const verbose = state.getVerbose();\n if (!file) {\n file = getTypedFilename(journeyId, 'journey');\n }\n const filePath = getFilePath(file, true);\n let spinnerId: string;\n if (!verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n try {\n const fileData: SingleTreeExportInterface = await exportJourney(\n journeyId,\n options\n );\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n saveJsonToFile(fileData, filePath, includeMeta);\n stopProgressIndicator(\n spinnerId,\n `Exported ${journeyId['brightCyan']} to ${filePath['brightCyan']}.`,\n 'success'\n );\n } catch (error) {\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n stopProgressIndicator(\n spinnerId,\n `Error exporting journey ${journeyId}: ${error}`,\n 'fail'\n );\n }\n}\n\n/**\n * Export all journeys to file\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFile(\n file: string,\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n }\n): Promise<void> {\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');\n }\n const filePath = getFilePath(file, true);\n const fileData: MultiTreeExportInterface = await exportJourneys(options);\n saveJsonToFile(fileData, filePath, includeMeta);\n}\n\n/**\n * Export all journeys to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFiles(\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n }\n): Promise<void> {\n const journeysExport = await exportJourneys(options);\n const trees = Object.entries(journeysExport.trees);\n for (const [treeId, treeValue] of trees) {\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Saving ${treeId}...`\n );\n const file = getFilePath(getTypedFilename(`${treeId}`, 'journey'), true);\n treeValue['meta'] = journeysExport.meta;\n try {\n updateProgressIndicator(indicatorId, `Saving ${treeId} to ${file}`);\n saveJsonToFile(treeValue, file, includeMeta);\n stopProgressIndicator(indicatorId, `${treeId} saved to ${file}`);\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error saving ${treeId} to ${file}`);\n }\n }\n}\n\n/**\n * Import a journey from file\n * @param {string} journeyId journey id/name\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneyFromFile(\n journeyId: string,\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = JSON.parse(data);\n // check if this is a file with multiple trees and get journey by id\n if (journeyData.trees && journeyData.trees[journeyId]) {\n journeyData = journeyData.trees[journeyId];\n } else if (journeyData.trees) {\n journeyData = null;\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId === journeyData.tree._id) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const indicatorId1 = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n indicatorId1,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let indicatorId2: string;\n if (!verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n indicatorId2,\n `Imported ${journeyId}.`,\n 'success'\n );\n } catch (importError) {\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId2, `${importError}`, 'fail');\n }\n } else {\n stopProgressIndicator(indicatorId1, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n // end dependency resolution for single tree import\n } else {\n const indicatorId3 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId3, `${journeyId} not found!`, 'fail');\n }\n } catch (error) {\n printMessage(`Error importing journey ${journeyId}: ${error}`, 'error');\n }\n}\n\n/**\n * Import first journey from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importFirstJourneyFromFile(\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = cloneDeep(JSON.parse(data));\n let journeyId = null;\n // single tree\n if (journeyData.tree) {\n journeyId = cloneDeep(journeyData.tree._id);\n }\n // multiple trees, so get the first tree\n else if (journeyData.trees) {\n for (const treeId in journeyData.trees) {\n if (Object.hasOwnProperty.call(journeyData.trees, treeId)) {\n journeyId = treeId;\n journeyData = journeyData.trees[treeId];\n break;\n }\n }\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const depSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n depSpinnerId,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let importSpinnerId: string;\n if (!verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n importSpinnerId,\n `Imported ${journeyId}.`,\n 'success'\n );\n } catch (importError) {\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(importSpinnerId, `${importError}`, 'fail');\n }\n } else {\n stopProgressIndicator(depSpinnerId, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n } else {\n const importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing...`\n );\n stopProgressIndicator(importSpinnerId, `No journeys found!`, 'fail');\n }\n // end dependency resolution for single tree import\n } catch (error) {\n printMessage(`Error importing first journey: ${error}`, 'error');\n }\n}\n\n/**\n * Import all journeys from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFile(\n file: string,\n options: TreeImportOptions\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n try {\n const fileData = JSON.parse(data);\n await importJourneys(fileData, options);\n } catch (error) {\n if (error.name === 'UnresolvedDependenciesError') {\n for (const journey of Object.keys(error.unresolvedJourneys)) {\n printMessage({\n message: ` - ${journey} requires ${error.unresolvedJourneys[journey]}`,\n type: 'info',\n state,\n });\n }\n } else {\n printMessage(`${error.message}`, 'error');\n }\n }\n } catch (error) {\n printMessage(`Error importing journeys: ${error}`, 'error');\n }\n}\n\n/**\n * Import all journeys from separate files\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFiles(options: TreeImportOptions) {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.journey.json'))\n .map((name) => getFilePath(name));\n const allJourneysData = { trees: {} };\n for (const file of jsonFiles) {\n const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));\n allJourneysData.trees[journeyData.tree._id] = journeyData;\n }\n try {\n await importJourneys(allJourneysData as MultiTreeExportInterface, options);\n } catch (error) {\n printMessage(`${error.response?.data?.message || error.message}`, 'error');\n }\n}\n\n/**\n * Get journey classification\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassification(\n journey: SingleTreeExportInterface\n): JourneyClassificationType[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return it['brightGreen'];\n\n case 'cloud':\n return it['brightMagenta'];\n\n case 'custom':\n return it['brightRed'];\n\n case 'premium':\n return it['brightYellow'];\n }\n });\n}\n\n/**\n * Get journey classification in markdown\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassificationMd(\n journey: SingleTreeExportInterface\n): string[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return `:green_circle: \\`${it}\\``;\n\n case 'cloud':\n return `:purple_circle: \\`${it}\\``;\n\n case 'custom':\n return `:red_circle: \\`${it}\\``;\n\n case 'premium':\n return `:yellow_circle: \\`${it}\\``;\n }\n });\n}\n\n/**\n * Get a one-line description of the tree object\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(treeObj: TreeSkeleton): string {\n const description = `[${treeObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get a one-line description of the tree object in markdown\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescriptionMd(treeObj: TreeSkeleton): string {\n const description = `${treeObj._id}`;\n return description;\n}\n\n/**\n * Helper function to render a nested list of dependent trees\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendents(\n descendents: TreeDependencyMapInterface,\n depth = 0\n) {\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n printMessage(\n `\\nInner Tree Dependencies (${Object.values(descendents)[0].length}):`,\n 'data'\n );\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n printMessage(`${indent}- ${tree['brightCyan']}`, 'data');\n for (const descendent of descendents[tree]) {\n describeTreeDescendents(descendent, depth + 1);\n }\n }\n}\n\n/**\n * Helper function to render a nested list of dependent trees in markdown\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendentsMd(\n descendents: TreeDependencyMapInterface,\n depth = 0\n): string {\n let markdown = '';\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n markdown += `## Inner Tree Dependencies (${\n Object.values(descendents)[0].length\n })\\n`;\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n markdown += `${indent}- ${tree}\\n`;\n for (const descendent of descendents[tree]) {\n markdown += describeTreeDescendentsMd(descendent, depth + 1);\n }\n return markdown;\n }\n return markdown;\n}\n\n/**\n * Describe a journey:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourney(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n): Promise<void> {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(`${getOneLineDescription(journeyData.tree)}`, 'data');\n printMessage(Array(`[${journeyData.tree._id}]`['length']).fill('=').join(''));\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Status\n printMessage(\n `\\nStatus\\n${\n journeyData.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen']\n }`\n );\n\n // Classification\n if (state.getAmVersion()) {\n printMessage(\n `\\nClassification\\n${getJourneyClassification(journeyData).join(', ')}`,\n 'data'\n );\n }\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage('\\nCategories/Tags', 'data');\n printMessage(\n `${JSON.parse(journeyData.tree.uiConfig.categories).join(', ')}`,\n 'data'\n );\n }\n\n // Dependency Tree\n try {\n const descendents = await getTreeDescendents(\n journeyData,\n resolveTreeExport\n );\n describeTreeDescendents(descendents);\n } catch (error) {\n printMessage(`Error resolving inner tree dependencies:`, 'error');\n printMessage(error.stack, 'error');\n }\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `\\nNode Types (${Object.entries(nodeTypeMap).length}):`,\n 'data'\n );\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `- ${String(count)} [${\n nodeType['brightCyan']\n }] (${Node.getNodeClassification(nodeType).join(', ')})`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`\\nNodes (${Object.entries(allNodes).length}):`, 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `- ${Node.getOneLineDescription(\n nodeObj,\n getNodeRef(nodeObj, journeyData)\n )}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`\\nThemes (${journeyData.themes.length}):`, 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`- ${Theme.getOneLineDescription(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `\\nScripts (${Object.entries(journeyData.scripts).length}):`,\n 'data'\n );\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`- ${Script.getOneLineDescription(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `\\nEmail Templates (${\n Object.entries(journeyData.emailTemplates).length\n }):`,\n 'data'\n );\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(\n `- ${EmailTemplate.getOneLineDescription(templateData)}`,\n 'data'\n );\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `\\nSocial Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n }):`,\n 'data'\n );\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`- ${Idp.getOneLineDescription(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `\\nSAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n }):`,\n 'data'\n );\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(\n `- ${Saml2.getOneLineDescription(entityProviderData)}`,\n 'data'\n );\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `\\nSAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n }):`,\n 'data'\n );\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(\n `- ${CirclesOfTrust.getOneLineDescription(cotData)}`,\n 'data'\n );\n }\n }\n}\n\n/**\n * Describe a journey in markdown:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourneyMd(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n) {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(\n `# ${getOneLineDescriptionMd(journeyData.tree)} - ${\n journeyData.tree.enabled === false\n ? ':o: `disabled`'\n : ':white_check_mark: `enabled`'\n }, ${getJourneyClassificationMd(journeyData).join(', ')}`,\n 'data'\n );\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage(\n `\\`${JSON.parse(journeyData.tree.uiConfig.categories).join('`, `')}\\``,\n 'data'\n );\n }\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Journey image\n printMessage(`\\n[![](./${journeyData.tree._id}.png)]()\\n`, 'data');\n\n // Dependency Tree\n const descendents = await getTreeDescendents(journeyData, resolveTreeExport);\n printMessage(describeTreeDescendentsMd(descendents), 'data');\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `## Node Types (${Object.entries(nodeTypeMap).length})`,\n 'data'\n );\n printMessage('| Count | Type | Classification |', 'data');\n printMessage('| -----:| ---- | -------------- |', 'data');\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(\n nodeType\n ).join('<br>')} |`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');\n printMessage(Node.getTableHeaderMd(), 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`## Themes (${journeyData.themes.length})`, 'data');\n printMessage(Theme.getTableHeaderMd(), 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `## Scripts (${Object.entries(journeyData.scripts).length})`,\n 'data'\n );\n printMessage(Script.getTableHeaderMd(), 'data');\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `## Email Templates (${\n Object.entries(journeyData.emailTemplates).length\n })`,\n 'data'\n );\n printMessage(EmailTemplate.getTableHeaderMd(), 'data');\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `## Social Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n })`,\n 'data'\n );\n printMessage(Idp.getTableHeaderMd(), 'data');\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `## SAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n })`,\n 'data'\n );\n printMessage(Saml2.getTableHeaderMd(), 'data');\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `## SAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n })`,\n 'data'\n );\n printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');\n }\n }\n}\n\nexport async function enableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Enabling journey ${journeyId}...`\n );\n if (_enableJourney(journeyId)) {\n stopProgressIndicator(\n indicatorId,\n `Enabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n indicatorId,\n `Error enabling journey ${journeyId}`,\n 'fail'\n );\n return false;\n }\n}\n\nexport async function disableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Disabling journey ${journeyId}...`\n );\n if (_disableJourney(journeyId)) {\n stopProgressIndicator(\n indicatorId,\n `Disabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n indicatorId,\n `Error disabling journey ${journeyId}`,\n 'fail'\n );\n return false;\n }\n}\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AAYpD,OAAOC,EAAE,MAAM,IAAI;AAEnB,SACEC,uBAAuB,EACvBC,WAAW,EACXC,YAAY,EACZC,YAAY,EACZC,qBAAqB,EACrBC,uBAAuB,QAClB,kBAAkB;AACzB,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AACrD,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AACnD,OAAO,KAAKC,GAAG,MAAM,UAAU;AAC/B,OAAO,KAAKC,IAAI,MAAM,WAAW;AACjC,OAAO,KAAKC,KAAK,MAAM,YAAY;AACnC,OAAO,KAAKC,MAAM,MAAM,aAAa;AACrC,OAAO,KAAKC,KAAK,MAAM,YAAY;AACnC,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,OAAOC,QAAQ,MAAM,kBAAkB;AAEvC,MAAM;EACJC,gBAAgB;EAChBC,cAAc;EACdC,cAAc;EACdC,WAAW;EACXC;AACF,CAAC,GAAGtB,KAAK,CAACuB,KAAK;AACf,MAAM;EACJC,YAAY;EACZC,aAAa;EACbC,cAAc;EACdC,mBAAmB;EACnBC,cAAc;EACdC,aAAa;EACbC,kBAAkB;EAClBC,UAAU;EACVC,wBAAwB;EACxBC,wBAAwB,EAAEC,yBAAyB;EACnDC,cAAc,EAAEC,eAAe;EAC/BC,aAAa,EAAEC;AACjB,CAAC,GAAGtC,KAAK,CAACuC,KAAK,CAACC,OAAO;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,YAAYA,CAChCC,IAAI,GAAG,KAAK,EACZC,OAAO,GAAG,KAAK,EACU;EACzB,IAAIC,QAAQ,GAAG,EAAE;EACjB,IAAI;IACFA,QAAQ,GAAG,MAAMpB,YAAY,CAAC,CAAC;IAC/B,IAAI,CAACkB,IAAI,IAAI,CAACC,OAAO,EAAE;MACrB,KAAK,MAAME,WAAW,IAAID,QAAQ,EAAE;QAClCtC,YAAY,CAAE,GAAEuC,WAAW,CAAC,KAAK,CAAE,EAAC,EAAE,MAAM,CAAC;MAC/C;IACF,CAAC,MAAM;MACL,IAAI,CAACF,OAAO,EAAE;QACZ,MAAMG,KAAK,GAAG1C,WAAW,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,KAAK,MAAMyC,WAAW,IAAID,QAAQ,EAAE;UAAA,IAAAG,qBAAA;UAClCD,KAAK,CAACE,IAAI,CAAC,CACR,GAAEH,WAAW,CAACI,GAAI,EAAC,EACpBJ,WAAW,CAACK,OAAO,KAAK,KAAK,GACzB,UAAU,CAAC,WAAW,CAAC,GACvB,SAAS,CAAC,aAAa,CAAC,EAC5B,CAAAH,qBAAA,GAAAF,WAAW,CAACM,QAAQ,cAAAJ,qBAAA,eAApBA,qBAAA,CAAsBK,UAAU,GAC5BnC,QAAQ,CACNoC,IAAI,CAACC,KAAK,CAACT,WAAW,CAACM,QAAQ,CAACC,UAAU,CAAC,CAACG,IAAI,CAAC,IAAI,CAAC,EACtD,EACF,CAAC,GACD,EAAE,CACP,CAAC;QACJ;QACAjD,YAAY,CAACwC,KAAK,CAACU,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;MACxC,CAAC,MAAM;QACL,MAAMC,SAAS,GAAGtD,uBAAuB,CACvC,eAAe,EACf,CAAC,EACA,uCACH,CAAC;QACD,MAAMuD,cAAc,GAAG,EAAE;QACzB,IAAI;UACF,KAAK,MAAMb,WAAW,IAAID,QAAQ,EAAE;YAClCc,cAAc,CAACV,IAAI,CACjBvB,aAAa,CAACoB,WAAW,CAAC,KAAK,CAAC,EAAE;cAChCc,eAAe,EAAE,KAAK;cACtBC,IAAI,EAAE;YACR,CAAC,CACH,CAAC;UACH;UACA,MAAMC,cAAc,GAAG,MAAMC,OAAO,CAACC,GAAG,CAACL,cAAc,CAAC;UACxDnD,qBAAqB,CACnBkD,SAAS,EACT,oCAAoC,EACpC,SACF,CAAC;UACD,MAAMX,KAAK,GAAG1C,WAAW,CAAC,CACxB,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,MAAM,CACP,CAAC;UACF,KAAK,MAAM4D,aAAa,IAAIH,cAAc,EAAE;YAAA,IAAAI,qBAAA;YAC1CnB,KAAK,CAACE,IAAI,CAAC,CACR,GAAEgB,aAAa,CAACE,IAAI,CAACjB,GAAI,EAAC,EAC3Be,aAAa,CAACE,IAAI,CAAChB,OAAO,KAAK,KAAK,GAChC,UAAU,CAAC,WAAW,CAAC,GACvB,SAAS,CAAC,aAAa,CAAC,EAC5BjB,wBAAwB,CAAC+B,aAAa,CAAC,CAACT,IAAI,CAAC,IAAI,CAAC,EAClD,CAAAU,qBAAA,GAAAD,aAAa,CAACE,IAAI,CAACf,QAAQ,cAAAc,qBAAA,eAA3BA,qBAAA,CAA6Bb,UAAU,GACnCnC,QAAQ,CACNoC,IAAI,CAACC,KAAK,CAACU,aAAa,CAACE,IAAI,CAACf,QAAQ,CAACC,UAAU,CAAC,CAACG,IAAI,CACrD,IACF,CAAC,EACD,EACF,CAAC,GACD,EAAE,CACP,CAAC;UACJ;UACAjD,YAAY,CAACwC,KAAK,CAACU,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QACxC,CAAC,CAAC,OAAOW,KAAK,EAAE;UACd5D,qBAAqB,CACnBkD,SAAS,EACT,2CAA2C,EAC3C,MACF,CAAC;UACDnD,YAAY,CAAC6D,KAAK,CAACC,QAAQ,CAACC,IAAI,EAAE,OAAO,CAAC;QAC5C;MACF;IACF;EACF,CAAC,CAAC,OAAOF,KAAK,EAAE;IAAA,IAAAG,eAAA;IACdhE,YAAY,EAAAgE,eAAA,GAACH,KAAK,CAACC,QAAQ,cAAAE,eAAA,uBAAdA,eAAA,CAAgBD,IAAI,EAAE,OAAO,CAAC;EAC7C;EACA,OAAOzB,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe2B,mBAAmBA,CACvCC,SAAiB,EACjBC,IAAY,EACZC,WAAW,GAAG,IAAI,EAClBC,OAA0B,GAAG;EAC3Bf,IAAI,EAAE,KAAK;EACXD,eAAe,EAAE;AACnB,CAAC,EACc;EACftD,YAAY,CAAE,4BAA2B,CAAC;EAC1C,MAAMuE,OAAO,GAAG3E,KAAK,CAAC4E,UAAU,CAAC,CAAC;EAClC,IAAI,CAACJ,IAAI,EAAE;IACTA,IAAI,GAAGvD,gBAAgB,CAACsD,SAAS,EAAE,SAAS,CAAC;EAC/C;EACA,MAAMM,QAAQ,GAAGzD,WAAW,CAACoD,IAAI,EAAE,IAAI,CAAC;EACxC,IAAIhB,SAAiB;EACrB,IAAI,CAACmB,OAAO,EACVnB,SAAS,GAAGtD,uBAAuB,CAAC,eAAe,EAAE,CAAC,EAAG,GAAEqE,SAAU,EAAC,CAAC;EACzE,IAAI;IACF,MAAMO,QAAmC,GAAG,MAAMtD,aAAa,CAC7D+C,SAAS,EACTG,OACF,CAAC;IACD,IAAIC,OAAO,EACTnB,SAAS,GAAGtD,uBAAuB,CAAC,eAAe,EAAE,CAAC,EAAG,GAAEqE,SAAU,EAAC,CAAC;IACzErD,cAAc,CAAC4D,QAAQ,EAAED,QAAQ,EAAEJ,WAAW,CAAC;IAC/CnE,qBAAqB,CACnBkD,SAAS,EACR,YAAWe,SAAS,CAAC,YAAY,CAAE,OAAMM,QAAQ,CAAC,YAAY,CAAE,GAAE,EACnE,SACF,CAAC;EACH,CAAC,CAAC,OAAOX,KAAK,EAAE;IACd,IAAIS,OAAO,EACTnB,SAAS,GAAGtD,uBAAuB,CAAC,eAAe,EAAE,CAAC,EAAG,GAAEqE,SAAU,EAAC,CAAC;IACzEjE,qBAAqB,CACnBkD,SAAS,EACR,2BAA0Be,SAAU,KAAIL,KAAM,EAAC,EAChD,MACF,CAAC;EACH;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAea,oBAAoBA,CACxCP,IAAY,EACZC,WAAW,GAAG,IAAI,EAClBC,OAA0B,GAAG;EAC3Bf,IAAI,EAAE,KAAK;EACXD,eAAe,EAAE;AACnB,CAAC,EACc;EACf,IAAI,CAACc,IAAI,EAAE;IACTA,IAAI,GAAGvD,gBAAgB,CAAE,MAAKE,cAAc,CAAC,CAAE,UAAS,EAAE,SAAS,CAAC;EACtE;EACA,MAAM0D,QAAQ,GAAGzD,WAAW,CAACoD,IAAI,EAAE,IAAI,CAAC;EACxC,MAAMM,QAAkC,GAAG,MAAMrD,cAAc,CAACiD,OAAO,CAAC;EACxExD,cAAc,CAAC4D,QAAQ,EAAED,QAAQ,EAAEJ,WAAW,CAAC;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeO,qBAAqBA,CACzCP,WAAW,GAAG,IAAI,EAClBC,OAA0B,GAAG;EAC3Bf,IAAI,EAAE,KAAK;EACXD,eAAe,EAAE;AACnB,CAAC,EACc;EACf,MAAMuB,cAAc,GAAG,MAAMxD,cAAc,CAACiD,OAAO,CAAC;EACpD,MAAMQ,KAAK,GAAGC,MAAM,CAACC,OAAO,CAACH,cAAc,CAACC,KAAK,CAAC;EAClD,KAAK,MAAM,CAACG,MAAM,EAAEC,SAAS,CAAC,IAAIJ,KAAK,EAAE;IACvC,MAAMK,WAAW,GAAGrF,uBAAuB,CACzC,aAAa,EACb,CAAC,EACA,UAASmF,MAAO,KACnB,CAAC;IACD,MAAMb,IAAI,GAAGpD,WAAW,CAACH,gBAAgB,CAAE,GAAEoE,MAAO,EAAC,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC;IACxEC,SAAS,CAAC,MAAM,CAAC,GAAGL,cAAc,CAACO,IAAI;IACvC,IAAI;MACFjF,uBAAuB,CAACgF,WAAW,EAAG,UAASF,MAAO,OAAMb,IAAK,EAAC,CAAC;MACnEtD,cAAc,CAACoE,SAAS,EAAEd,IAAI,EAAEC,WAAW,CAAC;MAC5CnE,qBAAqB,CAACiF,WAAW,EAAG,GAAEF,MAAO,aAAYb,IAAK,EAAC,CAAC;IAClE,CAAC,CAAC,OAAON,KAAK,EAAE;MACd5D,qBAAqB,CAACiF,WAAW,EAAG,gBAAeF,MAAO,OAAMb,IAAK,EAAC,CAAC;IACzE;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeiB,qBAAqBA,CACzClB,SAAiB,EACjBC,IAAY,EACZE,OAA0B,EAC1B;EACA,MAAMC,OAAO,GAAG3E,KAAK,CAAC4E,UAAU,CAAC,CAAC;EAClC,IAAI;IACF,MAAMR,IAAI,GAAGnE,EAAE,CAACyF,YAAY,CAACtE,WAAW,CAACoD,IAAI,CAAC,EAAE,MAAM,CAAC;IACvD,IAAImB,WAAW,GAAGvC,IAAI,CAACC,KAAK,CAACe,IAAI,CAAC;IAClC;IACA,IAAIuB,WAAW,CAACT,KAAK,IAAIS,WAAW,CAACT,KAAK,CAACX,SAAS,CAAC,EAAE;MACrDoB,WAAW,GAAGA,WAAW,CAACT,KAAK,CAACX,SAAS,CAAC;IAC5C,CAAC,MAAM,IAAIoB,WAAW,CAACT,KAAK,EAAE;MAC5BS,WAAW,GAAG,IAAI;IACpB;;IAEA;IACA,IAAIA,WAAW,IAAIpB,SAAS,KAAKoB,WAAW,CAAC1B,IAAI,CAACjB,GAAG,EAAE;MACrD;MACA,MAAM4C,iBAAiB,GAAG,CAAC,MAAMrE,YAAY,CAAC,CAAC,EAAEsE,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAAC9C,GAAG,CAAC;MAClE,MAAM+C,kBAAkB,GAAG,CAAC,CAAC;MAC7B,MAAMC,gBAAgB,GAAG,EAAE;MAC3B,MAAMC,YAAY,GAAG/F,uBAAuB,CAC1C,eAAe,EACf,CAAC,EACD,wBACF,CAAC;MACD,MAAMwB,mBAAmB,CACvBkE,iBAAiB,EACjB;QAAE,CAACrB,SAAS,GAAGoB;MAAY,CAAC,EAC5BI,kBAAkB,EAClBC,gBACF,CAAC;MACD,IAAIb,MAAM,CAACe,IAAI,CAACH,kBAAkB,CAAC,CAACI,MAAM,KAAK,CAAC,EAAE;QAChD7F,qBAAqB,CACnB2F,YAAY,EACX,4BAA2B,EAC5B,SACF,CAAC;QAED,IAAIG,YAAoB;QACxB,IAAI,CAACzB,OAAO,EACVyB,YAAY,GAAGlG,uBAAuB,CACpC,eAAe,EACf,CAAC,EACA,aAAYqE,SAAU,KACzB,CAAC;QACH,IAAI;UACF,MAAM3C,aAAa,CAAC+D,WAAW,EAAEjB,OAAO,CAAC;UACzC,IAAIC,OAAO,EACTyB,YAAY,GAAGlG,uBAAuB,CACpC,eAAe,EACf,CAAC,EACA,aAAYqE,SAAU,KACzB,CAAC;UACHjE,qBAAqB,CACnB8F,YAAY,EACX,YAAW7B,SAAU,GAAE,EACxB,SACF,CAAC;QACH,CAAC,CAAC,OAAO8B,WAAW,EAAE;UACpB,IAAI1B,OAAO,EACTyB,YAAY,GAAGlG,uBAAuB,CACpC,eAAe,EACf,CAAC,EACA,aAAYqE,SAAU,KACzB,CAAC;UACHjE,qBAAqB,CAAC8F,YAAY,EAAG,GAAEC,WAAY,EAAC,EAAE,MAAM,CAAC;QAC/D;MACF,CAAC,MAAM;QACL/F,qBAAqB,CAAC2F,YAAY,EAAG,0BAAyB,EAAE,MAAM,CAAC;QACvE,KAAK,MAAM1D,OAAO,IAAI4C,MAAM,CAACe,IAAI,CAACH,kBAAkB,CAAC,EAAE;UACrD1F,YAAY,CACT,KAAIkC,OAAQ,aAAYwD,kBAAkB,CAACxD,OAAO,CAAE,EAAC,EACtD,OACF,CAAC;QACH;MACF;MACA;IACF,CAAC,MAAM;MACL,MAAM+D,YAAY,GAAGpG,uBAAuB,CAC1C,eAAe,EACf,CAAC,EACA,aAAYqE,SAAU,KACzB,CAAC;MACDjE,qBAAqB,CAACgG,YAAY,EAAG,GAAE/B,SAAU,aAAY,EAAE,MAAM,CAAC;IACxE;EACF,CAAC,CAAC,OAAOL,KAAK,EAAE;IACd7D,YAAY,CAAE,2BAA0BkE,SAAU,KAAIL,KAAM,EAAC,EAAE,OAAO,CAAC;EACzE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeqC,0BAA0BA,CAC9C/B,IAAY,EACZE,OAA0B,EAC1B;EACA,MAAMC,OAAO,GAAG3E,KAAK,CAAC4E,UAAU,CAAC,CAAC;EAClC,IAAI;IACF,MAAMR,IAAI,GAAGnE,EAAE,CAACyF,YAAY,CAACtE,WAAW,CAACoD,IAAI,CAAC,EAAE,MAAM,CAAC;IACvD,IAAImB,WAAW,GAAG5E,SAAS,CAACqC,IAAI,CAACC,KAAK,CAACe,IAAI,CAAC,CAAC;IAC7C,IAAIG,SAAS,GAAG,IAAI;IACpB;IACA,IAAIoB,WAAW,CAAC1B,IAAI,EAAE;MACpBM,SAAS,GAAGxD,SAAS,CAAC4E,WAAW,CAAC1B,IAAI,CAACjB,GAAG,CAAC;IAC7C;IACA;IAAA,KACK,IAAI2C,WAAW,CAACT,KAAK,EAAE;MAC1B,KAAK,MAAMG,MAAM,IAAIM,WAAW,CAACT,KAAK,EAAE;QACtC,IAAIC,MAAM,CAACqB,cAAc,CAACC,IAAI,CAACd,WAAW,CAACT,KAAK,EAAEG,MAAM,CAAC,EAAE;UACzDd,SAAS,GAAGc,MAAM;UAClBM,WAAW,GAAGA,WAAW,CAACT,KAAK,CAACG,MAAM,CAAC;UACvC;QACF;MACF;IACF;;IAEA;IACA,IAAIM,WAAW,IAAIpB,SAAS,EAAE;MAC5B;MACA,MAAMqB,iBAAiB,GAAG,CAAC,MAAMrE,YAAY,CAAC,CAAC,EAAEsE,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAAC9C,GAAG,CAAC;MAClE,MAAM+C,kBAAkB,GAAG,CAAC,CAAC;MAC7B,MAAMC,gBAAgB,GAAG,EAAE;MAC3B,MAAMU,YAAY,GAAGxG,uBAAuB,CAC1C,eAAe,EACf,CAAC,EACD,wBACF,CAAC;MACD,MAAMwB,mBAAmB,CACvBkE,iBAAiB,EACjB;QAAE,CAACrB,SAAS,GAAGoB;MAAY,CAAC,EAC5BI,kBAAkB,EAClBC,gBACF,CAAC;MACD,IAAIb,MAAM,CAACe,IAAI,CAACH,kBAAkB,CAAC,CAACI,MAAM,KAAK,CAAC,EAAE;QAChD7F,qBAAqB,CACnBoG,YAAY,EACX,4BAA2B,EAC5B,SACF,CAAC;QAED,IAAIC,eAAuB;QAC3B,IAAI,CAAChC,OAAO,EACVgC,eAAe,GAAGzG,uBAAuB,CACvC,eAAe,EACf,CAAC,EACA,aAAYqE,SAAU,KACzB,CAAC;QACH,IAAI;UACF,MAAM3C,aAAa,CAAC+D,WAAW,EAAEjB,OAAO,CAAC;UACzC,IAAIC,OAAO,EACTgC,eAAe,GAAGzG,uBAAuB,CACvC,eAAe,EACf,CAAC,EACA,aAAYqE,SAAU,KACzB,CAAC;UACHjE,qBAAqB,CACnBqG,eAAe,EACd,YAAWpC,SAAU,GAAE,EACxB,SACF,CAAC;QACH,CAAC,CAAC,OAAO8B,WAAW,EAAE;UACpB,IAAI1B,OAAO,EACTgC,eAAe,GAAGzG,uBAAuB,CACvC,eAAe,EACf,CAAC,EACA,aAAYqE,SAAU,KACzB,CAAC;UACHjE,qBAAqB,CAACqG,eAAe,EAAG,GAAEN,WAAY,EAAC,EAAE,MAAM,CAAC;QAClE;MACF,CAAC,MAAM;QACL/F,qBAAqB,CAACoG,YAAY,EAAG,0BAAyB,EAAE,MAAM,CAAC;QACvE,KAAK,MAAMnE,OAAO,IAAI4C,MAAM,CAACe,IAAI,CAACH,kBAAkB,CAAC,EAAE;UACrD1F,YAAY,CACT,KAAIkC,OAAQ,aAAYwD,kBAAkB,CAACxD,OAAO,CAAE,EAAC,EACtD,OACF,CAAC;QACH;MACF;IACF,CAAC,MAAM;MACL,MAAMoE,eAAe,GAAGzG,uBAAuB,CAC7C,eAAe,EACf,CAAC,EACA,cACH,CAAC;MACDI,qBAAqB,CAACqG,eAAe,EAAG,oBAAmB,EAAE,MAAM,CAAC;IACtE;IACA;EACF,CAAC,CAAC,OAAOzC,KAAK,EAAE;IACd7D,YAAY,CAAE,kCAAiC6D,KAAM,EAAC,EAAE,OAAO,CAAC;EAClE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe0C,sBAAsBA,CAC1CpC,IAAY,EACZE,OAA0B,EAC1B;EACA,IAAI;IACF,MAAMN,IAAI,GAAGnE,EAAE,CAACyF,YAAY,CAACtE,WAAW,CAACoD,IAAI,CAAC,EAAE,MAAM,CAAC;IACvD,IAAI;MACF,MAAMM,QAAQ,GAAG1B,IAAI,CAACC,KAAK,CAACe,IAAI,CAAC;MACjC,MAAMzC,cAAc,CAACmD,QAAQ,EAAEJ,OAAO,CAAC;IACzC,CAAC,CAAC,OAAOR,KAAK,EAAE;MACd,IAAIA,KAAK,CAAC2C,IAAI,KAAK,6BAA6B,EAAE;QAChD,KAAK,MAAMtE,OAAO,IAAI4C,MAAM,CAACe,IAAI,CAAChC,KAAK,CAAC6B,kBAAkB,CAAC,EAAE;UAC3D1F,YAAY,CAAC;YACXyG,OAAO,EAAG,OAAMvE,OAAQ,aAAY2B,KAAK,CAAC6B,kBAAkB,CAACxD,OAAO,CAAE,EAAC;YACvEwE,IAAI,EAAE,MAAM;YACZ/G;UACF,CAAC,CAAC;QACJ;MACF,CAAC,MAAM;QACLK,YAAY,CAAE,GAAE6D,KAAK,CAAC4C,OAAQ,EAAC,EAAE,OAAO,CAAC;MAC3C;IACF;EACF,CAAC,CAAC,OAAO5C,KAAK,EAAE;IACd7D,YAAY,CAAE,6BAA4B6D,KAAM,EAAC,EAAE,OAAO,CAAC;EAC7D;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAe8C,uBAAuBA,CAACtC,OAA0B,EAAE;EACxE,MAAMuC,KAAK,GAAGhH,EAAE,CAACiH,WAAW,CAAC7F,mBAAmB,CAAC,CAAC,CAAC;EACnD,MAAM8F,SAAS,GAAGF,KAAK,CACpBG,MAAM,CAAEP,IAAI,IAAKA,IAAI,CAACQ,WAAW,CAAC,CAAC,CAACC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAC9DzB,GAAG,CAAEgB,IAAI,IAAKzF,WAAW,CAACyF,IAAI,CAAC,CAAC;EACnC,MAAMU,eAAe,GAAG;IAAErC,KAAK,EAAE,CAAC;EAAE,CAAC;EACrC,KAAK,MAAMV,IAAI,IAAI2C,SAAS,EAAE;IAC5B,MAAMxB,WAAW,GAAGvC,IAAI,CAACC,KAAK,CAACpD,EAAE,CAACyF,YAAY,CAAClB,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7D+C,eAAe,CAACrC,KAAK,CAACS,WAAW,CAAC1B,IAAI,CAACjB,GAAG,CAAC,GAAG2C,WAAW;EAC3D;EACA,IAAI;IACF,MAAMhE,cAAc,CAAC4F,eAAe,EAA8B7C,OAAO,CAAC;EAC5E,CAAC,CAAC,OAAOR,KAAK,EAAE;IAAA,IAAAsD,gBAAA;IACdnH,YAAY,CAAE,GAAE,EAAAmH,gBAAA,GAAAtD,KAAK,CAACC,QAAQ,cAAAqD,gBAAA,gBAAAA,gBAAA,GAAdA,gBAAA,CAAgBpD,IAAI,cAAAoD,gBAAA,uBAApBA,gBAAA,CAAsBV,OAAO,KAAI5C,KAAK,CAAC4C,OAAQ,EAAC,EAAE,OAAO,CAAC;EAC5E;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS9E,wBAAwBA,CACtCO,OAAkC,EACL;EAC7B,OAAON,yBAAyB,CAACM,OAAO,CAAC,CAACsD,GAAG,CAAE4B,EAAE,IAAK;IACpD,QAAQA,EAAE;MACR,KAAK,UAAU;QACb,OAAOA,EAAE,CAAC,aAAa,CAAC;MAE1B,KAAK,OAAO;QACV,OAAOA,EAAE,CAAC,eAAe,CAAC;MAE5B,KAAK,QAAQ;QACX,OAAOA,EAAE,CAAC,WAAW,CAAC;MAExB,KAAK,SAAS;QACZ,OAAOA,EAAE,CAAC,cAAc,CAAC;IAC7B;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,0BAA0BA,CACxCnF,OAAkC,EACxB;EACV,OAAON,yBAAyB,CAACM,OAAO,CAAC,CAACsD,GAAG,CAAE4B,EAAE,IAAK;IACpD,QAAQA,EAAE;MACR,KAAK,UAAU;QACb,OAAQ,oBAAmBA,EAAG,IAAG;MAEnC,KAAK,OAAO;QACV,OAAQ,qBAAoBA,EAAG,IAAG;MAEpC,KAAK,QAAQ;QACX,OAAQ,kBAAiBA,EAAG,IAAG;MAEjC,KAAK,SAAS;QACZ,OAAQ,qBAAoBA,EAAG,IAAG;IACtC;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,qBAAqBA,CAACC,OAAqB,EAAU;EACnE,MAAMC,WAAW,GAAI,IAAGD,OAAO,CAAC5E,GAAG,CAAC,YAAY,CAAE,GAAE;EACpD,OAAO6E,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CAACF,OAAqB,EAAU;EACrE,MAAMC,WAAW,GAAI,GAAED,OAAO,CAAC5E,GAAI,EAAC;EACpC,OAAO6E,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASE,uBAAuBA,CAC9BC,WAAuC,EACvCC,KAAK,GAAG,CAAC,EACT;EACA,IAAIA,KAAK,IAAI9C,MAAM,CAAC+C,MAAM,CAACF,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC7B,MAAM,EAAE;IACjD;IACA,IAAI8B,KAAK,KAAK,CAAC,EAAE;MACf5H,YAAY,CACT,8BAA6B8E,MAAM,CAAC+C,MAAM,CAACF,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC7B,MAAO,IAAG,EACtE,MACF,CAAC;IACH;IACA,MAAMgC,MAAM,GAAGC,KAAK,CAACH,KAAK,GAAG,CAAC,CAAC,CAC5BI,IAAI,CAAC,GAAG,CAAC,CACT/E,IAAI,CAAC,EAAE,CAAC;IACX,MAAM,CAACW,IAAI,CAAC,GAAGkB,MAAM,CAACe,IAAI,CAAC8B,WAAW,CAAC;IACvC3H,YAAY,CAAE,GAAE8H,MAAO,KAAIlE,IAAI,CAAC,YAAY,CAAE,EAAC,EAAE,MAAM,CAAC;IACxD,KAAK,MAAMqE,UAAU,IAAIN,WAAW,CAAC/D,IAAI,CAAC,EAAE;MAC1C8D,uBAAuB,CAACO,UAAU,EAAEL,KAAK,GAAG,CAAC,CAAC;IAChD;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASM,yBAAyBA,CAChCP,WAAuC,EACvCC,KAAK,GAAG,CAAC,EACD;EACR,IAAIO,QAAQ,GAAG,EAAE;EACjB,IAAIP,KAAK,IAAI9C,MAAM,CAAC+C,MAAM,CAACF,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC7B,MAAM,EAAE;IACjD;IACA,IAAI8B,KAAK,KAAK,CAAC,EAAE;MACfO,QAAQ,IAAK,+BACXrD,MAAM,CAAC+C,MAAM,CAACF,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC7B,MAC/B,KAAI;IACP;IACA,MAAMgC,MAAM,GAAGC,KAAK,CAACH,KAAK,GAAG,CAAC,CAAC,CAC5BI,IAAI,CAAC,GAAG,CAAC,CACT/E,IAAI,CAAC,EAAE,CAAC;IACX,MAAM,CAACW,IAAI,CAAC,GAAGkB,MAAM,CAACe,IAAI,CAAC8B,WAAW,CAAC;IACvCQ,QAAQ,IAAK,GAAEL,MAAO,KAAIlE,IAAK,IAAG;IAClC,KAAK,MAAMqE,UAAU,IAAIN,WAAW,CAAC/D,IAAI,CAAC,EAAE;MAC1CuE,QAAQ,IAAID,yBAAyB,CAACD,UAAU,EAAEL,KAAK,GAAG,CAAC,CAAC;IAC9D;IACA,OAAOO,QAAQ;EACjB;EACA,OAAOA,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,eAAeA,CACnC9C,WAAsC,EACtC+C,iBAA8C,GAAG3G,wBAAwB,EAC1D;EAAA,IAAA4G,iBAAA,EAAAC,qBAAA,EAAAC,mBAAA;EACf,MAAMC,QAAQ,GAAG;IACf,GAAGnD,WAAW,CAACoD,KAAK;IACpB,GAAGpD,WAAW,CAACqD;EACjB,CAAC;EACD,MAAMC,WAAW,GAAG,CAAC,CAAC;EAEtB,KAAK,MAAMC,QAAQ,IAAI/D,MAAM,CAAC+C,MAAM,CAACY,QAAQ,CAAC,EAAE;IAC9C,IAAIG,WAAW,CAACC,QAAQ,CAACC,KAAK,CAACnG,GAAG,CAAC,EAAE;MACnCiG,WAAW,CAACC,QAAQ,CAACC,KAAK,CAACnG,GAAG,CAAC,IAAI,CAAC;IACtC,CAAC,MAAM;MACLiG,WAAW,CAACC,QAAQ,CAACC,KAAK,CAACnG,GAAG,CAAC,GAAG,CAAC;IACrC;EACF;;EAEA;EACA,IAAI,CAAChD,KAAK,CAACoJ,YAAY,CAAC,CAAC,KAAAT,iBAAA,GAAIhD,WAAW,CAACH,IAAI,cAAAmD,iBAAA,eAAhBA,iBAAA,CAAkBU,eAAe,EAAE;IAC9DrJ,KAAK,CAACsJ,YAAY,CAAC3D,WAAW,CAACH,IAAI,CAAC6D,eAAe,CAAC;EACtD;;EAEA;EACAhJ,YAAY,CAAE,GAAEsH,qBAAqB,CAAChC,WAAW,CAAC1B,IAAI,CAAE,EAAC,EAAE,MAAM,CAAC;EAClE5D,YAAY,CAAC+H,KAAK,CAAE,IAAGzC,WAAW,CAAC1B,IAAI,CAACjB,GAAI,GAAE,CAAC,QAAQ,CAAC,CAAC,CAACqF,IAAI,CAAC,GAAG,CAAC,CAAC/E,IAAI,CAAC,EAAE,CAAC,CAAC;;EAE7E;EACA,IAAIqC,WAAW,CAAC1B,IAAI,CAAC4D,WAAW,EAAE;IAChCxH,YAAY,CAAE,KAAIsF,WAAW,CAAC1B,IAAI,CAAC4D,WAAY,EAAC,EAAE,MAAM,CAAC;EAC3D;;EAEA;EACAxH,YAAY,CACT,aACCsF,WAAW,CAAC1B,IAAI,CAAChB,OAAO,KAAK,KAAK,GAC9B,UAAU,CAAC,WAAW,CAAC,GACvB,SAAS,CAAC,aAAa,CAC5B,EACH,CAAC;;EAED;EACA,IAAIjD,KAAK,CAACoJ,YAAY,CAAC,CAAC,EAAE;IACxB/I,YAAY,CACT,qBAAoB2B,wBAAwB,CAAC2D,WAAW,CAAC,CAACrC,IAAI,CAAC,IAAI,CAAE,EAAC,EACvE,MACF,CAAC;EACH;;EAEA;EACA,IACE,CAAAsF,qBAAA,GAAAjD,WAAW,CAAC1B,IAAI,CAACf,QAAQ,cAAA0F,qBAAA,eAAzBA,qBAAA,CAA2BzF,UAAU,IACrCwC,WAAW,CAAC1B,IAAI,CAACf,QAAQ,CAACC,UAAU,IAAI,IAAI,EAC5C;IACA9C,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACzCA,YAAY,CACT,GAAE+C,IAAI,CAACC,KAAK,CAACsC,WAAW,CAAC1B,IAAI,CAACf,QAAQ,CAACC,UAAU,CAAC,CAACG,IAAI,CAAC,IAAI,CAAE,EAAC,EAChE,MACF,CAAC;EACH;;EAEA;EACA,IAAI;IACF,MAAM0E,WAAW,GAAG,MAAMnG,kBAAkB,CAC1C8D,WAAW,EACX+C,iBACF,CAAC;IACDX,uBAAuB,CAACC,WAAW,CAAC;EACtC,CAAC,CAAC,OAAO9D,KAAK,EAAE;IACd7D,YAAY,CAAE,0CAAyC,EAAE,OAAO,CAAC;IACjEA,YAAY,CAAC6D,KAAK,CAACqF,KAAK,EAAE,OAAO,CAAC;EACpC;;EAEA;EACA,IAAIpE,MAAM,CAACC,OAAO,CAAC6D,WAAW,CAAC,CAAC9C,MAAM,EAAE;IACtC9F,YAAY,CACT,iBAAgB8E,MAAM,CAACC,OAAO,CAAC6D,WAAW,CAAC,CAAC9C,MAAO,IAAG,EACvD,MACF,CAAC;IACD,KAAK,MAAM,CAACqD,QAAQ,EAAEC,KAAK,CAAC,IAAItE,MAAM,CAACC,OAAO,CAAC6D,WAAW,CAAC,EAAE;MAC3D5I,YAAY,CACT,KAAIqJ,MAAM,CAACD,KAAK,CAAE,KACjBD,QAAQ,CAAC,YAAY,CACtB,MAAK7I,IAAI,CAACgJ,qBAAqB,CAACH,QAAQ,CAAC,CAAClG,IAAI,CAAC,IAAI,CAAE,GAAE,EACxD,MACF,CAAC;IACH;EACF;;EAEA;EACA,IAAI6B,MAAM,CAACC,OAAO,CAAC0D,QAAQ,CAAC,CAAC3C,MAAM,EAAE;IACnC9F,YAAY,CAAE,YAAW8E,MAAM,CAACC,OAAO,CAAC0D,QAAQ,CAAC,CAAC3C,MAAO,IAAG,EAAE,MAAM,CAAC;IACrE,KAAK,MAAMyD,OAAO,IAAIzE,MAAM,CAAC+C,MAAM,CAAeY,QAAQ,CAAC,EAAE;MAC3DzI,YAAY,CACT,KAAIM,IAAI,CAACgH,qBAAqB,CAC7BiC,OAAO,EACP9H,UAAU,CAAC8H,OAAO,EAAEjE,WAAW,CACjC,CAAE,EAAC,EACH,MACF,CAAC;IACH;EACF;;EAEA;EACA,KAAAkD,mBAAA,GAAIlD,WAAW,CAACkE,MAAM,cAAAhB,mBAAA,eAAlBA,mBAAA,CAAoB1C,MAAM,EAAE;IAC9B9F,YAAY,CAAE,aAAYsF,WAAW,CAACkE,MAAM,CAAC1D,MAAO,IAAG,EAAE,MAAM,CAAC;IAChE,KAAK,MAAM2D,SAAS,IAAInE,WAAW,CAACkE,MAAM,EAAE;MAC1CxJ,YAAY,CAAE,KAAIS,KAAK,CAAC6G,qBAAqB,CAACmC,SAAS,CAAE,EAAC,EAAE,MAAM,CAAC;IACrE;EACF;;EAEA;EACA,IAAI3E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACoE,OAAO,CAAC,CAAC5D,MAAM,EAAE;IAC9C9F,YAAY,CACT,cAAa8E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACoE,OAAO,CAAC,CAAC5D,MAAO,IAAG,EAC5D,MACF,CAAC;IACD,KAAK,MAAM6D,UAAU,IAAI7E,MAAM,CAAC+C,MAAM,CAACvC,WAAW,CAACoE,OAAO,CAAC,EAAE;MAC3D1J,YAAY,CAAE,KAAIQ,MAAM,CAAC8G,qBAAqB,CAACqC,UAAU,CAAE,EAAC,EAAE,MAAM,CAAC;IACvE;EACF;;EAEA;EACA,IAAI7E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACsE,cAAc,CAAC,CAAC9D,MAAM,EAAE;IACrD9F,YAAY,CACT,sBACC8E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACsE,cAAc,CAAC,CAAC9D,MAC5C,IAAG,EACJ,MACF,CAAC;IACD,KAAK,MAAM+D,YAAY,IAAI/E,MAAM,CAAC+C,MAAM,CAACvC,WAAW,CAACsE,cAAc,CAAC,EAAE;MACpE5J,YAAY,CACT,KAAII,aAAa,CAACkH,qBAAqB,CAACuC,YAAY,CAAE,EAAC,EACxD,MACF,CAAC;IACH;EACF;;EAEA;EACA,IAAI/E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACwE,uBAAuB,CAAC,CAAChE,MAAM,EAAE;IAC9D9F,YAAY,CACT,gCACC8E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACwE,uBAAuB,CAAC,CAAChE,MACrD,IAAG,EACJ,MACF,CAAC;IACD,KAAK,MAAMiE,aAAa,IAAIjF,MAAM,CAAC+C,MAAM,CACvCvC,WAAW,CAACwE,uBACd,CAAC,EAAE;MACD9J,YAAY,CAAE,KAAIK,GAAG,CAACiH,qBAAqB,CAACyC,aAAa,CAAE,EAAC,EAAE,MAAM,CAAC;IACvE;EACF;;EAEA;EACA,IAAIjF,MAAM,CAACC,OAAO,CAACO,WAAW,CAAC0E,aAAa,CAAC,CAAClE,MAAM,EAAE;IACpD9F,YAAY,CACT,6BACC8E,MAAM,CAACC,OAAO,CAACO,WAAW,CAAC0E,aAAa,CAAC,CAAClE,MAC3C,IAAG,EACJ,MACF,CAAC;IACD,KAAK,MAAMmE,kBAAkB,IAAInF,MAAM,CAAC+C,MAAM,CAACvC,WAAW,CAAC0E,aAAa,CAAC,EAAE;MACzEhK,YAAY,CACT,KAAIO,KAAK,CAAC+G,qBAAqB,CAAC2C,kBAAkB,CAAE,EAAC,EACtD,MACF,CAAC;IACH;EACF;;EAEA;EACA,IAAInF,MAAM,CAACC,OAAO,CAACO,WAAW,CAAC4E,cAAc,CAAC,CAACpE,MAAM,EAAE;IACrD9F,YAAY,CACT,6BACC8E,MAAM,CAACC,OAAO,CAACO,WAAW,CAAC4E,cAAc,CAAC,CAACpE,MAC5C,IAAG,EACJ,MACF,CAAC;IACD,KAAK,MAAMqE,OAAO,IAAIrF,MAAM,CAAC+C,MAAM,CAACvC,WAAW,CAAC4E,cAAc,CAAC,EAAE;MAC/DlK,YAAY,CACT,KAAIG,cAAc,CAACmH,qBAAqB,CAAC6C,OAAO,CAAE,EAAC,EACpD,MACF,CAAC;IACH;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,iBAAiBA,CACrC9E,WAAsC,EACtC+C,iBAA8C,GAAG3G,wBAAwB,EACzE;EAAA,IAAA2I,kBAAA,EAAAC,sBAAA,EAAAC,oBAAA;EACA,MAAM9B,QAAQ,GAAG;IACf,GAAGnD,WAAW,CAACoD,KAAK;IACpB,GAAGpD,WAAW,CAACqD;EACjB,CAAC;EACD,MAAMC,WAAW,GAAG,CAAC,CAAC;EAEtB,KAAK,MAAMC,QAAQ,IAAI/D,MAAM,CAAC+C,MAAM,CAACY,QAAQ,CAAC,EAAE;IAC9C,IAAIG,WAAW,CAACC,QAAQ,CAACC,KAAK,CAACnG,GAAG,CAAC,EAAE;MACnCiG,WAAW,CAACC,QAAQ,CAACC,KAAK,CAACnG,GAAG,CAAC,IAAI,CAAC;IACtC,CAAC,MAAM;MACLiG,WAAW,CAACC,QAAQ,CAACC,KAAK,CAACnG,GAAG,CAAC,GAAG,CAAC;IACrC;EACF;;EAEA;EACA,IAAI,CAAChD,KAAK,CAACoJ,YAAY,CAAC,CAAC,KAAAsB,kBAAA,GAAI/E,WAAW,CAACH,IAAI,cAAAkF,kBAAA,eAAhBA,kBAAA,CAAkBrB,eAAe,EAAE;IAC9DrJ,KAAK,CAACsJ,YAAY,CAAC3D,WAAW,CAACH,IAAI,CAAC6D,eAAe,CAAC;EACtD;;EAEA;EACAhJ,YAAY,CACT,KAAIyH,uBAAuB,CAACnC,WAAW,CAAC1B,IAAI,CAAE,MAC7C0B,WAAW,CAAC1B,IAAI,CAAChB,OAAO,KAAK,KAAK,GAC9B,gBAAgB,GAChB,8BACL,KAAIyE,0BAA0B,CAAC/B,WAAW,CAAC,CAACrC,IAAI,CAAC,IAAI,CAAE,EAAC,EACzD,MACF,CAAC;;EAED;EACA,IACE,CAAAqH,sBAAA,GAAAhF,WAAW,CAAC1B,IAAI,CAACf,QAAQ,cAAAyH,sBAAA,eAAzBA,sBAAA,CAA2BxH,UAAU,IACrCwC,WAAW,CAAC1B,IAAI,CAACf,QAAQ,CAACC,UAAU,IAAI,IAAI,EAC5C;IACA9C,YAAY,CACT,KAAI+C,IAAI,CAACC,KAAK,CAACsC,WAAW,CAAC1B,IAAI,CAACf,QAAQ,CAACC,UAAU,CAAC,CAACG,IAAI,CAAC,MAAM,CAAE,IAAG,EACtE,MACF,CAAC;EACH;;EAEA;EACA,IAAIqC,WAAW,CAAC1B,IAAI,CAAC4D,WAAW,EAAE;IAChCxH,YAAY,CAAE,KAAIsF,WAAW,CAAC1B,IAAI,CAAC4D,WAAY,EAAC,EAAE,MAAM,CAAC;EAC3D;;EAEA;EACAxH,YAAY,CAAE,YAAWsF,WAAW,CAAC1B,IAAI,CAACjB,GAAI,YAAW,EAAE,MAAM,CAAC;;EAElE;EACA,MAAMgF,WAAW,GAAG,MAAMnG,kBAAkB,CAAC8D,WAAW,EAAE+C,iBAAiB,CAAC;EAC5ErI,YAAY,CAACkI,yBAAyB,CAACP,WAAW,CAAC,EAAE,MAAM,CAAC;;EAE5D;EACA,IAAI7C,MAAM,CAACC,OAAO,CAAC6D,WAAW,CAAC,CAAC9C,MAAM,EAAE;IACtC9F,YAAY,CACT,kBAAiB8E,MAAM,CAACC,OAAO,CAAC6D,WAAW,CAAC,CAAC9C,MAAO,GAAE,EACvD,MACF,CAAC;IACD9F,YAAY,CAAC,mCAAmC,EAAE,MAAM,CAAC;IACzDA,YAAY,CAAC,mCAAmC,EAAE,MAAM,CAAC;IACzD,KAAK,MAAM,CAACmJ,QAAQ,EAAEC,KAAK,CAAC,IAAItE,MAAM,CAACC,OAAO,CAAC6D,WAAW,CAAC,EAAE;MAC3D5I,YAAY,CACT,KAAIqJ,MAAM,CAACD,KAAK,CAAE,MAAKD,QAAS,MAAK7I,IAAI,CAACkK,uBAAuB,CAChErB,QACF,CAAC,CAAClG,IAAI,CAAC,MAAM,CAAE,IAAG,EAClB,MACF,CAAC;IACH;EACF;;EAEA;EACA,IAAI6B,MAAM,CAACC,OAAO,CAAC0D,QAAQ,CAAC,CAAC3C,MAAM,EAAE;IACnC9F,YAAY,CAAE,aAAY8E,MAAM,CAACC,OAAO,CAAC0D,QAAQ,CAAC,CAAC3C,MAAO,GAAE,EAAE,MAAM,CAAC;IACrE9F,YAAY,CAACM,IAAI,CAACmK,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;IAC7C,KAAK,MAAMlB,OAAO,IAAIzE,MAAM,CAAC+C,MAAM,CAAeY,QAAQ,CAAC,EAAE;MAC3DzI,YAAY,CACT,GAAEM,IAAI,CAACoK,aAAa,CAACnB,OAAO,EAAE9H,UAAU,CAAC8H,OAAO,EAAEjE,WAAW,CAAC,CAAE,EAAC,EAClE,MACF,CAAC;IACH;EACF;;EAEA;EACA,KAAAiF,oBAAA,GAAIjF,WAAW,CAACkE,MAAM,cAAAe,oBAAA,eAAlBA,oBAAA,CAAoBzE,MAAM,EAAE;IAC9B9F,YAAY,CAAE,cAAasF,WAAW,CAACkE,MAAM,CAAC1D,MAAO,GAAE,EAAE,MAAM,CAAC;IAChE9F,YAAY,CAACS,KAAK,CAACgK,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;IAC9C,KAAK,MAAMhB,SAAS,IAAInE,WAAW,CAACkE,MAAM,EAAE;MAC1CxJ,YAAY,CAAE,GAAES,KAAK,CAACiK,aAAa,CAACjB,SAAS,CAAE,EAAC,EAAE,MAAM,CAAC;IAC3D;EACF;;EAEA;EACA,IAAI3E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACoE,OAAO,CAAC,CAAC5D,MAAM,EAAE;IAC9C9F,YAAY,CACT,eAAc8E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACoE,OAAO,CAAC,CAAC5D,MAAO,GAAE,EAC5D,MACF,CAAC;IACD9F,YAAY,CAACQ,MAAM,CAACiK,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;IAC/C,KAAK,MAAMd,UAAU,IAAI7E,MAAM,CAAC+C,MAAM,CAACvC,WAAW,CAACoE,OAAO,CAAC,EAAE;MAC3D1J,YAAY,CAAE,GAAEQ,MAAM,CAACkK,aAAa,CAACf,UAAU,CAAE,EAAC,EAAE,MAAM,CAAC;IAC7D;EACF;;EAEA;EACA,IAAI7E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACsE,cAAc,CAAC,CAAC9D,MAAM,EAAE;IACrD9F,YAAY,CACT,uBACC8E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACsE,cAAc,CAAC,CAAC9D,MAC5C,GAAE,EACH,MACF,CAAC;IACD9F,YAAY,CAACI,aAAa,CAACqK,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;IACtD,KAAK,MAAMZ,YAAY,IAAI/E,MAAM,CAAC+C,MAAM,CAACvC,WAAW,CAACsE,cAAc,CAAC,EAAE;MACpE5J,YAAY,CAAE,GAAEI,aAAa,CAACsK,aAAa,CAACb,YAAY,CAAE,EAAC,EAAE,MAAM,CAAC;IACtE;EACF;;EAEA;EACA,IAAI/E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACwE,uBAAuB,CAAC,CAAChE,MAAM,EAAE;IAC9D9F,YAAY,CACT,iCACC8E,MAAM,CAACC,OAAO,CAACO,WAAW,CAACwE,uBAAuB,CAAC,CAAChE,MACrD,GAAE,EACH,MACF,CAAC;IACD9F,YAAY,CAACK,GAAG,CAACoK,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;IAC5C,KAAK,MAAMV,aAAa,IAAIjF,MAAM,CAAC+C,MAAM,CACvCvC,WAAW,CAACwE,uBACd,CAAC,EAAE;MACD9J,YAAY,CAAE,GAAEK,GAAG,CAACqK,aAAa,CAACX,aAAa,CAAE,EAAC,EAAE,MAAM,CAAC;IAC7D;EACF;;EAEA;EACA,IAAIjF,MAAM,CAACC,OAAO,CAACO,WAAW,CAAC0E,aAAa,CAAC,CAAClE,MAAM,EAAE;IACpD9F,YAAY,CACT,8BACC8E,MAAM,CAACC,OAAO,CAACO,WAAW,CAAC0E,aAAa,CAAC,CAAClE,MAC3C,GAAE,EACH,MACF,CAAC;IACD9F,YAAY,CAACO,KAAK,CAACkK,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;IAC9C,KAAK,MAAMR,kBAAkB,IAAInF,MAAM,CAAC+C,MAAM,CAACvC,WAAW,CAAC0E,aAAa,CAAC,EAAE;MACzEhK,YAAY,CAAE,GAAEO,KAAK,CAACmK,aAAa,CAACT,kBAAkB,CAAE,EAAC,EAAE,MAAM,CAAC;IACpE;EACF;;EAEA;EACA,IAAInF,MAAM,CAACC,OAAO,CAACO,WAAW,CAAC4E,cAAc,CAAC,CAACpE,MAAM,EAAE;IACrD9F,YAAY,CACT,8BACC8E,MAAM,CAACC,OAAO,CAACO,WAAW,CAAC4E,cAAc,CAAC,CAACpE,MAC5C,GAAE,EACH,MACF,CAAC;IACD9F,YAAY,CAACG,cAAc,CAACsK,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;IACvD,KAAK,MAAMN,OAAO,IAAIrF,MAAM,CAAC+C,MAAM,CAACvC,WAAW,CAAC4E,cAAc,CAAC,EAAE;MAC/DlK,YAAY,CAAE,GAAEG,cAAc,CAACuK,aAAa,CAACP,OAAO,CAAE,EAAC,EAAE,MAAM,CAAC;IAClE;EACF;AACF;AAEA,OAAO,eAAepI,aAAaA,CAACmC,SAAiB,EAAoB;EACvE,MAAMgB,WAAW,GAAGrF,uBAAuB,CACzC,eAAe,EACf,CAAC,EACA,oBAAmBqE,SAAU,KAChC,CAAC;EACD,IAAIlC,cAAc,CAACkC,SAAS,CAAC,EAAE;IAC7BjE,qBAAqB,CACnBiF,WAAW,EACV,mBAAkBhB,SAAU,GAAE,EAC/B,SACF,CAAC;IACD,OAAO,IAAI;EACb,CAAC,MAAM;IACLjE,qBAAqB,CACnBiF,WAAW,EACV,0BAAyBhB,SAAU,EAAC,EACrC,MACF,CAAC;IACD,OAAO,KAAK;EACd;AACF;AAEA,OAAO,eAAerC,cAAcA,CAACqC,SAAiB,EAAoB;EACxE,MAAMgB,WAAW,GAAGrF,uBAAuB,CACzC,eAAe,EACf,CAAC,EACA,qBAAoBqE,SAAU,KACjC,CAAC;EACD,IAAIpC,eAAe,CAACoC,SAAS,CAAC,EAAE;IAC9BjE,qBAAqB,CACnBiF,WAAW,EACV,oBAAmBhB,SAAU,GAAE,EAChC,SACF,CAAC;IACD,OAAO,IAAI;EACb,CAAC,MAAM;IACLjE,qBAAqB,CACnBiF,WAAW,EACV,2BAA0BhB,SAAU,EAAC,EACtC,MACF,CAAC;IACD,OAAO,KAAK;EACd;AACF"}
1
+ {"version":3,"file":"JourneyOps.js","names":["frodo","state","fs","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","cloneDeep","wordwrap","getTypedFilename","saveJsonToFile","getRealmString","getFilePath","getWorkingDirectory","utils","readJourneys","exportJourney","exportJourneys","resolveDependencies","importJourneys","importJourney","getTreeDescendents","getNodeRef","onlineTreeExportResolver","getJourneyClassification","_getJourneyClassification","disableJourney","_disableJourney","enableJourney","_enableJourney","authn","journey","listJourneys","long","analyze","journeys","journeyStub","table","_journeyStub$uiConfig","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","spinnerId","exportPromises","useStringArrays","deps","coords","journeyExports","Promise","all","journeyExport","_journeyExport$tree$u","tree","error","response","data","_error$response","exportJourneyToFile","journeyId","file","includeMeta","options","verbose","getVerbose","filePath","fileData","exportJourneysToFile","exportJourneysToFiles","journeysExport","trees","Object","entries","treeId","treeValue","indicatorId","meta","importJourneyFromFile","readFileSync","journeyData","installedJourneys","map","x","unresolvedJourneys","resolvedJourneys","indicatorId1","keys","length","indicatorId2","importError","indicatorId3","importFirstJourneyFromFile","hasOwnProperty","call","depSpinnerId","importSpinnerId","importJourneysFromFile","name","message","type","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","allJourneysData","_error$response2","it","getJourneyClassificationMd","getOneLineDescription","treeObj","description","getOneLineDescriptionMd","describeTreeDescendents","descendents","depth","values","indent","Array","fill","descendent","describeTreeDescendentsMd","markdown","describeJourney","resolveTreeExport","_journeyData$meta","_journeyData$tree$uiC","_journeyData$themes","allNodes","nodes","innerNodes","nodeTypeMap","nodeData","_type","getAmVersion","originAmVersion","setAmVersion","stack","nodeType","count","String","getNodeClassification","nodeObj","themes","themeData","scripts","scriptData","emailTemplates","templateData","socialIdentityProviders","socialIdpData","saml2Entities","entityProviderData","circlesOfTrust","cotData","describeJourneyMd","_journeyData$meta2","_journeyData$tree$uiC2","_journeyData$themes2","getNodeClassificationMd","getTableHeaderMd","getTableRowMd"],"sources":["../../src/ops/JourneyOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type NodeSkeleton } from '@rockcarver/frodo-lib/types/api/NodeApi';\nimport { type TreeSkeleton } from '@rockcarver/frodo-lib/types/api/TreeApi';\nimport {\n type JourneyClassificationType,\n type MultiTreeExportInterface,\n type SingleTreeExportInterface,\n type TreeDependencyMapInterface,\n type TreeExportOptions,\n type TreeExportResolverInterface,\n type TreeImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/JourneyOps';\nimport fs from 'fs';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport * as CirclesOfTrust from './CirclesOfTrustOps';\nimport * as EmailTemplate from './EmailTemplateOps';\nimport * as Idp from './IdpOps';\nimport * as Node from './NodeOps';\nimport * as Saml2 from './Saml2Ops';\nimport * as Script from './ScriptOps';\nimport * as Theme from './ThemeOps';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n getTypedFilename,\n saveJsonToFile,\n getRealmString,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readJourneys,\n exportJourney,\n exportJourneys,\n resolveDependencies,\n importJourneys,\n importJourney,\n getTreeDescendents,\n getNodeRef,\n onlineTreeExportResolver,\n getJourneyClassification: _getJourneyClassification,\n disableJourney: _disableJourney,\n enableJourney: _enableJourney,\n} = frodo.authn.journey;\n\n/**\n * List all the journeys/trees\n * @param {boolean} long Long version, all the fields\n * @param {boolean} analyze Analyze journeys/trees for custom nodes (expensive)\n * @returns {Promise<TreeSkeleton[]>} a promise that resolves to an array journey objects\n */\nexport async function listJourneys(\n long = false,\n analyze = false\n): Promise<TreeSkeleton[]> {\n let journeys = [];\n try {\n journeys = await readJourneys();\n if (!long && !analyze) {\n for (const journeyStub of journeys) {\n printMessage(`${journeyStub['_id']}`, 'data');\n }\n } else {\n if (!analyze) {\n const table = createTable(['Name', 'Status', 'Tags']);\n for (const journeyStub of journeys) {\n table.push([\n `${journeyStub._id}`,\n journeyStub.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n journeyStub.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyStub.uiConfig.categories).join(', '),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Retrieving details of all journeys...`\n );\n const exportPromises = [];\n try {\n for (const journeyStub of journeys) {\n exportPromises.push(\n exportJourney(journeyStub['_id'], {\n useStringArrays: false,\n deps: false,\n coords: true,\n })\n );\n }\n const journeyExports = await Promise.all(exportPromises);\n stopProgressIndicator(\n spinnerId,\n 'Retrieved details of all journeys.',\n 'success'\n );\n const table = createTable([\n 'Name',\n 'Status',\n 'Classification',\n 'Tags',\n ]);\n for (const journeyExport of journeyExports) {\n table.push([\n `${journeyExport.tree._id}`,\n journeyExport.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n getJourneyClassification(journeyExport).join(', '),\n journeyExport.tree.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyExport.tree.uiConfig.categories).join(\n ', '\n ),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n 'Error retrieving details of all journeys.',\n 'fail'\n );\n printMessage(error.response.data, 'error');\n }\n }\n }\n } catch (error) {\n printMessage(error.response?.data, 'error');\n }\n return journeys;\n}\n\n/**\n * Export journey by id/name to file\n * @param {string} journeyId journey id/name\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneyToFile(\n journeyId: string,\n file: string,\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<void> {\n debugMessage(`exportJourneyToFile: start`);\n const verbose = state.getVerbose();\n if (!file) {\n file = getTypedFilename(journeyId, 'journey');\n }\n const filePath = getFilePath(file, true);\n let spinnerId: string;\n if (!verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n try {\n const fileData: SingleTreeExportInterface = await exportJourney(\n journeyId,\n options\n );\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n saveJsonToFile(fileData, filePath, includeMeta);\n stopProgressIndicator(\n spinnerId,\n `Exported ${journeyId['brightCyan']} to ${filePath['brightCyan']}.`,\n 'success'\n );\n } catch (error) {\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n stopProgressIndicator(\n spinnerId,\n `Error exporting journey ${journeyId}: ${error}`,\n 'fail'\n );\n }\n}\n\n/**\n * Export all journeys to file\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFile(\n file: string,\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<void> {\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');\n }\n const filePath = getFilePath(file, true);\n const fileData: MultiTreeExportInterface = await exportJourneys(options);\n saveJsonToFile(fileData, filePath, includeMeta);\n}\n\n/**\n * Export all journeys to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFiles(\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<void> {\n const journeysExport = await exportJourneys(options);\n const trees = Object.entries(journeysExport.trees);\n for (const [treeId, treeValue] of trees) {\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Saving ${treeId}...`\n );\n const file = getFilePath(getTypedFilename(`${treeId}`, 'journey'), true);\n treeValue['meta'] = journeysExport.meta;\n try {\n updateProgressIndicator(indicatorId, `Saving ${treeId} to ${file}`);\n saveJsonToFile(treeValue, file, includeMeta);\n stopProgressIndicator(indicatorId, `${treeId} saved to ${file}`);\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error saving ${treeId} to ${file}`);\n }\n }\n}\n\n/**\n * Import a journey from file\n * @param {string} journeyId journey id/name\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneyFromFile(\n journeyId: string,\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = JSON.parse(data);\n // check if this is a file with multiple trees and get journey by id\n if (journeyData.trees && journeyData.trees[journeyId]) {\n journeyData = journeyData.trees[journeyId];\n } else if (journeyData.trees) {\n journeyData = null;\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId === journeyData.tree._id) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const indicatorId1 = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n indicatorId1,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let indicatorId2: string;\n if (!verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n indicatorId2,\n `Imported ${journeyId}.`,\n 'success'\n );\n } catch (importError) {\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId2, `${importError}`, 'fail');\n }\n } else {\n stopProgressIndicator(indicatorId1, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n // end dependency resolution for single tree import\n } else {\n const indicatorId3 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId3, `${journeyId} not found!`, 'fail');\n }\n } catch (error) {\n printMessage(`Error importing journey ${journeyId}: ${error}`, 'error');\n }\n}\n\n/**\n * Import first journey from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importFirstJourneyFromFile(\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = cloneDeep(JSON.parse(data));\n let journeyId = null;\n // single tree\n if (journeyData.tree) {\n journeyId = cloneDeep(journeyData.tree._id);\n }\n // multiple trees, so get the first tree\n else if (journeyData.trees) {\n for (const treeId in journeyData.trees) {\n if (Object.hasOwnProperty.call(journeyData.trees, treeId)) {\n journeyId = treeId;\n journeyData = journeyData.trees[treeId];\n break;\n }\n }\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const depSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n depSpinnerId,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let importSpinnerId: string;\n if (!verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n importSpinnerId,\n `Imported ${journeyId}.`,\n 'success'\n );\n } catch (importError) {\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(importSpinnerId, `${importError}`, 'fail');\n }\n } else {\n stopProgressIndicator(depSpinnerId, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n } else {\n const importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing...`\n );\n stopProgressIndicator(importSpinnerId, `No journeys found!`, 'fail');\n }\n // end dependency resolution for single tree import\n } catch (error) {\n printMessage(`Error importing first journey: ${error}`, 'error');\n }\n}\n\n/**\n * Import all journeys from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFile(\n file: string,\n options: TreeImportOptions\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n try {\n const fileData = JSON.parse(data);\n await importJourneys(fileData, options);\n } catch (error) {\n if (error.name === 'UnresolvedDependenciesError') {\n for (const journey of Object.keys(error.unresolvedJourneys)) {\n printMessage({\n message: ` - ${journey} requires ${error.unresolvedJourneys[journey]}`,\n type: 'info',\n state,\n });\n }\n } else {\n printMessage(`${error.message}`, 'error');\n }\n }\n } catch (error) {\n printMessage(`Error importing journeys: ${error}`, 'error');\n }\n}\n\n/**\n * Import all journeys from separate files\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFiles(options: TreeImportOptions) {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.journey.json'))\n .map((name) => getFilePath(name));\n const allJourneysData = { trees: {} };\n for (const file of jsonFiles) {\n const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));\n allJourneysData.trees[journeyData.tree._id] = journeyData;\n }\n try {\n await importJourneys(allJourneysData as MultiTreeExportInterface, options);\n } catch (error) {\n printMessage(`${error.response?.data?.message || error.message}`, 'error');\n }\n}\n\n/**\n * Get journey classification\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassification(\n journey: SingleTreeExportInterface\n): JourneyClassificationType[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return it['brightGreen'];\n\n case 'cloud':\n return it['brightMagenta'];\n\n case 'custom':\n return it['brightRed'];\n\n case 'premium':\n return it['brightYellow'];\n }\n });\n}\n\n/**\n * Get journey classification in markdown\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassificationMd(\n journey: SingleTreeExportInterface\n): string[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return `:green_circle: \\`${it}\\``;\n\n case 'cloud':\n return `:purple_circle: \\`${it}\\``;\n\n case 'custom':\n return `:red_circle: \\`${it}\\``;\n\n case 'premium':\n return `:yellow_circle: \\`${it}\\``;\n }\n });\n}\n\n/**\n * Get a one-line description of the tree object\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(treeObj: TreeSkeleton): string {\n const description = `[${treeObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get a one-line description of the tree object in markdown\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescriptionMd(treeObj: TreeSkeleton): string {\n const description = `${treeObj._id}`;\n return description;\n}\n\n/**\n * Helper function to render a nested list of dependent trees\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendents(\n descendents: TreeDependencyMapInterface,\n depth = 0\n) {\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n printMessage(\n `\\nInner Tree Dependencies (${Object.values(descendents)[0].length}):`,\n 'data'\n );\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n printMessage(`${indent}- ${tree['brightCyan']}`, 'data');\n for (const descendent of descendents[tree]) {\n describeTreeDescendents(descendent, depth + 1);\n }\n }\n}\n\n/**\n * Helper function to render a nested list of dependent trees in markdown\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendentsMd(\n descendents: TreeDependencyMapInterface,\n depth = 0\n): string {\n let markdown = '';\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n markdown += `## Inner Tree Dependencies (${\n Object.values(descendents)[0].length\n })\\n`;\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n markdown += `${indent}- ${tree}\\n`;\n for (const descendent of descendents[tree]) {\n markdown += describeTreeDescendentsMd(descendent, depth + 1);\n }\n return markdown;\n }\n return markdown;\n}\n\n/**\n * Describe a journey:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourney(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n): Promise<void> {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(`${getOneLineDescription(journeyData.tree)}`, 'data');\n printMessage(Array(`[${journeyData.tree._id}]`['length']).fill('=').join(''));\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Status\n printMessage(\n `\\nStatus\\n${\n journeyData.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen']\n }`\n );\n\n // Classification\n if (state.getAmVersion()) {\n printMessage(\n `\\nClassification\\n${getJourneyClassification(journeyData).join(', ')}`,\n 'data'\n );\n }\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage('\\nCategories/Tags', 'data');\n printMessage(\n `${JSON.parse(journeyData.tree.uiConfig.categories).join(', ')}`,\n 'data'\n );\n }\n\n // Dependency Tree\n try {\n const descendents = await getTreeDescendents(\n journeyData,\n resolveTreeExport\n );\n describeTreeDescendents(descendents);\n } catch (error) {\n printMessage(`Error resolving inner tree dependencies:`, 'error');\n printMessage(error.stack, 'error');\n }\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `\\nNode Types (${Object.entries(nodeTypeMap).length}):`,\n 'data'\n );\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `- ${String(count)} [${\n nodeType['brightCyan']\n }] (${Node.getNodeClassification(nodeType).join(', ')})`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`\\nNodes (${Object.entries(allNodes).length}):`, 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `- ${Node.getOneLineDescription(\n nodeObj,\n getNodeRef(nodeObj, journeyData)\n )}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`\\nThemes (${journeyData.themes.length}):`, 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`- ${Theme.getOneLineDescription(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `\\nScripts (${Object.entries(journeyData.scripts).length}):`,\n 'data'\n );\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`- ${Script.getOneLineDescription(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `\\nEmail Templates (${\n Object.entries(journeyData.emailTemplates).length\n }):`,\n 'data'\n );\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(\n `- ${EmailTemplate.getOneLineDescription(templateData)}`,\n 'data'\n );\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `\\nSocial Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n }):`,\n 'data'\n );\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`- ${Idp.getOneLineDescription(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `\\nSAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n }):`,\n 'data'\n );\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(\n `- ${Saml2.getOneLineDescription(entityProviderData)}`,\n 'data'\n );\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `\\nSAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n }):`,\n 'data'\n );\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(\n `- ${CirclesOfTrust.getOneLineDescription(cotData)}`,\n 'data'\n );\n }\n }\n}\n\n/**\n * Describe a journey in markdown:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourneyMd(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n) {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(\n `# ${getOneLineDescriptionMd(journeyData.tree)} - ${\n journeyData.tree.enabled === false\n ? ':o: `disabled`'\n : ':white_check_mark: `enabled`'\n }, ${getJourneyClassificationMd(journeyData).join(', ')}`,\n 'data'\n );\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage(\n `\\`${JSON.parse(journeyData.tree.uiConfig.categories).join('`, `')}\\``,\n 'data'\n );\n }\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Journey image\n printMessage(`\\n[![](./${journeyData.tree._id}.png)]()\\n`, 'data');\n\n // Dependency Tree\n const descendents = await getTreeDescendents(journeyData, resolveTreeExport);\n printMessage(describeTreeDescendentsMd(descendents), 'data');\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `## Node Types (${Object.entries(nodeTypeMap).length})`,\n 'data'\n );\n printMessage('| Count | Type | Classification |', 'data');\n printMessage('| -----:| ---- | -------------- |', 'data');\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(\n nodeType\n ).join('<br>')} |`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');\n printMessage(Node.getTableHeaderMd(), 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`## Themes (${journeyData.themes.length})`, 'data');\n printMessage(Theme.getTableHeaderMd(), 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `## Scripts (${Object.entries(journeyData.scripts).length})`,\n 'data'\n );\n printMessage(Script.getTableHeaderMd(), 'data');\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `## Email Templates (${\n Object.entries(journeyData.emailTemplates).length\n })`,\n 'data'\n );\n printMessage(EmailTemplate.getTableHeaderMd(), 'data');\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `## Social Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n })`,\n 'data'\n );\n printMessage(Idp.getTableHeaderMd(), 'data');\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `## SAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n })`,\n 'data'\n );\n printMessage(Saml2.getTableHeaderMd(), 'data');\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `## SAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n })`,\n 'data'\n );\n printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');\n }\n }\n}\n\nexport async function enableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Enabling journey ${journeyId}...`\n );\n if (_enableJourney(journeyId)) {\n stopProgressIndicator(\n indicatorId,\n `Enabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n indicatorId,\n `Error enabling journey ${journeyId}`,\n 'fail'\n );\n return false;\n }\n}\n\nexport async function disableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Disabling journey ${journeyId}...`\n );\n if (_disableJourney(journeyId)) {\n stopProgressIndicator(\n indicatorId,\n `Disabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n indicatorId,\n `Error disabling journey ${journeyId}`,\n 'fail'\n );\n return false;\n }\n}\n"],"mappings":"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"}