@appland/appmap 3.40.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 +13 -0
- 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/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/utils.js +45 -84
- package/built/utils.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
# [@appland/appmap-v3.40.1](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.40.0...@appland/appmap-v3.40.1) (2022-09-27)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Ignore node_modules and .git when watching files ([a53e2a8](https://github.com/getappmap/appmap-js/commit/a53e2a8c0de25e0e7ae7c0515763a9f46d3bc307))
|
|
7
|
+
* More reliable AppMap change detection when indexing ([ef5f184](https://github.com/getappmap/appmap-js/commit/ef5f184fce5e3cdf6f7a645ae1fabf78ec733f0f))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Performance Improvements
|
|
11
|
+
|
|
12
|
+
* Don't try to index the same AppMaps more than once ([6e6e88c](https://github.com/getappmap/appmap-js/commit/6e6e88cd48dbba67cdc81a68c6c753609e04cdee))
|
|
13
|
+
|
|
1
14
|
# [@appland/appmap-v3.40.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.39.0...@appland/appmap-v3.40.0) (2022-09-27)
|
|
2
15
|
|
|
3
16
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../../src/cmds/open/open.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../../src/cmds/open/open.ts"],"names":[],"mappings":";;;;;;AAAA,uCAA8C;AAC9C,kDAA0B;AAC1B,yEAAoC;AACpC,+DAAuC;AACvC,8DAAsC;AACtC,sCAA4C;AAC5C,gEAAwC;AAE3B,QAAA,OAAO,GAAG,oBAAoB,CAAC;AAC/B,QAAA,QAAQ,GAAG,8CAA8C,CAAC;AAEhE,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE;IAC9B,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;QAC7B,QAAQ,EAAE,6BAA6B;QACvC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;KACnB,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AACvB,CAAC,CAAC;AAPW,QAAA,OAAO,WAOlB;AAEK,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE;IACpC,IAAA,eAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEtB,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;QAC3B,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAE5B,IAAI,CAAC,UAAU,EAAE;YACf,yBAAE,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAC9C,MAAM,IAAI,wBAAe,EAAE,CAAC;SAC7B;QACD,IAAI,CAAC,CAAC,MAAM,IAAA,cAAM,EAAC,UAAU,CAAC,CAAC,EAAE;YAC/B,yBAAE,CAAC,KAAK,CAAC,eAAe,eAAK,CAAC,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;YACjE,MAAM,IAAI,wBAAe,EAAE,CAAC;SAC7B;QAED,MAAM,IAAA,oBAAU,EAAC,UAAU,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,mBAAS,CAAC,SAAS,CAAC;QAClB,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;IAEH,OAAO,IAAA,oBAAU,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC,CAAC;AAvBW,QAAA,OAAO,WAuBlB"}
|
|
@@ -6,7 +6,7 @@ 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, (
|
|
9
|
+
await (0, utils_1.listAppMapFiles)(appMapDir, () => { fileCount += 1; });
|
|
10
10
|
(0, utils_1.verbose)(v);
|
|
11
11
|
return fileCount;
|
|
12
12
|
}
|
|
@@ -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,
|
|
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"}
|
|
@@ -56,7 +56,8 @@ class AppMapIndex {
|
|
|
56
56
|
* @param data Raw data to store.
|
|
57
57
|
*/
|
|
58
58
|
async writeFileAtomic(fileName, data) {
|
|
59
|
-
|
|
59
|
+
(0, assert_1.default)(this.appmapCreatedAt);
|
|
60
|
+
await (0, utils_1.writeFileAtomic)(this.indexDir, fileName, this.appmapCreatedAt.toString(), data);
|
|
60
61
|
}
|
|
61
62
|
/**
|
|
62
63
|
* Loads the raw AppMap data that will be indexed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appmapIndex.js","sourceRoot":"","sources":["../../src/fingerprint/appmapIndex.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAC5B,0CAA6D;AAC7D,+BAA4B;AAC5B,mCAAuD;AACvD,oCAAqE;AAErE;;;;;;;;;;GAUG;AACH,MAAqB,WAAW;IAI9B;;;;;OAKG;IACH,YAAmB,cAAsB;QAAtB,mBAAc,GAAd,cAAc,CAAQ;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAA,gBAAQ,EAAC,cAAc,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,eAAe,GAAG,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzD,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,cAAc,mCAAmC,CAAC,CAAC;YAC5E,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAEvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,IAAA,gBAAK,EAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,IAAY;QAClD,MAAM,IAAA,uBAAe,EAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"appmapIndex.js","sourceRoot":"","sources":["../../src/fingerprint/appmapIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const { verbose, listAppMapFiles } = require('../utils');
|
|
3
|
-
const FingerprintQueue = require('./fingerprintQueue');
|
|
3
|
+
const FingerprintQueue = require('./fingerprintQueue').default;
|
|
4
4
|
class FingerprintDirectoryCommand {
|
|
5
5
|
constructor(directory) {
|
|
6
6
|
this.directory = directory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprintDirectoryCommand.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintDirectoryCommand.js"],"names":[],"mappings":";AAAA,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":"fingerprintDirectoryCommand.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintDirectoryCommand.js"],"names":[],"mappings":";AAAA,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACzD,MAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;AAE/D,MAAM,2BAA2B;IAC/B,YAAY,SAAS;QACnB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,OAAO,EAAE,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;SAC7D;QAED,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,KAAK,IAAI,CAAC,CAAC;YACX,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAE;QACZ,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,CAAC,OAAO,GAAG,2BAA2B,CAAC"}
|
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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 fileTooLargeError_1 = __importDefault(require("./fileTooLargeError"));
|
|
8
|
+
const fingerprinter_1 = __importDefault(require("./fingerprinter"));
|
|
9
|
+
function isNodeError(error, code) {
|
|
10
|
+
return error instanceof Error && (!code || error.code === code);
|
|
11
|
+
}
|
|
5
12
|
class FingerprintQueue {
|
|
6
|
-
constructor(size =
|
|
13
|
+
constructor(size = 2, printCanonicalAppMaps = true) {
|
|
7
14
|
this.size = size;
|
|
15
|
+
this.pending = new Set();
|
|
8
16
|
// eslint-disable-next-line no-use-before-define
|
|
9
|
-
this.handler = new
|
|
10
|
-
this.queue = queue(async (appmapFileName) => {
|
|
17
|
+
this.handler = new fingerprinter_1.default(printCanonicalAppMaps);
|
|
18
|
+
this.queue = (0, async_1.queue)(async (appmapFileName) => {
|
|
11
19
|
try {
|
|
12
20
|
await this.handler.fingerprint(appmapFileName);
|
|
13
21
|
}
|
|
14
22
|
catch (e) {
|
|
15
23
|
console.warn(`Error fingerprinting ${appmapFileName}: ${e}`);
|
|
16
24
|
}
|
|
25
|
+
this.pending.delete(appmapFileName);
|
|
17
26
|
}, this.size);
|
|
18
27
|
this.queue.pause();
|
|
19
28
|
}
|
|
@@ -24,13 +33,13 @@ class FingerprintQueue {
|
|
|
24
33
|
return new Promise((resolve, reject) => {
|
|
25
34
|
this.queue.drain(resolve);
|
|
26
35
|
this.queue.error((error) => {
|
|
27
|
-
if (error instanceof
|
|
36
|
+
if (error instanceof fileTooLargeError_1.default) {
|
|
28
37
|
console.warn([
|
|
29
38
|
`Skipped: ${error.message}`,
|
|
30
39
|
'Tip: consider recording a shorter interaction or removing some classes from appmap.yml.',
|
|
31
40
|
].join('\n'));
|
|
32
41
|
}
|
|
33
|
-
else if (error
|
|
42
|
+
else if (isNodeError(error, 'ENOENT')) {
|
|
34
43
|
console.warn(`Skipped: ${error.path}\nThe file does not exist.`);
|
|
35
44
|
}
|
|
36
45
|
else
|
|
@@ -40,8 +49,11 @@ class FingerprintQueue {
|
|
|
40
49
|
});
|
|
41
50
|
}
|
|
42
51
|
push(job) {
|
|
52
|
+
if (this.pending.has(job))
|
|
53
|
+
return;
|
|
54
|
+
this.pending.add(job);
|
|
43
55
|
this.queue.push(job);
|
|
44
56
|
}
|
|
45
57
|
}
|
|
46
|
-
|
|
58
|
+
exports.default = FingerprintQueue;
|
|
47
59
|
//# sourceMappingURL=fingerprintQueue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprintQueue.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintQueue.
|
|
1
|
+
{"version":3,"file":"fingerprintQueue.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintQueue.ts"],"names":[],"mappings":";;;;;AAAA,iCAA2C;AAC3C,4EAAoD;AACpD,oEAA4C;AAE5C,SAAS,WAAW,CAAC,KAAc,EAAE,IAAa;IAChD,OAAO,KAAK,YAAY,KAAK,IAAI,CAAC,CAAC,IAAI,IAAK,KAA+B,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC7F,CAAC;AAED,MAAqB,gBAAgB;IAKnC,YAAoB,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;QAAtC,SAAI,GAAJ,IAAI,CAAI;QAFpB,YAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAGlC,gDAAgD;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,uBAAa,CAAC,qBAAqB,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,IAAA,aAAK,EAAC,KAAK,EAAE,cAAc,EAAE,EAAE;YAC1C,IAAI;gBACF,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;aAChD;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,IAAI,CAAC,wBAAwB,cAAc,KAAK,CAAC,EAAE,CAAC,CAAC;aAC9D;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACtC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,YAAY,CAAC,SAAqB;QAChC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACzB,IAAI,KAAK,YAAY,2BAAiB,EAAE;oBACtC,OAAO,CAAC,IAAI,CACV;wBACE,YAAY,KAAK,CAAC,OAAO,EAAE;wBAC3B,yFAAyF;qBAC1F,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;iBACH;qBAAM,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;oBACvC,OAAO,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,4BAA4B,CAAC,CAAC;iBAClE;;oBAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,GAAW;QACd,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;CACF;AA/CD,mCA+CC"}
|
|
@@ -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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"}
|
package/built/utils.js
CHANGED
|
@@ -1,40 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
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
|
+
exports.prefixLines = exports.exists = exports.listAppMapFiles = exports.processFiles = exports.writeFileAtomic = exports.mtime = exports.baseName = exports.verbose = exports.endTime = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const async_1 = require("async");
|
|
9
|
+
const glob_1 = __importDefault(require("glob"));
|
|
10
|
+
const util_1 = require("util");
|
|
11
|
+
const path_1 = require("path");
|
|
9
12
|
const StartTime = Date.now();
|
|
10
13
|
function endTime() {
|
|
11
14
|
return (Date.now() - StartTime) / 1000;
|
|
12
15
|
}
|
|
16
|
+
exports.endTime = endTime;
|
|
13
17
|
let isVerbose = false;
|
|
14
|
-
function verbose(
|
|
18
|
+
function verbose(v = null) {
|
|
15
19
|
if (v !== null) {
|
|
16
20
|
isVerbose = v;
|
|
17
21
|
}
|
|
18
22
|
return isVerbose;
|
|
19
23
|
}
|
|
20
|
-
|
|
24
|
+
exports.verbose = verbose;
|
|
25
|
+
function baseName(fileName) {
|
|
21
26
|
return fileName.substring(0, fileName.length - '.appmap.json'.length);
|
|
22
27
|
}
|
|
28
|
+
exports.baseName = baseName;
|
|
23
29
|
/**
|
|
24
30
|
* Gets the last modified time of a file.
|
|
25
31
|
*
|
|
26
|
-
* @returns
|
|
32
|
+
* @returns file mtime in ms, or null if the file does not exist or
|
|
27
33
|
* is not a file.
|
|
28
34
|
*/
|
|
29
|
-
// NB: 'ctime' is actually the time that the stats of the file were last changed.
|
|
30
|
-
// And 'birthtime' is not guaranteed across platforms.
|
|
31
|
-
// Therefore mtime is the most reliable indicator of when the file was created,
|
|
32
|
-
// especially since we write files atomically (e.g. by moving them into place after writing them
|
|
33
|
-
// as temp files).
|
|
34
35
|
async function mtime(filePath) {
|
|
36
|
+
// NB: 'ctime' is actually the time that the stats of the file were last changed.
|
|
37
|
+
// And 'birthtime' is not guaranteed across platforms.
|
|
38
|
+
// Therefore mtime is the most reliable indicator of when the file was created,
|
|
39
|
+
// especially since we write files atomically (e.g. by moving them into place after writing them
|
|
40
|
+
// as temp files).
|
|
35
41
|
let fileStat;
|
|
36
42
|
try {
|
|
37
|
-
fileStat = await
|
|
43
|
+
fileStat = await fs_1.promises.stat(filePath);
|
|
38
44
|
}
|
|
39
45
|
catch (e) {
|
|
40
46
|
return null;
|
|
@@ -44,37 +50,32 @@ async function mtime(filePath) {
|
|
|
44
50
|
}
|
|
45
51
|
return fileStat.mtimeMs;
|
|
46
52
|
}
|
|
53
|
+
exports.mtime = mtime;
|
|
47
54
|
/**
|
|
48
55
|
* Atomically write a file by first writing to a temporary file in the same
|
|
49
56
|
* directory then renaming in place.
|
|
50
|
-
* @param
|
|
51
|
-
* @param
|
|
52
|
-
* @param
|
|
53
|
-
* @param
|
|
57
|
+
* @param dirName target directory path
|
|
58
|
+
* @param fileName target file name
|
|
59
|
+
* @param suffix used to create the temporary file name
|
|
60
|
+
* @param data
|
|
54
61
|
*/
|
|
55
|
-
async function writeFileAtomic(dirName, fileName,
|
|
56
|
-
const suffix = jobId.toString();
|
|
62
|
+
async function writeFileAtomic(dirName, fileName, suffix, data) {
|
|
57
63
|
// first make sure the temp name isn't too long
|
|
58
64
|
const NAME_MAX = 255; // note: might not be true on some esoteric systems
|
|
59
65
|
const name = fileName.slice(0, NAME_MAX - suffix.length - 1);
|
|
60
|
-
const tempFilePath = join(dirName, `${name}.${suffix}`);
|
|
61
|
-
await
|
|
62
|
-
await
|
|
66
|
+
const tempFilePath = (0, path_1.join)(dirName, `${name}.${suffix}`);
|
|
67
|
+
await fs_1.promises.writeFile(tempFilePath, data);
|
|
68
|
+
await fs_1.promises.rename(tempFilePath, (0, path_1.join)(dirName, fileName));
|
|
63
69
|
}
|
|
70
|
+
exports.writeFileAtomic = writeFileAtomic;
|
|
64
71
|
/**
|
|
65
72
|
* Call a function with each matching file. No guarantee is given that
|
|
66
73
|
* files will be processed in any particular order.
|
|
67
|
-
*
|
|
68
|
-
* @param {string} pattern
|
|
69
|
-
* @param {(filePath: string): void} fn
|
|
70
|
-
* @param {(fileCount: number): void} fileCountFn
|
|
71
74
|
*/
|
|
72
|
-
async function processFiles(pattern, fn,
|
|
73
|
-
|
|
74
|
-
fileCountFn = (/** @type {number} */ count) => { }) {
|
|
75
|
-
const q = queue(fn, 5);
|
|
75
|
+
async function processFiles(pattern, fn, fileCountFn = (count) => { }) {
|
|
76
|
+
const q = (0, async_1.queue)(fn, 5);
|
|
76
77
|
q.pause();
|
|
77
|
-
const files = await promisify(
|
|
78
|
+
const files = await (0, util_1.promisify)(glob_1.default)(pattern);
|
|
78
79
|
if (fileCountFn) {
|
|
79
80
|
fileCountFn(files.length);
|
|
80
81
|
}
|
|
@@ -84,27 +85,22 @@ fileCountFn = (/** @type {number} */ count) => { }) {
|
|
|
84
85
|
q.resume();
|
|
85
86
|
await q.drain();
|
|
86
87
|
}
|
|
88
|
+
exports.processFiles = processFiles;
|
|
87
89
|
/**
|
|
88
90
|
* Lists all appmap.json files in a directory, and passes them to a function.
|
|
89
91
|
* With `await`, `listAppMapFiles` blocks until all the files have been processed.
|
|
90
|
-
*
|
|
91
|
-
* @param {string} directory
|
|
92
|
-
* @param {Function(string)} fn
|
|
93
92
|
*/
|
|
94
93
|
async function listAppMapFiles(directory, fn) {
|
|
95
94
|
if (verbose()) {
|
|
96
95
|
console.warn(`Scanning ${directory} for AppMaps`);
|
|
97
96
|
}
|
|
98
|
-
await Promise.all((await promisify(
|
|
97
|
+
await Promise.all((await (0, util_1.promisify)(glob_1.default)(`${directory}/**/*.appmap.json`)).map(fn));
|
|
99
98
|
}
|
|
100
|
-
|
|
101
|
-
* @param {PathLike} path
|
|
102
|
-
* @returns {Promise<boolean>}
|
|
103
|
-
*/
|
|
99
|
+
exports.listAppMapFiles = listAppMapFiles;
|
|
104
100
|
function exists(path) {
|
|
105
101
|
return new Promise((resolve) => {
|
|
106
|
-
|
|
107
|
-
.access(path,
|
|
102
|
+
fs_1.promises
|
|
103
|
+
.access(path, fs_1.constants.R_OK)
|
|
108
104
|
.then(() => {
|
|
109
105
|
resolve(true);
|
|
110
106
|
})
|
|
@@ -113,50 +109,15 @@ function exists(path) {
|
|
|
113
109
|
});
|
|
114
110
|
});
|
|
115
111
|
}
|
|
116
|
-
|
|
117
|
-
return buildAppMap()
|
|
118
|
-
.source(JSON.parse(await fsp.readFile(filePath)))
|
|
119
|
-
.normalize()
|
|
120
|
-
.build();
|
|
121
|
-
}
|
|
122
|
-
function formatValue(value) {
|
|
123
|
-
if (!value) {
|
|
124
|
-
return 'Null';
|
|
125
|
-
}
|
|
126
|
-
const valueStr = value.value.indexOf('#<') === 0 ? null : value.value;
|
|
127
|
-
return [value.class, valueStr].filter((e) => e).join(' ');
|
|
128
|
-
}
|
|
129
|
-
function formatHttpServerRequest(event) {
|
|
130
|
-
const data = {
|
|
131
|
-
method: event.httpServerRequest.request_method,
|
|
132
|
-
path: event.httpServerRequest.normalized_path_info || event.httpServerRequest.path_info,
|
|
133
|
-
statusCode: event.returnEvent && event.httpServerResponse
|
|
134
|
-
? event.httpServerResponse.status_code || event.httpServerResponse.status
|
|
135
|
-
: '<none>',
|
|
136
|
-
};
|
|
137
|
-
return [data.method, data.path, `(${data.statusCode})`].join(' ');
|
|
138
|
-
}
|
|
112
|
+
exports.exists = exists;
|
|
139
113
|
/**
|
|
140
114
|
* Append a prefix to each line in a string
|
|
141
|
-
* @param
|
|
142
|
-
* @param
|
|
143
|
-
* @returns
|
|
115
|
+
* @param str the string to be prefixed
|
|
116
|
+
* @param prefix a string to prefix each line with
|
|
117
|
+
* @returns the resulting string which starts each line with a prefix
|
|
144
118
|
*/
|
|
145
119
|
function prefixLines(str, prefix) {
|
|
146
120
|
return str.replace(/^/gm, prefix);
|
|
147
121
|
}
|
|
148
|
-
|
|
149
|
-
baseName,
|
|
150
|
-
endTime,
|
|
151
|
-
formatValue,
|
|
152
|
-
formatHttpServerRequest,
|
|
153
|
-
writeFileAtomic,
|
|
154
|
-
listAppMapFiles,
|
|
155
|
-
loadAppMap,
|
|
156
|
-
mtime,
|
|
157
|
-
verbose,
|
|
158
|
-
processFiles,
|
|
159
|
-
exists,
|
|
160
|
-
prefixLines,
|
|
161
|
-
};
|
|
122
|
+
exports.prefixLines = prefixLines;
|
|
162
123
|
//# sourceMappingURL=utils.js.map
|
package/built/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|