UNPKG

@loopback/context-explorer

Version:

Visualize context hierarchy, bindings, configurations, and dependencies

112 lines 5.19 kB
"use strict"; // Copyright IBM Corp. and LoopBack contributors 2020. All Rights Reserved. // Node module: @loopback/context-explorer // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT Object.defineProperty(exports, "__esModule", { value: true }); exports.contextExplorerControllerFactory = void 0; const tslib_1 = require("tslib"); const core_1 = require("@loopback/core"); const rest_1 = require("@loopback/rest"); const context_graph_1 = require("./context-graph"); const keys_1 = require("./keys"); const visualizer_1 = require("./visualizer"); function contextExplorerControllerFactory(basePath = '/context-explorer') { let ContextExplorerController = class ContextExplorerController { constructor(explorerConfig = { path: '/context-explorer', }, ctx) { this.explorerConfig = explorerConfig; this.ctx = ctx; } // Map to `GET /inspect` inspect(includeInjections = true, includeParent = true, includeGraph = true) { if (this.explorerConfig.enableInspection === false) { throw new rest_1.HttpErrors.NotFound(); } const result = this.ctx.inspect({ includeInjections, includeParent }); if (includeGraph) { const graph = new context_graph_1.ContextGraph(result).render(); result.graph = graph; } return result; } // Map to `GET /inspect` async graph(includeInjections = true, includeParent = true, format = 'svg') { if (this.explorerConfig.enableSVG === false) { throw new rest_1.HttpErrors.NotFound(); } const result = this.ctx.inspect({ includeInjections, includeParent }); const graph = new context_graph_1.ContextGraph(result).render(); if (format === 'dot') { this.ctx.response.contentType('text/plain').send(graph); } else { const svg = await (0, visualizer_1.renderGraph)(graph); this.ctx.response.contentType('image/svg+xml').send(svg); } return this.ctx.response; } /** * Create an array of graphviz dot graphs for d3 animation */ async dots() { if (this.explorerConfig.enableD3Animation === false) { throw new rest_1.HttpErrors.NotFound(); } let ctx = this.ctx; const dots = []; while (ctx != null) { // Add one graph with injections const ctxData = ctx.inspect({ includeParent: true, includeInjections: true, }); const graph = new context_graph_1.ContextGraph(ctxData).render(); dots.push(graph); ctx = ctx.parent; } // Show app, app+server, and app+server+request return dots.reverse(); } }; tslib_1.__decorate([ (0, rest_1.get)('/inspect', { 'x-visibility': 'undocumented', responses: {}, }), tslib_1.__param(0, rest_1.param.query.boolean('includeInjections')), tslib_1.__param(1, rest_1.param.query.boolean('includeParent')), tslib_1.__param(2, rest_1.param.query.boolean('includeGraph')), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", [Object, Object, Object]), tslib_1.__metadata("design:returntype", Object) ], ContextExplorerController.prototype, "inspect", null); tslib_1.__decorate([ (0, rest_1.get)('/graph', { 'x-visibility': 'undocumented', responses: {} }), tslib_1.__param(0, rest_1.param.query.boolean('includeInjections')), tslib_1.__param(1, rest_1.param.query.boolean('includeParent')), tslib_1.__param(2, rest_1.param.query.string('format')), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", [Object, Object, Object]), tslib_1.__metadata("design:returntype", Promise) ], ContextExplorerController.prototype, "graph", null); tslib_1.__decorate([ (0, rest_1.get)('/dots', { 'x-visibility': 'undocumented', responses: {}, }), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", []), tslib_1.__metadata("design:returntype", Promise) ], ContextExplorerController.prototype, "dots", null); ContextExplorerController = tslib_1.__decorate([ (0, rest_1.api)({ basePath, paths: {} }), tslib_1.__param(0, (0, core_1.config)({ fromBinding: keys_1.ContextExplorerBindings.COMPONENT })), tslib_1.__param(1, (0, core_1.inject)(rest_1.RestBindings.Http.CONTEXT)), tslib_1.__metadata("design:paramtypes", [Object, rest_1.RequestContext]) ], ContextExplorerController); return ContextExplorerController; } exports.contextExplorerControllerFactory = contextExplorerControllerFactory; //# sourceMappingURL=context-explorer.controller.js.map