@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
44 lines • 6.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PathsExplorer = void 0;
const shared_utils_1 = require("../utils/shared.utils");
const helpers_1 = require("../helpers");
class PathsExplorer {
constructor(metadataScanner) {
this.metadataScanner = metadataScanner;
}
scanForPaths(instance, prototype) {
const instancePrototype = (0, shared_utils_1.isUndefined)(prototype)
? Object.getPrototypeOf(instance)
: prototype;
return this.metadataScanner
.getAllMethodNames(instancePrototype)
.reduce((acc, method) => {
const route = this.exploreMethodMetadata(instance, instancePrototype, method);
if (route) {
acc.push(route);
}
return acc;
}, []);
}
exploreMethodMetadata(instance, prototype, methodName) {
const instanceCallback = instance[methodName];
const prototypeCallback = prototype[methodName];
const routePath = Reflect.getMetadata(helpers_1.PATH_METADATA, prototypeCallback);
if ((0, shared_utils_1.isUndefined)(routePath)) {
return null;
}
const requestMethod = Reflect.getMetadata(helpers_1.METHOD_METADATA, prototypeCallback);
const path = (0, shared_utils_1.isString)(routePath)
? [(0, shared_utils_1.addLeadingSlash)(routePath)]
: routePath.map((p) => (0, shared_utils_1.addLeadingSlash)(p));
return {
path,
requestMethod,
targetCallback: instanceCallback,
methodName
};
}
}
exports.PathsExplorer = PathsExplorer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMtZXhwbG9yZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVyL3BhdGhzLWV4cGxvcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHdEQUE4RTtBQUM5RSx3Q0FBMkQ7QUFTM0QsTUFBYSxhQUFhO0lBQ3hCLFlBQThCLGVBQWdDO1FBQWhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUFHLENBQUM7SUFFM0QsWUFBWSxDQUNqQixRQUF3QixFQUN4QixTQUFrQjtRQUVsQixNQUFNLGlCQUFpQixHQUFHLElBQUEsMEJBQVcsRUFBQyxTQUFTLENBQUM7WUFDOUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFYixPQUFPLElBQUksQ0FBQyxlQUFlO2FBQ3hCLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO2FBQ3BDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ3RDLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsTUFBTSxDQUNQLENBQUE7WUFFRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDakIsQ0FBQztZQUVELE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ1YsQ0FBQztJQUVNLHFCQUFxQixDQUMxQixRQUF3QixFQUN4QixTQUFpQixFQUNqQixVQUFrQjtRQUVsQixNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM3QyxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMvQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLHVCQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtRQUN2RSxJQUFJLElBQUEsMEJBQVcsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFrQixPQUFPLENBQUMsV0FBVyxDQUN0RCx5QkFBZSxFQUNmLGlCQUFpQixDQUNsQixDQUFBO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBUSxFQUFDLFNBQVMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQyxJQUFBLDhCQUFlLEVBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLElBQUEsOEJBQWUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXBELE9BQU87WUFDTCxJQUFJO1lBQ0osYUFBYTtZQUNiLGNBQWMsRUFBRSxnQkFBZ0I7WUFDaEMsVUFBVTtTQUNYLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUF2REQsc0NBdURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbGxlclR5cGUgfSBmcm9tICd0eXBlcydcbmltcG9ydCB7IE1ldGFkYXRhU2Nhbm5lciB9IGZyb20gJy4uL2FwcCdcbmltcG9ydCB7IFJlcXVlc3RNZXRob2QgfSBmcm9tICcuLi9lbnVtcydcbmltcG9ydCB7IFJvdXRlclByb3h5Q2FsbGJhY2sgfSBmcm9tICcuL3JvdXRlci1wcm94eSdcbmltcG9ydCB7IGFkZExlYWRpbmdTbGFzaCwgaXNTdHJpbmcsIGlzVW5kZWZpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2hhcmVkLnV0aWxzJ1xuaW1wb3J0IHsgTUVUSE9EX01FVEFEQVRBLCBQQVRIX01FVEFEQVRBIH0gZnJvbSAnLi4vaGVscGVycydcblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZURlZmluaXRpb24ge1xuICBwYXRoOiBzdHJpbmdbXVxuICByZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kXG4gIHRhcmdldENhbGxiYWNrOiBSb3V0ZXJQcm94eUNhbGxiYWNrXG4gIG1ldGhvZE5hbWU6IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgUGF0aHNFeHBsb3JlciB7XG4gIGNvbnN0cnVjdG9yIChwcml2YXRlIHJlYWRvbmx5IG1ldGFkYXRhU2Nhbm5lcjogTWV0YWRhdGFTY2FubmVyKSB7fVxuXG4gIHB1YmxpYyBzY2FuRm9yUGF0aHMgKFxuICAgIGluc3RhbmNlOiBDb250cm9sbGVyVHlwZSxcbiAgICBwcm90b3R5cGU/OiBvYmplY3RcbiAgKTogUm91dGVEZWZpbml0aW9uW10ge1xuICAgIGNvbnN0IGluc3RhbmNlUHJvdG90eXBlID0gaXNVbmRlZmluZWQocHJvdG90eXBlKVxuICAgICAgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5zdGFuY2UpXG4gICAgICA6IHByb3RvdHlwZVxuXG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGFTY2FubmVyXG4gICAgICAuZ2V0QWxsTWV0aG9kTmFtZXMoaW5zdGFuY2VQcm90b3R5cGUpXG4gICAgICAucmVkdWNlKChhY2MsIG1ldGhvZCkgPT4ge1xuICAgICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZXhwbG9yZU1ldGhvZE1ldGFkYXRhKFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIGluc3RhbmNlUHJvdG90eXBlLFxuICAgICAgICAgIG1ldGhvZFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKHJvdXRlKSB7XG4gICAgICAgICAgYWNjLnB1c2gocm91dGUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LCBbXSlcbiAgfVxuXG4gIHB1YmxpYyBleHBsb3JlTWV0aG9kTWV0YWRhdGEgKFxuICAgIGluc3RhbmNlOiBDb250cm9sbGVyVHlwZSxcbiAgICBwcm90b3R5cGU6IG9iamVjdCxcbiAgICBtZXRob2ROYW1lOiBzdHJpbmdcbiAgKTogUm91dGVEZWZpbml0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgaW5zdGFuY2VDYWxsYmFjayA9IGluc3RhbmNlW21ldGhvZE5hbWVdXG4gICAgY29uc3QgcHJvdG90eXBlQ2FsbGJhY2sgPSBwcm90b3R5cGVbbWV0aG9kTmFtZV1cbiAgICBjb25zdCByb3V0ZVBhdGggPSBSZWZsZWN0LmdldE1ldGFkYXRhKFBBVEhfTUVUQURBVEEsIHByb3RvdHlwZUNhbGxiYWNrKVxuICAgIGlmIChpc1VuZGVmaW5lZChyb3V0ZVBhdGgpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIE1FVEhPRF9NRVRBREFUQSxcbiAgICAgIHByb3RvdHlwZUNhbGxiYWNrXG4gICAgKVxuXG4gICAgY29uc3QgcGF0aCA9IGlzU3RyaW5nKHJvdXRlUGF0aClcbiAgICAgID8gW2FkZExlYWRpbmdTbGFzaChyb3V0ZVBhdGgpXVxuICAgICAgOiByb3V0ZVBhdGgubWFwKChwOiBzdHJpbmcpID0+IGFkZExlYWRpbmdTbGFzaChwKSlcblxuICAgIHJldHVybiB7XG4gICAgICBwYXRoLFxuICAgICAgcmVxdWVzdE1ldGhvZCxcbiAgICAgIHRhcmdldENhbGxiYWNrOiBpbnN0YW5jZUNhbGxiYWNrLFxuICAgICAgbWV0aG9kTmFtZVxuICAgIH1cbiAgfVxufVxuIl19