| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /* tslint:disable:no-console */
- import fs from 'fs';
- import klawSync from 'klaw-sync';
- import path from 'path';
- import ts from 'typescript';
- import { deleteGeneratedDocs } from './docgen-utils';
- import { TypeMap } from './typescript-docgen-types';
- import { TypescriptDocsParser } from './typescript-docs-parser';
- import { TypescriptDocsRenderer } from './typescript-docs-renderer';
- // The absolute URL to the generated docs section
- const DOCS_URL = '/docs/configuration/';
- // The directory in which the markdown files will be saved
- const OUTPUT_PATH = path.join(__dirname, '../../docs/content/docs/configuration');
- // The directories to scan for TypeScript source files
- const TS_SOURCE_DIRS = ['packages/core/src/', 'packages/common/src/'];
- const tsFiles = TS_SOURCE_DIRS
- .map(scanPath =>
- klawSync(path.join(__dirname, '../../', scanPath), {
- nodir: true,
- filter: item => path.extname(item.path) === '.ts',
- traverseAll: true,
- }),
- )
- .reduce((allFiles, files) => [...allFiles, ...files], [])
- .map(item => item.path);
- deleteGeneratedDocs(OUTPUT_PATH);
- generateTypescriptDocs(tsFiles, OUTPUT_PATH, DOCS_URL);
- const watchMode = !!process.argv.find(arg => arg === '--watch' || arg === '-w');
- if (watchMode) {
- console.log(`Watching for changes to source files...`);
- tsFiles.forEach(file => {
- fs.watchFile(file, { interval: 1000 }, () => {
- generateTypescriptDocs([file], OUTPUT_PATH, DOCS_URL);
- });
- });
- }
- /**
- * Uses the TypeScript compiler API to parse the given files and extract out the documentation
- * into markdown files
- */
- function generateTypescriptDocs(filePaths: string[], hugoOutputPath: string, docsUrl: string) {
- const timeStart = +new Date();
- // This map is used to cache types and their corresponding Hugo path. It is used to enable
- // hyperlinking from a member's "type" to the definition of that type.
- const globalTypeMap: TypeMap = new Map();
- const parsedDeclarations = new TypescriptDocsParser().parse(filePaths);
- for (const info of parsedDeclarations) {
- globalTypeMap.set(info.title, info.category + '/' + info.fileName);
- }
- const generatedCount = new TypescriptDocsRenderer().render(parsedDeclarations, docsUrl, OUTPUT_PATH, globalTypeMap);
- if (generatedCount) {
- console.log(`Generated ${generatedCount} typescript api docs in ${+new Date() - timeStart}ms`);
- }
- }
|