UNPKG

vue-docgen-cli

Version:

Generate documentation markdown files from VueJs components using the vue-docgen-api.

128 lines 7.05 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (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 __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getDependencies = exports.docgen = exports.functionalTag = exports.defaultExample = exports.expose = exports.header = exports.component = exports.props = exports.slots = exports.methods = exports.events = exports.mdclean = exports.renderTags = void 0; const path = __importStar(require("path")); const log = __importStar(require("loglevel")); const events_1 = __importDefault(require("./templates/events")); exports.events = events_1.default; const methods_1 = __importDefault(require("./templates/methods")); exports.methods = methods_1.default; const expose_1 = __importDefault(require("./templates/expose")); exports.expose = expose_1.default; const slots_1 = __importDefault(require("./templates/slots")); exports.slots = slots_1.default; const props_1 = __importDefault(require("./templates/props")); exports.props = props_1.default; const component_1 = __importDefault(require("./templates/component")); exports.component = component_1.default; const header_1 = __importDefault(require("./templates/header")); exports.header = header_1.default; const defaultExample_1 = __importDefault(require("./templates/defaultExample")); exports.defaultExample = defaultExample_1.default; const functionalTag_1 = __importDefault(require("./templates/functionalTag")); exports.functionalTag = functionalTag_1.default; const getDocsBlocks_1 = __importStar(require("./getDocsBlocks")); const utils_1 = require("./utils"); var tags_1 = require("./templates/tags"); Object.defineProperty(exports, "renderTags", { enumerable: true, get: function () { return tags_1.renderTags; } }); var utils_2 = require("./templates/utils"); Object.defineProperty(exports, "mdclean", { enumerable: true, get: function () { return utils_2.mdclean; } }); var docgen_1 = require("./docgen"); Object.defineProperty(exports, "docgen", { enumerable: true, get: function () { return __importDefault(docgen_1).default; } }); function getDependencies(doc, compDirName, absolutePath) { // remove the current file from the list of dependencies const externalSourceFiles = doc.sourceFiles?.splice(doc.sourceFiles.indexOf(absolutePath)) || []; if (!doc.tags) { return externalSourceFiles; } const requireDep = (0, utils_1.resolveRequiresFromTag)(doc.tags.requires, compDirName); const examplesDep = (0, getDocsBlocks_1.getExamplesFilePaths)(doc.tags, compDirName); return [...externalSourceFiles, ...requireDep, ...examplesDep]; } exports.getDependencies = getDependencies; /** * Umbrella that calls docgen * Calls each template provided by the user * And generates a markdown string + the list of dependencies * @param absolutePath * @param config * @param componentRelativePath * @param extraMd * @returns content will contain the markdown text, dependencies contains * an array of path to files that should trigger the update of this file */ async function compileTemplates(event, absolutePath, config, componentRelativePath, subComponent = false) { const { apiOptions: options, templates, cwd } = config; try { const docs = await config.propsParser(absolutePath, options, event); const components = await Promise.all(docs.map(async (doc) => { const { props: p, events: e, methods: m, slots: s, expose: exp } = doc; const isSubComponent = subComponent || docs.length > 1; const hasSubComponents = !!doc.tags?.requires; const subComponentOptions = { isSubComponent, hasSubComponents }; const renderedUsage = { props: p ? await Promise.resolve(templates.props(p, subComponentOptions, doc)) : '', slots: s ? await Promise.resolve(templates.slots(s, subComponentOptions, doc)) : '', methods: m ? await Promise.resolve(templates.methods(m, subComponentOptions, doc)) : '', events: e ? await Promise.resolve(templates.events(e, subComponentOptions, doc)) : '', expose: exp ? await Promise.resolve(templates.expose(exp, subComponentOptions, doc)) : '', functionalTag: templates.functionalTag }; if (!subComponent) { doc.docsBlocks = await (0, getDocsBlocks_1.default)(absolutePath, doc, config.getDocFileName, cwd, config.editLinkLabel, config.getRepoEditUrl); if (!doc.docsBlocks?.length && config.defaultExamples) { doc.docsBlocks = [await Promise.resolve(templates.defaultExample(doc))]; } } const componentRelativeDirectoryPath = path.dirname(componentRelativePath); const componentAbsoluteDirectoryPath = path.dirname(absolutePath); const requiresMd = doc.tags?.requires ? await Promise.all((0, utils_1.resolveRequiresFromTag)(doc.tags.requires, componentAbsoluteDirectoryPath).map((requirePath) => compileTemplates(event, requirePath, config, requirePath, true))) : []; return { content: templates.component(renderedUsage, doc, config, componentRelativePath, requiresMd, subComponentOptions), dependencies: getDependencies(doc, componentRelativeDirectoryPath, absolutePath), docs }; })); return { content: (await templates.header(docs, config, docs.length > 1 || docs.some(d => d.tags?.requires), componentRelativePath)) + '\n' + components.map(c => c.content).join('\n\n'), dependencies: components.map(c => c.dependencies).reduce((acc, curr) => acc.concat(curr), []), docs }; } catch (e) { log.error(`[vue-docgen-cli] Error parsing file ${absolutePath}:`); throw e; } } exports.default = compileTemplates; //# sourceMappingURL=compileTemplates.js.map