@appland/scanner 1.55.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,10 @@
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
+
1
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)
2
9
 
3
10
 
@@ -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,59 +35,18 @@ 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',
@@ -117,163 +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 appmapDir, _a, appmapFile, config, isVerbose, reportAllFindings, appIdArg, apiKey, ide, reportFile, appId, files, glob, configData, scanner, startTime, _b, rawScanResults, findingStatuses, scanResults, elapsed, numChecks;
125
- var _this = this;
126
- return __generator(this, function (_c) {
127
- 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) {
128
80
  case 0:
129
81
  appmapDir = options.appmapDir;
130
- _a = options, appmapFile = _a.appmapFile, config = _a.config, isVerbose = _a.verbose, reportAllFindings = _a.all, appIdArg = _a.app, apiKey = _a.apiKey, ide = _a.ide, reportFile = _a.reportFile;
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;
131
83
  if (isVerbose) {
132
- (0, util_2.verbose)(true);
84
+ (0, util_1.verbose)(true);
133
85
  }
134
86
  if (apiKey) {
135
87
  process.env.APPLAND_API_KEY = apiKey;
136
88
  }
137
- if (appmapFile && appmapDir) {
138
- 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');
91
+ }
92
+ if (reportAllFindings && watch) {
93
+ throw new errors_1.ValidationError("Don't use --all with --watch, because in watch mode all findings are reported");
94
+ }
95
+ if (appIdArg && watch) {
96
+ throw new errors_1.ValidationError("Don't use --app with --watch, because in watch mode all findings are reported");
139
97
  }
140
98
  if (!(!appmapFile && !appmapDir)) return [3 /*break*/, 2];
141
- return [4 /*yield*/, (0, util_2.appmapDirFromConfig)()];
99
+ return [4 /*yield*/, (0, util_1.appmapDirFromConfig)()];
142
100
  case 1:
143
- appmapDir = _c.sent();
144
- _c.label = 2;
101
+ appmapDir = (_b.sent()) || '.';
102
+ _b.label = 2;
145
103
  case 2:
146
- if (!appmapFile && !appmapDir) {
147
- throw new errors_1.ValidationError('Either --appmap-dir or --appmap-file is required');
148
- }
149
- appId = appIdArg;
150
- if (!!reportAllFindings) return [3 /*break*/, 4];
151
- return [4 /*yield*/, (0, resolveAppId_1.default)(appIdArg, appmapDir)];
152
- case 3:
153
- appId = _c.sent();
154
- _c.label = 4;
155
- case 4:
156
- files = [];
157
- if (!appmapDir) return [3 /*break*/, 7];
104
+ if (!appmapDir) return [3 /*break*/, 4];
158
105
  return [4 /*yield*/, (0, validateFile_1.default)('directory', appmapDir)];
106
+ case 3:
107
+ _b.sent();
108
+ _b.label = 4;
109
+ case 4: return [4 /*yield*/, (0, configurationProvider_1.parseConfigFile)(config)];
159
110
  case 5:
160
- _c.sent();
161
- glob = (0, util_1.promisify)(glob_1.glob);
162
- return [4 /*yield*/, glob("".concat(appmapDir, "/**/*.appmap.json"))];
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 })];
163
115
  case 6:
164
- files = _c.sent();
165
- _c.label = 7;
116
+ appId = appIdArg;
117
+ if (!!reportAllFindings) return [3 /*break*/, 8];
118
+ return [4 /*yield*/, (0, resolveAppId_1.default)(appIdArg, appmapDir)];
166
119
  case 7:
167
- if (!appmapFile) return [3 /*break*/, 9];
168
- files = typeof appmapFile === 'string' ? [appmapFile] : appmapFile;
169
- return [4 /*yield*/, Promise.all(files.map(function (file) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
170
- return [2 /*return*/, (0, validateFile_1.default)('file', file)];
171
- }); }); }))];
172
- case 8:
173
- _c.sent();
174
- _c.label = 9;
175
- case 9: return [4 /*yield*/, (0, configurationProvider_1.parseConfigFile)(config)];
176
- case 10:
177
- configData = _c.sent();
178
- return [4 /*yield*/, (0, scanner_1.default)(reportAllFindings, configData, files).catch(function (error) {
179
- throw new errors_1.ValidationError(error.message + '\nUse --all to perform an offline scan.');
180
- })];
181
- case 11:
182
- scanner = _c.sent();
183
- startTime = Date.now();
184
- return [4 /*yield*/, Promise.all([
185
- scanner.scan(),
186
- scanner.fetchFindingStatus(appId, appmapDir),
187
- ])];
188
- case 12:
189
- _b = __read.apply(void 0, [_c.sent(), 2]), rawScanResults = _b[0], findingStatuses = _b[1];
190
- // Always report the raw data
191
- return [4 /*yield*/, (0, promises_1.writeFile)(reportFile, formatReport(rawScanResults))];
192
- case 13:
193
- // Always report the raw data
194
- _c.sent();
195
- if (reportAllFindings) {
196
- scanResults = rawScanResults;
197
- }
198
- else {
199
- scanResults = rawScanResults.withFindings((0, findings_1.newFindings)(rawScanResults.findings, findingStatuses));
200
- }
201
- (0, findingsReport_1.default)(scanResults.findings, scanResults.appMapMetadata, ide);
202
- console.log();
203
- (0, summaryReport_1.default)(scanResults, true);
204
- console.log('\n');
205
- elapsed = Date.now() - startTime;
206
- numChecks = scanResults.checks.length * scanResults.summary.numAppMaps;
207
- console.log("Performed ".concat(numChecks, " checks in ").concat(elapsed, "ms (").concat(Math.floor(numChecks / (elapsed / 1000.0)), " checks/sec)"));
208
- return [2 /*return*/];
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
+ })];
209
131
  }
210
132
  });
211
133
  });
212
134
  },
213
135
  };
214
- function metadataFilter(_a) {
215
- 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;
216
- var filtered = Object.entries({
217
- app: apps < 2,
218
- client: clients < 2,
219
- git: git < 2,
220
- language: languages < 2,
221
- recorder: recorders < 2,
222
- })
223
- .filter(function (_a) {
224
- var _b = __read(_a, 2), v = _b[1];
225
- return v;
226
- })
227
- .map(function (_a) {
228
- var _b = __read(_a, 1), k = _b[0];
229
- return k;
230
- });
231
- return function (metadata) {
232
- return Object.fromEntries(Object.entries(metadata).filter(function (_a) {
233
- var _b = __read(_a, 2), k = _b[0], v = _b[1];
234
- if (filtered.includes(k))
235
- return false;
236
- if (k === 'frameworks')
237
- return (v || []).length !== frameworks;
238
- return true;
239
- }));
240
- };
241
- }
242
- function uniq(entries, key) {
243
- var e_1, _a;
244
- var result = new Map();
245
- try {
246
- for (var entries_1 = __values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {
247
- var entry = entries_1_1.value;
248
- var k = key(entry);
249
- if (result.has(k))
250
- continue;
251
- result.set(k, entry);
252
- }
253
- }
254
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
255
- finally {
256
- try {
257
- if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);
258
- }
259
- finally { if (e_1) throw e_1.error; }
260
- }
261
- return result.values();
262
- }
263
- // Formats a report to JSON. Does some data deduplication.
264
- function formatReport(rawScanResults) {
265
- var _a = __assign({}, rawScanResults), summary = _a.summary, appMapMetadata = _a.appMapMetadata, findings = _a.findings;
266
- // remove metadata that's common between appmaps
267
- var filter = metadataFilter(summary.appMapMetadata);
268
- var metadata = Object.fromEntries(Object.entries(appMapMetadata).map(function (_a) {
269
- var _b = __read(_a, 2), id = _b[0], metadata = _b[1];
270
- return [id, filter(metadata)];
271
- }));
272
- // only keep one finding of the same hash
273
- var uniqueFindings = __spreadArray([], __read(uniq(findings, function (_a) {
274
- var hash = _a.hash;
275
- return hash;
276
- })), false);
277
- return JSON.stringify(__assign(__assign({}, rawScanResults), { summary: __assign(__assign({}, summary), { numFindings: uniqueFindings.length }), appMapMetadata: metadata, findings: uniqueFindings }), null, 2);
278
- }
279
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,mFAA4E;AAC5E,uCAA+C;AAC/C,6CAAoE;AAEpE,iEAA2C;AAE3C,yDAAmC;AACnC,iEAA2C;AAC3C,4DAAsC;AACtC,0DAAoC;AAEpC,kBAAe;IACb,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,yCAAyC;IACnD,OAAO,EAAP,UAAQ,IAAU;QAChB,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;YACzB,QAAQ,EAAE,4EAA4E;YACtF,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACjB,QAAQ,EAAE,gEAAgE;YAC1E,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACjB,QAAQ,EAAE,6DAA6D;YACvE,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACnB,QAAQ,EAAE,wDAAwD;YAClE,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IACK,OAAO,EAAb,UAAc,OAAkB;;;;;;wBACxB,SAAS,GAAK,OAAoC,UAAzC,CAA0C;wBACnD,KAUF,OAAoC,EATtC,UAAU,gBAAA,EACV,MAAM,YAAA,EACG,SAAS,aAAA,EACb,iBAAiB,SAAA,EACtB,KAAK,WAAA,EACA,QAAQ,SAAA,EACb,MAAM,YAAA,EACN,GAAG,SAAA,EACH,UAAU,gBAAA,CAC6B;wBAEzC,IAAI,SAAS,EAAE;4BACb,IAAA,cAAO,EAAC,IAAI,CAAC,CAAC;yBACf;wBAED,IAAI,MAAM,EAAE;4BACV,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC;yBACtC;wBAED,IAAI,UAAU,IAAI,KAAK,EAAE;4BACvB,MAAM,IAAI,wBAAe,CAAC,4CAA4C,CAAC,CAAC;yBACzE;wBACD,IAAI,iBAAiB,IAAI,KAAK,EAAE;4BAC9B,MAAM,IAAI,wBAAe,CACvB,+EAA+E,CAChF,CAAC;yBACH;wBACD,IAAI,QAAQ,IAAI,KAAK,EAAE;4BACrB,MAAM,IAAI,wBAAe,CACvB,+EAA+E,CAChF,CAAC;yBACH;6BACG,CAAA,CAAC,UAAU,IAAI,CAAC,SAAS,CAAA,EAAzB,wBAAyB;wBACd,qBAAM,IAAA,0BAAmB,GAAE,EAAA;;wBAAxC,SAAS,GAAG,CAAC,SAA2B,CAAC,IAAI,GAAG,CAAC;;;6BAE/C,SAAS,EAAT,wBAAS;wBAAE,qBAAM,IAAA,sBAAY,EAAC,WAAW,EAAE,SAAS,CAAC,EAAA;;wBAA1C,SAA0C,CAAC;;4BAEvC,qBAAM,IAAA,uCAAe,EAAC,MAAM,CAAC,EAAA;;wBAA1C,UAAU,GAAG,SAA6B;6BAE5C,KAAK,EAAL,wBAAK;wBACD,cAAc,GAAG,SAAU,CAAC;wBAClC,sBAAO,IAAA,mBAAS,EAAC,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,YAAA,EAAE,CAAC,EAAC;;wBAExD,KAAK,GAAG,QAAQ,CAAC;6BACjB,CAAC,iBAAiB,EAAlB,wBAAkB;wBACZ,qBAAM,IAAA,sBAAY,EAAC,QAAQ,EAAE,SAAS,CAAC,EAAA;;wBAA/C,KAAK,GAAG,SAAuC,CAAC;;4BAGlD,sBAAO,IAAA,oBAAU,EAAC;4BAChB,UAAU,YAAA;4BACV,SAAS,WAAA;4BACT,UAAU,YAAA;4BACV,iBAAiB,mBAAA;4BACjB,KAAK,OAAA;4BACL,GAAG,KAAA;4BACH,UAAU,YAAA;yBACX,CAAC,EAAC;;;;KAEN;CACF,CAAC"}
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,0DAA0D;AAC1D,SAAgB,YAAY,CAAC,cAA2B;IAChD,IAAA,kBAA6C,cAAc,CAAE,EAA3D,OAAO,aAAA,EAAE,cAAc,oBAAA,EAAE,QAAQ,cAA0B,CAAC;IAEpE,gDAAgD;IAChD,IAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACtD,IAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CACjC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,UAAC,EAAc;YAAd,KAAA,aAAc,EAAb,EAAE,QAAA,EAAE,QAAQ,QAAA;QAAM,OAAA,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAAtB,CAAsB,CAAC,CAC/E,CAAC;IAEF,yCAAyC;IACzC,IAAM,cAAc,4BAAO,IAAI,CAAC,QAAQ,EAAE,UAAC,EAAQ;YAAN,IAAI,UAAA;QAAO,OAAA,IAAI;IAAJ,CAAI,CAAC,SAAC,CAAC;IAE/D,OAAO,IAAI,CAAC,SAAS,uBAEd,cAAc,KACjB,OAAO,wBAAO,OAAO,KAAE,WAAW,EAAE,cAAc,CAAC,MAAM,KACzD,cAAc,EAAE,QAAQ,EACxB,QAAQ,EAAE,cAAc,KAE1B,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAtBD,oCAsBC;AAED,SAAS,cAAc,CAAC,EAOP;QANC,IAAI,iBAAA,EACD,OAAO,oBAAA,EACJ,UAAU,uBAAA,EACjB,GAAG,gBAAA,EACG,SAAS,sBAAA,EACT,SAAS,sBAAA;IAE9B,IAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,GAAG,EAAE,IAAI,GAAG,CAAC;QACb,MAAM,EAAE,OAAO,GAAG,CAAC;QACnB,GAAG,EAAE,GAAG,GAAG,CAAC;QACZ,QAAQ,EAAE,SAAS,GAAG,CAAC;QACvB,QAAQ,EAAE,SAAS,GAAG,CAAC;KACxB,CAAC;SACC,MAAM,CAAC,UAAC,EAAK;YAAL,KAAA,aAAK,EAAF,CAAC,QAAA;QAAM,OAAA,CAAC;IAAD,CAAC,CAAC;SACpB,GAAG,CAAC,UAAC,EAAG;YAAH,KAAA,aAAG,EAAF,CAAC,QAAA;QAAM,OAAA,CAAC;IAAD,CAAC,CAAC,CAAC;IAEnB,OAAO,UAAU,QAAkB;QACjC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAC,EAAM;gBAAN,KAAA,aAAM,EAAL,CAAC,QAAA,EAAE,CAAC,QAAA;YACpC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YACvC,IAAI,CAAC,KAAK,YAAY;gBAAE,OAAQ,CAAC,CAAC,IAAI,EAAE,CAAa,CAAC,MAAM,KAAK,UAAU,CAAC;YAC5E,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAO,OAAoB,EAAE,GAAgB;;IACxD,IAAM,MAAM,GAAG,IAAI,GAAG,EAAQ,CAAC;;QAE/B,KAAoB,IAAA,YAAA,SAAA,OAAO,CAAA,gCAAA,qDAAE;YAAxB,IAAM,KAAK,oBAAA;YACd,IAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;SACtB;;;;;;;;;IAED,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
54
+ var __importDefault = (this && this.__importDefault) || function (mod) {
55
+ return (mod && mod.__esModule) ? mod : { "default": mod };
56
+ };
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ var util_1 = require("util");
59
+ var promises_1 = require("fs/promises");
60
+ var glob_1 = require("glob");
61
+ var validateFile_1 = __importDefault(require("../validateFile"));
62
+ var scanner_1 = __importDefault(require("./scanner"));
63
+ var errors_1 = require("../../errors");
64
+ var findings_1 = require("../../findings");
65
+ var findingsReport_1 = __importDefault(require("../../report/findingsReport"));
66
+ var summaryReport_1 = __importDefault(require("../../report/summaryReport"));
67
+ var formatReport_1 = require("./formatReport");
68
+ function singleScan(options) {
69
+ return __awaiter(this, void 0, void 0, function () {
70
+ var appmapFile, appmapDir, configData, reportAllFindings, appId, ide, reportFile, files, glob, scanner, startTime, _a, rawScanResults, findingStatuses, scanResults, elapsed, numChecks;
71
+ var _this = this;
72
+ return __generator(this, function (_b) {
73
+ switch (_b.label) {
74
+ case 0:
75
+ appmapFile = options.appmapFile, appmapDir = options.appmapDir, configData = options.configData, reportAllFindings = options.reportAllFindings, appId = options.appId, ide = options.ide, reportFile = options.reportFile;
76
+ files = [];
77
+ if (!appmapDir) return [3 /*break*/, 2];
78
+ glob = (0, util_1.promisify)(glob_1.glob);
79
+ return [4 /*yield*/, glob("".concat(appmapDir, "/**/*.appmap.json"))];
80
+ case 1:
81
+ files = _b.sent();
82
+ _b.label = 2;
83
+ case 2:
84
+ if (!appmapFile) return [3 /*break*/, 4];
85
+ files = typeof appmapFile === 'string' ? [appmapFile] : appmapFile;
86
+ return [4 /*yield*/, Promise.all(files.map(function (file) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
87
+ return [2 /*return*/, (0, validateFile_1.default)('file', file)];
88
+ }); }); }))];
89
+ case 3:
90
+ _b.sent();
91
+ _b.label = 4;
92
+ case 4: return [4 /*yield*/, (0, scanner_1.default)(reportAllFindings, configData, files).catch(function (error) {
93
+ throw new errors_1.ValidationError(error.message + '\nUse --all to perform an offline scan.');
94
+ })];
95
+ case 5:
96
+ scanner = _b.sent();
97
+ startTime = Date.now();
98
+ return [4 /*yield*/, Promise.all([
99
+ scanner.scan(),
100
+ scanner.fetchFindingStatus(appId, appmapDir),
101
+ ])];
102
+ case 6:
103
+ _a = __read.apply(void 0, [_b.sent(), 2]), rawScanResults = _a[0], findingStatuses = _a[1];
104
+ // Always report the raw data
105
+ return [4 /*yield*/, (0, promises_1.writeFile)(reportFile, (0, formatReport_1.formatReport)(rawScanResults))];
106
+ case 7:
107
+ // Always report the raw data
108
+ _b.sent();
109
+ if (reportAllFindings) {
110
+ scanResults = rawScanResults;
111
+ }
112
+ else {
113
+ scanResults = rawScanResults.withFindings((0, findings_1.newFindings)(rawScanResults.findings, findingStatuses));
114
+ }
115
+ (0, findingsReport_1.default)(scanResults.findings, scanResults.appMapMetadata, ide);
116
+ console.log();
117
+ (0, summaryReport_1.default)(scanResults, true);
118
+ console.log('\n');
119
+ elapsed = Date.now() - startTime;
120
+ numChecks = scanResults.checks.length * scanResults.summary.numAppMaps;
121
+ console.log("Performed ".concat(numChecks, " checks in ").concat(elapsed, "ms (").concat(Math.floor(numChecks / (elapsed / 1000.0)), " checks/sec)"));
122
+ return [2 /*return*/];
123
+ }
124
+ });
125
+ });
126
+ }
127
+ exports.default = singleScan;
128
+ //# sourceMappingURL=singleScan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleScan.js","sourceRoot":"","sources":["../../../src/cli/scan/singleScan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __generator = (this && this.__generator) || function (thisArg, body) {
35
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
+ function verb(n) { return function (v) { return step([n, v]); }; }
38
+ function step(op) {
39
+ if (f) throw new TypeError("Generator is already executing.");
40
+ while (_) try {
41
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
42
+ if (y = 0, t) op = [op[0] & 2, t.value];
43
+ switch (op[0]) {
44
+ case 0: case 1: t = op; break;
45
+ case 4: _.label++; return { value: op[1], done: false };
46
+ case 5: _.label++; y = op[1]; op = [0]; continue;
47
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
+ default:
49
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
+ if (t[2]) _.ops.pop();
54
+ _.trys.pop(); continue;
55
+ }
56
+ op = body.call(thisArg, _);
57
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
+ }
60
+ };
61
+ var __importDefault = (this && this.__importDefault) || function (mod) {
62
+ return (mod && mod.__esModule) ? mod : { "default": mod };
63
+ };
64
+ Object.defineProperty(exports, "__esModule", { value: true });
65
+ exports.Watcher = void 0;
66
+ var promises_1 = require("fs/promises");
67
+ var chokidar = __importStar(require("chokidar"));
68
+ var formatReport_1 = require("./formatReport");
69
+ var scanner_1 = __importDefault(require("./scanner"));
70
+ var fs_1 = require("fs");
71
+ var util_1 = require("util");
72
+ var Watcher = /** @class */ (function () {
73
+ function Watcher(options) {
74
+ this.options = options;
75
+ }
76
+ Watcher.prototype.watch = function () {
77
+ return __awaiter(this, void 0, void 0, function () {
78
+ return __generator(this, function (_a) {
79
+ this.watcher = chokidar.watch("".concat(this.options.appmapDir, "/**/mtime"), {
80
+ ignoreInitial: true,
81
+ });
82
+ this.watcher.on('add', this.scan.bind(this)).on('change', this.scan.bind(this));
83
+ return [2 /*return*/];
84
+ });
85
+ });
86
+ };
87
+ Watcher.prototype.abort = function () {
88
+ if (!this.watcher)
89
+ return;
90
+ this.watcher.close();
91
+ this.watcher = undefined;
92
+ };
93
+ Watcher.prototype.scan = function (fileName) {
94
+ return __awaiter(this, void 0, void 0, function () {
95
+ var pathTokens, appmapDir, appmapFile, reportFile, scanner, rawScanResults;
96
+ return __generator(this, function (_a) {
97
+ switch (_a.label) {
98
+ case 0:
99
+ pathTokens = fileName.split('/');
100
+ appmapDir = pathTokens.slice(0, pathTokens.length - 1).join('/');
101
+ appmapFile = [appmapDir, 'appmap.json'].join('.');
102
+ reportFile = [appmapDir, 'appmap-findings.json'].join('/');
103
+ return [4 /*yield*/, (0, util_1.promisify)(fs_1.exists)(appmapFile)];
104
+ case 1:
105
+ if (!(_a.sent()))
106
+ return [2 /*return*/];
107
+ return [4 /*yield*/, (0, scanner_1.default)(true, this.options.configData, [appmapFile])];
108
+ case 2:
109
+ scanner = _a.sent();
110
+ return [4 /*yield*/, scanner.scan()];
111
+ case 3:
112
+ rawScanResults = _a.sent();
113
+ // Always report the raw data
114
+ return [4 /*yield*/, (0, promises_1.writeFile)(reportFile, (0, formatReport_1.formatReport)(rawScanResults))];
115
+ case 4:
116
+ // Always report the raw data
117
+ _a.sent();
118
+ return [2 /*return*/];
119
+ }
120
+ });
121
+ });
122
+ };
123
+ return Watcher;
124
+ }());
125
+ exports.Watcher = Watcher;
126
+ function watchScan(options) {
127
+ return __awaiter(this, void 0, void 0, function () {
128
+ return __generator(this, function (_a) {
129
+ return [2 /*return*/, new Watcher(options).watch()];
130
+ });
131
+ });
132
+ }
133
+ exports.default = watchScan;
134
+ //# sourceMappingURL=watchScan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchScan.js","sourceRoot":"","sources":["../../../src/cli/scan/watchScan.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCAAwC;AACxC,iDAAqC;AAKrC,+CAA8C;AAC9C,sDAAoD;AACpD,yBAA4B;AAC5B,6BAAiC;AAOjC;IAGE,iBAAoB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;IAAG,CAAC;IAE3C,uBAAK,GAAX;;;gBACE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAG,IAAI,CAAC,OAAO,CAAC,SAAS,cAAW,EAAE;oBAClE,aAAa,EAAE,IAAI;iBACpB,CAAC,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;;;KACjF;IAED,uBAAK,GAAL;QACE,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;IAEK,sBAAI,GAAV,UAAW,QAAgB;;;;;;wBACnB,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACjC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACjE,UAAU,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAClD,UAAU,GAAG,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAE3D,qBAAM,IAAA,gBAAS,EAAC,WAAM,CAAC,CAAC,UAAU,CAAC,EAAA;;wBAAzC,IAAI,CAAC,CAAC,SAAmC,CAAC;4BAAE,sBAAO;wBAEnC,qBAAM,IAAA,iBAAY,EAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,EAAA;;wBAAzE,OAAO,GAAG,SAA+D;wBAExD,qBAAM,OAAO,CAAC,IAAI,EAAE,EAAA;;wBAArC,cAAc,GAAG,SAAoB;wBAE3C,6BAA6B;wBAC7B,qBAAM,IAAA,oBAAS,EAAC,UAAU,EAAE,IAAA,2BAAY,EAAC,cAAc,CAAC,CAAC,EAAA;;wBADzD,6BAA6B;wBAC7B,SAAyD,CAAC;;;;;KAC3D;IACH,cAAC;AAAD,CAAC,AAlCD,IAkCC;AAlCY,0BAAO;AAoCpB,SAA8B,SAAS,CAAC,OAAyB;;;YAC/D,sBAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAC;;;CACrC;AAFD,4BAEC"}
@@ -49,15 +49,19 @@ function default_1(kind, path) {
49
49
  return __generator(this, function (_b) {
50
50
  switch (_b.label) {
51
51
  case 0:
52
- _b.trys.push([0, 2, , 3]);
53
- return [4 /*yield*/, (0, promises_1.access)(path, fs_1.constants.R_OK)];
52
+ if (path === '.')
53
+ return [2 /*return*/];
54
+ _b.label = 1;
54
55
  case 1:
55
- _b.sent();
56
- return [3 /*break*/, 3];
56
+ _b.trys.push([1, 3, , 4]);
57
+ return [4 /*yield*/, (0, promises_1.access)(path, fs_1.constants.R_OK)];
57
58
  case 2:
59
+ _b.sent();
60
+ return [3 /*break*/, 4];
61
+ case 3:
58
62
  _a = _b.sent();
59
63
  throw new errors_1.ValidationError("AppMap ".concat(kind, " ").concat(chalk_1.default.red(path), " does not exist, or is not readable."));
60
- case 3: return [2 /*return*/];
64
+ case 4: return [2 /*return*/];
61
65
  }
62
66
  });
63
67
  });
@@ -1 +1 @@
1
- {"version":3,"file":"validateFile.js","sourceRoot":"","sources":["../../src/cli/validateFile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA0B;AAC1B,yBAAwD;AACxD,wCAAqC;AACrC,oCAA4C;AAE5C,mBAA+B,IAAY,EAAE,IAAY;;;;;;;oBAErD,qBAAM,IAAA,iBAAM,EAAC,IAAgB,EAAE,cAAW,CAAC,IAAI,CAAC,EAAA;;oBAAhD,SAAgD,CAAC;;;;oBAEjD,MAAM,IAAI,wBAAe,CACvB,iBAAU,IAAI,cAAI,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAsC,CACxE,CAAC;;;;;CAEL;AARD,4BAQC"}
1
+ {"version":3,"file":"validateFile.js","sourceRoot":"","sources":["../../src/cli/validateFile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA0B;AAC1B,yBAAwD;AACxD,wCAAqC;AACrC,oCAA4C;AAE5C,mBAA+B,IAAY,EAAE,IAAY;;;;;;oBACvD,IAAI,IAAI,KAAK,GAAG;wBAAE,sBAAO;;;;oBAGvB,qBAAM,IAAA,iBAAM,EAAC,IAAgB,EAAE,cAAW,CAAC,IAAI,CAAC,EAAA;;oBAAhD,SAAgD,CAAC;;;;oBAEjD,MAAM,IAAI,wBAAe,CACvB,iBAAU,IAAI,cAAI,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAsC,CACxE,CAAC;;;;;CAEL;AAVD,4BAUC"}
@@ -37,7 +37,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  var src_1 = require("@appland/client/dist/src");
40
- function default_1(appId) {
40
+ function listFindingStatus(appId) {
41
41
  return __awaiter(this, void 0, void 0, function () {
42
42
  return __generator(this, function (_a) {
43
43
  switch (_a.label) {
@@ -47,5 +47,5 @@ function default_1(appId) {
47
47
  });
48
48
  });
49
49
  }
50
- exports.default = default_1;
50
+ exports.default = listFindingStatus;
51
51
  //# sourceMappingURL=listFindingStatus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listFindingStatus.js","sourceRoot":"","sources":["../../../../src/integration/appland/app/listFindingStatus.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAsE;AAEtE,mBAA+B,KAAa;;;;wBACnC,qBAAM,IAAI,SAAG,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,EAAA;wBAA/C,sBAAO,SAAwC,EAAC;;;;CACjD;AAFD,4BAEC"}
1
+ {"version":3,"file":"listFindingStatus.js","sourceRoot":"","sources":["../../../../src/integration/appland/app/listFindingStatus.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAsE;AAEtE,SAA8B,iBAAiB,CAAC,KAAa;;;;wBACpD,qBAAM,IAAI,SAAG,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,EAAA;wBAA/C,sBAAO,SAAwC,EAAC;;;;CACjD;AAFD,oCAEC"}
@@ -68,8 +68,8 @@ var recordSecrets_1 = __importDefault(require("../analyzer/recordSecrets"));
68
68
  var url_1 = require("url");
69
69
  var parseRuleDescription_1 = __importDefault(require("./lib/parseRuleDescription"));
70
70
  var Match = /** @class */ (function () {
71
- function Match(regexp, value) {
72
- this.regexp = regexp;
71
+ function Match(pattern, value) {
72
+ this.pattern = pattern;
73
73
  this.value = value;
74
74
  }
75
75
  return Match;
@@ -123,7 +123,7 @@ var findInLog = function (event) {
123
123
  if (matches.length > 0) {
124
124
  return matches.map(function (match) { return ({
125
125
  event: event,
126
- message: "".concat(match.value, " contains secret ").concat(match.regexp),
126
+ message: "Log event contains secret data: ".concat(match.value),
127
127
  }); });
128
128
  }
129
129
  };
@@ -1 +1 @@
1
- {"version":3,"file":"secretInLog.js","sourceRoot":"","sources":["../../src/rules/secretInLog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secretInLog.js","sourceRoot":"","sources":["../../src/rules/secretInLog.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appland/scanner",
3
- "version": "1.55.0",
3
+ "version": "1.56.0",
4
4
  "description": "",
5
5
  "bin": "built/cli.js",
6
6
  "files": [
@@ -26,6 +26,7 @@
26
26
  "@semantic-release/changelog": "^6.0.1",
27
27
  "@semantic-release/git": "^10.0.1",
28
28
  "@types/async": "^3.2.12",
29
+ "@types/fs-extra": "^9.0.13",
29
30
  "@types/glob": "^7.2.0",
30
31
  "@types/jest": "^27.4.1",
31
32
  "@types/js-yaml": "^4.0.3",
@@ -40,6 +41,7 @@
40
41
  "eslint-config-prettier": "^8.3.0",
41
42
  "eslint-plugin-node": "^11.1.0",
42
43
  "eslint-plugin-prettier": "^3.4.1",
44
+ "fs-extra": "^10.1.0",
43
45
  "jest": "^27.4.7",
44
46
  "nock": "^13.2.2",
45
47
  "openapi-types": "^9.3.0",
@@ -61,6 +63,7 @@
61
63
  "ansi-escapes": "^5.0.0",
62
64
  "async": "^3.2.3",
63
65
  "chalk": "^4.1.2",
66
+ "chokidar": "^3.5.3",
64
67
  "cli-progress": "^3.11.0",
65
68
  "form-data": "^4.0.0",
66
69
  "glob": "^7.2.0",