dokkie
Version:
Create good looking documentation from your Readme
267 lines • 13.1 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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
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) : adopt(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 };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setHomePage = exports.createPageData = exports.copyScripts = exports.copyFolders = exports.createPages = exports.reformInjectHtml = exports.getLayout = exports.filterHiddenPages = exports.convertDataToHtml = exports.toHtml = void 0;
const ncp = require("ncp").ncp;
const { readFile } = require("fs").promises;
const log = __importStar(require("cli-block"));
const prettier_1 = __importDefault(require("prettier"));
const path_1 = require("path");
const utils_1 = require("../utils");
const _1 = require("./");
exports.toHtml = (file) => __awaiter(void 0, void 0, void 0, function* () {
const markdownData = yield utils_1.mdToHtml(file);
return { meta: markdownData.meta, html: markdownData.document };
});
// Convert filedata to html.
exports.convertDataToHtml = (settings) => __awaiter(void 0, void 0, void 0, function* () {
yield utils_1.asyncForEach(settings.files, (file, idx1) => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b, _c;
switch (file.ext) {
case ".md":
file = Object.assign(Object.assign({}, file), exports.toHtml(file));
break;
case ".html":
file.meta = {};
file.html = file.data;
break;
}
// Actually convert the html for the main file.
const rendered1 = yield utils_1.mdToHtml(file);
settings.files[idx1].html = rendered1.document;
settings.files[idx1].meta = rendered1.meta;
// When the file has partials saved in contents, all partials also need the Markdown treatment.
if ((_b = (_a = file.contents) === null || _a === void 0 ? void 0 : _a.articles) === null || _b === void 0 ? void 0 : _b.length) {
yield utils_1.asyncForEach(file.contents.articles, (subFile, idx2) => __awaiter(void 0, void 0, void 0, function* () {
const rendered2 = yield utils_1.mdToHtml(subFile);
settings.files[idx1].contents.articles[idx2].html =
rendered2.document;
settings.files[idx1].contents.articles[idx2].meta = rendered2.meta;
}));
} // When the file has partials saved in contents, all partials also need the Markdown treatment.
if ((_c = file.sections) === null || _c === void 0 ? void 0 : _c.length) {
yield utils_1.asyncForEach(file.sections, (section, idx2) => __awaiter(void 0, void 0, void 0, function* () {
const rendered3 = yield utils_1.mdToHtml(section);
settings.files[idx1].sections[idx2].html = rendered3.document;
settings.files[idx1].sections[idx2].meta = rendered3.meta;
if (section.articles)
yield utils_1.asyncForEach(section.articles, (subFile, idx3) => __awaiter(void 0, void 0, void 0, function* () {
const rendered4 = yield utils_1.mdToHtml(subFile);
settings.files[idx1].sections[idx2].articles[idx3].html =
rendered4.document;
settings.files[idx1].sections[idx2].articles[idx3].meta =
rendered4.meta;
}));
}));
}
}));
return Object.assign(Object.assign({}, settings), { files: settings.files });
});
// Filter files
exports.filterHiddenPages = (settings) => __awaiter(void 0, void 0, void 0, function* () {
// If the file has a meta remove. Remove it.
const files = settings.files.filter((file) => { var _a; return ((_a = file.meta) === null || _a === void 0 ? void 0 : _a.remove) ? null : file; });
return Object.assign(Object.assign({}, settings), { files });
});
// Get the layouts
exports.getLayout = (settings) => __awaiter(void 0, void 0, void 0, function* () {
try {
let layoutFile = "";
if (settings.layout.includes(".hbs") || settings.layout.includes(".html")) {
try {
layoutFile = yield readFile(path_1.join(process.cwd(), settings.layout)).then((r) => r.toString());
}
catch (err) {
throw Error(err);
}
}
else {
try {
layoutFile = yield readFile(path_1.join(__dirname, "../../", `template/${settings.layout}.hbs`)).then((r) => r.toString());
}
catch (err) {
throw Error(err);
}
}
return Object.assign(Object.assign({}, settings), { layoutFile });
}
catch (err) {
throw new Error(err);
}
});
exports.reformInjectHtml = (settings) => __awaiter(void 0, void 0, void 0, function* () {
const Inject = {};
function isLink(str) {
if (str.indexOf(".html") > -1)
return true;
return false;
}
if (settings.injectHtml) {
yield utils_1.asyncForEach(Object.keys(settings.injectHtml), (option) => __awaiter(void 0, void 0, void 0, function* () {
if (isLink(settings.injectHtml[option])) {
try {
Inject[option] = yield readFile(settings.injectHtml[option]);
}
catch (err) {
throw Error(err);
}
}
else {
Inject[option] = settings.injectHtml[option];
}
}));
}
return Object.assign(Object.assign({}, settings), { injectHtml: Inject });
});
exports.createPages = (settings) => __awaiter(void 0, void 0, void 0, function* () {
var _d;
const partials = yield utils_1.loadHandlebarsPartials();
// Register Partials
yield utils_1.asyncForEach(partials, (partial) => {
utils_1.Handlebars.registerPartial(partial.name, partial.file);
});
const template = utils_1.Handlebars.compile(settings.layoutFile);
const getOnce = {
logo: ((_d = settings.assets) === null || _d === void 0 ? void 0 : _d.logo) ? settings.assets.logo : false,
package: settings.package ? settings.package : false,
favicon: settings.faviconData ? settings.faviconData.html.join("") : null,
enhance: Object.assign(Object.assign({}, settings.enhance), { search: settings.files.length > 1 ? settings.enhance.search : false }),
skip: settings.skip,
injectHtml: settings.injectHtml,
styles: settings.styles ? settings.styles : null,
scripts: settings.scripts ? settings.scripts : null,
};
!settings.logging.includes("silent") && log.BLOCK_MID("Creating pages");
yield utils_1.asyncForEach(settings.files, (file) => __awaiter(void 0, void 0, void 0, function* () {
var _e, _f, _g;
// THe file is newer than today, so don't build it (yet).
if (file.date > new Date())
return;
try {
const currentLink = file.route.replace("index.html", "");
const contents = template(Object.assign(Object.assign({}, getOnce), { projectTitle: settings.projectTitle === ""
? ((_e = settings.package) === null || _e === void 0 ? void 0 : _e.name) ? settings.package.name
: file.title
: settings.projectTitle, title: file.title, type: settings.type, template: settings.layout, content: file.html, currentLink, currentId: currentLink.replace(/\//g, " ").trim().replace(/\s+/g, "-"), headerNavigation: _1.getNavigation(settings, "header"), sidebarNavigation: _1.getNavigation(settings, "sidebar"), footerNavigation: _1.getNavigation(settings, "footer"), overviewNavigation: _1.getNavigation(settings, "overview"), nextItem: _1.getItem(settings, file, "next"), prevItem: _1.getItem(settings, file, "prev"), meta: file.meta, sections: file.sections, columns: file.contents, hasMeta: ((_f = file.meta) === null || _f === void 0 ? void 0 : _f.author) || ((_g = file.meta) === null || _g === void 0 ? void 0 : _g.tags) ? true : false, language: settings.language, url: settings.url, scroll: true }));
yield utils_1.writeThatFile(file, prettier_1.default.format(contents, { parser: "html" }), settings);
}
catch (err) {
throw Error(err);
}
}));
});
exports.copyFolders = (settings) => __awaiter(void 0, void 0, void 0, function* () {
settings.copy = settings.copy.filter((folder) => {
if (typeof folder === "string")
return true;
});
if (settings.copy.length > 0) {
!settings.logging.includes("silent") && log.BLOCK_MID("Copy files/folders");
yield utils_1.asyncForEach(settings.copy, (folder) => __awaiter(void 0, void 0, void 0, function* () {
yield ncp(folder, settings.output + "/" + folder.split("/")[folder.split("/").length - 1], (err) => {
if (!err)
!settings.logging.includes("silent") &&
log.BLOCK_LINE_SUCCESS(folder);
else
throw Error(err);
});
}));
}
});
exports.copyScripts = (settings) => __awaiter(void 0, void 0, void 0, function* () {
if (Object.keys(settings.enhance).length) {
const folder = path_1.join(__dirname, "../../template/scripts");
yield ncp(folder, settings.output + "/" + folder.split("/")[folder.split("/").length - 1], (err) => {
if (!err)
!settings.logging.includes("silent") &&
log.BLOCK_LINE_SUCCESS(folder);
else
throw Error(err);
});
}
});
exports.createPageData = (settings) => __awaiter(void 0, void 0, void 0, function* () {
const fileData = [...settings.files].map((item) => {
// Add combined data as data and remove the default data. The combinedata has all information of the
// page which can be used for search.
item.data = item.combinedData;
delete item.path;
delete item.ext;
delete item.html;
delete item.destpath;
delete item.filename;
delete item.contents;
delete item.sections;
delete item.combinedData;
return item;
});
yield utils_1.writeThatFile({
name: "",
title: "data.json",
ext: ".json",
path: "",
destpath: path_1.join(settings.output),
filename: "data.json",
data: "",
meta: {},
html: "",
}, JSON.stringify(fileData), settings, true);
});
exports.setHomePage = (settings) => {
const customHomePage = settings.files.find((file) => { var _a; return (_a = file.meta) === null || _a === void 0 ? void 0 : _a.home; });
const hasHomePage = settings.files.find((file) => file.route === "/index.html");
if (customHomePage) {
settings.files.push(Object.assign(Object.assign({}, customHomePage), { route: "/index.html", filename: "index.html" }));
return settings;
}
else if (hasHomePage) {
return settings;
}
else {
settings.files.push({
name: "home",
path: "",
ext: ".md",
date: new Date(),
data: "",
meta: { title: "home", hide: true },
html: "",
title: "Home",
route: "/index.html",
destpath: settings.output,
filename: "index.html",
});
return settings;
}
};
//# sourceMappingURL=page.js.map