Skip to content

Commit 1c08e90

Browse files
manucorporatadamdbradley
authored andcommitted
feat(docs): custom docs generators (#1227)
* feat(docs): custom docs generators * update generator signature
1 parent 012ded8 commit 1c08e90

5 files changed

Lines changed: 52 additions & 3 deletions

File tree

src/compiler/config/validate-docs.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,17 @@ export function validateDocs(config: d.Config) {
4343
config.outputTargets.push({ type: 'docs' });
4444
}
4545
}
46-
4746
const readmeDocsOutputs = config.outputTargets.filter(o => o.type === 'docs') as d.OutputTargetDocsReadme[];
4847
readmeDocsOutputs.forEach(readmeDocsOutput => {
4948
validateReadmeOutputTarget(config, readmeDocsOutput);
5049
});
5150

51+
// custom docs
52+
const customDocsOutputs = config.outputTargets.filter(o => o.type === 'docs-custom') as d.OutputTargetDocsCustom[];
53+
customDocsOutputs.forEach(jsonDocsOutput => {
54+
validateCustomDocsOutputTarget(jsonDocsOutput);
55+
});
56+
5257
config.buildDocs = buildDocs;
5358
}
5459

@@ -83,3 +88,12 @@ function validateApiDocsOutputTarget(config: d.Config, outputTarget: d.OutputTar
8388
outputTarget.file = pathJoin(config, config.rootDir, outputTarget.file);
8489
outputTarget.strict = !!outputTarget.strict;
8590
}
91+
92+
93+
function validateCustomDocsOutputTarget(outputTarget: d.OutputTargetDocsCustom) {
94+
if (typeof outputTarget.generator !== 'function') {
95+
throw new Error(`docs-custom outputTarget missing the "generator" function`);
96+
}
97+
98+
outputTarget.strict = !!outputTarget.strict;
99+
}

src/compiler/config/validate-outputs.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,13 @@ export function validateOutputTargets(config: d.Config) {
4545
}
4646

4747

48-
const VALID_TYPES = ['angular', 'dist', 'docs', 'docs-json', 'docs-api', 'stats', 'www'];
48+
const VALID_TYPES = [
49+
'angular',
50+
'dist',
51+
'docs',
52+
'docs-json',
53+
'docs-api',
54+
'docs-custom',
55+
'stats',
56+
'www'
57+
];

src/compiler/docs/docs.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { generateApiDocs } from './generate-api-docs';
66
import { generateDocData } from './generate-doc-data';
77
import { generateJsonDocs } from './generate-json-docs';
88
import { generateReadmeDocs } from './generate-readme-docs';
9+
import { generateCustomDocs } from './generate-custom-docs';
910
import { getCompilerCtx } from '../build/compiler-ctx';
1011
import { strickCheckDocs } from './strict-check';
1112
import { transpileApp } from '../transpile/transpile-app';
@@ -56,7 +57,7 @@ export async function generateDocs(config: d.Config, compilerCtx: d.CompilerCtx,
5657
return;
5758
}
5859
const docsOutputTargets = config.outputTargets.filter(o => {
59-
return o.type === 'docs' || o.type === 'docs-json' || o.type === 'docs-api';
60+
return o.type === 'docs' || o.type === 'docs-json' || o.type === 'docs-api' || o.type == 'docs-custom';
6061
});
6162

6263
if (docsOutputTargets.length === 0) {
@@ -84,4 +85,9 @@ export async function generateDocs(config: d.Config, compilerCtx: d.CompilerCtx,
8485
if (apiTargets.length > 0) {
8586
await generateApiDocs(compilerCtx, apiTargets, docsData);
8687
}
88+
89+
const customTargets = docsOutputTargets.filter(o => o.type === 'docs-custom') as d.OutputTargetDocsCustom[];
90+
if (customTargets.length > 0) {
91+
await generateCustomDocs(config, customTargets, docsData);
92+
}
8793
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import * as d from '../../declarations';
2+
3+
export async function generateCustomDocs(config: d.Config, customOutputs: d.OutputTargetDocsCustom[], docsData: d.JsonDocs) {
4+
await Promise.all(customOutputs.map(async customOutput => {
5+
try {
6+
await customOutput.generator(docsData);
7+
} catch (e) {
8+
config.logger.error(`uncaught custom docs error: ${e}`);
9+
}
10+
}));
11+
}

src/declarations/output-targets.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as d from '.';
2+
import { JsonDocs } from './docs';
23

34

45
export interface OutputTargetWww extends OutputTargetBase {
@@ -192,6 +193,13 @@ export interface OutputTargetDocsApi extends OutputTargetBase {
192193
strict?: boolean;
193194
}
194195

196+
export interface OutputTargetDocsCustom extends OutputTargetBase {
197+
type: 'docs-custom';
198+
199+
generator: (docs: JsonDocs) => void | Promise<void>;
200+
strict?: boolean;
201+
}
202+
195203

196204
export interface OutputTargetStats extends OutputTargetBase {
197205
type: 'stats';
@@ -228,6 +236,7 @@ export type OutputTarget =
228236
| OutputTargetStats
229237
| OutputTargetDocsApi
230238
| OutputTargetDocsJson
239+
| OutputTargetDocsCustom
231240
| OutputTargetDocsReadme
232241
| OutputTargetHydrate
233242
| OutputTargetDist

0 commit comments

Comments
 (0)