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>

100 lines 2.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildIndexes = buildIndexes; const orama_1 = require("@orama/orama"); const plugin_parsedoc_1 = require("@orama/plugin-parsedoc"); const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); const import_esm_1 = require("./import-esm"); /** * Builds the indexes for a given content * @param config */ async function buildIndexes(config) { const pages = []; const db = await (0, orama_1.create)({ schema: { ...plugin_parsedoc_1.defaultHtmlSchema, }, }); const indexableContent = await removeNotIndexableContent(config.content); await (0, plugin_parsedoc_1.populate)(db, indexableContent, 'html', { transformFn: (node) => transformFn(node), mergeStrategy: 'split', }); let section; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore Object.values(db.data.docs.docs) .filter(isIndexable) .forEach((doc) => { if (doc) { if (isHeading(doc)) { section = doc; } else { pages.push({ breadcrumbs: config.breadcrumbs, pageType: config.pageType, title: config.title, section: section?.content ?? '', route: config.route, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore fragment: section?.properties && section.properties['id'], content: doc.content, }); } } }); return pages; } /** * * @param doc */ function isIndexable(doc) { return !!doc?.content?.trim(); } /** * * @param node * @param doc */ function isHeading(doc) { return (['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(doc.type) && // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore !!doc?.properties && // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore !!doc.properties['id']); } /** * * @param node * @param entity */ function transformFn(node) { switch (node.tag) { case 'strong': case 'a': case 'time': case 'span': case 'small': case 'b': case 'p': case 'ul': return { ...node, raw: `<p>${node.content}</p>` }; default: return node; } } /** * * @param html */ async function removeNotIndexableContent(html) { return (0, rxjs_1.firstValueFrom)((0, rxjs_1.from)((0, import_esm_1.importEsm)('@ng-doc/utils')).pipe((0, operators_1.switchMap)((utils) => utils.removeNotIndexableContent(html)))); } //# sourceMappingURL=build-indexes.js.map