@appland/appmap 3.82.0 → 3.83.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.
- package/CHANGELOG.md +16 -0
- package/built/cli.js +2 -0
- package/built/cli.js.map +1 -1
- package/built/cmds/archive/ArchiveMetadata.js +3 -0
- package/built/cmds/archive/ArchiveMetadata.js.map +1 -0
- package/built/cmds/archive/CountNumProcessed.js +15 -0
- package/built/cmds/archive/CountNumProcessed.js.map +1 -0
- package/built/cmds/archive/analyze.js +42 -0
- package/built/cmds/archive/analyze.js.map +1 -0
- package/built/cmds/archive/archive.js +177 -0
- package/built/cmds/archive/archive.js.map +1 -0
- package/built/cmds/archive/archiveStore.js +148 -0
- package/built/cmds/archive/archiveStore.js.map +1 -0
- package/built/cmds/archive/generateOpenAPI.js +17 -0
- package/built/cmds/archive/generateOpenAPI.js.map +1 -0
- package/built/cmds/archive/gitAncestors.js +15 -0
- package/built/cmds/archive/gitAncestors.js.map +1 -0
- package/built/cmds/archive/gitDeletedFiles.js +11 -0
- package/built/cmds/archive/gitDeletedFiles.js.map +1 -0
- package/built/cmds/archive/gitModifiedFiles.js +14 -0
- package/built/cmds/archive/gitModifiedFiles.js.map +1 -0
- package/built/cmds/archive/gitNewFiles.js +11 -0
- package/built/cmds/archive/gitNewFiles.js.map +1 -0
- package/built/cmds/archive/gitRevision.js +11 -0
- package/built/cmds/archive/gitRevision.js.map +1 -0
- package/built/cmds/archive/indexAppMaps.js +19 -0
- package/built/cmds/archive/indexAppMaps.js.map +1 -0
- package/built/cmds/archive/reportAppMapProcessingError.js +18 -0
- package/built/cmds/archive/reportAppMapProcessingError.js.map +1 -0
- package/built/cmds/archive/scan.js +46 -0
- package/built/cmds/archive/scan.js.map +1 -0
- package/built/cmds/archive/serializeAppMapFilter.js +19 -0
- package/built/cmds/archive/serializeAppMapFilter.js.map +1 -0
- package/built/cmds/archive/updateSequenceDiagrams.js +42 -0
- package/built/cmds/archive/updateSequenceDiagrams.js.map +1 -0
- package/built/cmds/sequenceDiagram.js.map +1 -1
- package/built/fingerprint/fingerprintQueue.js +6 -1
- package/built/fingerprint/fingerprintQueue.js.map +1 -1
- package/built/fingerprint/fingerprinter.js +4 -3
- package/built/fingerprint/fingerprinter.js.map +1 -1
- package/built/html/appmap.js +1 -1
- package/built/html/appmap.js.map +3 -3
- package/built/html/sequenceDiagram.js +1 -1
- package/built/html/sequenceDiagram.js.map +3 -3
- package/built/lib/executeCommand.js +50 -0
- package/built/lib/executeCommand.js.map +1 -0
- package/built/lib/findings.js +6 -0
- package/built/lib/findings.js.map +1 -0
- package/built/lib/loadAppMapConfig.js +24 -9
- package/built/lib/loadAppMapConfig.js.map +1 -1
- package/built/lib/sqlErrorLog.js +6 -9
- package/built/lib/sqlErrorLog.js.map +1 -1
- package/built/telemetry.js +3 -1
- package/built/telemetry.js.map +1 -1
- package/built/utils.js +9 -2
- package/built/utils.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,18 @@
|
|
|
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 fileTooLargeError_1 = __importDefault(require("../../fingerprint/fileTooLargeError"));
|
|
7
|
+
function reportAppMapProcessingError(jobName) {
|
|
8
|
+
return (error) => {
|
|
9
|
+
if (error instanceof fileTooLargeError_1.default) {
|
|
10
|
+
process.stderr.write(`${jobName}: skipped large AppMap ${error.path} (${error.bytes / 1024}kb})\n`);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
process.stderr.write(`${jobName}: ${error}\n`);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
exports.default = reportAppMapProcessingError;
|
|
18
|
+
//# sourceMappingURL=reportAppMapProcessingError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reportAppMapProcessingError.js","sourceRoot":"","sources":["../../../src/cmds/archive/reportAppMapProcessingError.ts"],"names":[],"mappings":";;;;;AAAA,4FAAoE;AAEpE,SAAwB,2BAA2B,CAAC,OAAe;IACjE,OAAO,CAAC,KAAU,EAAE,EAAE;QACpB,IAAI,KAAK,YAAY,2BAAiB,EAAE;YACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,OAAO,0BAA0B,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,GAAG,IAAI,QAAQ,CAC9E,CAAC;SACH;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC;SAChD;IACH,CAAC,CAAC;AACJ,CAAC;AAVD,8CAUC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scan = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const executeCommand_1 = require("../../lib/executeCommand");
|
|
6
|
+
const promises_1 = require("fs/promises");
|
|
7
|
+
const utils_1 = require("../../utils");
|
|
8
|
+
async function scan(appMapDir) {
|
|
9
|
+
await (0, executeCommand_1.executeCommand)(`npx @appland/scanner@latest scan --appmap-dir ${appMapDir} --all`);
|
|
10
|
+
const scanResultsData = await (0, promises_1.readFile)('appmap-findings.json', 'utf8');
|
|
11
|
+
await (0, promises_1.rm)('appmap-findings.json');
|
|
12
|
+
const scanResults = JSON.parse(scanResultsData);
|
|
13
|
+
const scanResultsTemplateJSON = JSON.parse(scanResultsData);
|
|
14
|
+
delete scanResultsTemplateJSON['findings'];
|
|
15
|
+
const appMapMetadata = scanResultsTemplateJSON['appMapMetadata'];
|
|
16
|
+
const scanResultsTemplate = JSON.stringify(scanResultsTemplateJSON);
|
|
17
|
+
const findings = scanResults['findings'];
|
|
18
|
+
const findingsByAppMap = findings.reduce((memo, finding) => {
|
|
19
|
+
if (!memo.has(finding.appMapFile))
|
|
20
|
+
memo.set(finding.appMapFile, [finding]);
|
|
21
|
+
else
|
|
22
|
+
memo.get(finding.appMapFile).push(finding);
|
|
23
|
+
return memo;
|
|
24
|
+
}, new Map());
|
|
25
|
+
return await (0, utils_1.processNamedFiles)(appMapDir, 'metadata.json', async (metadataFile) => {
|
|
26
|
+
// TODO: This is hacky, but scanning everything at once is an efficient way to get it done,
|
|
27
|
+
// and the scanner code is not accessible from the CLI project.
|
|
28
|
+
const indexDir = (0, path_1.dirname)(metadataFile);
|
|
29
|
+
const appmapFileName = (0, path_1.join)(...indexDir.split(path_1.sep).reverse().slice(1).reverse(), (0, path_1.basename)(indexDir) + '.appmap.json');
|
|
30
|
+
const scanResults = JSON.parse(scanResultsTemplate);
|
|
31
|
+
const findings = findingsByAppMap.get(appmapFileName) || [];
|
|
32
|
+
const scanSummary = scanResults['summary'];
|
|
33
|
+
scanSummary.numChecks = scanSummary.numChecks / scanSummary.numAppMaps;
|
|
34
|
+
scanSummary.numAppMaps = 1;
|
|
35
|
+
scanSummary.numFindings = findings.length;
|
|
36
|
+
scanResults['findings'] = findings;
|
|
37
|
+
const metadataEntry = appMapMetadata[appmapFileName];
|
|
38
|
+
if (metadataEntry)
|
|
39
|
+
scanResults['appMapMetadata'] = { [appmapFileName]: metadataEntry };
|
|
40
|
+
else
|
|
41
|
+
console.warn(`No appMapMetadata found for '${appmapFileName}' in scan results.`);
|
|
42
|
+
await (0, promises_1.writeFile)((0, path_1.join)(indexDir, 'appmap-findings.json'), JSON.stringify(scanResults, null, 2));
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
exports.scan = scan;
|
|
46
|
+
//# sourceMappingURL=scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/cmds/archive/scan.ts"],"names":[],"mappings":";;;AAAA,+BAA8D;AAC9D,6DAA0D;AAC1D,0CAAsD;AAEtD,uCAAgD;AAEzC,KAAK,UAAU,IAAI,CAAC,SAAiB;IAC1C,MAAM,IAAA,+BAAc,EAAC,iDAAiD,SAAS,QAAQ,CAAC,CAAC;IAEzF,MAAM,eAAe,GAAG,MAAM,IAAA,mBAAQ,EAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IACvE,MAAM,IAAA,aAAE,EAAC,sBAAsB,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC5D,OAAO,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAwB,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IACtF,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAc,WAAW,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACjF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;;YACtE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,IAAI,GAAG,EAAqB,CAAC,CAAC;IAEjC,OAAO,MAAM,IAAA,yBAAiB,EAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;QAChF,2FAA2F;QAC3F,+DAA+D;QAE/D,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,YAAY,CAAC,CAAC;QACvC,MAAM,cAAc,GAAG,IAAA,WAAI,EACzB,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAG,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EACnD,IAAA,eAAQ,EAAC,QAAQ,CAAC,GAAG,cAAc,CACpC,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAc,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAEvE,MAAM,WAAW,GACf,WAAW,CAAC,SAAS,CAAC,CAAC;QACzB,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC;QACvE,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC;QAC3B,WAAW,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE1C,WAAW,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;QAEnC,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,aAAa;YAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;;YAClF,OAAO,CAAC,IAAI,CAAC,gCAAgC,cAAc,oBAAoB,CAAC,CAAC;QAEtF,MAAM,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,QAAQ,EAAE,sBAAsB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC;AA7CD,oBA6CC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serializeAppMapFilter = void 0;
|
|
4
|
+
function serializeAppMapFilter(appmapFilter) {
|
|
5
|
+
const { declutter } = appmapFilter;
|
|
6
|
+
const declutterNames = Object.keys(declutter).filter((key) => declutter[key].on);
|
|
7
|
+
return declutterNames
|
|
8
|
+
.sort((a, b) => a.localeCompare(b))
|
|
9
|
+
.reduce((acc, key) => {
|
|
10
|
+
const declutterValue = Object.assign({}, declutter[key]);
|
|
11
|
+
delete declutterValue.on;
|
|
12
|
+
delete declutterValue.default;
|
|
13
|
+
delete declutterValue.defaultValue;
|
|
14
|
+
acc[key] = declutterValue;
|
|
15
|
+
return acc;
|
|
16
|
+
}, {});
|
|
17
|
+
}
|
|
18
|
+
exports.serializeAppMapFilter = serializeAppMapFilter;
|
|
19
|
+
//# sourceMappingURL=serializeAppMapFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializeAppMapFilter.js","sourceRoot":"","sources":["../../../src/cmds/archive/serializeAppMapFilter.ts"],"names":[],"mappings":";;;AAEA,SAAgB,qBAAqB,CAAC,YAA0B;IAC9D,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;IACnC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACjF,OAAO,cAAc;SAClB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SAClC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,cAAc,qBAAQ,SAAS,CAAC,GAAG,CAAC,CAAE,CAAC;QAC7C,OAAO,cAAc,CAAC,EAAE,CAAC;QACzB,OAAO,cAAc,CAAC,OAAO,CAAC;QAC9B,OAAO,cAAc,CAAC,YAAY,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACX,CAAC;AAbD,sDAaC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
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 models_1 = require("@appland/models");
|
|
7
|
+
const sequence_diagram_1 = require("@appland/sequence-diagram");
|
|
8
|
+
const promises_1 = require("fs/promises");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const utils_1 = require("../../utils");
|
|
11
|
+
const fileTooLargeError_1 = __importDefault(require("../../fingerprint/fileTooLargeError"));
|
|
12
|
+
const CountNumProcessed_1 = require("./CountNumProcessed");
|
|
13
|
+
const reportAppMapProcessingError_1 = __importDefault(require("./reportAppMapProcessingError"));
|
|
14
|
+
async function updateSequenceDiagrams(dir, maxAppMapSizeInBytes, filter) {
|
|
15
|
+
const specOptions = {
|
|
16
|
+
loops: true,
|
|
17
|
+
};
|
|
18
|
+
const oversizedAppMaps = new Array();
|
|
19
|
+
const generateDiagram = async (appmapFileName) => {
|
|
20
|
+
// Determine size of file appmapFileName in bytes
|
|
21
|
+
const stats = await (0, promises_1.stat)(appmapFileName);
|
|
22
|
+
if (stats.size > maxAppMapSizeInBytes) {
|
|
23
|
+
oversizedAppMaps.push(appmapFileName);
|
|
24
|
+
throw new fileTooLargeError_1.default(appmapFileName, stats.size, maxAppMapSizeInBytes);
|
|
25
|
+
}
|
|
26
|
+
const fullAppMap = (0, models_1.buildAppMap)()
|
|
27
|
+
.source(await (0, promises_1.readFile)(appmapFileName, 'utf8'))
|
|
28
|
+
.build();
|
|
29
|
+
const filteredAppMap = filter.filter(fullAppMap, []);
|
|
30
|
+
const specification = sequence_diagram_1.Specification.build(filteredAppMap, specOptions);
|
|
31
|
+
const diagram = (0, sequence_diagram_1.buildDiagram)(appmapFileName, filteredAppMap, specification);
|
|
32
|
+
const diagramOutput = (0, sequence_diagram_1.format)(sequence_diagram_1.FormatType.JSON, diagram, appmapFileName);
|
|
33
|
+
const indexDir = (0, path_1.join)((0, path_1.dirname)(appmapFileName), (0, path_1.basename)(appmapFileName, '.appmap.json'));
|
|
34
|
+
const diagramFileName = (0, path_1.join)(indexDir, 'sequence.json');
|
|
35
|
+
await (0, promises_1.writeFile)(diagramFileName, diagramOutput.diagram);
|
|
36
|
+
};
|
|
37
|
+
const counter = new CountNumProcessed_1.CountNumProcessed();
|
|
38
|
+
await (0, utils_1.processFiles)((0, path_1.join)(dir, '**', '*.appmap.json'), generateDiagram, counter.setCount(), (0, reportAppMapProcessingError_1.default)('Sequence diagram'));
|
|
39
|
+
return { numGenerated: counter.count, oversizedAppMaps };
|
|
40
|
+
}
|
|
41
|
+
exports.default = updateSequenceDiagrams;
|
|
42
|
+
//# sourceMappingURL=updateSequenceDiagrams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateSequenceDiagrams.js","sourceRoot":"","sources":["../../../src/cmds/archive/updateSequenceDiagrams.ts"],"names":[],"mappings":";;;;;AAAA,4CAA4D;AAC5D,gEAMmC;AACnC,0CAAwD;AACxD,+BAA+C;AAC/C,uCAA2C;AAC3C,4FAAoE;AACpE,2DAAwD;AACxD,gGAAwE;AAEzD,KAAK,UAAU,sBAAsB,CAClD,GAAW,EACX,oBAA4B,EAC5B,MAAoB;IAEpB,MAAM,WAAW,GAAG;QAClB,KAAK,EAAE,IAAI;KACc,CAAC;IAE5B,MAAM,gBAAgB,GAAG,IAAI,KAAK,EAAU,CAAC;IAE7C,MAAM,eAAe,GAAG,KAAK,EAAE,cAAsB,EAAE,EAAE;QACvD,iDAAiD;QACjD,MAAM,KAAK,GAAG,MAAM,IAAA,eAAI,EAAC,cAAc,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,IAAI,GAAG,oBAAoB,EAAE;YACrC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACtC,MAAM,IAAI,2BAAiB,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;SAC/E;QAED,MAAM,UAAU,GAAG,IAAA,oBAAW,GAAE;aAC7B,MAAM,CAAC,MAAM,IAAA,mBAAQ,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC;aAC9C,KAAK,EAAE,CAAC;QACX,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,gCAAa,CAAC,KAAK,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,IAAA,+BAAY,EAAC,cAAc,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;QAC5E,MAAM,aAAa,GAAG,IAAA,yBAAM,EAAC,6BAAU,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,IAAA,cAAO,EAAC,cAAc,CAAC,EAAE,IAAA,eAAQ,EAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;QACzF,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACxD,MAAM,IAAA,oBAAS,EAAC,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,qCAAiB,EAAE,CAAC;IACxC,MAAM,IAAA,oBAAY,EAChB,IAAA,WAAI,EAAC,GAAG,EAAE,IAAI,EAAE,eAAe,CAAC,EAChC,eAAe,EACf,OAAO,CAAC,QAAQ,EAAE,EAClB,IAAA,qCAA2B,EAAC,kBAAkB,CAAC,CAChD,CAAC;IAEF,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC;AAC3D,CAAC;AAxCD,yCAwCC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequenceDiagram.js","sourceRoot":"","sources":["../../src/cmds/sequenceDiagram.ts"],"names":[],"mappings":";;;;;;AAAA,0CAAyD;AACzD,+BAA+C;AAE/C,0EAAuE;AACvE,oCAAmC;AACnC,4CAAoE;AACpE,
|
|
1
|
+
{"version":3,"file":"sequenceDiagram.js","sourceRoot":"","sources":["../../src/cmds/sequenceDiagram.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ function isNodeError(error, code) {
|
|
|
12
12
|
class FingerprintQueue {
|
|
13
13
|
constructor(size = 2) {
|
|
14
14
|
this.size = size;
|
|
15
|
+
this.failOnError = true;
|
|
15
16
|
this.pending = new Set();
|
|
16
17
|
// eslint-disable-next-line no-use-before-define
|
|
17
18
|
this.handler = new fingerprinter_1.default();
|
|
@@ -39,8 +40,12 @@ class FingerprintQueue {
|
|
|
39
40
|
else if (isNodeError(error, 'ENOENT')) {
|
|
40
41
|
console.warn(`Skipped: ${error.path}\nThe file does not exist.`);
|
|
41
42
|
}
|
|
42
|
-
else
|
|
43
|
+
else if (this.failOnError) {
|
|
43
44
|
reject(error);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.warn(`Skipped: ${error}`);
|
|
48
|
+
}
|
|
44
49
|
});
|
|
45
50
|
// The queue will run continuously from here on out, which is what we want.
|
|
46
51
|
// Items will be added to the queue as they are discovered.
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;IAMnC,YAAoB,OAAO,CAAC;QAAR,SAAI,GAAJ,IAAI,CAAI;QAJrB,gBAAW,GAAG,IAAI,CAAC;QAElB,YAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAGlC,gDAAgD;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,uBAAa,EAAE,CAAC;QACnC,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,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;qBAAM,IAAI,IAAI,CAAC,WAAW,EAAE;oBAC3B,MAAM,CAAC,KAAK,CAAC,CAAC;iBACf;qBAAM;oBACL,OAAO,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;iBACnC;YACH,CAAC,CAAC,CAAC;YACH,2EAA2E;YAC3E,2DAA2D;YAC3D,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;AAlDD,mCAkDC"}
|
|
@@ -52,7 +52,7 @@ const renameFile = (0, util_1.promisify)(graceful_fs_1.default.rename);
|
|
|
52
52
|
* * sql can contain the analysis (action, tables, columns), and/or the normalized query string.
|
|
53
53
|
*/
|
|
54
54
|
exports.VERSION = '1.2.0';
|
|
55
|
-
const MAX_APPMAP_SIZE = 50 *
|
|
55
|
+
const MAX_APPMAP_SIZE = 50 * 1024 * 1024;
|
|
56
56
|
class Fingerprinter extends events_1.default {
|
|
57
57
|
constructor() {
|
|
58
58
|
super(...arguments);
|
|
@@ -62,6 +62,7 @@ class Fingerprinter extends events_1.default {
|
|
|
62
62
|
* pass to avoid re-reading the same 'version' files over and over.
|
|
63
63
|
*/
|
|
64
64
|
this.checkVersion = true;
|
|
65
|
+
this.maxFileSizeInBytes = MAX_APPMAP_SIZE;
|
|
65
66
|
}
|
|
66
67
|
async fingerprint(appMapFileName) {
|
|
67
68
|
if ((0, utils_1.verbose)()) {
|
|
@@ -78,8 +79,8 @@ class Fingerprinter extends events_1.default {
|
|
|
78
79
|
}
|
|
79
80
|
return;
|
|
80
81
|
}
|
|
81
|
-
if (index.appmapFileSize() >
|
|
82
|
-
throw new fileTooLargeError_1.default(appMapFileName, index.appmapFileSize(),
|
|
82
|
+
if (index.appmapFileSize() > this.maxFileSizeInBytes)
|
|
83
|
+
throw new fileTooLargeError_1.default(appMapFileName, index.appmapFileSize(), this.maxFileSizeInBytes);
|
|
83
84
|
const appmapData = await index.loadAppMapData();
|
|
84
85
|
if (!appmapData)
|
|
85
86
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprinter.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprinter.ts"],"names":[],"mappings":";;;;;;AACA,+BAAkD;AAClD,8DAAqC;AACrC,+BAAiC;AACjC,4CAAwD;AACxD,oDAA4B;AAC5B,4EAAoD;AAEpD,oCAA0C;AAC1C,iDAA0D;AAC1D,gEAAwC;AACxC,oDAAkC;AAElC,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;
|
|
1
|
+
{"version":3,"file":"fingerprinter.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprinter.ts"],"names":[],"mappings":"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"}
|