@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
JavaScript
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
;