@appland/scanner 1.54.0 → 1.56.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/CHANGELOG.md CHANGED
@@ -1,3 +1,27 @@
1
+ # [@appland/scanner-v1.56.0](https://github.com/applandinc/appmap-js/compare/@appland/scanner-v1.55.0...@appland/scanner-v1.56.0) (2022-05-11)
2
+
3
+
4
+ ### Features
5
+
6
+ * Add --watch flag to scan command ([51cb6fc](https://github.com/applandinc/appmap-js/commit/51cb6fc168e1b416587077e26c09d4e54dc9565b))
7
+
8
+ # [@appland/scanner-v1.55.0](https://github.com/applandinc/appmap-js/compare/@appland/scanner-v1.54.1...@appland/scanner-v1.55.0) (2022-05-10)
9
+
10
+
11
+ ### Features
12
+
13
+ * Change default file names ([e173fbb](https://github.com/applandinc/appmap-js/commit/e173fbbe464c8076133f91e04ecdb531dd80c13f))
14
+ * Read appmap_dir from appmap.yml ([b0b6b0d](https://github.com/applandinc/appmap-js/commit/b0b6b0db45eec8c0b8fa96d0f3005677a43f813b))
15
+ * Support repeated appmap-file option ([62edf68](https://github.com/applandinc/appmap-js/commit/62edf68a00d2e169cfbfed5e63246b5fbec947d7))
16
+
17
+ # [@appland/scanner-v1.54.1](https://github.com/applandinc/appmap-js/compare/@appland/scanner-v1.54.0...@appland/scanner-v1.54.1) (2022-05-03)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * Metadata rule title ([8d87864](https://github.com/applandinc/appmap-js/commit/8d878645001457d02487fd564498e8b858362f72))
23
+ * Progress bar exit ([f311bb2](https://github.com/applandinc/appmap-js/commit/f311bb2af258e6a140c9a09c64ae71ebc43c52f7))
24
+
1
25
  # [@appland/scanner-v1.54.0](https://github.com/applandinc/appmap-js/compare/@appland/scanner-v1.53.0...@appland/scanner-v1.54.0) (2022-05-03)
2
26
 
3
27
 
@@ -102,48 +102,57 @@ exports.default = {
102
102
  },
103
103
  handler: function (options) {
104
104
  return __awaiter(this, void 0, void 0, function () {
105
- var _a, appmapDir, config, isVerbose, failOption, appIdArg, reportFile, doUpload, updateCommitStatusOption, mergeKey, commit, branch, environment, appId, glob, files, configData, scanner, _b, rawScanResults, findingStatuses, scanResults, uploadResponse, err_1;
105
+ var appmapDir, _a, config, isVerbose, failOption, appIdArg, reportFile, doUpload, updateCommitStatusOption, mergeKey, commit, branch, environment, appId, glob, files, configData, scanner, _b, rawScanResults, findingStatuses, scanResults, uploadResponse, err_1;
106
106
  return __generator(this, function (_c) {
107
107
  switch (_c.label) {
108
108
  case 0:
109
- _a = options, appmapDir = _a.appmapDir, config = _a.config, isVerbose = _a.verbose, failOption = _a.fail, appIdArg = _a.app, reportFile = _a.reportFile, doUpload = _a.upload, updateCommitStatusOption = _a.updateCommitStatus, mergeKey = _a.mergeKey, commit = _a.commit, branch = _a.branch, environment = _a.environment;
109
+ appmapDir = options.appmapDir;
110
+ _a = options, config = _a.config, isVerbose = _a.verbose, failOption = _a.fail, appIdArg = _a.app, reportFile = _a.reportFile, doUpload = _a.upload, updateCommitStatusOption = _a.updateCommitStatus, mergeKey = _a.mergeKey, commit = _a.commit, branch = _a.branch, environment = _a.environment;
110
111
  if (isVerbose) {
111
112
  (0, util_2.verbose)(true);
112
113
  }
113
114
  _c.label = 1;
114
115
  case 1:
115
- _c.trys.push([1, 13, , 14]);
116
- if (!appmapDir) {
117
- throw new errors_1.ValidationError('--appmap-dir is required');
118
- }
119
- return [4 /*yield*/, (0, validateFile_1.default)('directory', appmapDir)];
116
+ _c.trys.push([1, 17, , 18]);
117
+ if (!!appmapDir) return [3 /*break*/, 3];
118
+ return [4 /*yield*/, (0, util_2.appmapDirFromConfig)()];
120
119
  case 2:
120
+ appmapDir = _c.sent();
121
+ _c.label = 3;
122
+ case 3:
123
+ if (!!appmapDir) return [3 /*break*/, 5];
124
+ return [4 /*yield*/, (0, util_2.appmapDirFromConfig)()];
125
+ case 4:
126
+ appmapDir = _c.sent();
127
+ throw new errors_1.ValidationError('--appmap-dir is required');
128
+ case 5: return [4 /*yield*/, (0, validateFile_1.default)('directory', appmapDir)];
129
+ case 6:
121
130
  _c.sent();
122
131
  return [4 /*yield*/, (0, resolveAppId_1.default)(appIdArg, appmapDir)];
123
- case 3:
132
+ case 7:
124
133
  appId = _c.sent();
125
134
  glob = (0, util_1.promisify)(glob_1.glob);
126
135
  return [4 /*yield*/, glob("".concat(appmapDir, "/**/*.appmap.json"))];
127
- case 4:
136
+ case 8:
128
137
  files = _c.sent();
129
138
  return [4 /*yield*/, (0, configurationProvider_1.parseConfigFile)(config)];
130
- case 5:
139
+ case 9:
131
140
  configData = _c.sent();
132
141
  return [4 /*yield*/, (0, scanner_1.default)(false, configData, files)];
133
- case 6:
142
+ case 10:
134
143
  scanner = _c.sent();
135
144
  return [4 /*yield*/, Promise.all([scanner.scan(), scanner.fetchFindingStatus(appIdArg, appmapDir)])];
136
- case 7:
145
+ case 11:
137
146
  _b = __read.apply(void 0, [_c.sent(), 2]), rawScanResults = _b[0], findingStatuses = _b[1];
138
147
  // Always report the raw data
139
148
  return [4 /*yield*/, (0, promises_1.writeFile)(reportFile, JSON.stringify(rawScanResults, null, 2))];
140
- case 8:
149
+ case 12:
141
150
  // Always report the raw data
142
151
  _c.sent();
143
152
  scanResults = rawScanResults.withFindings((0, findings_1.newFindings)(rawScanResults.findings, findingStatuses));
144
153
  (0, findingsReport_1.default)(scanResults.findings, scanResults.appMapMetadata);
145
154
  (0, summaryReport_1.default)(scanResults, true);
146
- if (!doUpload) return [3 /*break*/, 10];
155
+ if (!doUpload) return [3 /*break*/, 14];
147
156
  return [4 /*yield*/, (0, upload_1.default)(rawScanResults, appId, appmapDir, mergeKey, {
148
157
  branch: branch,
149
158
  commit: commit,
@@ -151,22 +160,22 @@ exports.default = {
151
160
  }, {
152
161
  maxRetries: 3,
153
162
  })];
154
- case 9:
163
+ case 13:
155
164
  uploadResponse = _c.sent();
156
165
  (0, reportUploadURL_1.default)(uploadResponse.summary.numFindings, uploadResponse.url);
157
- _c.label = 10;
158
- case 10:
159
- if (!updateCommitStatusOption) return [3 /*break*/, 12];
166
+ _c.label = 14;
167
+ case 14:
168
+ if (!updateCommitStatusOption) return [3 /*break*/, 16];
160
169
  return [4 /*yield*/, (0, updateCommitStatus_1.default)(scanResults.findings.length, scanResults.summary.numChecks)];
161
- case 11:
170
+ case 15:
162
171
  _c.sent();
163
- _c.label = 12;
164
- case 12:
172
+ _c.label = 16;
173
+ case 16:
165
174
  if (failOption) {
166
175
  (0, fail_1.default)(scanResults.findings.length);
167
176
  }
168
- return [3 /*break*/, 14];
169
- case 13:
177
+ return [3 /*break*/, 18];
178
+ case 17:
170
179
  err_1 = _c.sent();
171
180
  if (err_1 instanceof errors_1.ValidationError) {
172
181
  console.warn(err_1.message);
@@ -180,7 +189,7 @@ exports.default = {
180
189
  return [2 /*return*/, process.exit(exitCode_1.ExitCode.RuntimeError)];
181
190
  }
182
191
  throw err_1;
183
- case 14: return [2 /*return*/];
192
+ case 18: return [2 /*return*/];
184
193
  }
185
194
  });
186
195
  });
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/cli/ci/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/cli/ci/command.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,4 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -46,66 +35,25 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
35
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
36
  }
48
37
  };
49
- var __read = (this && this.__read) || function (o, n) {
50
- var m = typeof Symbol === "function" && o[Symbol.iterator];
51
- if (!m) return o;
52
- var i = m.call(o), r, ar = [], e;
53
- try {
54
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
- }
56
- catch (error) { e = { error: error }; }
57
- finally {
58
- try {
59
- if (r && !r.done && (m = i["return"])) m.call(i);
60
- }
61
- finally { if (e) throw e.error; }
62
- }
63
- return ar;
64
- };
65
- var __values = (this && this.__values) || function(o) {
66
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
67
- if (m) return m.call(o);
68
- if (o && typeof o.length === "number") return {
69
- next: function () {
70
- if (o && i >= o.length) o = void 0;
71
- return { value: o && o[i++], done: !o };
72
- }
73
- };
74
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
75
- };
76
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
77
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
78
- if (ar || !(i in from)) {
79
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
80
- ar[i] = from[i];
81
- }
82
- }
83
- return to.concat(ar || Array.prototype.slice.call(from));
84
- };
85
38
  var __importDefault = (this && this.__importDefault) || function (mod) {
86
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
87
40
  };
88
41
  Object.defineProperty(exports, "__esModule", { value: true });
89
- var glob_1 = require("glob");
90
- var promises_1 = require("fs/promises");
91
- var util_1 = require("util");
92
42
  var configurationProvider_1 = require("../../configuration/configurationProvider");
93
43
  var errors_1 = require("../../errors");
94
- var util_2 = require("../../rules/lib/util");
95
- var findings_1 = require("../../findings");
96
- var findingsReport_1 = __importDefault(require("../../report/findingsReport"));
97
- var summaryReport_1 = __importDefault(require("../../report/summaryReport"));
44
+ var util_1 = require("../../rules/lib/util");
98
45
  var validateFile_1 = __importDefault(require("../validateFile"));
99
- var scanner_1 = __importDefault(require("./scanner"));
100
46
  var scanArgs_1 = __importDefault(require("../scanArgs"));
101
47
  var resolveAppId_1 = __importDefault(require("../resolveAppId"));
48
+ var singleScan_1 = __importDefault(require("./singleScan"));
49
+ var watchScan_1 = __importDefault(require("./watchScan"));
102
50
  exports.default = {
103
51
  command: 'scan',
104
52
  describe: 'Scan AppMaps for code behavior findings',
105
53
  builder: function (args) {
106
54
  (0, scanArgs_1.default)(args);
107
55
  args.option('appmap-file', {
108
- describe: 'single file to scan',
56
+ describe: 'single file to scan, or repeat this option to scan multiple specific files',
109
57
  alias: 'f',
110
58
  });
111
59
  args.option('ide', {
@@ -117,153 +65,72 @@ exports.default = {
117
65
  default: false,
118
66
  type: 'boolean',
119
67
  });
68
+ args.option('watch', {
69
+ describe: 'scan code changes and report findings on changed files',
70
+ default: false,
71
+ type: 'boolean',
72
+ });
120
73
  return args.strict();
121
74
  },
122
75
  handler: function (options) {
123
76
  return __awaiter(this, void 0, void 0, function () {
124
- var _a, appmapDir, appmapFile, config, isVerbose, reportAllFindings, appIdArg, apiKey, ide, reportFile, appId, files, glob, configData, scanner, startTime, _b, rawScanResults, findingStatuses, scanResults, elapsed, numChecks;
125
- return __generator(this, function (_c) {
126
- switch (_c.label) {
77
+ var appmapDir, _a, appmapFile, config, isVerbose, reportAllFindings, watch, appIdArg, apiKey, ide, reportFile, configData, watchAppMapDir, appId;
78
+ return __generator(this, function (_b) {
79
+ switch (_b.label) {
127
80
  case 0:
128
- _a = options, appmapDir = _a.appmapDir, appmapFile = _a.appmapFile, config = _a.config, isVerbose = _a.verbose, reportAllFindings = _a.all, appIdArg = _a.app, apiKey = _a.apiKey, ide = _a.ide, reportFile = _a.reportFile;
81
+ appmapDir = options.appmapDir;
82
+ _a = options, appmapFile = _a.appmapFile, config = _a.config, isVerbose = _a.verbose, reportAllFindings = _a.all, watch = _a.watch, appIdArg = _a.app, apiKey = _a.apiKey, ide = _a.ide, reportFile = _a.reportFile;
129
83
  if (isVerbose) {
130
- (0, util_2.verbose)(true);
84
+ (0, util_1.verbose)(true);
131
85
  }
132
86
  if (apiKey) {
133
87
  process.env.APPLAND_API_KEY = apiKey;
134
88
  }
135
- if (appmapFile && appmapDir) {
136
- throw new errors_1.ValidationError('Use --appmap-dir or --appmap-file, but not both');
89
+ if (appmapFile && watch) {
90
+ throw new errors_1.ValidationError('Use --appmap-file or --watch, but not both');
137
91
  }
138
- if (!appmapFile && !appmapDir) {
139
- throw new errors_1.ValidationError('Either --appmap-dir or --appmap-file is required');
92
+ if (reportAllFindings && watch) {
93
+ throw new errors_1.ValidationError("Don't use --all with --watch, because in watch mode all findings are reported");
140
94
  }
141
- appId = appIdArg;
142
- if (!!reportAllFindings) return [3 /*break*/, 2];
143
- return [4 /*yield*/, (0, resolveAppId_1.default)(appIdArg, appmapDir)];
95
+ if (appIdArg && watch) {
96
+ throw new errors_1.ValidationError("Don't use --app with --watch, because in watch mode all findings are reported");
97
+ }
98
+ if (!(!appmapFile && !appmapDir)) return [3 /*break*/, 2];
99
+ return [4 /*yield*/, (0, util_1.appmapDirFromConfig)()];
144
100
  case 1:
145
- appId = _c.sent();
146
- _c.label = 2;
101
+ appmapDir = (_b.sent()) || '.';
102
+ _b.label = 2;
147
103
  case 2:
148
- files = [];
149
- if (!appmapDir) return [3 /*break*/, 5];
104
+ if (!appmapDir) return [3 /*break*/, 4];
150
105
  return [4 /*yield*/, (0, validateFile_1.default)('directory', appmapDir)];
151
106
  case 3:
152
- _c.sent();
153
- glob = (0, util_1.promisify)(glob_1.glob);
154
- return [4 /*yield*/, glob("".concat(appmapDir, "/**/*.appmap.json"))];
155
- case 4:
156
- files = _c.sent();
157
- _c.label = 5;
107
+ _b.sent();
108
+ _b.label = 4;
109
+ case 4: return [4 /*yield*/, (0, configurationProvider_1.parseConfigFile)(config)];
158
110
  case 5:
159
- if (!appmapFile) return [3 /*break*/, 7];
160
- return [4 /*yield*/, (0, validateFile_1.default)('file', appmapFile)];
111
+ configData = _b.sent();
112
+ if (!watch) return [3 /*break*/, 6];
113
+ watchAppMapDir = appmapDir;
114
+ return [2 /*return*/, (0, watchScan_1.default)({ appmapDir: watchAppMapDir, configData: configData })];
161
115
  case 6:
162
- _c.sent();
163
- files = [appmapFile];
164
- _c.label = 7;
165
- case 7: return [4 /*yield*/, (0, configurationProvider_1.parseConfigFile)(config)];
166
- case 8:
167
- configData = _c.sent();
168
- return [4 /*yield*/, (0, scanner_1.default)(reportAllFindings, configData, files).catch(function (error) {
169
- throw new errors_1.ValidationError(error.message + '\nUse --all to perform an offline scan.');
170
- })];
171
- case 9:
172
- scanner = _c.sent();
173
- startTime = Date.now();
174
- return [4 /*yield*/, Promise.all([
175
- scanner.scan(),
176
- scanner.fetchFindingStatus(appId, appmapDir),
177
- ])];
178
- case 10:
179
- _b = __read.apply(void 0, [_c.sent(), 2]), rawScanResults = _b[0], findingStatuses = _b[1];
180
- // Always report the raw data
181
- return [4 /*yield*/, (0, promises_1.writeFile)(reportFile, formatReport(rawScanResults))];
182
- case 11:
183
- // Always report the raw data
184
- _c.sent();
185
- if (reportAllFindings) {
186
- scanResults = rawScanResults;
187
- }
188
- else {
189
- scanResults = rawScanResults.withFindings((0, findings_1.newFindings)(rawScanResults.findings, findingStatuses));
190
- }
191
- (0, findingsReport_1.default)(scanResults.findings, scanResults.appMapMetadata, ide);
192
- console.log();
193
- (0, summaryReport_1.default)(scanResults, true);
194
- console.log('\n');
195
- elapsed = Date.now() - startTime;
196
- numChecks = scanResults.checks.length * scanResults.summary.numAppMaps;
197
- console.log("Performed ".concat(numChecks, " checks in ").concat(elapsed, "ms (").concat(Math.floor(numChecks / (elapsed / 1000.0)), " checks/sec)"));
198
- return [2 /*return*/];
116
+ appId = appIdArg;
117
+ if (!!reportAllFindings) return [3 /*break*/, 8];
118
+ return [4 /*yield*/, (0, resolveAppId_1.default)(appIdArg, appmapDir)];
119
+ case 7:
120
+ appId = _b.sent();
121
+ _b.label = 8;
122
+ case 8: return [2 /*return*/, (0, singleScan_1.default)({
123
+ appmapFile: appmapFile,
124
+ appmapDir: appmapDir,
125
+ configData: configData,
126
+ reportAllFindings: reportAllFindings,
127
+ appId: appId,
128
+ ide: ide,
129
+ reportFile: reportFile,
130
+ })];
199
131
  }
200
132
  });
201
133
  });
202
134
  },
203
135
  };
204
- function metadataFilter(_a) {
205
- var apps = _a.apps.length, clients = _a.clients.length, frameworks = _a.frameworks.length, git = _a.git.length, languages = _a.languages.length, recorders = _a.recorders.length;
206
- var filtered = Object.entries({
207
- app: apps < 2,
208
- client: clients < 2,
209
- git: git < 2,
210
- language: languages < 2,
211
- recorder: recorders < 2,
212
- })
213
- .filter(function (_a) {
214
- var _b = __read(_a, 2), v = _b[1];
215
- return v;
216
- })
217
- .map(function (_a) {
218
- var _b = __read(_a, 1), k = _b[0];
219
- return k;
220
- });
221
- return function (metadata) {
222
- return Object.fromEntries(Object.entries(metadata).filter(function (_a) {
223
- var _b = __read(_a, 2), k = _b[0], v = _b[1];
224
- if (filtered.includes(k))
225
- return false;
226
- if (k === 'frameworks')
227
- return (v || []).length !== frameworks;
228
- return true;
229
- }));
230
- };
231
- }
232
- function uniq(entries, key) {
233
- var e_1, _a;
234
- var result = new Map();
235
- try {
236
- for (var entries_1 = __values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {
237
- var entry = entries_1_1.value;
238
- var k = key(entry);
239
- if (result.has(k))
240
- continue;
241
- result.set(k, entry);
242
- }
243
- }
244
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
245
- finally {
246
- try {
247
- if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);
248
- }
249
- finally { if (e_1) throw e_1.error; }
250
- }
251
- return result.values();
252
- }
253
- // Formats a report to JSON. Does some data deduplication.
254
- function formatReport(rawScanResults) {
255
- var _a = __assign({}, rawScanResults), summary = _a.summary, appMapMetadata = _a.appMapMetadata, findings = _a.findings;
256
- // remove metadata that's common between appmaps
257
- var filter = metadataFilter(summary.appMapMetadata);
258
- var metadata = Object.fromEntries(Object.entries(appMapMetadata).map(function (_a) {
259
- var _b = __read(_a, 2), id = _b[0], metadata = _b[1];
260
- return [id, filter(metadata)];
261
- }));
262
- // only keep one finding of the same hash
263
- var uniqueFindings = __spreadArray([], __read(uniq(findings, function (_a) {
264
- var hash = _a.hash;
265
- return hash;
266
- })), false);
267
- return JSON.stringify(__assign(__assign({}, rawScanResults), { summary: __assign(__assign({}, summary), { numFindings: uniqueFindings.length }), appMapMetadata: metadata, findings: uniqueFindings }), null, 2);
268
- }
269
136
  //# sourceMappingURL=command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/cli/scan/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/cli/scan/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
29
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
30
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
31
+ if (ar || !(i in from)) {
32
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
33
+ ar[i] = from[i];
34
+ }
35
+ }
36
+ return to.concat(ar || Array.prototype.slice.call(from));
37
+ };
38
+ var __values = (this && this.__values) || function(o) {
39
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
40
+ if (m) return m.call(o);
41
+ if (o && typeof o.length === "number") return {
42
+ next: function () {
43
+ if (o && i >= o.length) o = void 0;
44
+ return { value: o && o[i++], done: !o };
45
+ }
46
+ };
47
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.formatReport = void 0;
51
+ // Formats a report to JSON. Does some data deduplication.
52
+ function formatReport(rawScanResults) {
53
+ var _a = __assign({}, rawScanResults), summary = _a.summary, appMapMetadata = _a.appMapMetadata, findings = _a.findings;
54
+ // remove metadata that's common between appmaps
55
+ var filter = metadataFilter(summary.appMapMetadata);
56
+ var metadata = Object.fromEntries(Object.entries(appMapMetadata).map(function (_a) {
57
+ var _b = __read(_a, 2), id = _b[0], metadata = _b[1];
58
+ return [id, filter(metadata)];
59
+ }));
60
+ // only keep one finding of the same hash
61
+ var uniqueFindings = __spreadArray([], __read(uniq(findings, function (_a) {
62
+ var hash = _a.hash;
63
+ return hash;
64
+ })), false);
65
+ return JSON.stringify(__assign(__assign({}, rawScanResults), { summary: __assign(__assign({}, summary), { numFindings: uniqueFindings.length }), appMapMetadata: metadata, findings: uniqueFindings }), null, 2);
66
+ }
67
+ exports.formatReport = formatReport;
68
+ function metadataFilter(_a) {
69
+ var apps = _a.apps.length, clients = _a.clients.length, frameworks = _a.frameworks.length, git = _a.git.length, languages = _a.languages.length, recorders = _a.recorders.length;
70
+ var filtered = Object.entries({
71
+ app: apps < 2,
72
+ client: clients < 2,
73
+ git: git < 2,
74
+ language: languages < 2,
75
+ recorder: recorders < 2,
76
+ })
77
+ .filter(function (_a) {
78
+ var _b = __read(_a, 2), v = _b[1];
79
+ return v;
80
+ })
81
+ .map(function (_a) {
82
+ var _b = __read(_a, 1), k = _b[0];
83
+ return k;
84
+ });
85
+ return function (metadata) {
86
+ return Object.fromEntries(Object.entries(metadata).filter(function (_a) {
87
+ var _b = __read(_a, 2), k = _b[0], v = _b[1];
88
+ if (filtered.includes(k))
89
+ return false;
90
+ if (k === 'frameworks')
91
+ return (v || []).length !== frameworks;
92
+ return true;
93
+ }));
94
+ };
95
+ }
96
+ function uniq(entries, key) {
97
+ var e_1, _a;
98
+ var result = new Map();
99
+ try {
100
+ for (var entries_1 = __values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {
101
+ var entry = entries_1_1.value;
102
+ var k = key(entry);
103
+ if (result.has(k))
104
+ continue;
105
+ result.set(k, entry);
106
+ }
107
+ }
108
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
109
+ finally {
110
+ try {
111
+ if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);
112
+ }
113
+ finally { if (e_1) throw e_1.error; }
114
+ }
115
+ return result.values();
116
+ }
117
+ //# sourceMappingURL=formatReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatReport.js","sourceRoot":"","sources":["../../../src/cli/scan/formatReport.ts"],"names":[],"mappings":"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"}