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