@appland/appmap 3.99.3 → 3.100.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.
Files changed (35) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/built/cli.js +19 -34
  3. package/built/cli.js.map +1 -1
  4. package/built/cmds/agentInstaller/gradleInstaller.js +2 -2
  5. package/built/cmds/agentInstaller/mavenInstaller.js +1 -1
  6. package/built/cmds/compare/ChangeReporter.js.map +1 -1
  7. package/built/cmds/compare/detectRevisions.js +6 -1
  8. package/built/cmds/compare/detectRevisions.js.map +1 -1
  9. package/built/cmds/compare-report/MarkdownReport.js +1 -1
  10. package/built/cmds/compare-report/ReportSection.js +4 -5
  11. package/built/cmds/compare-report/ReportSection.js.map +1 -1
  12. package/built/cmds/compare-report/compareReport.js.map +1 -1
  13. package/built/cmds/inventory/DependencyMap.js +18 -0
  14. package/built/cmds/inventory/DependencyMap.js.map +1 -0
  15. package/built/cmds/inventory/Report.js +3 -0
  16. package/built/cmds/inventory/Report.js.map +1 -0
  17. package/built/cmds/inventory/inventory.js +225 -0
  18. package/built/cmds/inventory/inventory.js.map +1 -0
  19. package/built/cmds/inventory-report/MarkdownReport.js +124 -0
  20. package/built/cmds/inventory-report/MarkdownReport.js.map +1 -0
  21. package/built/cmds/inventory-report/inventoryReport.js +58 -0
  22. package/built/cmds/inventory-report/inventoryReport.js.map +1 -0
  23. package/built/html/appmap.js +91 -91
  24. package/built/html/appmap.js.map +3 -3
  25. package/built/html/sequenceDiagram.js +91 -91
  26. package/built/html/sequenceDiagram.js.map +3 -3
  27. package/built/utils.js +1 -1
  28. package/built/utils.js.map +1 -1
  29. package/package.json +2 -2
  30. package/resources/inventory-report/default/inventory.hbs +89 -0
  31. package/resources/inventory-report/welcome/welcome.hbs +115 -0
  32. package/built/cmds/compare/ArchiveAnalyzer.js +0 -69
  33. package/built/cmds/compare/ArchiveAnalyzer.js.map +0 -1
  34. package/built/inventoryCommand.js +0 -44
  35. package/built/inventoryCommand.js.map +0 -1
@@ -0,0 +1,225 @@
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
+ exports.handler = exports.builder = exports.describe = exports.command = void 0;
7
+ const yargs_1 = __importDefault(require("yargs"));
8
+ const path_1 = require("path");
9
+ const promises_1 = require("fs/promises");
10
+ const fs_1 = require("fs");
11
+ const js_yaml_1 = require("js-yaml");
12
+ const openapi_types_1 = require("openapi-types");
13
+ const handleWorkingDirectory_1 = require("../../lib/handleWorkingDirectory");
14
+ const utils_1 = require("../../utils");
15
+ const console_1 = require("console");
16
+ const DependencyMap_1 = __importDefault(require("./DependencyMap"));
17
+ const assert_1 = __importDefault(require("assert"));
18
+ const locateAppMapDir_1 = require("../../lib/locateAppMapDir");
19
+ async function buildRepositoryReport(appmapDir, appmaps, resourceTokens) {
20
+ var _a;
21
+ const appmapCountByRecorderName = {};
22
+ const appmapCountByHTTPServerRequestCount = {};
23
+ const appmapCountBySQLQueryCount = {};
24
+ const clientRouteCountByResource = {};
25
+ const uniquePackageDependencies = new DependencyMap_1.default();
26
+ const uniqueClassDependencies = new DependencyMap_1.default();
27
+ const sqlTables = new Set();
28
+ const labels = new Set();
29
+ for (const appmap of appmaps) {
30
+ {
31
+ const metadataFile = (0, path_1.join)((0, path_1.dirname)(appmap), (0, path_1.basename)(appmap, '.appmap.json'), 'metadata.json');
32
+ const metadata = JSON.parse(await (0, promises_1.readFile)(metadataFile, 'utf-8'));
33
+ const recorderName = ((_a = metadata.recorder) === null || _a === void 0 ? void 0 : _a.name) || 'unknown';
34
+ if (!appmapCountByRecorderName[recorderName])
35
+ appmapCountByRecorderName[recorderName] = 1;
36
+ else
37
+ appmapCountByRecorderName[recorderName] = appmapCountByRecorderName[recorderName] + 1;
38
+ }
39
+ {
40
+ const httpServerRequestsFile = (0, path_1.join)((0, path_1.dirname)(appmap), (0, path_1.basename)(appmap, '.appmap.json'), 'canonical.httpServerRequests.json');
41
+ const httpServerRequests = JSON.parse(await (0, promises_1.readFile)(httpServerRequestsFile, 'utf-8'));
42
+ const requestCount = String(httpServerRequests.length);
43
+ if (!appmapCountByHTTPServerRequestCount[requestCount])
44
+ appmapCountByHTTPServerRequestCount[requestCount] = 1;
45
+ else
46
+ appmapCountByHTTPServerRequestCount[requestCount] =
47
+ appmapCountByHTTPServerRequestCount[requestCount] + 1;
48
+ }
49
+ {
50
+ const httpClientRequestsFile = (0, path_1.join)((0, path_1.dirname)(appmap), (0, path_1.basename)(appmap, '.appmap.json'), 'canonical.httpClientRequests.json');
51
+ const httpClientRequests = JSON.parse(await (0, promises_1.readFile)(httpClientRequestsFile, 'utf-8'));
52
+ for (const request of httpClientRequests) {
53
+ const { route } = request;
54
+ const [_method, urlStr] = route.split(' ');
55
+ let hostname, path;
56
+ try {
57
+ const url = new URL(urlStr);
58
+ hostname = url.hostname;
59
+ path = url.pathname;
60
+ }
61
+ catch (_b) {
62
+ (0, console_1.warn)(`Error parsing URL: ${urlStr}`);
63
+ path = urlStr;
64
+ }
65
+ let directoryIsh = path.split('/').slice(0, resourceTokens).join('/');
66
+ if (hostname)
67
+ directoryIsh = [hostname, directoryIsh].join('');
68
+ if (!clientRouteCountByResource[directoryIsh])
69
+ clientRouteCountByResource[directoryIsh] = 1;
70
+ else
71
+ clientRouteCountByResource[directoryIsh] = clientRouteCountByResource[directoryIsh] + 1;
72
+ }
73
+ }
74
+ {
75
+ const labelsFile = (0, path_1.join)((0, path_1.dirname)(appmap), (0, path_1.basename)(appmap, '.appmap.json'), 'canonical.labels.json');
76
+ const labelsArray = JSON.parse(await (0, promises_1.readFile)(labelsFile, 'utf-8'));
77
+ for (const label of labelsArray)
78
+ labels.add(label);
79
+ }
80
+ {
81
+ const sqlQueriesFile = (0, path_1.join)((0, path_1.dirname)(appmap), (0, path_1.basename)(appmap, '.appmap.json'), 'canonical.sqlNormalized.json');
82
+ const sqlQueries = JSON.parse(await (0, promises_1.readFile)(sqlQueriesFile, 'utf-8'));
83
+ const sqlQueryCount = String(sqlQueries.length);
84
+ if (!appmapCountBySQLQueryCount[sqlQueryCount])
85
+ appmapCountBySQLQueryCount[sqlQueryCount] = 1;
86
+ else
87
+ appmapCountBySQLQueryCount[sqlQueryCount] = appmapCountBySQLQueryCount[sqlQueryCount] + 1;
88
+ }
89
+ {
90
+ const sqlTablesFile = (0, path_1.join)((0, path_1.dirname)(appmap), (0, path_1.basename)(appmap, '.appmap.json'), 'canonical.sqlTables.json');
91
+ const tables = JSON.parse(await (0, promises_1.readFile)(sqlTablesFile, 'utf-8'));
92
+ for (const table of tables)
93
+ sqlTables.add(table);
94
+ }
95
+ {
96
+ const packageDependenciesFile = (0, path_1.join)((0, path_1.dirname)(appmap), (0, path_1.basename)(appmap, '.appmap.json'), 'canonical.packageDependencies.json');
97
+ const packageDependencies = JSON.parse(await (0, promises_1.readFile)(packageDependenciesFile, 'utf-8'));
98
+ for (const dependency of packageDependencies)
99
+ uniquePackageDependencies.addDependency(dependency);
100
+ }
101
+ {
102
+ const classDependenciesFile = (0, path_1.join)((0, path_1.dirname)(appmap), (0, path_1.basename)(appmap, '.appmap.json'), 'canonical.classDependencies.json');
103
+ const classDependencies = JSON.parse(await (0, promises_1.readFile)(classDependenciesFile, 'utf-8'));
104
+ for (const dependency of classDependencies)
105
+ uniqueClassDependencies.addDependency(dependency);
106
+ }
107
+ }
108
+ const routeCountByResource = {};
109
+ const routeCountByContentType = {};
110
+ const openapiFile = (0, path_1.join)(appmapDir, 'openapi.yml');
111
+ if ((0, fs_1.existsSync)(openapiFile)) {
112
+ const openapi = (0, js_yaml_1.load)(await (0, promises_1.readFile)(openapiFile, 'utf-8'));
113
+ for (const pattern of Object.keys(openapi.paths)) {
114
+ const pathItem = openapi.paths[pattern];
115
+ if (!pathItem)
116
+ continue;
117
+ for (const method of Object.values(openapi_types_1.OpenAPIV3.HttpMethods)) {
118
+ const operation = pathItem[method];
119
+ if (!operation)
120
+ continue;
121
+ const route = `${method.toUpperCase()} ${pattern}`;
122
+ const directoryIsh = pattern.split('/').slice(0, resourceTokens).join('/');
123
+ if (!routeCountByResource[directoryIsh])
124
+ routeCountByResource[directoryIsh] = 1;
125
+ else
126
+ routeCountByResource[directoryIsh] = routeCountByResource[directoryIsh] + 1;
127
+ for (const responseOption of Object.values(operation.responses)) {
128
+ const response = responseOption;
129
+ if (response.content) {
130
+ for (const contentType of Object.keys(response.content)) {
131
+ if (!routeCountByContentType[contentType])
132
+ routeCountByContentType[contentType] = 1;
133
+ else
134
+ routeCountByContentType[contentType] = routeCountByContentType[contentType] + 1;
135
+ }
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
141
+ const findingsFiles = await (0, utils_1.findFiles)(appmapDir, 'appmap-findings.json');
142
+ const findingCountByImpactDomain = {};
143
+ for (const findingsFile of findingsFiles) {
144
+ const scanResults = JSON.parse(await (0, promises_1.readFile)(findingsFile, 'utf-8'));
145
+ for (const finding of scanResults.findings) {
146
+ const impactDomain = finding.impactDomain || 'Unknown';
147
+ if (!findingCountByImpactDomain[impactDomain])
148
+ findingCountByImpactDomain[impactDomain] = 1;
149
+ else
150
+ findingCountByImpactDomain[impactDomain] = findingCountByImpactDomain[impactDomain] + 1;
151
+ }
152
+ }
153
+ return {
154
+ appmapCountByRecorderName,
155
+ appmapCountByHTTPServerRequestCount,
156
+ appmapCountBySQLQueryCount,
157
+ routeCountByResource,
158
+ routeCountByContentType,
159
+ clientRouteCountByResource,
160
+ labels: [...labels].sort(),
161
+ sqlTables: [...sqlTables].sort(),
162
+ packages: [
163
+ ...new Set(uniquePackageDependencies.dependencies.map((d) => [d.caller, d.callee]).flat()),
164
+ ].sort(),
165
+ packageDependencies: uniquePackageDependencies.dependencies,
166
+ findingCountByImpactDomain,
167
+ };
168
+ }
169
+ exports.command = 'inventory [output-file]';
170
+ exports.describe = 'Generate a JSON report describing the contents of a repository.';
171
+ const builder = (args) => {
172
+ args.positional('output-file', {
173
+ type: 'string',
174
+ describe: `output file to write the JSON report. If this option is not provided, the report is written to stdout`,
175
+ demandOption: false,
176
+ });
177
+ args.option('directory', {
178
+ describe: 'program working directory',
179
+ type: 'string',
180
+ alias: 'd',
181
+ });
182
+ args.option('appmap-dir', {
183
+ describe: 'directory to recursively inspect for AppMaps',
184
+ });
185
+ args.option('resource-tokens', {
186
+ describe: `number of path tokens to include in the 'by resource' output`,
187
+ type: 'number',
188
+ default: 2,
189
+ });
190
+ return args.strict();
191
+ };
192
+ exports.builder = builder;
193
+ const handler = async (argv) => {
194
+ (0, utils_1.verbose)(argv.verbose);
195
+ const { outputFile, directory, resourceTokens } = argv;
196
+ (0, assert_1.default)(resourceTokens);
197
+ (0, assert_1.default)(typeof resourceTokens === 'number');
198
+ (0, assert_1.default)(resourceTokens > 0);
199
+ (0, handleWorkingDirectory_1.handleWorkingDirectory)(directory);
200
+ if (!outputFile) {
201
+ (0, console_1.warn)(`No output file specified. Report JSON will be written to stdout.`);
202
+ }
203
+ const appmapDir = await (0, locateAppMapDir_1.locateAppMapDir)(argv.appmapDir);
204
+ if (!(0, fs_1.existsSync)((0, path_1.join)(appmapDir, 'appmap_archive.json'))) {
205
+ (0, console_1.warn)(`No appmap_archive.json found in ${appmapDir}`);
206
+ (0, console_1.warn)(`Run 'appmap archive' to index and analyze the AppMaps, then run this command again`);
207
+ yargs_1.default.exit(1, new Error('No appmap_archive.json found'));
208
+ }
209
+ const appmaps = await (0, utils_1.findFiles)(appmapDir, '.appmap.json');
210
+ if (appmaps.length === 0) {
211
+ (0, console_1.warn)(`No AppMaps found in ${appmapDir}`);
212
+ return;
213
+ }
214
+ (0, console_1.warn)(`Building repository report from ${appmaps.length} AppMaps in ${appmapDir}`);
215
+ const report = await buildRepositoryReport(appmapDir, appmaps, resourceTokens + 1 /* The url '/' is actually 2 tokens, so add 1 to the user input */);
216
+ const reportJSONStr = JSON.stringify(report, null, 2);
217
+ if (outputFile) {
218
+ await (0, promises_1.writeFile)(outputFile, reportJSONStr);
219
+ }
220
+ else {
221
+ console.log(reportJSONStr);
222
+ }
223
+ };
224
+ exports.handler = handler;
225
+ //# sourceMappingURL=inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventory.js","sourceRoot":"","sources":["../../../src/cmds/inventory/inventory.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,+BAA+C;AAC/C,0CAAkD;AAClD,2BAAgC;AAChC,qCAA+B;AAE/B,iDAA0C;AAE1C,6EAA0E;AAC1E,uCAAiD;AAGjD,qCAA+B;AAC/B,oEAA4C;AAC5C,oDAA4B;AAC5B,+DAA4D;AAE5D,KAAK,UAAU,qBAAqB,CAClC,SAAiB,EACjB,OAAiB,EACjB,cAAsB;;IAEtB,MAAM,yBAAyB,GAA2B,EAAE,CAAC;IAC7D,MAAM,mCAAmC,GAA2B,EAAE,CAAC;IACvE,MAAM,0BAA0B,GAA2B,EAAE,CAAC;IAC9D,MAAM,0BAA0B,GAA2B,EAAE,CAAC;IAC9D,MAAM,yBAAyB,GAAG,IAAI,uBAAa,EAAE,CAAC;IACtD,MAAM,uBAAuB,GAAG,IAAI,uBAAa,EAAE,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B;YACE,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,IAAA,cAAO,EAAC,MAAM,CAAC,EAAE,IAAA,eAAQ,EAAC,MAAM,EAAE,cAAc,CAAC,EAAE,eAAe,CAAC,CAAC;YAC9F,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,YAAY,EAAE,OAAO,CAAC,CAAa,CAAC;YAC/E,MAAM,YAAY,GAAG,CAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,IAAI,KAAI,SAAS,CAAC;YAC1D,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC;gBAAE,yBAAyB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;;gBACrF,yBAAyB,CAAC,YAAY,CAAC,GAAG,yBAAyB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;SAC5F;QACD;YACE,MAAM,sBAAsB,GAAG,IAAA,WAAI,EACjC,IAAA,cAAO,EAAC,MAAM,CAAC,EACf,IAAA,eAAQ,EAAC,MAAM,EAAE,cAAc,CAAC,EAChC,mCAAmC,CACpC,CAAC;YACF,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,CAAC;YACvF,MAAM,YAAY,GAAG,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,mCAAmC,CAAC,YAAY,CAAC;gBACpD,mCAAmC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;;gBAEtD,mCAAmC,CAAC,YAAY,CAAC;oBAC/C,mCAAmC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;SAC3D;QACD;YACE,MAAM,sBAAsB,GAAG,IAAA,WAAI,EACjC,IAAA,cAAO,EAAC,MAAM,CAAC,EACf,IAAA,eAAQ,EAAC,MAAM,EAAE,cAAc,CAAC,EAChC,mCAAmC,CACpC,CAAC;YACF,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,CAAC;YACvF,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE;gBACxC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;gBAC1B,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,QAA4B,EAAE,IAAY,CAAC;gBAC/C,IAAI;oBACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC5B,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;oBACxB,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;iBACrB;gBAAC,WAAM;oBACN,IAAA,cAAI,EAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;oBACrC,IAAI,GAAG,MAAM,CAAC;iBACf;gBACD,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtE,IAAI,QAAQ;oBAAE,YAAY,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/D,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;oBAAE,0BAA0B,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;;oBAE1F,0BAA0B,CAAC,YAAY,CAAC,GAAG,0BAA0B,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;aAC3F;SACF;QACD;YACE,MAAM,UAAU,GAAG,IAAA,WAAI,EACrB,IAAA,cAAO,EAAC,MAAM,CAAC,EACf,IAAA,eAAQ,EAAC,MAAM,EAAE,cAAc,CAAC,EAChC,uBAAuB,CACxB,CAAC;YACF,MAAM,WAAW,GAAa,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAC9E,KAAK,MAAM,KAAK,IAAI,WAAW;gBAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACpD;QACD;YACE,MAAM,cAAc,GAAG,IAAA,WAAI,EACzB,IAAA,cAAO,EAAC,MAAM,CAAC,EACf,IAAA,eAAQ,EAAC,MAAM,EAAE,cAAc,CAAC,EAChC,8BAA8B,CAC/B,CAAC;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC;gBAAE,0BAA0B,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;;gBAE5F,0BAA0B,CAAC,aAAa,CAAC,GAAG,0BAA0B,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;SAC7F;QACD;YACE,MAAM,aAAa,GAAG,IAAA,WAAI,EACxB,IAAA,cAAO,EAAC,MAAM,CAAC,EACf,IAAA,eAAQ,EAAC,MAAM,EAAE,cAAc,CAAC,EAChC,0BAA0B,CAC3B,CAAC;YACF,MAAM,MAAM,GAAa,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5E,KAAK,MAAM,KAAK,IAAI,MAAM;gBAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAClD;QACD;YACE,MAAM,uBAAuB,GAAG,IAAA,WAAI,EAClC,IAAA,cAAO,EAAC,MAAM,CAAC,EACf,IAAA,eAAQ,EAAC,MAAM,EAAE,cAAc,CAAC,EAChC,oCAAoC,CACrC,CAAC;YACF,MAAM,mBAAmB,GAAiB,IAAI,CAAC,KAAK,CAClD,MAAM,IAAA,mBAAQ,EAAC,uBAAuB,EAAE,OAAO,CAAC,CACjD,CAAC;YACF,KAAK,MAAM,UAAU,IAAI,mBAAmB;gBAC1C,yBAAyB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SACvD;QACD;YACE,MAAM,qBAAqB,GAAG,IAAA,WAAI,EAChC,IAAA,cAAO,EAAC,MAAM,CAAC,EACf,IAAA,eAAQ,EAAC,MAAM,EAAE,cAAc,CAAC,EAChC,kCAAkC,CACnC,CAAC;YACF,MAAM,iBAAiB,GAAiB,IAAI,CAAC,KAAK,CAChD,MAAM,IAAA,mBAAQ,EAAC,qBAAqB,EAAE,OAAO,CAAC,CAC/C,CAAC;YACF,KAAK,MAAM,UAAU,IAAI,iBAAiB;gBAAE,uBAAuB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SAC/F;KACF;IAED,MAAM,oBAAoB,GAA2B,EAAE,CAAC;IACxD,MAAM,uBAAuB,GAA2B,EAAE,CAAC;IAC3D,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACnD,IAAI,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE;QAC3B,MAAM,OAAO,GAAuB,IAAA,cAAI,EACtC,MAAM,IAAA,mBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC,CACf,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAExB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,yBAAS,CAAC,WAAW,CAAC,EAAE;gBACzD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,CAAC,SAAS;oBAAE,SAAS;gBAEzB,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,OAAO,EAAE,CAAC;gBAEnD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3E,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;oBAAE,oBAAoB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;;oBAC3E,oBAAoB,CAAC,YAAY,CAAC,GAAG,oBAAoB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAEjF,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;oBAC/D,MAAM,QAAQ,GAAG,cAA0C,CAAC;oBAC5D,IAAI,QAAQ,CAAC,OAAO,EAAE;wBACpB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;4BACvD,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC;gCAAE,uBAAuB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;;gCAC/E,uBAAuB,CAAC,WAAW,CAAC,GAAG,uBAAuB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;yBACtF;qBACF;iBACF;aACF;SACF;KACF;IAED,MAAM,aAAa,GAAG,MAAM,IAAA,iBAAS,EAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IACzE,MAAM,0BAA0B,GAA2B,EAAE,CAAC;IAC9D,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,YAAY,EAAE,OAAO,CAAC,CAAgB,CAAC;QACrF,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE;YAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC;YAEvD,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;gBAAE,0BAA0B,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;;gBACvF,0BAA0B,CAAC,YAAY,CAAC,GAAG,0BAA0B,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;SAC9F;KACF;IAED,OAAO;QACL,yBAAyB;QACzB,mCAAmC;QACnC,0BAA0B;QAC1B,oBAAoB;QACpB,uBAAuB;QACvB,0BAA0B;QAC1B,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE;QAC1B,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE;QAChC,QAAQ,EAAE;YACR,GAAG,IAAI,GAAG,CAAC,yBAAyB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAC3F,CAAC,IAAI,EAAE;QACR,mBAAmB,EAAE,yBAAyB,CAAC,YAAY;QAC3D,0BAA0B;KAC3B,CAAC;AACJ,CAAC;AAEY,QAAA,OAAO,GAAG,yBAAyB,CAAC;AACpC,QAAA,QAAQ,GAAG,iEAAiE,CAAC;AAEnF,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,EAAE;IAC1C,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;QAC7B,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,uGAAuG;QACjH,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;QACvB,QAAQ,EAAE,2BAA2B;QACrC,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;QACxB,QAAQ,EAAE,8CAA8C;KACzD,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;QAC7B,QAAQ,EAAE,8DAA8D;QACxE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC;KACX,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AACvB,CAAC,CAAC;AAxBW,QAAA,OAAO,WAwBlB;AAEK,MAAM,OAAO,GAAG,KAAK,EAAE,IAAS,EAAE,EAAE;IACzC,IAAA,eAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEtB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IACvD,IAAA,gBAAM,EAAC,cAAc,CAAC,CAAC;IACvB,IAAA,gBAAM,EAAC,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC;IAC3C,IAAA,gBAAM,EAAC,cAAc,GAAG,CAAC,CAAC,CAAC;IAE3B,IAAA,+CAAsB,EAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC,UAAU,EAAE;QACf,IAAA,cAAI,EAAC,kEAAkE,CAAC,CAAC;KAC1E;IAED,MAAM,SAAS,GAAG,MAAM,IAAA,iCAAe,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAExD,IAAI,CAAC,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC,EAAE;QACvD,IAAA,cAAI,EAAC,mCAAmC,SAAS,EAAE,CAAC,CAAC;QACrD,IAAA,cAAI,EAAC,oFAAoF,CAAC,CAAC;QAC3F,eAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;KAC1D;IAED,MAAM,OAAO,GAAG,MAAM,IAAA,iBAAS,EAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,IAAA,cAAI,EAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC;QACzC,OAAO;KACR;IAED,IAAA,cAAI,EAAC,mCAAmC,OAAO,CAAC,MAAM,eAAe,SAAS,EAAE,CAAC,CAAC;IAElF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CACxC,SAAS,EACT,OAAO,EACP,cAAc,GAAG,CAAC,CAAC,kEAAkE,CACtF,CAAC;IAEF,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACtD,IAAI,UAAU,EAAE;QACd,MAAM,IAAA,oBAAS,EAAC,UAAU,EAAE,aAAa,CAAC,CAAC;KAC5C;SAAM;QACL,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;KAC5B;AACH,CAAC,CAAC;AAzCW,QAAA,OAAO,WAyClB"}
@@ -0,0 +1,124 @@
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
+ exports.ReportTemplate = exports.WelcomeReport = exports.DefaultReport = void 0;
7
+ const handlebars_1 = __importDefault(require("handlebars"));
8
+ const path_1 = require("path");
9
+ const promises_1 = require("fs/promises");
10
+ const assert_1 = __importDefault(require("assert"));
11
+ const fs_1 = require("fs");
12
+ const TemplateDirectory = [
13
+ '../../../resources/inventory-report',
14
+ '../../../../resources/inventory-report', // In development
15
+ ]
16
+ .map((dirName) => (0, path_1.join)(__dirname, dirName))
17
+ .find((dirName) => (0, fs_1.existsSync)(dirName));
18
+ (0, assert_1.default)(TemplateDirectory, "Report template directory 'inventory-report' not found");
19
+ var TemplateName;
20
+ (function (TemplateName) {
21
+ TemplateName["Default"] = "default";
22
+ TemplateName["Welcome"] = "welcome";
23
+ })(TemplateName || (TemplateName = {}));
24
+ async function generateReport(templateName, report) {
25
+ let reportTemplate;
26
+ switch (templateName) {
27
+ case TemplateName.Default:
28
+ reportTemplate = new DefaultReport();
29
+ break;
30
+ case TemplateName.Welcome:
31
+ reportTemplate = new WelcomeReport();
32
+ break;
33
+ }
34
+ return reportTemplate.generateReport(report);
35
+ }
36
+ exports.default = generateReport;
37
+ class DefaultReport {
38
+ async generateReport(reportData) {
39
+ (0, assert_1.default)(TemplateDirectory);
40
+ const templateFile = (0, path_1.join)(TemplateDirectory, 'default', 'inventory.hbs');
41
+ const template = await ReportTemplate.build(templateFile);
42
+ return template.generateMarkdown(reportData);
43
+ }
44
+ }
45
+ exports.DefaultReport = DefaultReport;
46
+ class WelcomeReport {
47
+ async generateReport(reportData) {
48
+ (0, assert_1.default)(TemplateDirectory);
49
+ const templateFile = (0, path_1.join)(TemplateDirectory, 'welcome', 'welcome.hbs');
50
+ const template = await ReportTemplate.build(templateFile);
51
+ return template.generateMarkdown(reportData);
52
+ }
53
+ }
54
+ exports.WelcomeReport = WelcomeReport;
55
+ class ReportTemplate {
56
+ constructor(template) {
57
+ this.template = template;
58
+ }
59
+ generateMarkdown(report) {
60
+ return this.template(report, {
61
+ helpers: ReportTemplate.helpers(),
62
+ allowProtoPropertiesByDefault: true,
63
+ });
64
+ }
65
+ static helpers() {
66
+ const inspect = (value) => {
67
+ return new handlebars_1.default.SafeString(JSON.stringify(value, null, 2));
68
+ };
69
+ const length = (...list) => {
70
+ const _fn = list.pop();
71
+ let result = 0;
72
+ for (const item of list) {
73
+ if (Array.isArray(item)) {
74
+ result += item.length;
75
+ }
76
+ else if (item.constructor === Map) {
77
+ result += item.size;
78
+ }
79
+ else if (typeof item === 'object') {
80
+ result += Object.keys(item).length;
81
+ }
82
+ }
83
+ return result;
84
+ };
85
+ const coalesce = (...list) => {
86
+ const _fn = list.pop();
87
+ return list.find((item) => item !== undefined && item !== '');
88
+ };
89
+ const select_values_by_key_range = (data, keyMin, keyMax) => {
90
+ if (typeof keyMax === 'object')
91
+ keyMax = undefined;
92
+ const result = Object.keys(data)
93
+ .map((k) => parseInt(k, 10))
94
+ .filter((k) => k >= keyMin && (keyMax === undefined || k < keyMax))
95
+ .map((k) => data[k]);
96
+ return result;
97
+ };
98
+ const extractArrayValue = (args) => (Array.isArray(args[0]) ? args[0] : args);
99
+ const sum_values_by_key_range = (data, keyMin, keyMax) => {
100
+ const values = select_values_by_key_range(data, keyMin, keyMax);
101
+ return values.reduce((a, b) => a + (b || 0), 0);
102
+ };
103
+ const sum = () => {
104
+ const args = [...arguments];
105
+ const _fn = args.pop();
106
+ const values = extractArrayValue(args);
107
+ return values.reduce((a, b) => a + (b || 0), 0);
108
+ };
109
+ return {
110
+ coalesce,
111
+ inspect,
112
+ length,
113
+ select_values_by_key_range,
114
+ sum,
115
+ sum_values_by_key_range,
116
+ };
117
+ }
118
+ static async build(templateFile) {
119
+ const template = handlebars_1.default.compile(await (0, promises_1.readFile)(templateFile, 'utf8'));
120
+ return new ReportTemplate(template);
121
+ }
122
+ }
123
+ exports.ReportTemplate = ReportTemplate;
124
+ //# sourceMappingURL=MarkdownReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownReport.js","sourceRoot":"","sources":["../../../src/cmds/inventory-report/MarkdownReport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
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
+ exports.handler = exports.builder = exports.describe = exports.command = void 0;
7
+ const utils_1 = require("../../utils");
8
+ const handleWorkingDirectory_1 = require("../../lib/handleWorkingDirectory");
9
+ const promises_1 = require("fs/promises");
10
+ const MarkdownReport_1 = __importDefault(require("./MarkdownReport"));
11
+ const console_1 = require("console");
12
+ const process_1 = require("process");
13
+ const path_1 = require("path");
14
+ exports.command = 'inventory-report <report-json-file> [output-file]';
15
+ exports.describe = 'Generate a report document describing the current state of a repository.';
16
+ const builder = (args) => {
17
+ args.positional('report-json-file', {
18
+ type: 'string',
19
+ describe: `JSON report file to read. This file is generated by the 'inventory' command.`,
20
+ demandOption: true,
21
+ });
22
+ args.positional('template-name', {
23
+ type: 'string',
24
+ describe: `Template name.`,
25
+ default: 'default',
26
+ choices: ['default', 'welcome'],
27
+ alias: 't',
28
+ });
29
+ args.positional('output-file', {
30
+ type: 'string',
31
+ describe: `Markdown output file. If not specified, the report is written to stdout.`,
32
+ demandOption: true,
33
+ });
34
+ args.option('directory', {
35
+ describe: 'program working directory',
36
+ type: 'string',
37
+ alias: 'd',
38
+ });
39
+ return args.strict();
40
+ };
41
+ exports.builder = builder;
42
+ const handler = async (argv) => {
43
+ (0, utils_1.verbose)(argv.verbose);
44
+ const { directory } = argv;
45
+ (0, handleWorkingDirectory_1.handleWorkingDirectory)(directory);
46
+ const { reportJsonFile, outputFile, templateName } = argv;
47
+ const report = JSON.parse(await (0, promises_1.readFile)(reportJsonFile, 'utf-8'));
48
+ const reportMD = await (0, MarkdownReport_1.default)(templateName, report);
49
+ if (outputFile) {
50
+ await (0, promises_1.writeFile)(outputFile, reportMD);
51
+ (0, console_1.warn)(`Report written to ${(0, path_1.join)((0, process_1.cwd)(), outputFile)}`);
52
+ }
53
+ else {
54
+ console.log(reportMD);
55
+ }
56
+ };
57
+ exports.handler = handler;
58
+ //# sourceMappingURL=inventoryReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventoryReport.js","sourceRoot":"","sources":["../../../src/cmds/inventory-report/inventoryReport.ts"],"names":[],"mappings":";;;;;;AACA,uCAAsC;AACtC,6EAA0E;AAC1E,0CAAkD;AAClD,sEAA8C;AAC9C,qCAA+B;AAC/B,qCAA8B;AAC9B,+BAA4B;AAEf,QAAA,OAAO,GAAG,mDAAmD,CAAC;AAC9D,QAAA,QAAQ,GAAG,0EAA0E,CAAC;AAE5F,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,EAAE;IAC1C,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;QAClC,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,8EAA8E;QACxF,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;QAC/B,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,gBAAgB;QAC1B,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC/B,KAAK,EAAE,GAAG;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;QAC7B,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,0EAA0E;QACpF,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;QACvB,QAAQ,EAAE,2BAA2B;QACrC,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;KACX,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AACvB,CAAC,CAAC;AA5BW,QAAA,OAAO,WA4BlB;AAEK,MAAM,OAAO,GAAG,KAAK,EAAE,IAAS,EAAE,EAAE;IACzC,IAAA,eAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC3B,IAAA,+CAAsB,EAAC,SAAS,CAAC,CAAC;IAElC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAEnE,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAc,EAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC5D,IAAI,UAAU,EAAE;QACd,MAAM,IAAA,oBAAS,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAA,cAAI,EAAC,qBAAqB,IAAA,WAAI,EAAC,IAAA,aAAG,GAAE,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;KACtD;SAAM;QACL,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KACvB;AACH,CAAC,CAAC;AAhBW,QAAA,OAAO,WAgBlB"}