UNPKG

@tsclean/core

Version:

Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.

114 lines 14.7 kB
"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplZC1ncmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnNwZWN0b3Ivc2VyaWFsaXplZC1ncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxnQ0FBMEM7QUFDMUMsa0NBQStEO0FBQy9ELHdDQUFvRTtBQUNwRSwwQ0FBdUM7QUFDdkMsc0NBQW1DO0FBRW5DLCtFQUF5RTtBQU16RSxNQUFhLGVBQWU7SUFBNUI7UUFDbUIsVUFBSyxHQUFHLElBQUksR0FBRyxFQUFnQixDQUFBO1FBQy9CLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQTtRQUMvQixnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFBO1FBQ3RELFdBQU0sR0FBVztZQUNoQyxpQkFBaUIsRUFBRSxFQUFFO1lBQ3JCLGlCQUFpQixFQUFFLEVBQUU7U0FDdEIsQ0FBQTtRQUNPLFlBQU8sR0FBMEIsVUFBVSxDQUFBO0lBMkhyRCxDQUFDO0lBekdDLElBQUksTUFBTSxDQUFFLE1BQTZCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBRSxRQUFpQztRQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQTtJQUMzQixDQUFDO0lBRU0sVUFBVSxDQUFFLGNBQW9CO1FBQ3JDLElBQ0UsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssVUFBVTtZQUMzQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQzFFLENBQUM7WUFDRCxjQUFjLENBQUMsUUFBUSxtQ0FDbEIsY0FBYyxDQUFDLFFBQVEsS0FDMUIsUUFBUSxFQUFFLElBQUksR0FDZixDQUFBO1FBQ0gsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDMUMsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDakQsT0FBTyxjQUFjLENBQUE7SUFDdkIsQ0FBQztJQUVNLFVBQVUsQ0FBRSxjQUFvQzs7UUFDckQsSUFDRSxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxnQkFBZ0I7WUFDakQsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUMxQyxjQUFjLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUN6QztnQkFDQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUN6QyxjQUFjLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUN6QyxDQUFDLEVBQ0osQ0FBQztZQUNELGNBQWMsQ0FBQyxRQUFRLG1DQUNsQixjQUFjLENBQUMsUUFBUSxLQUMxQixRQUFRLEVBQUUsSUFBSSxHQUNmLENBQUE7UUFDSCxDQUFDO1FBQ0QsTUFBTSxFQUFFLEdBQ04sTUFBQSxjQUFjLENBQUMsRUFBRSxtQ0FBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDeEUsTUFBTSxJQUFJLG1DQUNMLGNBQWMsS0FDakIsRUFBRSxHQUNILENBQUE7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDeEIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRU0sZ0JBQWdCLENBQUssVUFBeUIsRUFBRSxRQUFnQjtRQUNyRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDbkMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUN6RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDckMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBRU0sc0JBQXNCLENBQUUsS0FBaUM7UUFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVNLHNCQUFzQixDQUFFLE1BQWM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFDakMsTUFBTTtTQUNQLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTSxXQUFXLENBQUUsRUFBVTtRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFFTSxNQUFNO1FBQ1gsTUFBTSxJQUFJLEdBQXdCO1lBQ2hDLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDckMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNyQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2pELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFBO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUE7UUFDL0IsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFBO1FBQ25DLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFTSxRQUFRO1FBQ2IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBYyxFQUFFLEVBQUU7O1lBQy9DLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBO1lBQ3pCLENBQUM7WUFDRCxPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBQSxLQUFLLENBQUMsSUFBSSxtQ0FBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtRQUN2RSxDQUFDLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLGNBQW9DO1FBRXBDLE9BQU8sdURBQXlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQTtJQUN0RSxDQUFDOztBQWxJSCwwQ0FtSUM7QUF4SHlCLGtDQUFrQixHQUEwQjtJQUNsRSx1QkFBaUI7SUFDakIsZ0JBQVM7SUFDVCx5QkFBZTtJQUNmLG9CQUFvQjtJQUNwQixnQ0FBc0I7SUFDdEIsdUJBQWdCO0lBQ2hCLG9CQUFTO0lBQ1QsZUFBZTtJQUNmLHdCQUF3QjtJQUN4QixvQkFBUyxDQUFDLElBQUk7SUFDZCxnQkFBTztJQUNQLGVBQVE7Q0FDVCxBQWJ5QyxDQWF6QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vY29udHJhY3RzJ1xuaW1wb3J0IHsgRWRnZSB9IGZyb20gJy4vY29udHJhY3RzL2VkZ2UnXG5pbXBvcnQgeyBFbnRyeXBvaW50IH0gZnJvbSAnLi9jb250cmFjdHMvZW50cnlwb2ludCdcbmltcG9ydCB7IEV4dHJhcywgT3JwaGFuZWRFbmhhbmNlckRlZmluaXRpb24gfSBmcm9tICcuL2NvbnRyYWN0cy9leHRyYXMnXG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi9jb250cmFjdHMvbm9kZSdcbmltcG9ydCB7IFNlcmlhbGl6ZWRHcmFwaE1ldGFkYXRhIH0gZnJvbSAnLi9jb250cmFjdHMvc2VyaWFsaXplZC1ncmFwaC1tZXRhZGF0YSdcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29uZmlnIH0gZnJvbSAnLi4vYXBwJ1xuaW1wb3J0IHsgSU5RVUlSRVIsIE1vZHVsZVJlZiwgTW9kdWxlc0NvbnRhaW5lciB9IGZyb20gJy4uL2NvcmUnXG5pbXBvcnQgeyBFeHRlcm5hbENvbnRleHRDcmVhdG9yLCBIdHRwQWRhcHRlckhvc3QgfSBmcm9tICcuLi9oZWxwZXJzJ1xuaW1wb3J0IHsgUmVmbGVjdG9yIH0gZnJvbSAnLi4vc2VydmljZXMnXG5pbXBvcnQgeyBSRVFVRVNUIH0gZnJvbSAnLi4vcm91dGVyJ1xuaW1wb3J0IHsgU2VyaWFsaXplZEdyYXBoSnNvbiB9IGZyb20gJy4vY29udHJhY3RzL3NlcmlhbGl6ZWQtZ3JhcGgtanNvbidcbmltcG9ydCB7IERldGVybWluaXN0aWNVdWlkUmVnaXN0cnkgfSBmcm9tICcuL2RldGVybWluaXN0aWMtdXVpZC1yZWdpc3RyeSdcblxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZEdyYXBoU3RhdHVzID0gJ3BhcnRpYWwnIHwgJ2NvbXBsZXRlJ1xudHlwZSBXaXRoT3B0aW9uYWxJZDxUIGV4dGVuZHMgUmVjb3JkPCdpZCcsIHN0cmluZz4+ID0gT21pdDxULCAnaWQnPiAmXG4gIFBhcnRpYWw8UGljazxULCAnaWQnPj5cblxuZXhwb3J0IGNsYXNzIFNlcmlhbGl6ZWRHcmFwaCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZXMgPSBuZXcgTWFwPHN0cmluZywgTm9kZT4oKVxuICBwcml2YXRlIHJlYWRvbmx5IGVkZ2VzID0gbmV3IE1hcDxzdHJpbmcsIEVkZ2U+KClcbiAgcHJpdmF0ZSByZWFkb25seSBlbnRyeXBvaW50cyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRyeXBvaW50PHVua25vd24+W10+KClcbiAgcHJpdmF0ZSByZWFkb25seSBleHRyYXM6IEV4dHJhcyA9IHtcbiAgICBvcnBoYW5lZEVuaGFuY2VyczogW10sXG4gICAgYXR0YWNoZWRFbmhhbmNlcnM6IFtdXG4gIH1cbiAgcHJpdmF0ZSBfc3RhdHVzOiBTZXJpYWxpemVkR3JhcGhTdGF0dXMgPSAnY29tcGxldGUnXG4gIHByaXZhdGUgX21ldGFkYXRhPzogU2VyaWFsaXplZEdyYXBoTWV0YWRhdGFcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJTlRFUk5BTF9QUk9WSURFUlM6IEFycmF5PEluamVjdGlvblRva2VuPiA9IFtcbiAgICBBcHBsaWNhdGlvbkNvbmZpZyxcbiAgICBNb2R1bGVSZWYsXG4gICAgSHR0cEFkYXB0ZXJIb3N0LFxuICAgIC8vIExhenlNb2R1bGVMb2FkZXIsXG4gICAgRXh0ZXJuYWxDb250ZXh0Q3JlYXRvcixcbiAgICBNb2R1bGVzQ29udGFpbmVyLFxuICAgIFJlZmxlY3RvcixcbiAgICBTZXJpYWxpemVkR3JhcGgsXG4gICAgLy8gSHR0cEFkYXB0ZXJIb3N0Lm5hbWUsXG4gICAgUmVmbGVjdG9yLm5hbWUsXG4gICAgUkVRVUVTVCxcbiAgICBJTlFVSVJFUlxuICBdXG5cbiAgc2V0IHN0YXR1cyAoc3RhdHVzOiBTZXJpYWxpemVkR3JhcGhTdGF0dXMpIHtcbiAgICB0aGlzLl9zdGF0dXMgPSBzdGF0dXNcbiAgfVxuXG4gIHNldCBtZXRhZGF0YSAobWV0YWRhdGE6IFNlcmlhbGl6ZWRHcmFwaE1ldGFkYXRhKSB7XG4gICAgdGhpcy5fbWV0YWRhdGEgPSBtZXRhZGF0YVxuICB9XG5cbiAgcHVibGljIGluc2VydE5vZGUgKG5vZGVEZWZpbml0aW9uOiBOb2RlKSB7XG4gICAgaWYgKFxuICAgICAgbm9kZURlZmluaXRpb24ubWV0YWRhdGEudHlwZSA9PT0gJ3Byb3ZpZGVyJyAmJlxuICAgICAgU2VyaWFsaXplZEdyYXBoLklOVEVSTkFMX1BST1ZJREVSUy5pbmNsdWRlcyhub2RlRGVmaW5pdGlvbi5tZXRhZGF0YS50b2tlbilcbiAgICApIHtcbiAgICAgIG5vZGVEZWZpbml0aW9uLm1ldGFkYXRhID0ge1xuICAgICAgICAuLi5ub2RlRGVmaW5pdGlvbi5tZXRhZGF0YSxcbiAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubm9kZXMuaGFzKG5vZGVEZWZpbml0aW9uLmlkKSkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMuZ2V0KG5vZGVEZWZpbml0aW9uLmlkKVxuICAgIH1cbiAgICB0aGlzLm5vZGVzLnNldChub2RlRGVmaW5pdGlvbi5pZCwgbm9kZURlZmluaXRpb24pXG4gICAgcmV0dXJuIG5vZGVEZWZpbml0aW9uXG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0RWRnZSAoZWRnZURlZmluaXRpb246IFdpdGhPcHRpb25hbElkPEVkZ2U+KSB7XG4gICAgaWYgKFxuICAgICAgZWRnZURlZmluaXRpb24ubWV0YWRhdGEudHlwZSA9PT0gJ2NsYXNzLXRvLWNsYXNzJyAmJlxuICAgICAgKFNlcmlhbGl6ZWRHcmFwaC5JTlRFUk5BTF9QUk9WSURFUlMuaW5jbHVkZXMoXG4gICAgICAgIGVkZ2VEZWZpbml0aW9uLm1ldGFkYXRhLnNvdXJjZUNsYXNzVG9rZW5cbiAgICAgICkgfHxcbiAgICAgICAgU2VyaWFsaXplZEdyYXBoLklOVEVSTkFMX1BST1ZJREVSUy5pbmNsdWRlcyhcbiAgICAgICAgICBlZGdlRGVmaW5pdGlvbi5tZXRhZGF0YS50YXJnZXRDbGFzc1Rva2VuXG4gICAgICAgICkpXG4gICAgKSB7XG4gICAgICBlZGdlRGVmaW5pdGlvbi5tZXRhZGF0YSA9IHtcbiAgICAgICAgLi4uZWRnZURlZmluaXRpb24ubWV0YWRhdGEsXG4gICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlkID1cbiAgICAgIGVkZ2VEZWZpbml0aW9uLmlkID8/IHRoaXMuZ2VuZXJhdGVVdWlkQnlFZGdlRGVmaW5pdGlvbihlZGdlRGVmaW5pdGlvbilcbiAgICBjb25zdCBlZGdlID0ge1xuICAgICAgLi4uZWRnZURlZmluaXRpb24sXG4gICAgICBpZFxuICAgIH1cbiAgICB0aGlzLmVkZ2VzLnNldChpZCwgZWRnZSlcbiAgICByZXR1cm4gZWRnZVxuICB9XG5cbiAgcHVibGljIGluc2VydEVudHJ5cG9pbnQ8VD4gKGRlZmluaXRpb246IEVudHJ5cG9pbnQ8VD4sIHBhcmVudElkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5lbnRyeXBvaW50cy5oYXMocGFyZW50SWQpKSB7XG4gICAgICBjb25zdCBleGlzdGluZ0NvbGxlY3Rpb24gPSB0aGlzLmVudHJ5cG9pbnRzLmdldChwYXJlbnRJZClcbiAgICAgIGV4aXN0aW5nQ29sbGVjdGlvbi5wdXNoKGRlZmluaXRpb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW50cnlwb2ludHMuc2V0KHBhcmVudElkLCBbZGVmaW5pdGlvbl0pXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluc2VydE9ycGhhbmVkRW5oYW5jZXIgKGVudHJ5OiBPcnBoYW5lZEVuaGFuY2VyRGVmaW5pdGlvbikge1xuICAgIHRoaXMuZXh0cmFzLm9ycGhhbmVkRW5oYW5jZXJzLnB1c2goZW50cnkpXG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0QXR0YWNoZWRFbmhhbmNlciAobm9kZUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4dHJhcy5hdHRhY2hlZEVuaGFuY2Vycy5wdXNoKHtcbiAgICAgIG5vZGVJZFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZUJ5SWQgKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5ub2Rlcy5nZXQoaWQpXG4gIH1cblxuICBwdWJsaWMgdG9KU09OICgpOiBTZXJpYWxpemVkR3JhcGhKc29uIHtcbiAgICBjb25zdCBqc29uOiBTZXJpYWxpemVkR3JhcGhKc29uID0ge1xuICAgICAgbm9kZXM6IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLm5vZGVzKSxcbiAgICAgIGVkZ2VzOiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5lZGdlcyksXG4gICAgICBlbnRyeXBvaW50czogT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuZW50cnlwb2ludHMpLFxuICAgICAgZXh0cmFzOiB0aGlzLmV4dHJhc1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0dXMpIHtcbiAgICAgIGpzb25bJ3N0YXR1cyddID0gdGhpcy5fc3RhdHVzXG4gICAgfVxuICAgIGlmICh0aGlzLl9tZXRhZGF0YSkge1xuICAgICAganNvblsnbWV0YWRhdGEnXSA9IHRoaXMuX21ldGFkYXRhXG4gICAgfVxuICAgIHJldHVybiBqc29uXG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcgKCkge1xuICAgIGNvbnN0IHJlcGxhY2VyID0gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZS5uYW1lID8/ICdGdW5jdGlvbicgOiB2YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pTT04oKSwgcmVwbGFjZXIsIDIpXG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlVXVpZEJ5RWRnZURlZmluaXRpb24gKFxuICAgIGVkZ2VEZWZpbml0aW9uOiBXaXRoT3B0aW9uYWxJZDxFZGdlPlxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBEZXRlcm1pbmlzdGljVXVpZFJlZ2lzdHJ5LmdldChKU09OLnN0cmluZ2lmeShlZGdlRGVmaW5pdGlvbikpXG4gIH1cbn1cbiJdfQ==