UNPKG

readmeasy

Version:

Creates README.md for node modules using any template engine as easy as possible.

89 lines 4.08 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.findOrCreateTemplateFile = exports.findTemplateFile = exports.findReadMeFiles = exports.readPackageJson = exports.arrify = exports.advancedSupportedEngines = void 0; const path_1 = require("path"); const top_pkg_dir_1 = __importDefault(require("top-pkg-dir")); const measy_1 = require("measy"); const fs_1 = require("fs"); /** @ignore */ exports.advancedSupportedEngines = new Set(["handlebars", "nunjucks"]); /** * Makes given input array and returns it. * * @ignore * @param input to construct array from * @returns created array. */ function arrify(input = []) { return Array.isArray(input) ? input : [input]; } exports.arrify = arrify; /** * Returns top most `package.json` data as an object. * * @ignore * @returns top most `package.json`s data. */ async function readPackageJson(dir) { const jsonFile = path_1.join(dir, "package.json"); const content = await fs_1.promises.readFile(jsonFile, { encoding: "utf8" }); return JSON.parse(content); } exports.readPackageJson = readPackageJson; /** * Returns README templates file by searching given directory for supported template extensions ordered by path. * * @ignore * @param dir is the directory to search README templates for. * @returns template file paths. */ async function findReadMeFiles(dir) { const filesInDir = await fs_1.promises.readdir(dir || (await top_pkg_dir_1.default())); return filesInDir.filter((file) => path_1.basename(file, path_1.extname(file)).toLowerCase() === "readme").sort(); } exports.findReadMeFiles = findReadMeFiles; /** * Returns README template file by searching given directory for supported template extensions. * If more than one found, returns first one. * * @param dir is the directory to search README template for. * @returns template file path. */ async function findTemplateFile(dir) { const templateFiles = (await findReadMeFiles(dir || (await top_pkg_dir_1.default()))).filter((file) => path_1.extname(file) !== ".md"); return templateFiles.find((file) => exports.advancedSupportedEngines.has(measy_1.engineOfExtension(path_1.extname(file)))) || templateFiles[0]; } exports.findTemplateFile = findTemplateFile; /** * Finds or creates README template file and returns the file found or created path. * * @param dir is the directory to search README template for. * @param extension is the extension to be used if template file would be created. * @param defaultContent is the default content to create README template with. * @returns path of the README template. */ async function findOrCreateTemplateFile( /* istanbul ignore next: Ignore default parameters. */ { dir, templateExtension = "njk", defaultContent } = {}) { /* istanbul ignore next: Ignore default parameters. */ const templateDir = dir || (await top_pkg_dir_1.default()); const templateFile = await findTemplateFile(templateDir); if (templateFile === undefined) { const readMeFile = (await findReadMeFiles(templateDir)).find((file) => path_1.extname(file) === ".md"); const oldReadMeContent = readMeFile ? await fs_1.promises.readFile(path_1.join(templateDir, "README.md"), { encoding: "utf8" }) : ""; const content = defaultContent && !oldReadMeContent ? defaultContent : `{% include "module-header" %}\n\n# Synopsis\n\n# Details\n\n<!-- usage -->\n\n<!-- commands -->\n\n${oldReadMeContent}\n\n# API\n\n# Contribution\n\n`; await fs_1.promises.writeFile(path_1.join(templateDir, `README.${templateExtension}`), content); if (readMeFile) { await fs_1.promises.unlink(path_1.join(templateDir, readMeFile)); } return path_1.join(templateDir, `README.${templateExtension}`); } return path_1.join(templateDir, templateFile); } exports.findOrCreateTemplateFile = findOrCreateTemplateFile; //# sourceMappingURL=utils.js.map