UNPKG

@scalvert/readme-api-generator

Version:
112 lines (110 loc) 4.08 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var index_exports = {}; __export(index_exports, { generateMarkdown: () => generateMarkdown, getFiles: () => getFiles, getReadme: () => getReadme, setMarker: () => setMarker, writeDocs: () => writeDocs }); module.exports = __toCommonJS(index_exports); var import_node_path = require("path"); var import_node_fs = require("fs"); var import_node_url = require("url"); var import_jsdoc_to_markdown = __toESM(require("jsdoc-to-markdown"), 1); var import_meta = {}; var DEFAULT_MARKER = "DOCS"; var _placeholder; var _marker = DEFAULT_MARKER; function setMarker(marker = DEFAULT_MARKER) { _marker = marker; _placeholder = new RegExp(`<!--${_marker}_START-->[\\S\\s]*<!--${_marker}_END-->`); } function getFiles(filesOrDirectory) { if (filesOrDirectory.length === 1 && (0, import_node_fs.statSync)(filesOrDirectory[0]).isDirectory() && (0, import_node_fs.existsSync)(filesOrDirectory[0])) { return (0, import_node_fs.readdirSync)(filesOrDirectory[0]).filter((file) => [".js", ".ts"].includes((0, import_node_path.extname)(file))).map((file) => (0, import_node_path.join)(filesOrDirectory[0], file)); } else { return filesOrDirectory; } } function getReadme(workingDir) { const readmePath = (0, import_node_path.resolve)(workingDir, "README.md"); try { const readmeContent = (0, import_node_fs.readFileSync)(readmePath, "utf8"); if (!readmeContent.match(_placeholder)) { throw new Error( `The README does not contain a valid placeholder (<!--${_marker}_START--> followed by a <!--${_marker}_END--> HTML comment)` ); } return [readmePath, readmeContent]; } catch (error) { if (isNodeError(error) && error.code === "ENOENT") { throw new Error( "No README found. Please run readme-api-generator from a directory that contains a README.md file." ); } throw error; } } async function generateMarkdown(files, flags) { let options = { files: getFiles(files) }; if (flags.typescript) { options = { ...options, ...{ configure: (0, import_node_url.fileURLToPath)(new URL("../jsdoc2md.json", import_meta.url)) } }; } return await import_jsdoc_to_markdown.default.render(options); } function writeDocs(readmePath, readmeContent, docsContent) { (0, import_node_fs.writeFileSync)( readmePath, readmeContent.replace( _placeholder, `<!--${_marker}_START--> ${docsContent} <!--${_marker}_END-->` ) ); } var isNodeError = (error) => error instanceof Error; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { generateMarkdown, getFiles, getReadme, setMarker, writeDocs });