@appland/appmap 3.61.0 → 3.63.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 +14 -0
- package/built/cmds/openapi.js +59 -12
- package/built/cmds/openapi.js.map +1 -1
- package/built/html/page.js +45 -44
- package/built/html/page.js.map +3 -3
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [@appland/appmap-v3.63.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.62.0...@appland/appmap-v3.63.0) (2023-01-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Filter openapi processing by AppMap size ([5b3e4b8](https://github.com/getappmap/appmap-js/commit/5b3e4b8250daceda80f3180f788ed747c488e71c))
|
|
7
|
+
|
|
8
|
+
# [@appland/appmap-v3.62.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.61.0...@appland/appmap-v3.62.0) (2023-01-20)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* update message in openapi doc ([f093af7](https://github.com/getappmap/appmap-js/commit/f093af75cdf0e69488b410032ecf6023de9ac219))
|
|
14
|
+
|
|
1
15
|
# [@appland/appmap-v3.61.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.60.1...@appland/appmap-v3.61.0) (2023-01-18)
|
|
2
16
|
|
|
3
17
|
|
package/built/cmds/openapi.js
CHANGED
|
@@ -22,6 +22,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
22
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.fileSizeFilter = void 0;
|
|
25
26
|
const path_1 = require("path");
|
|
26
27
|
const fs_1 = require("fs");
|
|
27
28
|
const promises_1 = require("fs/promises");
|
|
@@ -34,12 +35,33 @@ const locateAppMapDir_1 = require("../lib/locateAppMapDir");
|
|
|
34
35
|
const handleWorkingDirectory_1 = require("../lib/handleWorkingDirectory");
|
|
35
36
|
const locateAppMapConfigFile_1 = require("../lib/locateAppMapConfigFile");
|
|
36
37
|
const telemetry_1 = __importDefault(require("../telemetry"));
|
|
38
|
+
// Skip files that are larger than a specified max size.
|
|
39
|
+
function fileSizeFilter(maxFileSize) {
|
|
40
|
+
return async (file) => {
|
|
41
|
+
let fileStat;
|
|
42
|
+
try {
|
|
43
|
+
fileStat = await (0, promises_1.stat)(file);
|
|
44
|
+
}
|
|
45
|
+
catch (_a) {
|
|
46
|
+
return { enable: false, message: `File ${file} not found` };
|
|
47
|
+
}
|
|
48
|
+
if (fileStat.size <= maxFileSize)
|
|
49
|
+
return { enable: true };
|
|
50
|
+
else
|
|
51
|
+
return {
|
|
52
|
+
enable: false,
|
|
53
|
+
message: `Skipping ${file} as its file size of ${fileStat.size} bytes is larger than the maximum configured file size of ${maxFileSize} bytes`,
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
exports.fileSizeFilter = fileSizeFilter;
|
|
37
58
|
class OpenAPICommand {
|
|
38
59
|
constructor(appmapDir) {
|
|
39
60
|
this.appmapDir = appmapDir;
|
|
40
61
|
this.model = new openapi_1.Model();
|
|
41
62
|
this.securitySchemes = new openapi_1.SecuritySchemes();
|
|
42
63
|
this.errors = [];
|
|
64
|
+
this.filter = async (file) => ({ enable: true });
|
|
43
65
|
}
|
|
44
66
|
async execute() {
|
|
45
67
|
const q = (0, async_1.queue)(this.collectAppMap.bind(this), 5);
|
|
@@ -49,12 +71,23 @@ class OpenAPICommand {
|
|
|
49
71
|
throw new Error(`AppMap directory ${this.appmapDir} does not exist`);
|
|
50
72
|
}
|
|
51
73
|
const files = glob_1.glob.sync((0, path_1.join)(this.appmapDir, '**', '*.appmap.json'));
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
74
|
+
for (let index = 0; index < files.length; index++) {
|
|
75
|
+
const file = files[index];
|
|
76
|
+
const filterResult = await this.filter(file);
|
|
77
|
+
if (!filterResult.enable) {
|
|
78
|
+
if (filterResult.message)
|
|
79
|
+
console.warn(filterResult.message);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
q.push(file);
|
|
83
|
+
}
|
|
84
|
+
if (q.length() > 0) {
|
|
85
|
+
await new Promise((resolve, reject) => {
|
|
86
|
+
q.drain(resolve);
|
|
87
|
+
q.error(reject);
|
|
88
|
+
q.resume();
|
|
89
|
+
});
|
|
90
|
+
}
|
|
58
91
|
return [
|
|
59
92
|
{
|
|
60
93
|
paths: this.model.openapi(),
|
|
@@ -110,6 +143,10 @@ exports.default = {
|
|
|
110
143
|
args.option('appmap-dir', {
|
|
111
144
|
describe: 'directory to recursively inspect for AppMaps',
|
|
112
145
|
});
|
|
146
|
+
args.option('max-size', {
|
|
147
|
+
describe: 'maximum AppMap size that will be processed, in filesystem-reported MB',
|
|
148
|
+
default: '50',
|
|
149
|
+
});
|
|
113
150
|
args.option('output-file', {
|
|
114
151
|
alias: ['o'],
|
|
115
152
|
describe: 'output file name',
|
|
@@ -131,7 +168,8 @@ exports.default = {
|
|
|
131
168
|
(0, openapi_1.verbose)(argv.verbose);
|
|
132
169
|
(0, handleWorkingDirectory_1.handleWorkingDirectory)(argv.directory);
|
|
133
170
|
const appmapDir = await (0, locateAppMapDir_1.locateAppMapDir)(argv.appmapDir);
|
|
134
|
-
const { openapiTitle, openapiVersion } = argv;
|
|
171
|
+
const { openapiTitle, openapiVersion, maxSize } = argv;
|
|
172
|
+
const maxAppMapSizeInBytes = Math.round(parseFloat(maxSize) * 1024 * 1024);
|
|
135
173
|
function tryConfigure(path, fn) {
|
|
136
174
|
try {
|
|
137
175
|
fn();
|
|
@@ -142,6 +180,7 @@ exports.default = {
|
|
|
142
180
|
}
|
|
143
181
|
const appmapConfigFile = await (0, locateAppMapConfigFile_1.locateAppMapConfigFile)(appmapDir);
|
|
144
182
|
const cmd = new OpenAPICommand(appmapDir);
|
|
183
|
+
cmd.filter = fileSizeFilter(maxAppMapSizeInBytes);
|
|
145
184
|
const [openapi, numAppMaps] = await cmd.execute();
|
|
146
185
|
sendTelemetry(openapi.paths, numAppMaps);
|
|
147
186
|
for (const error of cmd.errors) {
|
|
@@ -174,13 +213,21 @@ exports.default = {
|
|
|
174
213
|
applySchemaOverrides(template.paths, overrides);
|
|
175
214
|
if (template.paths)
|
|
176
215
|
sortProperties(template.paths);
|
|
177
|
-
const fileContents = `#
|
|
216
|
+
const fileContents = `# This document can be generated with the following command:
|
|
217
|
+
# npx @appland/appmap@latest openapi
|
|
218
|
+
#
|
|
219
|
+
# NOTE: You will need Node.js installed on your machine to run the above command
|
|
220
|
+
#
|
|
221
|
+
# Some helpful options:
|
|
222
|
+
# --output-file output file name
|
|
223
|
+
# --openapi-title title field of the OpenAPI document
|
|
224
|
+
# --openapi-version version field of the OpenAPI document
|
|
225
|
+
#
|
|
226
|
+
# For more info, run:
|
|
227
|
+
# npx @appland/appmap@latest openapi --help
|
|
178
228
|
#
|
|
179
|
-
#
|
|
180
|
-
# Customize the version with: --openapi-version
|
|
181
|
-
# Customize this entire template with: --openapi-template
|
|
229
|
+
# Visit our docs: https://appmap.io/docs/openapi.html
|
|
182
230
|
#
|
|
183
|
-
# 'paths' and 'components' will be populated automatically.
|
|
184
231
|
${js_yaml_1.default.dump(template)}
|
|
185
232
|
`;
|
|
186
233
|
if (argv.outputFile) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/cmds/openapi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/cmds/openapi.ts"],"names":[],"mappings":"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"}
|