UNPKG

@tsclean/core

Version:

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

82 lines 9.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MetadataScanner = void 0; const utils_1 = require("../utils"); class MetadataScanner { constructor() { this.cachedScannedPrototypes = new Map(); } /** * @deprecated * @see {@link getAllMethodNames} * @see getAllMethodNames */ scanFromPrototype(instance, prototype, callback) { if (!prototype) { return []; } const visitedNames = new Map(); const result = []; do { for (const property of Object.getOwnPropertyNames(prototype)) { if (visitedNames.has(property)) { continue; } visitedNames.set(property, true); const descriptor = Object.getOwnPropertyDescriptor(prototype, property); if (descriptor.set || descriptor.get || (0, utils_1.isConstructor)(property) || !(0, utils_1.isFunction)(prototype[property])) { continue; } const value = callback(property); if ((0, utils_1.isNil)(value)) { continue; } result.push(value); } } while ((prototype = Reflect.getPrototypeOf(prototype)) && prototype !== Object.prototype); return result; } /** * @deprecated * @see {@link getAllMethodNames} * @see getAllMethodNames */ *getAllFilteredMethodNames(prototype) { yield* this.getAllMethodNames(prototype); } getAllMethodNames(prototype) { if (!prototype) { return []; } if (this.cachedScannedPrototypes.has(prototype)) { return this.cachedScannedPrototypes.get(prototype); } const visitedNames = new Map(); const result = []; this.cachedScannedPrototypes.set(prototype, result); do { for (const property of Object.getOwnPropertyNames(prototype)) { if (visitedNames.has(property)) { continue; } visitedNames.set(property, true); const descriptor = Object.getOwnPropertyDescriptor(prototype, property); if (descriptor.set || descriptor.get || (0, utils_1.isConstructor)(property) || !(0, utils_1.isFunction)(prototype[property])) { continue; } result.push(property); } } while ((prototype = Reflect.getPrototypeOf(prototype)) && prototype !== Object.prototype); return result; } } exports.MetadataScanner = MetadataScanner; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtc2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHAvbWV0YWRhdGEtc2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvQ0FBMkQ7QUFHM0QsTUFBYSxlQUFlO0lBQTVCO1FBQ21CLDRCQUF1QixHQUEwQixJQUFJLEdBQUcsRUFBRSxDQUFBO0lBMkc3RSxDQUFDO0lBekdDOzs7O09BSUc7SUFDSSxpQkFBaUIsQ0FDdEIsUUFBVyxFQUNYLFNBQWlCLEVBQ2pCLFFBQTZCO1FBRTdCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFBO1FBQ1gsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFBO1FBQy9DLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQTtRQUV0QixHQUFHLENBQUM7WUFDRixLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsU0FBUTtnQkFDVixDQUFDO2dCQUVELFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUVoQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dCQUV2RSxJQUNFLFVBQVUsQ0FBQyxHQUFHO29CQUNkLFVBQVUsQ0FBQyxHQUFHO29CQUNkLElBQUEscUJBQWEsRUFBQyxRQUFRLENBQUM7b0JBQ3ZCLENBQUMsSUFBQSxrQkFBVSxFQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNoQyxDQUFDO29CQUNELFNBQVE7Z0JBQ1YsQ0FBQztnQkFFRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBRWhDLElBQUksSUFBQSxhQUFLLEVBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDakIsU0FBUTtnQkFDVixDQUFDO2dCQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDcEIsQ0FBQztRQUNILENBQUMsUUFDQyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUMvQjtRQUVELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxDQUFDLHlCQUF5QixDQUMvQixTQUFpQjtRQUVqQixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUVNLGlCQUFpQixDQUFFLFNBQXdCO1FBQ2hELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFBO1FBQ1gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNwRCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUE7UUFDL0MsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFBO1FBRTNCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRW5ELEdBQUcsQ0FBQztZQUNGLEtBQUssTUFBTSxRQUFRLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUMvQixTQUFRO2dCQUNWLENBQUM7Z0JBRUQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBRWhDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7Z0JBRXZFLElBQ0UsVUFBVSxDQUFDLEdBQUc7b0JBQ2QsVUFBVSxDQUFDLEdBQUc7b0JBQ2QsSUFBQSxxQkFBYSxFQUFDLFFBQVEsQ0FBQztvQkFDdkIsQ0FBQyxJQUFBLGtCQUFVLEVBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2hDLENBQUM7b0JBQ0QsU0FBUTtnQkFDVixDQUFDO2dCQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDdkIsQ0FBQztRQUNILENBQUMsUUFDQyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUMvQjtRQUVELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztDQUNGO0FBNUdELDBDQTRHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQ29uc3RydWN0b3IsIGlzRnVuY3Rpb24sIGlzTmlsIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgeyBJbmplY3RhYmxlVHlwZSB9IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgY2xhc3MgTWV0YWRhdGFTY2FubmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZWRTY2FubmVkUHJvdG90eXBlczogTWFwPG9iamVjdCwgc3RyaW5nW10+ID0gbmV3IE1hcCgpXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIEBzZWUge0BsaW5rIGdldEFsbE1ldGhvZE5hbWVzfVxuICAgKiBAc2VlIGdldEFsbE1ldGhvZE5hbWVzXG4gICAqL1xuICBwdWJsaWMgc2NhbkZyb21Qcm90b3R5cGU8VCBleHRlbmRzIEluamVjdGFibGVUeXBlLCBSID0gYW55PiAoXG4gICAgaW5zdGFuY2U6IFQsXG4gICAgcHJvdG90eXBlOiBvYmplY3QsXG4gICAgY2FsbGJhY2s6IChuYW1lOiBzdHJpbmcpID0+IFJcbiAgKTogUltdIHtcbiAgICBpZiAoIXByb3RvdHlwZSkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgY29uc3QgdmlzaXRlZE5hbWVzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KClcbiAgICBjb25zdCByZXN1bHQ6IFJbXSA9IFtdXG5cbiAgICBkbyB7XG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSkpIHtcbiAgICAgICAgaWYgKHZpc2l0ZWROYW1lcy5oYXMocHJvcGVydHkpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIHZpc2l0ZWROYW1lcy5zZXQocHJvcGVydHksIHRydWUpXG5cbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG90eXBlLCBwcm9wZXJ0eSlcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVzY3JpcHRvci5zZXQgfHxcbiAgICAgICAgICBkZXNjcmlwdG9yLmdldCB8fFxuICAgICAgICAgIGlzQ29uc3RydWN0b3IocHJvcGVydHkpIHx8XG4gICAgICAgICAgIWlzRnVuY3Rpb24ocHJvdG90eXBlW3Byb3BlcnR5XSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2FsbGJhY2socHJvcGVydHkpXG5cbiAgICAgICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9IHdoaWxlIChcbiAgICAgIChwcm90b3R5cGUgPSBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkpICYmXG4gICAgICBwcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGVcbiAgICApXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQHNlZSB7QGxpbmsgZ2V0QWxsTWV0aG9kTmFtZXN9XG4gICAqIEBzZWUgZ2V0QWxsTWV0aG9kTmFtZXNcbiAgICovXG4gIHB1YmxpYyAqZ2V0QWxsRmlsdGVyZWRNZXRob2ROYW1lcyAoXG4gICAgcHJvdG90eXBlOiBvYmplY3RcbiAgKTogSXRlcmFibGVJdGVyYXRvcjxzdHJpbmc+IHtcbiAgICB5aWVsZCogdGhpcy5nZXRBbGxNZXRob2ROYW1lcyhwcm90b3R5cGUpXG4gIH1cblxuICBwdWJsaWMgZ2V0QWxsTWV0aG9kTmFtZXMgKHByb3RvdHlwZTogb2JqZWN0IHwgbnVsbCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXByb3RvdHlwZSkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FjaGVkU2Nhbm5lZFByb3RvdHlwZXMuaGFzKHByb3RvdHlwZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlZFNjYW5uZWRQcm90b3R5cGVzLmdldChwcm90b3R5cGUpXG4gICAgfVxuXG4gICAgY29uc3QgdmlzaXRlZE5hbWVzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KClcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW11cblxuICAgIHRoaXMuY2FjaGVkU2Nhbm5lZFByb3RvdHlwZXMuc2V0KHByb3RvdHlwZSwgcmVzdWx0KVxuXG4gICAgZG8ge1xuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUpKSB7XG4gICAgICAgIGlmICh2aXNpdGVkTmFtZXMuaGFzKHByb3BlcnR5KSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICB2aXNpdGVkTmFtZXMuc2V0KHByb3BlcnR5LCB0cnVlKVxuXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvdHlwZSwgcHJvcGVydHkpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0IHx8XG4gICAgICAgICAgZGVzY3JpcHRvci5nZXQgfHxcbiAgICAgICAgICBpc0NvbnN0cnVjdG9yKHByb3BlcnR5KSB8fFxuICAgICAgICAgICFpc0Z1bmN0aW9uKHByb3RvdHlwZVtwcm9wZXJ0eV0pXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQucHVzaChwcm9wZXJ0eSlcbiAgICAgIH1cbiAgICB9IHdoaWxlIChcbiAgICAgIChwcm90b3R5cGUgPSBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkpICYmXG4gICAgICBwcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGVcbiAgICApXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cbiJdfQ==