<!-- Please make sure you have read the submission guidelines before posting an PR --> <!-- https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr --> <!-- Please make sure that your commit message follows our format --> <!-- Example: `fix(nx): must begin with lowercase` --> <!-- If this is a particularly complex change or feature addition, you can request a dedicated Nx release for this pull request branch. Mention someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they will confirm if the PR warrants its own release for testing purposes, and generate it for you if appropriate. --> ## Current Behavior <!-- This is the behavior we have today --> ## Expected Behavior <!-- This is the behavior we should expect with the changes in this PR --> ## Related Issue(s) <!-- Please link the issue being fixed so it gets closed when this is merged. --> Fixes #
104 lines
2.9 KiB
TypeScript
104 lines
2.9 KiB
TypeScript
import * as chalk from 'chalk';
|
|
import * as typedoc from 'typedoc';
|
|
import { execSync, ExecSyncOptions } from 'child_process';
|
|
import { cpSync, readFileSync, rmSync, unlinkSync, writeFileSync } from 'fs';
|
|
import { join } from 'path';
|
|
|
|
export async function generateDevkitDocumentation() {
|
|
console.log(`\n${chalk.blue('i')} Generating Documentation for Devkit\n`);
|
|
|
|
const execSyncOptions: ExecSyncOptions = {
|
|
stdio: 'true' === 'true' ? 'inherit' : 'ignore',
|
|
// stdio: process.env.CI === 'true' ? 'inherit' : 'ignore',
|
|
};
|
|
|
|
execSync('nx run-many -t build -p devkit,typedoc-theme', execSyncOptions);
|
|
|
|
rmSync('node_modules/@nx/typedoc-theme', { recursive: true, force: true });
|
|
|
|
cpSync('dist/typedoc-theme', 'node_modules/@nx/typedoc-theme', {
|
|
recursive: true,
|
|
});
|
|
|
|
cpSync(
|
|
'packages/devkit/tsconfig.lib.json',
|
|
'build/packages/devkit/tsconfig.lib.json',
|
|
{ recursive: true }
|
|
);
|
|
|
|
writeFileSync(
|
|
'build/packages/devkit/tsconfig.lib.json',
|
|
readFileSync('build/packages/devkit/tsconfig.lib.json')
|
|
.toString()
|
|
.replace(
|
|
'"extends": "./tsconfig.json"',
|
|
'"extends": "../../../packages/devkit/tsconfig.json"'
|
|
)
|
|
);
|
|
|
|
rmSync('docs/generated/devkit', { recursive: true, force: true });
|
|
|
|
const commonTypedocOptions: Partial<typedoc.TypeDocOptions> & {
|
|
[key: string]: unknown;
|
|
} = {
|
|
plugin: ['typedoc-plugin-markdown', '@nx/typedoc-theme'],
|
|
disableSources: true,
|
|
theme: 'nx-markdown-theme',
|
|
readme: 'none',
|
|
hideBreadcrumbs: true,
|
|
allReflectionsHaveOwnDocument: true,
|
|
} as const;
|
|
|
|
await runTypedoc({
|
|
...commonTypedocOptions,
|
|
entryPoints: ['build/packages/devkit/index.d.ts'],
|
|
tsconfig: 'build/packages/devkit/tsconfig.lib.json',
|
|
out: 'docs/generated/devkit',
|
|
excludePrivate: true,
|
|
publicPath: '../../devkit/',
|
|
});
|
|
|
|
await runTypedoc({
|
|
...commonTypedocOptions,
|
|
entryPoints: ['build/packages/devkit/ngcli-adapter.d.ts'],
|
|
tsconfig: 'build/packages/devkit/tsconfig.lib.json',
|
|
out: 'docs/generated/devkit/ngcli_adapter',
|
|
publicPath: '../../devkit/ngcli_adapter/',
|
|
});
|
|
|
|
rmSync('build/packages/devkit/tsconfig.lib.json', {
|
|
recursive: true,
|
|
force: true,
|
|
});
|
|
rmSync('docs/generated/devkit/.nojekyll', { recursive: true, force: true });
|
|
|
|
execSync(
|
|
`pnpm prettier docs/generated/devkit --write --config ${join(
|
|
__dirname,
|
|
'..',
|
|
'..',
|
|
'..',
|
|
'.prettierrc'
|
|
)}`,
|
|
execSyncOptions
|
|
);
|
|
}
|
|
|
|
async function runTypedoc(
|
|
options: Partial<typedoc.TypeDocOptions> & { [key: string]: unknown }
|
|
) {
|
|
const app = await typedoc.Application.bootstrapWithPlugins(
|
|
options as Partial<typedoc.TypeDocOptions>,
|
|
[
|
|
new typedoc.TypeDocReader(),
|
|
new typedoc.PackageJsonReader(),
|
|
new typedoc.TSConfigReader(),
|
|
]
|
|
);
|
|
const project = await app.convert();
|
|
if (!project) {
|
|
throw new Error('Failed to convert the project');
|
|
}
|
|
await app.generateDocs(project, app.options.getValue('out'));
|
|
}
|