@compodoc/compodoc
Version:
The missing documentation tool for your Angular application
57 lines (48 loc) • 1.95 kB
text/typescript
import { Rule, SchematicContext, Tree, SchematicsException } from '@angular-devkit/schematics';
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
const TSCONFIG_DATA = {
include: ['src/**/*.ts'],
exclude: ['src/**/*.spec.ts']
};
function safeReadJSON(path: string, tree: Tree) {
try {
return JSON.parse(tree.read(path)!.toString());
} catch (e) {
throw new SchematicsException(`Error when parsing ${path}: ${e.message}`);
}
}
// Just return the tree
export function ngAdd(): Rule {
return (tree: Tree, context: SchematicContext) => {
// Create tsconfig.doc.json file
const tsconfigDocFile = 'tsconfig.doc.json';
if (!tree.exists(tsconfigDocFile)) {
tree.create(tsconfigDocFile, JSON.stringify(TSCONFIG_DATA));
}
// update package.json scripts
const packageJsonFile = 'package.json';
const packageJson = tree.exists(packageJsonFile) && safeReadJSON(packageJsonFile, tree);
if (packageJson === undefined) {
throw new SchematicsException('Could not locate package.json');
}
let packageScripts = {};
if (packageJson['scripts']) {
packageScripts = packageJson['scripts'];
} else {
packageScripts = {};
}
if (packageScripts) {
packageScripts['compodoc:build'] = 'compodoc -p tsconfig.doc.json';
packageScripts['compodoc:build-and-serve'] = 'compodoc -p tsconfig.doc.json -s';
packageScripts['compodoc:serve'] = 'compodoc -s';
}
if (tree.exists(packageJsonFile)) {
tree.overwrite(packageJsonFile, JSON.stringify(packageJson, null, 2));
} else {
tree.create(packageJsonFile, JSON.stringify(packageJson, null, 2));
}
// install package with npm
context.addTask(new NodePackageInstallTask());
return tree;
};
}