UNPKG

@solarity/hardhat-markup

Version:

Customizable markdown documentation for smart contracts

92 lines 2.93 kB
import json2md from "json2md"; import { DEFAULT_CODE_LANGUAGE, DEFAULT_TABLE_ALIGN, TOPIC_H_SIZE } from "./constants.js"; export class MDFactory { contractTags; constructor() { this.contractTags = []; } addHeaderTag(headerContent, headerSize = TOPIC_H_SIZE) { this.contractTags.push(this.createHeaderTag(headerContent, headerSize)); } addPlainText(plainTextContent) { this.contractTags.push(plainTextContent); } addParagraphTag(pContent) { this.contractTags.push(this.createParagraphTag(pContent)); } addUlTag(ulContent) { this.contractTags.push(this.createUlTag(ulContent)); } addOlTag(olContent) { this.contractTags.push(this.createOlTag(olContent)); } addTableTag(headers, rows, aligns = [], isPretty = true) { this.contractTags.push(this.createTableTag(headers, rows, aligns, isPretty)); } addCodeTag(codeContent, language = DEFAULT_CODE_LANGUAGE) { this.contractTags.push(this.createCodeTag(codeContent, language)); } getContractTagsStr() { return json2md(this.contractTags); } getInlineCodeStr(str) { return `\`${str}\``; } getBoldStr(str) { return `**${str}**`; } createHeaderTag(headerContent, headerSize) { switch (Number(headerSize)) { case 1: return { h1: headerContent }; case 2: return { h2: headerContent }; case 3: return { h3: headerContent }; case 4: return { h4: headerContent }; case 5: return { h5: headerContent }; case 6: return { h6: headerContent }; default: throw new Error("Invalid header size number"); } } createParagraphTag(pContent) { return { p: pContent }; } createUlTag(ulContent) { return { ul: ulContent }; } createOlTag(olContent) { return { ol: olContent }; } createTableTag(headers, rows, aligns, isPretty) { rows.forEach((row) => { if (row.length != headers.length) { throw new Error(`Failed to create Table tag. Expected ${headers.length} columns, actual - ${row.length} columns in ${row} row`); } }); const alignments = headers.map((_, index) => { return aligns && aligns[index] ? aligns[index] : DEFAULT_TABLE_ALIGN; }); return { table: { headers: headers, rows: rows, pretty: isPretty, aligns: alignments, }, }; } createCodeTag(codeContent, language) { return { code: { language: language, content: codeContent, }, }; } } //# sourceMappingURL=MDFactory.js.map