solidity-docgen
Version:
Solidity API documentation automatic generator.
80 lines • 3.73 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const globby_1 = __importDefault(require("globby"));
const handlebars = __importStar(require("./handlebars"));
const compile_1 = require("./compile");
const solidity_1 = require("./solidity");
const sitemap_1 = require("./sitemap");
function docgen(options) {
return __awaiter(this, void 0, void 0, function* () {
const solcOutput = yield compile_1.compile(options.input, options.exclude, options['solc-module'], options['solc-settings']);
const templates = yield getTemplates(options.templates);
const readmes = yield getReadmes(options.input);
const source = new solidity_1.SoliditySource(options.input, solcOutput, templates.contract);
const sitemap = sitemap_1.Sitemap.generate(source, readmes, options.extension, options['contract-pages']);
for (const page of sitemap.pages) {
const dest = path_1.default.join(options.output, page.path);
yield fs_extra_1.default.outputFile(dest, page.render(templates.prelude));
}
});
}
exports.docgen = docgen;
function getReadmes(inputDir) {
return __awaiter(this, void 0, void 0, function* () {
const readmes = yield globby_1.default(path_1.default.join(inputDir, '**/README.*'));
return yield Promise.all(readmes.map((readmePath) => __awaiter(this, void 0, void 0, function* () {
return ({
path: path_1.default.relative(inputDir, readmePath),
contents: yield fs_extra_1.default.readFile(readmePath, 'utf8'),
});
})));
});
}
function getTemplates(directory) {
return __awaiter(this, void 0, void 0, function* () {
if (directory === undefined) {
directory = path_1.default.join(__dirname, '..');
}
const contract = yield readTemplate(path_1.default.join(directory, 'contract.hbs'));
const prelude = yield readTemplate(path_1.default.join(directory, 'prelude.hbs'), true);
return { contract, prelude };
});
}
function readTemplate(path, allowMissing = false) {
return __awaiter(this, void 0, void 0, function* () {
try {
const template = yield fs_extra_1.default.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