@appland/appmap 3.39.0 → 3.40.1
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 +36 -0
- package/built/appmap.html +1 -1
- package/built/cli.js +2 -0
- package/built/cli.js.map +1 -1
- package/built/cmds/open/open.js.map +1 -1
- package/built/cmds/record/action/countAppMaps.js +1 -1
- package/built/cmds/record/action/countAppMaps.js.map +1 -1
- package/built/cmds/record/record.js +2 -0
- package/built/cmds/record/record.js.map +1 -1
- package/built/cmds/runCommand.js +2 -1
- package/built/cmds/runCommand.js.map +1 -1
- package/built/cmds/stats/stats.js +282 -0
- package/built/cmds/stats/stats.js.map +1 -0
- package/built/cmds/stats/types/appMapSize.js +3 -0
- package/built/cmds/stats/types/appMapSize.js.map +1 -0
- package/built/cmds/stats/types/functionExecutionTime.js +3 -0
- package/built/cmds/stats/types/functionExecutionTime.js.map +1 -0
- package/built/fingerprint/appmapIndex.js +2 -1
- package/built/fingerprint/appmapIndex.js.map +1 -1
- package/built/fingerprint/fingerprintDirectoryCommand.js +1 -1
- package/built/fingerprint/fingerprintDirectoryCommand.js.map +1 -1
- package/built/fingerprint/fingerprintQueue.js +21 -9
- package/built/fingerprint/fingerprintQueue.js.map +1 -1
- package/built/fingerprint/fingerprintWatchCommand.js +21 -11
- package/built/fingerprint/fingerprintWatchCommand.js.map +1 -1
- package/built/fingerprint/fingerprinter.js +28 -24
- package/built/fingerprint/fingerprinter.js.map +1 -1
- package/built/main.js.map +1 -1
- package/built/utils.js +45 -84
- package/built/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ const chokidar = require('chokidar');
|
|
|
3
3
|
const fs = require('fs-extra');
|
|
4
4
|
const path = require('path');
|
|
5
5
|
const { verbose, listAppMapFiles } = require('../utils');
|
|
6
|
-
const FingerprintQueue = require('./fingerprintQueue');
|
|
6
|
+
const FingerprintQueue = require('./fingerprintQueue').default;
|
|
7
7
|
class FingerprintWatchCommand {
|
|
8
8
|
constructor(directory) {
|
|
9
9
|
this.directory = directory;
|
|
@@ -26,21 +26,32 @@ class FingerprintWatchCommand {
|
|
|
26
26
|
// Index existing AppMap files
|
|
27
27
|
await listAppMapFiles(this.directory, (file) => this.fpQueue.push(file));
|
|
28
28
|
this.fpQueue.process();
|
|
29
|
-
|
|
29
|
+
const glob = `${this.directory}/**/*.appmap.json`;
|
|
30
|
+
this.watcher = chokidar.watch(glob, {
|
|
30
31
|
ignoreInitial: true,
|
|
32
|
+
ignored: ['**/node_modules/**', '**/.git/**'],
|
|
31
33
|
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
this.poller = chokidar.watch(glob, {
|
|
35
|
+
ignoreInitial: true,
|
|
36
|
+
ignored: ['**/node_modules/**', '**/.git/**'],
|
|
37
|
+
usePolling: true,
|
|
38
|
+
interval: 1000,
|
|
39
|
+
persistent: false,
|
|
38
40
|
});
|
|
41
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
42
|
+
for (const ch of [this.watcher, this.poller]) {
|
|
43
|
+
ch.on('add', this.added.bind(this))
|
|
44
|
+
.on('change', this.changed.bind(this))
|
|
45
|
+
.on('unlink', this.removed.bind(this));
|
|
46
|
+
}
|
|
47
|
+
await Promise.all([this.watcher, this.poller].map((ch) => new Promise((resolve) => ch.on('ready', resolve))));
|
|
48
|
+
this.ready();
|
|
39
49
|
}
|
|
40
50
|
async close() {
|
|
41
|
-
await this.watcher.close();
|
|
51
|
+
await Promise.all([this.watcher, this.poller].map((ch) => ch === null || ch === void 0 ? void 0 : ch.close()));
|
|
42
52
|
this.removePidfile();
|
|
43
53
|
this.watcher = null;
|
|
54
|
+
this.poller = null;
|
|
44
55
|
}
|
|
45
56
|
added(file) {
|
|
46
57
|
if (verbose()) {
|
|
@@ -58,7 +69,7 @@ class FingerprintWatchCommand {
|
|
|
58
69
|
removed(file) {
|
|
59
70
|
console.warn(`TODO: AppMap removed: ${file}`);
|
|
60
71
|
}
|
|
61
|
-
ready(
|
|
72
|
+
ready() {
|
|
62
73
|
if (this.pidfilePath) {
|
|
63
74
|
fs.outputFileSync(this.pidfilePath, `${process.pid}`);
|
|
64
75
|
process.on('exit', this.removePidfile.bind(this));
|
|
@@ -66,7 +77,6 @@ class FingerprintWatchCommand {
|
|
|
66
77
|
if (verbose()) {
|
|
67
78
|
console.warn(`Watching appmaps in ${path.resolve(process.cwd(), this.directory)}`);
|
|
68
79
|
}
|
|
69
|
-
resolve();
|
|
70
80
|
}
|
|
71
81
|
enqueue(file) {
|
|
72
82
|
// This shouldn't be necessary, but it's passing through the wrong file names.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprintWatchCommand.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintWatchCommand.js"],"names":[],"mappings":";AAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACrC,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACzD,MAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"fingerprintWatchCommand.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintWatchCommand.js"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
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 crypto_1 = require("crypto");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const models_1 = require("@appland/models");
|
|
10
|
+
const assert_1 = __importDefault(require("assert"));
|
|
11
|
+
const fileTooLargeError_1 = __importDefault(require("./fileTooLargeError"));
|
|
12
|
+
const utils_1 = require("../utils");
|
|
13
|
+
const canonicalize_1 = require("./canonicalize");
|
|
14
|
+
const appmapIndex_1 = __importDefault(require("./appmapIndex"));
|
|
11
15
|
/**
|
|
12
16
|
* CHANGELOG
|
|
13
17
|
*
|
|
@@ -46,21 +50,21 @@ class Fingerprinter {
|
|
|
46
50
|
}
|
|
47
51
|
// eslint-disable-next-line class-methods-use-this
|
|
48
52
|
async fingerprint(appMapFileName) {
|
|
49
|
-
if (verbose()) {
|
|
53
|
+
if ((0, utils_1.verbose)()) {
|
|
50
54
|
console.log(`Fingerprinting ${appMapFileName}`);
|
|
51
55
|
}
|
|
52
|
-
const index = new
|
|
56
|
+
const index = new appmapIndex_1.default(appMapFileName);
|
|
53
57
|
if (!(await index.initialize())) {
|
|
54
58
|
return;
|
|
55
59
|
}
|
|
56
60
|
if ((await index.versionUpToDate(VERSION)) && (await index.indexUpToDate())) {
|
|
57
|
-
if (verbose()) {
|
|
61
|
+
if ((0, utils_1.verbose)()) {
|
|
58
62
|
console.log('Fingerprint is up to date. Skipping...');
|
|
59
63
|
}
|
|
60
64
|
return;
|
|
61
65
|
}
|
|
62
66
|
if ((await index.appmapFileSize()) > MAX_APPMAP_SIZE)
|
|
63
|
-
throw new
|
|
67
|
+
throw new fileTooLargeError_1.default(appMapFileName, await index.appmapFileSize(), MAX_APPMAP_SIZE);
|
|
64
68
|
const appmapData = await index.loadAppMapData();
|
|
65
69
|
if (!appmapData)
|
|
66
70
|
return;
|
|
@@ -68,20 +72,20 @@ class Fingerprinter {
|
|
|
68
72
|
if (!appmapDataWithoutMetadata)
|
|
69
73
|
return;
|
|
70
74
|
delete appmapDataWithoutMetadata.metadata;
|
|
71
|
-
const appmapDigest = createHash('sha256')
|
|
75
|
+
const appmapDigest = (0, crypto_1.createHash)('sha256')
|
|
72
76
|
.update(JSON.stringify(appmapDataWithoutMetadata, null, 2))
|
|
73
77
|
.digest('hex');
|
|
74
78
|
const fingerprints = [];
|
|
75
79
|
appmapData.metadata.fingerprints = fingerprints;
|
|
76
|
-
const appmap = buildAppMap(appmapData).normalize().build();
|
|
80
|
+
const appmap = (0, models_1.buildAppMap)(appmapData).normalize().build();
|
|
77
81
|
await index.mkdir_p();
|
|
78
|
-
await Promise.all(Object.keys(algorithms).map(async (algorithmName) => {
|
|
79
|
-
const canonicalForm = canonicalize(algorithmName, appmap);
|
|
82
|
+
await Promise.all(Object.keys(canonicalize_1.algorithms).map(async (algorithmName) => {
|
|
83
|
+
const canonicalForm = (0, canonicalize_1.canonicalize)(algorithmName, appmap);
|
|
80
84
|
const canonicalJSON = JSON.stringify(canonicalForm, null, 2);
|
|
81
85
|
if (this.printCanonicalAppMaps) {
|
|
82
86
|
await index.writeFileAtomic(`canonical.${algorithmName}.json`, canonicalJSON);
|
|
83
87
|
}
|
|
84
|
-
const fingerprintDigest = createHash('sha256').update(canonicalJSON).digest('hex');
|
|
88
|
+
const fingerprintDigest = (0, crypto_1.createHash)('sha256').update(canonicalJSON).digest('hex');
|
|
85
89
|
fingerprints.push({
|
|
86
90
|
appmap_digest: appmapDigest,
|
|
87
91
|
canonicalization_algorithm: algorithmName,
|
|
@@ -90,10 +94,10 @@ class Fingerprinter {
|
|
|
90
94
|
});
|
|
91
95
|
}));
|
|
92
96
|
appmapData.metadata.fingerprints.sort((a, b) => a.canonicalization_algorithm.localeCompare(b.canonicalization_algorithm));
|
|
93
|
-
const tempAppMapFileName =
|
|
94
|
-
await index.writeFileAtomic(basename(tempAppMapFileName), JSON.stringify(appmap, null, 2));
|
|
95
|
-
const appMapIndexedAt = await mtime(tempAppMapFileName);
|
|
96
|
-
|
|
97
|
+
const tempAppMapFileName = (0, path_1.join)(index.indexDir, 'appmap.tmp');
|
|
98
|
+
await index.writeFileAtomic((0, path_1.basename)(tempAppMapFileName), JSON.stringify(appmap, null, 2));
|
|
99
|
+
const appMapIndexedAt = await (0, utils_1.mtime)(tempAppMapFileName);
|
|
100
|
+
(0, assert_1.default)(appMapIndexedAt, `${tempAppMapFileName} should always exist and be a readable file`);
|
|
97
101
|
await Promise.all([
|
|
98
102
|
index.writeFileAtomic('version', VERSION),
|
|
99
103
|
index.writeFileAtomic('classMap.json', JSON.stringify(appmap.classMap, null, 2)),
|
|
@@ -103,9 +107,9 @@ class Fingerprinter {
|
|
|
103
107
|
// At this point, moving the AppMap file into place will trigger re-indexing.
|
|
104
108
|
// But the mtime will match the file modification time, so the algorithm will
|
|
105
109
|
// determine that the index is up-to-date.
|
|
106
|
-
await
|
|
110
|
+
await fs_1.promises.rename(tempAppMapFileName, appMapFileName);
|
|
107
111
|
this.counterFn();
|
|
108
112
|
}
|
|
109
113
|
}
|
|
110
|
-
|
|
114
|
+
exports.default = Fingerprinter;
|
|
111
115
|
//# sourceMappingURL=fingerprinter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprinter.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprinter.
|
|
1
|
+
{"version":3,"file":"fingerprinter.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprinter.ts"],"names":[],"mappings":"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"}
|