UNPKG

@ng-doc/builder

Version:

<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/ng-doc/ng-doc"> <img src="https://ng-doc.com/assets/images/ng-doc.svg?raw=true" alt="Logo" height="150px"> </a>

84 lines 3.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pageWrapperBuilder = pageWrapperBuilder; const builder_1 = require("@ng-doc/builder"); const core_1 = require("@ng-doc/core"); const rxjs_1 = require("rxjs"); const helpers_1 = require("../../../helpers"); const build_indexes_1 = require("../../../helpers/build-indexes"); const core_2 = require("../../core"); const nunjucks_1 = require("../../nunjucks"); /** * * @param config */ function pageWrapperBuilder(config) { const { context, tag, metadata, pageTemplateBuilders, pageType, getHeaderContent } = config; const cacheStrategy = { id: `${metadata.path}#PageWrapper`, action: 'skip', files: () => [metadata.outPath], }; let usedKeywords = new Set(); let removeIndexes = () => { }; const builder = () => (0, core_2.mergeFactory)(tag, pageTemplateBuilders, async (...templates) => { removeIndexes(); usedKeywords.clear(); const processed = await helpers_1.UTILS.processHtml(getHeaderContent(), { headings: context.config.guide?.anchorHeadings, route: metadata.absoluteRoute(), lightTheme: config.context.config.shiki?.themes.light, darkTheme: config.context.config.shiki?.themes.dark, }); const postProcessed = await helpers_1.UTILS.postProcessHtml(processed.content); usedKeywords = new Set(postProcessed.usedKeywords); const entries = getPageWrapperPages(metadata, templates); return async () => { // TODO: maybe move replacing keywords and building indexes to a separate entity to reuse it in page-component.builder.ts const content = await helpers_1.UTILS.replaceKeywords(postProcessed.content, { getKeyword: builder_1.keywordsStore.get.bind(builder_1.keywordsStore), }); const indexes = await (0, build_indexes_1.buildIndexes)({ content, title: metadata.title, breadcrumbs: metadata.breadcrumbs(), pageType, route: metadata.absoluteRoute(), }); removeIndexes = builder_1.IndexStore.add(...indexes); return { filePath: metadata.outPath, content: (0, nunjucks_1.renderTemplate)('./page-wrapper.ts.nunj', { context: { id: (0, core_1.uid)(), metadata, entries, headerContent: content, hasBreadcrumb: pageType !== 'api' && !!metadata.breadcrumbs().length, pageType, }, }), }; }; }, cacheStrategy, ({ output }) => output).pipe((0, rxjs_1.finalize)(() => { removeIndexes(); })); // This trigger destroys child content builder. HEADER builder should be moved to a separate builder to avoid that return (0, builder_1.createBuilder)([ /*createSecondaryTrigger(onKeywordsTouch(usedKeywords))*/ ], builder, true); } /** * * @param pageMetadata * @param templates */ function getPageWrapperPages(pageMetadata, templates) { return templates.reduce((pages, { metadata }) => ({ ...pages, [(0, builder_1.createImportPath)(pageMetadata.outDir, metadata.outPath)]: { ...metadata, }, }), {}); } //# sourceMappingURL=page-wrapper.builder.js.map