UNPKG

ngrx-uml

Version:
68 lines (67 loc) 2.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Renderer = void 0; const chalk_1 = __importDefault(require("chalk")); const loglevel_1 = __importDefault(require("loglevel")); const os_1 = require("os"); const rxjs_1 = require("rxjs"); const models_1 = require("../converters/models"); class Renderer { constructor(itemRenderers, itemFilter) { this.itemRenderers = itemRenderers; this.itemFilter = itemFilter; this.itemRenderedSubject = new rxjs_1.Subject(); this._onItemRendered = this.itemRenderedSubject.asObservable(); } get onItemRendered() { return this._onItemRendered; } render(collections) { const outputs = []; for (const [kind, items] of collections) { const kindRenderers = this.itemRenderers[kind]; if (!kindRenderers) { loglevel_1.default.warn('No renderer for kind', models_1.TypeKind[kind]); continue; } for (const item of items) { const output = this.renderRecursive(item, kindRenderers); if (output) { outputs.push({ name: item.getExportName() || this.randomName(), result: output.join(os_1.EOL) }); this.itemRenderedSubject.next({ item, output: output.join(os_1.EOL) }); } } } if (outputs.length) { return outputs; } return; } renderItem(item, renderers) { return renderers[item.kind] && renderers[item.kind].render(item); } renderRecursive(item, renderers) { const outputs = []; if (!this.itemFilter || this.itemFilter(item)) { const output = this.renderItem(item, renderers); if (output) { outputs.push(output); } } item.getChildren().forEach(child => { const output = this.renderRecursive(child, renderers); if (output) { outputs.push(output.join(os_1.EOL)); } loglevel_1.default.trace('render child:', chalk_1.default.green(child.kindText)); }); return outputs; } randomName() { return Math.random().toString(36).substring(7); } } exports.Renderer = Renderer;