@appland/scanner 1.56.0 → 1.57.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.
Files changed (247) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/built/algorithms/dataStructures/graph/Graph.js +53 -62
  3. package/built/algorithms/dataStructures/graph/GraphEdge.js +13 -16
  4. package/built/algorithms/dataStructures/graph/GraphVertex.js +37 -42
  5. package/built/algorithms/dataStructures/linked-list/LinkedList.js +33 -38
  6. package/built/algorithms/dataStructures/linked-list/LinkedListNode.js +6 -10
  7. package/built/algorithms/graph/depth-first-search/index.js +7 -8
  8. package/built/algorithms/graph/detect-cycle/index.js +15 -16
  9. package/built/algorithms/utils/Comparator.js +19 -21
  10. package/built/analyzer/recordSecrets.js +7 -30
  11. package/built/analyzer/secretsRegexes.js +8 -9
  12. package/built/appMapIndex.js +18 -20
  13. package/built/check.js +16 -18
  14. package/built/checkInstance.js +26 -48
  15. package/built/cli/ci/command.js +61 -156
  16. package/built/cli/ci/options.js +0 -1
  17. package/built/cli/codeVersionArgs.js +0 -1
  18. package/built/cli/exitCode.js +0 -1
  19. package/built/cli/fail.js +2 -3
  20. package/built/cli/merge/command.js +21 -63
  21. package/built/cli/merge/options.js +0 -1
  22. package/built/cli/reportUploadURL.js +2 -3
  23. package/built/cli/resolveAppId.js +34 -85
  24. package/built/cli/scan/command.js +52 -94
  25. package/built/cli/scan/formatReport.js +16 -89
  26. package/built/cli/scan/options.js +0 -1
  27. package/built/cli/scan/scanner.js +38 -117
  28. package/built/cli/scan/singleScan.js +61 -109
  29. package/built/cli/scan/watchScan.js +32 -82
  30. package/built/cli/scan.js +39 -132
  31. package/built/cli/scanArgs.js +0 -1
  32. package/built/cli/scanOptions.js +0 -1
  33. package/built/cli/updateCommitStatus.js +10 -47
  34. package/built/cli/upload/command.js +20 -64
  35. package/built/cli/upload/options.js +0 -1
  36. package/built/cli/upload/pruneAppMap.js +16 -0
  37. package/built/cli/upload.js +91 -172
  38. package/built/cli/validateFile.js +13 -52
  39. package/built/cli.js +34 -21
  40. package/built/configuration/configurationProvider.js +148 -233
  41. package/built/configuration/schema/options.json +76 -76
  42. package/built/configuration/types/checkConfig.js +0 -1
  43. package/built/configuration/types/configuration.js +0 -1
  44. package/built/configuration/types/matchEventConfig.js +0 -1
  45. package/built/configuration/types/matchPatternConfig.js +0 -1
  46. package/built/database/index.js +33 -127
  47. package/built/database/visit.js +16 -66
  48. package/built/errors.js +4 -30
  49. package/built/eventUtil.js +10 -35
  50. package/built/findings.js +3 -4
  51. package/built/integration/appland/app/exists.js +33 -76
  52. package/built/integration/appland/app/listFindingStatus.js +3 -36
  53. package/built/integration/appland/appMap/create.js +38 -89
  54. package/built/integration/appland/location.js +0 -1
  55. package/built/integration/appland/mapset/create.js +34 -85
  56. package/built/integration/appland/retry.js +10 -11
  57. package/built/integration/appland/retryOptions.js +0 -1
  58. package/built/integration/appland/scannerJob/create.js +34 -84
  59. package/built/integration/appland/scannerJob/merge.js +28 -74
  60. package/built/integration/appland/scannerJob.js +0 -1
  61. package/built/integration/github/commitStatus.js +3 -4
  62. package/built/integration/vars.js +1 -2
  63. package/built/openapi/index.js +39 -83
  64. package/built/report/appMapMetadata.js +0 -1
  65. package/built/report/findingSummary.js +0 -1
  66. package/built/report/findingsReport.js +14 -16
  67. package/built/report/scanResults.js +18 -45
  68. package/built/report/scanSummary.js +0 -1
  69. package/built/report/summaryReport.js +12 -13
  70. package/built/ruleChecker.js +146 -297
  71. package/built/rules/authzBeforeAuthn.js +25 -59
  72. package/built/rules/circularDependency.js +69 -101
  73. package/built/rules/deserializationOfUntrustedData.js +29 -63
  74. package/built/rules/execOfUntrustedCommand.js +28 -62
  75. package/built/rules/http-500/metadata.js +0 -1
  76. package/built/rules/http-500/rule.js +2 -3
  77. package/built/rules/illegalPackageDependency.js +16 -18
  78. package/built/rules/incompatibleHttpClientRequest.js +30 -69
  79. package/built/rules/insecureCompare.js +12 -13
  80. package/built/rules/jobNotCancelled.js +13 -45
  81. package/built/rules/lib/hasParameterOrReceiver.js +4 -7
  82. package/built/rules/lib/matchEvent.js +12 -13
  83. package/built/rules/lib/matchPattern.js +6 -7
  84. package/built/rules/lib/metadata.js +0 -1
  85. package/built/rules/lib/parseRuleDescription.js +5 -6
  86. package/built/rules/lib/precedingEvents.js +7 -75
  87. package/built/rules/lib/rpcWithoutProtection.js +5 -28
  88. package/built/rules/lib/sanitizesData.js +0 -1
  89. package/built/rules/lib/util.js +33 -73
  90. package/built/rules/logoutWithoutSessionReset.js +24 -58
  91. package/built/rules/missingAuthentication.js +28 -28
  92. package/built/rules/missingContentType.js +8 -9
  93. package/built/rules/nPlusOneQuery.js +35 -87
  94. package/built/rules/queryFromInvalidPackage.js +17 -19
  95. package/built/rules/queryFromView.js +13 -16
  96. package/built/rules/rpcWithoutCircuitBreaker.js +14 -84
  97. package/built/rules/saveWithoutValidation.js +8 -9
  98. package/built/rules/secretInLog.js +29 -92
  99. package/built/rules/slowFunctionCall.js +16 -20
  100. package/built/rules/slowHttpServerRequest.js +9 -11
  101. package/built/rules/slowQuery.js +9 -12
  102. package/built/rules/tooManyJoins.js +26 -51
  103. package/built/rules/tooManyUpdates.js +25 -105
  104. package/built/rules/unbatchedMaterializedQuery.js +26 -30
  105. package/built/rules/updateInGetRequest.js +30 -45
  106. package/built/scope/commandScope.js +24 -144
  107. package/built/scope/httpClientRequestScope.js +11 -98
  108. package/built/scope/httpServerRequestScope.js +11 -98
  109. package/built/scope/rootScope.js +11 -98
  110. package/built/scope/scopeImpl.js +10 -82
  111. package/built/scope/scopeIterator.js +6 -10
  112. package/built/scope/sqlTransactionScope.js +24 -122
  113. package/built/sqlWarning.js +9 -35
  114. package/built/telemetry.js +215 -0
  115. package/built/wellKnownLabels.js +0 -1
  116. package/package.json +7 -3
  117. package/built/algorithms/dataStructures/graph/Graph.js.map +0 -1
  118. package/built/algorithms/dataStructures/graph/GraphEdge.js.map +0 -1
  119. package/built/algorithms/dataStructures/graph/GraphVertex.js.map +0 -1
  120. package/built/algorithms/dataStructures/linked-list/LinkedList.js.map +0 -1
  121. package/built/algorithms/dataStructures/linked-list/LinkedListNode.js.map +0 -1
  122. package/built/algorithms/graph/depth-first-search/index.js.map +0 -1
  123. package/built/algorithms/graph/detect-cycle/index.js.map +0 -1
  124. package/built/algorithms/utils/Comparator.js.map +0 -1
  125. package/built/analyzer/recordSecrets.js.map +0 -1
  126. package/built/analyzer/secretsRegexes.js.map +0 -1
  127. package/built/appMapIndex.js.map +0 -1
  128. package/built/check.js.map +0 -1
  129. package/built/checkInstance.js.map +0 -1
  130. package/built/cli/ci/command.js.map +0 -1
  131. package/built/cli/ci/options.js.map +0 -1
  132. package/built/cli/codeVersionArgs.js.map +0 -1
  133. package/built/cli/exitCode.js.map +0 -1
  134. package/built/cli/fail.js.map +0 -1
  135. package/built/cli/merge/command.js.map +0 -1
  136. package/built/cli/merge/options.js.map +0 -1
  137. package/built/cli/reportUploadURL.js.map +0 -1
  138. package/built/cli/resolveAppId.js.map +0 -1
  139. package/built/cli/scan/command.js.map +0 -1
  140. package/built/cli/scan/formatReport.js.map +0 -1
  141. package/built/cli/scan/options.js.map +0 -1
  142. package/built/cli/scan/scanner.js.map +0 -1
  143. package/built/cli/scan/singleScan.js.map +0 -1
  144. package/built/cli/scan/watchScan.js.map +0 -1
  145. package/built/cli/scan.js.map +0 -1
  146. package/built/cli/scanArgs.js.map +0 -1
  147. package/built/cli/scanOptions.js.map +0 -1
  148. package/built/cli/updateCommitStatus.js.map +0 -1
  149. package/built/cli/upload/command.js.map +0 -1
  150. package/built/cli/upload/options.js.map +0 -1
  151. package/built/cli/upload.js.map +0 -1
  152. package/built/cli/validateFile.js.map +0 -1
  153. package/built/cli.js.map +0 -1
  154. package/built/configuration/configurationProvider.js.map +0 -1
  155. package/built/configuration/types/checkConfig.js.map +0 -1
  156. package/built/configuration/types/configuration.js.map +0 -1
  157. package/built/configuration/types/matchEventConfig.js.map +0 -1
  158. package/built/configuration/types/matchPatternConfig.js.map +0 -1
  159. package/built/database/index.js.map +0 -1
  160. package/built/database/visit.js.map +0 -1
  161. package/built/errors.js.map +0 -1
  162. package/built/eventUtil.js.map +0 -1
  163. package/built/findings.js.map +0 -1
  164. package/built/integration/appland/app/exists.js.map +0 -1
  165. package/built/integration/appland/app/listFindingStatus.js.map +0 -1
  166. package/built/integration/appland/appMap/create.js.map +0 -1
  167. package/built/integration/appland/location.js.map +0 -1
  168. package/built/integration/appland/mapset/create.js.map +0 -1
  169. package/built/integration/appland/retry.js.map +0 -1
  170. package/built/integration/appland/retryOptions.js.map +0 -1
  171. package/built/integration/appland/scannerJob/create.js.map +0 -1
  172. package/built/integration/appland/scannerJob/merge.js.map +0 -1
  173. package/built/integration/appland/scannerJob.js.map +0 -1
  174. package/built/integration/github/commitStatus.js.map +0 -1
  175. package/built/integration/vars.js.map +0 -1
  176. package/built/openapi/index.js.map +0 -1
  177. package/built/openapi/method.js +0 -120
  178. package/built/openapi/method.js.map +0 -1
  179. package/built/openapi/model.js +0 -49
  180. package/built/openapi/model.js.map +0 -1
  181. package/built/openapi/path.js +0 -36
  182. package/built/openapi/path.js.map +0 -1
  183. package/built/openapi/provider.js +0 -133
  184. package/built/openapi/provider.js.map +0 -1
  185. package/built/openapi/response.js +0 -59
  186. package/built/openapi/response.js.map +0 -1
  187. package/built/openapi/rpcRequest.js +0 -130
  188. package/built/openapi/rpcRequest.js.map +0 -1
  189. package/built/openapi/schema.js +0 -42
  190. package/built/openapi/schema.js.map +0 -1
  191. package/built/openapi/securitySchemes.js +0 -32
  192. package/built/openapi/securitySchemes.js.map +0 -1
  193. package/built/openapi/statusCodes.js +0 -68
  194. package/built/openapi/statusCodes.js.map +0 -1
  195. package/built/openapi/util.js +0 -91
  196. package/built/openapi/util.js.map +0 -1
  197. package/built/report/appMapMetadata.js.map +0 -1
  198. package/built/report/findingSummary.js.map +0 -1
  199. package/built/report/findingsReport.js.map +0 -1
  200. package/built/report/scanResults.js.map +0 -1
  201. package/built/report/scanSummary.js.map +0 -1
  202. package/built/report/summaryReport.js.map +0 -1
  203. package/built/ruleChecker.js.map +0 -1
  204. package/built/rules/authzBeforeAuthn.js.map +0 -1
  205. package/built/rules/circularDependency.js.map +0 -1
  206. package/built/rules/deserializationOfUntrustedData.js.map +0 -1
  207. package/built/rules/execOfUntrustedCommand.js.map +0 -1
  208. package/built/rules/http-500/metadata.js.map +0 -1
  209. package/built/rules/http-500/rule.js.map +0 -1
  210. package/built/rules/illegalPackageDependency.js.map +0 -1
  211. package/built/rules/incompatibleHttpClientRequest.js.map +0 -1
  212. package/built/rules/insecureCompare.js.map +0 -1
  213. package/built/rules/jobNotCancelled.js.map +0 -1
  214. package/built/rules/lib/hasParameterOrReceiver.js.map +0 -1
  215. package/built/rules/lib/matchEvent.js.map +0 -1
  216. package/built/rules/lib/matchPattern.js.map +0 -1
  217. package/built/rules/lib/metadata.js.map +0 -1
  218. package/built/rules/lib/parseRuleDescription.js.map +0 -1
  219. package/built/rules/lib/precedingEvents.js.map +0 -1
  220. package/built/rules/lib/rpcWithoutProtection.js.map +0 -1
  221. package/built/rules/lib/sanitizesData.js.map +0 -1
  222. package/built/rules/lib/util.js.map +0 -1
  223. package/built/rules/logoutWithoutSessionReset.js.map +0 -1
  224. package/built/rules/missingAuthentication.js.map +0 -1
  225. package/built/rules/missingContentType.js.map +0 -1
  226. package/built/rules/nPlusOneQuery.js.map +0 -1
  227. package/built/rules/queryFromInvalidPackage.js.map +0 -1
  228. package/built/rules/queryFromView.js.map +0 -1
  229. package/built/rules/rpcWithoutCircuitBreaker.js.map +0 -1
  230. package/built/rules/saveWithoutValidation.js.map +0 -1
  231. package/built/rules/secretInLog.js.map +0 -1
  232. package/built/rules/slowFunctionCall.js.map +0 -1
  233. package/built/rules/slowHttpServerRequest.js.map +0 -1
  234. package/built/rules/slowQuery.js.map +0 -1
  235. package/built/rules/tooManyJoins.js.map +0 -1
  236. package/built/rules/tooManyUpdates.js.map +0 -1
  237. package/built/rules/unbatchedMaterializedQuery.js.map +0 -1
  238. package/built/rules/updateInGetRequest.js.map +0 -1
  239. package/built/scope/commandScope.js.map +0 -1
  240. package/built/scope/httpClientRequestScope.js.map +0 -1
  241. package/built/scope/httpServerRequestScope.js.map +0 -1
  242. package/built/scope/rootScope.js.map +0 -1
  243. package/built/scope/scopeImpl.js.map +0 -1
  244. package/built/scope/scopeIterator.js.map +0 -1
  245. package/built/scope/sqlTransactionScope.js.map +0 -1
  246. package/built/sqlWarning.js.map +0 -1
  247. package/built/wellKnownLabels.js.map +0 -1
package/built/cli/scan.js CHANGED
@@ -8,153 +8,60 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
55
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
56
- if (ar || !(i in from)) {
57
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
58
- ar[i] = from[i];
59
- }
60
- }
61
- return to.concat(ar || Array.prototype.slice.call(from));
62
- };
63
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
64
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
65
13
  };
66
14
  Object.defineProperty(exports, "__esModule", { value: true });
67
15
  /* eslint-disable @typescript-eslint/no-empty-function */
68
- var cli_progress_1 = __importDefault(require("cli-progress"));
69
- var promises_1 = require("fs/promises");
70
- var models_1 = require("@appland/models");
71
- var ruleChecker_1 = __importDefault(require("../ruleChecker"));
72
- var appMapIndex_1 = __importDefault(require("../appMapIndex"));
16
+ const cli_progress_1 = __importDefault(require("cli-progress"));
17
+ const promises_1 = require("fs/promises");
18
+ const models_1 = require("@appland/models");
19
+ const ruleChecker_1 = __importDefault(require("../ruleChecker"));
20
+ const appMapIndex_1 = __importDefault(require("../appMapIndex"));
73
21
  function batch(items, size, process) {
74
- return __awaiter(this, void 0, void 0, function () {
75
- var left;
76
- return __generator(this, function (_a) {
77
- switch (_a.label) {
78
- case 0:
79
- left = __spreadArray([], __read(items), false);
80
- _a.label = 1;
81
- case 1:
82
- if (!left.length) return [3 /*break*/, 3];
83
- return [4 /*yield*/, Promise.all(left.splice(0, size).map(process))];
84
- case 2:
85
- _a.sent();
86
- return [3 /*break*/, 1];
87
- case 3: return [2 /*return*/];
88
- }
89
- });
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ const left = [...items];
24
+ while (left.length)
25
+ yield Promise.all(left.splice(0, size).map(process));
90
26
  });
91
27
  }
92
28
  function scan(files, checks) {
93
- return __awaiter(this, void 0, void 0, function () {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ // TODO: Improve this by respecting .gitignore, or similar.
31
+ // For now, this addresses the main problem of encountering appmap-js and its appmap.json files
32
+ // in a bundled node_modules.
33
+ files = files.filter((file) => !file.split('/').includes('node_modules'));
34
+ const checker = new ruleChecker_1.default();
35
+ const appMapMetadata = {};
36
+ const findings = [];
94
37
  function newProgress() {
95
38
  if (process.stdout.isTTY) {
96
- return new cli_progress_1.default.SingleBar({ format: "Scanning [{bar}] {percentage}% | {value}/{total}" }, cli_progress_1.default.Presets.shades_classic);
39
+ return new cli_progress_1.default.SingleBar({ format: `Scanning [{bar}] {percentage}% | {value}/{total}` }, cli_progress_1.default.Presets.shades_classic);
97
40
  }
98
41
  return {
99
- increment: function () { },
100
- start: function () { },
101
- stop: function () { },
42
+ increment: () => { },
43
+ start: () => { },
44
+ stop: () => { },
102
45
  };
103
46
  }
104
- var checker, appMapMetadata, findings, progress;
105
- var _this = this;
106
- return __generator(this, function (_a) {
107
- switch (_a.label) {
108
- case 0:
109
- // TODO: Improve this by respecting .gitignore, or similar.
110
- // For now, this addresses the main problem of encountering appmap-js and its appmap.json files
111
- // in a bundled node_modules.
112
- files = files.filter(function (file) { return !file.split('/').includes('node_modules'); });
113
- checker = new ruleChecker_1.default();
114
- appMapMetadata = {};
115
- findings = [];
116
- progress = newProgress();
117
- progress.start(files.length * checks.length, 0);
118
- return [4 /*yield*/, batch(files, 2, function (file) { return __awaiter(_this, void 0, void 0, function () {
119
- var appMapData, appMap, appMapIndex;
120
- var _this = this;
121
- return __generator(this, function (_a) {
122
- switch (_a.label) {
123
- case 0: return [4 /*yield*/, (0, promises_1.readFile)(file, 'utf8')];
124
- case 1:
125
- appMapData = _a.sent();
126
- appMap = (0, models_1.buildAppMap)(appMapData).normalize().build();
127
- appMapIndex = new appMapIndex_1.default(appMap);
128
- appMapMetadata[file] = appMap.metadata;
129
- return [4 /*yield*/, Promise.all(checks.map(function (check) { return __awaiter(_this, void 0, void 0, function () {
130
- var matchCount, newMatches;
131
- return __generator(this, function (_a) {
132
- switch (_a.label) {
133
- case 0:
134
- matchCount = findings.length;
135
- return [4 /*yield*/, checker.check(file, appMapIndex, check, findings)];
136
- case 1:
137
- _a.sent();
138
- progress.increment();
139
- newMatches = findings.slice(matchCount, findings.length);
140
- newMatches.forEach(function (match) { return (match.appMapFile = file); });
141
- return [2 /*return*/];
142
- }
143
- });
144
- }); }))];
145
- case 2:
146
- _a.sent();
147
- return [2 /*return*/, null];
148
- }
149
- });
150
- }); })];
151
- case 1:
152
- _a.sent();
153
- progress.stop();
154
- return [2 /*return*/, { appMapMetadata: appMapMetadata, findings: findings }];
155
- }
156
- });
47
+ const progress = newProgress();
48
+ progress.start(files.length * checks.length, 0);
49
+ yield batch(files, 2, (file) => __awaiter(this, void 0, void 0, function* () {
50
+ const appMapData = yield (0, promises_1.readFile)(file, 'utf8');
51
+ const appMap = (0, models_1.buildAppMap)(appMapData).normalize().build();
52
+ const appMapIndex = new appMapIndex_1.default(appMap);
53
+ appMapMetadata[file] = appMap.metadata;
54
+ yield Promise.all(checks.map((check) => __awaiter(this, void 0, void 0, function* () {
55
+ const matchCount = findings.length;
56
+ yield checker.check(file, appMapIndex, check, findings);
57
+ progress.increment();
58
+ const newMatches = findings.slice(matchCount, findings.length);
59
+ newMatches.forEach((match) => (match.appMapFile = file));
60
+ })));
61
+ return null;
62
+ }));
63
+ progress.stop();
64
+ return { appMapMetadata, findings };
157
65
  });
158
66
  }
159
67
  exports.default = scan;
160
- //# sourceMappingURL=scan.js.map
@@ -23,4 +23,3 @@ function default_1(args) {
23
23
  });
24
24
  }
25
25
  exports.default = default_1;
26
- //# sourceMappingURL=scanArgs.js.map
@@ -1,3 +1,2 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=scanOptions.js.map
@@ -8,58 +8,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
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
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
39
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
13
  };
41
14
  Object.defineProperty(exports, "__esModule", { value: true });
42
- var commitStatus_1 = __importDefault(require("../integration/github/commitStatus"));
15
+ const commitStatus_1 = __importDefault(require("../integration/github/commitStatus"));
43
16
  function updateCommitStatus(numFindings, numChecks) {
44
- return __awaiter(this, void 0, void 0, function () {
45
- return __generator(this, function (_a) {
46
- switch (_a.label) {
47
- case 0:
48
- if (!(numFindings > 0)) return [3 /*break*/, 2];
49
- return [4 /*yield*/, (0, commitStatus_1.default)('failure', "".concat(numChecks, " checks, ").concat(numFindings, " findings. See CI job log for details."))];
50
- case 1:
51
- _a.sent();
52
- console.log("Commit status updated to: failure (".concat(numFindings, " findings)"));
53
- return [3 /*break*/, 4];
54
- case 2: return [4 /*yield*/, (0, commitStatus_1.default)('success', "".concat(numChecks, " checks passed"))];
55
- case 3:
56
- _a.sent();
57
- console.log("Commit status updated to: success.");
58
- _a.label = 4;
59
- case 4: return [2 /*return*/];
60
- }
61
- });
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ if (numFindings > 0) {
19
+ yield (0, commitStatus_1.default)('failure', `${numChecks} checks, ${numFindings} findings. See CI job log for details.`);
20
+ console.log(`Commit status updated to: failure (${numFindings} findings)`);
21
+ }
22
+ else {
23
+ yield (0, commitStatus_1.default)('success', `${numChecks} checks passed`);
24
+ console.log(`Commit status updated to: success.`);
25
+ }
62
26
  });
63
27
  }
64
28
  exports.default = updateCommitStatus;
65
- //# sourceMappingURL=updateCommitStatus.js.map
@@ -8,48 +8,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
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
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
39
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
13
  };
41
14
  Object.defineProperty(exports, "__esModule", { value: true });
42
- var promises_1 = require("fs/promises");
43
- var util_1 = require("../../rules/lib/util");
44
- var validateFile_1 = __importDefault(require("../validateFile"));
45
- var resolveAppId_1 = __importDefault(require("../resolveAppId"));
46
- var reportUploadURL_1 = __importDefault(require("../reportUploadURL"));
47
- var upload_1 = __importDefault(require("../upload"));
48
- var codeVersionArgs_1 = __importDefault(require("../codeVersionArgs"));
15
+ const promises_1 = require("fs/promises");
16
+ const util_1 = require("../../rules/lib/util");
17
+ const validateFile_1 = __importDefault(require("../validateFile"));
18
+ const resolveAppId_1 = __importDefault(require("../resolveAppId"));
19
+ const reportUploadURL_1 = __importDefault(require("../reportUploadURL"));
20
+ const upload_1 = __importDefault(require("../upload"));
21
+ const codeVersionArgs_1 = __importDefault(require("../codeVersionArgs"));
49
22
  exports.default = {
50
23
  command: 'upload',
51
24
  describe: 'Upload Findings to the AppMap Server',
52
- builder: function (args) {
25
+ builder(args) {
53
26
  (0, codeVersionArgs_1.default)(args);
54
27
  args.option('appmap-dir', {
55
28
  describe: 'base directory of AppMaps',
@@ -67,36 +40,19 @@ exports.default = {
67
40
  });
68
41
  return args.strict();
69
42
  },
70
- handler: function (options) {
71
- return __awaiter(this, void 0, void 0, function () {
72
- var _a, isVerbose, reportFile, appmapDir, appIdArg, mergeKey, branch, commit, environment, appId, scanResults, _b, _c, uploadResponse;
73
- return __generator(this, function (_d) {
74
- switch (_d.label) {
75
- case 0:
76
- _a = options, isVerbose = _a.verbose, reportFile = _a.reportFile, appmapDir = _a.appmapDir, appIdArg = _a.app, mergeKey = _a.mergeKey, branch = _a.branch, commit = _a.commit, environment = _a.environment;
77
- if (isVerbose) {
78
- (0, util_1.verbose)(true);
79
- }
80
- return [4 /*yield*/, (0, validateFile_1.default)('directory', appmapDir)];
81
- case 1:
82
- _d.sent();
83
- return [4 /*yield*/, (0, resolveAppId_1.default)(appIdArg, appmapDir)];
84
- case 2:
85
- appId = _d.sent();
86
- _c = (_b = JSON).parse;
87
- return [4 /*yield*/, (0, promises_1.readFile)(reportFile)];
88
- case 3:
89
- scanResults = _c.apply(_b, [(_d.sent()).toString()]);
90
- return [4 /*yield*/, (0, upload_1.default)(scanResults, appId, appmapDir, mergeKey, { branch: branch, commit: commit, environment: environment }, {
91
- maxRetries: 3,
92
- })];
93
- case 4:
94
- uploadResponse = _d.sent();
95
- (0, reportUploadURL_1.default)(uploadResponse.summary.numFindings, uploadResponse.url);
96
- return [2 /*return*/];
97
- }
43
+ handler(options) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ const { verbose: isVerbose, reportFile, appmapDir, app: appIdArg, mergeKey, branch, commit, environment, } = options;
46
+ if (isVerbose) {
47
+ (0, util_1.verbose)(true);
48
+ }
49
+ yield (0, validateFile_1.default)('directory', appmapDir);
50
+ const appId = yield (0, resolveAppId_1.default)(appIdArg, appmapDir);
51
+ const scanResults = JSON.parse((yield (0, promises_1.readFile)(reportFile)).toString());
52
+ const uploadResponse = yield (0, upload_1.default)(scanResults, appId, appmapDir, mergeKey, { branch, commit, environment }, {
53
+ maxRetries: 3,
98
54
  });
55
+ (0, reportUploadURL_1.default)(uploadResponse.summary.numFindings, uploadResponse.url);
99
56
  });
100
57
  },
101
58
  };
102
- //# sourceMappingURL=command.js.map
@@ -1,3 +1,2 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=options.js.map
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pruneAppMap = exports.maxAppMapSize = void 0;
4
+ const models_1 = require("@appland/models");
5
+ const APPMAP_UPLOAD_MAX_SIZE = parseInt(process.env.APPMAP_UPLOAD_MAX_SIZE || '40960') * 1024;
6
+ if (!APPMAP_UPLOAD_MAX_SIZE) {
7
+ throw Error(`Failed parsing APPMAP_UPLOAD_MAX_SIZE: "${process.env.APPMAP_UPLOAD_MAX_SIZE}"`);
8
+ }
9
+ function maxAppMapSize() {
10
+ return APPMAP_UPLOAD_MAX_SIZE;
11
+ }
12
+ exports.maxAppMapSize = maxAppMapSize;
13
+ function pruneAppMap(appMapJson, maxSize) {
14
+ return (0, models_1.buildAppMap)().source(appMapJson).prune(maxSize).normalize().build();
15
+ }
16
+ exports.pruneAppMap = pruneAppMap;