@mitre/inspec-objects 0.0.25 → 0.0.26

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.
@@ -1,2 +1,3 @@
1
- import { OvalDefinitionValue } from '../types/oval';
1
+ import { OvalDefinitionValue, DefinitionCriterion } from '../types/oval';
2
+ export declare function extractAllCriteriaRefs(initialCriteria: DefinitionCriterion[]): string[];
2
3
  export declare function processOVAL(oval?: string): Record<string, OvalDefinitionValue> | undefined;
@@ -1,8 +1,58 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processOVAL = void 0;
3
+ exports.processOVAL = exports.extractAllCriteriaRefs = void 0;
4
4
  const xccdf_1 = require("../utilities/xccdf");
5
+ // https://stackoverflow.com/questions/9133500/how-to-find-a-node-in-a-tree-with-javascript
6
+ function searchTree(aTree, fCompair, bGreedy) {
7
+ var aInnerTree = []; // will contain the inner children
8
+ var oNode; // always the current node
9
+ var aReturnNodes = []; // the nodes array which will returned
10
+ // 1. loop through all root nodes so we don't touch the tree structure
11
+ for (const keysTree in aTree) {
12
+ aInnerTree.push(aTree[keysTree]);
13
+ }
14
+ while (aInnerTree.length > 0) {
15
+ oNode = aInnerTree.pop();
16
+ // check current node
17
+ if (fCompair(oNode)) {
18
+ aReturnNodes.push(oNode);
19
+ if (!bGreedy) {
20
+ return aReturnNodes;
21
+ }
22
+ }
23
+ else { // if (node.children && node.children.length) {
24
+ // find other objects, 1. check all properties of the node if they are arrays
25
+ for (const keysNode in oNode) {
26
+ // true if the property is an array
27
+ if (oNode[keysNode] instanceof Array) {
28
+ // 2. push all array object to aInnerTree to search in those later
29
+ for (var i = 0; i < oNode[keysNode].length; i++) {
30
+ aInnerTree.push(oNode[keysNode][i]);
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
36
+ return aReturnNodes;
37
+ }
38
+ function extractAllCriteriaRefs(initialCriteria) {
39
+ const criteriaRefs = [];
40
+ initialCriteria.forEach(criteria => {
41
+ var _a;
42
+ (_a = criteria.criterion) === null || _a === void 0 ? void 0 : _a.forEach((criterion) => {
43
+ if (criterion["@_test_ref"]) {
44
+ criteriaRefs.push(criterion["@_test_ref"]);
45
+ }
46
+ });
47
+ if (criteria.criteria) {
48
+ criteriaRefs.push(...extractAllCriteriaRefs(criteria.criteria));
49
+ }
50
+ });
51
+ return criteriaRefs;
52
+ }
53
+ exports.extractAllCriteriaRefs = extractAllCriteriaRefs;
5
54
  function processOVAL(oval) {
55
+ var _a;
6
56
  if (!oval) {
7
57
  return undefined;
8
58
  }
@@ -12,6 +62,50 @@ function processOVAL(oval) {
12
62
  for (const definitionList of ovalDefinitions.definitions) {
13
63
  for (const definition of definitionList.definition) {
14
64
  extractedDefinitions[definition["@_id"]] = definition;
65
+ extractedDefinitions[definition["@_id"]].criteriaRefs = extractAllCriteriaRefs(definition.criteria);
66
+ extractedDefinitions[definition["@_id"]].resolvedValues = (_a = extractedDefinitions[definition["@_id"]].criteriaRefs) === null || _a === void 0 ? void 0 : _a.map((criteriaRef) => {
67
+ // Extract the original criteria from the oval file
68
+ const foundCriteriaRefererence = searchTree(parsed.oval_definitions[0].tests, (oNode) => oNode["@_id"] === criteriaRef, false)[0];
69
+ let foundObjects = [];
70
+ let foundStates = [];
71
+ if (foundCriteriaRefererence) {
72
+ if (foundCriteriaRefererence.object) {
73
+ foundCriteriaRefererence.object.forEach((object) => {
74
+ if (!object["@_object_ref"]) {
75
+ console.warn(`Found object without object_ref in test ${criteriaRef}`);
76
+ }
77
+ else {
78
+ const objectRef = object["@_object_ref"];
79
+ const foundObjectReference = searchTree(parsed.oval_definitions[0].objects, (oNode) => oNode["@_id"] === objectRef, false)[0];
80
+ if (foundObjectReference) {
81
+ foundObjects.push(foundObjectReference);
82
+ }
83
+ else {
84
+ console.warn(`Could not find object ${objectRef} for test ${criteriaRef}`);
85
+ }
86
+ }
87
+ });
88
+ }
89
+ if (foundCriteriaRefererence.state) {
90
+ foundCriteriaRefererence.state.forEach((state) => {
91
+ if (!state["@_state_ref"]) {
92
+ console.warn(`Found state without state_ref in test ${criteriaRef}`);
93
+ }
94
+ else {
95
+ const stateRef = state["@_state_ref"];
96
+ const foundStateReference = searchTree(parsed.oval_definitions[0].states, (oNode) => oNode["@_id"] === stateRef, false)[0];
97
+ if (foundStateReference) {
98
+ foundStates.push(foundStateReference);
99
+ }
100
+ else {
101
+ console.warn(`Could not find state ${stateRef} for test ${criteriaRef}`);
102
+ }
103
+ }
104
+ });
105
+ }
106
+ }
107
+ return { ...foundCriteriaRefererence, resolvedObjects: foundObjects, resolvedStates: foundStates };
108
+ }).filter((value) => value);
15
109
  }
16
110
  }
17
111
  }
@@ -1,8 +1,12 @@
1
1
  import Profile from '../objects/profile';
2
- import { BenchmarkGroup, BenchmarkRule } from '../types/xccdf';
2
+ import { BenchmarkGroup, BenchmarkRule, RuleComplexCheck } from '../types/xccdf';
3
3
  import { OvalDefinitionValue } from '../types/oval';
4
4
  export declare type GroupContextualizedRule = BenchmarkRule & {
5
5
  group: Omit<BenchmarkGroup, 'Rule' | 'Group'>;
6
6
  };
7
7
  export declare function extractAllRules(groups: BenchmarkGroup[]): GroupContextualizedRule[];
8
- export declare function processXCCDF(xml: string, removeNewlines: boolean | undefined, useRuleId: 'group' | 'rule' | 'version' | 'cis', ovalDefinitions?: Record<string, OvalDefinitionValue>): Profile;
8
+ export declare function extractAllComplexChecks(complexCheck: RuleComplexCheck): Omit<RuleComplexCheck, 'complex-check'>[];
9
+ export declare function processXCCDF(xml: string, removeNewlines: boolean | undefined, useRuleId: 'group' | 'rule' | 'version' | 'cis', ovalDefinitions?: Record<string, OvalDefinitionValue & {
10
+ criteriaRefs?: string[];
11
+ resolvedValues?: any;
12
+ }>): Profile;
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processXCCDF = exports.extractAllRules = void 0;
3
+ exports.processXCCDF = exports.extractAllComplexChecks = exports.extractAllRules = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const profile_1 = tslib_1.__importDefault(require("../objects/profile"));
6
6
  const xccdf_1 = require("../utilities/xccdf");
7
7
  const control_1 = tslib_1.__importDefault(require("../objects/control"));
8
8
  const lodash_1 = tslib_1.__importDefault(require("lodash"));
9
9
  const CciNistMappingData_1 = require("../mappings/CciNistMappingData");
10
+ const pretty_1 = tslib_1.__importDefault(require("pretty"));
10
11
  function extractAllRules(groups) {
11
12
  const rules = [];
12
13
  groups.forEach((group) => {
@@ -25,6 +26,17 @@ function extractAllRules(groups) {
25
26
  return rules;
26
27
  }
27
28
  exports.extractAllRules = extractAllRules;
29
+ function extractAllComplexChecks(complexCheck) {
30
+ const complexChecks = [lodash_1.default.omit(complexCheck, 'complex-check')];
31
+ if (complexCheck['complex-check']) {
32
+ complexChecks.push(...complexCheck['complex-check'].map((subComplexCheck) => lodash_1.default.omit(subComplexCheck, 'complex-check')));
33
+ complexCheck['complex-check'].forEach((subComplexCheck) => {
34
+ complexChecks.push(...extractAllComplexChecks(subComplexCheck));
35
+ });
36
+ }
37
+ return complexChecks;
38
+ }
39
+ exports.extractAllComplexChecks = extractAllComplexChecks;
28
40
  function ensureDecodedXMLStringValue(input) {
29
41
  return lodash_1.default.get(input, '[0].#text') ? lodash_1.default.get(input, '[0].#text') : input;
30
42
  }
@@ -39,8 +51,18 @@ function processXCCDF(xml, removeNewlines = false, useRuleId, ovalDefinitions) {
39
51
  rules.forEach(rule => {
40
52
  var _a, _b, _c;
41
53
  let extractedDescription;
42
- if (Array.isArray(rule.description)) {
43
- extractedDescription = rule.description[0]['#text'];
54
+ if (typeof rule.description === 'object') {
55
+ if (Array.isArray(rule.description) && lodash_1.default.get(rule, "description[0]['#text']")) {
56
+ extractedDescription = rule.description[0]['#text'];
57
+ }
58
+ else {
59
+ if (typeof lodash_1.default.get(rule.description, '[0].p') === 'string') {
60
+ extractedDescription = (0, pretty_1.default)(lodash_1.default.get(rule.description, '[0].p'));
61
+ }
62
+ else {
63
+ extractedDescription = JSON.stringify(rule.description);
64
+ }
65
+ }
44
66
  }
45
67
  else {
46
68
  extractedDescription = (0, xccdf_1.convertEncodedHTMLIntoJson)(rule.description);
@@ -74,9 +96,19 @@ function processXCCDF(xml, removeNewlines = false, useRuleId, ovalDefinitions) {
74
96
  default:
75
97
  throw new Error('useRuleId must be one of "group", "rule", or "version"');
76
98
  }
77
- control.title = (0, xccdf_1.removeXMLSpecialCharacters)(rule['@_severity'] ? ensureDecodedXMLStringValue(rule.title) : `[[[MISSING SEVERITY FROM STIG]]] ${ensureDecodedXMLStringValue(rule.title)}`);
78
- const descriptionText = (typeof extractedDescription === 'object' && !Array.isArray(extractedDescription)) ? ((_a = extractedDescription.VulnDiscussion) === null || _a === void 0 ? void 0 : _a.split('Satisfies: ')[0]) || 'Missing Description' : '';
79
- control.desc = (0, xccdf_1.removeXMLSpecialCharacters)(descriptionText);
99
+ control.title = (0, xccdf_1.removeXMLSpecialCharacters)(rule['@_severity'] ? ensureDecodedXMLStringValue(rule.title) : `[[[MISSING SEVERITY FROM BENCHMARK]]] ${ensureDecodedXMLStringValue(rule.title)}`);
100
+ if (typeof extractedDescription === 'object' && !Array.isArray(extractedDescription)) {
101
+ control.desc = ((_a = extractedDescription.VulnDiscussion) === null || _a === void 0 ? void 0 : _a.split('Satisfies: ')[0]) || '';
102
+ }
103
+ else if (typeof extractedDescription === 'object') {
104
+ control.desc = JSON.stringify(extractedDescription);
105
+ }
106
+ else if (typeof extractedDescription === 'string') {
107
+ control.desc = extractedDescription || '';
108
+ }
109
+ else {
110
+ console.warn(`Invalid value for extracted description: ${extractedDescription}`);
111
+ }
80
112
  control.impact = (0, xccdf_1.severityStringToImpact)(rule['@_severity'] || 'medium', rule.group['@_id']);
81
113
  if (!control.descs || Array.isArray(control.descs)) {
82
114
  control.descs = {};
@@ -90,6 +122,7 @@ function processXCCDF(xml, removeNewlines = false, useRuleId, ovalDefinitions) {
90
122
  let referenceID = null;
91
123
  for (const checkContent of rule.check) {
92
124
  if ('check-content-ref' in checkContent && checkContent['@_system'].includes('oval')) {
125
+ console.log(`Found OVAL reference: ${checkContent['@_system']}`);
93
126
  for (const checkContentRef of checkContent['check-content-ref']) {
94
127
  if (checkContentRef['@_name']) {
95
128
  referenceID = checkContentRef['@_name'];
@@ -105,6 +138,54 @@ function processXCCDF(xml, removeNewlines = false, useRuleId, ovalDefinitions) {
105
138
  }
106
139
  }
107
140
  }
141
+ // Very CIS specific
142
+ else if (rule['complex-check']) {
143
+ let checkTexts = [];
144
+ for (const complexChecks of rule['complex-check']) {
145
+ const allComplexChecks = extractAllComplexChecks(complexChecks);
146
+ if (control.id === '1.1.1.5') {
147
+ console.log(allComplexChecks);
148
+ }
149
+ allComplexChecks.forEach((complexCheck) => {
150
+ if (complexCheck.check) {
151
+ complexCheck.check.forEach((check) => {
152
+ var _a;
153
+ if ((_a = check['@_system']) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes('oval')) {
154
+ const ovalReference = check['check-content-ref'][0]['@_name'];
155
+ if (!ovalDefinitions) {
156
+ console.warn(`Missing OVAL definitions! Unable to process OVAL reference: ${ovalReference}`);
157
+ }
158
+ else if (ovalReference && ovalReference in ovalDefinitions) {
159
+ ovalDefinitions[ovalReference].resolvedValues.forEach((resolvedValue) => {
160
+ const comment = resolvedValue['@_comment'];
161
+ if (comment) {
162
+ checkTexts.push(comment + '\n');
163
+ }
164
+ resolvedValue.resolvedObjects.forEach((resolvedObject) => {
165
+ // Try to find the associated state for a resolved object
166
+ const resolvedId = resolvedObject['@_id'].split(':')[resolvedValue['@_id'].split(':').length - 1];
167
+ if (resolvedId) {
168
+ const relatedResolvedState = resolvedValue.resolvedStates.find((resolvedState) => resolvedState['@_id'].toLowerCase().includes(resolvedId.toLowerCase()));
169
+ if (relatedResolvedState) {
170
+ lodash_1.default.set(resolvedObject, 'expectedState', lodash_1.default.pickBy(relatedResolvedState, (value, key) => !key.startsWith('@_')));
171
+ }
172
+ }
173
+ checkTexts.push(JSON.stringify(lodash_1.default.pickBy(resolvedObject, (value, key) => !key.startsWith('@_')), null, 2));
174
+ });
175
+ });
176
+ }
177
+ }
178
+ else {
179
+ console.warn(`Found external reference to unknown system: ${check['@_system']}, only OVAL is supported`);
180
+ }
181
+ });
182
+ }
183
+ });
184
+ }
185
+ if (checkTexts.length >= 1) {
186
+ control.descs.check = checkTexts.join('\n');
187
+ }
188
+ }
108
189
  if (lodash_1.default.get(rule.fixtext, '[0]["#text"]')) {
109
190
  control.descs.fix = (0, xccdf_1.removeXMLSpecialCharacters)(rule.fixtext[0]['#text']);
110
191
  }
@@ -113,7 +194,17 @@ function processXCCDF(xml, removeNewlines = false, useRuleId, ovalDefinitions) {
113
194
  }
114
195
  else if (typeof rule.fixtext === 'object') {
115
196
  if (Array.isArray(rule.fixtext)) {
116
- control.descs.fix = (0, xccdf_1.removeXMLSpecialCharacters)(JSON.stringify(rule.fixtext));
197
+ control.descs.fix = (0, xccdf_1.removeXMLSpecialCharacters)((0, pretty_1.default)((0, xccdf_1.convertJsonIntoXML)(rule.fixtext.map((fixtext) => {
198
+ if (fixtext.div) {
199
+ return fixtext.div;
200
+ }
201
+ else {
202
+ return fixtext;
203
+ }
204
+ }))));
205
+ }
206
+ else {
207
+ control.descs.fix = (0, xccdf_1.removeXMLSpecialCharacters)((0, pretty_1.default)((0, xccdf_1.convertJsonIntoXML)(rule.fixtext)));
117
208
  }
118
209
  }
119
210
  else if (typeof rule.fixtext === 'undefined') {
@@ -124,7 +215,7 @@ function processXCCDF(xml, removeNewlines = false, useRuleId, ovalDefinitions) {
124
215
  else {
125
216
  control.descs.fix = 'Missing fix text';
126
217
  }
127
- control.tags.severity = (0, xccdf_1.impactNumberToSeverityString)((0, xccdf_1.severityStringToImpact)(rule['@_severity'] || 'critical', control.id || 'Unknown'));
218
+ control.tags.severity = (0, xccdf_1.impactNumberToSeverityString)((0, xccdf_1.severityStringToImpact)(rule['@_severity'] || 'medium', control.id || 'Unknown'));
128
219
  control.tags.gid = rule.group['@_id'],
129
220
  control.tags.rid = rule['@_id'];
130
221
  control.tags.stig_id = rule['version'];
@@ -1,5 +1,6 @@
1
1
  import { DecodedDescription } from '../types/xccdf';
2
2
  export declare function convertEncodedXmlIntoJson(encodedXml: string): any;
3
+ export declare function convertJsonIntoXML(data: any): string;
3
4
  export declare function removeXMLSpecialCharacters(str: string): string;
4
5
  export declare function severityStringToImpact(string: string, id: string): number;
5
6
  export declare function impactNumberToSeverityString(impact: number): string;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertEncodedHTMLIntoJson = exports.impactNumberToSeverityString = exports.severityStringToImpact = exports.removeXMLSpecialCharacters = exports.convertEncodedXmlIntoJson = void 0;
3
+ exports.convertEncodedHTMLIntoJson = exports.impactNumberToSeverityString = exports.severityStringToImpact = exports.removeXMLSpecialCharacters = exports.convertJsonIntoXML = exports.convertEncodedXmlIntoJson = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const fast_xml_parser_1 = tslib_1.__importDefault(require("fast-xml-parser"));
6
+ const jstoxml_1 = require("jstoxml");
6
7
  const htmlparser = tslib_1.__importStar(require("htmlparser2"));
7
8
  const lodash_1 = tslib_1.__importDefault(require("lodash"));
8
9
  const he_1 = tslib_1.__importDefault(require("he"));
@@ -11,10 +12,15 @@ function convertEncodedXmlIntoJson(encodedXml) {
11
12
  ignoreAttributes: false,
12
13
  ignoreNameSpace: true,
13
14
  attributeNamePrefix: '@_',
15
+ stopNodes: ['div', 'p'],
14
16
  arrayMode: true
15
17
  });
16
18
  }
17
19
  exports.convertEncodedXmlIntoJson = convertEncodedXmlIntoJson;
20
+ function convertJsonIntoXML(data) {
21
+ return (0, jstoxml_1.toXML)(data);
22
+ }
23
+ exports.convertJsonIntoXML = convertJsonIntoXML;
18
24
  function removeXMLSpecialCharacters(str) {
19
25
  return he_1.default.decode(str);
20
26
  }
package/package-lock.json CHANGED
@@ -1,19 +1,21 @@
1
1
  {
2
2
  "name": "@mitre/inspec-objects",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@mitre/inspec-objects",
9
- "version": "0.0.25",
9
+ "version": "0.0.26",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@types/flat": "^5.0.2",
13
13
  "@types/he": "^1.1.2",
14
14
  "@types/json-diff": "^0.7.0",
15
+ "@types/jstoxml": "^2.0.2",
15
16
  "@types/lodash": "^4.14.178",
16
17
  "@types/mustache": "^4.2.0",
18
+ "@types/pretty": "^2.0.1",
17
19
  "fast-xml-parser": "^3.1.19",
18
20
  "flat": "^5.0.2",
19
21
  "he": "^1.2.0",
@@ -21,8 +23,10 @@
21
23
  "inspecjs": "^2.6.6",
22
24
  "jest": "^28.1.1",
23
25
  "json-diff": "^0.9.0",
26
+ "jstoxml": "^3.2.3",
24
27
  "lodash": "^4.17.21",
25
28
  "mustache": "^4.2.0",
29
+ "pretty": "^2.0.0",
26
30
  "ts-jest": "^28.0.4",
27
31
  "typescript": "^4.5.5",
28
32
  "winston": "^3.8.1",
@@ -1218,6 +1222,11 @@
1218
1222
  "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
1219
1223
  "dev": true
1220
1224
  },
1225
+ "node_modules/@types/jstoxml": {
1226
+ "version": "2.0.2",
1227
+ "resolved": "https://registry.npmjs.org/@types/jstoxml/-/jstoxml-2.0.2.tgz",
1228
+ "integrity": "sha512-60VaXPlZbd7tEhloAkE2E0lg+QoWpnGusdy+2pGMGFFpdsyxm/1GKs0o/nLJJKWXci92cnq2utmqaV5L7Zjqxw=="
1229
+ },
1221
1230
  "node_modules/@types/lodash": {
1222
1231
  "version": "4.14.182",
1223
1232
  "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz",
@@ -1238,6 +1247,11 @@
1238
1247
  "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz",
1239
1248
  "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg=="
1240
1249
  },
1250
+ "node_modules/@types/pretty": {
1251
+ "version": "2.0.1",
1252
+ "resolved": "https://registry.npmjs.org/@types/pretty/-/pretty-2.0.1.tgz",
1253
+ "integrity": "sha512-l18spTC0Q2OEUIHGPyw37XBOacFI4Kng1fgfFjgDTg2FR9wqJ/NY9zWyXv87NRUlFDU6JA+E/GVnNJiWgyon6A=="
1254
+ },
1241
1255
  "node_modules/@types/stack-utils": {
1242
1256
  "version": "2.0.1",
1243
1257
  "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
@@ -1441,6 +1455,11 @@
1441
1455
  "url": "https://opencollective.com/typescript-eslint"
1442
1456
  }
1443
1457
  },
1458
+ "node_modules/abbrev": {
1459
+ "version": "1.1.1",
1460
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
1461
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
1462
+ },
1444
1463
  "node_modules/acorn": {
1445
1464
  "version": "8.7.1",
1446
1465
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
@@ -1879,11 +1898,38 @@
1879
1898
  "text-hex": "1.0.x"
1880
1899
  }
1881
1900
  },
1901
+ "node_modules/commander": {
1902
+ "version": "2.20.3",
1903
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
1904
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
1905
+ },
1882
1906
  "node_modules/concat-map": {
1883
1907
  "version": "0.0.1",
1884
1908
  "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1885
1909
  "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
1886
1910
  },
1911
+ "node_modules/condense-newlines": {
1912
+ "version": "0.2.1",
1913
+ "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz",
1914
+ "integrity": "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==",
1915
+ "dependencies": {
1916
+ "extend-shallow": "^2.0.1",
1917
+ "is-whitespace": "^0.3.0",
1918
+ "kind-of": "^3.0.2"
1919
+ },
1920
+ "engines": {
1921
+ "node": ">=0.10.0"
1922
+ }
1923
+ },
1924
+ "node_modules/config-chain": {
1925
+ "version": "1.1.13",
1926
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
1927
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
1928
+ "dependencies": {
1929
+ "ini": "^1.3.4",
1930
+ "proto-list": "~1.2.1"
1931
+ }
1932
+ },
1887
1933
  "node_modules/convert-source-map": {
1888
1934
  "version": "1.8.0",
1889
1935
  "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
@@ -2067,6 +2113,42 @@
2067
2113
  "node": ">=0.4.0"
2068
2114
  }
2069
2115
  },
2116
+ "node_modules/editorconfig": {
2117
+ "version": "0.15.3",
2118
+ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
2119
+ "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
2120
+ "dependencies": {
2121
+ "commander": "^2.19.0",
2122
+ "lru-cache": "^4.1.5",
2123
+ "semver": "^5.6.0",
2124
+ "sigmund": "^1.0.1"
2125
+ },
2126
+ "bin": {
2127
+ "editorconfig": "bin/editorconfig"
2128
+ }
2129
+ },
2130
+ "node_modules/editorconfig/node_modules/lru-cache": {
2131
+ "version": "4.1.5",
2132
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
2133
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
2134
+ "dependencies": {
2135
+ "pseudomap": "^1.0.2",
2136
+ "yallist": "^2.1.2"
2137
+ }
2138
+ },
2139
+ "node_modules/editorconfig/node_modules/semver": {
2140
+ "version": "5.7.1",
2141
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
2142
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
2143
+ "bin": {
2144
+ "semver": "bin/semver"
2145
+ }
2146
+ },
2147
+ "node_modules/editorconfig/node_modules/yallist": {
2148
+ "version": "2.1.2",
2149
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
2150
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
2151
+ },
2070
2152
  "node_modules/electron-to-chromium": {
2071
2153
  "version": "1.4.151",
2072
2154
  "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.151.tgz",
@@ -2454,6 +2536,17 @@
2454
2536
  "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz",
2455
2537
  "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ=="
2456
2538
  },
2539
+ "node_modules/extend-shallow": {
2540
+ "version": "2.0.1",
2541
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
2542
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
2543
+ "dependencies": {
2544
+ "is-extendable": "^0.1.0"
2545
+ },
2546
+ "engines": {
2547
+ "node": ">=0.10.0"
2548
+ }
2549
+ },
2457
2550
  "node_modules/fast-deep-equal": {
2458
2551
  "version": "3.1.3",
2459
2552
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -2877,6 +2970,11 @@
2877
2970
  "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2878
2971
  "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
2879
2972
  },
2973
+ "node_modules/ini": {
2974
+ "version": "1.3.8",
2975
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
2976
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
2977
+ },
2880
2978
  "node_modules/inspecjs": {
2881
2979
  "version": "2.6.25",
2882
2980
  "resolved": "https://registry.npmjs.org/inspecjs/-/inspecjs-2.6.25.tgz",
@@ -2887,6 +2985,11 @@
2887
2985
  "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
2888
2986
  "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
2889
2987
  },
2988
+ "node_modules/is-buffer": {
2989
+ "version": "1.1.6",
2990
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
2991
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
2992
+ },
2890
2993
  "node_modules/is-core-module": {
2891
2994
  "version": "2.9.0",
2892
2995
  "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
@@ -2898,6 +3001,14 @@
2898
3001
  "url": "https://github.com/sponsors/ljharb"
2899
3002
  }
2900
3003
  },
3004
+ "node_modules/is-extendable": {
3005
+ "version": "0.1.1",
3006
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
3007
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
3008
+ "engines": {
3009
+ "node": ">=0.10.0"
3010
+ }
3011
+ },
2901
3012
  "node_modules/is-extglob": {
2902
3013
  "version": "2.1.1",
2903
3014
  "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -2959,6 +3070,14 @@
2959
3070
  "url": "https://github.com/sponsors/sindresorhus"
2960
3071
  }
2961
3072
  },
3073
+ "node_modules/is-whitespace": {
3074
+ "version": "0.3.0",
3075
+ "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz",
3076
+ "integrity": "sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==",
3077
+ "engines": {
3078
+ "node": ">=0.10.0"
3079
+ }
3080
+ },
2962
3081
  "node_modules/isexe": {
2963
3082
  "version": "2.0.0",
2964
3083
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -3560,6 +3679,25 @@
3560
3679
  }
3561
3680
  }
3562
3681
  },
3682
+ "node_modules/js-beautify": {
3683
+ "version": "1.14.4",
3684
+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.4.tgz",
3685
+ "integrity": "sha512-+b4A9c3glceZEmxyIbxDOYB0ZJdReLvyU1077RqKsO4dZx9FUHjTOJn8VHwpg33QoucIykOiYbh7MfqBOghnrA==",
3686
+ "dependencies": {
3687
+ "config-chain": "^1.1.13",
3688
+ "editorconfig": "^0.15.3",
3689
+ "glob": "^7.1.3",
3690
+ "nopt": "^5.0.0"
3691
+ },
3692
+ "bin": {
3693
+ "css-beautify": "js/bin/css-beautify.js",
3694
+ "html-beautify": "js/bin/html-beautify.js",
3695
+ "js-beautify": "js/bin/js-beautify.js"
3696
+ },
3697
+ "engines": {
3698
+ "node": ">=10"
3699
+ }
3700
+ },
3563
3701
  "node_modules/js-tokens": {
3564
3702
  "version": "4.0.0",
3565
3703
  "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -3632,6 +3770,22 @@
3632
3770
  "node": ">=6"
3633
3771
  }
3634
3772
  },
3773
+ "node_modules/jstoxml": {
3774
+ "version": "3.2.3",
3775
+ "resolved": "https://registry.npmjs.org/jstoxml/-/jstoxml-3.2.3.tgz",
3776
+ "integrity": "sha512-IxoZkdFcKm1dO4g+JcZBB7z1p/vPXEZPV3APRDd3/zcVtthg2kfTmpzKNZMl37/MrE/Uoc2p6ZnLnv3P5HVMTw=="
3777
+ },
3778
+ "node_modules/kind-of": {
3779
+ "version": "3.2.2",
3780
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
3781
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
3782
+ "dependencies": {
3783
+ "is-buffer": "^1.1.5"
3784
+ },
3785
+ "engines": {
3786
+ "node": ">=0.10.0"
3787
+ }
3788
+ },
3635
3789
  "node_modules/kleur": {
3636
3790
  "version": "3.0.3",
3637
3791
  "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -3857,6 +4011,20 @@
3857
4011
  "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
3858
4012
  "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
3859
4013
  },
4014
+ "node_modules/nopt": {
4015
+ "version": "5.0.0",
4016
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
4017
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
4018
+ "dependencies": {
4019
+ "abbrev": "1"
4020
+ },
4021
+ "bin": {
4022
+ "nopt": "bin/nopt.js"
4023
+ },
4024
+ "engines": {
4025
+ "node": ">=6"
4026
+ }
4027
+ },
3860
4028
  "node_modules/normalize-path": {
3861
4029
  "version": "3.0.0",
3862
4030
  "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -4067,6 +4235,19 @@
4067
4235
  "node": ">= 0.8.0"
4068
4236
  }
4069
4237
  },
4238
+ "node_modules/pretty": {
4239
+ "version": "2.0.0",
4240
+ "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz",
4241
+ "integrity": "sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==",
4242
+ "dependencies": {
4243
+ "condense-newlines": "^0.2.1",
4244
+ "extend-shallow": "^2.0.1",
4245
+ "js-beautify": "^1.6.12"
4246
+ },
4247
+ "engines": {
4248
+ "node": ">=0.10.0"
4249
+ }
4250
+ },
4070
4251
  "node_modules/pretty-format": {
4071
4252
  "version": "28.1.1",
4072
4253
  "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz",
@@ -4104,6 +4285,16 @@
4104
4285
  "node": ">= 6"
4105
4286
  }
4106
4287
  },
4288
+ "node_modules/proto-list": {
4289
+ "version": "1.2.4",
4290
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
4291
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="
4292
+ },
4293
+ "node_modules/pseudomap": {
4294
+ "version": "1.0.2",
4295
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
4296
+ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
4297
+ },
4107
4298
  "node_modules/punycode": {
4108
4299
  "version": "2.1.1",
4109
4300
  "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -4330,6 +4521,11 @@
4330
4521
  "node": ">=8"
4331
4522
  }
4332
4523
  },
4524
+ "node_modules/sigmund": {
4525
+ "version": "1.0.1",
4526
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
4527
+ "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g=="
4528
+ },
4333
4529
  "node_modules/signal-exit": {
4334
4530
  "version": "3.0.7",
4335
4531
  "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -5832,6 +6028,11 @@
5832
6028
  "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
5833
6029
  "dev": true
5834
6030
  },
6031
+ "@types/jstoxml": {
6032
+ "version": "2.0.2",
6033
+ "resolved": "https://registry.npmjs.org/@types/jstoxml/-/jstoxml-2.0.2.tgz",
6034
+ "integrity": "sha512-60VaXPlZbd7tEhloAkE2E0lg+QoWpnGusdy+2pGMGFFpdsyxm/1GKs0o/nLJJKWXci92cnq2utmqaV5L7Zjqxw=="
6035
+ },
5835
6036
  "@types/lodash": {
5836
6037
  "version": "4.14.182",
5837
6038
  "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz",
@@ -5852,6 +6053,11 @@
5852
6053
  "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz",
5853
6054
  "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg=="
5854
6055
  },
6056
+ "@types/pretty": {
6057
+ "version": "2.0.1",
6058
+ "resolved": "https://registry.npmjs.org/@types/pretty/-/pretty-2.0.1.tgz",
6059
+ "integrity": "sha512-l18spTC0Q2OEUIHGPyw37XBOacFI4Kng1fgfFjgDTg2FR9wqJ/NY9zWyXv87NRUlFDU6JA+E/GVnNJiWgyon6A=="
6060
+ },
5855
6061
  "@types/stack-utils": {
5856
6062
  "version": "2.0.1",
5857
6063
  "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
@@ -5966,6 +6172,11 @@
5966
6172
  "eslint-visitor-keys": "^3.3.0"
5967
6173
  }
5968
6174
  },
6175
+ "abbrev": {
6176
+ "version": "1.1.1",
6177
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
6178
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
6179
+ },
5969
6180
  "acorn": {
5970
6181
  "version": "8.7.1",
5971
6182
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
@@ -6291,11 +6502,35 @@
6291
6502
  "text-hex": "1.0.x"
6292
6503
  }
6293
6504
  },
6505
+ "commander": {
6506
+ "version": "2.20.3",
6507
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
6508
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
6509
+ },
6294
6510
  "concat-map": {
6295
6511
  "version": "0.0.1",
6296
6512
  "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
6297
6513
  "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
6298
6514
  },
6515
+ "condense-newlines": {
6516
+ "version": "0.2.1",
6517
+ "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz",
6518
+ "integrity": "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==",
6519
+ "requires": {
6520
+ "extend-shallow": "^2.0.1",
6521
+ "is-whitespace": "^0.3.0",
6522
+ "kind-of": "^3.0.2"
6523
+ }
6524
+ },
6525
+ "config-chain": {
6526
+ "version": "1.1.13",
6527
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
6528
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
6529
+ "requires": {
6530
+ "ini": "^1.3.4",
6531
+ "proto-list": "~1.2.1"
6532
+ }
6533
+ },
6299
6534
  "convert-source-map": {
6300
6535
  "version": "1.8.0",
6301
6536
  "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
@@ -6431,6 +6666,38 @@
6431
6666
  "wordwrap": ">=0.0.2"
6432
6667
  }
6433
6668
  },
6669
+ "editorconfig": {
6670
+ "version": "0.15.3",
6671
+ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
6672
+ "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
6673
+ "requires": {
6674
+ "commander": "^2.19.0",
6675
+ "lru-cache": "^4.1.5",
6676
+ "semver": "^5.6.0",
6677
+ "sigmund": "^1.0.1"
6678
+ },
6679
+ "dependencies": {
6680
+ "lru-cache": {
6681
+ "version": "4.1.5",
6682
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
6683
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
6684
+ "requires": {
6685
+ "pseudomap": "^1.0.2",
6686
+ "yallist": "^2.1.2"
6687
+ }
6688
+ },
6689
+ "semver": {
6690
+ "version": "5.7.1",
6691
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
6692
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
6693
+ },
6694
+ "yallist": {
6695
+ "version": "2.1.2",
6696
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
6697
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
6698
+ }
6699
+ }
6700
+ },
6434
6701
  "electron-to-chromium": {
6435
6702
  "version": "1.4.151",
6436
6703
  "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.151.tgz",
@@ -6735,6 +7002,14 @@
6735
7002
  }
6736
7003
  }
6737
7004
  },
7005
+ "extend-shallow": {
7006
+ "version": "2.0.1",
7007
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
7008
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
7009
+ "requires": {
7010
+ "is-extendable": "^0.1.0"
7011
+ }
7012
+ },
6738
7013
  "fast-deep-equal": {
6739
7014
  "version": "3.1.3",
6740
7015
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -7045,6 +7320,11 @@
7045
7320
  "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
7046
7321
  "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
7047
7322
  },
7323
+ "ini": {
7324
+ "version": "1.3.8",
7325
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
7326
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
7327
+ },
7048
7328
  "inspecjs": {
7049
7329
  "version": "2.6.25",
7050
7330
  "resolved": "https://registry.npmjs.org/inspecjs/-/inspecjs-2.6.25.tgz",
@@ -7055,6 +7335,11 @@
7055
7335
  "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
7056
7336
  "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
7057
7337
  },
7338
+ "is-buffer": {
7339
+ "version": "1.1.6",
7340
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
7341
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
7342
+ },
7058
7343
  "is-core-module": {
7059
7344
  "version": "2.9.0",
7060
7345
  "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
@@ -7063,6 +7348,11 @@
7063
7348
  "has": "^1.0.3"
7064
7349
  }
7065
7350
  },
7351
+ "is-extendable": {
7352
+ "version": "0.1.1",
7353
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
7354
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="
7355
+ },
7066
7356
  "is-extglob": {
7067
7357
  "version": "2.1.1",
7068
7358
  "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -7103,6 +7393,11 @@
7103
7393
  "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
7104
7394
  "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
7105
7395
  },
7396
+ "is-whitespace": {
7397
+ "version": "0.3.0",
7398
+ "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz",
7399
+ "integrity": "sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg=="
7400
+ },
7106
7401
  "isexe": {
7107
7402
  "version": "2.0.0",
7108
7403
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -7561,6 +7856,17 @@
7561
7856
  }
7562
7857
  }
7563
7858
  },
7859
+ "js-beautify": {
7860
+ "version": "1.14.4",
7861
+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.4.tgz",
7862
+ "integrity": "sha512-+b4A9c3glceZEmxyIbxDOYB0ZJdReLvyU1077RqKsO4dZx9FUHjTOJn8VHwpg33QoucIykOiYbh7MfqBOghnrA==",
7863
+ "requires": {
7864
+ "config-chain": "^1.1.13",
7865
+ "editorconfig": "^0.15.3",
7866
+ "glob": "^7.1.3",
7867
+ "nopt": "^5.0.0"
7868
+ }
7869
+ },
7564
7870
  "js-tokens": {
7565
7871
  "version": "4.0.0",
7566
7872
  "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -7612,6 +7918,19 @@
7612
7918
  "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
7613
7919
  "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA=="
7614
7920
  },
7921
+ "jstoxml": {
7922
+ "version": "3.2.3",
7923
+ "resolved": "https://registry.npmjs.org/jstoxml/-/jstoxml-3.2.3.tgz",
7924
+ "integrity": "sha512-IxoZkdFcKm1dO4g+JcZBB7z1p/vPXEZPV3APRDd3/zcVtthg2kfTmpzKNZMl37/MrE/Uoc2p6ZnLnv3P5HVMTw=="
7925
+ },
7926
+ "kind-of": {
7927
+ "version": "3.2.2",
7928
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
7929
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
7930
+ "requires": {
7931
+ "is-buffer": "^1.1.5"
7932
+ }
7933
+ },
7615
7934
  "kleur": {
7616
7935
  "version": "3.0.3",
7617
7936
  "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -7800,6 +8119,14 @@
7800
8119
  "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
7801
8120
  "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
7802
8121
  },
8122
+ "nopt": {
8123
+ "version": "5.0.0",
8124
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
8125
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
8126
+ "requires": {
8127
+ "abbrev": "1"
8128
+ }
8129
+ },
7803
8130
  "normalize-path": {
7804
8131
  "version": "3.0.0",
7805
8132
  "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -7947,6 +8274,16 @@
7947
8274
  "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
7948
8275
  "dev": true
7949
8276
  },
8277
+ "pretty": {
8278
+ "version": "2.0.0",
8279
+ "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz",
8280
+ "integrity": "sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==",
8281
+ "requires": {
8282
+ "condense-newlines": "^0.2.1",
8283
+ "extend-shallow": "^2.0.1",
8284
+ "js-beautify": "^1.6.12"
8285
+ }
8286
+ },
7950
8287
  "pretty-format": {
7951
8288
  "version": "28.1.1",
7952
8289
  "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz",
@@ -7974,6 +8311,16 @@
7974
8311
  "sisteransi": "^1.0.5"
7975
8312
  }
7976
8313
  },
8314
+ "proto-list": {
8315
+ "version": "1.2.4",
8316
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
8317
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="
8318
+ },
8319
+ "pseudomap": {
8320
+ "version": "1.0.2",
8321
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
8322
+ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
8323
+ },
7977
8324
  "punycode": {
7978
8325
  "version": "2.1.1",
7979
8326
  "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -8102,6 +8449,11 @@
8102
8449
  "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
8103
8450
  "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
8104
8451
  },
8452
+ "sigmund": {
8453
+ "version": "1.0.1",
8454
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
8455
+ "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g=="
8456
+ },
8105
8457
  "signal-exit": {
8106
8458
  "version": "3.0.7",
8107
8459
  "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mitre/inspec-objects",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "description": "Typescript objects for normalizing between InSpec profiles and XCCDF benchmarks",
5
5
  "main": "lib/index.js",
6
6
  "publishConfig": {
@@ -25,8 +25,10 @@
25
25
  "@types/flat": "^5.0.2",
26
26
  "@types/he": "^1.1.2",
27
27
  "@types/json-diff": "^0.7.0",
28
+ "@types/jstoxml": "^2.0.2",
28
29
  "@types/lodash": "^4.14.178",
29
30
  "@types/mustache": "^4.2.0",
31
+ "@types/pretty": "^2.0.1",
30
32
  "fast-xml-parser": "^3.1.19",
31
33
  "flat": "^5.0.2",
32
34
  "he": "^1.2.0",
@@ -34,8 +36,10 @@
34
36
  "inspecjs": "^2.6.6",
35
37
  "jest": "^28.1.1",
36
38
  "json-diff": "^0.9.0",
39
+ "jstoxml": "^3.2.3",
37
40
  "lodash": "^4.17.21",
38
41
  "mustache": "^4.2.0",
42
+ "pretty": "^2.0.0",
39
43
  "ts-jest": "^28.0.4",
40
44
  "typescript": "^4.5.5",
41
45
  "winston": "^3.8.1",