@appland/appmap 3.27.1 → 3.27.4
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 +22 -0
- package/built/depends.js +12 -5
- package/built/depends.js.map +1 -1
- package/built/fingerprint/fileTooLargeError.js +21 -0
- package/built/fingerprint/fileTooLargeError.js.map +1 -0
- package/built/fingerprint/fingerprintQueue.js +11 -1
- package/built/fingerprint/fingerprintQueue.js.map +1 -1
- package/built/fingerprint/fingerprinter.js +47 -33
- package/built/fingerprint/fingerprinter.js.map +1 -1
- package/built/utils.js +18 -79
- package/built/utils.js.map +1 -1
- package/package.json +6 -3
- /package/{built/resources → resources}/openapi-template.yaml +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
# [@appland/appmap-v3.27.4](https://github.com/applandinc/appmap-js/compare/@appland/appmap-v3.27.3...@appland/appmap-v3.27.4) (2022-06-01)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Openapi template is packaged correctly and the command works again ([1c98f95](https://github.com/applandinc/appmap-js/commit/1c98f9547b3a2aaab6956c016839d862058b3216))
|
|
7
|
+
|
|
8
|
+
# [@appland/appmap-v3.27.3](https://github.com/applandinc/appmap-js/compare/@appland/appmap-v3.27.2...@appland/appmap-v3.27.3) (2022-05-31)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* Warn and reject too large AppMaps instead of raising an error ([901756f](https://github.com/applandinc/appmap-js/commit/901756f4a506f58098dd7ad0204b8c8edc0e0d0a))
|
|
14
|
+
|
|
15
|
+
# [@appland/appmap-v3.27.2](https://github.com/applandinc/appmap-js/compare/@appland/appmap-v3.27.1...@appland/appmap-v3.27.2) (2022-05-30)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* compare AppMap ctime to dependency mtime ([fd41733](https://github.com/applandinc/appmap-js/commit/fd4173372718cfabbe8c542d9bf757286404eb4d))
|
|
21
|
+
* Indexing no longer causes EXDEV on Linux ([f8b0481](https://github.com/applandinc/appmap-js/commit/f8b0481881cc48715b1dcaa6a3caeaf0782d7b08))
|
|
22
|
+
|
|
1
23
|
# [@appland/appmap-v3.27.1](https://github.com/applandinc/appmap-js/compare/@appland/appmap-v3.27.0...@appland/appmap-v3.27.1) (2022-05-27)
|
|
2
24
|
|
|
3
25
|
|
package/built/depends.js
CHANGED
|
@@ -67,11 +67,18 @@ class Depends {
|
|
|
67
67
|
if (basename(indexDir) === 'Inventory') {
|
|
68
68
|
return;
|
|
69
69
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
let appmapCreatedAtStr;
|
|
71
|
+
try {
|
|
72
|
+
appmapCreatedAtStr = await fsp.readFile(joinPath(indexDir, 'ctime'));
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
if (err.code !== 'ENOENT')
|
|
76
|
+
console.warn(err);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const appmapCreatedAt = parseInt(appmapCreatedAtStr, 10);
|
|
73
80
|
if (verbose()) {
|
|
74
|
-
console.warn(`Checking AppMap ${indexDir} with timestamp ${
|
|
81
|
+
console.warn(`Checking AppMap ${indexDir} with timestamp ${appmapCreatedAt}`);
|
|
75
82
|
}
|
|
76
83
|
const classMap = JSON.parse(await fsp.readFile(fileName));
|
|
77
84
|
const codeLocations = new Set();
|
|
@@ -94,7 +101,7 @@ class Depends {
|
|
|
94
101
|
if (verbose()) {
|
|
95
102
|
console.warn(`Timestamp of ${dependencyFilePath} is ${dependencyModifiedAt}`);
|
|
96
103
|
}
|
|
97
|
-
return dependencyModifiedAt &&
|
|
104
|
+
return dependencyModifiedAt && appmapCreatedAt < dependencyModifiedAt;
|
|
98
105
|
}
|
|
99
106
|
if (this.testLocations && verbose()) {
|
|
100
107
|
console.warn(`Checking whether AppMap contains any client-provided file: [ ${[
|
package/built/depends.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depends.js","sourceRoot":"","sources":["../src/depends.js"],"names":[],"mappings":";AAAA,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;AACnC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1E,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAE5D,qFAAqF;AACrF,gCAAgC;AAChC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3D,MAAM,OAAO;IACX;;OAEG;IACH,YAAY,SAAS;QACnB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACrB,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,OAAO,CAAC,OAAO;QACjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,KAAK,CAAC,KAAK;QACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,6CAA6C;YAC7C,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;SACjB;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,QAAQ;QACnB,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;YACxB,OAAO,QAAQ,CAAC;SACjB;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CAAC,QAAQ;QACpB,MAAM,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAEjC,KAAK,UAAU,aAAa,CAAC,QAAQ;YACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,WAAW,EAAE;gBACtC,OAAO;aACR;YAED,
|
|
1
|
+
{"version":3,"file":"depends.js","sourceRoot":"","sources":["../src/depends.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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 pretty_bytes_1 = __importDefault(require("pretty-bytes"));
|
|
7
|
+
class FileTooLargeError extends Error {
|
|
8
|
+
constructor(path, bytes, maxBytes) {
|
|
9
|
+
super();
|
|
10
|
+
this.path = path;
|
|
11
|
+
this.bytes = bytes;
|
|
12
|
+
this.maxBytes = maxBytes;
|
|
13
|
+
}
|
|
14
|
+
get message() {
|
|
15
|
+
const size = (0, pretty_bytes_1.default)(this.bytes);
|
|
16
|
+
const maxSize = (0, pretty_bytes_1.default)(this.maxBytes);
|
|
17
|
+
return `File ${this.path} is too large to process (${size}).\nPlease make sure that appmaps are no larger than ${maxSize}.`;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.default = FileTooLargeError;
|
|
21
|
+
//# sourceMappingURL=fileTooLargeError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileTooLargeError.js","sourceRoot":"","sources":["../../src/fingerprint/fileTooLargeError.ts"],"names":[],"mappings":";;;;;AAAA,gEAAuC;AAEvC,MAAqB,iBAAkB,SAAQ,KAAK;IAClD,YAAmB,IAAY,EAAS,KAAa,EAAS,QAAgB;QAC5E,KAAK,EAAE,CAAC;QADS,SAAI,GAAJ,IAAI,CAAQ;QAAS,UAAK,GAAL,KAAK,CAAQ;QAAS,aAAQ,GAAR,QAAQ,CAAQ;IAE9E,CAAC;IAED,IAAI,OAAO;QACT,MAAM,IAAI,GAAG,IAAA,sBAAW,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAA,sBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,QAAQ,IAAI,CAAC,IAAI,6BAA6B,IAAI,wDAAwD,OAAO,GAAG,CAAC;IAC9H,CAAC;CACF;AAVD,oCAUC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const { queue } = require('async');
|
|
3
|
+
const { default: FileTooLargeError } = require('./fileTooLargeError');
|
|
3
4
|
const Fingerprinter = require('./fingerprinter');
|
|
4
5
|
class FingerprintQueue {
|
|
5
6
|
constructor(size = 5, printCanonicalAppMaps = true) {
|
|
@@ -15,7 +16,16 @@ class FingerprintQueue {
|
|
|
15
16
|
async process() {
|
|
16
17
|
return new Promise((resolve, reject) => {
|
|
17
18
|
this.queue.drain(resolve);
|
|
18
|
-
this.queue.error(
|
|
19
|
+
this.queue.error((error) => {
|
|
20
|
+
if (error instanceof FileTooLargeError) {
|
|
21
|
+
console.warn([
|
|
22
|
+
`Skipped: ${error.message}`,
|
|
23
|
+
'Tip: consider recording a shorter interaction or removing some classes from appmap.yml.',
|
|
24
|
+
].join('\n'));
|
|
25
|
+
}
|
|
26
|
+
else
|
|
27
|
+
reject(error);
|
|
28
|
+
});
|
|
19
29
|
this.queue.resume();
|
|
20
30
|
});
|
|
21
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprintQueue.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintQueue.js"],"names":[],"mappings":";AAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AACnC,MAAM,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjD,MAAM,gBAAgB;IACpB,YAAY,IAAI,GAAG,CAAC,EAAE,qBAAqB,GAAG,IAAI;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,gDAAgD;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,qBAAqB,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,YAAY,CAAC,SAAS;QACpB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"fingerprintQueue.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintQueue.js"],"names":[],"mappings":";AAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AACnC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACtE,MAAM,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjD,MAAM,gBAAgB;IACpB,YAAY,IAAI,GAAG,CAAC,EAAE,qBAAqB,GAAG,IAAI;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,gDAAgD;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,qBAAqB,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,YAAY,CAAC,SAAS;QACpB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACzB,IAAI,KAAK,YAAY,iBAAiB,EAAE;oBACtC,OAAO,CAAC,IAAI,CACV;wBACE,YAAY,KAAK,CAAC,OAAO,EAAE;wBAC3B,yFAAyF;qBAC1F,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;iBACH;;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,GAAG;QACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;CACF;AAED,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC"}
|
|
@@ -4,11 +4,17 @@ const { join: joinPath } = require('path');
|
|
|
4
4
|
const fsp = require('fs').promises;
|
|
5
5
|
const semver = require('semver');
|
|
6
6
|
const { buildAppMap } = require('@appland/models');
|
|
7
|
-
const
|
|
7
|
+
const writeFileAtomic = require('write-file-atomic');
|
|
8
|
+
const { default: FileTooLargeError } = require('./fileTooLargeError');
|
|
9
|
+
const { verbose, baseName, ctime } = require('../utils');
|
|
8
10
|
const { algorithms, canonicalize } = require('./canonicalize');
|
|
9
11
|
/**
|
|
10
12
|
* CHANGELOG
|
|
11
13
|
*
|
|
14
|
+
* # 1.1.2
|
|
15
|
+
*
|
|
16
|
+
* * Reject large appmaps instead of breaking randomly.
|
|
17
|
+
*
|
|
12
18
|
* # 1.1.1
|
|
13
19
|
*
|
|
14
20
|
* * Fix parent assignment algorithm.
|
|
@@ -20,7 +26,8 @@ const { algorithms, canonicalize } = require('./canonicalize');
|
|
|
20
26
|
* * Fix handling of parent assignment in normalization.
|
|
21
27
|
* * sql can contain the analysis (action, tables, columns), and/or the normalized query string.
|
|
22
28
|
*/
|
|
23
|
-
const VERSION = '1.1.
|
|
29
|
+
const VERSION = '1.1.2';
|
|
30
|
+
const MAX_APPMAP_SIZE = 50 * 1000 * 1000;
|
|
24
31
|
class Fingerprinter {
|
|
25
32
|
/**
|
|
26
33
|
* @param {boolean} printCanonicalAppMaps
|
|
@@ -34,7 +41,7 @@ class Fingerprinter {
|
|
|
34
41
|
}
|
|
35
42
|
// eslint-disable-next-line class-methods-use-this
|
|
36
43
|
async fingerprint(appMapFileName) {
|
|
37
|
-
const appMapCreatedAt = await
|
|
44
|
+
const appMapCreatedAt = await ctime(appMapFileName);
|
|
38
45
|
if (!appMapCreatedAt) {
|
|
39
46
|
return;
|
|
40
47
|
}
|
|
@@ -82,6 +89,11 @@ class Fingerprinter {
|
|
|
82
89
|
}
|
|
83
90
|
return;
|
|
84
91
|
}
|
|
92
|
+
{
|
|
93
|
+
const stat = await fsp.stat(appMapFileName);
|
|
94
|
+
if (stat.size > MAX_APPMAP_SIZE)
|
|
95
|
+
throw new FileTooLargeError(appMapFileName, stat.size, MAX_APPMAP_SIZE);
|
|
96
|
+
}
|
|
85
97
|
let data;
|
|
86
98
|
try {
|
|
87
99
|
data = await fsp.readFile(appMapFileName);
|
|
@@ -98,6 +110,7 @@ class Fingerprinter {
|
|
|
98
110
|
}
|
|
99
111
|
let appmapData;
|
|
100
112
|
try {
|
|
113
|
+
// TODO: Should we normalize, compress, etc here?
|
|
101
114
|
appmapData = JSON.parse(data.toString());
|
|
102
115
|
}
|
|
103
116
|
catch (err) {
|
|
@@ -122,36 +135,37 @@ class Fingerprinter {
|
|
|
122
135
|
const fingerprints = [];
|
|
123
136
|
appmapData.metadata.fingerprints = fingerprints;
|
|
124
137
|
const appmap = buildAppMap(appmapData).normalize().build();
|
|
125
|
-
await
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
138
|
+
await fsp.mkdir(indexDir, { recursive: true });
|
|
139
|
+
await Promise.all(Object.keys(algorithms).map(async (algorithmName) => {
|
|
140
|
+
const canonicalForm = canonicalize(algorithmName, appmap);
|
|
141
|
+
const canonicalJSON = JSON.stringify(canonicalForm, null, 2);
|
|
142
|
+
if (this.printCanonicalAppMaps) {
|
|
143
|
+
await writeFileAtomic(joinPath(indexDir, `canonical.${algorithmName}.json`), canonicalJSON);
|
|
144
|
+
}
|
|
145
|
+
const fingerprintDigest = createHash('sha256')
|
|
146
|
+
.update(canonicalJSON)
|
|
147
|
+
.digest('hex');
|
|
148
|
+
if (verbose()) {
|
|
149
|
+
console.warn(`Computed digest for ${algorithmName}`);
|
|
150
|
+
}
|
|
151
|
+
fingerprints.push({
|
|
152
|
+
appmap_digest: appmapDigest,
|
|
153
|
+
canonicalization_algorithm: algorithmName,
|
|
154
|
+
digest: fingerprintDigest,
|
|
155
|
+
fingerprint_algorithm: 'sha256',
|
|
156
|
+
});
|
|
157
|
+
}));
|
|
158
|
+
appmapData.metadata.fingerprints.sort((a, b) => a.canonicalization_algorithm.localeCompare(b.canonicalization_algorithm));
|
|
159
|
+
await writeFileAtomic(appMapFileName, JSON.stringify(appmapData, null, 2));
|
|
160
|
+
const appMapIndexedAt = await ctime(appMapFileName);
|
|
161
|
+
await writeFileAtomic(joinPath(indexDir, 'ctime'), `${appMapCreatedAt}`);
|
|
162
|
+
await writeFileAtomic(joinPath(indexDir, 'version'), VERSION);
|
|
163
|
+
await writeFileAtomic(joinPath(indexDir, 'classMap.json'), JSON.stringify(appmap.classMap, null, 2));
|
|
164
|
+
await writeFileAtomic(joinPath(indexDir, 'metadata.json'), JSON.stringify(appmap.metadata, null, 2));
|
|
165
|
+
// NOTE: mtime needs to be written last.
|
|
166
|
+
// Downstream code will watch for this file and assume
|
|
167
|
+
// indexing is complete once it changes.
|
|
168
|
+
await writeFileAtomic(joinPath(indexDir, 'mtime'), `${appMapIndexedAt}`);
|
|
155
169
|
this.counterFn();
|
|
156
170
|
}
|
|
157
171
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprinter.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprinter.js"],"names":[],"mappings":";AAAA,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;AACnC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"fingerprinter.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprinter.js"],"names":[],"mappings":"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"}
|
package/built/utils.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/* eslint-disable func-names */
|
|
3
|
-
const { constants: fsConstants, promises: fsp
|
|
4
|
-
const fsExtra = require('fs-extra');
|
|
3
|
+
const { constants: fsConstants, promises: fsp } = require('fs');
|
|
5
4
|
const { queue } = require('async');
|
|
6
5
|
const glob = require('glob');
|
|
7
|
-
const
|
|
8
|
-
const { sep: pathSep, join: joinPath, basename, join } = require('path');
|
|
6
|
+
const { join: joinPath } = require('path');
|
|
9
7
|
const { buildAppMap } = require('@appland/models');
|
|
10
|
-
const { rename } = require('fs/promises');
|
|
11
8
|
const StartTime = Date.now();
|
|
12
9
|
function endTime() {
|
|
13
10
|
return (Date.now() - StartTime) / 1000;
|
|
@@ -19,10 +16,10 @@ function verbose(/** @type {boolean|null} */ v = null) {
|
|
|
19
16
|
}
|
|
20
17
|
return isVerbose;
|
|
21
18
|
}
|
|
22
|
-
function baseName(fileName) {
|
|
19
|
+
function baseName(/** @type string */ fileName) {
|
|
23
20
|
return fileName.substring(0, fileName.length - '.appmap.json'.length);
|
|
24
21
|
}
|
|
25
|
-
async function
|
|
22
|
+
async function ctime(filePath) {
|
|
26
23
|
let fileStat;
|
|
27
24
|
try {
|
|
28
25
|
fileStat = await fsp.stat(filePath);
|
|
@@ -35,6 +32,19 @@ async function mtime(filePath) {
|
|
|
35
32
|
}
|
|
36
33
|
return fileStat.ctime.getTime();
|
|
37
34
|
}
|
|
35
|
+
async function mtime(filePath) {
|
|
36
|
+
let fileStat;
|
|
37
|
+
try {
|
|
38
|
+
fileStat = await fsp.stat(filePath);
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
if (!fileStat.isFile()) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return fileStat.mtime.getTime();
|
|
47
|
+
}
|
|
38
48
|
/**
|
|
39
49
|
* Call a function with each matching file. No guarantee is given that
|
|
40
50
|
* files will be processed in any particular order.
|
|
@@ -112,76 +122,6 @@ async function loadAppMap(filePath) {
|
|
|
112
122
|
.normalize()
|
|
113
123
|
.build();
|
|
114
124
|
}
|
|
115
|
-
const renameFile = async (oldName, newName) => fsExtra.move(oldName, newName, { clobber: true });
|
|
116
|
-
/**
|
|
117
|
-
* @param {string} path
|
|
118
|
-
*/
|
|
119
|
-
async function touch(path) {
|
|
120
|
-
return new Promise((resolve) => {
|
|
121
|
-
const time = Date.now();
|
|
122
|
-
utimes(path, time, time, (utimesErr) => {
|
|
123
|
-
if (utimesErr) {
|
|
124
|
-
console.warn(utimesErr);
|
|
125
|
-
}
|
|
126
|
-
return resolve();
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Builds a directory using a tempdir, which is renamed at the end to
|
|
132
|
-
* a specified directory name.
|
|
133
|
-
*
|
|
134
|
-
* @param {string} dirName
|
|
135
|
-
* @param {function} contentFunction
|
|
136
|
-
*/
|
|
137
|
-
const buildDirectory = async (dirName, contentFunction) => {
|
|
138
|
-
const tempPath = await fsp.realpath(os.tmpdir());
|
|
139
|
-
const tempDir = await fsp.mkdtemp(tempPath + pathSep);
|
|
140
|
-
const discardDir = await fsp.mkdtemp(tempPath + pathSep);
|
|
141
|
-
try {
|
|
142
|
-
await contentFunction(tempDir);
|
|
143
|
-
}
|
|
144
|
-
catch (err) {
|
|
145
|
-
rm(tempDir, { recursive: true }, (e) => {
|
|
146
|
-
console.warn(`Unable to remove (cleanup) tempdir: ${e.message}`);
|
|
147
|
-
});
|
|
148
|
-
throw err;
|
|
149
|
-
}
|
|
150
|
-
// Move dirName to a temp dir
|
|
151
|
-
// Move tempDir to the final dirName
|
|
152
|
-
try {
|
|
153
|
-
await rename(dirName, join(discardDir, basename(dirName)));
|
|
154
|
-
setTimeout(() => rm(discardDir, { recursive: true }, (err) => {
|
|
155
|
-
if (err)
|
|
156
|
-
console.warn(err);
|
|
157
|
-
}), 0);
|
|
158
|
-
}
|
|
159
|
-
catch (e) {
|
|
160
|
-
if (e.code !== 'ENOENT') {
|
|
161
|
-
console.log(`Unable to rename ${dirName} to ${discardDir}: ${e.message}`);
|
|
162
|
-
throw e;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
try {
|
|
166
|
-
await rename(tempDir, dirName);
|
|
167
|
-
}
|
|
168
|
-
catch (e) {
|
|
169
|
-
console.log(`Unable to rename ${tempDir} to ${dirName}: ${e.message}`);
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
// Touch all the created files. This is to ensure that file watchers are notified, because
|
|
173
|
-
// when the directory is renamed into place, filesystem watchers may not report on all the
|
|
174
|
-
// files inside the directory.
|
|
175
|
-
readdir(dirName, (readErr, files) => {
|
|
176
|
-
if (readErr) {
|
|
177
|
-
console.warn(`Unable to read directory ${dirName}: ${readErr.message}`);
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
files
|
|
181
|
-
.filter((file) => !['.', '..'].includes(file))
|
|
182
|
-
.map((file) => touch(join(dirName, file)));
|
|
183
|
-
});
|
|
184
|
-
};
|
|
185
125
|
function formatValue(value) {
|
|
186
126
|
if (!value) {
|
|
187
127
|
return 'Null';
|
|
@@ -217,11 +157,10 @@ module.exports = {
|
|
|
217
157
|
formatHttpServerRequest,
|
|
218
158
|
listAppMapFiles,
|
|
219
159
|
loadAppMap,
|
|
160
|
+
ctime,
|
|
220
161
|
mtime,
|
|
221
162
|
verbose,
|
|
222
163
|
processFiles,
|
|
223
|
-
buildDirectory,
|
|
224
|
-
renameFile,
|
|
225
164
|
exists,
|
|
226
165
|
prefixLines,
|
|
227
166
|
};
|
package/built/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.js"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.js"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appland/appmap",
|
|
3
|
-
"version": "3.27.
|
|
3
|
+
"version": "3.27.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"bin": "built/cli.js",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
|
-
"built"
|
|
10
|
+
"built",
|
|
11
|
+
"resources"
|
|
11
12
|
],
|
|
12
13
|
"scripts": {
|
|
13
14
|
"lint": "eslint 'src/**/*.js' 'tests/**/*.js'",
|
|
@@ -34,7 +35,7 @@
|
|
|
34
35
|
"@types/sinon": "^10.0.2",
|
|
35
36
|
"@types/tmp": "^0.2.3",
|
|
36
37
|
"@types/w3c-xmlserializer": "^2.0.2",
|
|
37
|
-
"
|
|
38
|
+
"@types/write-file-atomic": "^4.0.0",
|
|
38
39
|
"crypto": "^1.0.1",
|
|
39
40
|
"css-loader": "^6.2.0",
|
|
40
41
|
"eslint": "^7.25.0",
|
|
@@ -94,11 +95,13 @@
|
|
|
94
95
|
"open": "^8.2.1",
|
|
95
96
|
"ora": "^5.4.1",
|
|
96
97
|
"port-pid": "^0.0.7",
|
|
98
|
+
"pretty-bytes": "^5.6.0",
|
|
97
99
|
"ps-node": "^0.1.6",
|
|
98
100
|
"read-pkg-up": "^7.0.1",
|
|
99
101
|
"semver": "^7.3.5",
|
|
100
102
|
"supports-hyperlinks": "^2.2.0",
|
|
101
103
|
"w3c-xmlserializer": "^2.0.0",
|
|
104
|
+
"write-file-atomic": "^4.0.1",
|
|
102
105
|
"yargs": "^17.1.1"
|
|
103
106
|
}
|
|
104
107
|
}
|
|
File without changes
|