feat: add logged decorators for class
This commit is contained in:
parent
2432e1b393
commit
12a899835f
@ -1,4 +1,10 @@
|
|||||||
import { Logger } from "@nestjs/common";
|
import {
|
||||||
|
Logger,
|
||||||
|
Injectable,
|
||||||
|
Controller,
|
||||||
|
ControllerOptions,
|
||||||
|
ScopeOptions,
|
||||||
|
} from "@nestjs/common";
|
||||||
import { ScopedLogger } from "./logger";
|
import { ScopedLogger } from "./logger";
|
||||||
import { LoggedParamReflectData } from "./reflected";
|
import { LoggedParamReflectData } from "./reflected";
|
||||||
import { loggedParam, scopedLogger } from "./reflected";
|
import { loggedParam, scopedLogger } from "./reflected";
|
||||||
@ -17,6 +23,62 @@ function loggerInit(_target: any) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function LoggedInjectable(options?: ScopeOptions) {
|
||||||
|
return (target: any) => {
|
||||||
|
target = Injectable(options)(target);
|
||||||
|
|
||||||
|
loggerInit(target.prototype);
|
||||||
|
|
||||||
|
const logger = target.prototype.logger;
|
||||||
|
|
||||||
|
const methods = Object.getOwnPropertyNames(target.prototype);
|
||||||
|
|
||||||
|
methods.forEach((method) => {
|
||||||
|
if (
|
||||||
|
method !== "constructor" &&
|
||||||
|
typeof target.prototype[method] === "function"
|
||||||
|
) {
|
||||||
|
logger.log(`LoggedFunction applied to ${method}`);
|
||||||
|
LoggedFunction(target.prototype, method, {
|
||||||
|
value: target.prototype[method],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function LoggedController(): (target: any) => void;
|
||||||
|
export function LoggedController(
|
||||||
|
prefix: string | string[]
|
||||||
|
): (target: any) => void;
|
||||||
|
export function LoggedController(
|
||||||
|
options: ControllerOptions
|
||||||
|
): (target: any) => void;
|
||||||
|
|
||||||
|
export function LoggedController(param?: any): (target: any) => void {
|
||||||
|
return (target: any) => {
|
||||||
|
target = Controller(param)(target);
|
||||||
|
|
||||||
|
loggerInit(target.prototype);
|
||||||
|
|
||||||
|
const logger = target.prototype.logger;
|
||||||
|
|
||||||
|
const methods = Object.getOwnPropertyNames(target.prototype);
|
||||||
|
|
||||||
|
methods.forEach((method) => {
|
||||||
|
if (
|
||||||
|
method !== "constructor" &&
|
||||||
|
typeof target.prototype[method] === "function"
|
||||||
|
) {
|
||||||
|
logger.log(`LoggedRoute applied to ${method}`);
|
||||||
|
LoggedRoute()(target.prototype, method, {
|
||||||
|
value: target.prototype[method],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function LoggedFunction<F extends Array<any>, R>(
|
export function LoggedFunction<F extends Array<any>, R>(
|
||||||
_target: any,
|
_target: any,
|
||||||
key: string,
|
key: string,
|
||||||
@ -24,13 +86,18 @@ export function LoggedFunction<F extends Array<any>, R>(
|
|||||||
) {
|
) {
|
||||||
loggerInit(_target);
|
loggerInit(_target);
|
||||||
|
|
||||||
const logger = _target.logger;
|
const logger: Logger = _target.logger;
|
||||||
|
|
||||||
const fn = descriptor.value;
|
const fn = descriptor.value;
|
||||||
|
|
||||||
if (!fn) return;
|
if (!fn || typeof fn !== "function") {
|
||||||
|
logger.warn(
|
||||||
|
`LoggedFunction decorator applied to non-function property: ${key}`
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
descriptor.value = async function (...args: F) {
|
_target[key] = async function (...args: F) {
|
||||||
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
||||||
scopedLogger,
|
scopedLogger,
|
||||||
_target,
|
_target,
|
||||||
@ -93,7 +160,7 @@ export function LoggedFunction<F extends Array<any>, R>(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function LoggedRoute<F extends Array<any>, R>(route: string) {
|
export function LoggedRoute<F extends Array<any>, R>(route?: string) {
|
||||||
return (
|
return (
|
||||||
_target: any,
|
_target: any,
|
||||||
key: string,
|
key: string,
|
||||||
@ -103,7 +170,7 @@ export function LoggedRoute<F extends Array<any>, R>(route: string) {
|
|||||||
|
|
||||||
const logger = _target.logger;
|
const logger = _target.logger;
|
||||||
|
|
||||||
const fullRoute = `${_target.constructor.name}/${route}`;
|
let fullRoute = `${_target.constructor.name}/`;
|
||||||
const fn = descriptor.value;
|
const fn = descriptor.value;
|
||||||
|
|
||||||
if (!fn) return;
|
if (!fn) return;
|
||||||
@ -115,6 +182,8 @@ export function LoggedRoute<F extends Array<any>, R>(route: string) {
|
|||||||
key
|
key
|
||||||
);
|
);
|
||||||
|
|
||||||
|
fullRoute += route || Reflect.getMetadata("path", fn);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
typeof scopedLoggerInjectableParam !== "undefined" &&
|
typeof scopedLoggerInjectableParam !== "undefined" &&
|
||||||
(args.length <= scopedLoggerInjectableParam ||
|
(args.length <= scopedLoggerInjectableParam ||
|
||||||
|
Loading…
x
Reference in New Issue
Block a user