solidity-docgen
Version:
Solidity API documentation automatic generator.
80 lines • 3.45 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.docgen = void 0;
const path_1 = __importDefault(require("path"));
const fs_1 = require("fs");
const handlebars = __importStar(require("./handlebars"));
const solc_1 = require("./solc");
const source_1 = require("./source");
const sitemap_1 = require("./sitemap");
const filter_1 = require("./filter");
async function docgen(options) {
const filter = new filter_1.Filter(options.input, options.exclude);
const solcOutput = await solc_1.compile(filter, options['solc-module'], options['solc-settings']);
if (options.helpers) {
handlebars.registerHelpers(await Promise.resolve().then(() => __importStar(require(options.helpers))));
}
const templates = await getTemplates(options.templates);
const readmes = await getReadmes(filter);
const source = new source_1.Source(options.input, solcOutput, templates.contract);
const sitemap = sitemap_1.Sitemap.generate(source, filter, readmes, options.extension, options['output-structure']);
for (const page of sitemap.pages) {
const dest = path_1.default.join(options.output, page.path);
await fs_1.promises.mkdir(path_1.default.dirname(dest), { recursive: true });
await fs_1.promises.writeFile(dest, page.render(templates.prelude));
}
}
exports.docgen = docgen;
async function getReadmes(filter) {
const readmes = await filter.glob('README.*');
return await Promise.all(readmes.map(async (readmePath) => ({
path: path_1.default.relative(filter.root, readmePath),
contents: await fs_1.promises.readFile(readmePath, 'utf8'),
})));
}
async function getTemplates(directory) {
if (directory === undefined) {
directory = path_1.default.join(__dirname, '../templates');
}
const contract = await readTemplate(path_1.default.join(directory, 'contract.hbs'));
const prelude = await readTemplate(path_1.default.join(directory, 'prelude.hbs'), true);
return { contract, prelude };
}
async function readTemplate(path, allowMissing = false) {
try {
const template = await fs_1.promises.readFile(path, 'utf8');
return handlebars.compile(template);
}
catch (e) {
if (e.code === 'ENOENT' && allowMissing) {
// default to empty template
return () => '';
}
else {
throw e;
}
}
}
//# sourceMappingURL=docgen.js.map
;