ngrx-uml
Version:
NGRX to Plant UML diagram
68 lines (67 loc) • 2.47 kB
JavaScript
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;
;