-
Notifications
You must be signed in to change notification settings - Fork 370
/
generate-reports.js
88 lines (78 loc) · 2.79 KB
/
generate-reports.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**
* @license
* Copyright 2021 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const path = require('path');
const fs = require('mz/fs');
const yargs = require('yargs');
const { Extractor, ExtractorConfig } = require('@microsoft/api-extractor');
const { local: localMode } = yargs
.option('local', {
boolean: true,
description: 'Run API Extractor with --local flag',
})
.version(false)
.help().argv;
// API Extractor configuration file.
const config = require('./api-extractor.json');
const tempConfigFile = 'api-extractor.tmp';
async function generateReports() {
const entryPoints = require('./entrypoints.json');
for (const entryPoint in entryPoints) {
const filePath = entryPoints[entryPoint].typings;
await generateReportForEntryPoint(entryPoint, filePath);
}
}
async function generateReportForEntryPoint(entryPoint, filePath) {
console.log(`\nGenerating API report for ${entryPoint}`)
console.log('========================================================\n');
const safeName = entryPoint.replace('/', '.');
console.log('Updating configuration for entry point...');
config.apiReport.reportFileName = `${safeName}.api.md`;
config.mainEntryPointFilePath = filePath;
console.log(`Report file name: ${config.apiReport.reportFileName}`);
console.log(`Entry point declaration: ${config.mainEntryPointFilePath}`);
await fs.writeFile(tempConfigFile, JSON.stringify(config));
try {
const configFile = ExtractorConfig.loadFile(tempConfigFile);
const extractorConfig = ExtractorConfig.prepare({
configObject: configFile,
configObjectFullPath: path.resolve(tempConfigFile),
packageJson: {
name: safeName,
},
packageJsonFullPath: path.resolve('package.json'),
});
const extractorResult = Extractor.invoke(extractorConfig, {
localBuild: localMode,
showVerboseMessages: true
});
if (!extractorResult.succeeded) {
throw new Error(`API Extractor completed with ${extractorResult.errorCount} errors`
+ ` and ${extractorResult.warningCount} warnings`);
}
console.error(`API Extractor completed successfully`);
} finally {
await fs.unlink(tempConfigFile);
}
}
(async () => {
try {
await generateReports();
} catch (err) {
console.log(err);
process.exit(1);
}
})();