@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
114 lines • 14.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SerializedGraph = void 0;
const app_1 = require("../app");
const core_1 = require("../core");
const helpers_1 = require("../helpers");
const services_1 = require("../services");
const router_1 = require("../router");
const deterministic_uuid_registry_1 = require("./deterministic-uuid-registry");
class SerializedGraph {
constructor() {
this.nodes = new Map();
this.edges = new Map();
this.entrypoints = new Map();
this.extras = {
orphanedEnhancers: [],
attachedEnhancers: []
};
this._status = 'complete';
}
set status(status) {
this._status = status;
}
set metadata(metadata) {
this._metadata = metadata;
}
insertNode(nodeDefinition) {
if (nodeDefinition.metadata.type === 'provider' &&
SerializedGraph.INTERNAL_PROVIDERS.includes(nodeDefinition.metadata.token)) {
nodeDefinition.metadata = Object.assign(Object.assign({}, nodeDefinition.metadata), { internal: true });
}
if (this.nodes.has(nodeDefinition.id)) {
return this.nodes.get(nodeDefinition.id);
}
this.nodes.set(nodeDefinition.id, nodeDefinition);
return nodeDefinition;
}
insertEdge(edgeDefinition) {
var _a;
if (edgeDefinition.metadata.type === 'class-to-class' &&
(SerializedGraph.INTERNAL_PROVIDERS.includes(edgeDefinition.metadata.sourceClassToken) ||
SerializedGraph.INTERNAL_PROVIDERS.includes(edgeDefinition.metadata.targetClassToken))) {
edgeDefinition.metadata = Object.assign(Object.assign({}, edgeDefinition.metadata), { internal: true });
}
const id = (_a = edgeDefinition.id) !== null && _a !== void 0 ? _a : this.generateUuidByEdgeDefinition(edgeDefinition);
const edge = Object.assign(Object.assign({}, edgeDefinition), { id });
this.edges.set(id, edge);
return edge;
}
insertEntrypoint(definition, parentId) {
if (this.entrypoints.has(parentId)) {
const existingCollection = this.entrypoints.get(parentId);
existingCollection.push(definition);
}
else {
this.entrypoints.set(parentId, [definition]);
}
}
insertOrphanedEnhancer(entry) {
this.extras.orphanedEnhancers.push(entry);
}
insertAttachedEnhancer(nodeId) {
this.extras.attachedEnhancers.push({
nodeId
});
}
getNodeById(id) {
return this.nodes.get(id);
}
toJSON() {
const json = {
nodes: Object.fromEntries(this.nodes),
edges: Object.fromEntries(this.edges),
entrypoints: Object.fromEntries(this.entrypoints),
extras: this.extras
};
if (this._status) {
json['status'] = this._status;
}
if (this._metadata) {
json['metadata'] = this._metadata;
}
return json;
}
toString() {
const replacer = (key, value) => {
var _a;
if (typeof value === 'symbol') {
return value.toString();
}
return typeof value === 'function' ? (_a = value.name) !== null && _a !== void 0 ? _a : 'Function' : value;
};
return JSON.stringify(this.toJSON(), replacer, 2);
}
generateUuidByEdgeDefinition(edgeDefinition) {
return deterministic_uuid_registry_1.DeterministicUuidRegistry.get(JSON.stringify(edgeDefinition));
}
}
exports.SerializedGraph = SerializedGraph;
SerializedGraph.INTERNAL_PROVIDERS = [
app_1.ApplicationConfig,
core_1.ModuleRef,
helpers_1.HttpAdapterHost,
// LazyModuleLoader,
helpers_1.ExternalContextCreator,
core_1.ModulesContainer,
services_1.Reflector,
SerializedGraph,
// HttpAdapterHost.name,
services_1.Reflector.name,
router_1.REQUEST,
core_1.INQUIRER
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplZC1ncmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnNwZWN0b3Ivc2VyaWFsaXplZC1ncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxnQ0FBMEM7QUFDMUMsa0NBQStEO0FBQy9ELHdDQUFvRTtBQUNwRSwwQ0FBdUM7QUFDdkMsc0NBQW1DO0FBRW5DLCtFQUF5RTtBQU16RSxNQUFhLGVBQWU7SUFBNUI7UUFDbUIsVUFBSyxHQUFHLElBQUksR0FBRyxFQUFnQixDQUFBO1FBQy9CLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQTtRQUMvQixnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFBO1FBQ3RELFdBQU0sR0FBVztZQUNoQyxpQkFBaUIsRUFBRSxFQUFFO1lBQ3JCLGlCQUFpQixFQUFFLEVBQUU7U0FDdEIsQ0FBQTtRQUNPLFlBQU8sR0FBMEIsVUFBVSxDQUFBO0lBMkhyRCxDQUFDO0lBekdDLElBQUksTUFBTSxDQUFFLE1BQTZCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBRSxRQUFpQztRQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQTtJQUMzQixDQUFDO0lBRU0sVUFBVSxDQUFFLGNBQW9CO1FBQ3JDLElBQ0UsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssVUFBVTtZQUMzQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQzFFLENBQUM7WUFDRCxjQUFjLENBQUMsUUFBUSxtQ0FDbEIsY0FBYyxDQUFDLFFBQVEsS0FDMUIsUUFBUSxFQUFFLElBQUksR0FDZixDQUFBO1FBQ0gsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUFF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TSxRQUFRO1FBQ2IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBYyxFQUFFLEVBQUU7O1lBQy9DLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBO1lBQ3pCLENBQUM7WUFDRCxPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBQSxLQUFLLENBQUMsSUFBSSxtQ0FBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtRQUN2RSxDQUFDLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLGNBQW9DO1FBRXBDLE9BQU8sdURBQXlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQTtJQUN0RSxDQUFDOztBQWxJSCwwQ0FtSUM7QUF4SHlCLGtDQUFrQixHQUEwQjtJQUNsRSx1QkFBaUI7SUFDakIsZ0JBQVM7SUFDVCx5QkFBZTtJQUNmLG9CQUFvQjtJQUNwQixnQ0FBc0I7SUFDdEIsdUJBQWdCO0lBQ2hCLG9CQUFTO0lBQ1QsZUFBZTtJQUNmLHdCQUF3QjtJQUN4QixvQkFBUyxDQUFDLElBQUk7SUFDZCxnQkFBTztJQUNQLGVBQVE7Q0FDVCxBQWJ5QyxDQWF6QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vY29udHJhY3RzJ1xuaW1wb3J0IHsgRWRnZSB9IGZyb20gJy4vY29udHJhY3RzL2VkZ2UnXG5pbXBvcnQgeyBFbnRyeXBvaW50IH0gZnJvbSAnLi9jb250cmFjdHMvZW50cnlwb2ludCdcbmltcG9ydCB7IEV4dHJhcywgT3JwaGFuZWRFbmhhbmNlckRlZmluaXRpb24gfSBmcm9tICcuL2NvbnRyYWN0cy9leHRyYXMnXG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi9jb250cmFjdHMvbm9kZSdcbmltcG9ydCB7IFNlcmlhbGl6ZWRHcmFwaE1ldGFkYXRhIH0gZnJvbSAnLi9jb250cmFjdHMvc2VyaWFsaXplZC1ncmFwaC1tZXRhZGF0YSdcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29uZmlnIH0gZnJvbSAnLi4vYXBwJ1xuaW1wb3J0IHsgSU5RVUlSRVIsIE1vZHVsZVJlZiwgTW9kdWxlc0NvbnRhaW5lciB9IGZyb20gJy4uL2NvcmUnXG5pbXBvcnQgeyBFeHRlcm5hbENvbnRleHRDcmVhdG9yLCBIdHRwQWRhcHRlckhvc3QgfSBmcm9tICcuLi9oZWxwZXJzJ1xuaW1wb3J0IHsgUmVmbGVjdG9yIH0gZnJvbSAnLi4vc2VydmljZXMnXG5pbXBvcnQgeyBSRVFVRVNUIH0gZnJvbSAnLi4vcm91dGVyJ1xuaW1wb3J0IHsgU2VyaWFsaXplZEdyYXBoSnNvbiB9IGZyb20gJy4vY29udHJhY3RzL3NlcmlhbGl6ZWQtZ3JhcGgtanNvbidcbmltcG9ydCB7IERldGVybWluaXN0aWNVdWlkUmVnaXN0cnkgfSBmcm9tICcuL2RldGVybWluaXN0aWMtdXVpZC1yZWdpc3RyeSdcblxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZEdyYXBoU3RhdHVzID0gJ3BhcnRpYWwnIHwgJ2NvbXBsZXRlJ1xudHlwZSBXaXRoT3B0aW9uYWxJZDxUIGV4dGVuZHMgUmVjb3JkPCdpZCcsIHN0cmluZz4+ID0gT21pdDxULCAnaWQnPiAmXG4gIFBhcnRpYWw8UGljazxULCAnaWQnPj5cblxuZXhwb3J0IGNsYXNzIFNlcmlhbGl6ZWRHcmFwaCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZXMgPSBuZXcgTWFwPHN0cmluZywgTm9kZT4oKVxuICBwcml2YXRlIHJlYWRvbmx5IGVkZ2VzID0gbmV3IE1hcDxzdHJpbmcsIEVkZ2U+KClcbiAgcHJpdmF0ZSByZWFkb25seSBlbnRyeXBvaW50cyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRyeXBvaW50PHVua25vd24+W10+KClcbiAgcHJpdmF0ZSByZWFkb25seSBleHRyYXM6IEV4dHJhcyA9IHtcbiAgICBvcnBoYW5lZEVuaGFuY2VyczogW10sXG4gICAgYXR0YWNoZWRFbmhhbmNlcnM6IFtdXG4gIH1cbiAgcHJpdmF0ZSBfc3RhdHVzOiBTZXJpYWxpemVkR3JhcGhTdGF0dXMgPSAnY29tcGxldGUnXG4gIHByaXZhdGUgX21ldGFkYXRhPzogU2VyaWFsaXplZEdyYXBoTWV0YWRhdGFcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJTlRFUk5BTF9QUk9WSURFUlM6IEFycmF5PEluamVjdGlvblRva2VuPiA9IFtcbiAgICBBcHBsaWNhdGlvbkNvbmZpZyxcbiAgICBNb2R1bGVSZWYsXG4gICAgSHR0cEFkYXB0ZXJIb3N0LFxuICAgIC8vIExhenlNb2R1bGVMb2FkZXIsXG4gICAgRXh0ZXJuYWxDb250ZXh0Q3JlYXRvcixcbiAgICBNb2R1bGVzQ29udGFpbmVyLFxuICAgIFJlZmxlY3RvcixcbiAgICBTZXJpYWxpemVkR3JhcGgsXG4gICAgLy8gSHR0cEFkYXB0ZXJIb3N0Lm5hbWUsXG4gICAgUmVmbGVjdG9yLm5hbWUsXG4gICAgUkVRVUVTVCxcbiAgICBJTlFVSVJFUlxuICBdXG5cbiAgc2V0IHN0YXR1cyAoc3RhdHVzOiBTZXJpYWxpemVkR3JhcGhTdGF0dXMpIHtcbiAgICB0aGlzLl9zdGF0dXMgPSBzdGF0dXNcbiAgfVxuXG4gIHNldCBtZXRhZGF0YSAobWV0YWRhdGE6IFNlcmlhbGl6ZWRHcmFwaE1ldGFkYXRhKSB7XG4gICAgdGhpcy5fbWV0YWRhdGEgPSBtZXRhZGF0YVxuICB9XG5cbiAgcHVibGljIGluc2VydE5vZGUgKG5vZGVEZWZpbml0aW9uOiBOb2RlKSB7XG4gICAgaWYgKFxuICAgICAgbm9kZURlZmluaXRpb24ubWV0YWRhdGEudHlwZSA9PT0gJ3Byb3ZpZGVyJyAmJlxuICAgICAgU2VyaWFsaXplZEdyYXBoLklOVEVSTkFMX1BST1ZJREVSUy5pbmNsdWRlcyhub2RlRGVmaW5pdGlvbi5tZXRhZGF0YS50b2tlbilcbiAgICApIHtcbiAgICAgIG5vZGVEZWZpbml0aW9uLm1ldGFkYXRhID0ge1xuICAgICAgICAuLi5ub2RlRGVmaW5pdGlvbi5tZXRhZGF0YSxcbiAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubm9kZXMuaGFzKG5vZGVEZWZpbml0aW9uLmlkKSkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMuZ2V0KG5vZGVEZWZpbml0aW9uLmlkKVxuICAgIH1cbiAgICB0aGlzLm5vZGVzLnNldChub2RlRGVmaW5pdGlvbi5pZCwgbm9kZURlZmluaXRpb24pXG4gICAgcmV0dXJuIG5vZGVEZWZpbml0aW9uXG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0RWRnZSAoZWRnZURlZmluaXRpb246IFdpdGhPcHRpb25hbElkPEVkZ2U+KSB7XG4gICAgaWYgKFxuICAgICAgZWRnZURlZmluaXRpb24ubWV0YWRhdGEudHlwZSA9PT0gJ2NsYXNzLXRvLWNsYXNzJyAmJlxuICAgICAgKFNlcmlhbGl6ZWRHcmFwaC5JTlRFUk5BTF9QUk9WSURFUlMuaW5jbHVkZXMoXG4gICAgICAgIGVkZ2VEZWZpbml0aW9uLm1ldGFkYXRhLnNvdXJjZUNsYXNzVG9rZW5cbiAgICAgICkgfHxcbiAgICAgICAgU2VyaWFsaXplZEdyYXBoLklOVEVSTkFMX1BST1ZJREVSUy5pbmNsdWRlcyhcbiAgICAgICAgICBlZGdlRGVmaW5pdGlvbi5tZXRhZGF0YS50YXJnZXRDbGFzc1Rva2VuXG4gICAgICAgICkpXG4gICAgKSB7XG4gICAgICBlZGdlRGVmaW5pdGlvbi5tZXRhZGF0YSA9IHtcbiAgICAgICAgLi4uZWRnZURlZmluaXRpb24ubWV0YWRhdGEsXG4gICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlkID1cbiAgICAgIGVkZ2VEZWZpbml0aW9uLmlkID8/IHRoaXMuZ2VuZXJhdGVVdWlkQnlFZGdlRGVmaW5pdGlvbihlZGdlRGVmaW5pdGlvbilcbiAgICBjb25zdCBlZGdlID0ge1xuICAgICAgLi4uZWRnZURlZmluaXRpb24sXG4gICAgICBpZFxuICAgIH1cbiAgICB0aGlzLmVkZ2VzLnNldChpZCwgZWRnZSlcbiAgICByZXR1cm4gZWRnZVxuICB9XG5cbiAgcHVibGljIGluc2VydEVudHJ5cG9pbnQ8VD4gKGRlZmluaXRpb246IEVudHJ5cG9pbnQ8VD4sIHBhcmVudElkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5lbnRyeXBvaW50cy5oYXMocGFyZW50SWQpKSB7XG4gICAgICBjb25zdCBleGlzdGluZ0NvbGxlY3Rpb24gPSB0aGlzLmVudHJ5cG9pbnRzLmdldChwYXJlbnRJZClcbiAgICAgIGV4aXN0aW5nQ29sbGVjdGlvbi5wdXNoKGRlZmluaXRpb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW50cnlwb2ludHMuc2V0KHBhcmVudElkLCBbZGVmaW5pdGlvbl0pXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluc2VydE9ycGhhbmVkRW5oYW5jZXIgKGVudHJ5OiBPcnBoYW5lZEVuaGFuY2VyRGVmaW5pdGlvbikge1xuICAgIHRoaXMuZXh0cmFzLm9ycGhhbmVkRW5oYW5jZXJzLnB1c2goZW50cnkpXG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0QXR0YWNoZWRFbmhhbmNlciAobm9kZUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4dHJhcy5hdHRhY2hlZEVuaGFuY2Vycy5wdXNoKHtcbiAgICAgIG5vZGVJZFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZUJ5SWQgKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5ub2Rlcy5nZXQoaWQpXG4gIH1cblxuICBwdWJsaWMgdG9KU09OICgpOiBTZXJpYWxpemVkR3JhcGhKc29uIHtcbiAgICBjb25zdCBqc29uOiBTZXJpYWxpemVkR3JhcGhKc29uID0ge1xuICAgICAgbm9kZXM6IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLm5vZGVzKSxcbiAgICAgIGVkZ2VzOiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5lZGdlcyksXG4gICAgICBlbnRyeXBvaW50czogT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuZW50cnlwb2ludHMpLFxuICAgICAgZXh0cmFzOiB0aGlzLmV4dHJhc1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0dXMpIHtcbiAgICAgIGpzb25bJ3N0YXR1cyddID0gdGhpcy5fc3RhdHVzXG4gICAgfVxuICAgIGlmICh0aGlzLl9tZXRhZGF0YSkge1xuICAgICAganNvblsnbWV0YWRhdGEnXSA9IHRoaXMuX21ldGFkYXRhXG4gICAgfVxuICAgIHJldHVybiBqc29uXG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcgKCkge1xuICAgIGNvbnN0IHJlcGxhY2VyID0gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZS5uYW1lID8/ICdGdW5jdGlvbicgOiB2YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pTT04oKSwgcmVwbGFjZXIsIDIpXG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlVXVpZEJ5RWRnZURlZmluaXRpb24gKFxuICAgIGVkZ2VEZWZpbml0aW9uOiBXaXRoT3B0aW9uYWxJZDxFZGdlPlxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBEZXRlcm1pbmlzdGljVXVpZFJlZ2lzdHJ5LmdldChKU09OLnN0cmluZ2lmeShlZGdlRGVmaW5pdGlvbikpXG4gIH1cbn1cbiJdfQ==