jschemer
Version:
A Node.js library to generate documentation for JSON Schemas
72 lines (52 loc) • 1.71 kB
JavaScript
const createSpinner = require(`ora`);
const { handlebars: hbs } = require(`./helpers`);
const path = require(`path`);
const { createDir } = require(`./utilities`);
const {
createCSSFiles,
createHomePage,
createSchemaPages,
getSchemas,
} = require(`./build`);
const defaultReadmePath = path.join(__dirname, `../components/readme/README.md`);
/**
* The top-level jschemer function
* @param {Object} [options] An options Object
* @return {Promise} Returns a promise that resolves when the documentation is complete
*/
async function jschemer({
out: outDir = `out`,
readme: readmePath = defaultReadmePath,
schemas: schemasPath = `schemas`,
} = {}) {
// Start spinner in console
const spinner = createSpinner(`Generating jschemer documentation`);
spinner.start();
try {
// Create /out directory
await createDir(outDir);
// Register Handlebars partials
await hbs.registerPartials();
// Retrieve schemas from schemas folder
const schemas = await getSchemas(schemasPath);
// Create documentation landing page, with readme
await createHomePage({
outDir,
readmePath,
schemas,
});
const schemaPagesPath = path.join(outDir, `schemas`);
// Create folder for schema pages
await createDir(schemaPagesPath);
// Create pages for individual schemas
await createSchemaPages(schemas, schemaPagesPath);
// Create CSS files using LESS
await createCSSFiles(outDir);
} catch (e) {
spinner.fail(e.message);
console.error(e);
}
// End spinner in console
spinner.succeed(`jschemer documentation successfully generated`);
}
module.exports = jschemer;