@appland/appmap 3.84.2 → 3.86.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 (96) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/built/appMapCatalog.js +2 -5
  3. package/built/appMapCatalog.js.map +1 -1
  4. package/built/cli.js +4 -0
  5. package/built/cli.js.map +1 -1
  6. package/built/cmds/archive/analyze.js +63 -15
  7. package/built/cmds/archive/analyze.js.map +1 -1
  8. package/built/cmds/archive/analyzeWorker.js +63 -0
  9. package/built/cmds/archive/analyzeWorker.js.map +1 -0
  10. package/built/cmds/archive/analyzeWorkerWrapper.js +8 -0
  11. package/built/cmds/archive/analyzeWorkerWrapper.js.map +1 -0
  12. package/built/cmds/archive/archive.js +8 -2
  13. package/built/cmds/archive/archive.js.map +1 -1
  14. package/built/cmds/archive/indexAppMaps.js +2 -2
  15. package/built/cmds/archive/indexAppMaps.js.map +1 -1
  16. package/built/cmds/archive/scan.js.map +1 -1
  17. package/built/cmds/checkSize.js +14 -0
  18. package/built/cmds/checkSize.js.map +1 -0
  19. package/built/cmds/compare/ArchiveAnalyzer.js +69 -0
  20. package/built/cmds/compare/ArchiveAnalyzer.js.map +1 -0
  21. package/built/cmds/compare/ChangeReport.js +3 -0
  22. package/built/cmds/compare/ChangeReport.js.map +1 -0
  23. package/built/cmds/compare/ChangeReporter.js +398 -0
  24. package/built/cmds/compare/ChangeReporter.js.map +1 -0
  25. package/built/cmds/compare/Digests.js +50 -0
  26. package/built/cmds/compare/Digests.js.map +1 -0
  27. package/built/cmds/compare/Paths.js +45 -0
  28. package/built/cmds/compare/Paths.js.map +1 -0
  29. package/built/cmds/compare/RevisionName.js +10 -0
  30. package/built/cmds/compare/RevisionName.js.map +1 -0
  31. package/built/cmds/compare/SequenceDiagramDigest.js +20 -0
  32. package/built/cmds/compare/SequenceDiagramDigest.js.map +1 -0
  33. package/built/cmds/compare/ValidationError.js +7 -0
  34. package/built/cmds/compare/ValidationError.js.map +1 -0
  35. package/built/cmds/compare/checkout.js +36 -0
  36. package/built/cmds/compare/checkout.js.map +1 -0
  37. package/built/cmds/compare/compare.js +121 -0
  38. package/built/cmds/compare/compare.js.map +1 -0
  39. package/built/cmds/compare/detectRevisions.js +19 -0
  40. package/built/cmds/compare/detectRevisions.js.map +1 -0
  41. package/built/cmds/compare/loadFindings.js +45 -0
  42. package/built/cmds/compare/loadFindings.js.map +1 -0
  43. package/built/cmds/compare/loadSequenceDiagram.js +11 -0
  44. package/built/cmds/compare/loadSequenceDiagram.js.map +1 -0
  45. package/built/cmds/compare/mapToRecord.js +11 -0
  46. package/built/cmds/compare/mapToRecord.js.map +1 -0
  47. package/built/cmds/compare/prepareOutputDir.js +34 -0
  48. package/built/cmds/compare/prepareOutputDir.js.map +1 -0
  49. package/built/cmds/compare/ui.js +38 -0
  50. package/built/cmds/compare/ui.js.map +1 -0
  51. package/built/cmds/compare-report/MarkdownReport.js +197 -0
  52. package/built/cmds/compare-report/MarkdownReport.js.map +1 -0
  53. package/built/cmds/compare-report/Report.js +3 -0
  54. package/built/cmds/compare-report/Report.js.map +1 -0
  55. package/built/cmds/compare-report/compareReport.js +47 -0
  56. package/built/cmds/compare-report/compareReport.js.map +1 -0
  57. package/built/cmds/record/action/countAppMaps.js +3 -1
  58. package/built/cmds/record/action/countAppMaps.js.map +1 -1
  59. package/built/cmds/scan/ScanResult.js +3 -0
  60. package/built/cmds/scan/ScanResult.js.map +1 -0
  61. package/built/cmds/scan/ScanTask.js +8 -0
  62. package/built/cmds/scan/ScanTask.js.map +1 -0
  63. package/built/cmds/sequenceDiagram/SequenceDiagramResult.js +3 -0
  64. package/built/cmds/sequenceDiagram/SequenceDiagramResult.js.map +1 -0
  65. package/built/cmds/sequenceDiagram/SequenceDiagramTask.js +8 -0
  66. package/built/cmds/sequenceDiagram/SequenceDiagramTask.js.map +1 -0
  67. package/built/cmds/stats/directory/statsForDirectory.js +2 -2
  68. package/built/cmds/stats/directory/statsForDirectory.js.map +1 -1
  69. package/built/cmds/upload.js +5 -11
  70. package/built/cmds/upload.js.map +1 -1
  71. package/built/fingerprint/fingerprintDirectoryCommand.js +2 -2
  72. package/built/fingerprint/fingerprintDirectoryCommand.js.map +1 -1
  73. package/built/fingerprint/fingerprinter.js +8 -0
  74. package/built/fingerprint/fingerprinter.js.map +1 -1
  75. package/built/html/appmap.js +6 -6
  76. package/built/html/appmap.js.map +1 -1
  77. package/built/html/sequenceDiagram.js +6 -6
  78. package/built/html/sequenceDiagram.js.map +1 -1
  79. package/built/inventoryCommand.js +2 -2
  80. package/built/inventoryCommand.js.map +1 -1
  81. package/built/lib/processAppMapDir.js +35 -0
  82. package/built/lib/processAppMapDir.js.map +1 -0
  83. package/built/lib/workerPool.js +135 -0
  84. package/built/lib/workerPool.js.map +1 -0
  85. package/built/search/findCodeObjects.js +2 -2
  86. package/built/search/findCodeObjects.js.map +1 -1
  87. package/built/sequenceDiagram/analyzeAppMaps.js +2 -3
  88. package/built/sequenceDiagram/analyzeAppMaps.js.map +1 -1
  89. package/built/utils.js +50 -27
  90. package/built/utils.js.map +1 -1
  91. package/package.json +8 -5
  92. package/resources/change-report.hbs +259 -0
  93. package/built/cmds/archive/updateSequenceDiagrams.js +0 -49
  94. package/built/cmds/archive/updateSequenceDiagrams.js.map +0 -1
  95. package/built/cmds/sequenceDiagram/buildSequenceDiagramFromAppMap.js +0 -11
  96. package/built/cmds/sequenceDiagram/buildSequenceDiagramFromAppMap.js.map +0 -1
@@ -0,0 +1,121 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.handler = exports.builder = exports.describe = exports.command = void 0;
30
+ const readline_1 = __importDefault(require("readline"));
31
+ const path_1 = require("path");
32
+ const promises_1 = require("fs/promises");
33
+ const handleWorkingDirectory_1 = require("../../lib/handleWorkingDirectory");
34
+ const detectRevisions_1 = __importDefault(require("./detectRevisions"));
35
+ const prepareOutputDir_1 = require("./prepareOutputDir");
36
+ const utils_1 = require("../../utils");
37
+ const loadAppMapConfig_1 = __importDefault(require("../../lib/loadAppMapConfig"));
38
+ const ChangeReporter_1 = __importStar(require("./ChangeReporter"));
39
+ exports.command = 'compare';
40
+ exports.describe = 'Compare runtime code behavior between base and head revisions';
41
+ const builder = (args) => {
42
+ args.option('directory', {
43
+ describe: 'program working directory',
44
+ type: 'string',
45
+ alias: 'd',
46
+ });
47
+ args.option('base-revision', {
48
+ describe: 'base revision name or commit SHA.',
49
+ alias: ['b', 'base'],
50
+ demandOption: true,
51
+ });
52
+ args.option('head-revision', {
53
+ describe: 'head revision name or commit SHA. By default, use the current commit.',
54
+ alias: ['h', 'head'],
55
+ });
56
+ args.option('output-dir', {
57
+ describe: 'directory in which to save the report files. Default is ./.appmap/change-report/<base-revision>-<head-revision>.',
58
+ });
59
+ args.option('clobber-output-dir', {
60
+ describe: 'remove the output directory if it exists',
61
+ type: 'boolean',
62
+ default: false,
63
+ });
64
+ args.option('source-dir', {
65
+ describe: 'root directory of the application source code',
66
+ type: 'string',
67
+ default: '.',
68
+ });
69
+ args.option('delete-unreferenced', {
70
+ describe: 'whether to delete AppMaps from base and head that are unreferenced by the change report',
71
+ default: true,
72
+ alias: 'delete-unchanged',
73
+ });
74
+ args.option('report-removed', {
75
+ describe: 'whether to report removed findings, such as removed API routes, resolved findings, etc',
76
+ default: true,
77
+ });
78
+ return args.strict();
79
+ };
80
+ exports.builder = builder;
81
+ const handler = async (argv) => {
82
+ (0, utils_1.verbose)(argv.verbose);
83
+ const rl = readline_1.default.createInterface({
84
+ input: process.stdin,
85
+ output: process.stdout,
86
+ });
87
+ const { directory, sourceDir: srcDir, baseRevision: baseRevisionArg, outputDir: outputDirArg, headRevision: headRevisionArg, deleteUnreferenced, reportRemoved, } = argv;
88
+ try {
89
+ (0, handleWorkingDirectory_1.handleWorkingDirectory)(directory);
90
+ const appmapConfig = await (0, loadAppMapConfig_1.default)();
91
+ if (!appmapConfig)
92
+ throw new Error(`Unable to load appmap.yml config file`);
93
+ let scannerConfig;
94
+ try {
95
+ scannerConfig = await (0, promises_1.readFile)((0, path_1.join)(srcDir, 'appmap-scanner.yml'), 'utf-8');
96
+ console.debug(`Using scanner configuration from appmap-scanner.yml`);
97
+ }
98
+ catch (e) {
99
+ console.debug(`Unable to load appmap-scanner.yml. Will use default scanner configuration.`);
100
+ }
101
+ const { baseRevision, headRevision } = await (0, detectRevisions_1.default)(baseRevisionArg, headRevisionArg);
102
+ const outputDir = await (0, prepareOutputDir_1.prepareOutputDir)(outputDirArg, baseRevision, headRevision, argv.clobberOutputDir, rl);
103
+ const changeReporter = new ChangeReporter_1.default(baseRevision, headRevision, outputDir, srcDir);
104
+ await changeReporter.initialize();
105
+ const options = new ChangeReporter_1.ChangeReportOptions();
106
+ options.reportRemoved = reportRemoved;
107
+ const report = await changeReporter.report(options);
108
+ if (deleteUnreferenced) {
109
+ await changeReporter.deleteUnreferencedAppMaps();
110
+ }
111
+ await (0, promises_1.writeFile)((0, path_1.join)(outputDir, 'change-report.json'), JSON.stringify(report, null, 2));
112
+ }
113
+ catch (e) {
114
+ throw e;
115
+ }
116
+ finally {
117
+ rl.close();
118
+ }
119
+ };
120
+ exports.handler = handler;
121
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/cmds/compare/compare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const executeCommand_1 = require("../../lib/executeCommand");
4
+ const ui_1 = require("./ui");
5
+ const ValidationError_1 = require("./ValidationError");
6
+ async function detectRevisions(baseRevision, headArg) {
7
+ let headRevision = headArg;
8
+ if (!headRevision) {
9
+ let currentBranch = (await (0, executeCommand_1.executeCommand)(`git rev-parse HEAD`)).trim().split('\n')[0];
10
+ headRevision = currentBranch;
11
+ }
12
+ console.log((0, ui_1.prominentStyle)(`Current revision is: ${headRevision}`));
13
+ if (baseRevision === headRevision) {
14
+ throw new ValidationError_1.ValidationError(`Base and head revisions are the same: ${baseRevision}`);
15
+ }
16
+ return { baseRevision, headRevision };
17
+ }
18
+ exports.default = detectRevisions;
19
+ //# sourceMappingURL=detectRevisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectRevisions.js","sourceRoot":"","sources":["../../../src/cmds/compare/detectRevisions.ts"],"names":[],"mappings":";;AAAA,6DAA0D;AAC1D,6BAAsC;AACtC,uDAAoD;AAErC,KAAK,UAAU,eAAe,CAC3C,YAAoB,EACpB,OAAe;IAEf,IAAI,YAAY,GAAG,OAAO,CAAC;IAC3B,IAAI,CAAC,YAAY,EAAE;QACjB,IAAI,aAAa,GAAG,CAAC,MAAM,IAAA,+BAAc,EAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvF,YAAY,GAAG,aAAa,CAAC;KAC9B;IAED,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAc,EAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC,CAAC;IAEpE,IAAI,YAAY,KAAK,YAAY,EAAE;QACjC,MAAM,IAAI,iCAAe,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;KACpF;IAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AACxC,CAAC;AAlBD,kCAkBC"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const semver_1 = require("semver");
8
+ const executeCommand_1 = require("../../lib/executeCommand");
9
+ const promises_1 = require("fs/promises");
10
+ const utils_1 = require("../../utils");
11
+ async function loadFindings(paths, revisionName, appMapDir) {
12
+ const manifest = JSON.parse(await (0, promises_1.readFile)(paths.manifestPath(revisionName), 'utf-8'));
13
+ const findings = new Array();
14
+ const collectFindings = (findings) => {
15
+ return async (findingsFile) => {
16
+ const findingsData = JSON.parse(await (0, promises_1.readFile)(findingsFile, 'utf-8'));
17
+ findings.push(...findingsData.findings);
18
+ };
19
+ };
20
+ let archiveVersion = manifest.versions.archive;
21
+ (0, assert_1.default)(archiveVersion);
22
+ if (archiveVersion.split('.').length === 2)
23
+ archiveVersion += '.0';
24
+ if (new semver_1.SemVer(archiveVersion).compare('1.3.0') < 0) {
25
+ const workingDir = paths.revisionPath(revisionName);
26
+ console.info(`Scanning ${revisionName} revision for findings (archive version: ${archiveVersion}).`);
27
+ let command = `npx @appland/scanner@latest scan -d ${workingDir} --all`;
28
+ await (0, executeCommand_1.executeCommand)(command);
29
+ // Pre-1.3.0 archive. Scan and load findings the old way.
30
+ const scanResults = JSON.parse(await (0, promises_1.readFile)(paths.findingsPath(revisionName), 'utf-8'));
31
+ findings.push(...(scanResults.findings || []));
32
+ }
33
+ else {
34
+ await (0, utils_1.processNamedFiles)(paths.revisionPath(revisionName), 'appmap-findings.json', collectFindings(findings));
35
+ }
36
+ console.info(`Found ${findings.length} findings for ${revisionName} revision`);
37
+ for (const finding of findings) {
38
+ if (finding.appMapFile.startsWith(appMapDir)) {
39
+ finding.appMapFile = finding.appMapFile.slice(appMapDir.length + 1);
40
+ }
41
+ }
42
+ return findings;
43
+ }
44
+ exports.default = loadFindings;
45
+ //# sourceMappingURL=loadFindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadFindings.js","sourceRoot":"","sources":["../../../src/cmds/compare/loadFindings.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAK5B,mCAAgC;AAChC,6DAA0D;AAC1D,0CAAuC;AACvC,uCAAgD;AAEjC,KAAK,UAAU,YAAY,CACxC,KAAY,EACZ,YAA0B,EAC1B,SAAiB;IAEjB,MAAM,QAAQ,GAAoB,IAAI,CAAC,KAAK,CAC1C,MAAM,IAAA,mBAAQ,EAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAW,CAAC;IAEtC,MAAM,eAAe,GAAG,CAAC,QAAmB,EAA6C,EAAE;QACzF,OAAO,KAAK,EAAE,YAAoB,EAAE,EAAE;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC,GAAI,YAAY,CAAC,QAAsB,CAAC,CAAC;QACzD,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC/C,IAAA,gBAAM,EAAC,cAAc,CAAC,CAAC;IACvB,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,cAAc,IAAI,IAAI,CAAC;IACnE,IAAI,IAAI,eAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACnD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CACV,YAAY,YAAY,4CAA4C,cAAc,IAAI,CACvF,CAAC;QACF,IAAI,OAAO,GAAG,uCAAuC,UAAU,QAAQ,CAAC;QACxE,MAAM,IAAA,+BAAc,EAAC,OAAO,CAAC,CAAC;QAE9B,yDAAyD;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1F,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;KAChD;SAAM;QACL,MAAM,IAAA,yBAAiB,EACrB,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,EAChC,sBAAsB,EACtB,eAAe,CAAC,QAAQ,CAAC,CAC1B,CAAC;KACH;IAED,OAAO,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,iBAAiB,YAAY,WAAW,CAAC,CAAC;IAE/E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC5C,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SACrE;KACF;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAhDD,+BAgDC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadSequenceDiagram = void 0;
4
+ const promises_1 = require("fs/promises");
5
+ const sequence_diagram_1 = require("@appland/sequence-diagram");
6
+ async function loadSequenceDiagram(path) {
7
+ const diagramData = JSON.parse(await (0, promises_1.readFile)(path, 'utf-8'));
8
+ return (0, sequence_diagram_1.unparseDiagram)(diagramData);
9
+ }
10
+ exports.loadSequenceDiagram = loadSequenceDiagram;
11
+ //# sourceMappingURL=loadSequenceDiagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadSequenceDiagram.js","sourceRoot":"","sources":["../../../src/cmds/compare/loadSequenceDiagram.ts"],"names":[],"mappings":";;;AAAA,0CAAuC;AACvC,gEAAuF;AAEhF,KAAK,UAAU,mBAAmB,CAAC,IAAY;IACpD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,OAAO,IAAA,iCAAc,EAAC,WAAW,CAAC,CAAC;AACrC,CAAC;AAHD,kDAGC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function mapToRecord(map) {
4
+ return [...map.entries()].reduce((memo, entry) => {
5
+ const [key, value] = entry;
6
+ memo[key] = value;
7
+ return memo;
8
+ }, {});
9
+ }
10
+ exports.default = mapToRecord;
11
+ //# sourceMappingURL=mapToRecord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapToRecord.js","sourceRoot":"","sources":["../../../src/cmds/compare/mapToRecord.ts"],"names":[],"mappings":";;AAAA,SAAwB,WAAW,CACjC,GAA2B;IAE3B,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/C,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AARD,8BAQC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prepareOutputDir = void 0;
4
+ const promises_1 = require("fs/promises");
5
+ const path_1 = require("path");
6
+ const utils_1 = require("../../utils");
7
+ const RevisionName_1 = require("./RevisionName");
8
+ const ui_1 = require("./ui");
9
+ const ValidationError_1 = require("./ValidationError");
10
+ async function prepareOutputDir(outputDirArg, baseRevision, headRevision, clobberOutputDir, rl) {
11
+ let outputDir = outputDirArg;
12
+ if (!outputDir) {
13
+ outputDir = `.appmap/change-report/${(0, ui_1.sanitizeRevision)(baseRevision)}-${(0, ui_1.sanitizeRevision)(headRevision)}`;
14
+ }
15
+ for (const revision of [RevisionName_1.RevisionName.Base, RevisionName_1.RevisionName.Head]) {
16
+ if (!(await (0, utils_1.exists)((0, path_1.join)(outputDir, revision))))
17
+ throw new ValidationError_1.ValidationError(`${revision} revision data (${(0, path_1.join)(outputDir, revision)}) does not exist`);
18
+ }
19
+ const diffDir = (0, path_1.join)(outputDir, RevisionName_1.RevisionName.Diff);
20
+ if (await (0, utils_1.exists)(diffDir)) {
21
+ if (!clobberOutputDir &&
22
+ process.stdout.isTTY &&
23
+ !(await (0, ui_1.confirm)(`Delete existing 'diff' in ${diffDir}?`, rl))) {
24
+ throw new ValidationError_1.ValidationError(`The 'diff' data directory ${diffDir} exists and you chose not to delete it`);
25
+ }
26
+ await (0, promises_1.rm)(diffDir, { recursive: true, force: true });
27
+ // Rapid rm and then mkdir will silently fail in practice.
28
+ await new Promise((resolve) => setTimeout(resolve, 100));
29
+ }
30
+ await (0, promises_1.mkdir)((0, path_1.join)(outputDir, RevisionName_1.RevisionName.Diff), { recursive: true });
31
+ return outputDir;
32
+ }
33
+ exports.prepareOutputDir = prepareOutputDir;
34
+ //# sourceMappingURL=prepareOutputDir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareOutputDir.js","sourceRoot":"","sources":["../../../src/cmds/compare/prepareOutputDir.ts"],"names":[],"mappings":";;;AAAA,0CAAwC;AACxC,+BAA4B;AAE5B,uCAAqC;AACrC,iDAA8C;AAC9C,6BAAiD;AACjD,uDAAoD;AAE7C,KAAK,UAAU,gBAAgB,CACpC,YAAiB,EACjB,YAAoB,EACpB,YAAoB,EACpB,gBAAyB,EACzB,EAAsB;IAEtB,IAAI,SAAS,GAAG,YAAY,CAAC;IAC7B,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,yBAAyB,IAAA,qBAAgB,EAAC,YAAY,CAAC,IAAI,IAAA,qBAAgB,EACrF,YAAY,CACb,EAAE,CAAC;KACL;IAED,KAAK,MAAM,QAAQ,IAAI,CAAC,2BAAY,CAAC,IAAI,EAAE,2BAAY,CAAC,IAAI,CAAC,EAAE;QAC7D,IAAI,CAAC,CAAC,MAAM,IAAA,cAAM,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC5C,MAAM,IAAI,iCAAe,CACvB,GAAG,QAAQ,mBAAmB,IAAA,WAAI,EAAC,SAAS,EAAE,QAAQ,CAAC,kBAAkB,CAC1E,CAAC;KACL;IAED,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,2BAAY,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,MAAM,IAAA,cAAM,EAAC,OAAO,CAAC,EAAE;QACzB,IACE,CAAC,gBAAgB;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK;YACpB,CAAC,CAAC,MAAM,IAAA,YAAO,EAAC,6BAA6B,OAAO,GAAG,EAAE,EAAE,CAAC,CAAC,EAC7D;YACA,MAAM,IAAI,iCAAe,CACvB,6BAA6B,OAAO,wCAAwC,CAC7E,CAAC;SACH;QACD,MAAM,IAAA,aAAE,EAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,0DAA0D;QAC1D,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;KAChE;IAED,MAAM,IAAA,gBAAK,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,2BAAY,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAErE,OAAO,SAAS,CAAC;AACnB,CAAC;AAxCD,4CAwCC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.sanitizeRevision = exports.mutedStyle = exports.prominentStyle = exports.actionStyle = exports.confirm = exports.ask = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ async function ask(rl, q) {
9
+ return new Promise((resolve) => {
10
+ rl.question(q, resolve);
11
+ });
12
+ }
13
+ exports.ask = ask;
14
+ async function confirm(prompt, rl) {
15
+ let response = '';
16
+ while (!['y', 'n'].includes(response)) {
17
+ response = await ask(rl, `${prompt} (y/n) `);
18
+ }
19
+ return response === 'y';
20
+ }
21
+ exports.confirm = confirm;
22
+ function actionStyle(message) {
23
+ return chalk_1.default.bold(chalk_1.default.green(message));
24
+ }
25
+ exports.actionStyle = actionStyle;
26
+ function prominentStyle(message) {
27
+ return chalk_1.default.bold(message);
28
+ }
29
+ exports.prominentStyle = prominentStyle;
30
+ function mutedStyle(message) {
31
+ return chalk_1.default.dim(message);
32
+ }
33
+ exports.mutedStyle = mutedStyle;
34
+ function sanitizeRevision(revision) {
35
+ return revision.replace(/[^a-zA-Z0-9_]/g, '_');
36
+ }
37
+ exports.sanitizeRevision = sanitizeRevision;
38
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/cmds/compare/ui.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAGnB,KAAK,UAAU,GAAG,CAAC,EAAsB,EAAE,CAAS;IACzD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAJD,kBAIC;AAEM,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,EAAsB;IAClE,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACrC,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,SAAS,CAAC,CAAC;KAC9C;IACD,OAAO,QAAQ,KAAK,GAAG,CAAC;AAC1B,CAAC;AAND,0BAMC;AAED,SAAgB,WAAW,CAAC,OAAe;IACzC,OAAO,eAAK,CAAC,IAAI,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC;AAFD,kCAEC;AAED,SAAgB,cAAc,CAAC,OAAe;IAC5C,OAAO,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAFD,wCAEC;AAED,SAAgB,UAAU,CAAC,OAAe;IACxC,OAAO,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC;AAFD,gCAEC;AAED,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAFD,4CAEC"}
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = require("fs");
7
+ const promises_1 = require("fs/promises");
8
+ const handlebars_1 = __importDefault(require("handlebars"));
9
+ const path_1 = require("path");
10
+ const assert_1 = __importDefault(require("assert"));
11
+ const executeCommand_1 = require("../../lib/executeCommand");
12
+ const utils_1 = require("../../utils");
13
+ const TemplateFile = [
14
+ '../../../resources/change-report.hbs',
15
+ '../../../../resources/change-report.hbs', // In development
16
+ ]
17
+ .map((fileName) => (0, path_1.join)(__dirname, fileName))
18
+ .find((fileName) => (0, fs_1.existsSync)(fileName));
19
+ function isURL(path) {
20
+ try {
21
+ new URL(path);
22
+ return true;
23
+ }
24
+ catch (e) {
25
+ return false;
26
+ }
27
+ }
28
+ class MarkdownReport {
29
+ constructor(appmapURL, sourceURL) {
30
+ this.appmapURL = appmapURL;
31
+ this.sourceURL = sourceURL;
32
+ }
33
+ async generateReport(changeReport, baseDir) {
34
+ var _a, _b, _c, _d, _e, _f, _g, _h;
35
+ (0, assert_1.default)(TemplateFile, "Report template file 'change-report.hbs' not found");
36
+ const Template = handlebars_1.default.compile((0, fs_1.readFileSync)(TemplateFile, 'utf8'));
37
+ // Remove the empty sequence diagram diff snippet - which can't be reasonably rendered.
38
+ delete changeReport.sequenceDiagramDiff[''];
39
+ // Resolve changedAppMap entry for a test failure. Note that this will not help much
40
+ // with new test cases that fail, but it will help with modified tests that fail.
41
+ changeReport.testFailures.forEach((failure) => {
42
+ const changedAppMap = changeReport.changedAppMaps.find((change) => change.appmap === failure.appmap);
43
+ if (changedAppMap) {
44
+ failure.changedAppMap = changedAppMap;
45
+ }
46
+ });
47
+ const appmapNames = new Map();
48
+ for (const { appmap } of changeReport.testFailures) {
49
+ const metadata = JSON.parse(await (0, promises_1.readFile)((0, path_1.join)('head', appmap, 'metadata.json'), 'utf-8'));
50
+ appmapNames.set(appmap, metadata.name.replace(/_/g, ' '));
51
+ }
52
+ // Resolve the test location to a source path relative to baseDir.
53
+ changeReport.testFailures
54
+ .filter((failure) => failure.testLocation)
55
+ .forEach((failure) => {
56
+ const tokens = failure.testLocation.split(':');
57
+ tokens.pop();
58
+ let testPath = tokens.join(':');
59
+ let path;
60
+ if (isURL(baseDir)) {
61
+ path = new URL(testPath, baseDir).toString();
62
+ }
63
+ else {
64
+ path = (0, path_1.join)(baseDir, testPath);
65
+ }
66
+ failure.testPath = path;
67
+ failure.testName = appmapNames.get(failure.appmap) || testPath;
68
+ if (failure.testSnippet) {
69
+ const [, lineno] = (failure.failureLocation || '').split(':');
70
+ failure.failureLine = lineno;
71
+ failure.testSnippet.codeFragment = failure.testSnippet.codeFragment
72
+ .split('\n')
73
+ .map((line, index) => `${(index + failure.testSnippet.startLine).toString() === lineno ? '> ' : ' '} ${index + failure.testSnippet.startLine}: ${line}`)
74
+ .join('\n');
75
+ }
76
+ });
77
+ const wordify = (s) => s.replace(/([-_])/g, ' ').toLowerCase();
78
+ const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
79
+ const explainAPIChange = (change) => {
80
+ const { action, entity } = change;
81
+ const entityTokens = entity.split('.');
82
+ change.title = [capitalize(wordify(action)), ...entityTokens.map(wordify)].join(' ');
83
+ };
84
+ if (changeReport.apiDiff) {
85
+ (_a = changeReport.apiDiff.breakingDifferences) === null || _a === void 0 ? void 0 : _a.forEach(explainAPIChange);
86
+ (_b = changeReport.apiDiff.nonBreakingDifferences) === null || _b === void 0 ? void 0 : _b.forEach(explainAPIChange);
87
+ (_c = changeReport.apiDiff.unclassifiedDifferences) === null || _c === void 0 ? void 0 : _c.forEach(explainAPIChange);
88
+ // Provide a simple count of the number of differences - since Handlebars can't do math.
89
+ changeReport.apiDiff.differenceCount =
90
+ (((_d = changeReport.apiDiff.breakingDifferences) === null || _d === void 0 ? void 0 : _d.length) || 0) +
91
+ (((_e = changeReport.apiDiff.nonBreakingDifferences) === null || _e === void 0 ? void 0 : _e.length) || 0) +
92
+ (((_f = changeReport.apiDiff.unclassifiedDifferences) === null || _f === void 0 ? void 0 : _f.length) || 0);
93
+ changeReport.apiDiff.breakingDifferenceCount =
94
+ ((_g = changeReport.apiDiff.breakingDifferences) === null || _g === void 0 ? void 0 : _g.length) || 0;
95
+ changeReport.apiDiff.nonBreakingDifferenceCount =
96
+ ((_h = changeReport.apiDiff.nonBreakingDifferences) === null || _h === void 0 ? void 0 : _h.length) || 0;
97
+ if (changeReport.apiDiff.differenceCount > 0) {
98
+ const sourceDiff = (await (0, executeCommand_1.executeCommand)(`diff -u base/openapi.yml head/openapi.yml`, (0, utils_1.verbose)(), (0, utils_1.verbose)(), (0, utils_1.verbose)(), [0, 1])).trim();
99
+ changeReport.apiDiff.sourceDiff = sourceDiff;
100
+ }
101
+ }
102
+ changeReport.sequenceDiagramDiffSnippetCount = Object.keys(changeReport.sequenceDiagramDiff || {}).length;
103
+ if (changeReport.findingDiff) {
104
+ Object.keys(changeReport.findingDiff).forEach((key) => {
105
+ (0, assert_1.default)(changeReport.findingDiff);
106
+ changeReport.findingDiff[key].forEach((finding) => (finding.appmap = finding.appMapFile));
107
+ });
108
+ }
109
+ const self = this;
110
+ handlebars_1.default.registerHelper('inspect', function (value) {
111
+ return new handlebars_1.default.SafeString(JSON.stringify(value, null, 2));
112
+ });
113
+ handlebars_1.default.registerHelper('length', function (...list) {
114
+ let result = 0;
115
+ for (const item of list) {
116
+ if (Array.isArray(item)) {
117
+ result += item.length;
118
+ }
119
+ }
120
+ return result;
121
+ });
122
+ handlebars_1.default.registerHelper('has_source_diff', function (appmap) {
123
+ if (appmap.endsWith('.appmap.json'))
124
+ appmap = appmap.slice(0, '.appmap.json'.length * -1);
125
+ const changedAppMap = changeReport.changedAppMaps.find((change) => change.appmap === appmap);
126
+ return !!changedAppMap && !!changedAppMap.sourceDiff;
127
+ });
128
+ handlebars_1.default.registerHelper('source_diff', function (appmap) {
129
+ var _a;
130
+ if (appmap.endsWith('.appmap.json'))
131
+ appmap = appmap.slice(0, '.appmap.json'.length * -1);
132
+ const diffText = (_a = changeReport.changedAppMaps.find((change) => change.appmap === appmap)) === null || _a === void 0 ? void 0 : _a.sourceDiff;
133
+ return diffText ? new handlebars_1.default.SafeString(diffText) : undefined;
134
+ });
135
+ handlebars_1.default.registerHelper('appmap_diff_url', function (diagram) {
136
+ if (diagram.startsWith('./'))
137
+ diagram = diagram.slice('./'.length);
138
+ if (diagram.startsWith('diff/'))
139
+ diagram = diagram.slice('diff/'.length);
140
+ if (diagram.endsWith('.diff.sequence.json'))
141
+ diagram = diagram.slice(0, '.diff.sequence.json'.length * -1);
142
+ const path = ['diff', `${diagram}.diff.sequence.json`].join('/');
143
+ if (self.appmapURL) {
144
+ const url = new URL(self.appmapURL.toString());
145
+ url.searchParams.append('path', path);
146
+ return new handlebars_1.default.SafeString(url.toString());
147
+ }
148
+ else {
149
+ return new handlebars_1.default.SafeString(path);
150
+ }
151
+ });
152
+ handlebars_1.default.registerHelper('appmap_url', function (dir, appmap) {
153
+ if (appmap.startsWith('./'))
154
+ appmap = appmap.slice('./'.length);
155
+ if (appmap.endsWith('.appmap.json'))
156
+ appmap = appmap.slice(0, '.appmap.json'.length * -1);
157
+ const path = [dir, `${appmap}.appmap.json`].join('/');
158
+ if (self.appmapURL) {
159
+ const url = new URL(self.appmapURL.toString());
160
+ url.searchParams.append('path', path);
161
+ return new handlebars_1.default.SafeString(url.toString());
162
+ }
163
+ else {
164
+ return new handlebars_1.default.SafeString(path);
165
+ }
166
+ });
167
+ handlebars_1.default.registerHelper('source_url', function (location, fileLinenoSeparator = '#L') {
168
+ if (typeof fileLinenoSeparator === 'object') {
169
+ fileLinenoSeparator = '#L';
170
+ }
171
+ const [path, lineno] = location.split(':');
172
+ if ((0, path_1.isAbsolute)(path))
173
+ return;
174
+ if (path.startsWith('vendor/') || path.startsWith('node_modules/'))
175
+ return;
176
+ if (self.sourceURL) {
177
+ const url = new URL(self.sourceURL.toString());
178
+ if (url.protocol === 'file:') {
179
+ const sourcePath = (0, path_1.relative)(process.cwd(), (0, path_1.join)(url.pathname, path));
180
+ return new handlebars_1.default.SafeString([sourcePath, lineno].filter(Boolean).join(fileLinenoSeparator));
181
+ }
182
+ else {
183
+ url.pathname = (0, path_1.join)(url.pathname, path);
184
+ if (lineno)
185
+ url.hash = `L${lineno}`;
186
+ return new handlebars_1.default.SafeString(url.toString());
187
+ }
188
+ }
189
+ else {
190
+ return new handlebars_1.default.SafeString(location);
191
+ }
192
+ });
193
+ return Template(changeReport);
194
+ }
195
+ }
196
+ exports.default = MarkdownReport;
197
+ //# sourceMappingURL=MarkdownReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownReport.js","sourceRoot":"","sources":["../../../src/cmds/compare-report/MarkdownReport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Report.js","sourceRoot":"","sources":["../../../src/cmds/compare-report/Report.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handler = exports.builder = exports.describe = exports.command = void 0;
7
+ const promises_1 = require("fs/promises");
8
+ const handleWorkingDirectory_1 = require("../../lib/handleWorkingDirectory");
9
+ const utils_1 = require("../../utils");
10
+ const MarkdownReport_1 = __importDefault(require("./MarkdownReport"));
11
+ exports.command = 'compare-report <report-directory>';
12
+ exports.describe = 'Generate a report document from comparison data generated by the compare command.';
13
+ const builder = (args) => {
14
+ args.positional('report-directory', {
15
+ describe: 'directory containing the comparison data',
16
+ type: 'string',
17
+ demandOption: true,
18
+ });
19
+ args.option('source-url', {
20
+ describe: `Base URL to link to a source file. The relative path to the source file will be added to the URL path.`,
21
+ type: 'string',
22
+ });
23
+ args.option('appmap-url', {
24
+ describe: `Base URL to link to AppMaps. A 'path' parameter will be added with the relative path from the report directory to the AppMap JSON file.`,
25
+ type: 'string',
26
+ });
27
+ args.option('directory', {
28
+ describe: 'program working directory',
29
+ type: 'string',
30
+ alias: 'd',
31
+ });
32
+ return args.strict();
33
+ };
34
+ exports.builder = builder;
35
+ const handler = async (argv) => {
36
+ (0, utils_1.verbose)(argv.verbose);
37
+ const { directory } = argv;
38
+ (0, handleWorkingDirectory_1.handleWorkingDirectory)(directory);
39
+ const baseDir = process.cwd();
40
+ const { reportDirectory, sourceUrl, appmapUrl } = argv;
41
+ process.chdir(reportDirectory);
42
+ const report = JSON.parse(await (0, promises_1.readFile)('change-report.json', 'utf-8'));
43
+ const reportMD = await new MarkdownReport_1.default(appmapUrl, sourceUrl).generateReport(report, baseDir);
44
+ await (0, promises_1.writeFile)('report.md', reportMD);
45
+ };
46
+ exports.handler = handler;
47
+ //# sourceMappingURL=compareReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compareReport.js","sourceRoot":"","sources":["../../../src/cmds/compare-report/compareReport.ts"],"names":[],"mappings":";;;;;;AAAA,0CAAkD;AAElD,6EAA0E;AAC1E,uCAAsC;AAEtC,sEAA8C;AAEjC,QAAA,OAAO,GAAG,mCAAmC,CAAC;AAC9C,QAAA,QAAQ,GACnB,mFAAmF,CAAC;AAE/E,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,EAAE;IAC1C,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;QAClC,QAAQ,EAAE,0CAA0C;QACpD,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;QACxB,QAAQ,EAAE,wGAAwG;QAClH,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;QACxB,QAAQ,EAAE,yIAAyI;QACnJ,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;QACvB,QAAQ,EAAE,2BAA2B;QACrC,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;KACX,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AACvB,CAAC,CAAC;AAxBW,QAAA,OAAO,WAwBlB;AAEK,MAAM,OAAO,GAAG,KAAK,EAAE,IAAS,EAAE,EAAE;IACzC,IAAA,eAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC3B,IAAA,+CAAsB,EAAC,SAAS,CAAC,CAAC;IAElC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE9B,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACvD,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,oBAAoB,EAAE,OAAO,CAAC,CAAiB,CAAC;IACzF,MAAM,QAAQ,GAAG,MAAM,IAAI,wBAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChG,MAAM,IAAA,oBAAS,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC,CAAC;AAbW,QAAA,OAAO,WAalB"}
@@ -6,7 +6,9 @@ async function countAppMaps(appMapDir) {
6
6
  // This function is too verbose to be useful in this context.
7
7
  const v = (0, utils_1.verbose)();
8
8
  (0, utils_1.verbose)(false);
9
- await (0, utils_1.listAppMapFiles)(appMapDir, () => { fileCount += 1; });
9
+ await (0, utils_1.findFiles)(appMapDir, '.appmap.json', () => {
10
+ fileCount += 1;
11
+ });
10
12
  (0, utils_1.verbose)(v);
11
13
  return fileCount;
12
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"countAppMaps.js","sourceRoot":"","sources":["../../../../src/cmds/record/action/countAppMaps.ts"],"names":[],"mappings":";;AAAA,0CAA0D;AAE3C,KAAK,UAAU,YAAY,CAAC,SAAiB;IAC1D,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,6DAA6D;IAC7D,MAAM,CAAC,GAAG,IAAA,eAAO,GAAE,CAAC;IACpB,IAAA,eAAO,EAAC,KAAK,CAAC,CAAC;IACf,MAAM,IAAA,uBAAe,EAAC,SAAS,EAAE,GAAG,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAA,eAAO,EAAC,CAAC,CAAC,CAAC;IAEX,OAAO,SAAS,CAAC;AACnB,CAAC;AAVD,+BAUC"}
1
+ {"version":3,"file":"countAppMaps.js","sourceRoot":"","sources":["../../../../src/cmds/record/action/countAppMaps.ts"],"names":[],"mappings":";;AAAA,0CAAoD;AAErC,KAAK,UAAU,YAAY,CAAC,SAAiB;IAC1D,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,6DAA6D;IAC7D,MAAM,CAAC,GAAG,IAAA,eAAO,GAAE,CAAC;IACpB,IAAA,eAAO,EAAC,KAAK,CAAC,CAAC;IACf,MAAM,IAAA,iBAAS,EAAC,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE;QAC9C,SAAS,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,IAAA,eAAO,EAAC,CAAC,CAAC,CAAC;IAEX,OAAO,SAAS,CAAC;AACnB,CAAC;AAZD,+BAYC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ScanResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScanResult.js","sourceRoot":"","sources":["../../../src/cmds/scan/ScanResult.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isScanTask = void 0;
4
+ function isScanTask(task) {
5
+ return task.name === 'scan';
6
+ }
7
+ exports.isScanTask = isScanTask;
8
+ //# sourceMappingURL=ScanTask.js.map