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>

74 lines 3.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PAGE_DEMO_ASSETS_BUILDER_TAG = void 0; exports.demoAssetsBuilder = demoAssetsBuilder; const tslib_1 = require("tslib"); const builder_1 = require("@ng-doc/builder"); const path = tslib_1.__importStar(require("path")); const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); const helpers_1 = require("../../../helpers"); const core_1 = require("../../core"); exports.PAGE_DEMO_ASSETS_BUILDER_TAG = 'PageDemoAssets'; /** * Builds demo assets for a given context, object expression, and output directory. * @param {Options} options - The options for the builder. * @param config * @returns {Builder<AsyncFileOutput>} A builder that outputs file outputs. */ function demoAssetsBuilder(config) { const { context, page } = config; const references = Object.values((0, helpers_1.getDemoClassDeclarations)(page.objectExpression())).map((classDeclaration) => classDeclaration.getSourceFile()); const outPath = path.join(page.outDir, 'demo-assets.ts'); const usedKeywords = new Set(); const cacheStrategy = { id: `${page.path}#DemoAssets`, action: 'skip', files: () => [page.path, outPath, ...references.map((sourceFile) => sourceFile.getFilePath())], }; const builder = (0, rxjs_1.of)(void 0).pipe((0, operators_1.tap)(() => { references.forEach((sourceFile) => { sourceFile.refreshFromFileSystemSync(); }); }), (0, builder_1.runBuild)(exports.PAGE_DEMO_ASSETS_BUILDER_TAG, async () => { usedKeywords.clear(); const classDeclarations = (0, helpers_1.getDemoClassDeclarations)(page.objectExpression()); const demoAssets = Object.keys(classDeclarations).reduce((acc, key) => Object.assign(acc, { [key]: (0, helpers_1.getDemoAssets)(classDeclarations[key], context.inlineStyleLanguage), }), {}); for (const [, value] of Object.entries(demoAssets)) { for (const asset of value) { const processed = await helpers_1.UTILS.processHtml(asset.code, { lightTheme: config.context.config.shiki?.themes.light, darkTheme: config.context.config.shiki?.themes.dark, }); if (processed.error) { throw processed.error; } const postProcessed = await helpers_1.UTILS.postProcessHtml(processed.content); if (postProcessed.error) { throw postProcessed.error; } postProcessed.usedKeywords.forEach((keyword) => usedKeywords.add(keyword)); asset.code = postProcessed.content; } } return async () => { for (const [, value] of Object.entries(demoAssets)) { for (const asset of value) { asset.code = await helpers_1.UTILS.replaceKeywords(asset.code, { getKeyword: builder_1.keywordsStore.get.bind(builder_1.keywordsStore), }); } } return { filePath: outPath, content: (0, builder_1.renderTemplate)('./demo-assets.ts.nunj', { context: { demoAssets } }), }; }; }, cacheStrategy)); return (0, builder_1.createBuilder)([ (0, builder_1.createMainTrigger)(...references.map((sourceFile) => (0, core_1.watchFile)(sourceFile.getFilePath(), 'update'))), ], () => builder); } //# sourceMappingURL=demo-assets.builder.js.map