readmeasy
Version:
Creates README.md for node modules using any template engine as easy as possible.
89 lines • 4.08 kB
JavaScript
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
;