@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
82 lines • 9.5 kB
JavaScript
;
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==