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