Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion src/compiler/config/validate-docs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,17 @@ export function validateDocs(config: d.Config) {
config.outputTargets.push({ type: 'docs' });
}
}

const readmeDocsOutputs = config.outputTargets.filter(o => o.type === 'docs') as d.OutputTargetDocsReadme[];
readmeDocsOutputs.forEach(readmeDocsOutput => {
validateReadmeOutputTarget(config, readmeDocsOutput);
});

// custom docs
const customDocsOutputs = config.outputTargets.filter(o => o.type === 'docs-custom') as d.OutputTargetDocsCustom[];
customDocsOutputs.forEach(jsonDocsOutput => {
validateCustomDocsOutputTarget(jsonDocsOutput);
});

config.buildDocs = buildDocs;
}

Expand Down Expand Up @@ -83,3 +88,12 @@ function validateApiDocsOutputTarget(config: d.Config, outputTarget: d.OutputTar
outputTarget.file = pathJoin(config, config.rootDir, outputTarget.file);
outputTarget.strict = !!outputTarget.strict;
}


function validateCustomDocsOutputTarget(outputTarget: d.OutputTargetDocsCustom) {
if (typeof outputTarget.generator !== 'function') {
throw new Error(`docs-custom outputTarget missing the "generator" function`);
}

outputTarget.strict = !!outputTarget.strict;
}
11 changes: 10 additions & 1 deletion src/compiler/config/validate-outputs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,13 @@ export function validateOutputTargets(config: d.Config) {
}


const VALID_TYPES = ['angular', 'dist', 'docs', 'docs-json', 'docs-api', 'stats', 'www'];
const VALID_TYPES = [
'angular',
'dist',
'docs',
'docs-json',
'docs-api',
'docs-custom',
'stats',
'www'
];
8 changes: 7 additions & 1 deletion src/compiler/docs/docs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { generateApiDocs } from './generate-api-docs';
import { generateDocData } from './generate-doc-data';
import { generateJsonDocs } from './generate-json-docs';
import { generateReadmeDocs } from './generate-readme-docs';
import { generateCustomDocs } from './generate-custom-docs';
import { getCompilerCtx } from '../build/compiler-ctx';
import { strickCheckDocs } from './strict-check';
import { transpileApp } from '../transpile/transpile-app';
Expand Down Expand Up @@ -56,7 +57,7 @@ export async function generateDocs(config: d.Config, compilerCtx: d.CompilerCtx,
return;
}
const docsOutputTargets = config.outputTargets.filter(o => {
return o.type === 'docs' || o.type === 'docs-json' || o.type === 'docs-api';
return o.type === 'docs' || o.type === 'docs-json' || o.type === 'docs-api' || o.type == 'docs-custom';
});

if (docsOutputTargets.length === 0) {
Expand Down Expand Up @@ -84,4 +85,9 @@ export async function generateDocs(config: d.Config, compilerCtx: d.CompilerCtx,
if (apiTargets.length > 0) {
await generateApiDocs(compilerCtx, apiTargets, docsData);
}

const customTargets = docsOutputTargets.filter(o => o.type === 'docs-custom') as d.OutputTargetDocsCustom[];
if (customTargets.length > 0) {
await generateCustomDocs(config, customTargets, docsData);
}
}
11 changes: 11 additions & 0 deletions src/compiler/docs/generate-custom-docs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import * as d from '../../declarations';

export async function generateCustomDocs(config: d.Config, customOutputs: d.OutputTargetDocsCustom[], docsData: d.JsonDocs) {
await Promise.all(customOutputs.map(async customOutput => {
try {
await customOutput.generator(docsData);
} catch (e) {
config.logger.error(`uncaught custom docs error: ${e}`);
}
}));
}
9 changes: 9 additions & 0 deletions src/declarations/output-targets.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as d from '.';
import { JsonDocs } from './docs';


export interface OutputTargetWww extends OutputTargetBase {
Expand Down Expand Up @@ -192,6 +193,13 @@ export interface OutputTargetDocsApi extends OutputTargetBase {
strict?: boolean;
}

export interface OutputTargetDocsCustom extends OutputTargetBase {
type: 'docs-custom';

generator: (docs: JsonDocs) => void | Promise<void>;
strict?: boolean;
}


export interface OutputTargetStats extends OutputTargetBase {
type: 'stats';
Expand Down Expand Up @@ -228,6 +236,7 @@ export type OutputTarget =
| OutputTargetStats
| OutputTargetDocsApi
| OutputTargetDocsJson
| OutputTargetDocsCustom
| OutputTargetDocsReadme
| OutputTargetHydrate
| OutputTargetDist
Expand Down