`;
}
/**
* Generate HTML code for documentation index.
* @param mongooseSchemas
*/
function mongooseDocsGenerateIndexHTML(mongooseSchemas: IMongooseDocsSchema[]): string {
return `
Mongoose Docs
${generateNavigation(mongooseSchemas)}
Mongoose Docs
`;
}
/**
* Generate HTML code for a single schema.
* @param mongooseSchemas
* @param modelName
*/
function mongooseDocsGenerateSchemaHTML(mongooseSchemas: IMongooseDocsSchema[], modelName: string): string {
const currentSchema: IMongooseDocsSchema = mongooseSchemas.find((schema) => schema.name === modelName) as IMongooseDocsSchema;
if (!currentSchema) return "";
return `
Mongoose Docs for ${modelName} model
${generateNavigation(mongooseSchemas, modelName)}
Mongoose Docs for ${modelName} model
${currentSchema.comment}
${generateSchemaTable(currentSchema)}
`;
}
/**
* Write documentation as HTML files for all available schemas.
* @param mongooseSchemas Schema structure returned from `mongooseDocsJSON` function.
* @param fileDirectory Directory to write the documentation HTML files.
*/
export function mongooseDocsOutputHTML(mongooseSchemas: IMongooseDocsSchema[], fileDirectory: string): void {
const lastChar: string = fileDirectory.substr(-1); // Selects the last character
if (lastChar != '/') { // If the last character is not a slash
fileDirectory = fileDirectory + '/'; // Append a slash to it.
}
// Make directory if it does not exist
if (!fs.existsSync(fileDirectory)) {
try {
fs.mkdirSync(fileDirectory, {recursive: true});
} catch (err) {
console.error(`Error creating directory "${fileDirectory}"`, err);
}
}
// Write out HTML files
writeFile(mongooseDocsGenerateIndexHTML(mongooseSchemas), path.join(fileDirectory, "index.html"));
mongooseSchemas.forEach((schema) => {
writeFile(mongooseDocsGenerateSchemaHTML(mongooseSchemas, schema.name), path.join(fileDirectory, `${schema.name}.html`));
});
console.log(`documentation files written to ${fileDirectory}`);
}