@solarity/hardhat-markup
Version:
Customizable markdown documentation for smart contracts
92 lines • 2.93 kB
JavaScript
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