@appland/appmap 3.96.1 → 3.96.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/built/cmds/archive/analyzeTask.js +62 -0
- package/built/cmds/archive/analyzeTask.js.map +1 -0
- package/built/cmds/archive/analyzeWorker.js +4 -46
- package/built/cmds/archive/analyzeWorker.js.map +1 -1
- package/built/fingerprint/fingerprinter.js +3 -1
- package/built/fingerprint/fingerprinter.js.map +1 -1
- package/built/html/appmap.js +86 -86
- package/built/html/appmap.js.map +3 -3
- package/built/html/sequenceDiagram.js +87 -87
- package/built/html/sequenceDiagram.js.map +3 -3
- package/built/lib/processAppMapDir.js +12 -6
- package/built/lib/processAppMapDir.js.map +1 -1
- package/built/lib/workerPool.js +2 -0
- package/built/lib/workerPool.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [@appland/appmap-v3.96.3](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.96.2...@appland/appmap-v3.96.3) (2023-09-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* update components to major version 3 ([8983a1f](https://github.com/getappmap/appmap-js/commit/8983a1f0a7acbeaada0a4c4e8cd5eea19b7c9667))
|
|
7
|
+
|
|
8
|
+
# [@appland/appmap-v3.96.2](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.96.1...@appland/appmap-v3.96.2) (2023-09-14)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* Handle malformed appmaps in analysis step ([f72d119](https://github.com/getappmap/appmap-js/commit/f72d1191d8dda0a57902a2ef9bba0852af34a23e))
|
|
14
|
+
|
|
1
15
|
# [@appland/appmap-v3.96.1](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.96.0...@appland/appmap-v3.96.1) (2023-09-12)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -0,0 +1,62 @@
|
|
|
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.analyzeTask = void 0;
|
|
7
|
+
const ScanTask_1 = require("../scan/ScanTask");
|
|
8
|
+
const SequenceDiagramTask_1 = require("../sequenceDiagram/SequenceDiagramTask");
|
|
9
|
+
const promises_1 = require("fs/promises");
|
|
10
|
+
const scanner_1 = require("@appland/scanner");
|
|
11
|
+
const path_1 = require("path");
|
|
12
|
+
const buildFilter_1 = __importDefault(require("./buildFilter"));
|
|
13
|
+
const sequence_diagram_1 = require("@appland/sequence-diagram");
|
|
14
|
+
const IndexTask_1 = require("../index/IndexTask");
|
|
15
|
+
const fingerprinter_1 = __importDefault(require("../../fingerprint/fingerprinter"));
|
|
16
|
+
const models_1 = require("@appland/models");
|
|
17
|
+
async function analyzeTask(task) {
|
|
18
|
+
var _a, _b;
|
|
19
|
+
const writeIndexFile = async (data, fileName) => {
|
|
20
|
+
const indexDir = (0, path_1.join)((0, path_1.dirname)(task.appmapFile), (0, path_1.basename)(task.appmapFile, '.appmap.json'));
|
|
21
|
+
await (0, promises_1.writeFile)((0, path_1.join)(indexDir, fileName), data);
|
|
22
|
+
};
|
|
23
|
+
let result;
|
|
24
|
+
if ((0, IndexTask_1.isIndexTask)(task)) {
|
|
25
|
+
const handler = new fingerprinter_1.default();
|
|
26
|
+
handler.maxFileSizeInBytes = undefined; // This has already been checked
|
|
27
|
+
const indexResult = await handler.fingerprint(task.appmapFile);
|
|
28
|
+
if (indexResult)
|
|
29
|
+
result = indexResult;
|
|
30
|
+
// const indexResult = await new Promise<IndexResult>((resolve) => {
|
|
31
|
+
// handler.on('index', async (data) => {
|
|
32
|
+
// resolve(data);
|
|
33
|
+
// });
|
|
34
|
+
// handler.fingerprint(task.appmapFile);
|
|
35
|
+
// });
|
|
36
|
+
// result = indexResult;
|
|
37
|
+
}
|
|
38
|
+
else if ((0, ScanTask_1.isScanTask)(task)) {
|
|
39
|
+
const scanResults = await (0, scanner_1.scan)(task.appmapFile, 'appmap-scanner.yml');
|
|
40
|
+
await writeIndexFile(JSON.stringify(scanResults, null, 2), 'appmap-findings.json');
|
|
41
|
+
result = { findingsCount: scanResults.findings.length };
|
|
42
|
+
}
|
|
43
|
+
else if ((0, SequenceDiagramTask_1.isSequenceDiagramTask)(task)) {
|
|
44
|
+
const appmap = (0, models_1.buildAppMap)()
|
|
45
|
+
.source(await (0, promises_1.readFile)(task.appmapFile, 'utf8'))
|
|
46
|
+
.build();
|
|
47
|
+
const language = ((_b = (_a = appmap.metadata) === null || _a === void 0 ? void 0 : _a.language) === null || _b === void 0 ? void 0 : _b.name) || 'unknown';
|
|
48
|
+
const filter = (0, buildFilter_1.default)(language, task.compareFilter);
|
|
49
|
+
const filteredAppMap = filter.filter(appmap, []);
|
|
50
|
+
const specification = sequence_diagram_1.Specification.build(filteredAppMap, task.specOptions);
|
|
51
|
+
const diagram = (0, sequence_diagram_1.buildDiagram)(task.appmapFile, filteredAppMap, specification);
|
|
52
|
+
const diagramData = (0, sequence_diagram_1.format)(sequence_diagram_1.FormatType.JSON, diagram, task.appmapFile).diagram;
|
|
53
|
+
await writeIndexFile(diagramData, 'sequence.json');
|
|
54
|
+
result = {};
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
throw new Error(`Unknown task`);
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
exports.analyzeTask = analyzeTask;
|
|
62
|
+
//# sourceMappingURL=analyzeTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzeTask.js","sourceRoot":"","sources":["../../../src/cmds/archive/analyzeTask.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAwD;AACxD,gFAAoG;AAGpG,0CAAwD;AACxD,8CAAwC;AACxC,+BAA+C;AAC/C,gEAAsD;AACtD,gEAA4F;AAC5F,kDAA4D;AAE5D,oFAA4D;AAC5D,4CAA8C;AAEvC,KAAK,UAAU,WAAW,CAC/B,IAAgD;;IAEhD,MAAM,cAAc,GAAG,KAAK,EAAE,IAAY,EAAE,QAAgB,EAAE,EAAE;QAC9D,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,IAAA,cAAO,EAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAA,eAAQ,EAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;QAC3F,MAAM,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,IAAI,MAAoE,CAAC;IACzE,IAAI,IAAA,uBAAW,EAAC,IAAI,CAAC,EAAE;QACrB,MAAM,OAAO,GAAG,IAAI,uBAAa,EAAE,CAAC;QACpC,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC,gCAAgC;QACxE,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,IAAI,WAAW;YAAE,MAAM,GAAG,WAAW,CAAC;QAEtC,oEAAoE;QACpE,0CAA0C;QAC1C,qBAAqB;QACrB,QAAQ;QAER,0CAA0C;QAC1C,MAAM;QACN,wBAAwB;KACzB;SAAM,IAAI,IAAA,qBAAU,EAAC,IAAI,CAAC,EAAE;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAA,cAAI,EAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QACtE,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;QACnF,MAAM,GAAG,EAAE,aAAa,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;KACzD;SAAM,IAAI,IAAA,2CAAqB,EAAC,IAAI,CAAC,EAAE;QACtC,MAAM,MAAM,GAAG,IAAA,oBAAW,GAAE;aACzB,MAAM,CAAC,MAAM,IAAA,mBAAQ,EAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;aAC/C,KAAK,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,CAAA,MAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,QAAQ,0CAAE,IAAI,KAAI,SAAS,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,QAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACrE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,aAAa,GAAG,gCAAa,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAA,+BAAY,EAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;QAC7E,MAAM,WAAW,GAAG,IAAA,yBAAM,EAAC,6BAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;QAC9E,MAAM,cAAc,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACnD,MAAM,GAAG,EAAE,CAAC;KACb;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;KACjC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AA5CD,kCA4CC"}
|
|
@@ -9,64 +9,22 @@ const worker_threads_1 = require("worker_threads");
|
|
|
9
9
|
const models_1 = require("@appland/models");
|
|
10
10
|
const sqlErrorLog_1 = __importDefault(require("../../lib/sqlErrorLog"));
|
|
11
11
|
const utils_1 = require("../../utils");
|
|
12
|
-
const ScanTask_1 = require("../scan/ScanTask");
|
|
13
|
-
const SequenceDiagramTask_1 = require("../sequenceDiagram/SequenceDiagramTask");
|
|
14
12
|
const promises_1 = require("fs/promises");
|
|
15
|
-
const
|
|
16
|
-
const path_1 = require("path");
|
|
17
|
-
const buildFilter_1 = __importDefault(require("./buildFilter"));
|
|
18
|
-
const sequence_diagram_1 = require("@appland/sequence-diagram");
|
|
19
|
-
const IndexTask_1 = require("../index/IndexTask");
|
|
20
|
-
const fingerprinter_1 = __importDefault(require("../../fingerprint/fingerprinter"));
|
|
13
|
+
const analyzeTask_1 = require("./analyzeTask");
|
|
21
14
|
(0, models_1.setSQLErrorHandler)(sqlErrorLog_1.default);
|
|
22
15
|
worker_threads_1.parentPort.on('message', async (task) => {
|
|
23
|
-
var _a, _b;
|
|
24
16
|
(0, assert_1.default)(worker_threads_1.parentPort);
|
|
25
17
|
if (task.verbose)
|
|
26
18
|
(0, utils_1.verbose)(task.verbose);
|
|
27
|
-
const writeIndexFile = async (data, fileName) => {
|
|
28
|
-
const indexDir = (0, path_1.join)((0, path_1.dirname)(task.appmapFile), (0, path_1.basename)(task.appmapFile, '.appmap.json'));
|
|
29
|
-
await (0, promises_1.writeFile)((0, path_1.join)(indexDir, fileName), data);
|
|
30
|
-
};
|
|
31
19
|
try {
|
|
32
20
|
const stats = await (0, promises_1.stat)(task.appmapFile);
|
|
33
21
|
if (stats.size > task.maxSize) {
|
|
34
22
|
worker_threads_1.parentPort.postMessage({ oversized: true });
|
|
35
23
|
return;
|
|
36
24
|
}
|
|
37
|
-
|
|
38
|
-
if (
|
|
39
|
-
|
|
40
|
-
handler.maxFileSizeInBytes = undefined; // This has already been checked
|
|
41
|
-
result = await new Promise((resolve) => {
|
|
42
|
-
handler.on('index', ({ metadata, numEvents }) => {
|
|
43
|
-
resolve({ metadata, numEvents });
|
|
44
|
-
});
|
|
45
|
-
handler.fingerprint(task.appmapFile);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
else if ((0, ScanTask_1.isScanTask)(task)) {
|
|
49
|
-
const scanResults = await (0, scanner_1.scan)(task.appmapFile, 'appmap-scanner.yml');
|
|
50
|
-
await writeIndexFile(JSON.stringify(scanResults, null, 2), 'appmap-findings.json');
|
|
51
|
-
result = { findingsCount: scanResults.findings.length };
|
|
52
|
-
}
|
|
53
|
-
else if ((0, SequenceDiagramTask_1.isSequenceDiagramTask)(task)) {
|
|
54
|
-
const appmap = (0, models_1.buildAppMap)()
|
|
55
|
-
.source(await (0, promises_1.readFile)(task.appmapFile, 'utf8'))
|
|
56
|
-
.build();
|
|
57
|
-
const language = ((_b = (_a = appmap.metadata) === null || _a === void 0 ? void 0 : _a.language) === null || _b === void 0 ? void 0 : _b.name) || 'unknown';
|
|
58
|
-
const filter = (0, buildFilter_1.default)(language, task.compareFilter);
|
|
59
|
-
const filteredAppMap = filter.filter(appmap, []);
|
|
60
|
-
const specification = sequence_diagram_1.Specification.build(filteredAppMap, task.specOptions);
|
|
61
|
-
const diagram = (0, sequence_diagram_1.buildDiagram)(task.appmapFile, filteredAppMap, specification);
|
|
62
|
-
const diagramData = (0, sequence_diagram_1.format)(sequence_diagram_1.FormatType.JSON, diagram, task.appmapFile).diagram;
|
|
63
|
-
await writeIndexFile(diagramData, 'sequence.json');
|
|
64
|
-
result = {};
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
throw new Error(`Unknown task`);
|
|
68
|
-
}
|
|
69
|
-
worker_threads_1.parentPort.postMessage({ result });
|
|
25
|
+
const result = await (0, analyzeTask_1.analyzeTask)(task);
|
|
26
|
+
if (result)
|
|
27
|
+
worker_threads_1.parentPort.postMessage({ result });
|
|
70
28
|
}
|
|
71
29
|
catch (err) {
|
|
72
30
|
worker_threads_1.parentPort.postMessage({ error: err });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeWorker.js","sourceRoot":"","sources":["../../../src/cmds/archive/analyzeWorker.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAC5B,mDAA4C;AAC5C,IAAA,gBAAM,EAAC,2BAAU,CAAC,CAAC;AAEnB,
|
|
1
|
+
{"version":3,"file":"analyzeWorker.js","sourceRoot":"","sources":["../../../src/cmds/archive/analyzeWorker.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAC5B,mDAA4C;AAC5C,IAAA,gBAAM,EAAC,2BAAU,CAAC,CAAC;AAEnB,4CAAqD;AAErD,wEAAgD;AAChD,uCAAsC;AAGtC,0CAAmC;AAEnC,+CAA4C;AAE5C,IAAA,2BAAkB,EAAC,qBAAW,CAAC,CAAC;AAEhC,2BAAU,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,IAAgD,EAAE,EAAE;IAClF,IAAA,gBAAM,EAAC,2BAAU,CAAC,CAAC;IACnB,IAAI,IAAI,CAAC,OAAO;QAAE,IAAA,eAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAExC,IAAI;QACF,MAAM,KAAK,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;YAC7B,2BAAU,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,OAAO;SACR;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAW,EAAC,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM;YAAE,2BAAU,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAChD;IAAC,OAAO,GAAG,EAAE;QACZ,2BAAU,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;KACxC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -123,7 +123,9 @@ class Fingerprinter extends events_1.default {
|
|
|
123
123
|
// it's machine-readable (see doc/index-verbose.md)
|
|
124
124
|
if ((0, utils_1.verbose)())
|
|
125
125
|
console.log(`Indexed ${(0, quotePath_1.default)((0, path_1.resolve)(appMapFileName))}`);
|
|
126
|
-
|
|
126
|
+
const result = { path: appMapFileName, metadata: appmap.metadata, numEvents };
|
|
127
|
+
this.emit('index', result);
|
|
128
|
+
return result;
|
|
127
129
|
}
|
|
128
130
|
}
|
|
129
131
|
exports.default = Fingerprinter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprinter.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprinter.ts"],"names":[],"mappings":";;;;;;AAAA,+BAA2D;AAC3D,8DAAqC;AACrC,+BAAiC;AACjC,4CAAwD;AACxD,oDAA4B;AAC5B,4EAAoD;AAEpD,oCAA0C;AAC1C,iDAA0D;AAC1D,gEAAwC;AACxC,oDAAkC;AAClC,iEAAyC;AAEzC,MAAM,UAAU,GAAG,IAAA,gBAAS,EAAC,qBAAU,CAAC,MAAM,CAAC,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACU,QAAA,OAAO,GAAG,OAAO,CAAC;AAE/B,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AASzC,MAAM,aAAc,SAAQ,gBAAY;IAAxC;;QACE;;;;WAIG;QACI,iBAAY,GAAG,IAAI,CAAC;QACpB,uBAAkB,GAAuB,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"fingerprinter.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprinter.ts"],"names":[],"mappings":"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"}
|