@appland/appmap 3.102.1 → 3.104.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 (72) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/built/cmds/compare/ReportFieldCalculator.js +214 -0
  3. package/built/cmds/compare/ReportFieldCalculator.js.map +1 -0
  4. package/built/cmds/compare/SourceDiff.js +60 -0
  5. package/built/cmds/compare/SourceDiff.js.map +1 -0
  6. package/built/cmds/compare/buildFailure.js +50 -0
  7. package/built/cmds/compare/buildFailure.js.map +1 -0
  8. package/built/cmds/compare/compare.js +11 -6
  9. package/built/cmds/compare/compare.js.map +1 -1
  10. package/built/cmds/compare/deleteUnreferencedAppMaps.js +30 -0
  11. package/built/cmds/compare/deleteUnreferencedAppMaps.js.map +1 -0
  12. package/built/cmds/compare/prepareOutputDir.js +1 -1
  13. package/built/cmds/compare/prepareOutputDir.js.map +1 -1
  14. package/built/cmds/compare/reportChanges.js +71 -0
  15. package/built/cmds/compare/reportChanges.js.map +1 -0
  16. package/built/cmds/compare-report/ChangeReport.js +48 -17
  17. package/built/cmds/compare-report/ChangeReport.js.map +1 -1
  18. package/built/cmds/compare-report/MarkdownReport.js +11 -2
  19. package/built/cmds/compare-report/MarkdownReport.js.map +1 -1
  20. package/built/cmds/compare-report/Preprocessor.js +40 -10
  21. package/built/cmds/compare-report/Preprocessor.js.map +1 -1
  22. package/built/cmds/compare-report/ReportSection.js +19 -2
  23. package/built/cmds/compare-report/ReportSection.js.map +1 -1
  24. package/built/cmds/compare-report/formatAPILocation.js +18 -0
  25. package/built/cmds/compare-report/formatAPILocation.js.map +1 -0
  26. package/built/cmds/compare-report/helpers.js +27 -2
  27. package/built/cmds/compare-report/helpers.js.map +1 -1
  28. package/built/diffArchive/ChangeAnalysis.js +232 -0
  29. package/built/diffArchive/ChangeAnalysis.js.map +1 -0
  30. package/built/{cmds/compare → diffArchive}/Digests.js +1 -1
  31. package/built/diffArchive/Digests.js.map +1 -0
  32. package/built/{cmds/compare → diffArchive}/Paths.js +7 -4
  33. package/built/diffArchive/Paths.js.map +1 -0
  34. package/built/diffArchive/RevisionName.js.map +1 -0
  35. package/built/{cmds/compare → diffArchive}/SequenceDiagramDigest.js +1 -1
  36. package/built/diffArchive/SequenceDiagramDigest.js.map +1 -0
  37. package/built/{cmds/compare/DiffLoader.js → diffArchive/SourceDiff.js} +9 -9
  38. package/built/diffArchive/SourceDiff.js.map +1 -0
  39. package/built/{cmds/compare → diffArchive}/loadFindings.js +1 -1
  40. package/built/diffArchive/loadFindings.js.map +1 -0
  41. package/built/lib/ArchiveMetadata.js.map +1 -0
  42. package/built/lib/normalizeAppMapId.js.map +1 -0
  43. package/built/lib/resolvePath.js +36 -0
  44. package/built/lib/resolvePath.js.map +1 -0
  45. package/package.json +2 -1
  46. package/resources/change-report/changed-appmaps/details.hbs +3 -3
  47. package/resources/change-report/changed-appmaps/heading.hbs +1 -1
  48. package/resources/change-report/failed-tests/details.hbs +3 -2
  49. package/resources/change-report/failed-tests/heading.hbs +1 -1
  50. package/resources/change-report/findings/details.hbs +2 -6
  51. package/resources/change-report/findings/heading.hbs +4 -2
  52. package/resources/change-report/new-appmaps/details.hbs +3 -2
  53. package/resources/change-report/new-appmaps/heading.hbs +1 -1
  54. package/resources/change-report/openapi-diff/details.hbs +3 -2
  55. package/resources/change-report/openapi-diff/heading.hbs +1 -1
  56. package/resources/change-report/removed-appmaps/details.hbs +2 -2
  57. package/resources/change-report/removed-appmaps/heading.hbs +1 -1
  58. package/resources/change-report/sql-diff/details.hbs +59 -0
  59. package/resources/change-report/sql-diff/heading.hbs +14 -0
  60. package/built/cmds/archive/ArchiveMetadata.js.map +0 -1
  61. package/built/cmds/compare/ChangeReporter.js +0 -476
  62. package/built/cmds/compare/ChangeReporter.js.map +0 -1
  63. package/built/cmds/compare/DiffLoader.js.map +0 -1
  64. package/built/cmds/compare/Digests.js.map +0 -1
  65. package/built/cmds/compare/Paths.js.map +0 -1
  66. package/built/cmds/compare/RevisionName.js.map +0 -1
  67. package/built/cmds/compare/SequenceDiagramDigest.js.map +0 -1
  68. package/built/cmds/compare/loadFindings.js.map +0 -1
  69. package/built/cmds/compare-report/normalizeAppMapId.js.map +0 -1
  70. /package/built/{cmds/compare → diffArchive}/RevisionName.js +0 -0
  71. /package/built/{cmds/archive → lib}/ArchiveMetadata.js +0 -0
  72. /package/built/{cmds/compare-report → lib}/normalizeAppMapId.js +0 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,33 @@
1
+ # [@appland/appmap-v3.104.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.103.0...@appland/appmap-v3.104.0) (2023-10-20)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * Suppress findings when there are test failures ([715d60d](https://github.com/getappmap/appmap-js/commit/715d60dba81d9a9e208ee3957adc9e8c6535094d))
7
+
8
+
9
+ ### Features
10
+
11
+ * Apply section_link to sql heading ([ec56df8](https://github.com/getappmap/appmap-js/commit/ec56df8335d3fabf4b9a66d28a5caf01ed30223b))
12
+ * Format SQL details ([48503ac](https://github.com/getappmap/appmap-js/commit/48503ac9234001946e24e7be1ee93fbeeea444de))
13
+ * List new apppmaps in paragraph style ([047c749](https://github.com/getappmap/appmap-js/commit/047c74944b63e18f3ea5e52887fc0b0872427b33))
14
+ * Report SQL changes (experimental section) ([bc86bf4](https://github.com/getappmap/appmap-js/commit/bc86bf4652b42b2fcdf43228cf97915c500fbb08))
15
+ * Resolve SQL change source location ([271db9d](https://github.com/getappmap/appmap-js/commit/271db9dcde8a34c82ae86d0cc4362bf14b165ab0))
16
+ * Update SQL report formatting ([9422bea](https://github.com/getappmap/appmap-js/commit/9422beaef38a194701e44e07775c7f1032e2738d))
17
+
18
+ # [@appland/appmap-v3.103.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.102.1...@appland/appmap-v3.103.0) (2023-10-19)
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * Suppress findings when there are test failures ([451c273](https://github.com/getappmap/appmap-js/commit/451c2736790300938237102a6fdeb594654d34c0))
24
+
25
+
26
+ ### Features
27
+
28
+ * Explain the abbreviated report for test failures ([645b4d7](https://github.com/getappmap/appmap-js/commit/645b4d7afa1df506b676d4d3d1bb241468edc97f))
29
+ * Suppress report links when there are no details ([5467b0b](https://github.com/getappmap/appmap-js/commit/5467b0bb238980294efbb902d8721b52a956edcf))
30
+
1
31
  # [@appland/appmap-v3.102.1](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.102.0...@appland/appmap-v3.102.1) (2023-10-18)
2
32
 
3
33
 
@@ -0,0 +1,214 @@
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 async_1 = require("async");
7
+ const openapi_diff_1 = __importDefault(require("openapi-diff"));
8
+ const promises_1 = require("fs/promises");
9
+ const path_1 = require("path");
10
+ const sequence_diagram_1 = require("@appland/sequence-diagram");
11
+ const DiffDiagrams_1 = require("../../sequenceDiagramDiff/DiffDiagrams");
12
+ const SourceDiff_1 = require("./SourceDiff");
13
+ const loadSequenceDiagram_1 = require("./loadSequenceDiagram");
14
+ const RevisionName_1 = require("../../diffArchive/RevisionName");
15
+ const mapToRecord_1 = __importDefault(require("./mapToRecord"));
16
+ const resolvePath_1 = require("../../lib/resolvePath");
17
+ const models_1 = require("@appland/models");
18
+ const console_1 = require("console");
19
+ const utils_1 = require("../../utils");
20
+ class ReportFieldCalculator {
21
+ constructor(changeAnalysis) {
22
+ this.changeAnalysis = changeAnalysis;
23
+ this.sourceDiff = new SourceDiff_1.SourceDiff(changeAnalysis.baseRevision, changeAnalysis.headRevision, changeAnalysis.paths);
24
+ }
25
+ async sequenceDiagramDiff(changedAppMaps) {
26
+ const diffDiagrams = new DiffDiagrams_1.DiffDiagrams();
27
+ const sequenceDiagramDiff = new Map();
28
+ {
29
+ const q = (0, async_1.queue)(async (changedAppMap) => {
30
+ var _a;
31
+ const { appmap } = changedAppMap;
32
+ const sourceDiff = await this.sourceDiff.get(appmap);
33
+ if (sourceDiff)
34
+ changedAppMap.sourceDiff = sourceDiff;
35
+ const baseDiagram = await (0, loadSequenceDiagram_1.loadSequenceDiagram)(this.changeAnalysis.paths.sequenceDiagramPath(RevisionName_1.RevisionName.Base, appmap));
36
+ const headDiagram = await (0, loadSequenceDiagram_1.loadSequenceDiagram)(this.changeAnalysis.paths.sequenceDiagramPath(RevisionName_1.RevisionName.Head, appmap));
37
+ const diagramDiff = diffDiagrams.diff(baseDiagram, headDiagram);
38
+ if (diagramDiff) {
39
+ const diagramJSON = (0, sequence_diagram_1.format)(sequence_diagram_1.FormatType.JSON, diagramDiff, 'diff');
40
+ const path = this.changeAnalysis.paths.sequenceDiagramDiffPath(appmap);
41
+ await (0, promises_1.mkdir)((0, path_1.dirname)(path), { recursive: true });
42
+ await (0, promises_1.writeFile)(path, diagramJSON.diagram);
43
+ changedAppMap.sequenceDiagramDiff = (0, path_1.relative)((0, path_1.join)(this.changeAnalysis.paths.workingDir, 'diff'), path);
44
+ // Build a text snippet for each top level context.
45
+ const allActions = [...diagramDiff.rootActions];
46
+ for (let actionIndex = 0; actionIndex < diagramDiff.rootActions.length; actionIndex++) {
47
+ const action = diagramDiff.rootActions[actionIndex];
48
+ diagramDiff.rootActions = [action];
49
+ const snippet = (0, sequence_diagram_1.format)(sequence_diagram_1.FormatType.Text, diagramDiff, 'diff');
50
+ // TODO: nop if this is the empty string
51
+ if (!sequenceDiagramDiff.has(snippet.diagram))
52
+ sequenceDiagramDiff.set(snippet.diagram, []);
53
+ (_a = sequenceDiagramDiff.get(snippet.diagram)) === null || _a === void 0 ? void 0 : _a.push(appmap);
54
+ }
55
+ diagramDiff.rootActions = allActions;
56
+ }
57
+ }, 2);
58
+ q.error(console.warn);
59
+ changedAppMaps.forEach((appmap) => q.push(appmap));
60
+ if (!q.idle())
61
+ await q.drain();
62
+ }
63
+ const record = (0, mapToRecord_1.default)(sequenceDiagramDiff);
64
+ for (const key of Object.keys(record)) {
65
+ record[key] = record[key].sort();
66
+ }
67
+ return record;
68
+ }
69
+ async apiDiff(reportRemoved) {
70
+ const readOpenAPI = async (revision) => {
71
+ const openapiPath = this.changeAnalysis.paths.openapiPath(revision);
72
+ try {
73
+ return await (0, promises_1.readFile)(openapiPath, 'utf-8');
74
+ }
75
+ catch (e) {
76
+ if (e.code === 'ENOENT')
77
+ return undefined;
78
+ throw e;
79
+ }
80
+ };
81
+ const baseDefinitions = await readOpenAPI(RevisionName_1.RevisionName.Base);
82
+ const headDefinitions = await readOpenAPI(RevisionName_1.RevisionName.Head);
83
+ if (!baseDefinitions || !headDefinitions)
84
+ return;
85
+ let apiDiff;
86
+ {
87
+ const result = await openapi_diff_1.default.diffSpecs({
88
+ sourceSpec: {
89
+ content: baseDefinitions,
90
+ location: 'base',
91
+ format: 'openapi3',
92
+ },
93
+ destinationSpec: {
94
+ content: headDefinitions,
95
+ location: 'head',
96
+ format: 'openapi3',
97
+ },
98
+ });
99
+ if (!reportRemoved && result.breakingDifferencesFound) {
100
+ const diffOutcomeFailure = result;
101
+ diffOutcomeFailure.breakingDifferencesFound = false;
102
+ delete diffOutcomeFailure['breakingDifferences'];
103
+ }
104
+ if (result.breakingDifferencesFound) {
105
+ console.log('Breaking change found!');
106
+ }
107
+ apiDiff = result;
108
+ }
109
+ return apiDiff;
110
+ }
111
+ async sqlDiff(reportRemoved) {
112
+ var _a, _b, _c, _d;
113
+ const collectStrings = async (revisionName, appmapName, indexFileName, strings) => {
114
+ const indexFilePath = this.changeAnalysis.paths.indexFilePath(revisionName, appmapName, indexFileName);
115
+ if (!(await (0, utils_1.exists)(indexFilePath))) {
116
+ (0, console_1.warn)(`Index file ${indexFilePath} does not exist!`);
117
+ return Promise.resolve();
118
+ }
119
+ const values = JSON.parse(await (0, promises_1.readFile)(indexFilePath, 'utf-8'));
120
+ for (const value of values)
121
+ strings.add(value);
122
+ };
123
+ const loadSQL = async (revisionName, appmaps) => {
124
+ const queryStrings = new Set();
125
+ const tableStrings = new Set();
126
+ if (!appmaps)
127
+ return { queries: queryStrings, tables: tableStrings };
128
+ for (const appmapName of appmaps) {
129
+ await collectStrings(revisionName, appmapName, 'canonical.sqlNormalized.json', queryStrings);
130
+ await collectStrings(revisionName, appmapName, 'canonical.sqlTables.json', tableStrings);
131
+ }
132
+ console.info(`Found ${queryStrings.size} queries and ${tableStrings.size} tables for ${revisionName} revision`);
133
+ return { queries: queryStrings, tables: tableStrings };
134
+ };
135
+ const { queries: baseQueries, tables: baseTables } = await loadSQL(RevisionName_1.RevisionName.Base, this.changeAnalysis.baseAppMaps);
136
+ const { queries: headQueries, tables: headTables } = await loadSQL(RevisionName_1.RevisionName.Head, this.changeAnalysis.headAppMaps);
137
+ const newQueryStrings = [...headQueries].filter((query) => !baseQueries.has(query)).sort();
138
+ const removedQueries = reportRemoved
139
+ ? [...baseQueries].filter((query) => !headQueries.has(query)).sort()
140
+ : [];
141
+ const newTables = [...headTables].filter((table) => !baseTables.has(table)).sort();
142
+ const removedTables = reportRemoved
143
+ ? [...baseTables].filter((table) => !headTables.has(table)).sort()
144
+ : [];
145
+ const newQuerySourceLinesMap = new Map();
146
+ const newQueryAppMapsMap = new Map();
147
+ for (const appmapName of this.changeAnalysis.headAppMaps || []) {
148
+ const indexFilePath = this.changeAnalysis.paths.indexFilePath(RevisionName_1.RevisionName.Head, appmapName, 'canonical.sqlNormalized.json');
149
+ const values = JSON.parse(await (0, promises_1.readFile)(indexFilePath, 'utf-8'));
150
+ const newQueriesInAppMap = new Set();
151
+ for (const value of values) {
152
+ if (newQueryStrings.includes(value)) {
153
+ if (!newQueryAppMapsMap.has(value)) {
154
+ newQueryAppMapsMap.set(value, []);
155
+ }
156
+ newQueriesInAppMap.add(value);
157
+ (_a = newQueryAppMapsMap.get(value)) === null || _a === void 0 ? void 0 : _a.push(appmapName);
158
+ }
159
+ }
160
+ const appmapFileName = this.changeAnalysis.paths.appmapPath(RevisionName_1.RevisionName.Head, appmapName);
161
+ if (newQueriesInAppMap.size) {
162
+ const appmap = (0, models_1.buildAppMap)()
163
+ .source(await (0, promises_1.readFile)(appmapFileName, 'utf-8'))
164
+ .build();
165
+ const database = appmap.classMap.sqlObject;
166
+ if (!database) {
167
+ (0, console_1.warn)(`No Database found in AppMap ${appmapFileName}`);
168
+ }
169
+ else {
170
+ for (const query of database.children) {
171
+ for (const queryEvent of query.events) {
172
+ if (queryEvent.sqlQuery && ((_b = queryEvent.sql) === null || _b === void 0 ? void 0 : _b.database_type)) {
173
+ const sqlNormalized = (0, models_1.normalizeSQL)(queryEvent.sqlQuery, queryEvent.sql.database_type);
174
+ if (newQueriesInAppMap.has(sqlNormalized)) {
175
+ if (!newQuerySourceLinesMap.has(sqlNormalized))
176
+ newQuerySourceLinesMap.set(sqlNormalized, []);
177
+ let sourcePath;
178
+ let sourceLine;
179
+ for (const ancestor of queryEvent.ancestors()) {
180
+ const { path } = ancestor;
181
+ if (!path)
182
+ continue;
183
+ sourcePath = await (0, resolvePath_1.resolvePath)(path, (_c = appmap.metadata.language) === null || _c === void 0 ? void 0 : _c.name);
184
+ if (sourcePath) {
185
+ sourceLine = ancestor.lineno;
186
+ break;
187
+ }
188
+ }
189
+ if (sourcePath) {
190
+ const sourceLocation = [sourcePath, sourceLine].filter(Boolean).join(':');
191
+ (_d = newQuerySourceLinesMap.get(sqlNormalized)) === null || _d === void 0 ? void 0 : _d.push(sourceLocation);
192
+ }
193
+ }
194
+ }
195
+ }
196
+ }
197
+ }
198
+ }
199
+ }
200
+ const newQueryAppMaps = [...newQueryAppMapsMap.keys()]
201
+ .sort()
202
+ .reduce((memo, key) => {
203
+ memo.push({
204
+ query: key,
205
+ appmaps: newQueryAppMapsMap.get(key) || [],
206
+ sourceLocations: [...new Set(newQuerySourceLinesMap.get(key) || [])].sort(),
207
+ });
208
+ return memo;
209
+ }, new Array());
210
+ return { newQueries: newQueryAppMaps, removedQueries, newTables, removedTables };
211
+ }
212
+ }
213
+ exports.default = ReportFieldCalculator;
214
+ //# sourceMappingURL=ReportFieldCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportFieldCalculator.js","sourceRoot":"","sources":["../../../src/cmds/compare/ReportFieldCalculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
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.SourceDiff = void 0;
7
+ const promises_1 = require("fs/promises");
8
+ const path_1 = require("path");
9
+ const models_1 = require("@appland/models");
10
+ const assert_1 = __importDefault(require("assert"));
11
+ const RevisionName_1 = require("../../diffArchive/RevisionName");
12
+ const SourceDiff_1 = __importDefault(require("../../diffArchive/SourceDiff"));
13
+ class SourceDiff {
14
+ constructor(baseRevision, headRevision, paths) {
15
+ this.baseRevision = baseRevision;
16
+ this.headRevision = headRevision;
17
+ this.paths = paths;
18
+ this.diffs = new Map();
19
+ this.classMaps = new Map();
20
+ this.diffLoader = new SourceDiff_1.default(baseRevision, headRevision);
21
+ }
22
+ async get(appmap) {
23
+ [RevisionName_1.RevisionName.Base, RevisionName_1.RevisionName.Head].forEach((revisionName) => (0, assert_1.default)(!appmap.startsWith(revisionName), `AppMap ${appmap} must not start with a revision name`));
24
+ const yieldDiff = (diff) => (diff !== '' ? diff : undefined);
25
+ let diff = this.diffs.get(appmap);
26
+ if (diff)
27
+ return Promise.resolve(yieldDiff(diff));
28
+ diff = await this.loadDiff(appmap);
29
+ this.diffs.set(appmap, diff);
30
+ return yieldDiff(diff);
31
+ }
32
+ async loadDiff(appmap) {
33
+ const loadClassMap = async () => {
34
+ const classMapData = JSON.parse(await (0, promises_1.readFile)((0, path_1.join)(this.paths.classMapPath(RevisionName_1.RevisionName.Head, appmap)), 'utf-8'));
35
+ return new models_1.ClassMap(classMapData);
36
+ };
37
+ const classMap = this.classMaps.get(appmap) || (await loadClassMap());
38
+ const sourcePaths = new Set();
39
+ const sourcePathRoots = new Set();
40
+ classMap.visit((codeObject) => {
41
+ if (!codeObject.location)
42
+ return;
43
+ const path = codeObject.location.split(':')[0];
44
+ if (path.indexOf('.') && !path.startsWith('<') && !path.includes('#') && !(0, path_1.isAbsolute)(path)) {
45
+ sourcePaths.add(path);
46
+ const pathTokens = path.split('/');
47
+ if (pathTokens.length > 0)
48
+ sourcePathRoots.add(pathTokens[0]);
49
+ }
50
+ });
51
+ await this.diffLoader.update(sourcePathRoots);
52
+ const result = [...sourcePaths]
53
+ .sort()
54
+ .map((path) => this.diffLoader.lookupDiff(path))
55
+ .join('');
56
+ return result;
57
+ }
58
+ }
59
+ exports.SourceDiff = SourceDiff;
60
+ //# sourceMappingURL=SourceDiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourceDiff.js","sourceRoot":"","sources":["../../../src/cmds/compare/SourceDiff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildFailure = void 0;
4
+ const promises_1 = require("fs/promises");
5
+ const path_1 = require("path");
6
+ const RevisionName_1 = require("../../diffArchive/RevisionName");
7
+ const utils_1 = require("../../utils");
8
+ const console_1 = require("console");
9
+ const reportChanges_1 = require("./reportChanges");
10
+ function buildFailure(appMapMetadata, snippetWidth = reportChanges_1.DEFAULT_SNIPPET_WIDTH) {
11
+ return async (appmap) => {
12
+ var _a;
13
+ const metadata = appMapMetadata[RevisionName_1.RevisionName.Head].get(appmap);
14
+ if (!metadata) {
15
+ (0, console_1.warn)(`No AppMap metadata available for failed test ${appmap}`);
16
+ return;
17
+ }
18
+ const testFailure = {
19
+ appmap,
20
+ name: metadata.name,
21
+ };
22
+ if (metadata.source_location) {
23
+ testFailure.testLocation = (0, path_1.isAbsolute)(metadata.source_location)
24
+ ? (0, path_1.relative)(process.cwd(), metadata.source_location)
25
+ : metadata.source_location;
26
+ }
27
+ if (metadata.test_failure) {
28
+ testFailure.failureMessage = metadata.test_failure.message;
29
+ const location = metadata.test_failure.location;
30
+ if (location) {
31
+ testFailure.failureLocation = location;
32
+ const [path, linenoStr] = location.split(':');
33
+ if (linenoStr && (await (0, utils_1.exists)(path))) {
34
+ const lineno = parseInt(linenoStr, 10);
35
+ const failureCauseCode = (await (0, promises_1.readFile)(path, 'utf-8')).split('\n');
36
+ const minIndex = Math.max(lineno - snippetWidth, 0);
37
+ const maxIndex = Math.min(lineno + snippetWidth, failureCauseCode.length);
38
+ testFailure.testSnippet = {
39
+ codeFragment: failureCauseCode.slice(minIndex, maxIndex).join('\n'),
40
+ startLine: minIndex + 1,
41
+ language: (_a = metadata.language) === null || _a === void 0 ? void 0 : _a.name,
42
+ };
43
+ }
44
+ }
45
+ }
46
+ return testFailure;
47
+ };
48
+ }
49
+ exports.buildFailure = buildFailure;
50
+ //# sourceMappingURL=buildFailure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildFailure.js","sourceRoot":"","sources":["../../../src/cmds/compare/buildFailure.ts"],"names":[],"mappings":";;;AAAA,0CAAuC;AACvC,+BAA4C;AAC5C,iEAA8D;AAE9D,uCAAqC;AACrC,qCAA+B;AAE/B,mDAAwD;AAExD,SAAgB,YAAY,CAC1B,cAA8B,EAC9B,YAAY,GAAG,qCAAqB;IAEpC,OAAO,KAAK,EAAE,MAAkB,EAAE,EAAE;;QAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,2BAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE;YACb,IAAA,cAAI,EAAC,gDAAgD,MAAM,EAAE,CAAC,CAAC;YAC/D,OAAO;SACR;QACD,MAAM,WAAW,GAAG;YAClB,MAAM;YACN,IAAI,EAAE,QAAQ,CAAC,IAAI;SACL,CAAC;QACjB,IAAI,QAAQ,CAAC,eAAe,EAAE;YAC5B,WAAW,CAAC,YAAY,GAAG,IAAA,iBAAU,EAAC,QAAQ,CAAC,eAAe,CAAC;gBAC7D,CAAC,CAAC,IAAA,eAAQ,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,eAAe,CAAC;gBACnD,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;SAC9B;QACD,IAAI,QAAQ,CAAC,YAAY,EAAE;YACzB,WAAW,CAAC,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC;YAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC;YAChD,IAAI,QAAQ,EAAE;gBACZ,WAAW,CAAC,eAAe,GAAG,QAAQ,CAAC;gBACvC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9C,IAAI,SAAS,IAAI,CAAC,MAAM,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC,EAAE;oBACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;oBACvC,MAAM,gBAAgB,GAAG,CAAC,MAAM,IAAA,mBAAQ,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC;oBACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,YAAY,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBAC1E,WAAW,CAAC,WAAW,GAAG;wBACxB,YAAY,EAAE,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;wBACnE,SAAS,EAAE,QAAQ,GAAG,CAAC;wBACvB,QAAQ,EAAE,MAAA,QAAQ,CAAC,QAAQ,0CAAE,IAAI;qBAClC,CAAC;iBACH;aACF;SACF;QACD,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AAxCD,oCAwCC"}
@@ -35,7 +35,9 @@ const detectRevisions_1 = __importDefault(require("./detectRevisions"));
35
35
  const prepareOutputDir_1 = require("./prepareOutputDir");
36
36
  const utils_1 = require("../../utils");
37
37
  const loadAppMapConfig_1 = __importDefault(require("../../lib/loadAppMapConfig"));
38
- const ChangeReporter_1 = __importStar(require("./ChangeReporter"));
38
+ const ChangeAnalysis_1 = require("../../diffArchive/ChangeAnalysis");
39
+ const reportChanges_1 = __importStar(require("./reportChanges"));
40
+ const deleteUnreferencedAppMaps_1 = __importDefault(require("./deleteUnreferencedAppMaps"));
39
41
  exports.command = 'compare';
40
42
  exports.describe = 'Compare runtime code behavior between base and head revisions';
41
43
  const builder = (args) => {
@@ -92,13 +94,16 @@ const handler = async (argv) => {
92
94
  throw new Error(`Unable to load appmap.yml config file`);
93
95
  const { baseRevision, headRevision } = await (0, detectRevisions_1.default)(baseRevisionArg, headRevisionArg);
94
96
  const outputDir = await (0, prepareOutputDir_1.prepareOutputDir)(outputDirArg, baseRevision, headRevision, argv.clobberOutputDir, rl);
95
- const changeReporter = new ChangeReporter_1.default(baseRevision, headRevision, outputDir, srcDir);
96
- await changeReporter.initialize();
97
- const options = new ChangeReporter_1.ChangeReportOptions();
97
+ const options = new reportChanges_1.ChangeReportOptions();
98
98
  options.reportRemoved = reportRemoved;
99
- const report = await changeReporter.report(options);
99
+ const changeAnalysis = await (0, ChangeAnalysis_1.analyzeChanges)(outputDir, srcDir, baseRevision, headRevision);
100
+ const report = await (0, reportChanges_1.default)(changeAnalysis, options);
101
+ // const changeReporter = new ChangeReporter(baseRevision, headRevision, outputDir, srcDir);
102
+ // await changeReporter.initialize();
103
+ // const report = await changeReporter.report(options);
100
104
  if (deleteUnreferenced) {
101
- await changeReporter.deleteUnreferencedAppMaps();
105
+ const isPathReferenced = (revisionName, appmap) => changeAnalysis.referencedAppMaps.test(revisionName, appmap);
106
+ await (0, deleteUnreferencedAppMaps_1.default)(changeAnalysis.paths, isPathReferenced);
102
107
  }
103
108
  await (0, promises_1.writeFile)((0, path_1.join)(outputDir, 'change-report.json'), JSON.stringify(report, null, 2));
104
109
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/cmds/compare/compare.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/cmds/compare/compare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const promises_1 = require("fs/promises");
4
+ const RevisionName_1 = require("../../diffArchive/RevisionName");
5
+ const utils_1 = require("../../utils");
6
+ const ui_1 = require("./ui");
7
+ const console_1 = require("console");
8
+ async function deleteUnreferencedAppMaps(paths, referencedAppMaps) {
9
+ const deleteAppMap = async (revisionName, appmap) => {
10
+ if ((0, utils_1.verbose)())
11
+ console.log((0, ui_1.mutedStyle)(`AppMap ${revisionName}/${appmap} is unreferenced so it will be deleted.`));
12
+ const appmapPath = paths.appmapPath(revisionName, appmap);
13
+ const appmapIndexDir = appmapPath.slice(0, -'.appmap.json'.length);
14
+ await (0, promises_1.rm)(appmapPath);
15
+ await (0, promises_1.rm)(appmapIndexDir, { recursive: true });
16
+ };
17
+ for (const revisionName of [RevisionName_1.RevisionName.Base, RevisionName_1.RevisionName.Head]) {
18
+ for (const appmap of await paths.appmaps(revisionName)) {
19
+ if (!referencedAppMaps(revisionName, appmap))
20
+ try {
21
+ await deleteAppMap(revisionName, appmap);
22
+ }
23
+ catch (err) {
24
+ (0, console_1.warn)(`Failed to delete unreferenced AppMap ${revisionName}/${appmap}. Will continue...`);
25
+ }
26
+ }
27
+ }
28
+ }
29
+ exports.default = deleteUnreferencedAppMaps;
30
+ //# sourceMappingURL=deleteUnreferencedAppMaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteUnreferencedAppMaps.js","sourceRoot":"","sources":["../../../src/cmds/compare/deleteUnreferencedAppMaps.ts"],"names":[],"mappings":";;AAAA,0CAAiC;AAEjC,iEAA8D;AAC9D,uCAAsC;AAEtC,6BAAkC;AAClC,qCAA+B;AAEhB,KAAK,UAAU,yBAAyB,CACrD,KAAY,EACZ,iBAA8E;IAE9E,MAAM,YAAY,GAAG,KAAK,EAAE,YAA0B,EAAE,MAAkB,EAAE,EAAE;QAC5E,IAAI,IAAA,eAAO,GAAE;YACX,OAAO,CAAC,GAAG,CACT,IAAA,eAAU,EAAC,UAAU,YAAY,IAAI,MAAM,yCAAyC,CAAC,CACtF,CAAC;QACJ,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,IAAA,aAAE,EAAC,UAAU,CAAC,CAAC;QACrB,MAAM,IAAA,aAAE,EAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,KAAK,MAAM,YAAY,IAAI,CAAC,2BAAY,CAAC,IAAI,EAAE,2BAAY,CAAC,IAAI,CAAC,EAAE;QACjE,KAAK,MAAM,MAAM,IAAI,MAAM,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YACtD,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC;gBAC1C,IAAI;oBACF,MAAM,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;iBAC1C;gBAAC,OAAO,GAAG,EAAE;oBACZ,IAAA,cAAI,EAAC,wCAAwC,YAAY,IAAI,MAAM,oBAAoB,CAAC,CAAC;iBAC1F;SACJ;KACF;AACH,CAAC;AAzBD,4CAyBC"}
@@ -4,7 +4,7 @@ exports.prepareOutputDir = void 0;
4
4
  const promises_1 = require("fs/promises");
5
5
  const path_1 = require("path");
6
6
  const utils_1 = require("../../utils");
7
- const RevisionName_1 = require("./RevisionName");
7
+ const RevisionName_1 = require("../../diffArchive/RevisionName");
8
8
  const ui_1 = require("./ui");
9
9
  const ValidationError_1 = require("./ValidationError");
10
10
  async function prepareOutputDir(outputDirArg, baseRevision, headRevision, clobberOutputDir, rl) {
@@ -1 +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"}
1
+ {"version":3,"file":"prepareOutputDir.js","sourceRoot":"","sources":["../../../src/cmds/compare/prepareOutputDir.ts"],"names":[],"mappings":";;;AAAA,0CAAwC;AACxC,+BAA4B;AAE5B,uCAAqC;AACrC,iEAA8D;AAC9D,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,71 @@
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.ChangeReportOptions = exports.DEFAULT_SNIPPET_WIDTH = void 0;
7
+ const RevisionName_1 = require("../../diffArchive/RevisionName");
8
+ const ReportFieldCalculator_1 = __importDefault(require("./ReportFieldCalculator"));
9
+ const buildFailure_1 = require("./buildFailure");
10
+ const utils_1 = require("../../utils");
11
+ const mapToRecord_1 = __importDefault(require("./mapToRecord"));
12
+ exports.DEFAULT_SNIPPET_WIDTH = 10;
13
+ class ChangeReportOptions {
14
+ constructor() {
15
+ this.reportRemoved = true;
16
+ this.snippetWidth = exports.DEFAULT_SNIPPET_WIDTH;
17
+ }
18
+ }
19
+ exports.ChangeReportOptions = ChangeReportOptions;
20
+ async function reportChanges(changeAnalysis, options) {
21
+ const { appMapMetadata, failedAppMaps } = changeAnalysis;
22
+ let apiDiff;
23
+ const generator = new ReportFieldCalculator_1.default(changeAnalysis);
24
+ const failureFn = (0, buildFailure_1.buildFailure)(appMapMetadata, options.snippetWidth);
25
+ const testFailures = new Array();
26
+ for (const appmap of failedAppMaps) {
27
+ const testFailure = await failureFn(appmap);
28
+ if (testFailure) {
29
+ testFailures.push(testFailure);
30
+ }
31
+ }
32
+ let sqlDiff;
33
+ if (testFailures.length === 0) {
34
+ apiDiff = await generator.apiDiff(options.reportRemoved);
35
+ sqlDiff = await generator.sqlDiff(options.reportRemoved);
36
+ }
37
+ const sequenceDiagramExists = async (revisionName, appmap) => {
38
+ const path = changeAnalysis.paths.sequenceDiagramPath(revisionName, appmap);
39
+ return await (0, utils_1.exists)(path);
40
+ };
41
+ // Limit AppMap metadata to only those AppMaps that have a sequence diagram.
42
+ for (const revisionName of [RevisionName_1.RevisionName.Base, RevisionName_1.RevisionName.Head]) {
43
+ const metadataByPath = appMapMetadata[revisionName];
44
+ for (const appmap of metadataByPath.keys()) {
45
+ if (!(await sequenceDiagramExists(revisionName, appmap)))
46
+ metadataByPath.delete(appmap);
47
+ }
48
+ }
49
+ const changedAppMaps = changeAnalysis.changedAppMaps.map((appmap) => ({ appmap }));
50
+ const sequenceDiagramDiff = await generator.sequenceDiagramDiff(changedAppMaps);
51
+ const result = {
52
+ testFailures,
53
+ newAppMaps: changeAnalysis.newAppMaps,
54
+ removedAppMaps: changeAnalysis.removedAppMaps,
55
+ changedAppMaps,
56
+ sequenceDiagramDiff,
57
+ appMapMetadata: {
58
+ [RevisionName_1.RevisionName.Base]: (0, mapToRecord_1.default)(appMapMetadata[RevisionName_1.RevisionName.Base]),
59
+ [RevisionName_1.RevisionName.Head]: (0, mapToRecord_1.default)(appMapMetadata[RevisionName_1.RevisionName.Head]),
60
+ },
61
+ };
62
+ if (changeAnalysis.findingDiff)
63
+ result.findingDiff = changeAnalysis.findingDiff;
64
+ if (sqlDiff)
65
+ result.sqlDiff = sqlDiff;
66
+ if (apiDiff)
67
+ result.apiDiff = apiDiff;
68
+ return result;
69
+ }
70
+ exports.default = reportChanges;
71
+ //# sourceMappingURL=reportChanges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reportChanges.js","sourceRoot":"","sources":["../../../src/cmds/compare/reportChanges.ts"],"names":[],"mappings":"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"}