vue-docgen-cli
Version:
Generate documentation markdown files from VueJs components using the vue-docgen-api.
128 lines • 7.05 kB
JavaScript
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
;