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>

45 lines 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.entryBuilder = entryBuilder; const rxjs_1 = require("rxjs"); const classes_1 = require("../../../classes"); const helpers_1 = require("../../../helpers"); const core_1 = require("../../core"); const helpers_2 = require("../helpers"); /** * A builder function for a entry file. * * This function returns a Builder Observable that emits a NgDocPage object whenever the file at the provided path changes. * The Builder Observable is created by merging an Observable that emits on file changes. * When the file changes, the build function is called, which compiles the TypeScript file, imports it as an ES module, and returns the default export. * @returns {Builder<NgDocPage>} - A Builder Observable that emits a NgDocPage object whenever the file at the provided path changes. * @param config - The configuration object for the builder. */ function entryBuilder(config) { const { tag, context, entryPath } = config; const sourceFile = context.project.addSourceFileAtPath(entryPath); const dependencies = new classes_1.ObservableSet(); const builder = (0, rxjs_1.of)(void 0).pipe((0, core_1.runBuild)(tag, async () => { dependencies.clear(); await sourceFile.refreshFromFileSystem(); const outPath = await (0, helpers_1.buildFileEntity)(sourceFile, context.tsConfig, context.context.workspaceRoot); const page = (await (0, helpers_1.importFreshEsm)(outPath)).default; const metadata = (0, helpers_2.createEntryMetadata)(context, page, sourceFile); addCategoriesToDependencies(metadata, dependencies); core_1.PageStore.add([entryPath, metadata]); return metadata; })); return (0, core_1.createBuilder)([(0, core_1.createMainTrigger)((0, core_1.watchFile)(entryPath, 'update'), (0, core_1.onDependenciesChange)(dependencies))], () => builder).pipe((0, rxjs_1.finalize)(() => core_1.PageStore.delete(entryPath)), (0, rxjs_1.takeUntil)((0, core_1.watchFile)(entryPath, 'delete'))); } /** * * @param metadata * @param dependencies */ function addCategoriesToDependencies(metadata, dependencies) { if (metadata.parent) { dependencies.add(metadata.parent.sourceFile.getFilePath()); addCategoriesToDependencies(metadata.parent, dependencies); } } //# sourceMappingURL=entry.builder.js.map