@rockcarver/frodo-lib 2.0.0-54 → 2.0.0-55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build.zip +0 -0
- package/cjs/utils/ExportImportUtils.js +56 -19
- package/cjs/utils/ExportImportUtils.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +48 -14
- package/esm/utils/ExportImportUtils.js.map +1 -1
- package/package.json +1 -1
- package/types/utils/ExportImportUtils.d.ts +32 -5
- package/types/utils/ExportImportUtils.d.ts.map +1 -1
package/build.zip
CHANGED
|
Binary file
|
|
@@ -18,8 +18,9 @@ exports.getTypedFilename = getTypedFilename;
|
|
|
18
18
|
exports.getWorkingDirectory = getWorkingDirectory;
|
|
19
19
|
exports.isValidUrl = isValidUrl;
|
|
20
20
|
exports.parseUrl = parseUrl;
|
|
21
|
-
exports.
|
|
21
|
+
exports.readFiles = readFiles;
|
|
22
22
|
exports.saveJsonToFile = saveJsonToFile;
|
|
23
|
+
exports.saveTextToFile = saveTextToFile;
|
|
23
24
|
exports.saveToFile = saveToFile;
|
|
24
25
|
exports.substituteEnvParams = substituteEnvParams;
|
|
25
26
|
exports.titleCase = titleCase;
|
|
@@ -87,11 +88,13 @@ var _default = state => {
|
|
|
87
88
|
});
|
|
88
89
|
},
|
|
89
90
|
saveToFile(type, data, identifier, filename) {
|
|
91
|
+
var includeMeta = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
|
|
90
92
|
return saveToFile({
|
|
91
93
|
type,
|
|
92
94
|
data,
|
|
93
95
|
identifier,
|
|
94
96
|
filename,
|
|
97
|
+
includeMeta,
|
|
95
98
|
state
|
|
96
99
|
});
|
|
97
100
|
},
|
|
@@ -104,6 +107,13 @@ var _default = state => {
|
|
|
104
107
|
state
|
|
105
108
|
});
|
|
106
109
|
},
|
|
110
|
+
saveTextToFile(data, filename) {
|
|
111
|
+
return saveTextToFile({
|
|
112
|
+
data,
|
|
113
|
+
filename,
|
|
114
|
+
state
|
|
115
|
+
});
|
|
116
|
+
},
|
|
107
117
|
appendTextToFile(data, filename) {
|
|
108
118
|
return appendTextToFile(data, filename);
|
|
109
119
|
},
|
|
@@ -112,9 +122,9 @@ var _default = state => {
|
|
|
112
122
|
var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : './';
|
|
113
123
|
return findFilesByName(fileName, fast, path);
|
|
114
124
|
},
|
|
115
|
-
|
|
125
|
+
readFiles(directory) {
|
|
116
126
|
return _asyncToGenerator(function* () {
|
|
117
|
-
return
|
|
127
|
+
return readFiles(directory);
|
|
118
128
|
})();
|
|
119
129
|
},
|
|
120
130
|
substituteEnvParams(input, reader) {
|
|
@@ -254,12 +264,10 @@ function saveToFile(_ref5) {
|
|
|
254
264
|
data,
|
|
255
265
|
identifier,
|
|
256
266
|
filename,
|
|
267
|
+
includeMeta,
|
|
257
268
|
state
|
|
258
269
|
} = _ref5;
|
|
259
270
|
var exportData = {};
|
|
260
|
-
exportData['meta'] = getMetadata({
|
|
261
|
-
state
|
|
262
|
-
});
|
|
263
271
|
exportData[type] = {};
|
|
264
272
|
if (Array.isArray(data)) {
|
|
265
273
|
data.forEach(element => {
|
|
@@ -268,13 +276,19 @@ function saveToFile(_ref5) {
|
|
|
268
276
|
} else {
|
|
269
277
|
exportData[type][data[identifier]] = data;
|
|
270
278
|
}
|
|
271
|
-
|
|
279
|
+
saveJsonToFile({
|
|
280
|
+
data: exportData,
|
|
281
|
+
includeMeta,
|
|
282
|
+
filename,
|
|
283
|
+
state
|
|
284
|
+
});
|
|
272
285
|
}
|
|
273
286
|
|
|
274
287
|
/**
|
|
275
288
|
* Save JSON object to file
|
|
276
|
-
* @param {
|
|
289
|
+
* @param {object} data data object
|
|
277
290
|
* @param {string} filename file name
|
|
291
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
278
292
|
* @return {boolean} true if successful, false otherwise
|
|
279
293
|
*/
|
|
280
294
|
function saveJsonToFile(_ref6) {
|
|
@@ -285,12 +299,32 @@ function saveJsonToFile(_ref6) {
|
|
|
285
299
|
state
|
|
286
300
|
} = _ref6;
|
|
287
301
|
var exportData = data;
|
|
288
|
-
if (includeMeta) exportData['meta'] = getMetadata({
|
|
302
|
+
if (includeMeta && !exportData['meta']) exportData['meta'] = getMetadata({
|
|
289
303
|
state
|
|
290
304
|
});
|
|
305
|
+
if (!includeMeta && exportData['meta']) delete exportData['meta'];
|
|
291
306
|
(0, _JsonUtils.deleteDeepByKey)(exportData, '_rev');
|
|
307
|
+
return saveTextToFile({
|
|
308
|
+
data: (0, _JsonUtils.stringify)(exportData),
|
|
309
|
+
filename,
|
|
310
|
+
state
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Save text data to file
|
|
316
|
+
* @param data text data
|
|
317
|
+
* @param filename file name
|
|
318
|
+
* @return true if successful, false otherwise
|
|
319
|
+
*/
|
|
320
|
+
function saveTextToFile(_ref7) {
|
|
321
|
+
var {
|
|
322
|
+
data,
|
|
323
|
+
filename,
|
|
324
|
+
state
|
|
325
|
+
} = _ref7;
|
|
292
326
|
try {
|
|
293
|
-
_fs.default.writeFileSync(filename,
|
|
327
|
+
_fs.default.writeFileSync(filename, data);
|
|
294
328
|
return true;
|
|
295
329
|
} catch (err) {
|
|
296
330
|
(0, _Console.printMessage)({
|
|
@@ -344,28 +378,31 @@ function findFilesByName(fileName) {
|
|
|
344
378
|
* @param directory directory to search
|
|
345
379
|
* @returns list of files
|
|
346
380
|
*/
|
|
347
|
-
function
|
|
348
|
-
return
|
|
381
|
+
function readFiles(_x) {
|
|
382
|
+
return _readFiles.apply(this, arguments);
|
|
349
383
|
}
|
|
350
|
-
function
|
|
351
|
-
|
|
384
|
+
function _readFiles() {
|
|
385
|
+
_readFiles = _asyncToGenerator(function* (directory) {
|
|
352
386
|
var items = yield (0, _promises.readdir)(directory);
|
|
353
387
|
var filePathsNested = yield Promise.all(items.map( /*#__PURE__*/function () {
|
|
354
|
-
var
|
|
388
|
+
var _ref8 = _asyncToGenerator(function* (entity) {
|
|
355
389
|
var path = (0, _path.join)(directory, entity);
|
|
356
390
|
var isDirectory = (yield (0, _promises.lstat)(path)).isDirectory();
|
|
357
391
|
if (isDirectory) {
|
|
358
|
-
return
|
|
392
|
+
return readFiles(path);
|
|
359
393
|
}
|
|
360
|
-
return
|
|
394
|
+
return {
|
|
395
|
+
path,
|
|
396
|
+
content: yield (0, _promises.readFile)(path, 'utf8')
|
|
397
|
+
};
|
|
361
398
|
});
|
|
362
399
|
return function (_x4) {
|
|
363
|
-
return
|
|
400
|
+
return _ref8.apply(this, arguments);
|
|
364
401
|
};
|
|
365
402
|
}()));
|
|
366
403
|
return filePathsNested.flat();
|
|
367
404
|
});
|
|
368
|
-
return
|
|
405
|
+
return _readFiles.apply(this, arguments);
|
|
369
406
|
}
|
|
370
407
|
function substituteEnvParams(input, reader) {
|
|
371
408
|
reader.each((key, value) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportImportUtils.js","names":["_fs","_interopRequireDefault","require","_promises","_path","_replaceall","_slugify","_Constants","_Base64Utils","_Console","_JsonUtils","obj","__esModule","default","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","_default","state","getMetadata","titleCase","input","getRealmString","convertBase64TextToArray","b64text","convertBase64UrlTextToArray","b64UTF8Text","convertTextArrayToBase64","textArray","convertTextArrayToBase64Url","validateImport","metadata","getTypedFilename","name","type","suffix","length","getWorkingDirectory","mkdirs","getFilePath","fileName","saveToFile","data","identifier","filename","saveJsonToFile","includeMeta","appendTextToFile","findFilesByName","fast","path","readFilesRecursive","directory","substituteEnvParams","reader","unSubstituteEnvParams","parseUrl","href","isValidUrl","urlString","exports","_ref","origin","getHost","originAmVersion","getAmVersion","exportedBy","getUsername","exportDate","Date","toISOString","exportTool","Constants","FRODO_METADATA_ID","exportToolVersion","getFrodoVersion","str","toString","splitStr","toLowerCase","split","i","charAt","toUpperCase","slice","join","_ref2","realm","getRealm","reduce","result","item","concat","arrayOut","plainText","decode","replace","decodeBase64Url","joinedText","b64encodedScript","encode","encodeBase64Url","slug","slugify","remove","_ref3","wd","getDirectory","fs","existsSync","debugMessage","message","mkdirSync","recursive","_ref4","_ref5","exportData","Array","isArray","forEach","element","writeFileSync","stringify","_ref6","deleteDeepByKey","printMessage","appendFileSync","entries","readdirSync","encoding","withFileTypes","files","filter","entry","isDirectory","file","map","folders","folder","push","_x","_readFilesRecursive","items","readdir","filePathsNested","all","_ref7","entity","lstat","_x4","flat","each","replaceall","m","match","r","hash","host","hostname","pathname","port","protocol","search","username","password","searchParam","query","indexOf","substr","vars","pair","decodeURIComponent","Boolean","URL","exportWithErrorHandling","_x2","_x3","_exportWithErrorHandling","exportFunction","parameters","e"],"sources":["../../src/utils/ExportImportUtils.ts"],"sourcesContent":["import fs from 'fs';\nimport { lstat, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport { Reader } from 'properties-reader';\nimport replaceall from 'replaceall';\nimport slugify from 'slugify';\n\nimport { ExportMetaData } from '../ops/OpsTypes';\nimport Constants from '../shared/Constants';\nimport { State } from '../shared/State';\nimport {\n decode,\n decodeBase64Url,\n encode,\n encodeBase64Url,\n} from './Base64Utils';\nimport { debugMessage, printMessage } from './Console';\nimport { deleteDeepByKey, stringify } from './JsonUtils';\n\nexport type ExportImport = {\n getMetadata(): ExportMetaData;\n titleCase(input: string): string;\n getRealmString(): string;\n convertBase64TextToArray(b64text: string): any[];\n convertBase64UrlTextToArray(b64UTF8Text: string): any[];\n convertTextArrayToBase64(textArray: string[]): string;\n convertTextArrayToBase64Url(textArray: string[]): any;\n validateImport(metadata: any): boolean;\n getTypedFilename(name: string, type: string, suffix?: string): string;\n getWorkingDirectory(mkdirs?: boolean): string;\n getFilePath(fileName: string, mkdirs?: boolean): string;\n saveToFile(\n type: string,\n data: object,\n identifier: string,\n filename: string\n ): void;\n /**\n * Save JSON object to file\n * @param {Object} data data object\n * @param {String} filename file name\n * @return {boolean} true if successful, false otherwise\n */\n saveJsonToFile(\n data: object,\n filename: string,\n includeMeta?: boolean\n ): boolean;\n /**\n * Append text data to file\n * @param {String} data text data\n * @param {String} filename file name\n */\n appendTextToFile(data: string, filename: string): void;\n /**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\n findFilesByName(fileName: string, fast?: boolean, path?: string): string[];\n /**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\n readFilesRecursive(directory: string): Promise<string[]>;\n\n substituteEnvParams(input: string, reader: Reader): string;\n\n unSubstituteEnvParams(input: string, reader: Reader): string;\n /*\n * Parse a URL into its components and make them easily accessible by name\n *\n * Use in a Scripte Decision Node Script as follows:\n * var referer = parseUrl(requestHeaders.get(\"referer\").get(0));\n * var origin = referer.origin;\n *\n * e.g.: https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/\n * {\n * hash: '#/',\n * host: 'openam-volker-dev.forgeblocks.com',\n * hostname: 'openam-volker-dev.forgeblocks.com',\n * href: 'https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/',\n * origin: 'https://openam-volker-dev.forgeblocks.com',\n * pathname: '/am/XUI/',\n * port: '',\n * protocol: 'https',\n * search: '?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim',\n * username: '',\n * password: '',\n * searchParam: {\n * realm: '/bravo',\n * authIndexType: 'service',\n * authIndexValue: 'InitiateOwnerClaim'\n * }\n * }\n */\n parseUrl(href: string): any;\n /**\n * Check if a string is a valid URL\n * @param {string} urlString input string to be evaluated\n * @returns {boolean} true if a valid URL, false otherwise\n */\n isValidUrl(urlString: string): boolean;\n};\n\nexport default (state: State): ExportImport => {\n return {\n getMetadata(): ExportMetaData {\n return getMetadata({ state });\n },\n titleCase(input: string) {\n return titleCase(input);\n },\n getRealmString() {\n return getRealmString({ state });\n },\n convertBase64TextToArray(b64text: string) {\n return convertBase64TextToArray(b64text);\n },\n convertBase64UrlTextToArray(b64UTF8Text: string) {\n return convertBase64UrlTextToArray(b64UTF8Text);\n },\n convertTextArrayToBase64(textArray: string[]) {\n return convertTextArrayToBase64(textArray);\n },\n convertTextArrayToBase64Url(textArray: string[]) {\n return convertTextArrayToBase64Url(textArray);\n },\n validateImport(metadata): boolean {\n return validateImport(metadata);\n },\n getTypedFilename(name: string, type: string, suffix = 'json') {\n return getTypedFilename(name, type, suffix);\n },\n getWorkingDirectory(mkdirs = false) {\n return getWorkingDirectory({ mkdirs, state });\n },\n getFilePath(fileName: string, mkdirs = false): string {\n return getFilePath({ fileName, mkdirs, state });\n },\n saveToFile(\n type: string,\n data: object,\n identifier: string,\n filename: string\n ) {\n return saveToFile({\n type,\n data,\n identifier,\n filename,\n state,\n });\n },\n saveJsonToFile(\n data: object,\n filename: string,\n includeMeta = true\n ): boolean {\n return saveJsonToFile({ data, filename, includeMeta, state });\n },\n appendTextToFile(data: string, filename: string) {\n return appendTextToFile(data, filename);\n },\n findFilesByName(fileName: string, fast = true, path = './'): string[] {\n return findFilesByName(fileName, fast, path);\n },\n async readFilesRecursive(directory: string): Promise<string[]> {\n return readFilesRecursive(directory);\n },\n substituteEnvParams(input: string, reader: Reader): string {\n return substituteEnvParams(input, reader);\n },\n unSubstituteEnvParams(input: string, reader: Reader): string {\n return unSubstituteEnvParams(input, reader);\n },\n parseUrl(href: string): any {\n return parseUrl(href);\n },\n isValidUrl(urlString: string): boolean {\n return isValidUrl(urlString);\n },\n };\n};\n\nexport function getMetadata({ state }: { state: State }): ExportMetaData {\n const metadata: ExportMetaData = {\n origin: state.getHost(),\n originAmVersion: state.getAmVersion(),\n exportedBy: state.getUsername(),\n exportDate: new Date().toISOString(),\n exportTool: Constants.FRODO_METADATA_ID,\n exportToolVersion: state.getFrodoVersion(),\n };\n return metadata;\n}\n\n/*\n * Output str in title case\n *\n * e.g.: 'ALL UPPERCASE AND all lowercase' = 'All Uppercase And All Lowercase'\n */\nexport function titleCase(input: string) {\n const str = input.toString();\n const splitStr = str.toLowerCase().split(' ');\n for (let i = 0; i < splitStr.length; i += 1) {\n splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].slice(1);\n }\n return splitStr.join(' ');\n}\n\nexport function getRealmString({ state }: { state: State }) {\n const realm = state.getRealm();\n return realm\n .split('/')\n .reduce((result, item) => `${result}${titleCase(item)}`, '');\n}\n\nexport function convertBase64TextToArray(b64text: string) {\n let arrayOut = [];\n let plainText = decode(b64text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertBase64UrlTextToArray(b64UTF8Text: string) {\n let arrayOut = [];\n let plainText = decodeBase64Url(b64UTF8Text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertTextArrayToBase64(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encode(joinedText);\n return b64encodedScript;\n}\n\nexport function convertTextArrayToBase64Url(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encodeBase64Url(joinedText);\n return b64encodedScript;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function validateImport(metadata): boolean {\n return metadata || true;\n}\n\nexport function getTypedFilename(name: string, type: string, suffix = 'json') {\n const slug = slugify(name.replace(/^http(s?):\\/\\//, ''), {\n remove: /[^\\w\\s$*_+~.()'\"!\\-@]+/g,\n });\n return `${slug}.${type}.${suffix}`;\n}\n\nexport function getWorkingDirectory({\n mkdirs = false,\n state,\n}: {\n mkdirs: boolean;\n state: State;\n}) {\n let wd = '.';\n if (state.getDirectory()) {\n wd = state.getDirectory().replace(/\\/$/, '');\n // create directory if it doesn't exist\n if (mkdirs && !fs.existsSync(wd)) {\n debugMessage({\n message: `ExportImportUtils.getWorkingDirectory: creating directory '${wd}'`,\n state,\n });\n fs.mkdirSync(wd, { recursive: true });\n }\n }\n return wd;\n}\n\n/**\n * Get the file path to a file in the working directory. If working directory does not exist, it will return the fileName as the file path.\n * @param fileName The file name\n * @param mkdirs If directories to working directory don't exist, makes the directories if true, and if false does not make the directories. Default: false\n * @return The file path to the file in the working directory\n */\nexport function getFilePath({\n fileName,\n mkdirs = false,\n state,\n}: {\n fileName: string;\n mkdirs: boolean;\n state: State;\n}): string {\n return state.getDirectory()\n ? `${getWorkingDirectory({ mkdirs, state })}/${fileName}`\n : fileName;\n}\n\n/**\n * Save to file\n * @param {any} data data object\n * @param {string} filename file name\n */\nexport function saveToFile({\n type,\n data,\n identifier,\n filename,\n state,\n}: {\n type: string;\n data: object;\n identifier: string;\n filename: string;\n state: State;\n}): void {\n const exportData = {};\n exportData['meta'] = getMetadata({ state });\n exportData[type] = {};\n\n if (Array.isArray(data)) {\n data.forEach((element) => {\n exportData[type][element[identifier]] = element;\n });\n } else {\n exportData[type][data[identifier]] = data;\n }\n fs.writeFileSync(filename, stringify(exportData));\n}\n\n/**\n * Save JSON object to file\n * @param {any} data data object\n * @param {string} filename file name\n * @return {boolean} true if successful, false otherwise\n */\nexport function saveJsonToFile({\n data,\n filename,\n includeMeta = true,\n state,\n}: {\n data: object;\n filename: string;\n includeMeta?: boolean;\n state: State;\n}): boolean {\n const exportData = data;\n if (includeMeta) exportData['meta'] = getMetadata({ state });\n deleteDeepByKey(exportData, '_rev');\n try {\n fs.writeFileSync(filename, stringify(exportData));\n return true;\n } catch (err) {\n printMessage({\n message: `ERROR - can't save ${filename}`,\n type: 'error',\n state,\n });\n return false;\n }\n}\n\n/**\n * Append text data to file\n * @param {string} data text data\n * @param {string} filename file name\n */\nexport function appendTextToFile(data: string, filename: string) {\n fs.appendFileSync(filename, data);\n}\n\n/**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\nexport function findFilesByName(\n fileName: string,\n fast = true,\n path = './'\n): string[] {\n const entries = fs.readdirSync(path, {\n encoding: 'utf8',\n withFileTypes: true,\n });\n\n // Get files within the current directory and add a path key to the file objects\n const files: string[] = entries\n .filter((entry) => !entry.isDirectory())\n .filter((file) => file.name === fileName)\n // .map((file) => ({ ...file, path: path + file.name }));\n .map((file) => path + file.name);\n\n if (fast && files.length > 0) return files;\n\n // search sub-folders\n const folders = entries.filter((entry) => entry.isDirectory());\n for (const folder of folders)\n files.push(...findFilesByName(fileName, fast, `${path}${folder.name}/`));\n\n return files;\n}\n\n/**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\nexport async function readFilesRecursive(directory: string): Promise<string[]> {\n const items = await readdir(directory);\n\n const filePathsNested = await Promise.all(\n items.map(async (entity) => {\n const path = join(directory, entity);\n const isDirectory = (await lstat(path)).isDirectory();\n\n if (isDirectory) {\n return readFilesRecursive(path);\n }\n return path;\n })\n );\n\n return filePathsNested.flat();\n}\n\nexport function substituteEnvParams(input: string, reader: Reader): string {\n reader.each((key, value) => {\n input = replaceall(value, `\\${${key}}`, input);\n });\n return input;\n}\n\nexport function unSubstituteEnvParams(input: string, reader: Reader): string {\n reader.each((key, value) => {\n input = replaceall(`\\${${key}}`, value, input);\n });\n return input;\n}\n\n/*\n * Parse a URL into its components and make them easily accessible by name\n *\n * Use in a Scripte Decision Node Script as follows:\n * var referer = parseUrl(requestHeaders.get(\"referer\").get(0));\n * var origin = referer.origin;\n *\n * e.g.: https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/\n * {\n * hash: '#/',\n * host: 'openam-volker-dev.forgeblocks.com',\n * hostname: 'openam-volker-dev.forgeblocks.com',\n * href: 'https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/',\n * origin: 'https://openam-volker-dev.forgeblocks.com',\n * pathname: '/am/XUI/',\n * port: '',\n * protocol: 'https',\n * search: '?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim',\n * username: '',\n * password: '',\n * searchParam: {\n * realm: '/bravo',\n * authIndexType: 'service',\n * authIndexValue: 'InitiateOwnerClaim'\n * }\n * }\n */\nexport function parseUrl(href: string): any {\n const m = href.match(\n /^(([^:/?#]+):?(?:\\/\\/((?:([^/?#:]*):([^/?#:]*)@)?([^/?#:]*)(?::([^/?#:]*))?)))?([^?#]*)(\\?[^#]*)?(#.*)?$/\n ),\n r = {\n hash: m[10] || '',\n host: m[3] || '',\n hostname: m[6] || '',\n href: m[0] || '',\n origin: m[1] || '',\n pathname: m[8] || (m[1] ? '/' : ''),\n port: m[7] || '',\n protocol: m[2] || '',\n search: m[9] || '',\n username: m[4] || '',\n password: m[5] || '',\n searchParam: {}, // { realm: '/bravo',\n // authIndexType: 'service',\n // authIndexValue: 'InitiateOwnerClaim' }\n };\n if (r.protocol.length == 2) {\n r.protocol = 'file:///' + r.protocol.toUpperCase();\n r.origin = r.protocol + '//' + r.host;\n }\n if (r.search.length > 2) {\n const query = r.search.indexOf('?') === 0 ? r.search.substr(1) : r.search;\n const vars = query.split('&');\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split('=');\n r.searchParam[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n }\n r.href = r.origin + r.pathname + r.search + r.hash;\n return r;\n}\n\n/**\n * Check if a string is a valid URL\n * @param {string} urlString input string to be evaluated\n * @returns {boolean} true if a valid URL, false otherwise\n */\nexport function isValidUrl(urlString: string): boolean {\n try {\n return Boolean(new URL(urlString));\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Performs an export given a function with its parameters with custom error handling that will just print the error if one is thrown and return null.\n * @param exportFunction The export function.\n * @param parameters The parameters to call the export function with. By default, it is { state }.\n * @returns {Promise<R | null>} Returns the result of the export function, or null if an error is thrown\n */\nexport async function exportWithErrorHandling<P extends { state: State }, R>(\n exportFunction: (params: P) => Promise<R>,\n parameters: P\n): Promise<R | null> {\n try {\n return await exportFunction(parameters);\n } catch (e) {\n printMessage({\n message: `ERROR: ${e.message}`,\n type: 'error',\n state: parameters.state,\n });\n return null;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AAA8B,IAAAK,UAAA,GAAAN,sBAAA,CAAAC,OAAA;AAAA,IAAAM,YAAA,GAAAN,OAAA;AAAA,IAAAO,QAAA,GAAAP,OAAA;AAAA,IAAAQ,UAAA,GAAAR,OAAA;AAAA,SAAAD,uBAAAU,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,mBAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,EAAAC,GAAA,EAAAC,GAAA,cAAAC,IAAA,GAAAP,GAAA,CAAAK,GAAA,EAAAC,GAAA,OAAAE,KAAA,GAAAD,IAAA,CAAAC,KAAA,WAAAC,KAAA,IAAAP,MAAA,CAAAO,KAAA,iBAAAF,IAAA,CAAAG,IAAA,IAAAT,OAAA,CAAAO,KAAA,YAAAG,OAAA,CAAAV,OAAA,CAAAO,KAAA,EAAAI,IAAA,CAAAT,KAAA,EAAAC,MAAA;AAAA,SAAAS,kBAAAC,EAAA,6BAAAC,IAAA,SAAAC,IAAA,GAAAC,SAAA,aAAAN,OAAA,WAAAV,OAAA,EAAAC,MAAA,QAAAF,GAAA,GAAAc,EAAA,CAAAI,KAAA,CAAAH,IAAA,EAAAC,IAAA,YAAAb,MAAAK,KAAA,IAAAT,kBAAA,CAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,UAAAI,KAAA,cAAAJ,OAAAe,GAAA,IAAApB,kBAAA,CAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,WAAAe,GAAA,KAAAhB,KAAA,CAAAiB,SAAA;AAAA,IAAAC,QAAA,GAwGdC,KAAY,IAAmB;EAC7C,OAAO;IACLC,WAAWA,CAAA,EAAmB;MAC5B,OAAOA,WAAW,CAAC;QAAED;MAAM,CAAC,CAAC;IAC/B,CAAC;IACDE,SAASA,CAACC,KAAa,EAAE;MACvB,OAAOD,SAAS,CAACC,KAAK,CAAC;IACzB,CAAC;IACDC,cAAcA,CAAA,EAAG;MACf,OAAOA,cAAc,CAAC;QAAEJ;MAAM,CAAC,CAAC;IAClC,CAAC;IACDK,wBAAwBA,CAACC,OAAe,EAAE;MACxC,OAAOD,wBAAwB,CAACC,OAAO,CAAC;IAC1C,CAAC;IACDC,2BAA2BA,CAACC,WAAmB,EAAE;MAC/C,OAAOD,2BAA2B,CAACC,WAAW,CAAC;IACjD,CAAC;IACDC,wBAAwBA,CAACC,SAAmB,EAAE;MAC5C,OAAOD,wBAAwB,CAACC,SAAS,CAAC;IAC5C,CAAC;IACDC,2BAA2BA,CAACD,SAAmB,EAAE;MAC/C,OAAOC,2BAA2B,CAACD,SAAS,CAAC;IAC/C,CAAC;IACDE,cAAcA,CAACC,QAAQ,EAAW;MAChC,OAAOD,cAAc,CAACC,QAAQ,CAAC;IACjC,CAAC;IACDC,gBAAgBA,CAACC,IAAY,EAAEC,IAAY,EAAmB;MAAA,IAAjBC,MAAM,GAAAtB,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,MAAM;MAC1D,OAAOmB,gBAAgB,CAACC,IAAI,EAAEC,IAAI,EAAEC,MAAM,CAAC;IAC7C,CAAC;IACDE,mBAAmBA,CAAA,EAAiB;MAAA,IAAhBC,MAAM,GAAAzB,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,KAAK;MAChC,OAAOwB,mBAAmB,CAAC;QAAEC,MAAM;QAAEpB;MAAM,CAAC,CAAC;IAC/C,CAAC;IACDqB,WAAWA,CAACC,QAAgB,EAA0B;MAAA,IAAxBF,MAAM,GAAAzB,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,KAAK;MAC1C,OAAO0B,WAAW,CAAC;QAAEC,QAAQ;QAAEF,MAAM;QAAEpB;MAAM,CAAC,CAAC;IACjD,CAAC;IACDuB,UAAUA,CACRP,IAAY,EACZQ,IAAY,EACZC,UAAkB,EAClBC,QAAgB,EAChB;MACA,OAAOH,UAAU,CAAC;QAChBP,IAAI;QACJQ,IAAI;QACJC,UAAU;QACVC,QAAQ;QACR1B;MACF,CAAC,CAAC;IACJ,CAAC;IACD2B,cAAcA,CACZH,IAAY,EACZE,QAAgB,EAEP;MAAA,IADTE,WAAW,GAAAjC,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,IAAI;MAElB,OAAOgC,cAAc,CAAC;QAAEH,IAAI;QAAEE,QAAQ;QAAEE,WAAW;QAAE5B;MAAM,CAAC,CAAC;IAC/D,CAAC;IACD6B,gBAAgBA,CAACL,IAAY,EAAEE,QAAgB,EAAE;MAC/C,OAAOG,gBAAgB,CAACL,IAAI,EAAEE,QAAQ,CAAC;IACzC,CAAC;IACDI,eAAeA,CAACR,QAAgB,EAAsC;MAAA,IAApCS,IAAI,GAAApC,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,IAAI;MAAA,IAAEqC,IAAI,GAAArC,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,IAAI;MACxD,OAAOmC,eAAe,CAACR,QAAQ,EAAES,IAAI,EAAEC,IAAI,CAAC;IAC9C,CAAC;IACKC,kBAAkBA,CAACC,SAAiB,EAAqB;MAAA,OAAA3C,iBAAA;QAC7D,OAAO0C,kBAAkB,CAACC,SAAS,CAAC;MAAC;IACvC,CAAC;IACDC,mBAAmBA,CAAChC,KAAa,EAAEiC,MAAc,EAAU;MACzD,OAAOD,mBAAmB,CAAChC,KAAK,EAAEiC,MAAM,CAAC;IAC3C,CAAC;IACDC,qBAAqBA,CAAClC,KAAa,EAAEiC,MAAc,EAAU;MAC3D,OAAOC,qBAAqB,CAAClC,KAAK,EAAEiC,MAAM,CAAC;IAC7C,CAAC;IACDE,QAAQA,CAACC,IAAY,EAAO;MAC1B,OAAOD,QAAQ,CAACC,IAAI,CAAC;IACvB,CAAC;IACDC,UAAUA,CAACC,SAAiB,EAAW;MACrC,OAAOD,UAAU,CAACC,SAAS,CAAC;IAC9B;EACF,CAAC;AACH,CAAC;AAAAC,OAAA,CAAAlE,OAAA,GAAAuB,QAAA;AAEM,SAASE,WAAWA,CAAA0C,IAAA,EAA8C;EAAA,IAA7C;IAAE3C;EAAwB,CAAC,GAAA2C,IAAA;EACrD,IAAM9B,QAAwB,GAAG;IAC/B+B,MAAM,EAAE5C,KAAK,CAAC6C,OAAO,CAAC,CAAC;IACvBC,eAAe,EAAE9C,KAAK,CAAC+C,YAAY,CAAC,CAAC;IACrCC,UAAU,EAAEhD,KAAK,CAACiD,WAAW,CAAC,CAAC;IAC/BC,UAAU,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IACpCC,UAAU,EAAEC,kBAAS,CAACC,iBAAiB;IACvCC,iBAAiB,EAAExD,KAAK,CAACyD,eAAe,CAAC;EAC3C,CAAC;EACD,OAAO5C,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASX,SAASA,CAACC,KAAa,EAAE;EACvC,IAAMuD,GAAG,GAAGvD,KAAK,CAACwD,QAAQ,CAAC,CAAC;EAC5B,IAAMC,QAAQ,GAAGF,GAAG,CAACG,WAAW,CAAC,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC;EAC7C,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,QAAQ,CAAC1C,MAAM,EAAE6C,CAAC,IAAI,CAAC,EAAE;IAC3CH,QAAQ,CAACG,CAAC,CAAC,GAAGH,QAAQ,CAACG,CAAC,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGL,QAAQ,CAACG,CAAC,CAAC,CAACG,KAAK,CAAC,CAAC,CAAC;EAC1E;EACA,OAAON,QAAQ,CAACO,IAAI,CAAC,GAAG,CAAC;AAC3B;AAEO,SAAS/D,cAAcA,CAAAgE,KAAA,EAA8B;EAAA,IAA7B;IAAEpE;EAAwB,CAAC,GAAAoE,KAAA;EACxD,IAAMC,KAAK,GAAGrE,KAAK,CAACsE,QAAQ,CAAC,CAAC;EAC9B,OAAOD,KAAK,CACTP,KAAK,CAAC,GAAG,CAAC,CACVS,MAAM,CAAC,CAACC,MAAM,EAAEC,IAAI,QAAAC,MAAA,CAAQF,MAAM,EAAAE,MAAA,CAAGxE,SAAS,CAACuE,IAAI,CAAC,CAAE,EAAE,EAAE,CAAC;AAChE;AAEO,SAASpE,wBAAwBA,CAACC,OAAe,EAAE;EACxD,IAAIqE,QAAQ,GAAG,EAAE;EACjB,IAAIC,SAAS,GAAG,IAAAC,mBAAM,EAACvE,OAAO,CAAC;EAC/BsE,SAAS,GAAGA,SAAS,CAACE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;EAC5CH,QAAQ,GAAGC,SAAS,CAACd,KAAK,CAAC,IAAI,CAAC;EAChC,OAAOa,QAAQ;AACjB;AAEO,SAASpE,2BAA2BA,CAACC,WAAmB,EAAE;EAC/D,IAAImE,QAAQ,GAAG,EAAE;EACjB,IAAIC,SAAS,GAAG,IAAAG,4BAAe,EAACvE,WAAW,CAAC;EAC5CoE,SAAS,GAAGA,SAAS,CAACE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;EAC5CH,QAAQ,GAAGC,SAAS,CAACd,KAAK,CAAC,IAAI,CAAC;EAChC,OAAOa,QAAQ;AACjB;AAEO,SAASlE,wBAAwBA,CAACC,SAAmB,EAAE;EAC5D,IAAMsE,UAAU,GAAGtE,SAAS,CAACyD,IAAI,CAAC,IAAI,CAAC;EACvC,IAAMc,gBAAgB,GAAG,IAAAC,mBAAM,EAACF,UAAU,CAAC;EAC3C,OAAOC,gBAAgB;AACzB;AAEO,SAAStE,2BAA2BA,CAACD,SAAmB,EAAE;EAC/D,IAAMsE,UAAU,GAAGtE,SAAS,CAACyD,IAAI,CAAC,IAAI,CAAC;EACvC,IAAMc,gBAAgB,GAAG,IAAAE,4BAAe,EAACH,UAAU,CAAC;EACpD,OAAOC,gBAAgB;AACzB;;AAEA;AACO,SAASrE,cAAcA,CAACC,QAAQ,EAAW;EAChD,OAAOA,QAAQ,IAAI,IAAI;AACzB;AAEO,SAASC,gBAAgBA,CAACC,IAAY,EAAEC,IAAY,EAAmB;EAAA,IAAjBC,MAAM,GAAAtB,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,MAAM;EAC1E,IAAMyF,IAAI,GAAG,IAAAC,gBAAO,EAACtE,IAAI,CAAC+D,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE;IACvDQ,MAAM,EAAE;EACV,CAAC,CAAC;EACF,UAAAZ,MAAA,CAAUU,IAAI,OAAAV,MAAA,CAAI1D,IAAI,OAAA0D,MAAA,CAAIzD,MAAM;AAClC;AAEO,SAASE,mBAAmBA,CAAAoE,KAAA,EAMhC;EAAA,IANiC;IAClCnE,MAAM,GAAG,KAAK;IACdpB;EAIF,CAAC,GAAAuF,KAAA;EACC,IAAIC,EAAE,GAAG,GAAG;EACZ,IAAIxF,KAAK,CAACyF,YAAY,CAAC,CAAC,EAAE;IACxBD,EAAE,GAAGxF,KAAK,CAACyF,YAAY,CAAC,CAAC,CAACX,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAC5C;IACA,IAAI1D,MAAM,IAAI,CAACsE,WAAE,CAACC,UAAU,CAACH,EAAE,CAAC,EAAE;MAChC,IAAAI,qBAAY,EAAC;QACXC,OAAO,gEAAAnB,MAAA,CAAgEc,EAAE,MAAG;QAC5ExF;MACF,CAAC,CAAC;MACF0F,WAAE,CAACI,SAAS,CAACN,EAAE,EAAE;QAAEO,SAAS,EAAE;MAAK,CAAC,CAAC;IACvC;EACF;EACA,OAAOP,EAAE;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASnE,WAAWA,CAAA2E,KAAA,EAQhB;EAAA,IARiB;IAC1B1E,QAAQ;IACRF,MAAM,GAAG,KAAK;IACdpB;EAKF,CAAC,GAAAgG,KAAA;EACC,OAAOhG,KAAK,CAACyF,YAAY,CAAC,CAAC,MAAAf,MAAA,CACpBvD,mBAAmB,CAAC;IAAEC,MAAM;IAAEpB;EAAM,CAAC,CAAC,OAAA0E,MAAA,CAAIpD,QAAQ,IACrDA,QAAQ;AACd;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAAA0E,KAAA,EAYjB;EAAA,IAZkB;IACzBjF,IAAI;IACJQ,IAAI;IACJC,UAAU;IACVC,QAAQ;IACR1B;EAOF,CAAC,GAAAiG,KAAA;EACC,IAAMC,UAAU,GAAG,CAAC,CAAC;EACrBA,UAAU,CAAC,MAAM,CAAC,GAAGjG,WAAW,CAAC;IAAED;EAAM,CAAC,CAAC;EAC3CkG,UAAU,CAAClF,IAAI,CAAC,GAAG,CAAC,CAAC;EAErB,IAAImF,KAAK,CAACC,OAAO,CAAC5E,IAAI,CAAC,EAAE;IACvBA,IAAI,CAAC6E,OAAO,CAAEC,OAAO,IAAK;MACxBJ,UAAU,CAAClF,IAAI,CAAC,CAACsF,OAAO,CAAC7E,UAAU,CAAC,CAAC,GAAG6E,OAAO;IACjD,CAAC,CAAC;EACJ,CAAC,MAAM;IACLJ,UAAU,CAAClF,IAAI,CAAC,CAACQ,IAAI,CAACC,UAAU,CAAC,CAAC,GAAGD,IAAI;EAC3C;EACAkE,WAAE,CAACa,aAAa,CAAC7E,QAAQ,EAAE,IAAA8E,oBAAS,EAACN,UAAU,CAAC,CAAC;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASvE,cAAcA,CAAA8E,KAAA,EAUlB;EAAA,IAVmB;IAC7BjF,IAAI;IACJE,QAAQ;IACRE,WAAW,GAAG,IAAI;IAClB5B;EAMF,CAAC,GAAAyG,KAAA;EACC,IAAMP,UAAU,GAAG1E,IAAI;EACvB,IAAII,WAAW,EAAEsE,UAAU,CAAC,MAAM,CAAC,GAAGjG,WAAW,CAAC;IAAED;EAAM,CAAC,CAAC;EAC5D,IAAA0G,0BAAe,EAACR,UAAU,EAAE,MAAM,CAAC;EACnC,IAAI;IACFR,WAAE,CAACa,aAAa,CAAC7E,QAAQ,EAAE,IAAA8E,oBAAS,EAACN,UAAU,CAAC,CAAC;IACjD,OAAO,IAAI;EACb,CAAC,CAAC,OAAOrG,GAAG,EAAE;IACZ,IAAA8G,qBAAY,EAAC;MACXd,OAAO,wBAAAnB,MAAA,CAAwBhD,QAAQ,CAAE;MACzCV,IAAI,EAAE,OAAO;MACbhB;IACF,CAAC,CAAC;IACF,OAAO,KAAK;EACd;AACF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS6B,gBAAgBA,CAACL,IAAY,EAAEE,QAAgB,EAAE;EAC/DgE,WAAE,CAACkB,cAAc,CAAClF,QAAQ,EAAEF,IAAI,CAAC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASM,eAAeA,CAC7BR,QAAgB,EAGN;EAAA,IAFVS,IAAI,GAAApC,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,IAAI;EAAA,IACXqC,IAAI,GAAArC,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,IAAI;EAEX,IAAMkH,OAAO,GAAGnB,WAAE,CAACoB,WAAW,CAAC9E,IAAI,EAAE;IACnC+E,QAAQ,EAAE,MAAM;IAChBC,aAAa,EAAE;EACjB,CAAC,CAAC;;EAEF;EACA,IAAMC,KAAe,GAAGJ,OAAO,CAC5BK,MAAM,CAAEC,KAAK,IAAK,CAACA,KAAK,CAACC,WAAW,CAAC,CAAC,CAAC,CACvCF,MAAM,CAAEG,IAAI,IAAKA,IAAI,CAACtG,IAAI,KAAKO,QAAQ;EACxC;EAAA,CACCgG,GAAG,CAAED,IAAI,IAAKrF,IAAI,GAAGqF,IAAI,CAACtG,IAAI,CAAC;EAElC,IAAIgB,IAAI,IAAIkF,KAAK,CAAC/F,MAAM,GAAG,CAAC,EAAE,OAAO+F,KAAK;;EAE1C;EACA,IAAMM,OAAO,GAAGV,OAAO,CAACK,MAAM,CAAEC,KAAK,IAAKA,KAAK,CAACC,WAAW,CAAC,CAAC,CAAC;EAC9D,KAAK,IAAMI,MAAM,IAAID,OAAO,EAC1BN,KAAK,CAACQ,IAAI,CAAC,GAAG3F,eAAe,CAACR,QAAQ,EAAES,IAAI,KAAA2C,MAAA,CAAK1C,IAAI,EAAA0C,MAAA,CAAG8C,MAAM,CAACzG,IAAI,MAAG,CAAC,CAAC;EAE1E,OAAOkG,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA,SAMsBhF,kBAAkBA,CAAAyF,EAAA;EAAA,OAAAC,mBAAA,CAAA/H,KAAA,OAAAD,SAAA;AAAA;AAAA,SAAAgI,oBAAA;EAAAA,mBAAA,GAAApI,iBAAA,CAAjC,WAAkC2C,SAAiB,EAAqB;IAC7E,IAAM0F,KAAK,SAAS,IAAAC,iBAAO,EAAC3F,SAAS,CAAC;IAEtC,IAAM4F,eAAe,SAASzI,OAAO,CAAC0I,GAAG,CACvCH,KAAK,CAACN,GAAG;MAAA,IAAAU,KAAA,GAAAzI,iBAAA,CAAC,WAAO0I,MAAM,EAAK;QAC1B,IAAMjG,IAAI,GAAG,IAAAmC,UAAI,EAACjC,SAAS,EAAE+F,MAAM,CAAC;QACpC,IAAMb,WAAW,GAAG,OAAO,IAAAc,eAAK,EAAClG,IAAI,CAAC,EAAEoF,WAAW,CAAC,CAAC;QAErD,IAAIA,WAAW,EAAE;UACf,OAAOnF,kBAAkB,CAACD,IAAI,CAAC;QACjC;QACA,OAAOA,IAAI;MACb,CAAC;MAAA,iBAAAmG,GAAA;QAAA,OAAAH,KAAA,CAAApI,KAAA,OAAAD,SAAA;MAAA;IAAA,IACH,CAAC;IAED,OAAOmI,eAAe,CAACM,IAAI,CAAC,CAAC;EAC/B,CAAC;EAAA,OAAAT,mBAAA,CAAA/H,KAAA,OAAAD,SAAA;AAAA;AAEM,SAASwC,mBAAmBA,CAAChC,KAAa,EAAEiC,MAAc,EAAU;EACzEA,MAAM,CAACiG,IAAI,CAAC,CAACtJ,GAAG,EAAEG,KAAK,KAAK;IAC1BiB,KAAK,GAAG,IAAAmI,mBAAU,EAACpJ,KAAK,OAAAwF,MAAA,CAAQ3F,GAAG,QAAKoB,KAAK,CAAC;EAChD,CAAC,CAAC;EACF,OAAOA,KAAK;AACd;AAEO,SAASkC,qBAAqBA,CAAClC,KAAa,EAAEiC,MAAc,EAAU;EAC3EA,MAAM,CAACiG,IAAI,CAAC,CAACtJ,GAAG,EAAEG,KAAK,KAAK;IAC1BiB,KAAK,GAAG,IAAAmI,mBAAU,OAAA5D,MAAA,CAAO3F,GAAG,QAAKG,KAAK,EAAEiB,KAAK,CAAC;EAChD,CAAC,CAAC;EACF,OAAOA,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASmC,QAAQA,CAACC,IAAY,EAAO;EAC1C,IAAMgG,CAAC,GAAGhG,IAAI,CAACiG,KAAK,CAChB,0GACF,CAAC;IACDC,CAAC,GAAG;MACFC,IAAI,EAAEH,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE;MACjBI,IAAI,EAAEJ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MAChBK,QAAQ,EAAEL,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MACpBhG,IAAI,EAAEgG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MAChB3F,MAAM,EAAE2F,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MAClBM,QAAQ,EAAEN,CAAC,CAAC,CAAC,CAAC,KAAKA,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;MACnCO,IAAI,EAAEP,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MAChBQ,QAAQ,EAAER,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MACpBS,MAAM,EAAET,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MAClBU,QAAQ,EAAEV,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MACpBW,QAAQ,EAAEX,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MACpBY,WAAW,EAAE,CAAC,CAAC,CAAE;MACjB;MACA;IACF,CAAC;;EACH,IAAIV,CAAC,CAACM,QAAQ,CAAC7H,MAAM,IAAI,CAAC,EAAE;IAC1BuH,CAAC,CAACM,QAAQ,GAAG,UAAU,GAAGN,CAAC,CAACM,QAAQ,CAAC9E,WAAW,CAAC,CAAC;IAClDwE,CAAC,CAAC7F,MAAM,GAAG6F,CAAC,CAACM,QAAQ,GAAG,IAAI,GAAGN,CAAC,CAACE,IAAI;EACvC;EACA,IAAIF,CAAC,CAACO,MAAM,CAAC9H,MAAM,GAAG,CAAC,EAAE;IACvB,IAAMkI,KAAK,GAAGX,CAAC,CAACO,MAAM,CAACK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAGZ,CAAC,CAACO,MAAM,CAACM,MAAM,CAAC,CAAC,CAAC,GAAGb,CAAC,CAACO,MAAM;IACzE,IAAMO,IAAI,GAAGH,KAAK,CAACtF,KAAK,CAAC,GAAG,CAAC;IAC7B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwF,IAAI,CAACrI,MAAM,EAAE6C,CAAC,EAAE,EAAE;MACpC,IAAMyF,IAAI,GAAGD,IAAI,CAACxF,CAAC,CAAC,CAACD,KAAK,CAAC,GAAG,CAAC;MAC/B2E,CAAC,CAACU,WAAW,CAACM,kBAAkB,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,kBAAkB,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1E;EACF;EACAf,CAAC,CAAClG,IAAI,GAAGkG,CAAC,CAAC7F,MAAM,GAAG6F,CAAC,CAACI,QAAQ,GAAGJ,CAAC,CAACO,MAAM,GAAGP,CAAC,CAACC,IAAI;EAClD,OAAOD,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASjG,UAAUA,CAACC,SAAiB,EAAW;EACrD,IAAI;IACF,OAAOiH,OAAO,CAAC,IAAIC,GAAG,CAAClH,SAAS,CAAC,CAAC;EACpC,CAAC,CAAC,OAAOtD,KAAK,EAAE;IACd,OAAO,KAAK;EACd;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA,SAMsByK,uBAAuBA,CAAAC,GAAA,EAAAC,GAAA;EAAA,OAAAC,wBAAA,CAAAnK,KAAA,OAAAD,SAAA;AAAA;AAAA,SAAAoK,yBAAA;EAAAA,wBAAA,GAAAxK,iBAAA,CAAtC,WACLyK,cAAyC,EACzCC,UAAa,EACM;IACnB,IAAI;MACF,aAAaD,cAAc,CAACC,UAAU,CAAC;IACzC,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV,IAAAvD,qBAAY,EAAC;QACXd,OAAO,YAAAnB,MAAA,CAAYwF,CAAC,CAACrE,OAAO,CAAE;QAC9B7E,IAAI,EAAE,OAAO;QACbhB,KAAK,EAAEiK,UAAU,CAACjK;MACpB,CAAC,CAAC;MACF,OAAO,IAAI;IACb;EACF,CAAC;EAAA,OAAA+J,wBAAA,CAAAnK,KAAA,OAAAD,SAAA;AAAA"}
|
|
1
|
+
{"version":3,"file":"ExportImportUtils.js","names":["_fs","_interopRequireDefault","require","_promises","_path","_replaceall","_slugify","_Constants","_Base64Utils","_Console","_JsonUtils","obj","__esModule","default","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","_default","state","getMetadata","titleCase","input","getRealmString","convertBase64TextToArray","b64text","convertBase64UrlTextToArray","b64UTF8Text","convertTextArrayToBase64","textArray","convertTextArrayToBase64Url","validateImport","metadata","getTypedFilename","name","type","suffix","length","getWorkingDirectory","mkdirs","getFilePath","fileName","saveToFile","data","identifier","filename","includeMeta","saveJsonToFile","saveTextToFile","appendTextToFile","findFilesByName","fast","path","readFiles","directory","substituteEnvParams","reader","unSubstituteEnvParams","parseUrl","href","isValidUrl","urlString","exports","_ref","origin","getHost","originAmVersion","getAmVersion","exportedBy","getUsername","exportDate","Date","toISOString","exportTool","Constants","FRODO_METADATA_ID","exportToolVersion","getFrodoVersion","str","toString","splitStr","toLowerCase","split","i","charAt","toUpperCase","slice","join","_ref2","realm","getRealm","reduce","result","item","concat","arrayOut","plainText","decode","replace","decodeBase64Url","joinedText","b64encodedScript","encode","encodeBase64Url","slug","slugify","remove","_ref3","wd","getDirectory","fs","existsSync","debugMessage","message","mkdirSync","recursive","_ref4","_ref5","exportData","Array","isArray","forEach","element","_ref6","deleteDeepByKey","stringify","_ref7","writeFileSync","printMessage","appendFileSync","entries","readdirSync","encoding","withFileTypes","files","filter","entry","isDirectory","file","map","folders","folder","push","_x","_readFiles","items","readdir","filePathsNested","all","_ref8","entity","lstat","content","readFile","_x4","flat","each","replaceall","m","match","r","hash","host","hostname","pathname","port","protocol","search","username","password","searchParam","query","indexOf","substr","vars","pair","decodeURIComponent","Boolean","URL","exportWithErrorHandling","_x2","_x3","_exportWithErrorHandling","exportFunction","parameters","e"],"sources":["../../src/utils/ExportImportUtils.ts"],"sourcesContent":["import fs from 'fs';\nimport { lstat, readdir, readFile } from 'fs/promises';\nimport { join } from 'path';\nimport { Reader } from 'properties-reader';\nimport replaceall from 'replaceall';\nimport slugify from 'slugify';\n\nimport { ExportMetaData } from '../ops/OpsTypes';\nimport Constants from '../shared/Constants';\nimport { State } from '../shared/State';\nimport {\n decode,\n decodeBase64Url,\n encode,\n encodeBase64Url,\n} from './Base64Utils';\nimport { debugMessage, printMessage } from './Console';\nimport { deleteDeepByKey, stringify } from './JsonUtils';\n\nexport type ExportImport = {\n getMetadata(): ExportMetaData;\n titleCase(input: string): string;\n getRealmString(): string;\n convertBase64TextToArray(b64text: string): any[];\n convertBase64UrlTextToArray(b64UTF8Text: string): any[];\n convertTextArrayToBase64(textArray: string[]): string;\n convertTextArrayToBase64Url(textArray: string[]): any;\n validateImport(metadata: any): boolean;\n getTypedFilename(name: string, type: string, suffix?: string): string;\n getWorkingDirectory(mkdirs?: boolean): string;\n getFilePath(fileName: string, mkdirs?: boolean): string;\n saveToFile(\n type: string,\n data: object,\n identifier: string,\n filename: string,\n includeMeta?: boolean\n ): void;\n /**\n * Save JSON object to file\n * @param {Object} data data object\n * @param {String} filename file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @return {boolean} true if successful, false otherwise\n */\n saveJsonToFile(\n data: object,\n filename: string,\n includeMeta?: boolean\n ): boolean;\n /**\n * Save text data to file\n * @param data text data\n * @param filename file name\n * @return true if successful, false otherwise\n */\n saveTextToFile(data: string, filename: string): boolean;\n /**\n * Append text data to file\n * @param {String} data text data\n * @param {String} filename file name\n */\n appendTextToFile(data: string, filename: string): void;\n /**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\n findFilesByName(fileName: string, fast?: boolean, path?: string): string[];\n /**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\n readFiles(directory: string): Promise<\n {\n path: string;\n content: string;\n }[]\n >;\n\n substituteEnvParams(input: string, reader: Reader): string;\n\n unSubstituteEnvParams(input: string, reader: Reader): string;\n /*\n * Parse a URL into its components and make them easily accessible by name\n *\n * Use in a Scripte Decision Node Script as follows:\n * var referer = parseUrl(requestHeaders.get(\"referer\").get(0));\n * var origin = referer.origin;\n *\n * e.g.: https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/\n * {\n * hash: '#/',\n * host: 'openam-volker-dev.forgeblocks.com',\n * hostname: 'openam-volker-dev.forgeblocks.com',\n * href: 'https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/',\n * origin: 'https://openam-volker-dev.forgeblocks.com',\n * pathname: '/am/XUI/',\n * port: '',\n * protocol: 'https',\n * search: '?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim',\n * username: '',\n * password: '',\n * searchParam: {\n * realm: '/bravo',\n * authIndexType: 'service',\n * authIndexValue: 'InitiateOwnerClaim'\n * }\n * }\n */\n parseUrl(href: string): any;\n /**\n * Check if a string is a valid URL\n * @param {string} urlString input string to be evaluated\n * @returns {boolean} true if a valid URL, false otherwise\n */\n isValidUrl(urlString: string): boolean;\n};\n\nexport default (state: State): ExportImport => {\n return {\n getMetadata(): ExportMetaData {\n return getMetadata({ state });\n },\n titleCase(input: string) {\n return titleCase(input);\n },\n getRealmString() {\n return getRealmString({ state });\n },\n convertBase64TextToArray(b64text: string) {\n return convertBase64TextToArray(b64text);\n },\n convertBase64UrlTextToArray(b64UTF8Text: string) {\n return convertBase64UrlTextToArray(b64UTF8Text);\n },\n convertTextArrayToBase64(textArray: string[]) {\n return convertTextArrayToBase64(textArray);\n },\n convertTextArrayToBase64Url(textArray: string[]) {\n return convertTextArrayToBase64Url(textArray);\n },\n validateImport(metadata): boolean {\n return validateImport(metadata);\n },\n getTypedFilename(name: string, type: string, suffix = 'json'): string {\n return getTypedFilename(name, type, suffix);\n },\n getWorkingDirectory(mkdirs = false) {\n return getWorkingDirectory({ mkdirs, state });\n },\n getFilePath(fileName: string, mkdirs = false): string {\n return getFilePath({ fileName, mkdirs, state });\n },\n saveToFile(\n type: string,\n data: object,\n identifier: string,\n filename: string,\n includeMeta = true\n ): void {\n return saveToFile({\n type,\n data,\n identifier,\n filename,\n includeMeta,\n state,\n });\n },\n saveJsonToFile(\n data: object,\n filename: string,\n includeMeta = true\n ): boolean {\n return saveJsonToFile({ data, filename, includeMeta, state });\n },\n saveTextToFile(data: string, filename: string): boolean {\n return saveTextToFile({ data, filename, state });\n },\n appendTextToFile(data: string, filename: string) {\n return appendTextToFile(data, filename);\n },\n findFilesByName(fileName: string, fast = true, path = './'): string[] {\n return findFilesByName(fileName, fast, path);\n },\n async readFiles(directory: string): Promise<\n {\n path: string;\n content: string;\n }[]\n > {\n return readFiles(directory);\n },\n substituteEnvParams(input: string, reader: Reader): string {\n return substituteEnvParams(input, reader);\n },\n unSubstituteEnvParams(input: string, reader: Reader): string {\n return unSubstituteEnvParams(input, reader);\n },\n parseUrl(href: string): any {\n return parseUrl(href);\n },\n isValidUrl(urlString: string): boolean {\n return isValidUrl(urlString);\n },\n };\n};\n\nexport function getMetadata({ state }: { state: State }): ExportMetaData {\n const metadata: ExportMetaData = {\n origin: state.getHost(),\n originAmVersion: state.getAmVersion(),\n exportedBy: state.getUsername(),\n exportDate: new Date().toISOString(),\n exportTool: Constants.FRODO_METADATA_ID,\n exportToolVersion: state.getFrodoVersion(),\n };\n return metadata;\n}\n\n/*\n * Output str in title case\n *\n * e.g.: 'ALL UPPERCASE AND all lowercase' = 'All Uppercase And All Lowercase'\n */\nexport function titleCase(input: string) {\n const str = input.toString();\n const splitStr = str.toLowerCase().split(' ');\n for (let i = 0; i < splitStr.length; i += 1) {\n splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].slice(1);\n }\n return splitStr.join(' ');\n}\n\nexport function getRealmString({ state }: { state: State }) {\n const realm = state.getRealm();\n return realm\n .split('/')\n .reduce((result, item) => `${result}${titleCase(item)}`, '');\n}\n\nexport function convertBase64TextToArray(b64text: string) {\n let arrayOut = [];\n let plainText = decode(b64text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertBase64UrlTextToArray(b64UTF8Text: string) {\n let arrayOut = [];\n let plainText = decodeBase64Url(b64UTF8Text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertTextArrayToBase64(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encode(joinedText);\n return b64encodedScript;\n}\n\nexport function convertTextArrayToBase64Url(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encodeBase64Url(joinedText);\n return b64encodedScript;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function validateImport(metadata): boolean {\n return metadata || true;\n}\n\nexport function getTypedFilename(\n name: string,\n type: string,\n suffix = 'json'\n): string {\n const slug = slugify(name.replace(/^http(s?):\\/\\//, ''), {\n remove: /[^\\w\\s$*_+~.()'\"!\\-@]+/g,\n });\n return `${slug}.${type}.${suffix}`;\n}\n\nexport function getWorkingDirectory({\n mkdirs = false,\n state,\n}: {\n mkdirs: boolean;\n state: State;\n}) {\n let wd = '.';\n if (state.getDirectory()) {\n wd = state.getDirectory().replace(/\\/$/, '');\n // create directory if it doesn't exist\n if (mkdirs && !fs.existsSync(wd)) {\n debugMessage({\n message: `ExportImportUtils.getWorkingDirectory: creating directory '${wd}'`,\n state,\n });\n fs.mkdirSync(wd, { recursive: true });\n }\n }\n return wd;\n}\n\n/**\n * Get the file path to a file in the working directory. If working directory does not exist, it will return the fileName as the file path.\n * @param fileName The file name\n * @param mkdirs If directories to working directory don't exist, makes the directories if true, and if false does not make the directories. Default: false\n * @return The file path to the file in the working directory\n */\nexport function getFilePath({\n fileName,\n mkdirs = false,\n state,\n}: {\n fileName: string;\n mkdirs: boolean;\n state: State;\n}): string {\n return state.getDirectory()\n ? `${getWorkingDirectory({ mkdirs, state })}/${fileName}`\n : fileName;\n}\n\n/**\n * Save to file\n * @param {any} data data object\n * @param {string} filename file name\n */\nexport function saveToFile({\n type,\n data,\n identifier,\n filename,\n includeMeta,\n state,\n}: {\n type: string;\n data: object;\n identifier: string;\n filename: string;\n includeMeta: boolean;\n state: State;\n}): void {\n const exportData = {};\n exportData[type] = {};\n\n if (Array.isArray(data)) {\n data.forEach((element) => {\n exportData[type][element[identifier]] = element;\n });\n } else {\n exportData[type][data[identifier]] = data;\n }\n saveJsonToFile({\n data: exportData,\n includeMeta,\n filename,\n state,\n });\n}\n\n/**\n * Save JSON object to file\n * @param {object} data data object\n * @param {string} filename file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @return {boolean} true if successful, false otherwise\n */\nexport function saveJsonToFile({\n data,\n filename,\n includeMeta = true,\n state,\n}: {\n data: object;\n filename: string;\n includeMeta?: boolean;\n state: State;\n}): boolean {\n const exportData = data;\n if (includeMeta && !exportData['meta'])\n exportData['meta'] = getMetadata({ state });\n if (!includeMeta && exportData['meta']) delete exportData['meta'];\n deleteDeepByKey(exportData, '_rev');\n return saveTextToFile({\n data: stringify(exportData),\n filename,\n state,\n });\n}\n\n/**\n * Save text data to file\n * @param data text data\n * @param filename file name\n * @return true if successful, false otherwise\n */\nexport function saveTextToFile({\n data,\n filename,\n state,\n}: {\n data: string;\n filename: string;\n state: State;\n}): boolean {\n try {\n fs.writeFileSync(filename, data);\n return true;\n } catch (err) {\n printMessage({\n message: `ERROR - can't save ${filename}`,\n type: 'error',\n state,\n });\n return false;\n }\n}\n\n/**\n * Append text data to file\n * @param {string} data text data\n * @param {string} filename file name\n */\nexport function appendTextToFile(data: string, filename: string) {\n fs.appendFileSync(filename, data);\n}\n\n/**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\nexport function findFilesByName(\n fileName: string,\n fast = true,\n path = './'\n): string[] {\n const entries = fs.readdirSync(path, {\n encoding: 'utf8',\n withFileTypes: true,\n });\n\n // Get files within the current directory and add a path key to the file objects\n const files: string[] = entries\n .filter((entry) => !entry.isDirectory())\n .filter((file) => file.name === fileName)\n // .map((file) => ({ ...file, path: path + file.name }));\n .map((file) => path + file.name);\n\n if (fast && files.length > 0) return files;\n\n // search sub-folders\n const folders = entries.filter((entry) => entry.isDirectory());\n for (const folder of folders)\n files.push(...findFilesByName(fileName, fast, `${path}${folder.name}/`));\n\n return files;\n}\n\n/**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\nexport async function readFiles(directory: string): Promise<\n {\n path: string;\n content: string;\n }[]\n> {\n const items = await readdir(directory);\n\n const filePathsNested = await Promise.all(\n items.map(async (entity) => {\n const path = join(directory, entity);\n const isDirectory = (await lstat(path)).isDirectory();\n\n if (isDirectory) {\n return readFiles(path);\n }\n return {\n path,\n content: await readFile(path, 'utf8'),\n };\n })\n );\n\n return filePathsNested.flat();\n}\n\nexport function substituteEnvParams(input: string, reader: Reader): string {\n reader.each((key, value) => {\n input = replaceall(value, `\\${${key}}`, input);\n });\n return input;\n}\n\nexport function unSubstituteEnvParams(input: string, reader: Reader): string {\n reader.each((key, value) => {\n input = replaceall(`\\${${key}}`, value, input);\n });\n return input;\n}\n\n/*\n * Parse a URL into its components and make them easily accessible by name\n *\n * Use in a Scripte Decision Node Script as follows:\n * var referer = parseUrl(requestHeaders.get(\"referer\").get(0));\n * var origin = referer.origin;\n *\n * e.g.: https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/\n * {\n * hash: '#/',\n * host: 'openam-volker-dev.forgeblocks.com',\n * hostname: 'openam-volker-dev.forgeblocks.com',\n * href: 'https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/',\n * origin: 'https://openam-volker-dev.forgeblocks.com',\n * pathname: '/am/XUI/',\n * port: '',\n * protocol: 'https',\n * search: '?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim',\n * username: '',\n * password: '',\n * searchParam: {\n * realm: '/bravo',\n * authIndexType: 'service',\n * authIndexValue: 'InitiateOwnerClaim'\n * }\n * }\n */\nexport function parseUrl(href: string): any {\n const m = href.match(\n /^(([^:/?#]+):?(?:\\/\\/((?:([^/?#:]*):([^/?#:]*)@)?([^/?#:]*)(?::([^/?#:]*))?)))?([^?#]*)(\\?[^#]*)?(#.*)?$/\n ),\n r = {\n hash: m[10] || '',\n host: m[3] || '',\n hostname: m[6] || '',\n href: m[0] || '',\n origin: m[1] || '',\n pathname: m[8] || (m[1] ? '/' : ''),\n port: m[7] || '',\n protocol: m[2] || '',\n search: m[9] || '',\n username: m[4] || '',\n password: m[5] || '',\n searchParam: {}, // { realm: '/bravo',\n // authIndexType: 'service',\n // authIndexValue: 'InitiateOwnerClaim' }\n };\n if (r.protocol.length == 2) {\n r.protocol = 'file:///' + r.protocol.toUpperCase();\n r.origin = r.protocol + '//' + r.host;\n }\n if (r.search.length > 2) {\n const query = r.search.indexOf('?') === 0 ? r.search.substr(1) : r.search;\n const vars = query.split('&');\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split('=');\n r.searchParam[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n }\n r.href = r.origin + r.pathname + r.search + r.hash;\n return r;\n}\n\n/**\n * Check if a string is a valid URL\n * @param {string} urlString input string to be evaluated\n * @returns {boolean} true if a valid URL, false otherwise\n */\nexport function isValidUrl(urlString: string): boolean {\n try {\n return Boolean(new URL(urlString));\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Performs an export given a function with its parameters with custom error handling that will just print the error if one is thrown and return null.\n * @param exportFunction The export function.\n * @param parameters The parameters to call the export function with. By default, it is { state }.\n * @returns {Promise<R | null>} Returns the result of the export function, or null if an error is thrown\n */\nexport async function exportWithErrorHandling<P extends { state: State }, R>(\n exportFunction: (params: P) => Promise<R>,\n parameters: P\n): Promise<R | null> {\n try {\n return await exportFunction(parameters);\n } catch (e) {\n printMessage({\n message: `ERROR: ${e.message}`,\n type: 'error',\n state: parameters.state,\n });\n return null;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AAA8B,IAAAK,UAAA,GAAAN,sBAAA,CAAAC,OAAA;AAAA,IAAAM,YAAA,GAAAN,OAAA;AAAA,IAAAO,QAAA,GAAAP,OAAA;AAAA,IAAAQ,UAAA,GAAAR,OAAA;AAAA,SAAAD,uBAAAU,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,mBAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,EAAAC,GAAA,EAAAC,GAAA,cAAAC,IAAA,GAAAP,GAAA,CAAAK,GAAA,EAAAC,GAAA,OAAAE,KAAA,GAAAD,IAAA,CAAAC,KAAA,WAAAC,KAAA,IAAAP,MAAA,CAAAO,KAAA,iBAAAF,IAAA,CAAAG,IAAA,IAAAT,OAAA,CAAAO,KAAA,YAAAG,OAAA,CAAAV,OAAA,CAAAO,KAAA,EAAAI,IAAA,CAAAT,KAAA,EAAAC,MAAA;AAAA,SAAAS,kBAAAC,EAAA,6BAAAC,IAAA,SAAAC,IAAA,GAAAC,SAAA,aAAAN,OAAA,WAAAV,OAAA,EAAAC,MAAA,QAAAF,GAAA,GAAAc,EAAA,CAAAI,KAAA,CAAAH,IAAA,EAAAC,IAAA,YAAAb,MAAAK,KAAA,IAAAT,kBAAA,CAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,UAAAI,KAAA,cAAAJ,OAAAe,GAAA,IAAApB,kBAAA,CAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,WAAAe,GAAA,KAAAhB,KAAA,CAAAiB,SAAA;AAAA,IAAAC,QAAA,GAsHdC,KAAY,IAAmB;EAC7C,OAAO;IACLC,WAAWA,CAAA,EAAmB;MAC5B,OAAOA,WAAW,CAAC;QAAED;MAAM,CAAC,CAAC;IAC/B,CAAC;IACDE,SAASA,CAACC,KAAa,EAAE;MACvB,OAAOD,SAAS,CAACC,KAAK,CAAC;IACzB,CAAC;IACDC,cAAcA,CAAA,EAAG;MACf,OAAOA,cAAc,CAAC;QAAEJ;MAAM,CAAC,CAAC;IAClC,CAAC;IACDK,wBAAwBA,CAACC,OAAe,EAAE;MACxC,OAAOD,wBAAwB,CAACC,OAAO,CAAC;IAC1C,CAAC;IACDC,2BAA2BA,CAACC,WAAmB,EAAE;MAC/C,OAAOD,2BAA2B,CAACC,WAAW,CAAC;IACjD,CAAC;IACDC,wBAAwBA,CAACC,SAAmB,EAAE;MAC5C,OAAOD,wBAAwB,CAACC,SAAS,CAAC;IAC5C,CAAC;IACDC,2BAA2BA,CAACD,SAAmB,EAAE;MAC/C,OAAOC,2BAA2B,CAACD,SAAS,CAAC;IAC/C,CAAC;IACDE,cAAcA,CAACC,QAAQ,EAAW;MAChC,OAAOD,cAAc,CAACC,QAAQ,CAAC;IACjC,CAAC;IACDC,gBAAgBA,CAACC,IAAY,EAAEC,IAAY,EAA2B;MAAA,IAAzBC,MAAM,GAAAtB,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,MAAM;MAC1D,OAAOmB,gBAAgB,CAACC,IAAI,EAAEC,IAAI,EAAEC,MAAM,CAAC;IAC7C,CAAC;IACDE,mBAAmBA,CAAA,EAAiB;MAAA,IAAhBC,MAAM,GAAAzB,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,KAAK;MAChC,OAAOwB,mBAAmB,CAAC;QAAEC,MAAM;QAAEpB;MAAM,CAAC,CAAC;IAC/C,CAAC;IACDqB,WAAWA,CAACC,QAAgB,EAA0B;MAAA,IAAxBF,MAAM,GAAAzB,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,KAAK;MAC1C,OAAO0B,WAAW,CAAC;QAAEC,QAAQ;QAAEF,MAAM;QAAEpB;MAAM,CAAC,CAAC;IACjD,CAAC;IACDuB,UAAUA,CACRP,IAAY,EACZQ,IAAY,EACZC,UAAkB,EAClBC,QAAgB,EAEV;MAAA,IADNC,WAAW,GAAAhC,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,IAAI;MAElB,OAAO4B,UAAU,CAAC;QAChBP,IAAI;QACJQ,IAAI;QACJC,UAAU;QACVC,QAAQ;QACRC,WAAW;QACX3B;MACF,CAAC,CAAC;IACJ,CAAC;IACD4B,cAAcA,CACZJ,IAAY,EACZE,QAAgB,EAEP;MAAA,IADTC,WAAW,GAAAhC,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,IAAI;MAElB,OAAOiC,cAAc,CAAC;QAAEJ,IAAI;QAAEE,QAAQ;QAAEC,WAAW;QAAE3B;MAAM,CAAC,CAAC;IAC/D,CAAC;IACD6B,cAAcA,CAACL,IAAY,EAAEE,QAAgB,EAAW;MACtD,OAAOG,cAAc,CAAC;QAAEL,IAAI;QAAEE,QAAQ;QAAE1B;MAAM,CAAC,CAAC;IAClD,CAAC;IACD8B,gBAAgBA,CAACN,IAAY,EAAEE,QAAgB,EAAE;MAC/C,OAAOI,gBAAgB,CAACN,IAAI,EAAEE,QAAQ,CAAC;IACzC,CAAC;IACDK,eAAeA,CAACT,QAAgB,EAAsC;MAAA,IAApCU,IAAI,GAAArC,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,IAAI;MAAA,IAAEsC,IAAI,GAAAtC,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,IAAI;MACxD,OAAOoC,eAAe,CAACT,QAAQ,EAAEU,IAAI,EAAEC,IAAI,CAAC;IAC9C,CAAC;IACKC,SAASA,CAACC,SAAiB,EAK/B;MAAA,OAAA5C,iBAAA;QACA,OAAO2C,SAAS,CAACC,SAAS,CAAC;MAAC;IAC9B,CAAC;IACDC,mBAAmBA,CAACjC,KAAa,EAAEkC,MAAc,EAAU;MACzD,OAAOD,mBAAmB,CAACjC,KAAK,EAAEkC,MAAM,CAAC;IAC3C,CAAC;IACDC,qBAAqBA,CAACnC,KAAa,EAAEkC,MAAc,EAAU;MAC3D,OAAOC,qBAAqB,CAACnC,KAAK,EAAEkC,MAAM,CAAC;IAC7C,CAAC;IACDE,QAAQA,CAACC,IAAY,EAAO;MAC1B,OAAOD,QAAQ,CAACC,IAAI,CAAC;IACvB,CAAC;IACDC,UAAUA,CAACC,SAAiB,EAAW;MACrC,OAAOD,UAAU,CAACC,SAAS,CAAC;IAC9B;EACF,CAAC;AACH,CAAC;AAAAC,OAAA,CAAAnE,OAAA,GAAAuB,QAAA;AAEM,SAASE,WAAWA,CAAA2C,IAAA,EAA8C;EAAA,IAA7C;IAAE5C;EAAwB,CAAC,GAAA4C,IAAA;EACrD,IAAM/B,QAAwB,GAAG;IAC/BgC,MAAM,EAAE7C,KAAK,CAAC8C,OAAO,CAAC,CAAC;IACvBC,eAAe,EAAE/C,KAAK,CAACgD,YAAY,CAAC,CAAC;IACrCC,UAAU,EAAEjD,KAAK,CAACkD,WAAW,CAAC,CAAC;IAC/BC,UAAU,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IACpCC,UAAU,EAAEC,kBAAS,CAACC,iBAAiB;IACvCC,iBAAiB,EAAEzD,KAAK,CAAC0D,eAAe,CAAC;EAC3C,CAAC;EACD,OAAO7C,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASX,SAASA,CAACC,KAAa,EAAE;EACvC,IAAMwD,GAAG,GAAGxD,KAAK,CAACyD,QAAQ,CAAC,CAAC;EAC5B,IAAMC,QAAQ,GAAGF,GAAG,CAACG,WAAW,CAAC,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC;EAC7C,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,QAAQ,CAAC3C,MAAM,EAAE8C,CAAC,IAAI,CAAC,EAAE;IAC3CH,QAAQ,CAACG,CAAC,CAAC,GAAGH,QAAQ,CAACG,CAAC,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGL,QAAQ,CAACG,CAAC,CAAC,CAACG,KAAK,CAAC,CAAC,CAAC;EAC1E;EACA,OAAON,QAAQ,CAACO,IAAI,CAAC,GAAG,CAAC;AAC3B;AAEO,SAAShE,cAAcA,CAAAiE,KAAA,EAA8B;EAAA,IAA7B;IAAErE;EAAwB,CAAC,GAAAqE,KAAA;EACxD,IAAMC,KAAK,GAAGtE,KAAK,CAACuE,QAAQ,CAAC,CAAC;EAC9B,OAAOD,KAAK,CACTP,KAAK,CAAC,GAAG,CAAC,CACVS,MAAM,CAAC,CAACC,MAAM,EAAEC,IAAI,QAAAC,MAAA,CAAQF,MAAM,EAAAE,MAAA,CAAGzE,SAAS,CAACwE,IAAI,CAAC,CAAE,EAAE,EAAE,CAAC;AAChE;AAEO,SAASrE,wBAAwBA,CAACC,OAAe,EAAE;EACxD,IAAIsE,QAAQ,GAAG,EAAE;EACjB,IAAIC,SAAS,GAAG,IAAAC,mBAAM,EAACxE,OAAO,CAAC;EAC/BuE,SAAS,GAAGA,SAAS,CAACE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;EAC5CH,QAAQ,GAAGC,SAAS,CAACd,KAAK,CAAC,IAAI,CAAC;EAChC,OAAOa,QAAQ;AACjB;AAEO,SAASrE,2BAA2BA,CAACC,WAAmB,EAAE;EAC/D,IAAIoE,QAAQ,GAAG,EAAE;EACjB,IAAIC,SAAS,GAAG,IAAAG,4BAAe,EAACxE,WAAW,CAAC;EAC5CqE,SAAS,GAAGA,SAAS,CAACE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;EAC5CH,QAAQ,GAAGC,SAAS,CAACd,KAAK,CAAC,IAAI,CAAC;EAChC,OAAOa,QAAQ;AACjB;AAEO,SAASnE,wBAAwBA,CAACC,SAAmB,EAAE;EAC5D,IAAMuE,UAAU,GAAGvE,SAAS,CAAC0D,IAAI,CAAC,IAAI,CAAC;EACvC,IAAMc,gBAAgB,GAAG,IAAAC,mBAAM,EAACF,UAAU,CAAC;EAC3C,OAAOC,gBAAgB;AACzB;AAEO,SAASvE,2BAA2BA,CAACD,SAAmB,EAAE;EAC/D,IAAMuE,UAAU,GAAGvE,SAAS,CAAC0D,IAAI,CAAC,IAAI,CAAC;EACvC,IAAMc,gBAAgB,GAAG,IAAAE,4BAAe,EAACH,UAAU,CAAC;EACpD,OAAOC,gBAAgB;AACzB;;AAEA;AACO,SAAStE,cAAcA,CAACC,QAAQ,EAAW;EAChD,OAAOA,QAAQ,IAAI,IAAI;AACzB;AAEO,SAASC,gBAAgBA,CAC9BC,IAAY,EACZC,IAAY,EAEJ;EAAA,IADRC,MAAM,GAAAtB,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,MAAM;EAEf,IAAM0F,IAAI,GAAG,IAAAC,gBAAO,EAACvE,IAAI,CAACgE,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE;IACvDQ,MAAM,EAAE;EACV,CAAC,CAAC;EACF,UAAAZ,MAAA,CAAUU,IAAI,OAAAV,MAAA,CAAI3D,IAAI,OAAA2D,MAAA,CAAI1D,MAAM;AAClC;AAEO,SAASE,mBAAmBA,CAAAqE,KAAA,EAMhC;EAAA,IANiC;IAClCpE,MAAM,GAAG,KAAK;IACdpB;EAIF,CAAC,GAAAwF,KAAA;EACC,IAAIC,EAAE,GAAG,GAAG;EACZ,IAAIzF,KAAK,CAAC0F,YAAY,CAAC,CAAC,EAAE;IACxBD,EAAE,GAAGzF,KAAK,CAAC0F,YAAY,CAAC,CAAC,CAACX,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAC5C;IACA,IAAI3D,MAAM,IAAI,CAACuE,WAAE,CAACC,UAAU,CAACH,EAAE,CAAC,EAAE;MAChC,IAAAI,qBAAY,EAAC;QACXC,OAAO,gEAAAnB,MAAA,CAAgEc,EAAE,MAAG;QAC5EzF;MACF,CAAC,CAAC;MACF2F,WAAE,CAACI,SAAS,CAACN,EAAE,EAAE;QAAEO,SAAS,EAAE;MAAK,CAAC,CAAC;IACvC;EACF;EACA,OAAOP,EAAE;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASpE,WAAWA,CAAA4E,KAAA,EAQhB;EAAA,IARiB;IAC1B3E,QAAQ;IACRF,MAAM,GAAG,KAAK;IACdpB;EAKF,CAAC,GAAAiG,KAAA;EACC,OAAOjG,KAAK,CAAC0F,YAAY,CAAC,CAAC,MAAAf,MAAA,CACpBxD,mBAAmB,CAAC;IAAEC,MAAM;IAAEpB;EAAM,CAAC,CAAC,OAAA2E,MAAA,CAAIrD,QAAQ,IACrDA,QAAQ;AACd;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAAA2E,KAAA,EAcjB;EAAA,IAdkB;IACzBlF,IAAI;IACJQ,IAAI;IACJC,UAAU;IACVC,QAAQ;IACRC,WAAW;IACX3B;EAQF,CAAC,GAAAkG,KAAA;EACC,IAAMC,UAAU,GAAG,CAAC,CAAC;EACrBA,UAAU,CAACnF,IAAI,CAAC,GAAG,CAAC,CAAC;EAErB,IAAIoF,KAAK,CAACC,OAAO,CAAC7E,IAAI,CAAC,EAAE;IACvBA,IAAI,CAAC8E,OAAO,CAAEC,OAAO,IAAK;MACxBJ,UAAU,CAACnF,IAAI,CAAC,CAACuF,OAAO,CAAC9E,UAAU,CAAC,CAAC,GAAG8E,OAAO;IACjD,CAAC,CAAC;EACJ,CAAC,MAAM;IACLJ,UAAU,CAACnF,IAAI,CAAC,CAACQ,IAAI,CAACC,UAAU,CAAC,CAAC,GAAGD,IAAI;EAC3C;EACAI,cAAc,CAAC;IACbJ,IAAI,EAAE2E,UAAU;IAChBxE,WAAW;IACXD,QAAQ;IACR1B;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS4B,cAAcA,CAAA4E,KAAA,EAUlB;EAAA,IAVmB;IAC7BhF,IAAI;IACJE,QAAQ;IACRC,WAAW,GAAG,IAAI;IAClB3B;EAMF,CAAC,GAAAwG,KAAA;EACC,IAAML,UAAU,GAAG3E,IAAI;EACvB,IAAIG,WAAW,IAAI,CAACwE,UAAU,CAAC,MAAM,CAAC,EACpCA,UAAU,CAAC,MAAM,CAAC,GAAGlG,WAAW,CAAC;IAAED;EAAM,CAAC,CAAC;EAC7C,IAAI,CAAC2B,WAAW,IAAIwE,UAAU,CAAC,MAAM,CAAC,EAAE,OAAOA,UAAU,CAAC,MAAM,CAAC;EACjE,IAAAM,0BAAe,EAACN,UAAU,EAAE,MAAM,CAAC;EACnC,OAAOtE,cAAc,CAAC;IACpBL,IAAI,EAAE,IAAAkF,oBAAS,EAACP,UAAU,CAAC;IAC3BzE,QAAQ;IACR1B;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS6B,cAAcA,CAAA8E,KAAA,EAQlB;EAAA,IARmB;IAC7BnF,IAAI;IACJE,QAAQ;IACR1B;EAKF,CAAC,GAAA2G,KAAA;EACC,IAAI;IACFhB,WAAE,CAACiB,aAAa,CAAClF,QAAQ,EAAEF,IAAI,CAAC;IAChC,OAAO,IAAI;EACb,CAAC,CAAC,OAAO3B,GAAG,EAAE;IACZ,IAAAgH,qBAAY,EAAC;MACXf,OAAO,wBAAAnB,MAAA,CAAwBjD,QAAQ,CAAE;MACzCV,IAAI,EAAE,OAAO;MACbhB;IACF,CAAC,CAAC;IACF,OAAO,KAAK;EACd;AACF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS8B,gBAAgBA,CAACN,IAAY,EAAEE,QAAgB,EAAE;EAC/DiE,WAAE,CAACmB,cAAc,CAACpF,QAAQ,EAAEF,IAAI,CAAC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASO,eAAeA,CAC7BT,QAAgB,EAGN;EAAA,IAFVU,IAAI,GAAArC,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,IAAI;EAAA,IACXsC,IAAI,GAAAtC,SAAA,CAAAuB,MAAA,QAAAvB,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAG,IAAI;EAEX,IAAMoH,OAAO,GAAGpB,WAAE,CAACqB,WAAW,CAAC/E,IAAI,EAAE;IACnCgF,QAAQ,EAAE,MAAM;IAChBC,aAAa,EAAE;EACjB,CAAC,CAAC;;EAEF;EACA,IAAMC,KAAe,GAAGJ,OAAO,CAC5BK,MAAM,CAAEC,KAAK,IAAK,CAACA,KAAK,CAACC,WAAW,CAAC,CAAC,CAAC,CACvCF,MAAM,CAAEG,IAAI,IAAKA,IAAI,CAACxG,IAAI,KAAKO,QAAQ;EACxC;EAAA,CACCkG,GAAG,CAAED,IAAI,IAAKtF,IAAI,GAAGsF,IAAI,CAACxG,IAAI,CAAC;EAElC,IAAIiB,IAAI,IAAImF,KAAK,CAACjG,MAAM,GAAG,CAAC,EAAE,OAAOiG,KAAK;;EAE1C;EACA,IAAMM,OAAO,GAAGV,OAAO,CAACK,MAAM,CAAEC,KAAK,IAAKA,KAAK,CAACC,WAAW,CAAC,CAAC,CAAC;EAC9D,KAAK,IAAMI,MAAM,IAAID,OAAO,EAC1BN,KAAK,CAACQ,IAAI,CAAC,GAAG5F,eAAe,CAACT,QAAQ,EAAEU,IAAI,KAAA2C,MAAA,CAAK1C,IAAI,EAAA0C,MAAA,CAAG+C,MAAM,CAAC3G,IAAI,MAAG,CAAC,CAAC;EAE1E,OAAOoG,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA,SAMsBjF,SAASA,CAAA0F,EAAA;EAAA,OAAAC,UAAA,CAAAjI,KAAA,OAAAD,SAAA;AAAA;AAAA,SAAAkI,WAAA;EAAAA,UAAA,GAAAtI,iBAAA,CAAxB,WAAyB4C,SAAiB,EAK/C;IACA,IAAM2F,KAAK,SAAS,IAAAC,iBAAO,EAAC5F,SAAS,CAAC;IAEtC,IAAM6F,eAAe,SAAS3I,OAAO,CAAC4I,GAAG,CACvCH,KAAK,CAACN,GAAG;MAAA,IAAAU,KAAA,GAAA3I,iBAAA,CAAC,WAAO4I,MAAM,EAAK;QAC1B,IAAMlG,IAAI,GAAG,IAAAmC,UAAI,EAACjC,SAAS,EAAEgG,MAAM,CAAC;QACpC,IAAMb,WAAW,GAAG,OAAO,IAAAc,eAAK,EAACnG,IAAI,CAAC,EAAEqF,WAAW,CAAC,CAAC;QAErD,IAAIA,WAAW,EAAE;UACf,OAAOpF,SAAS,CAACD,IAAI,CAAC;QACxB;QACA,OAAO;UACLA,IAAI;UACJoG,OAAO,QAAQ,IAAAC,kBAAQ,EAACrG,IAAI,EAAE,MAAM;QACtC,CAAC;MACH,CAAC;MAAA,iBAAAsG,GAAA;QAAA,OAAAL,KAAA,CAAAtI,KAAA,OAAAD,SAAA;MAAA;IAAA,IACH,CAAC;IAED,OAAOqI,eAAe,CAACQ,IAAI,CAAC,CAAC;EAC/B,CAAC;EAAA,OAAAX,UAAA,CAAAjI,KAAA,OAAAD,SAAA;AAAA;AAEM,SAASyC,mBAAmBA,CAACjC,KAAa,EAAEkC,MAAc,EAAU;EACzEA,MAAM,CAACoG,IAAI,CAAC,CAAC1J,GAAG,EAAEG,KAAK,KAAK;IAC1BiB,KAAK,GAAG,IAAAuI,mBAAU,EAACxJ,KAAK,OAAAyF,MAAA,CAAQ5F,GAAG,QAAKoB,KAAK,CAAC;EAChD,CAAC,CAAC;EACF,OAAOA,KAAK;AACd;AAEO,SAASmC,qBAAqBA,CAACnC,KAAa,EAAEkC,MAAc,EAAU;EAC3EA,MAAM,CAACoG,IAAI,CAAC,CAAC1J,GAAG,EAAEG,KAAK,KAAK;IAC1BiB,KAAK,GAAG,IAAAuI,mBAAU,OAAA/D,MAAA,CAAO5F,GAAG,QAAKG,KAAK,EAAEiB,KAAK,CAAC;EAChD,CAAC,CAAC;EACF,OAAOA,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASoC,QAAQA,CAACC,IAAY,EAAO;EAC1C,IAAMmG,CAAC,GAAGnG,IAAI,CAACoG,KAAK,CAChB,0GACF,CAAC;IACDC,CAAC,GAAG;MACFC,IAAI,EAAEH,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE;MACjBI,IAAI,EAAEJ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MAChBK,QAAQ,EAAEL,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MACpBnG,IAAI,EAAEmG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MAChB9F,MAAM,EAAE8F,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MAClBM,QAAQ,EAAEN,CAAC,CAAC,CAAC,CAAC,KAAKA,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;MACnCO,IAAI,EAAEP,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MAChBQ,QAAQ,EAAER,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MACpBS,MAAM,EAAET,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MAClBU,QAAQ,EAAEV,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MACpBW,QAAQ,EAAEX,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;MACpBY,WAAW,EAAE,CAAC,CAAC,CAAE;MACjB;MACA;IACF,CAAC;;EACH,IAAIV,CAAC,CAACM,QAAQ,CAACjI,MAAM,IAAI,CAAC,EAAE;IAC1B2H,CAAC,CAACM,QAAQ,GAAG,UAAU,GAAGN,CAAC,CAACM,QAAQ,CAACjF,WAAW,CAAC,CAAC;IAClD2E,CAAC,CAAChG,MAAM,GAAGgG,CAAC,CAACM,QAAQ,GAAG,IAAI,GAAGN,CAAC,CAACE,IAAI;EACvC;EACA,IAAIF,CAAC,CAACO,MAAM,CAAClI,MAAM,GAAG,CAAC,EAAE;IACvB,IAAMsI,KAAK,GAAGX,CAAC,CAACO,MAAM,CAACK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAGZ,CAAC,CAACO,MAAM,CAACM,MAAM,CAAC,CAAC,CAAC,GAAGb,CAAC,CAACO,MAAM;IACzE,IAAMO,IAAI,GAAGH,KAAK,CAACzF,KAAK,CAAC,GAAG,CAAC;IAC7B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2F,IAAI,CAACzI,MAAM,EAAE8C,CAAC,EAAE,EAAE;MACpC,IAAM4F,IAAI,GAAGD,IAAI,CAAC3F,CAAC,CAAC,CAACD,KAAK,CAAC,GAAG,CAAC;MAC/B8E,CAAC,CAACU,WAAW,CAACM,kBAAkB,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,kBAAkB,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1E;EACF;EACAf,CAAC,CAACrG,IAAI,GAAGqG,CAAC,CAAChG,MAAM,GAAGgG,CAAC,CAACI,QAAQ,GAAGJ,CAAC,CAACO,MAAM,GAAGP,CAAC,CAACC,IAAI;EAClD,OAAOD,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASpG,UAAUA,CAACC,SAAiB,EAAW;EACrD,IAAI;IACF,OAAOoH,OAAO,CAAC,IAAIC,GAAG,CAACrH,SAAS,CAAC,CAAC;EACpC,CAAC,CAAC,OAAOvD,KAAK,EAAE;IACd,OAAO,KAAK;EACd;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA,SAMsB6K,uBAAuBA,CAAAC,GAAA,EAAAC,GAAA;EAAA,OAAAC,wBAAA,CAAAvK,KAAA,OAAAD,SAAA;AAAA;AAAA,SAAAwK,yBAAA;EAAAA,wBAAA,GAAA5K,iBAAA,CAAtC,WACL6K,cAAyC,EACzCC,UAAa,EACM;IACnB,IAAI;MACF,aAAaD,cAAc,CAACC,UAAU,CAAC;IACzC,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV,IAAAzD,qBAAY,EAAC;QACXf,OAAO,YAAAnB,MAAA,CAAY2F,CAAC,CAACxE,OAAO,CAAE;QAC9B9E,IAAI,EAAE,OAAO;QACbhB,KAAK,EAAEqK,UAAU,CAACrK;MACpB,CAAC,CAAC;MACF,OAAO,IAAI;IACb;EACF,CAAC;EAAA,OAAAmK,wBAAA,CAAAvK,KAAA,OAAAD,SAAA;AAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
|
-
import { lstat, readdir } from 'fs/promises';
|
|
2
|
+
import { lstat, readdir, readFile } from 'fs/promises';
|
|
3
3
|
import { join } from 'path';
|
|
4
4
|
import replaceall from 'replaceall';
|
|
5
5
|
import slugify from 'slugify';
|
|
@@ -53,12 +53,13 @@ export default (state => {
|
|
|
53
53
|
state
|
|
54
54
|
});
|
|
55
55
|
},
|
|
56
|
-
saveToFile(type, data, identifier, filename) {
|
|
56
|
+
saveToFile(type, data, identifier, filename, includeMeta = true) {
|
|
57
57
|
return saveToFile({
|
|
58
58
|
type,
|
|
59
59
|
data,
|
|
60
60
|
identifier,
|
|
61
61
|
filename,
|
|
62
|
+
includeMeta,
|
|
62
63
|
state
|
|
63
64
|
});
|
|
64
65
|
},
|
|
@@ -70,14 +71,21 @@ export default (state => {
|
|
|
70
71
|
state
|
|
71
72
|
});
|
|
72
73
|
},
|
|
74
|
+
saveTextToFile(data, filename) {
|
|
75
|
+
return saveTextToFile({
|
|
76
|
+
data,
|
|
77
|
+
filename,
|
|
78
|
+
state
|
|
79
|
+
});
|
|
80
|
+
},
|
|
73
81
|
appendTextToFile(data, filename) {
|
|
74
82
|
return appendTextToFile(data, filename);
|
|
75
83
|
},
|
|
76
84
|
findFilesByName(fileName, fast = true, path = './') {
|
|
77
85
|
return findFilesByName(fileName, fast, path);
|
|
78
86
|
},
|
|
79
|
-
async
|
|
80
|
-
return
|
|
87
|
+
async readFiles(directory) {
|
|
88
|
+
return readFiles(directory);
|
|
81
89
|
},
|
|
82
90
|
substituteEnvParams(input, reader) {
|
|
83
91
|
return substituteEnvParams(input, reader);
|
|
@@ -209,12 +217,10 @@ export function saveToFile({
|
|
|
209
217
|
data,
|
|
210
218
|
identifier,
|
|
211
219
|
filename,
|
|
220
|
+
includeMeta,
|
|
212
221
|
state
|
|
213
222
|
}) {
|
|
214
223
|
const exportData = {};
|
|
215
|
-
exportData['meta'] = getMetadata({
|
|
216
|
-
state
|
|
217
|
-
});
|
|
218
224
|
exportData[type] = {};
|
|
219
225
|
if (Array.isArray(data)) {
|
|
220
226
|
data.forEach(element => {
|
|
@@ -223,13 +229,19 @@ export function saveToFile({
|
|
|
223
229
|
} else {
|
|
224
230
|
exportData[type][data[identifier]] = data;
|
|
225
231
|
}
|
|
226
|
-
|
|
232
|
+
saveJsonToFile({
|
|
233
|
+
data: exportData,
|
|
234
|
+
includeMeta,
|
|
235
|
+
filename,
|
|
236
|
+
state
|
|
237
|
+
});
|
|
227
238
|
}
|
|
228
239
|
|
|
229
240
|
/**
|
|
230
241
|
* Save JSON object to file
|
|
231
|
-
* @param {
|
|
242
|
+
* @param {object} data data object
|
|
232
243
|
* @param {string} filename file name
|
|
244
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
233
245
|
* @return {boolean} true if successful, false otherwise
|
|
234
246
|
*/
|
|
235
247
|
export function saveJsonToFile({
|
|
@@ -239,12 +251,31 @@ export function saveJsonToFile({
|
|
|
239
251
|
state
|
|
240
252
|
}) {
|
|
241
253
|
const exportData = data;
|
|
242
|
-
if (includeMeta) exportData['meta'] = getMetadata({
|
|
254
|
+
if (includeMeta && !exportData['meta']) exportData['meta'] = getMetadata({
|
|
243
255
|
state
|
|
244
256
|
});
|
|
257
|
+
if (!includeMeta && exportData['meta']) delete exportData['meta'];
|
|
245
258
|
deleteDeepByKey(exportData, '_rev');
|
|
259
|
+
return saveTextToFile({
|
|
260
|
+
data: stringify(exportData),
|
|
261
|
+
filename,
|
|
262
|
+
state
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Save text data to file
|
|
268
|
+
* @param data text data
|
|
269
|
+
* @param filename file name
|
|
270
|
+
* @return true if successful, false otherwise
|
|
271
|
+
*/
|
|
272
|
+
export function saveTextToFile({
|
|
273
|
+
data,
|
|
274
|
+
filename,
|
|
275
|
+
state
|
|
276
|
+
}) {
|
|
246
277
|
try {
|
|
247
|
-
fs.writeFileSync(filename,
|
|
278
|
+
fs.writeFileSync(filename, data);
|
|
248
279
|
return true;
|
|
249
280
|
} catch (err) {
|
|
250
281
|
printMessage({
|
|
@@ -296,15 +327,18 @@ export function findFilesByName(fileName, fast = true, path = './') {
|
|
|
296
327
|
* @param directory directory to search
|
|
297
328
|
* @returns list of files
|
|
298
329
|
*/
|
|
299
|
-
export async function
|
|
330
|
+
export async function readFiles(directory) {
|
|
300
331
|
const items = await readdir(directory);
|
|
301
332
|
const filePathsNested = await Promise.all(items.map(async entity => {
|
|
302
333
|
const path = join(directory, entity);
|
|
303
334
|
const isDirectory = (await lstat(path)).isDirectory();
|
|
304
335
|
if (isDirectory) {
|
|
305
|
-
return
|
|
336
|
+
return readFiles(path);
|
|
306
337
|
}
|
|
307
|
-
return
|
|
338
|
+
return {
|
|
339
|
+
path,
|
|
340
|
+
content: await readFile(path, 'utf8')
|
|
341
|
+
};
|
|
308
342
|
}));
|
|
309
343
|
return filePathsNested.flat();
|
|
310
344
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportImportUtils.js","names":["fs","lstat","readdir","join","replaceall","slugify","Constants","decode","decodeBase64Url","encode","encodeBase64Url","debugMessage","printMessage","deleteDeepByKey","stringify","state","getMetadata","titleCase","input","getRealmString","convertBase64TextToArray","b64text","convertBase64UrlTextToArray","b64UTF8Text","convertTextArrayToBase64","textArray","convertTextArrayToBase64Url","validateImport","metadata","getTypedFilename","name","type","suffix","getWorkingDirectory","mkdirs","getFilePath","fileName","saveToFile","data","identifier","filename","saveJsonToFile","includeMeta","appendTextToFile","findFilesByName","fast","path","readFilesRecursive","directory","substituteEnvParams","reader","unSubstituteEnvParams","parseUrl","href","isValidUrl","urlString","origin","getHost","originAmVersion","getAmVersion","exportedBy","getUsername","exportDate","Date","toISOString","exportTool","FRODO_METADATA_ID","exportToolVersion","getFrodoVersion","str","toString","splitStr","toLowerCase","split","i","length","charAt","toUpperCase","slice","realm","getRealm","reduce","result","item","arrayOut","plainText","replace","joinedText","b64encodedScript","slug","remove","wd","getDirectory","existsSync","message","mkdirSync","recursive","exportData","Array","isArray","forEach","element","writeFileSync","err","appendFileSync","entries","readdirSync","encoding","withFileTypes","files","filter","entry","isDirectory","file","map","folders","folder","push","items","filePathsNested","Promise","all","entity","flat","each","key","value","m","match","r","hash","host","hostname","pathname","port","protocol","search","username","password","searchParam","query","indexOf","substr","vars","pair","decodeURIComponent","Boolean","URL","error","exportWithErrorHandling","exportFunction","parameters","e"],"sources":["../../src/utils/ExportImportUtils.ts"],"sourcesContent":["import fs from 'fs';\nimport { lstat, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport { Reader } from 'properties-reader';\nimport replaceall from 'replaceall';\nimport slugify from 'slugify';\n\nimport { ExportMetaData } from '../ops/OpsTypes';\nimport Constants from '../shared/Constants';\nimport { State } from '../shared/State';\nimport {\n decode,\n decodeBase64Url,\n encode,\n encodeBase64Url,\n} from './Base64Utils';\nimport { debugMessage, printMessage } from './Console';\nimport { deleteDeepByKey, stringify } from './JsonUtils';\n\nexport type ExportImport = {\n getMetadata(): ExportMetaData;\n titleCase(input: string): string;\n getRealmString(): string;\n convertBase64TextToArray(b64text: string): any[];\n convertBase64UrlTextToArray(b64UTF8Text: string): any[];\n convertTextArrayToBase64(textArray: string[]): string;\n convertTextArrayToBase64Url(textArray: string[]): any;\n validateImport(metadata: any): boolean;\n getTypedFilename(name: string, type: string, suffix?: string): string;\n getWorkingDirectory(mkdirs?: boolean): string;\n getFilePath(fileName: string, mkdirs?: boolean): string;\n saveToFile(\n type: string,\n data: object,\n identifier: string,\n filename: string\n ): void;\n /**\n * Save JSON object to file\n * @param {Object} data data object\n * @param {String} filename file name\n * @return {boolean} true if successful, false otherwise\n */\n saveJsonToFile(\n data: object,\n filename: string,\n includeMeta?: boolean\n ): boolean;\n /**\n * Append text data to file\n * @param {String} data text data\n * @param {String} filename file name\n */\n appendTextToFile(data: string, filename: string): void;\n /**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\n findFilesByName(fileName: string, fast?: boolean, path?: string): string[];\n /**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\n readFilesRecursive(directory: string): Promise<string[]>;\n\n substituteEnvParams(input: string, reader: Reader): string;\n\n unSubstituteEnvParams(input: string, reader: Reader): string;\n /*\n * Parse a URL into its components and make them easily accessible by name\n *\n * Use in a Scripte Decision Node Script as follows:\n * var referer = parseUrl(requestHeaders.get(\"referer\").get(0));\n * var origin = referer.origin;\n *\n * e.g.: https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/\n * {\n * hash: '#/',\n * host: 'openam-volker-dev.forgeblocks.com',\n * hostname: 'openam-volker-dev.forgeblocks.com',\n * href: 'https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/',\n * origin: 'https://openam-volker-dev.forgeblocks.com',\n * pathname: '/am/XUI/',\n * port: '',\n * protocol: 'https',\n * search: '?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim',\n * username: '',\n * password: '',\n * searchParam: {\n * realm: '/bravo',\n * authIndexType: 'service',\n * authIndexValue: 'InitiateOwnerClaim'\n * }\n * }\n */\n parseUrl(href: string): any;\n /**\n * Check if a string is a valid URL\n * @param {string} urlString input string to be evaluated\n * @returns {boolean} true if a valid URL, false otherwise\n */\n isValidUrl(urlString: string): boolean;\n};\n\nexport default (state: State): ExportImport => {\n return {\n getMetadata(): ExportMetaData {\n return getMetadata({ state });\n },\n titleCase(input: string) {\n return titleCase(input);\n },\n getRealmString() {\n return getRealmString({ state });\n },\n convertBase64TextToArray(b64text: string) {\n return convertBase64TextToArray(b64text);\n },\n convertBase64UrlTextToArray(b64UTF8Text: string) {\n return convertBase64UrlTextToArray(b64UTF8Text);\n },\n convertTextArrayToBase64(textArray: string[]) {\n return convertTextArrayToBase64(textArray);\n },\n convertTextArrayToBase64Url(textArray: string[]) {\n return convertTextArrayToBase64Url(textArray);\n },\n validateImport(metadata): boolean {\n return validateImport(metadata);\n },\n getTypedFilename(name: string, type: string, suffix = 'json') {\n return getTypedFilename(name, type, suffix);\n },\n getWorkingDirectory(mkdirs = false) {\n return getWorkingDirectory({ mkdirs, state });\n },\n getFilePath(fileName: string, mkdirs = false): string {\n return getFilePath({ fileName, mkdirs, state });\n },\n saveToFile(\n type: string,\n data: object,\n identifier: string,\n filename: string\n ) {\n return saveToFile({\n type,\n data,\n identifier,\n filename,\n state,\n });\n },\n saveJsonToFile(\n data: object,\n filename: string,\n includeMeta = true\n ): boolean {\n return saveJsonToFile({ data, filename, includeMeta, state });\n },\n appendTextToFile(data: string, filename: string) {\n return appendTextToFile(data, filename);\n },\n findFilesByName(fileName: string, fast = true, path = './'): string[] {\n return findFilesByName(fileName, fast, path);\n },\n async readFilesRecursive(directory: string): Promise<string[]> {\n return readFilesRecursive(directory);\n },\n substituteEnvParams(input: string, reader: Reader): string {\n return substituteEnvParams(input, reader);\n },\n unSubstituteEnvParams(input: string, reader: Reader): string {\n return unSubstituteEnvParams(input, reader);\n },\n parseUrl(href: string): any {\n return parseUrl(href);\n },\n isValidUrl(urlString: string): boolean {\n return isValidUrl(urlString);\n },\n };\n};\n\nexport function getMetadata({ state }: { state: State }): ExportMetaData {\n const metadata: ExportMetaData = {\n origin: state.getHost(),\n originAmVersion: state.getAmVersion(),\n exportedBy: state.getUsername(),\n exportDate: new Date().toISOString(),\n exportTool: Constants.FRODO_METADATA_ID,\n exportToolVersion: state.getFrodoVersion(),\n };\n return metadata;\n}\n\n/*\n * Output str in title case\n *\n * e.g.: 'ALL UPPERCASE AND all lowercase' = 'All Uppercase And All Lowercase'\n */\nexport function titleCase(input: string) {\n const str = input.toString();\n const splitStr = str.toLowerCase().split(' ');\n for (let i = 0; i < splitStr.length; i += 1) {\n splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].slice(1);\n }\n return splitStr.join(' ');\n}\n\nexport function getRealmString({ state }: { state: State }) {\n const realm = state.getRealm();\n return realm\n .split('/')\n .reduce((result, item) => `${result}${titleCase(item)}`, '');\n}\n\nexport function convertBase64TextToArray(b64text: string) {\n let arrayOut = [];\n let plainText = decode(b64text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertBase64UrlTextToArray(b64UTF8Text: string) {\n let arrayOut = [];\n let plainText = decodeBase64Url(b64UTF8Text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertTextArrayToBase64(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encode(joinedText);\n return b64encodedScript;\n}\n\nexport function convertTextArrayToBase64Url(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encodeBase64Url(joinedText);\n return b64encodedScript;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function validateImport(metadata): boolean {\n return metadata || true;\n}\n\nexport function getTypedFilename(name: string, type: string, suffix = 'json') {\n const slug = slugify(name.replace(/^http(s?):\\/\\//, ''), {\n remove: /[^\\w\\s$*_+~.()'\"!\\-@]+/g,\n });\n return `${slug}.${type}.${suffix}`;\n}\n\nexport function getWorkingDirectory({\n mkdirs = false,\n state,\n}: {\n mkdirs: boolean;\n state: State;\n}) {\n let wd = '.';\n if (state.getDirectory()) {\n wd = state.getDirectory().replace(/\\/$/, '');\n // create directory if it doesn't exist\n if (mkdirs && !fs.existsSync(wd)) {\n debugMessage({\n message: `ExportImportUtils.getWorkingDirectory: creating directory '${wd}'`,\n state,\n });\n fs.mkdirSync(wd, { recursive: true });\n }\n }\n return wd;\n}\n\n/**\n * Get the file path to a file in the working directory. If working directory does not exist, it will return the fileName as the file path.\n * @param fileName The file name\n * @param mkdirs If directories to working directory don't exist, makes the directories if true, and if false does not make the directories. Default: false\n * @return The file path to the file in the working directory\n */\nexport function getFilePath({\n fileName,\n mkdirs = false,\n state,\n}: {\n fileName: string;\n mkdirs: boolean;\n state: State;\n}): string {\n return state.getDirectory()\n ? `${getWorkingDirectory({ mkdirs, state })}/${fileName}`\n : fileName;\n}\n\n/**\n * Save to file\n * @param {any} data data object\n * @param {string} filename file name\n */\nexport function saveToFile({\n type,\n data,\n identifier,\n filename,\n state,\n}: {\n type: string;\n data: object;\n identifier: string;\n filename: string;\n state: State;\n}): void {\n const exportData = {};\n exportData['meta'] = getMetadata({ state });\n exportData[type] = {};\n\n if (Array.isArray(data)) {\n data.forEach((element) => {\n exportData[type][element[identifier]] = element;\n });\n } else {\n exportData[type][data[identifier]] = data;\n }\n fs.writeFileSync(filename, stringify(exportData));\n}\n\n/**\n * Save JSON object to file\n * @param {any} data data object\n * @param {string} filename file name\n * @return {boolean} true if successful, false otherwise\n */\nexport function saveJsonToFile({\n data,\n filename,\n includeMeta = true,\n state,\n}: {\n data: object;\n filename: string;\n includeMeta?: boolean;\n state: State;\n}): boolean {\n const exportData = data;\n if (includeMeta) exportData['meta'] = getMetadata({ state });\n deleteDeepByKey(exportData, '_rev');\n try {\n fs.writeFileSync(filename, stringify(exportData));\n return true;\n } catch (err) {\n printMessage({\n message: `ERROR - can't save ${filename}`,\n type: 'error',\n state,\n });\n return false;\n }\n}\n\n/**\n * Append text data to file\n * @param {string} data text data\n * @param {string} filename file name\n */\nexport function appendTextToFile(data: string, filename: string) {\n fs.appendFileSync(filename, data);\n}\n\n/**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\nexport function findFilesByName(\n fileName: string,\n fast = true,\n path = './'\n): string[] {\n const entries = fs.readdirSync(path, {\n encoding: 'utf8',\n withFileTypes: true,\n });\n\n // Get files within the current directory and add a path key to the file objects\n const files: string[] = entries\n .filter((entry) => !entry.isDirectory())\n .filter((file) => file.name === fileName)\n // .map((file) => ({ ...file, path: path + file.name }));\n .map((file) => path + file.name);\n\n if (fast && files.length > 0) return files;\n\n // search sub-folders\n const folders = entries.filter((entry) => entry.isDirectory());\n for (const folder of folders)\n files.push(...findFilesByName(fileName, fast, `${path}${folder.name}/`));\n\n return files;\n}\n\n/**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\nexport async function readFilesRecursive(directory: string): Promise<string[]> {\n const items = await readdir(directory);\n\n const filePathsNested = await Promise.all(\n items.map(async (entity) => {\n const path = join(directory, entity);\n const isDirectory = (await lstat(path)).isDirectory();\n\n if (isDirectory) {\n return readFilesRecursive(path);\n }\n return path;\n })\n );\n\n return filePathsNested.flat();\n}\n\nexport function substituteEnvParams(input: string, reader: Reader): string {\n reader.each((key, value) => {\n input = replaceall(value, `\\${${key}}`, input);\n });\n return input;\n}\n\nexport function unSubstituteEnvParams(input: string, reader: Reader): string {\n reader.each((key, value) => {\n input = replaceall(`\\${${key}}`, value, input);\n });\n return input;\n}\n\n/*\n * Parse a URL into its components and make them easily accessible by name\n *\n * Use in a Scripte Decision Node Script as follows:\n * var referer = parseUrl(requestHeaders.get(\"referer\").get(0));\n * var origin = referer.origin;\n *\n * e.g.: https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/\n * {\n * hash: '#/',\n * host: 'openam-volker-dev.forgeblocks.com',\n * hostname: 'openam-volker-dev.forgeblocks.com',\n * href: 'https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/',\n * origin: 'https://openam-volker-dev.forgeblocks.com',\n * pathname: '/am/XUI/',\n * port: '',\n * protocol: 'https',\n * search: '?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim',\n * username: '',\n * password: '',\n * searchParam: {\n * realm: '/bravo',\n * authIndexType: 'service',\n * authIndexValue: 'InitiateOwnerClaim'\n * }\n * }\n */\nexport function parseUrl(href: string): any {\n const m = href.match(\n /^(([^:/?#]+):?(?:\\/\\/((?:([^/?#:]*):([^/?#:]*)@)?([^/?#:]*)(?::([^/?#:]*))?)))?([^?#]*)(\\?[^#]*)?(#.*)?$/\n ),\n r = {\n hash: m[10] || '',\n host: m[3] || '',\n hostname: m[6] || '',\n href: m[0] || '',\n origin: m[1] || '',\n pathname: m[8] || (m[1] ? '/' : ''),\n port: m[7] || '',\n protocol: m[2] || '',\n search: m[9] || '',\n username: m[4] || '',\n password: m[5] || '',\n searchParam: {}, // { realm: '/bravo',\n // authIndexType: 'service',\n // authIndexValue: 'InitiateOwnerClaim' }\n };\n if (r.protocol.length == 2) {\n r.protocol = 'file:///' + r.protocol.toUpperCase();\n r.origin = r.protocol + '//' + r.host;\n }\n if (r.search.length > 2) {\n const query = r.search.indexOf('?') === 0 ? r.search.substr(1) : r.search;\n const vars = query.split('&');\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split('=');\n r.searchParam[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n }\n r.href = r.origin + r.pathname + r.search + r.hash;\n return r;\n}\n\n/**\n * Check if a string is a valid URL\n * @param {string} urlString input string to be evaluated\n * @returns {boolean} true if a valid URL, false otherwise\n */\nexport function isValidUrl(urlString: string): boolean {\n try {\n return Boolean(new URL(urlString));\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Performs an export given a function with its parameters with custom error handling that will just print the error if one is thrown and return null.\n * @param exportFunction The export function.\n * @param parameters The parameters to call the export function with. By default, it is { state }.\n * @returns {Promise<R | null>} Returns the result of the export function, or null if an error is thrown\n */\nexport async function exportWithErrorHandling<P extends { state: State }, R>(\n exportFunction: (params: P) => Promise<R>,\n parameters: P\n): Promise<R | null> {\n try {\n return await exportFunction(parameters);\n } catch (e) {\n printMessage({\n message: `ERROR: ${e.message}`,\n type: 'error',\n state: parameters.state,\n });\n return null;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ExportImportUtils.js","names":["fs","lstat","readdir","readFile","join","replaceall","slugify","Constants","decode","decodeBase64Url","encode","encodeBase64Url","debugMessage","printMessage","deleteDeepByKey","stringify","state","getMetadata","titleCase","input","getRealmString","convertBase64TextToArray","b64text","convertBase64UrlTextToArray","b64UTF8Text","convertTextArrayToBase64","textArray","convertTextArrayToBase64Url","validateImport","metadata","getTypedFilename","name","type","suffix","getWorkingDirectory","mkdirs","getFilePath","fileName","saveToFile","data","identifier","filename","includeMeta","saveJsonToFile","saveTextToFile","appendTextToFile","findFilesByName","fast","path","readFiles","directory","substituteEnvParams","reader","unSubstituteEnvParams","parseUrl","href","isValidUrl","urlString","origin","getHost","originAmVersion","getAmVersion","exportedBy","getUsername","exportDate","Date","toISOString","exportTool","FRODO_METADATA_ID","exportToolVersion","getFrodoVersion","str","toString","splitStr","toLowerCase","split","i","length","charAt","toUpperCase","slice","realm","getRealm","reduce","result","item","arrayOut","plainText","replace","joinedText","b64encodedScript","slug","remove","wd","getDirectory","existsSync","message","mkdirSync","recursive","exportData","Array","isArray","forEach","element","writeFileSync","err","appendFileSync","entries","readdirSync","encoding","withFileTypes","files","filter","entry","isDirectory","file","map","folders","folder","push","items","filePathsNested","Promise","all","entity","content","flat","each","key","value","m","match","r","hash","host","hostname","pathname","port","protocol","search","username","password","searchParam","query","indexOf","substr","vars","pair","decodeURIComponent","Boolean","URL","error","exportWithErrorHandling","exportFunction","parameters","e"],"sources":["../../src/utils/ExportImportUtils.ts"],"sourcesContent":["import fs from 'fs';\nimport { lstat, readdir, readFile } from 'fs/promises';\nimport { join } from 'path';\nimport { Reader } from 'properties-reader';\nimport replaceall from 'replaceall';\nimport slugify from 'slugify';\n\nimport { ExportMetaData } from '../ops/OpsTypes';\nimport Constants from '../shared/Constants';\nimport { State } from '../shared/State';\nimport {\n decode,\n decodeBase64Url,\n encode,\n encodeBase64Url,\n} from './Base64Utils';\nimport { debugMessage, printMessage } from './Console';\nimport { deleteDeepByKey, stringify } from './JsonUtils';\n\nexport type ExportImport = {\n getMetadata(): ExportMetaData;\n titleCase(input: string): string;\n getRealmString(): string;\n convertBase64TextToArray(b64text: string): any[];\n convertBase64UrlTextToArray(b64UTF8Text: string): any[];\n convertTextArrayToBase64(textArray: string[]): string;\n convertTextArrayToBase64Url(textArray: string[]): any;\n validateImport(metadata: any): boolean;\n getTypedFilename(name: string, type: string, suffix?: string): string;\n getWorkingDirectory(mkdirs?: boolean): string;\n getFilePath(fileName: string, mkdirs?: boolean): string;\n saveToFile(\n type: string,\n data: object,\n identifier: string,\n filename: string,\n includeMeta?: boolean\n ): void;\n /**\n * Save JSON object to file\n * @param {Object} data data object\n * @param {String} filename file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @return {boolean} true if successful, false otherwise\n */\n saveJsonToFile(\n data: object,\n filename: string,\n includeMeta?: boolean\n ): boolean;\n /**\n * Save text data to file\n * @param data text data\n * @param filename file name\n * @return true if successful, false otherwise\n */\n saveTextToFile(data: string, filename: string): boolean;\n /**\n * Append text data to file\n * @param {String} data text data\n * @param {String} filename file name\n */\n appendTextToFile(data: string, filename: string): void;\n /**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\n findFilesByName(fileName: string, fast?: boolean, path?: string): string[];\n /**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\n readFiles(directory: string): Promise<\n {\n path: string;\n content: string;\n }[]\n >;\n\n substituteEnvParams(input: string, reader: Reader): string;\n\n unSubstituteEnvParams(input: string, reader: Reader): string;\n /*\n * Parse a URL into its components and make them easily accessible by name\n *\n * Use in a Scripte Decision Node Script as follows:\n * var referer = parseUrl(requestHeaders.get(\"referer\").get(0));\n * var origin = referer.origin;\n *\n * e.g.: https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/\n * {\n * hash: '#/',\n * host: 'openam-volker-dev.forgeblocks.com',\n * hostname: 'openam-volker-dev.forgeblocks.com',\n * href: 'https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/',\n * origin: 'https://openam-volker-dev.forgeblocks.com',\n * pathname: '/am/XUI/',\n * port: '',\n * protocol: 'https',\n * search: '?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim',\n * username: '',\n * password: '',\n * searchParam: {\n * realm: '/bravo',\n * authIndexType: 'service',\n * authIndexValue: 'InitiateOwnerClaim'\n * }\n * }\n */\n parseUrl(href: string): any;\n /**\n * Check if a string is a valid URL\n * @param {string} urlString input string to be evaluated\n * @returns {boolean} true if a valid URL, false otherwise\n */\n isValidUrl(urlString: string): boolean;\n};\n\nexport default (state: State): ExportImport => {\n return {\n getMetadata(): ExportMetaData {\n return getMetadata({ state });\n },\n titleCase(input: string) {\n return titleCase(input);\n },\n getRealmString() {\n return getRealmString({ state });\n },\n convertBase64TextToArray(b64text: string) {\n return convertBase64TextToArray(b64text);\n },\n convertBase64UrlTextToArray(b64UTF8Text: string) {\n return convertBase64UrlTextToArray(b64UTF8Text);\n },\n convertTextArrayToBase64(textArray: string[]) {\n return convertTextArrayToBase64(textArray);\n },\n convertTextArrayToBase64Url(textArray: string[]) {\n return convertTextArrayToBase64Url(textArray);\n },\n validateImport(metadata): boolean {\n return validateImport(metadata);\n },\n getTypedFilename(name: string, type: string, suffix = 'json'): string {\n return getTypedFilename(name, type, suffix);\n },\n getWorkingDirectory(mkdirs = false) {\n return getWorkingDirectory({ mkdirs, state });\n },\n getFilePath(fileName: string, mkdirs = false): string {\n return getFilePath({ fileName, mkdirs, state });\n },\n saveToFile(\n type: string,\n data: object,\n identifier: string,\n filename: string,\n includeMeta = true\n ): void {\n return saveToFile({\n type,\n data,\n identifier,\n filename,\n includeMeta,\n state,\n });\n },\n saveJsonToFile(\n data: object,\n filename: string,\n includeMeta = true\n ): boolean {\n return saveJsonToFile({ data, filename, includeMeta, state });\n },\n saveTextToFile(data: string, filename: string): boolean {\n return saveTextToFile({ data, filename, state });\n },\n appendTextToFile(data: string, filename: string) {\n return appendTextToFile(data, filename);\n },\n findFilesByName(fileName: string, fast = true, path = './'): string[] {\n return findFilesByName(fileName, fast, path);\n },\n async readFiles(directory: string): Promise<\n {\n path: string;\n content: string;\n }[]\n > {\n return readFiles(directory);\n },\n substituteEnvParams(input: string, reader: Reader): string {\n return substituteEnvParams(input, reader);\n },\n unSubstituteEnvParams(input: string, reader: Reader): string {\n return unSubstituteEnvParams(input, reader);\n },\n parseUrl(href: string): any {\n return parseUrl(href);\n },\n isValidUrl(urlString: string): boolean {\n return isValidUrl(urlString);\n },\n };\n};\n\nexport function getMetadata({ state }: { state: State }): ExportMetaData {\n const metadata: ExportMetaData = {\n origin: state.getHost(),\n originAmVersion: state.getAmVersion(),\n exportedBy: state.getUsername(),\n exportDate: new Date().toISOString(),\n exportTool: Constants.FRODO_METADATA_ID,\n exportToolVersion: state.getFrodoVersion(),\n };\n return metadata;\n}\n\n/*\n * Output str in title case\n *\n * e.g.: 'ALL UPPERCASE AND all lowercase' = 'All Uppercase And All Lowercase'\n */\nexport function titleCase(input: string) {\n const str = input.toString();\n const splitStr = str.toLowerCase().split(' ');\n for (let i = 0; i < splitStr.length; i += 1) {\n splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].slice(1);\n }\n return splitStr.join(' ');\n}\n\nexport function getRealmString({ state }: { state: State }) {\n const realm = state.getRealm();\n return realm\n .split('/')\n .reduce((result, item) => `${result}${titleCase(item)}`, '');\n}\n\nexport function convertBase64TextToArray(b64text: string) {\n let arrayOut = [];\n let plainText = decode(b64text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertBase64UrlTextToArray(b64UTF8Text: string) {\n let arrayOut = [];\n let plainText = decodeBase64Url(b64UTF8Text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertTextArrayToBase64(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encode(joinedText);\n return b64encodedScript;\n}\n\nexport function convertTextArrayToBase64Url(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encodeBase64Url(joinedText);\n return b64encodedScript;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function validateImport(metadata): boolean {\n return metadata || true;\n}\n\nexport function getTypedFilename(\n name: string,\n type: string,\n suffix = 'json'\n): string {\n const slug = slugify(name.replace(/^http(s?):\\/\\//, ''), {\n remove: /[^\\w\\s$*_+~.()'\"!\\-@]+/g,\n });\n return `${slug}.${type}.${suffix}`;\n}\n\nexport function getWorkingDirectory({\n mkdirs = false,\n state,\n}: {\n mkdirs: boolean;\n state: State;\n}) {\n let wd = '.';\n if (state.getDirectory()) {\n wd = state.getDirectory().replace(/\\/$/, '');\n // create directory if it doesn't exist\n if (mkdirs && !fs.existsSync(wd)) {\n debugMessage({\n message: `ExportImportUtils.getWorkingDirectory: creating directory '${wd}'`,\n state,\n });\n fs.mkdirSync(wd, { recursive: true });\n }\n }\n return wd;\n}\n\n/**\n * Get the file path to a file in the working directory. If working directory does not exist, it will return the fileName as the file path.\n * @param fileName The file name\n * @param mkdirs If directories to working directory don't exist, makes the directories if true, and if false does not make the directories. Default: false\n * @return The file path to the file in the working directory\n */\nexport function getFilePath({\n fileName,\n mkdirs = false,\n state,\n}: {\n fileName: string;\n mkdirs: boolean;\n state: State;\n}): string {\n return state.getDirectory()\n ? `${getWorkingDirectory({ mkdirs, state })}/${fileName}`\n : fileName;\n}\n\n/**\n * Save to file\n * @param {any} data data object\n * @param {string} filename file name\n */\nexport function saveToFile({\n type,\n data,\n identifier,\n filename,\n includeMeta,\n state,\n}: {\n type: string;\n data: object;\n identifier: string;\n filename: string;\n includeMeta: boolean;\n state: State;\n}): void {\n const exportData = {};\n exportData[type] = {};\n\n if (Array.isArray(data)) {\n data.forEach((element) => {\n exportData[type][element[identifier]] = element;\n });\n } else {\n exportData[type][data[identifier]] = data;\n }\n saveJsonToFile({\n data: exportData,\n includeMeta,\n filename,\n state,\n });\n}\n\n/**\n * Save JSON object to file\n * @param {object} data data object\n * @param {string} filename file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @return {boolean} true if successful, false otherwise\n */\nexport function saveJsonToFile({\n data,\n filename,\n includeMeta = true,\n state,\n}: {\n data: object;\n filename: string;\n includeMeta?: boolean;\n state: State;\n}): boolean {\n const exportData = data;\n if (includeMeta && !exportData['meta'])\n exportData['meta'] = getMetadata({ state });\n if (!includeMeta && exportData['meta']) delete exportData['meta'];\n deleteDeepByKey(exportData, '_rev');\n return saveTextToFile({\n data: stringify(exportData),\n filename,\n state,\n });\n}\n\n/**\n * Save text data to file\n * @param data text data\n * @param filename file name\n * @return true if successful, false otherwise\n */\nexport function saveTextToFile({\n data,\n filename,\n state,\n}: {\n data: string;\n filename: string;\n state: State;\n}): boolean {\n try {\n fs.writeFileSync(filename, data);\n return true;\n } catch (err) {\n printMessage({\n message: `ERROR - can't save ${filename}`,\n type: 'error',\n state,\n });\n return false;\n }\n}\n\n/**\n * Append text data to file\n * @param {string} data text data\n * @param {string} filename file name\n */\nexport function appendTextToFile(data: string, filename: string) {\n fs.appendFileSync(filename, data);\n}\n\n/**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\nexport function findFilesByName(\n fileName: string,\n fast = true,\n path = './'\n): string[] {\n const entries = fs.readdirSync(path, {\n encoding: 'utf8',\n withFileTypes: true,\n });\n\n // Get files within the current directory and add a path key to the file objects\n const files: string[] = entries\n .filter((entry) => !entry.isDirectory())\n .filter((file) => file.name === fileName)\n // .map((file) => ({ ...file, path: path + file.name }));\n .map((file) => path + file.name);\n\n if (fast && files.length > 0) return files;\n\n // search sub-folders\n const folders = entries.filter((entry) => entry.isDirectory());\n for (const folder of folders)\n files.push(...findFilesByName(fileName, fast, `${path}${folder.name}/`));\n\n return files;\n}\n\n/**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\nexport async function readFiles(directory: string): Promise<\n {\n path: string;\n content: string;\n }[]\n> {\n const items = await readdir(directory);\n\n const filePathsNested = await Promise.all(\n items.map(async (entity) => {\n const path = join(directory, entity);\n const isDirectory = (await lstat(path)).isDirectory();\n\n if (isDirectory) {\n return readFiles(path);\n }\n return {\n path,\n content: await readFile(path, 'utf8'),\n };\n })\n );\n\n return filePathsNested.flat();\n}\n\nexport function substituteEnvParams(input: string, reader: Reader): string {\n reader.each((key, value) => {\n input = replaceall(value, `\\${${key}}`, input);\n });\n return input;\n}\n\nexport function unSubstituteEnvParams(input: string, reader: Reader): string {\n reader.each((key, value) => {\n input = replaceall(`\\${${key}}`, value, input);\n });\n return input;\n}\n\n/*\n * Parse a URL into its components and make them easily accessible by name\n *\n * Use in a Scripte Decision Node Script as follows:\n * var referer = parseUrl(requestHeaders.get(\"referer\").get(0));\n * var origin = referer.origin;\n *\n * e.g.: https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/\n * {\n * hash: '#/',\n * host: 'openam-volker-dev.forgeblocks.com',\n * hostname: 'openam-volker-dev.forgeblocks.com',\n * href: 'https://openam-volker-dev.forgeblocks.com/am/XUI/?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim#/',\n * origin: 'https://openam-volker-dev.forgeblocks.com',\n * pathname: '/am/XUI/',\n * port: '',\n * protocol: 'https',\n * search: '?realm=/bravo&authIndexType=service&authIndexValue=InitiateOwnerClaim',\n * username: '',\n * password: '',\n * searchParam: {\n * realm: '/bravo',\n * authIndexType: 'service',\n * authIndexValue: 'InitiateOwnerClaim'\n * }\n * }\n */\nexport function parseUrl(href: string): any {\n const m = href.match(\n /^(([^:/?#]+):?(?:\\/\\/((?:([^/?#:]*):([^/?#:]*)@)?([^/?#:]*)(?::([^/?#:]*))?)))?([^?#]*)(\\?[^#]*)?(#.*)?$/\n ),\n r = {\n hash: m[10] || '',\n host: m[3] || '',\n hostname: m[6] || '',\n href: m[0] || '',\n origin: m[1] || '',\n pathname: m[8] || (m[1] ? '/' : ''),\n port: m[7] || '',\n protocol: m[2] || '',\n search: m[9] || '',\n username: m[4] || '',\n password: m[5] || '',\n searchParam: {}, // { realm: '/bravo',\n // authIndexType: 'service',\n // authIndexValue: 'InitiateOwnerClaim' }\n };\n if (r.protocol.length == 2) {\n r.protocol = 'file:///' + r.protocol.toUpperCase();\n r.origin = r.protocol + '//' + r.host;\n }\n if (r.search.length > 2) {\n const query = r.search.indexOf('?') === 0 ? r.search.substr(1) : r.search;\n const vars = query.split('&');\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split('=');\n r.searchParam[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n }\n r.href = r.origin + r.pathname + r.search + r.hash;\n return r;\n}\n\n/**\n * Check if a string is a valid URL\n * @param {string} urlString input string to be evaluated\n * @returns {boolean} true if a valid URL, false otherwise\n */\nexport function isValidUrl(urlString: string): boolean {\n try {\n return Boolean(new URL(urlString));\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Performs an export given a function with its parameters with custom error handling that will just print the error if one is thrown and return null.\n * @param exportFunction The export function.\n * @param parameters The parameters to call the export function with. By default, it is { state }.\n * @returns {Promise<R | null>} Returns the result of the export function, or null if an error is thrown\n */\nexport async function exportWithErrorHandling<P extends { state: State }, R>(\n exportFunction: (params: P) => Promise<R>,\n parameters: P\n): Promise<R | null> {\n try {\n return await exportFunction(parameters);\n } catch (e) {\n printMessage({\n message: `ERROR: ${e.message}`,\n type: 'error',\n state: parameters.state,\n });\n return null;\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -13,14 +13,22 @@ export type ExportImport = {
|
|
|
13
13
|
getTypedFilename(name: string, type: string, suffix?: string): string;
|
|
14
14
|
getWorkingDirectory(mkdirs?: boolean): string;
|
|
15
15
|
getFilePath(fileName: string, mkdirs?: boolean): string;
|
|
16
|
-
saveToFile(type: string, data: object, identifier: string, filename: string): void;
|
|
16
|
+
saveToFile(type: string, data: object, identifier: string, filename: string, includeMeta?: boolean): void;
|
|
17
17
|
/**
|
|
18
18
|
* Save JSON object to file
|
|
19
19
|
* @param {Object} data data object
|
|
20
20
|
* @param {String} filename file name
|
|
21
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
21
22
|
* @return {boolean} true if successful, false otherwise
|
|
22
23
|
*/
|
|
23
24
|
saveJsonToFile(data: object, filename: string, includeMeta?: boolean): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Save text data to file
|
|
27
|
+
* @param data text data
|
|
28
|
+
* @param filename file name
|
|
29
|
+
* @return true if successful, false otherwise
|
|
30
|
+
*/
|
|
31
|
+
saveTextToFile(data: string, filename: string): boolean;
|
|
24
32
|
/**
|
|
25
33
|
* Append text data to file
|
|
26
34
|
* @param {String} data text data
|
|
@@ -41,7 +49,10 @@ export type ExportImport = {
|
|
|
41
49
|
* @param directory directory to search
|
|
42
50
|
* @returns list of files
|
|
43
51
|
*/
|
|
44
|
-
|
|
52
|
+
readFiles(directory: string): Promise<{
|
|
53
|
+
path: string;
|
|
54
|
+
content: string;
|
|
55
|
+
}[]>;
|
|
45
56
|
substituteEnvParams(input: string, reader: Reader): string;
|
|
46
57
|
unSubstituteEnvParams(input: string, reader: Reader): string;
|
|
47
58
|
parseUrl(href: string): any;
|
|
@@ -87,17 +98,19 @@ export declare function getFilePath({ fileName, mkdirs, state, }: {
|
|
|
87
98
|
* @param {any} data data object
|
|
88
99
|
* @param {string} filename file name
|
|
89
100
|
*/
|
|
90
|
-
export declare function saveToFile({ type, data, identifier, filename, state, }: {
|
|
101
|
+
export declare function saveToFile({ type, data, identifier, filename, includeMeta, state, }: {
|
|
91
102
|
type: string;
|
|
92
103
|
data: object;
|
|
93
104
|
identifier: string;
|
|
94
105
|
filename: string;
|
|
106
|
+
includeMeta: boolean;
|
|
95
107
|
state: State;
|
|
96
108
|
}): void;
|
|
97
109
|
/**
|
|
98
110
|
* Save JSON object to file
|
|
99
|
-
* @param {
|
|
111
|
+
* @param {object} data data object
|
|
100
112
|
* @param {string} filename file name
|
|
113
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
101
114
|
* @return {boolean} true if successful, false otherwise
|
|
102
115
|
*/
|
|
103
116
|
export declare function saveJsonToFile({ data, filename, includeMeta, state, }: {
|
|
@@ -106,6 +119,17 @@ export declare function saveJsonToFile({ data, filename, includeMeta, state, }:
|
|
|
106
119
|
includeMeta?: boolean;
|
|
107
120
|
state: State;
|
|
108
121
|
}): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Save text data to file
|
|
124
|
+
* @param data text data
|
|
125
|
+
* @param filename file name
|
|
126
|
+
* @return true if successful, false otherwise
|
|
127
|
+
*/
|
|
128
|
+
export declare function saveTextToFile({ data, filename, state, }: {
|
|
129
|
+
data: string;
|
|
130
|
+
filename: string;
|
|
131
|
+
state: State;
|
|
132
|
+
}): boolean;
|
|
109
133
|
/**
|
|
110
134
|
* Append text data to file
|
|
111
135
|
* @param {string} data text data
|
|
@@ -126,7 +150,10 @@ export declare function findFilesByName(fileName: string, fast?: boolean, path?:
|
|
|
126
150
|
* @param directory directory to search
|
|
127
151
|
* @returns list of files
|
|
128
152
|
*/
|
|
129
|
-
export declare function
|
|
153
|
+
export declare function readFiles(directory: string): Promise<{
|
|
154
|
+
path: string;
|
|
155
|
+
content: string;
|
|
156
|
+
}[]>;
|
|
130
157
|
export declare function substituteEnvParams(input: string, reader: Reader): string;
|
|
131
158
|
export declare function unSubstituteEnvParams(input: string, reader: Reader): string;
|
|
132
159
|
export declare function parseUrl(href: string): any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportImportUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ExportImportUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAUxC,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,IAAI,cAAc,CAAC;IAC9B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,cAAc,IAAI,MAAM,CAAC;IACzB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;IACjD,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;IACxD,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACtD,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACtD,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC;IACvC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtE,mBAAmB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9C,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxD,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ExportImportUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ExportImportUtils.ts"],"names":[],"mappings":"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"}
|