@mitre/hdf-converters 2.13.0 → 2.14.0
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/lib/package.json +6 -6
- package/lib/src/base-converter.d.ts +9 -1
- package/lib/src/base-converter.d.ts.map +1 -1
- package/lib/src/base-converter.js +10 -2
- package/lib/src/base-converter.js.map +1 -1
- package/lib/src/converters-from-hdf/html/embedded-assets.d.ts +2 -2
- package/lib/src/converters-from-hdf/html/embedded-assets.d.ts.map +1 -1
- package/lib/src/converters-from-hdf/html/embedded-assets.js +2 -2
- package/lib/src/converters-from-hdf/html/embedded-assets.js.map +1 -1
- package/lib/src/converters-from-hdf/html/reverse-html-mapper.d.ts.map +1 -1
- package/lib/src/converters-from-hdf/html/reverse-html-mapper.js +6 -19
- package/lib/src/converters-from-hdf/html/reverse-html-mapper.js.map +1 -1
- package/lib/src/dbprotect-mapper.d.ts.map +1 -1
- package/lib/src/dbprotect-mapper.js +0 -23
- package/lib/src/dbprotect-mapper.js.map +1 -1
- package/lib/src/nessus-mapper.d.ts +3 -2
- package/lib/src/nessus-mapper.d.ts.map +1 -1
- package/lib/src/nessus-mapper.js +13 -3
- package/lib/src/nessus-mapper.js.map +1 -1
- package/lib/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +6 -6
package/lib/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mitre/hdf-converters",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.14.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Converter util library used to transform various scan results into HDF format",
|
|
6
6
|
"repository": {
|
|
@@ -29,11 +29,11 @@
|
|
|
29
29
|
"xml2json": "node data/converters/xml2json.ts"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@aws-sdk/client-config-service": "3.
|
|
32
|
+
"@aws-sdk/client-config-service": "3.1113.0",
|
|
33
33
|
"@e965/xlsx": "^0.20.0",
|
|
34
34
|
"@mdi/js": "^7.0.96",
|
|
35
35
|
"@microsoft/microsoft-graph-types": "^2.40.0",
|
|
36
|
-
"@mitre/jsonix": "^3.0.
|
|
36
|
+
"@mitre/jsonix": "^3.0.11",
|
|
37
37
|
"@smithy/node-http-handler": "^4.0.0",
|
|
38
38
|
"@tailwindcss/cli": "^4.0.6",
|
|
39
39
|
"@types/csv2json": "^1.4.2",
|
|
@@ -47,10 +47,10 @@
|
|
|
47
47
|
"axios": "^1.3.5",
|
|
48
48
|
"compare-versions": "^6.0.0",
|
|
49
49
|
"csv2json": "^2.0.2",
|
|
50
|
-
"fast-xml-parser": "5.
|
|
50
|
+
"fast-xml-parser": "5.11.0",
|
|
51
51
|
"html-entities": "^2.3.2",
|
|
52
52
|
"htmlparser2": "^12.0.0",
|
|
53
|
-
"inspecjs": "^2.
|
|
53
|
+
"inspecjs": "^2.14.0",
|
|
54
54
|
"lodash": "^4.17.21",
|
|
55
55
|
"moment": "^2.29.1",
|
|
56
56
|
"mustache": "^4.2.0",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
71
|
"@types/lodash": "^4.14.161",
|
|
72
|
-
"@types/node": "^
|
|
72
|
+
"@types/node": "^26.0.0",
|
|
73
73
|
"vitest": "^4.0.18",
|
|
74
74
|
"xml2js": "^0.6.0"
|
|
75
75
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { X2jOptions } from 'fast-xml-parser';
|
|
1
2
|
import { ExecJSON } from 'inspecjs';
|
|
2
3
|
export interface ILookupPath {
|
|
3
4
|
shortcircuit?: boolean;
|
|
@@ -18,7 +19,14 @@ export type MappedReform<T, U> = {
|
|
|
18
19
|
};
|
|
19
20
|
export declare function generateHash(data: string, algorithm?: string): string;
|
|
20
21
|
export declare function buildParseHtmlFunc(): Promise<(input: unknown) => string>;
|
|
21
|
-
export declare
|
|
22
|
+
export declare const DEFAULT_XML_PROCESS_ENTITIES_OPTIONS: {
|
|
23
|
+
enabled: true;
|
|
24
|
+
maxEntityCount: number;
|
|
25
|
+
maxEntitySize: number;
|
|
26
|
+
maxExpandedLength: number;
|
|
27
|
+
maxTotalExpansions: number;
|
|
28
|
+
};
|
|
29
|
+
export declare function parseXml(xml: string, additionalOptions?: X2jOptions): Record<string, unknown>;
|
|
22
30
|
export declare function parseCsv(csv: string): unknown[];
|
|
23
31
|
export declare function impactMapping(mapping: Map<string, number>): (severity: unknown) => number;
|
|
24
32
|
export declare class BaseConverter<D = Record<string, unknown>> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-converter.d.ts","sourceRoot":"","sources":["../../src/base-converter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base-converter.d.ts","sourceRoot":"","sources":["../../src/base-converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.BaseConverter = void 0;
|
|
39
|
+
exports.BaseConverter = exports.DEFAULT_XML_PROCESS_ENTITIES_OPTIONS = void 0;
|
|
40
40
|
exports.generateHash = generateHash;
|
|
41
41
|
exports.buildParseHtmlFunc = buildParseHtmlFunc;
|
|
42
42
|
exports.parseXml = parseXml;
|
|
@@ -69,6 +69,13 @@ async function buildParseHtmlFunc() {
|
|
|
69
69
|
return data.join('');
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
|
+
exports.DEFAULT_XML_PROCESS_ENTITIES_OPTIONS = {
|
|
73
|
+
enabled: true,
|
|
74
|
+
maxEntityCount: 100,
|
|
75
|
+
maxEntitySize: 10_000,
|
|
76
|
+
maxExpandedLength: 100_000,
|
|
77
|
+
maxTotalExpansions: 10_000_000,
|
|
78
|
+
};
|
|
72
79
|
function parseXml(xml, additionalOptions) {
|
|
73
80
|
const options = {
|
|
74
81
|
attributeNamePrefix: '',
|
|
@@ -77,8 +84,9 @@ function parseXml(xml, additionalOptions) {
|
|
|
77
84
|
ignoreDeclaration: true,
|
|
78
85
|
parseAttributeValue: false,
|
|
79
86
|
parseTagValue: false,
|
|
87
|
+
processEntities: exports.DEFAULT_XML_PROCESS_ENTITIES_OPTIONS,
|
|
80
88
|
removeNSPrefix: true,
|
|
81
|
-
...additionalOptions
|
|
89
|
+
...additionalOptions,
|
|
82
90
|
};
|
|
83
91
|
const parser = new fast_xml_parser_1.XMLParser(options);
|
|
84
92
|
return parser.parse(xml);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-converter.js","sourceRoot":"","sources":["../../src/base-converter.ts"],"names":[],"mappings":"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","sourcesContent":["import {createHash} from 'crypto';\nimport {XMLParser} from 'fast-xml-parser';\nimport {ExecJSON} from 'inspecjs';\nimport * as _ from 'lodash';\nimport Papa from 'papaparse';\n\nexport interface ILookupPath {\n shortcircuit?: boolean;\n path?: string | string[];\n transformer?: (value: any) => unknown;\n arrayTransformer?: (value: unknown[], file: any) => unknown[];\n pathTransform?: (value: unknown, file: any) => unknown;\n key?: string;\n}\n\nexport type ObjectEntryValue<T> = {[K in keyof T]: readonly [K, T[K]]}[keyof T];\n/* eslint-disable @typescript-eslint/ban-types */\nexport type MappedTransform<T, U extends ILookupPath> = {\n [K in keyof T]: Exclude<T[K], undefined | null> extends Array<any>\n ? MappedTransform<T[K], U>\n : T[K] extends Function\n ? T[K]\n : T[K] extends object\n ? MappedTransform<T[K] & U, U>\n : T[K] | U;\n};\nexport type MappedReform<T, U> = {\n [K in keyof T]: Exclude<T[K], undefined | null> extends Array<any>\n ? MappedReform<T[K], U>\n : T[K] extends object\n ? MappedReform<T[K] & U, U>\n : Exclude<T[K], U>;\n};\n/* eslint-enable @typescript-eslint/ban-types */\n\n// Hashing Function\nexport function generateHash(data: string, algorithm = 'sha256'): string {\n const hash = createHash(algorithm);\n return hash.update(data).digest('hex');\n}\n\nexport async function buildParseHtmlFunc(): Promise<(input: unknown) => string> {\n const htmlparser = await import('htmlparser2');\n return (input: unknown): string => {\n if (!_.isString(input)) {\n return '';\n }\n const data: string[] = [];\n const parser = new htmlparser.Parser({\n ontext(text: string) {\n data.push(text);\n }\n });\n parser.write(String(input));\n parser.end();\n return data.join('');\n };\n}\n\nexport function parseXml(\n xml: string,\n additionalOptions?: Record<string, unknown>\n): Record<string, unknown> {\n const options = {\n attributeNamePrefix: '',\n textNodeName: 'text',\n ignoreAttributes: false,\n ignoreDeclaration: true,\n parseAttributeValue: false,\n parseTagValue: false,\n removeNSPrefix: true,\n ...additionalOptions\n };\n const parser = new XMLParser(options);\n return parser.parse(xml);\n}\n\nexport function parseCsv(csv: string): unknown[] {\n const result = Papa.parse(csv.trim(), {header: true});\n\n if (result.errors.length) {\n throw result.errors;\n }\n\n return result.data;\n}\n\nexport function impactMapping(\n mapping: Map<string, number>\n): (severity: unknown) => number {\n return (severity: unknown): number => {\n if (typeof severity === 'string' || typeof severity === 'number') {\n return mapping.get(severity.toString().toLowerCase()) || 0;\n } else {\n return 0;\n }\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction collapseDuplicates<T extends object>(\n array: Array<T>,\n key: string,\n collapseResults: boolean\n): Array<T> {\n const seen = new Map<string, number>();\n const newArray: T[] = [];\n let counter = 0;\n array.forEach((item: T) => {\n const propertyValue = _.get(item, key);\n if (typeof propertyValue === 'string') {\n const index = seen.get(propertyValue) || 0;\n if (!seen.has(propertyValue)) {\n newArray.push(item);\n seen.set(propertyValue, counter);\n counter++;\n } else {\n const oldResult = _.get(\n newArray[index],\n 'results'\n ) as ExecJSON.ControlResult[];\n const descriptions = oldResult.map((element) =>\n _.get(element, 'code_desc')\n );\n if (collapseResults) {\n if (\n descriptions.indexOf(\n _.get(item, 'results[0].code_desc') as string\n ) === -1\n ) {\n _.set(\n newArray[index],\n 'results',\n oldResult.concat(\n _.get(item, 'results') as ExecJSON.ControlResult[]\n )\n );\n }\n } else {\n _.set(\n newArray[index],\n 'results',\n oldResult.concat(_.get(item, 'results') as ExecJSON.ControlResult[])\n );\n }\n }\n }\n });\n return newArray;\n}\n\nexport class BaseConverter<D = Record<string, unknown>> {\n data: D;\n mappings?: MappedTransform<ExecJSON.Execution, ILookupPath>;\n collapseResults: boolean;\n\n constructor(data: D, collapseResults = false) {\n this.data = data;\n this.collapseResults = collapseResults;\n }\n\n setMappings(\n mappings: MappedTransform<ExecJSON.Execution, ILookupPath>\n ): void {\n this.mappings = mappings;\n }\n\n toHdf(): ExecJSON.Execution {\n if (this.mappings === undefined) {\n throw new Error('Mappings must be provided');\n } else {\n const v = this.convertInternal(\n this.data as Record<string, unknown>,\n this.mappings\n );\n v.profiles.forEach((element) => {\n element.sha256 = generateHash(JSON.stringify(element));\n });\n return v;\n }\n }\n\n objectMap<T extends Array<unknown>, V>(\n obj: T,\n fn: (v: ObjectEntryValue<T>) => V\n ): {[K in keyof T]: V} {\n return Object.fromEntries(\n Object.entries(obj).map(([k, v]) => [k, fn(v as ObjectEntryValue<T>)])\n ) as Record<keyof T, V>;\n }\n convertInternal<T>(\n file: Record<string, unknown>,\n fields: T\n ): MappedReform<T, ILookupPath> {\n const isShortcircuiting =\n _.isObject(fields) &&\n _.has(fields, 'shortcircuit') &&\n _.isBoolean(_.get(fields, 'shortcircuit')) &&\n _.get(fields, 'shortcircuit');\n if (isShortcircuiting) {\n return _.omit(fields as object, 'shortcircuit') as MappedReform<\n T,\n ILookupPath\n >;\n }\n\n const result = this.objectMap(fields as T[], (v) =>\n this.evaluate(file, v as T & object & ILookupPath)\n );\n return result as MappedReform<T, ILookupPath>;\n }\n\n evaluate<T>(\n file: Record<string, unknown>,\n v: T | Array<T>\n ): T | Array<T> | MappedReform<T, ILookupPath> {\n if (v === undefined) {\n return v;\n }\n\n const hasTransformer =\n _.has(v, 'transformer') && _.isFunction(_.get(v, 'transformer'));\n let transformer = (val: unknown) => val;\n if (hasTransformer) {\n transformer = _.get(v, 'transformer') as any;\n v = _.omit(v as object, 'transformer') as T;\n }\n\n const haspathTransform =\n _.has(v, 'pathTransform') && _.isFunction(_.get(v, 'pathTransform'));\n\n let pathTransform: (\n val: T | T[],\n f?: Record<string, unknown>\n ) => T | T[] = (val: T | T[]) => val;\n if (haspathTransform) {\n pathTransform = _.get(v, 'pathTransform') as any;\n v = _.omit(v as object, 'pathTransform') as T;\n }\n\n const hasPath = _.isObject(v) && _.has(v, 'path');\n let pathV = v;\n if (hasPath) {\n pathV = pathTransform(\n this.handlePath(\n file,\n _.get(v, 'path') as unknown as string | string[]\n ) as T | T[],\n file\n );\n v = _.omit(v as object, 'path') as T;\n }\n\n if (\n _.isString(pathV) ||\n _.isNumber(pathV) ||\n _.isBoolean(pathV) ||\n _.isNull(pathV)\n ) {\n return transformer(pathV) as T;\n }\n\n if (Array.isArray(pathV)) {\n return hasTransformer\n ? (transformer(pathV) as T[])\n : this.handleArray(file, pathV as any);\n }\n\n if (_.keys(v).length > 0 && hasTransformer) {\n return {\n ...this.convertInternal(file, v),\n ...this.convertInternal(\n hasPath ? (pathV as Record<string, unknown>) : file,\n transformer(hasPath ? pathV : (file as T | T[])) as object\n )\n } as MappedReform<T, ILookupPath>;\n }\n\n if (hasTransformer) {\n return transformer(hasPath ? pathV : (file as T | T[])) as\n | T\n | T[]\n | MappedReform<T, ILookupPath>;\n }\n\n return hasPath\n ? pathV\n : (this.convertInternal(file, v) as\n | T\n | T[]\n | MappedReform<T, ILookupPath>);\n }\n\n handleArray<T>(\n file: Record<string, unknown>,\n v: Array<T & ILookupPath>\n ): Array<T> {\n if (v.length === 0) {\n return [];\n }\n const resultingData: Array<T> = [];\n for (const lookupPath of v) {\n if (lookupPath.path === undefined) {\n const arrayTransformer = lookupPath.arrayTransformer?.bind(this);\n v = v.map((element) => {\n return _.isObject(element)\n ? (_.omit(element, ['arrayTransformer']) as T & ILookupPath)\n : element;\n });\n let output: Array<T> = [];\n output.push(this.evaluate(file, lookupPath) as T);\n if (arrayTransformer !== undefined) {\n if (Array.isArray(arrayTransformer)) {\n output = arrayTransformer[0].apply(arrayTransformer[1], [\n v,\n this.data\n ]);\n } else {\n output = arrayTransformer.apply(null, [output, this.data]) as T[];\n }\n }\n resultingData.push(...output);\n } else {\n const path = lookupPath.path;\n const key = lookupPath.key;\n const arrayTransformer = lookupPath.arrayTransformer?.bind(this);\n const transformer = lookupPath.transformer?.bind(this);\n const pathTransform = lookupPath.pathTransform?.bind(this);\n if (this.hasPath(file, path)) {\n let pathVal = this.handlePath(file, path);\n if (pathTransform !== undefined) {\n pathVal = pathTransform(pathVal, file);\n }\n if (Array.isArray(pathVal)) {\n v = pathVal.map((element: Record<string, unknown>) => {\n let processed = _.omit(\n this.convertInternal(element, lookupPath),\n [\n 'path',\n 'transformer',\n 'arrayTransformer',\n 'key',\n 'pathTransform'\n ]\n ) as unknown as T;\n if (transformer !== undefined) {\n processed = this.evaluate(element, {\n ...processed,\n transformer\n }) as T;\n }\n return processed;\n }) as any;\n if (arrayTransformer !== undefined) {\n if (Array.isArray(arrayTransformer)) {\n v = arrayTransformer[0].apply(arrayTransformer[1], [\n v,\n this.data\n ]);\n } else {\n v = arrayTransformer.apply(null, [v, this.data]) as any;\n }\n }\n if (key !== undefined) {\n v = collapseDuplicates(v, key, this.collapseResults);\n }\n resultingData.push(...v);\n } else {\n if (transformer !== undefined) {\n pathVal = transformer(pathVal);\n }\n resultingData.push(pathVal as T);\n }\n }\n }\n }\n\n return resultingData;\n }\n\n handlePath(file: Record<string, unknown>, path: string | string[]): unknown {\n let pathArray = path;\n\n if (typeof path === 'string') {\n pathArray = [path];\n }\n\n const index = _.findIndex(pathArray, (p) => this.hasPath(file, p));\n\n if (index === -1) {\n // should probably throw error here, but instead are providing a default value to match current behavior\n return '';\n } else if (pathArray[index].startsWith('$.')) {\n return _.get(this.data, pathArray[index].slice(2)) || ''; // having default values implemented like this also prevents 'null' from being passed through\n } else {\n return _.get(file, pathArray[index]) ?? '';\n }\n }\n hasPath(file: Record<string, unknown>, path: string | string[]): boolean {\n let pathArray;\n if (typeof path === 'string') {\n pathArray = [path];\n } else {\n pathArray = path;\n }\n\n return _.some(pathArray, (p) => {\n if (p.startsWith('$.')) {\n return _.has(this.data, p.slice(2));\n } else {\n return _.has(file, p);\n }\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"base-converter.js","sourceRoot":"","sources":["../../src/base-converter.ts"],"names":[],"mappings":"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","sourcesContent":["import {createHash} from 'crypto';\nimport type { ProcessEntitiesOptions, X2jOptions } from 'fast-xml-parser';\nimport { XMLParser } from 'fast-xml-parser';\nimport {ExecJSON} from 'inspecjs';\nimport * as _ from 'lodash';\nimport Papa from 'papaparse';\n\nexport interface ILookupPath {\n shortcircuit?: boolean;\n path?: string | string[];\n transformer?: (value: any) => unknown;\n arrayTransformer?: (value: unknown[], file: any) => unknown[];\n pathTransform?: (value: unknown, file: any) => unknown;\n key?: string;\n}\n\nexport type ObjectEntryValue<T> = {[K in keyof T]: readonly [K, T[K]]}[keyof T];\n/* eslint-disable @typescript-eslint/ban-types */\nexport type MappedTransform<T, U extends ILookupPath> = {\n [K in keyof T]: Exclude<T[K], undefined | null> extends Array<any>\n ? MappedTransform<T[K], U>\n : T[K] extends Function\n ? T[K]\n : T[K] extends object\n ? MappedTransform<T[K] & U, U>\n : T[K] | U;\n};\nexport type MappedReform<T, U> = {\n [K in keyof T]: Exclude<T[K], undefined | null> extends Array<any>\n ? MappedReform<T[K], U>\n : T[K] extends object\n ? MappedReform<T[K] & U, U>\n : Exclude<T[K], U>;\n};\n/* eslint-enable @typescript-eslint/ban-types */\n\n// Hashing Function\nexport function generateHash(data: string, algorithm = 'sha256'): string {\n const hash = createHash(algorithm);\n return hash.update(data).digest('hex');\n}\n\nexport async function buildParseHtmlFunc(): Promise<(input: unknown) => string> {\n const htmlparser = await import('htmlparser2');\n return (input: unknown): string => {\n if (!_.isString(input)) {\n return '';\n }\n const data: string[] = [];\n const parser = new htmlparser.Parser({\n ontext(text: string) {\n data.push(text);\n }\n });\n parser.write(String(input));\n parser.end();\n return data.join('');\n };\n}\n\nexport const DEFAULT_XML_PROCESS_ENTITIES_OPTIONS = {\n enabled: true,\n maxEntityCount: 100,\n maxEntitySize: 10_000,\n maxExpandedLength: 100_000,\n maxTotalExpansions: 10_000_000,\n} satisfies ProcessEntitiesOptions;\n\nexport function parseXml(\n xml: string,\n additionalOptions?: X2jOptions,\n): Record<string, unknown> {\n const options = {\n attributeNamePrefix: '',\n textNodeName: 'text',\n ignoreAttributes: false,\n ignoreDeclaration: true,\n parseAttributeValue: false,\n parseTagValue: false,\n processEntities: DEFAULT_XML_PROCESS_ENTITIES_OPTIONS,\n removeNSPrefix: true,\n ...additionalOptions,\n };\n const parser = new XMLParser(options);\n return parser.parse(xml);\n}\n\nexport function parseCsv(csv: string): unknown[] {\n const result = Papa.parse(csv.trim(), {header: true});\n\n if (result.errors.length) {\n throw result.errors;\n }\n\n return result.data;\n}\n\nexport function impactMapping(\n mapping: Map<string, number>\n): (severity: unknown) => number {\n return (severity: unknown): number => {\n if (typeof severity === 'string' || typeof severity === 'number') {\n return mapping.get(severity.toString().toLowerCase()) || 0;\n } else {\n return 0;\n }\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction collapseDuplicates<T extends object>(\n array: Array<T>,\n key: string,\n collapseResults: boolean\n): Array<T> {\n const seen = new Map<string, number>();\n const newArray: T[] = [];\n let counter = 0;\n array.forEach((item: T) => {\n const propertyValue = _.get(item, key);\n if (typeof propertyValue === 'string') {\n const index = seen.get(propertyValue) || 0;\n if (!seen.has(propertyValue)) {\n newArray.push(item);\n seen.set(propertyValue, counter);\n counter++;\n } else {\n const oldResult = _.get(\n newArray[index],\n 'results'\n ) as ExecJSON.ControlResult[];\n const descriptions = oldResult.map((element) =>\n _.get(element, 'code_desc')\n );\n if (collapseResults) {\n if (\n descriptions.indexOf(\n _.get(item, 'results[0].code_desc') as string\n ) === -1\n ) {\n _.set(\n newArray[index],\n 'results',\n oldResult.concat(\n _.get(item, 'results') as ExecJSON.ControlResult[]\n )\n );\n }\n } else {\n _.set(\n newArray[index],\n 'results',\n oldResult.concat(_.get(item, 'results') as ExecJSON.ControlResult[])\n );\n }\n }\n }\n });\n return newArray;\n}\n\nexport class BaseConverter<D = Record<string, unknown>> {\n data: D;\n mappings?: MappedTransform<ExecJSON.Execution, ILookupPath>;\n collapseResults: boolean;\n\n constructor(data: D, collapseResults = false) {\n this.data = data;\n this.collapseResults = collapseResults;\n }\n\n setMappings(\n mappings: MappedTransform<ExecJSON.Execution, ILookupPath>\n ): void {\n this.mappings = mappings;\n }\n\n toHdf(): ExecJSON.Execution {\n if (this.mappings === undefined) {\n throw new Error('Mappings must be provided');\n } else {\n const v = this.convertInternal(\n this.data as Record<string, unknown>,\n this.mappings\n );\n v.profiles.forEach((element) => {\n element.sha256 = generateHash(JSON.stringify(element));\n });\n return v;\n }\n }\n\n objectMap<T extends Array<unknown>, V>(\n obj: T,\n fn: (v: ObjectEntryValue<T>) => V\n ): {[K in keyof T]: V} {\n return Object.fromEntries(\n Object.entries(obj).map(([k, v]) => [k, fn(v as ObjectEntryValue<T>)])\n ) as Record<keyof T, V>;\n }\n convertInternal<T>(\n file: Record<string, unknown>,\n fields: T\n ): MappedReform<T, ILookupPath> {\n const isShortcircuiting =\n _.isObject(fields) &&\n _.has(fields, 'shortcircuit') &&\n _.isBoolean(_.get(fields, 'shortcircuit')) &&\n _.get(fields, 'shortcircuit');\n if (isShortcircuiting) {\n return _.omit(fields as object, 'shortcircuit') as MappedReform<\n T,\n ILookupPath\n >;\n }\n\n const result = this.objectMap(fields as T[], (v) =>\n this.evaluate(file, v as T & object & ILookupPath)\n );\n return result as MappedReform<T, ILookupPath>;\n }\n\n evaluate<T>(\n file: Record<string, unknown>,\n v: T | Array<T>\n ): T | Array<T> | MappedReform<T, ILookupPath> {\n if (v === undefined) {\n return v;\n }\n\n const hasTransformer =\n _.has(v, 'transformer') && _.isFunction(_.get(v, 'transformer'));\n let transformer = (val: unknown) => val;\n if (hasTransformer) {\n transformer = _.get(v, 'transformer') as any;\n v = _.omit(v as object, 'transformer') as T;\n }\n\n const haspathTransform =\n _.has(v, 'pathTransform') && _.isFunction(_.get(v, 'pathTransform'));\n\n let pathTransform: (\n val: T | T[],\n f?: Record<string, unknown>\n ) => T | T[] = (val: T | T[]) => val;\n if (haspathTransform) {\n pathTransform = _.get(v, 'pathTransform') as any;\n v = _.omit(v as object, 'pathTransform') as T;\n }\n\n const hasPath = _.isObject(v) && _.has(v, 'path');\n let pathV = v;\n if (hasPath) {\n pathV = pathTransform(\n this.handlePath(\n file,\n _.get(v, 'path') as unknown as string | string[]\n ) as T | T[],\n file\n );\n v = _.omit(v as object, 'path') as T;\n }\n\n if (\n _.isString(pathV) ||\n _.isNumber(pathV) ||\n _.isBoolean(pathV) ||\n _.isNull(pathV)\n ) {\n return transformer(pathV) as T;\n }\n\n if (Array.isArray(pathV)) {\n return hasTransformer\n ? (transformer(pathV) as T[])\n : this.handleArray(file, pathV as any);\n }\n\n if (_.keys(v).length > 0 && hasTransformer) {\n return {\n ...this.convertInternal(file, v),\n ...this.convertInternal(\n hasPath ? (pathV as Record<string, unknown>) : file,\n transformer(hasPath ? pathV : (file as T | T[])) as object\n )\n } as MappedReform<T, ILookupPath>;\n }\n\n if (hasTransformer) {\n return transformer(hasPath ? pathV : (file as T | T[])) as\n | T\n | T[]\n | MappedReform<T, ILookupPath>;\n }\n\n return hasPath\n ? pathV\n : (this.convertInternal(file, v) as\n | T\n | T[]\n | MappedReform<T, ILookupPath>);\n }\n\n handleArray<T>(\n file: Record<string, unknown>,\n v: Array<T & ILookupPath>\n ): Array<T> {\n if (v.length === 0) {\n return [];\n }\n const resultingData: Array<T> = [];\n for (const lookupPath of v) {\n if (lookupPath.path === undefined) {\n const arrayTransformer = lookupPath.arrayTransformer?.bind(this);\n v = v.map((element) => {\n return _.isObject(element)\n ? (_.omit(element, ['arrayTransformer']) as T & ILookupPath)\n : element;\n });\n let output: Array<T> = [];\n output.push(this.evaluate(file, lookupPath) as T);\n if (arrayTransformer !== undefined) {\n if (Array.isArray(arrayTransformer)) {\n output = arrayTransformer[0].apply(arrayTransformer[1], [\n v,\n this.data\n ]);\n } else {\n output = arrayTransformer.apply(null, [output, this.data]) as T[];\n }\n }\n resultingData.push(...output);\n } else {\n const path = lookupPath.path;\n const key = lookupPath.key;\n const arrayTransformer = lookupPath.arrayTransformer?.bind(this);\n const transformer = lookupPath.transformer?.bind(this);\n const pathTransform = lookupPath.pathTransform?.bind(this);\n if (this.hasPath(file, path)) {\n let pathVal = this.handlePath(file, path);\n if (pathTransform !== undefined) {\n pathVal = pathTransform(pathVal, file);\n }\n if (Array.isArray(pathVal)) {\n v = pathVal.map((element: Record<string, unknown>) => {\n let processed = _.omit(\n this.convertInternal(element, lookupPath),\n [\n 'path',\n 'transformer',\n 'arrayTransformer',\n 'key',\n 'pathTransform'\n ]\n ) as unknown as T;\n if (transformer !== undefined) {\n processed = this.evaluate(element, {\n ...processed,\n transformer\n }) as T;\n }\n return processed;\n }) as any;\n if (arrayTransformer !== undefined) {\n if (Array.isArray(arrayTransformer)) {\n v = arrayTransformer[0].apply(arrayTransformer[1], [\n v,\n this.data\n ]);\n } else {\n v = arrayTransformer.apply(null, [v, this.data]) as any;\n }\n }\n if (key !== undefined) {\n v = collapseDuplicates(v, key, this.collapseResults);\n }\n resultingData.push(...v);\n } else {\n if (transformer !== undefined) {\n pathVal = transformer(pathVal);\n }\n resultingData.push(pathVal as T);\n }\n }\n }\n }\n\n return resultingData;\n }\n\n handlePath(file: Record<string, unknown>, path: string | string[]): unknown {\n let pathArray = path;\n\n if (typeof path === 'string') {\n pathArray = [path];\n }\n\n const index = _.findIndex(pathArray, (p) => this.hasPath(file, p));\n\n if (index === -1) {\n // should probably throw error here, but instead are providing a default value to match current behavior\n return '';\n } else if (pathArray[index].startsWith('$.')) {\n return _.get(this.data, pathArray[index].slice(2)) || ''; // having default values implemented like this also prevents 'null' from being passed through\n } else {\n return _.get(file, pathArray[index]) ?? '';\n }\n }\n hasPath(file: Record<string, unknown>, path: string | string[]): boolean {\n let pathArray;\n if (typeof path === 'string') {\n pathArray = [path];\n } else {\n pathArray = path;\n }\n\n return _.some(pathArray, (p) => {\n if (p.startsWith('$.')) {\n return _.has(this.data, p.slice(2));\n } else {\n return _.has(file, p);\n }\n });\n }\n}\n"]}
|