style: add prettier
This commit is contained in:
parent
b28bb9e193
commit
3ac9b1d38d
11
.prettierrc
Normal file
11
.prettierrc
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"tabWidth": 2,
|
||||||
|
"useTabs": false,
|
||||||
|
"semi": true,
|
||||||
|
"singleQuote": true,
|
||||||
|
"quoteProps": "as-needed",
|
||||||
|
"trailingComma": "all",
|
||||||
|
"bracketSpacing": true,
|
||||||
|
"objectWrap": "preserve",
|
||||||
|
"arrowParens": "always"
|
||||||
|
}
|
Binary file not shown.
@ -15,6 +15,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^20.9.1",
|
"@types/node": "^20.9.1",
|
||||||
|
"prettier": "^3.5.3",
|
||||||
"rimraf": "^5.0.5",
|
"rimraf": "^5.0.5",
|
||||||
"ts-node": "^10.9.1",
|
"ts-node": "^10.9.1",
|
||||||
"typescript": "^5.2.2"
|
"typescript": "^5.2.2"
|
||||||
@ -24,7 +25,8 @@
|
|||||||
"build": "rimraf ./dist/lib && tsc --project tsconfig.build.json",
|
"build": "rimraf ./dist/lib && tsc --project tsconfig.build.json",
|
||||||
"up": "yarn docs && yarn build && yarn npm publish dist",
|
"up": "yarn docs && yarn build && yarn npm publish dist",
|
||||||
"up:beta": "yarn docs && yarn build && yarn npm publish dist --tag beta",
|
"up:beta": "yarn docs && yarn build && yarn npm publish dist --tag beta",
|
||||||
"test": "ts-node ./src/test/index.ts"
|
"test": "ts-node ./src/test/index.ts",
|
||||||
|
"format": "prettier --write \"./src/**/*.ts\""
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@4.7.0+sha512.5a0afa1d4c1d844b3447ee3319633797bcd6385d9a44be07993ae52ff4facabccafb4af5dcd1c2f9a94ac113e5e9ff56f6130431905884414229e284e37bb7c9"
|
"packageManager": "yarn@4.7.0+sha512.5a0afa1d4c1d844b3447ee3319633797bcd6385d9a44be07993ae52ff4facabccafb4af5dcd1c2f9a94ac113e5e9ff56f6130431905884414229e284e37bb7c9"
|
||||||
}
|
}
|
||||||
|
12
src/index.ts
12
src/index.ts
@ -5,8 +5,8 @@ export {
|
|||||||
LoggedInjectable,
|
LoggedInjectable,
|
||||||
LoggedGuard,
|
LoggedGuard,
|
||||||
LoggedInterceptor,
|
LoggedInterceptor,
|
||||||
} from "./logged";
|
} from './logged';
|
||||||
export { ScopedLogger } from "./logger";
|
export { ScopedLogger } from './logger';
|
||||||
export {
|
export {
|
||||||
InjectLogger,
|
InjectLogger,
|
||||||
LoggedParam,
|
LoggedParam,
|
||||||
@ -14,8 +14,6 @@ export {
|
|||||||
LoggedBody,
|
LoggedBody,
|
||||||
LoggedQuery,
|
LoggedQuery,
|
||||||
Logged,
|
Logged,
|
||||||
Returns
|
Returns,
|
||||||
} from "./reflected";
|
} from './reflected';
|
||||||
export {
|
export { getRequestLogger } from './utils';
|
||||||
getRequestLogger
|
|
||||||
} from './utils'
|
|
||||||
|
@ -1,44 +1,52 @@
|
|||||||
import {RouteParamtypes} from '@nestjs/common/enums/route-paramtypes.enum';
|
import { RouteParamtypes } from '@nestjs/common/enums/route-paramtypes.enum';
|
||||||
import {assignMetadata, ParamData, PipeTransform, RouteParamMetadata, Type} from "@nestjs/common";
|
import {
|
||||||
import {ROUTE_ARGS_METADATA} from '@nestjs/common/constants';
|
assignMetadata,
|
||||||
import {isNil, isString} from "@nestjs/common/utils/shared.utils";
|
ParamData,
|
||||||
|
PipeTransform,
|
||||||
|
RouteParamMetadata,
|
||||||
|
Type,
|
||||||
|
} from '@nestjs/common';
|
||||||
|
import { ROUTE_ARGS_METADATA } from '@nestjs/common/constants';
|
||||||
|
import { isNil, isString } from '@nestjs/common/utils/shared.utils';
|
||||||
|
|
||||||
export { RouteParamtypes, PipeTransform, Type, ROUTE_ARGS_METADATA };
|
export { RouteParamtypes, PipeTransform, Type, ROUTE_ARGS_METADATA };
|
||||||
|
|
||||||
export function createRouteParamDecorator(paramtype: RouteParamtypes) {
|
export function createRouteParamDecorator(paramtype: RouteParamtypes) {
|
||||||
return (data?: ParamData): ParameterDecorator =>
|
return (data?: ParamData): ParameterDecorator =>
|
||||||
(target, key, index) => {
|
(target, key, index) => {
|
||||||
const args = Reflect.getMetadata(ROUTE_ARGS_METADATA, target.constructor, key) || {};
|
const args =
|
||||||
|
Reflect.getMetadata(ROUTE_ARGS_METADATA, target.constructor, key) || {};
|
||||||
Reflect.defineMetadata(
|
Reflect.defineMetadata(
|
||||||
ROUTE_ARGS_METADATA,
|
ROUTE_ARGS_METADATA,
|
||||||
assignMetadata<RouteParamtypes, Record<number, RouteParamMetadata>>(
|
assignMetadata<RouteParamtypes, Record<number, RouteParamMetadata>>(
|
||||||
args,
|
args,
|
||||||
paramtype,
|
paramtype,
|
||||||
index,
|
index,
|
||||||
data,
|
data,
|
||||||
),
|
),
|
||||||
target.constructor,
|
target.constructor,
|
||||||
key,
|
key,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
|
|
||||||
export const createPipesRouteParamDecorator =
|
export const createPipesRouteParamDecorator =
|
||||||
(paramtype: RouteParamtypes) =>
|
(paramtype: RouteParamtypes) =>
|
||||||
(
|
(
|
||||||
data?: any,
|
data?: any,
|
||||||
...pipes: (Type<PipeTransform> | PipeTransform)[]
|
...pipes: (Type<PipeTransform> | PipeTransform)[]
|
||||||
): ParameterDecorator =>
|
): ParameterDecorator =>
|
||||||
(target, key, index) => {
|
(target, key, index) => {
|
||||||
const args = Reflect.getMetadata(ROUTE_ARGS_METADATA, target.constructor, key) || {};
|
const args =
|
||||||
const hasParamData = isNil(data) || isString(data);
|
Reflect.getMetadata(ROUTE_ARGS_METADATA, target.constructor, key) || {};
|
||||||
const paramData = hasParamData ? data : undefined;
|
const hasParamData = isNil(data) || isString(data);
|
||||||
const paramPipes = hasParamData ? pipes : [data, ...pipes];
|
const paramData = hasParamData ? data : undefined;
|
||||||
|
const paramPipes = hasParamData ? pipes : [data, ...pipes];
|
||||||
Reflect.defineMetadata(
|
|
||||||
ROUTE_ARGS_METADATA,
|
Reflect.defineMetadata(
|
||||||
assignMetadata(args, paramtype, index, paramData, ...paramPipes),
|
ROUTE_ARGS_METADATA,
|
||||||
target.constructor,
|
assignMetadata(args, paramtype, index, paramData, ...paramPipes),
|
||||||
key,
|
target.constructor,
|
||||||
);
|
key,
|
||||||
};
|
);
|
||||||
|
};
|
||||||
|
@ -1,48 +1,53 @@
|
|||||||
export const notIncludedSymbol = Symbol("notIncluded");
|
export const notIncludedSymbol = Symbol('notIncluded');
|
||||||
|
|
||||||
export function includeObjectSync(
|
export function includeObjectSync(
|
||||||
ocv: any,
|
ocv: any,
|
||||||
opt: {
|
opt: {
|
||||||
paths: string[],
|
paths: string[];
|
||||||
}
|
},
|
||||||
) {
|
) {
|
||||||
let current = Array.isArray(ocv) ? [] : typeof ocv === 'object' ? {} : ocv
|
let current = Array.isArray(ocv) ? [] : typeof ocv === 'object' ? {} : ocv;
|
||||||
opt.paths.forEach((dotpath) => {
|
opt.paths.forEach((dotpath) => {
|
||||||
let query = ocv;
|
let query = ocv;
|
||||||
let objRef = current;
|
let objRef = current;
|
||||||
const path = dotpath.split('.');
|
const path = dotpath.split('.');
|
||||||
for (const [index, key] of Object.entries(path)) {
|
for (const [index, key] of Object.entries(path)) {
|
||||||
query = query[key]
|
query = query[key];
|
||||||
if (query !== undefined && objRef[key] === undefined) {
|
if (query !== undefined && objRef[key] === undefined) {
|
||||||
if (typeof query === 'object') {
|
if (typeof query === 'object') {
|
||||||
if (Array.isArray(query)) {
|
if (Array.isArray(query)) {
|
||||||
objRef[key] = []
|
objRef[key] = [];
|
||||||
} else {
|
} else {
|
||||||
objRef[key] = {}
|
objRef[key] = {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (typeof query !== 'object' || index === (path.length - 1).toString()) {
|
if (typeof query !== 'object' || index === (path.length - 1).toString()) {
|
||||||
objRef[key] = query;
|
objRef[key] = query;
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
objRef = objRef[key]
|
objRef = objRef[key];
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function excludeObjectSync(
|
export function excludeObjectSync(
|
||||||
ocv: any,
|
ocv: any,
|
||||||
opt: {
|
opt: {
|
||||||
paths: string[]
|
paths: string[];
|
||||||
}
|
},
|
||||||
) {
|
) {
|
||||||
const copied = typeof ocv === 'object' ? Array.isArray(ocv) ? [...ocv] : { ...ocv } : ocv;
|
const copied =
|
||||||
|
typeof ocv === 'object'
|
||||||
|
? Array.isArray(ocv)
|
||||||
|
? [...ocv]
|
||||||
|
: { ...ocv }
|
||||||
|
: ocv;
|
||||||
opt.paths.forEach((dotpath) => {
|
opt.paths.forEach((dotpath) => {
|
||||||
let objRef = copied;
|
let objRef = copied;
|
||||||
const path = dotpath.split('.')
|
const path = dotpath.split('.');
|
||||||
const lastIndex = (path.length - 1).toString()
|
const lastIndex = (path.length - 1).toString();
|
||||||
for (const [index, key] of Object.entries(path)) {
|
for (const [index, key] of Object.entries(path)) {
|
||||||
if (index === lastIndex) {
|
if (index === lastIndex) {
|
||||||
delete objRef[key];
|
delete objRef[key];
|
||||||
@ -53,9 +58,9 @@ export function excludeObjectSync(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
return copied
|
return copied;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function objectContainedLogSync(
|
export function objectContainedLogSync(
|
||||||
@ -63,34 +68,30 @@ export function objectContainedLogSync(
|
|||||||
options?: {
|
options?: {
|
||||||
include?: string[];
|
include?: string[];
|
||||||
exclude?: string[];
|
exclude?: string[];
|
||||||
}
|
},
|
||||||
): string {
|
): string {
|
||||||
if (options && typeof ocv === 'object' && ocv !== null) {
|
if (options && typeof ocv === 'object' && ocv !== null) {
|
||||||
if (options.include && options.include.length > 0) {
|
if (options.include && options.include.length > 0) {
|
||||||
return JSON.stringify(
|
return JSON.stringify(includeObjectSync(ocv, { paths: options.include }));
|
||||||
includeObjectSync(ocv, { paths: options.include })
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
if (options.exclude && options.exclude.length > 0) {
|
if (options.exclude && options.exclude.length > 0) {
|
||||||
return JSON.stringify(
|
return JSON.stringify(excludeObjectSync(ocv, { paths: options.exclude }));
|
||||||
excludeObjectSync(ocv, { paths: options.exclude })
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof ocv === "object" && ocv !== null) {
|
if (typeof ocv === 'object' && ocv !== null) {
|
||||||
return JSON.stringify(ocv);
|
return JSON.stringify(ocv);
|
||||||
} else {
|
} else {
|
||||||
return `${ocv}`
|
return `${ocv}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getItemByPathSync(obj: object, path: string | string[]) {
|
export function getItemByPathSync(obj: object, path: string | string[]) {
|
||||||
const paths = Array.isArray(path) ? path : path.split(".");
|
const paths = Array.isArray(path) ? path : path.split('.');
|
||||||
|
|
||||||
return Object.keys(obj).includes(paths[0])
|
return Object.keys(obj).includes(paths[0])
|
||||||
? typeof obj[paths[0]] === "object"
|
? typeof obj[paths[0]] === 'object'
|
||||||
? getItemByPathSync(obj[paths[0]], paths.slice(1))
|
? getItemByPathSync(obj[paths[0]], paths.slice(1))
|
||||||
: obj[paths[0]]
|
: obj[paths[0]]
|
||||||
: undefined;
|
: undefined;
|
||||||
}
|
}
|
||||||
|
@ -3,30 +3,24 @@ import {
|
|||||||
Controller,
|
Controller,
|
||||||
ControllerOptions,
|
ControllerOptions,
|
||||||
ScopeOptions,
|
ScopeOptions,
|
||||||
} from "@nestjs/common";
|
} from '@nestjs/common';
|
||||||
import {
|
import { loggerInit, RevRequestMethod } from './utils';
|
||||||
loggerInit,
|
import { LoggedRoute, LoggedFunction } from './methods';
|
||||||
RevRequestMethod
|
|
||||||
} from './utils';
|
|
||||||
import {
|
|
||||||
LoggedRoute,
|
|
||||||
LoggedFunction
|
|
||||||
} from "./methods";
|
|
||||||
|
|
||||||
export function LoggedInjectable(
|
export function LoggedInjectable(
|
||||||
options?: ScopeOptions & { verbose?: boolean }
|
options?: ScopeOptions & { verbose?: boolean },
|
||||||
) {
|
) {
|
||||||
return (target: any) => {
|
return (target: any) => {
|
||||||
loggerInit(target.prototype);
|
loggerInit(target.prototype);
|
||||||
|
|
||||||
const logger = target.prototype.logger;
|
const logger = target.prototype.logger;
|
||||||
|
|
||||||
const methods = Object.getOwnPropertyNames(target.prototype);
|
const methods = Object.getOwnPropertyNames(target.prototype);
|
||||||
|
|
||||||
methods.forEach((method) => {
|
methods.forEach((method) => {
|
||||||
if (
|
if (
|
||||||
method !== "constructor" &&
|
method !== 'constructor' &&
|
||||||
typeof target.prototype[method] === "function"
|
typeof target.prototype[method] === 'function'
|
||||||
) {
|
) {
|
||||||
if (options && options.verbose)
|
if (options && options.verbose)
|
||||||
logger.log(`LoggedFunction applied to ${method}`);
|
logger.log(`LoggedFunction applied to ${method}`);
|
||||||
@ -39,49 +33,49 @@ export function LoggedInjectable(
|
|||||||
Injectable(options)(target);
|
Injectable(options)(target);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function LoggedController(): (target: any) => void;
|
export function LoggedController(): (target: any) => void;
|
||||||
export function LoggedController(
|
export function LoggedController(
|
||||||
prefix: string | string[]
|
prefix: string | string[],
|
||||||
): (target: any) => void;
|
): (target: any) => void;
|
||||||
export function LoggedController(
|
export function LoggedController(
|
||||||
options: ControllerOptions & { verbose?: boolean }
|
options: ControllerOptions & { verbose?: boolean },
|
||||||
): (target: any) => void;
|
): (target: any) => void;
|
||||||
|
|
||||||
export function LoggedController(param?: any): (target: any) => void {
|
export function LoggedController(param?: any): (target: any) => void {
|
||||||
return (target: any) => {
|
return (target: any) => {
|
||||||
loggerInit(target.prototype);
|
loggerInit(target.prototype);
|
||||||
|
|
||||||
const logger = target.prototype.logger;
|
const logger = target.prototype.logger;
|
||||||
|
|
||||||
const methods = Object.getOwnPropertyNames(target.prototype);
|
const methods = Object.getOwnPropertyNames(target.prototype);
|
||||||
|
|
||||||
let verbose =
|
let verbose =
|
||||||
typeof param === "object" && Object.keys(param).includes("verbose")
|
typeof param === 'object' && Object.keys(param).includes('verbose')
|
||||||
? param.verbose
|
? param.verbose
|
||||||
: false;
|
: false;
|
||||||
|
|
||||||
methods.forEach((method) => {
|
methods.forEach((method) => {
|
||||||
if (
|
if (
|
||||||
method !== "constructor" &&
|
method !== 'constructor' &&
|
||||||
typeof target.prototype[method] === "function"
|
typeof target.prototype[method] === 'function'
|
||||||
) {
|
) {
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
const path = Reflect.getMetadata("path", target.prototype[method]);
|
const path = Reflect.getMetadata('path', target.prototype[method]);
|
||||||
const httpMethod = Reflect.getMetadata(
|
const httpMethod = Reflect.getMetadata(
|
||||||
"method",
|
'method',
|
||||||
target.prototype[method]
|
target.prototype[method],
|
||||||
);
|
);
|
||||||
logger.log(
|
logger.log(
|
||||||
`LoggedRoute applied to ${method} (${RevRequestMethod[httpMethod]} ${path})`
|
`LoggedRoute applied to ${method} (${RevRequestMethod[httpMethod]} ${path})`,
|
||||||
);
|
);
|
||||||
}
|
|
||||||
LoggedRoute()(target.prototype, method, {
|
|
||||||
value: target.prototype[method],
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
LoggedRoute()(target.prototype, method, {
|
||||||
|
value: target.prototype[method],
|
||||||
Controller(param)(target);
|
});
|
||||||
};
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
|
Controller(param)(target);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
export * from "./methods";
|
export * from './methods';
|
||||||
export { LoggedController, LoggedInjectable } from "./class"
|
export { LoggedController, LoggedInjectable } from './class';
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
import { OverrideBuildOptions, defaultOverrideBuildOptions } from './utils';
|
import { OverrideBuildOptions, defaultOverrideBuildOptions } from './utils';
|
||||||
|
|
||||||
export const nestLoggedMetadata = Symbol("nlogdec-metadata");
|
export const nestLoggedMetadata = Symbol('nlogdec-metadata');
|
||||||
|
|
||||||
export class LoggedMetadata {
|
export class LoggedMetadata {
|
||||||
options: OverrideBuildOptions
|
options: OverrideBuildOptions;
|
||||||
|
|
||||||
constructor(options?: Partial<OverrideBuildOptions>) {
|
constructor(options?: Partial<OverrideBuildOptions>) {
|
||||||
this.options = {
|
this.options = {
|
||||||
...defaultOverrideBuildOptions,
|
...defaultOverrideBuildOptions,
|
||||||
...(options ?? {}),
|
...(options ?? {}),
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
updateOption(options: Partial<OverrideBuildOptions>) {
|
updateOption(options: Partial<OverrideBuildOptions>) {
|
||||||
this.options = {
|
this.options = {
|
||||||
...this.options,
|
...this.options,
|
||||||
...options
|
...options,
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,22 @@
|
|||||||
import { Logger } from "@nestjs/common";
|
import { Logger } from '@nestjs/common';
|
||||||
import { OverrideBuildOptions, loggerInit } from "../utils";
|
import { OverrideBuildOptions, loggerInit } from '../utils';
|
||||||
import { LoggedMetadata, nestLoggedMetadata } from "../metadata";
|
import { LoggedMetadata, nestLoggedMetadata } from '../metadata';
|
||||||
import { loggedParam, scopedLogger, returns, ReturnsReflectData, LoggedParamReflectData } from "../../reflected";
|
import {
|
||||||
import { overrideBuild } from "../override";
|
loggedParam,
|
||||||
|
scopedLogger,
|
||||||
|
returns,
|
||||||
|
ReturnsReflectData,
|
||||||
|
LoggedParamReflectData,
|
||||||
|
} from '../../reflected';
|
||||||
|
import { overrideBuild } from '../override';
|
||||||
|
|
||||||
export function LoggedFunction<F extends Array<any>, R>(
|
export function LoggedFunction<F extends Array<any>, R>(
|
||||||
options?: Partial<OverrideBuildOptions>
|
options?: Partial<OverrideBuildOptions>,
|
||||||
) {
|
) {
|
||||||
return (
|
return (
|
||||||
_target: any,
|
_target: any,
|
||||||
key: string,
|
key: string,
|
||||||
descriptor: TypedPropertyDescriptor<(...args: F) => R | Promise<R>>
|
descriptor: TypedPropertyDescriptor<(...args: F) => R | Promise<R>>,
|
||||||
) => {
|
) => {
|
||||||
loggerInit(_target);
|
loggerInit(_target);
|
||||||
|
|
||||||
@ -18,9 +24,9 @@ export function LoggedFunction<F extends Array<any>, R>(
|
|||||||
|
|
||||||
const fn = descriptor.value;
|
const fn = descriptor.value;
|
||||||
|
|
||||||
if (!fn || typeof fn !== "function") {
|
if (!fn || typeof fn !== 'function') {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`LoggedFunction decorator applied to non-function property: ${key}`
|
`LoggedFunction decorator applied to non-function property: ${key}`,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -28,12 +34,12 @@ export function LoggedFunction<F extends Array<any>, R>(
|
|||||||
const logMetadata: LoggedMetadata | undefined = Reflect.getOwnMetadata(
|
const logMetadata: LoggedMetadata | undefined = Reflect.getOwnMetadata(
|
||||||
nestLoggedMetadata,
|
nestLoggedMetadata,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
)
|
);
|
||||||
if (logMetadata) {
|
if (logMetadata) {
|
||||||
// already applied, override instead
|
// already applied, override instead
|
||||||
logMetadata.updateOption(options)
|
logMetadata.updateOption(options);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
const newMetadata = new LoggedMetadata(options);
|
const newMetadata = new LoggedMetadata(options);
|
||||||
|
|
||||||
@ -45,18 +51,18 @@ export function LoggedFunction<F extends Array<any>, R>(
|
|||||||
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
||||||
scopedLogger,
|
scopedLogger,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
);
|
);
|
||||||
|
|
||||||
const loggedParams: LoggedParamReflectData[] = Reflect.getOwnMetadata(
|
const loggedParams: LoggedParamReflectData[] = Reflect.getOwnMetadata(
|
||||||
loggedParam,
|
loggedParam,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
);
|
);
|
||||||
|
|
||||||
const returnsData: ReturnsReflectData[] | true = Reflect.getOwnMetadata(
|
const returnsData: ReturnsReflectData[] | true = Reflect.getOwnMetadata(
|
||||||
returns,
|
returns,
|
||||||
fn
|
fn,
|
||||||
);
|
);
|
||||||
|
|
||||||
const overrideFunction = overrideBuild(
|
const overrideFunction = overrideBuild(
|
||||||
@ -75,15 +81,10 @@ export function LoggedFunction<F extends Array<any>, R>(
|
|||||||
_target[key] = overrideFunction;
|
_target[key] = overrideFunction;
|
||||||
descriptor.value = overrideFunction;
|
descriptor.value = overrideFunction;
|
||||||
|
|
||||||
Reflect.defineMetadata(
|
Reflect.defineMetadata(nestLoggedMetadata, newMetadata, _target, key);
|
||||||
nestLoggedMetadata,
|
|
||||||
newMetadata,
|
|
||||||
_target,
|
|
||||||
key
|
|
||||||
)
|
|
||||||
all.forEach(([k, v]) => {
|
all.forEach(([k, v]) => {
|
||||||
Reflect.defineMetadata(k, v, _target[key]);
|
Reflect.defineMetadata(k, v, _target[key]);
|
||||||
Reflect.defineMetadata(k, v, descriptor.value);
|
Reflect.defineMetadata(k, v, descriptor.value);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,18 @@
|
|||||||
import { ExecutionContext, Logger } from "@nestjs/common";
|
import { ExecutionContext, Logger } from '@nestjs/common';
|
||||||
import { OverrideBuildOptions, loggerInit } from "../utils";
|
import { OverrideBuildOptions, loggerInit } from '../utils';
|
||||||
import { LoggedMetadata, nestLoggedMetadata } from "../metadata";
|
import { LoggedMetadata, nestLoggedMetadata } from '../metadata';
|
||||||
import { scopedLogger, returns, ReturnsReflectData } from "../../reflected";
|
import { scopedLogger, returns, ReturnsReflectData } from '../../reflected';
|
||||||
import { overrideBuild } from "../override";
|
import { overrideBuild } from '../override';
|
||||||
|
|
||||||
export function LoggedGuard<F extends Array<any>, R>(options?: Partial<OverrideBuildOptions>) {
|
export function LoggedGuard<F extends Array<any>, R>(
|
||||||
|
options?: Partial<OverrideBuildOptions>,
|
||||||
|
) {
|
||||||
return (
|
return (
|
||||||
_target: any,
|
_target: any,
|
||||||
key: string,
|
key: string,
|
||||||
descriptor: TypedPropertyDescriptor<(context: ExecutionContext, ...args: F) => R>
|
descriptor: TypedPropertyDescriptor<
|
||||||
|
(context: ExecutionContext, ...args: F) => R
|
||||||
|
>,
|
||||||
) => {
|
) => {
|
||||||
loggerInit(_target);
|
loggerInit(_target);
|
||||||
|
|
||||||
@ -16,9 +20,9 @@ export function LoggedGuard<F extends Array<any>, R>(options?: Partial<OverrideB
|
|||||||
|
|
||||||
const fn = descriptor.value;
|
const fn = descriptor.value;
|
||||||
|
|
||||||
if (!fn || typeof fn!== "function") {
|
if (!fn || typeof fn !== 'function') {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`LoggedGuard decorator applied to non-function property: ${key}`
|
`LoggedGuard decorator applied to non-function property: ${key}`,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -26,12 +30,12 @@ export function LoggedGuard<F extends Array<any>, R>(options?: Partial<OverrideB
|
|||||||
const logMetadata: LoggedMetadata | undefined = Reflect.getOwnMetadata(
|
const logMetadata: LoggedMetadata | undefined = Reflect.getOwnMetadata(
|
||||||
nestLoggedMetadata,
|
nestLoggedMetadata,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
)
|
);
|
||||||
if (logMetadata) {
|
if (logMetadata) {
|
||||||
// already applied, override instead
|
// already applied, override instead
|
||||||
logMetadata.updateOption(options)
|
logMetadata.updateOption(options);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
const newMetadata = new LoggedMetadata(options);
|
const newMetadata = new LoggedMetadata(options);
|
||||||
|
|
||||||
@ -43,12 +47,12 @@ export function LoggedGuard<F extends Array<any>, R>(options?: Partial<OverrideB
|
|||||||
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
||||||
scopedLogger,
|
scopedLogger,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
);
|
);
|
||||||
|
|
||||||
const returnsData: ReturnsReflectData[] | true = Reflect.getOwnMetadata(
|
const returnsData: ReturnsReflectData[] | true = Reflect.getOwnMetadata(
|
||||||
returns,
|
returns,
|
||||||
fn
|
fn,
|
||||||
);
|
);
|
||||||
|
|
||||||
const overrideFunction = overrideBuild(
|
const overrideFunction = overrideBuild(
|
||||||
@ -67,15 +71,10 @@ export function LoggedGuard<F extends Array<any>, R>(options?: Partial<OverrideB
|
|||||||
_target[key] = overrideFunction;
|
_target[key] = overrideFunction;
|
||||||
descriptor.value = overrideFunction;
|
descriptor.value = overrideFunction;
|
||||||
|
|
||||||
Reflect.defineMetadata(
|
Reflect.defineMetadata(nestLoggedMetadata, newMetadata, _target, key);
|
||||||
nestLoggedMetadata,
|
|
||||||
newMetadata,
|
|
||||||
_target,
|
|
||||||
key
|
|
||||||
)
|
|
||||||
all.forEach(([k, v]) => {
|
all.forEach(([k, v]) => {
|
||||||
Reflect.defineMetadata(k, v, _target[key]);
|
Reflect.defineMetadata(k, v, _target[key]);
|
||||||
Reflect.defineMetadata(k, v, descriptor.value);
|
Reflect.defineMetadata(k, v, descriptor.value);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
export { LoggedFunction } from "./function";
|
export { LoggedFunction } from './function';
|
||||||
export { LoggedRoute } from "./route";
|
export { LoggedRoute } from './route';
|
||||||
export { LoggedGuard } from "./guard";
|
export { LoggedGuard } from './guard';
|
||||||
export { LoggedInterceptor } from "./interceptor";
|
export { LoggedInterceptor } from './interceptor';
|
||||||
export { LoggedMiddleware } from "./middleware";
|
export { LoggedMiddleware } from './middleware';
|
||||||
|
@ -1,15 +1,19 @@
|
|||||||
import { OverrideBuildOptions } from "../utils";
|
import { OverrideBuildOptions } from '../utils';
|
||||||
import { ExecutionContext, Logger } from "@nestjs/common";
|
import { ExecutionContext, Logger } from '@nestjs/common';
|
||||||
import { loggerInit } from "../utils";
|
import { loggerInit } from '../utils';
|
||||||
import { LoggedMetadata, nestLoggedMetadata } from '../metadata';
|
import { LoggedMetadata, nestLoggedMetadata } from '../metadata';
|
||||||
import { scopedLogger, returns, ReturnsReflectData } from "../../reflected";
|
import { scopedLogger, returns, ReturnsReflectData } from '../../reflected';
|
||||||
import { overrideBuild } from "../override";
|
import { overrideBuild } from '../override';
|
||||||
|
|
||||||
export function LoggedInterceptor<F extends Array<any>, R>(options?: Partial<OverrideBuildOptions>) {
|
export function LoggedInterceptor<F extends Array<any>, R>(
|
||||||
|
options?: Partial<OverrideBuildOptions>,
|
||||||
|
) {
|
||||||
return (
|
return (
|
||||||
_target: any,
|
_target: any,
|
||||||
key: string,
|
key: string,
|
||||||
descriptor: TypedPropertyDescriptor<(context: ExecutionContext, ...args: F) => R>
|
descriptor: TypedPropertyDescriptor<
|
||||||
|
(context: ExecutionContext, ...args: F) => R
|
||||||
|
>,
|
||||||
) => {
|
) => {
|
||||||
loggerInit(_target);
|
loggerInit(_target);
|
||||||
|
|
||||||
@ -17,9 +21,9 @@ export function LoggedInterceptor<F extends Array<any>, R>(options?: Partial<Ove
|
|||||||
|
|
||||||
const fn = descriptor.value;
|
const fn = descriptor.value;
|
||||||
|
|
||||||
if (!fn || typeof fn!== "function") {
|
if (!fn || typeof fn !== 'function') {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`LoggedInterceptor decorator applied to non-function property: ${key}`
|
`LoggedInterceptor decorator applied to non-function property: ${key}`,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -27,12 +31,12 @@ export function LoggedInterceptor<F extends Array<any>, R>(options?: Partial<Ove
|
|||||||
const logMetadata: LoggedMetadata | undefined = Reflect.getOwnMetadata(
|
const logMetadata: LoggedMetadata | undefined = Reflect.getOwnMetadata(
|
||||||
nestLoggedMetadata,
|
nestLoggedMetadata,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
)
|
);
|
||||||
if (logMetadata) {
|
if (logMetadata) {
|
||||||
// already applied, override instead
|
// already applied, override instead
|
||||||
logMetadata.updateOption(options)
|
logMetadata.updateOption(options);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
const newMetadata = new LoggedMetadata(options);
|
const newMetadata = new LoggedMetadata(options);
|
||||||
|
|
||||||
@ -44,12 +48,12 @@ export function LoggedInterceptor<F extends Array<any>, R>(options?: Partial<Ove
|
|||||||
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
||||||
scopedLogger,
|
scopedLogger,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
);
|
);
|
||||||
|
|
||||||
const returnsData: ReturnsReflectData[] | true = Reflect.getOwnMetadata(
|
const returnsData: ReturnsReflectData[] | true = Reflect.getOwnMetadata(
|
||||||
returns,
|
returns,
|
||||||
fn
|
fn,
|
||||||
);
|
);
|
||||||
|
|
||||||
const overrideFunction = overrideBuild(
|
const overrideFunction = overrideBuild(
|
||||||
@ -68,15 +72,10 @@ export function LoggedInterceptor<F extends Array<any>, R>(options?: Partial<Ove
|
|||||||
_target[key] = overrideFunction;
|
_target[key] = overrideFunction;
|
||||||
descriptor.value = overrideFunction;
|
descriptor.value = overrideFunction;
|
||||||
|
|
||||||
Reflect.defineMetadata(
|
Reflect.defineMetadata(nestLoggedMetadata, newMetadata, _target, key);
|
||||||
nestLoggedMetadata,
|
|
||||||
newMetadata,
|
|
||||||
_target,
|
|
||||||
key
|
|
||||||
)
|
|
||||||
all.forEach(([k, v]) => {
|
all.forEach(([k, v]) => {
|
||||||
Reflect.defineMetadata(k, v, _target[key]);
|
Reflect.defineMetadata(k, v, _target[key]);
|
||||||
Reflect.defineMetadata(k, v, descriptor.value);
|
Reflect.defineMetadata(k, v, descriptor.value);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,19 @@
|
|||||||
import { OverrideBuildOptions } from "../utils";
|
import { OverrideBuildOptions } from '../utils';
|
||||||
import { ExecutionContext, Logger } from "@nestjs/common";
|
import { ExecutionContext, Logger } from '@nestjs/common';
|
||||||
import { loggerInit } from "../utils";
|
import { loggerInit } from '../utils';
|
||||||
import { LoggedMetadata, nestLoggedMetadata } from '../metadata';
|
import { LoggedMetadata, nestLoggedMetadata } from '../metadata';
|
||||||
import { scopedLogger, returns, ReturnsReflectData } from "../../reflected";
|
import { scopedLogger, returns, ReturnsReflectData } from '../../reflected';
|
||||||
import { overrideBuild } from "../override";
|
import { overrideBuild } from '../override';
|
||||||
|
|
||||||
export function LoggedMiddleware<F extends Array<any>, R>(options?: Partial<OverrideBuildOptions>) {
|
export function LoggedMiddleware<F extends Array<any>, R>(
|
||||||
|
options?: Partial<OverrideBuildOptions>,
|
||||||
|
) {
|
||||||
return (
|
return (
|
||||||
_target: any,
|
_target: any,
|
||||||
key: string,
|
key: string,
|
||||||
descriptor: TypedPropertyDescriptor<(context: ExecutionContext, ...args: F) => R>
|
descriptor: TypedPropertyDescriptor<
|
||||||
|
(context: ExecutionContext, ...args: F) => R
|
||||||
|
>,
|
||||||
) => {
|
) => {
|
||||||
loggerInit(_target);
|
loggerInit(_target);
|
||||||
|
|
||||||
@ -17,9 +21,9 @@ export function LoggedMiddleware<F extends Array<any>, R>(options?: Partial<Over
|
|||||||
|
|
||||||
const fn = descriptor.value;
|
const fn = descriptor.value;
|
||||||
|
|
||||||
if (!fn || typeof fn!== "function") {
|
if (!fn || typeof fn !== 'function') {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`LoggedMiddleware decorator applied to non-function property: ${key}`
|
`LoggedMiddleware decorator applied to non-function property: ${key}`,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -27,12 +31,12 @@ export function LoggedMiddleware<F extends Array<any>, R>(options?: Partial<Over
|
|||||||
const logMetadata: LoggedMetadata | undefined = Reflect.getOwnMetadata(
|
const logMetadata: LoggedMetadata | undefined = Reflect.getOwnMetadata(
|
||||||
nestLoggedMetadata,
|
nestLoggedMetadata,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
)
|
);
|
||||||
if (logMetadata) {
|
if (logMetadata) {
|
||||||
// already applied, override instead
|
// already applied, override instead
|
||||||
logMetadata.updateOption(options)
|
logMetadata.updateOption(options);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
const newMetadata = new LoggedMetadata(options);
|
const newMetadata = new LoggedMetadata(options);
|
||||||
|
|
||||||
@ -44,12 +48,12 @@ export function LoggedMiddleware<F extends Array<any>, R>(options?: Partial<Over
|
|||||||
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
||||||
scopedLogger,
|
scopedLogger,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
);
|
);
|
||||||
|
|
||||||
const returnsData: ReturnsReflectData[] | true = Reflect.getOwnMetadata(
|
const returnsData: ReturnsReflectData[] | true = Reflect.getOwnMetadata(
|
||||||
returns,
|
returns,
|
||||||
fn
|
fn,
|
||||||
);
|
);
|
||||||
|
|
||||||
const overrideFunction = overrideBuild(
|
const overrideFunction = overrideBuild(
|
||||||
@ -68,15 +72,10 @@ export function LoggedMiddleware<F extends Array<any>, R>(options?: Partial<Over
|
|||||||
_target[key] = overrideFunction;
|
_target[key] = overrideFunction;
|
||||||
descriptor.value = overrideFunction;
|
descriptor.value = overrideFunction;
|
||||||
|
|
||||||
Reflect.defineMetadata(
|
Reflect.defineMetadata(nestLoggedMetadata, newMetadata, _target, key);
|
||||||
nestLoggedMetadata,
|
|
||||||
newMetadata,
|
|
||||||
_target,
|
|
||||||
key
|
|
||||||
)
|
|
||||||
all.forEach(([k, v]) => {
|
all.forEach(([k, v]) => {
|
||||||
Reflect.defineMetadata(k, v, _target[key]);
|
Reflect.defineMetadata(k, v, _target[key]);
|
||||||
Reflect.defineMetadata(k, v, descriptor.value);
|
Reflect.defineMetadata(k, v, descriptor.value);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,24 @@
|
|||||||
import { RequestMethod } from "@nestjs/common";
|
import { RequestMethod } from '@nestjs/common';
|
||||||
import { OverrideBuildOptions, loggerInit, RevRequestMethod } from "../utils";
|
import { OverrideBuildOptions, loggerInit, RevRequestMethod } from '../utils';
|
||||||
import { LoggedMetadata, nestLoggedMetadata } from "../metadata";
|
import { LoggedMetadata, nestLoggedMetadata } from '../metadata';
|
||||||
import { loggedParam, scopedLogger, returns, ReturnsReflectData, LoggedParamReflectData } from "../../reflected";
|
import {
|
||||||
import { overrideBuild } from "../override";
|
loggedParam,
|
||||||
import { createRouteParamDecorator } from "../../internals/nest";
|
scopedLogger,
|
||||||
|
returns,
|
||||||
|
ReturnsReflectData,
|
||||||
|
LoggedParamReflectData,
|
||||||
|
} from '../../reflected';
|
||||||
|
import { overrideBuild } from '../override';
|
||||||
|
import { createRouteParamDecorator } from '../../internals/nest';
|
||||||
|
|
||||||
export function LoggedRoute<F extends Array<any>, R>(route?: string, options?: Partial<OverrideBuildOptions>) {
|
export function LoggedRoute<F extends Array<any>, R>(
|
||||||
|
route?: string,
|
||||||
|
options?: Partial<OverrideBuildOptions>,
|
||||||
|
) {
|
||||||
return (
|
return (
|
||||||
_target: any,
|
_target: any,
|
||||||
key: string,
|
key: string,
|
||||||
descriptor: TypedPropertyDescriptor<(...args: F) => R>
|
descriptor: TypedPropertyDescriptor<(...args: F) => R>,
|
||||||
) => {
|
) => {
|
||||||
loggerInit(_target);
|
loggerInit(_target);
|
||||||
|
|
||||||
@ -17,9 +26,9 @@ export function LoggedRoute<F extends Array<any>, R>(route?: string, options?: P
|
|||||||
|
|
||||||
const fn = descriptor.value;
|
const fn = descriptor.value;
|
||||||
|
|
||||||
if (!fn || typeof fn !== "function") {
|
if (!fn || typeof fn !== 'function') {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`LoggedRoute decorator applied to non-function property: ${key}`
|
`LoggedRoute decorator applied to non-function property: ${key}`,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -27,12 +36,12 @@ export function LoggedRoute<F extends Array<any>, R>(route?: string, options?: P
|
|||||||
const logMetadata: LoggedMetadata | undefined = Reflect.getOwnMetadata(
|
const logMetadata: LoggedMetadata | undefined = Reflect.getOwnMetadata(
|
||||||
nestLoggedMetadata,
|
nestLoggedMetadata,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
)
|
);
|
||||||
if (logMetadata) {
|
if (logMetadata) {
|
||||||
// already applied, override instead
|
// already applied, override instead
|
||||||
logMetadata.updateOption(options)
|
logMetadata.updateOption(options);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
const newMetadata = new LoggedMetadata(options);
|
const newMetadata = new LoggedMetadata(options);
|
||||||
|
|
||||||
@ -41,16 +50,17 @@ export function LoggedRoute<F extends Array<any>, R>(route?: string, options?: P
|
|||||||
Reflect.getMetadata(k, fn),
|
Reflect.getMetadata(k, fn),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const httpPath: string = Reflect.getMetadata("path", fn);
|
const httpPath: string = Reflect.getMetadata('path', fn);
|
||||||
const httpMethod: RequestMethod = Reflect.getMetadata("method", fn);
|
const httpMethod: RequestMethod = Reflect.getMetadata('method', fn);
|
||||||
|
|
||||||
const fullRoute = `${_target.constructor.name}::${route ?? httpPath}[${RevRequestMethod[httpMethod]
|
const fullRoute = `${_target.constructor.name}::${route ?? httpPath}[${
|
||||||
}]`;
|
RevRequestMethod[httpMethod]
|
||||||
|
}]`;
|
||||||
|
|
||||||
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
const scopedLoggerInjectableParam: number = Reflect.getOwnMetadata(
|
||||||
scopedLogger,
|
scopedLogger,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
);
|
);
|
||||||
// if @InjectLogger exists, fake nestjs as it is @Req()
|
// if @InjectLogger exists, fake nestjs as it is @Req()
|
||||||
if (scopedLoggerInjectableParam !== undefined) {
|
if (scopedLoggerInjectableParam !== undefined) {
|
||||||
@ -60,12 +70,12 @@ export function LoggedRoute<F extends Array<any>, R>(route?: string, options?: P
|
|||||||
const loggedParams: LoggedParamReflectData[] = Reflect.getOwnMetadata(
|
const loggedParams: LoggedParamReflectData[] = Reflect.getOwnMetadata(
|
||||||
loggedParam,
|
loggedParam,
|
||||||
_target,
|
_target,
|
||||||
key
|
key,
|
||||||
);
|
);
|
||||||
|
|
||||||
const returnsData: ReturnsReflectData[] | true = Reflect.getOwnMetadata(
|
const returnsData: ReturnsReflectData[] | true = Reflect.getOwnMetadata(
|
||||||
returns,
|
returns,
|
||||||
fn
|
fn,
|
||||||
);
|
);
|
||||||
|
|
||||||
const overrideFunction = overrideBuild(
|
const overrideFunction = overrideBuild(
|
||||||
@ -85,15 +95,10 @@ export function LoggedRoute<F extends Array<any>, R>(route?: string, options?: P
|
|||||||
_target[key] = overrideFunction;
|
_target[key] = overrideFunction;
|
||||||
descriptor.value = overrideFunction;
|
descriptor.value = overrideFunction;
|
||||||
|
|
||||||
Reflect.defineMetadata(
|
Reflect.defineMetadata(nestLoggedMetadata, newMetadata, _target, key);
|
||||||
nestLoggedMetadata,
|
|
||||||
newMetadata,
|
|
||||||
_target,
|
|
||||||
key
|
|
||||||
)
|
|
||||||
all.forEach(([k, v]) => {
|
all.forEach(([k, v]) => {
|
||||||
Reflect.defineMetadata(k, v, _target[key]);
|
Reflect.defineMetadata(k, v, _target[key]);
|
||||||
Reflect.defineMetadata(k, v, descriptor.value);
|
Reflect.defineMetadata(k, v, descriptor.value);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,13 @@
|
|||||||
import { Logger, ExecutionContext } from "@nestjs/common";
|
import { Logger, ExecutionContext } from '@nestjs/common';
|
||||||
import { LoggedParamReflectData, ReturnsReflectData } from "../reflected";
|
import { LoggedParamReflectData, ReturnsReflectData } from '../reflected';
|
||||||
import { LoggedMetadata } from './metadata';
|
import { LoggedMetadata } from './metadata';
|
||||||
import { BuildType, REQUEST_LOG_ID, createCallLogIdentifyMessage } from "./utils";
|
import {
|
||||||
import { objectContainedLogSync, getItemByPathSync } from "../internals/utils";
|
BuildType,
|
||||||
import { ScopedLogger } from "../logger";
|
REQUEST_LOG_ID,
|
||||||
|
createCallLogIdentifyMessage,
|
||||||
|
} from './utils';
|
||||||
|
import { objectContainedLogSync, getItemByPathSync } from '../internals/utils';
|
||||||
|
import { ScopedLogger } from '../logger';
|
||||||
|
|
||||||
interface FunctionMetadata {
|
interface FunctionMetadata {
|
||||||
scopedLoggerInjectableParam?: number;
|
scopedLoggerInjectableParam?: number;
|
||||||
@ -42,43 +46,64 @@ export function overrideBuild<F extends Array<any>, R>(
|
|||||||
return function (...args: F): R {
|
return function (...args: F): R {
|
||||||
// Creating ScopedLogger
|
// Creating ScopedLogger
|
||||||
let injectedLogger: Logger = baseLogger;
|
let injectedLogger: Logger = baseLogger;
|
||||||
if (typeof metadatas.scopedLoggerInjectableParam !== "undefined") {
|
if (typeof metadatas.scopedLoggerInjectableParam !== 'undefined') {
|
||||||
if (type === 'function') {
|
if (type === 'function') {
|
||||||
if (
|
if (
|
||||||
args.length <= metadatas.scopedLoggerInjectableParam ||
|
args.length <= metadatas.scopedLoggerInjectableParam ||
|
||||||
!(args[metadatas.scopedLoggerInjectableParam] instanceof ScopedLogger)
|
!(args[metadatas.scopedLoggerInjectableParam] instanceof ScopedLogger)
|
||||||
) {
|
) {
|
||||||
args[metadatas.scopedLoggerInjectableParam] = ScopedLogger.fromRoot(baseLogger, key);
|
args[metadatas.scopedLoggerInjectableParam] = ScopedLogger.fromRoot(
|
||||||
|
baseLogger,
|
||||||
|
key,
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
args[metadatas.scopedLoggerInjectableParam] = ScopedLogger.fromSuper(baseLogger, args[metadatas.scopedLoggerInjectableParam], key);
|
args[metadatas.scopedLoggerInjectableParam] = ScopedLogger.fromSuper(
|
||||||
|
baseLogger,
|
||||||
|
args[metadatas.scopedLoggerInjectableParam],
|
||||||
|
key,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// special, can access to request object
|
// special, can access to request object
|
||||||
if (type === 'guard' || type === 'interceptor') {
|
if (type === 'guard' || type === 'interceptor') {
|
||||||
// args[0] == ExecutionContext
|
// args[0] == ExecutionContext
|
||||||
const ctx = (args[0] as ExecutionContext);
|
const ctx = args[0] as ExecutionContext;
|
||||||
if (ctx.getType() !== 'http') {
|
if (ctx.getType() !== 'http') {
|
||||||
injectedLogger.error('Cannot inject logger: Request type is not http');
|
injectedLogger.error(
|
||||||
|
'Cannot inject logger: Request type is not http',
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
let req = ctx.switchToHttp().getRequest();
|
let req = ctx.switchToHttp().getRequest();
|
||||||
if (req[REQUEST_LOG_ID] === undefined) {
|
if (req[REQUEST_LOG_ID] === undefined) {
|
||||||
req[REQUEST_LOG_ID] = ScopedLogger.createScopeId();
|
req[REQUEST_LOG_ID] = ScopedLogger.createScopeId();
|
||||||
}
|
}
|
||||||
args[metadatas.scopedLoggerInjectableParam] = ScopedLogger.fromRoot(baseLogger, key, req[REQUEST_LOG_ID]);
|
args[metadatas.scopedLoggerInjectableParam] = ScopedLogger.fromRoot(
|
||||||
|
baseLogger,
|
||||||
|
key,
|
||||||
|
req[REQUEST_LOG_ID],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
} else if (type === 'middleware') {
|
} else if (type === 'middleware') {
|
||||||
let req = args[0];
|
let req = args[0];
|
||||||
if (req[REQUEST_LOG_ID] === undefined) {
|
if (req[REQUEST_LOG_ID] === undefined) {
|
||||||
req[REQUEST_LOG_ID] = ScopedLogger.createScopeId();
|
req[REQUEST_LOG_ID] = ScopedLogger.createScopeId();
|
||||||
}
|
}
|
||||||
args[metadatas.scopedLoggerInjectableParam] = ScopedLogger.fromRoot(baseLogger, key, req[REQUEST_LOG_ID]);
|
args[metadatas.scopedLoggerInjectableParam] = ScopedLogger.fromRoot(
|
||||||
|
baseLogger,
|
||||||
|
key,
|
||||||
|
req[REQUEST_LOG_ID],
|
||||||
|
);
|
||||||
} else if (type === 'route') {
|
} else if (type === 'route') {
|
||||||
// args[metadatas.scopedLoggerInjectableParam] is now Request object, thanks to code in @LoggedRoute!!!!
|
// args[metadatas.scopedLoggerInjectableParam] is now Request object, thanks to code in @LoggedRoute!!!!
|
||||||
let req = args[metadatas.scopedLoggerInjectableParam];
|
let req = args[metadatas.scopedLoggerInjectableParam];
|
||||||
if (req[REQUEST_LOG_ID] === undefined) {
|
if (req[REQUEST_LOG_ID] === undefined) {
|
||||||
req[REQUEST_LOG_ID] = ScopedLogger.createScopeId();
|
req[REQUEST_LOG_ID] = ScopedLogger.createScopeId();
|
||||||
}
|
}
|
||||||
args[metadatas.scopedLoggerInjectableParam] = ScopedLogger.fromRoot(baseLogger, key, req[REQUEST_LOG_ID]);
|
args[metadatas.scopedLoggerInjectableParam] = ScopedLogger.fromRoot(
|
||||||
|
baseLogger,
|
||||||
|
key,
|
||||||
|
req[REQUEST_LOG_ID],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,24 +121,30 @@ export function overrideBuild<F extends Array<any>, R>(
|
|||||||
|
|
||||||
// Start Log
|
// Start Log
|
||||||
if (logged.options.callLogLevel !== 'skip') {
|
if (logged.options.callLogLevel !== 'skip') {
|
||||||
const callLogIdentifyMessage =
|
const callLogIdentifyMessage =
|
||||||
type === 'middleware' || type === 'guard' || type === 'interceptor' || type === 'route'
|
type === 'middleware' ||
|
||||||
|
type === 'guard' ||
|
||||||
|
type === 'interceptor' ||
|
||||||
|
type === 'route'
|
||||||
? createCallLogIdentifyMessage('HIT', type, key, route)
|
? createCallLogIdentifyMessage('HIT', type, key, route)
|
||||||
: createCallLogIdentifyMessage('HIT', type, key);
|
: createCallLogIdentifyMessage('HIT', type, key);
|
||||||
injectedLogger[logged.options.callLogLevel](
|
injectedLogger[logged.options.callLogLevel](
|
||||||
`${callLogIdentifyMessage} ${metadatas.loggedParams && metadatas.loggedParams.length > 0
|
`${callLogIdentifyMessage} ${
|
||||||
? "WITH " +
|
metadatas.loggedParams && metadatas.loggedParams.length > 0
|
||||||
metadatas.loggedParams.map(
|
? 'WITH ' +
|
||||||
({ name, index, include, exclude }) =>
|
metadatas.loggedParams
|
||||||
name +
|
.map(
|
||||||
"=" +
|
({ name, index, include, exclude }) =>
|
||||||
objectContainedLogSync(args[index], {
|
name +
|
||||||
include,
|
'=' +
|
||||||
exclude,
|
objectContainedLogSync(args[index], {
|
||||||
})
|
include,
|
||||||
).join(", ")
|
exclude,
|
||||||
: ""
|
}),
|
||||||
}`
|
)
|
||||||
|
.join(', ')
|
||||||
|
: ''
|
||||||
|
}`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,48 +159,58 @@ export function overrideBuild<F extends Array<any>, R>(
|
|||||||
) {
|
) {
|
||||||
return r['then']((r: any) => {
|
return r['then']((r: any) => {
|
||||||
const resultLogged = Array.isArray(returnsData)
|
const resultLogged = Array.isArray(returnsData)
|
||||||
? typeof r === "object" && r !== null
|
? typeof r === 'object' && r !== null
|
||||||
? "WITH " +
|
? 'WITH ' +
|
||||||
returnsData.map(({ name, path }) => {
|
returnsData
|
||||||
const value = getItemByPathSync(r, path);
|
.map(({ name, path }) => {
|
||||||
|
const value = getItemByPathSync(r, path);
|
||||||
|
|
||||||
return value !== undefined ? `${name}=${value}` : "";
|
return value !== undefined ? `${name}=${value}` : '';
|
||||||
})
|
})
|
||||||
.filter((v) => v.length > 0)
|
.filter((v) => v.length > 0)
|
||||||
.join(", ")
|
.join(', ')
|
||||||
: ""
|
: ''
|
||||||
: typeof returnsData === 'string'
|
: typeof returnsData === 'string'
|
||||||
? "WITH " + returnsData + "=" + typeof r === "object" ? JSON.stringify(r) : r
|
? 'WITH ' + returnsData + '=' + typeof r === 'object'
|
||||||
|
? JSON.stringify(r)
|
||||||
|
: r
|
||||||
: returnsData
|
: returnsData
|
||||||
? typeof r === "object"
|
? typeof r === 'object'
|
||||||
? "WITH " + JSON.stringify(r)
|
? 'WITH ' + JSON.stringify(r)
|
||||||
: "WITH " + r
|
: 'WITH ' + r
|
||||||
: "";
|
: '';
|
||||||
|
|
||||||
injectedLogger[logged.options.returnLogLevel](`${createCallLogIdentifyMessage('RETURNED', type, key, route)} ${resultLogged}`);
|
injectedLogger[logged.options.returnLogLevel](
|
||||||
|
`${createCallLogIdentifyMessage('RETURNED', type, key, route)} ${resultLogged}`,
|
||||||
|
);
|
||||||
return r;
|
return r;
|
||||||
})
|
});
|
||||||
} else {
|
} else {
|
||||||
const resultLogged = Array.isArray(returnsData)
|
const resultLogged = Array.isArray(returnsData)
|
||||||
? typeof r === "object" && r !== null
|
? typeof r === 'object' && r !== null
|
||||||
? "WITH " +
|
? 'WITH ' +
|
||||||
returnsData.map(({ name, path }) => {
|
returnsData
|
||||||
const value = getItemByPathSync(r, path);
|
.map(({ name, path }) => {
|
||||||
|
const value = getItemByPathSync(r, path);
|
||||||
|
|
||||||
return value !== undefined ? `${name}=${value}` : "";
|
return value !== undefined ? `${name}=${value}` : '';
|
||||||
})
|
})
|
||||||
.filter((v) => v.length > 0)
|
.filter((v) => v.length > 0)
|
||||||
.join(", ")
|
.join(', ')
|
||||||
: ""
|
: ''
|
||||||
: typeof returnsData === 'string'
|
: typeof returnsData === 'string'
|
||||||
? "WITH " + returnsData + "=" + typeof r === "object" ? JSON.stringify(r) : r
|
? 'WITH ' + returnsData + '=' + typeof r === 'object'
|
||||||
|
? JSON.stringify(r)
|
||||||
|
: r
|
||||||
: returnsData
|
: returnsData
|
||||||
? typeof r === "object"
|
? typeof r === 'object'
|
||||||
? "WITH " + JSON.stringify(r)
|
? 'WITH ' + JSON.stringify(r)
|
||||||
: "WITH " + r
|
: 'WITH ' + r
|
||||||
: "";
|
: '';
|
||||||
|
|
||||||
injectedLogger[logged.options.returnLogLevel](`${createCallLogIdentifyMessage('RETURNED', type, key, route)} ${resultLogged}`);
|
injectedLogger[logged.options.returnLogLevel](
|
||||||
|
`${createCallLogIdentifyMessage('RETURNED', type, key, route)} ${resultLogged}`,
|
||||||
|
);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -178,9 +219,11 @@ export function overrideBuild<F extends Array<any>, R>(
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Error Log
|
// Error Log
|
||||||
if (logged.options.errorLogLevel !== 'skip') {
|
if (logged.options.errorLogLevel !== 'skip') {
|
||||||
injectedLogger[logged.options.errorLogLevel](`${createCallLogIdentifyMessage('ERROR', type, key, route)} ${e}`);
|
injectedLogger[logged.options.errorLogLevel](
|
||||||
|
`${createCallLogIdentifyMessage('ERROR', type, key, route)} ${e}`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,22 @@
|
|||||||
import { Logger, LogLevel } from "@nestjs/common";
|
import { Logger, LogLevel } from '@nestjs/common';
|
||||||
|
|
||||||
export const RevRequestMethod = [
|
export const RevRequestMethod = [
|
||||||
"GET",
|
'GET',
|
||||||
"POST",
|
'POST',
|
||||||
"PUT",
|
'PUT',
|
||||||
"DELETE",
|
'DELETE',
|
||||||
"PATCH",
|
'PATCH',
|
||||||
"ALL",
|
'ALL',
|
||||||
"OPTIONS",
|
'OPTIONS',
|
||||||
"HEAD",
|
'HEAD',
|
||||||
"SEARCH",
|
'SEARCH',
|
||||||
];
|
];
|
||||||
|
|
||||||
export function loggerInit(_target: any) {
|
export function loggerInit(_target: any) {
|
||||||
if (!Object.getOwnPropertyNames(_target).includes("logger")) {
|
if (!Object.getOwnPropertyNames(_target).includes('logger')) {
|
||||||
const newTargetLogger = new Logger(_target.constructor.name);
|
const newTargetLogger = new Logger(_target.constructor.name);
|
||||||
newTargetLogger.log("Logger Initialized.");
|
newTargetLogger.log('Logger Initialized.');
|
||||||
Object.defineProperty(_target, "logger", {
|
Object.defineProperty(_target, 'logger', {
|
||||||
writable: false,
|
writable: false,
|
||||||
enumerable: false,
|
enumerable: false,
|
||||||
configurable: false,
|
configurable: false,
|
||||||
@ -25,7 +25,12 @@ export function loggerInit(_target: any) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type BuildType = 'route' | 'function' | 'guard' | 'interceptor' | 'middleware';
|
export type BuildType =
|
||||||
|
| 'route'
|
||||||
|
| 'function'
|
||||||
|
| 'guard'
|
||||||
|
| 'interceptor'
|
||||||
|
| 'middleware';
|
||||||
|
|
||||||
const callLogIdentifyMessageDictionary: Record<BuildType, string> = {
|
const callLogIdentifyMessageDictionary: Record<BuildType, string> = {
|
||||||
route: 'ENDPOINT',
|
route: 'ENDPOINT',
|
||||||
@ -33,14 +38,24 @@ const callLogIdentifyMessageDictionary: Record<BuildType, string> = {
|
|||||||
guard: 'GUARD',
|
guard: 'GUARD',
|
||||||
interceptor: 'INTERCEPTOR',
|
interceptor: 'INTERCEPTOR',
|
||||||
middleware: 'MIDDLEWARE',
|
middleware: 'MIDDLEWARE',
|
||||||
}
|
};
|
||||||
|
|
||||||
export function createCallLogIdentifyMessage(message: 'HIT' | 'RETURNED' | 'ERROR', type: BuildType, key?: string, route?: string) {
|
export function createCallLogIdentifyMessage(
|
||||||
|
message: 'HIT' | 'RETURNED' | 'ERROR',
|
||||||
|
type: BuildType,
|
||||||
|
key?: string,
|
||||||
|
route?: string,
|
||||||
|
) {
|
||||||
if (message === 'ERROR')
|
if (message === 'ERROR')
|
||||||
return `ERROR WHILE ${callLogIdentifyMessageDictionary[type]} ${key} (${route}): `;
|
return `ERROR WHILE ${callLogIdentifyMessageDictionary[type]} ${key} (${route}): `;
|
||||||
|
|
||||||
if (type === 'guard' || type === 'interceptor' || type === 'middleware' || type === 'route')
|
if (
|
||||||
return `${message} ${callLogIdentifyMessageDictionary[type]} ${key} (${route})`
|
type === 'guard' ||
|
||||||
|
type === 'interceptor' ||
|
||||||
|
type === 'middleware' ||
|
||||||
|
type === 'route'
|
||||||
|
)
|
||||||
|
return `${message} ${callLogIdentifyMessageDictionary[type]} ${key} (${route})`;
|
||||||
if (type === 'function')
|
if (type === 'function')
|
||||||
return `${message} ${callLogIdentifyMessageDictionary[type]} ${key}`;
|
return `${message} ${callLogIdentifyMessageDictionary[type]} ${key}`;
|
||||||
|
|
||||||
@ -68,4 +83,4 @@ export const defaultOverrideBuildOptions: OverrideBuildOptions = {
|
|||||||
skipCallLog: false,
|
skipCallLog: false,
|
||||||
skipReturnLog: false,
|
skipReturnLog: false,
|
||||||
skipErrorLog: false,
|
skipErrorLog: false,
|
||||||
}
|
};
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Logger, LogLevel } from "@nestjs/common";
|
import { Logger, LogLevel } from '@nestjs/common';
|
||||||
import * as hyperid from 'hyperid';
|
import * as hyperid from 'hyperid';
|
||||||
|
|
||||||
const createId = hyperid({ fixedLength: true })
|
const createId = hyperid({ fixedLength: true });
|
||||||
|
|
||||||
export class ScopedLogger extends Logger {
|
export class ScopedLogger extends Logger {
|
||||||
constructor(
|
constructor(
|
||||||
@ -15,30 +15,39 @@ export class ScopedLogger extends Logger {
|
|||||||
private scopedLog(method: LogLevel) {
|
private scopedLog(method: LogLevel) {
|
||||||
return (message: string) => {
|
return (message: string) => {
|
||||||
this.logger[method](
|
this.logger[method](
|
||||||
`${this.scopeId ? `(ID ${this.scopeId}) | ` : ""
|
`${
|
||||||
}${this.scope.join(" -> ")}: ${message}`
|
this.scopeId ? `(ID ${this.scopeId}) | ` : ''
|
||||||
|
}${this.scope.join(' -> ')}: ${message}`,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
debug = this.scopedLog("debug");
|
debug = this.scopedLog('debug');
|
||||||
log = this.scopedLog("log");
|
log = this.scopedLog('log');
|
||||||
warn = this.scopedLog("warn");
|
warn = this.scopedLog('warn');
|
||||||
verbose = this.scopedLog("verbose");
|
verbose = this.scopedLog('verbose');
|
||||||
error = this.scopedLog("error");
|
error = this.scopedLog('error');
|
||||||
fatal = this.scopedLog("fatal");
|
fatal = this.scopedLog('fatal');
|
||||||
|
|
||||||
static fromSuper(baseLogger: Logger, logger: ScopedLogger, scope: string): ScopedLogger {
|
static fromSuper(
|
||||||
|
baseLogger: Logger,
|
||||||
|
logger: ScopedLogger,
|
||||||
|
scope: string,
|
||||||
|
): ScopedLogger {
|
||||||
return new ScopedLogger(
|
return new ScopedLogger(
|
||||||
baseLogger, [...logger.scope, scope], logger.scopeId
|
baseLogger,
|
||||||
)
|
[...logger.scope, scope],
|
||||||
};
|
logger.scopeId,
|
||||||
static fromRoot(logger: Logger, scope: string, scopeId?: string): ScopedLogger {
|
);
|
||||||
return new ScopedLogger(
|
}
|
||||||
logger, [scope], scopeId
|
static fromRoot(
|
||||||
)
|
logger: Logger,
|
||||||
};
|
scope: string,
|
||||||
|
scopeId?: string,
|
||||||
|
): ScopedLogger {
|
||||||
|
return new ScopedLogger(logger, [scope], scopeId);
|
||||||
|
}
|
||||||
static createScopeId(): string {
|
static createScopeId(): string {
|
||||||
return createId();
|
return createId();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
127
src/reflected.ts
127
src/reflected.ts
@ -1,4 +1,10 @@
|
|||||||
import { RouteParamtypes, Type, PipeTransform, createPipesRouteParamDecorator, createRouteParamDecorator } from "./internals/nest";
|
import {
|
||||||
|
RouteParamtypes,
|
||||||
|
Type,
|
||||||
|
PipeTransform,
|
||||||
|
createPipesRouteParamDecorator,
|
||||||
|
createRouteParamDecorator,
|
||||||
|
} from './internals/nest';
|
||||||
|
|
||||||
export type Path = string | string[];
|
export type Path = string | string[];
|
||||||
export type Paths = Path[];
|
export type Paths = Path[];
|
||||||
@ -27,28 +33,32 @@ export interface ReturnsReflectData {
|
|||||||
path: string;
|
path: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const scopedLogger = Symbol("nlogdec-scopedLogger");
|
export const scopedLogger = Symbol('nlogdec-scopedLogger');
|
||||||
export const loggedParam = Symbol("nlogdec-loggedParam");
|
export const loggedParam = Symbol('nlogdec-loggedParam');
|
||||||
export const returns = Symbol("nlogdec-returns");
|
export const returns = Symbol('nlogdec-returns');
|
||||||
|
|
||||||
export function InjectLogger(
|
export function InjectLogger(
|
||||||
target: any,
|
target: any,
|
||||||
propertyKey: string | symbol,
|
propertyKey: string | symbol,
|
||||||
parameterIndex: number
|
parameterIndex: number,
|
||||||
) {
|
) {
|
||||||
Reflect.defineMetadata(scopedLogger, parameterIndex, target, propertyKey);
|
Reflect.defineMetadata(scopedLogger, parameterIndex, target, propertyKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
type ParameterDecoratorType = (target: any, propertyKey: string | symbol, parameterIndex: number) => void
|
type ParameterDecoratorType = (
|
||||||
|
target: any,
|
||||||
|
propertyKey: string | symbol,
|
||||||
|
parameterIndex: number,
|
||||||
|
) => void;
|
||||||
|
|
||||||
function createLoggedFunctionParam(
|
function createLoggedFunctionParam(
|
||||||
name: string,
|
name: string,
|
||||||
options?: IncludeExcludePath
|
options?: IncludeExcludePath,
|
||||||
): ParameterDecoratorType {
|
): ParameterDecoratorType {
|
||||||
return (
|
return (
|
||||||
target: any,
|
target: any,
|
||||||
propertyKey: string | symbol,
|
propertyKey: string | symbol,
|
||||||
parameterIndex: number
|
parameterIndex: number,
|
||||||
) => {
|
) => {
|
||||||
const existingLoggedParams: LoggedParamReflectData[] =
|
const existingLoggedParams: LoggedParamReflectData[] =
|
||||||
Reflect.getOwnMetadata(loggedParam, target, propertyKey) || [];
|
Reflect.getOwnMetadata(loggedParam, target, propertyKey) || [];
|
||||||
@ -60,33 +70,34 @@ function createLoggedFunctionParam(
|
|||||||
include:
|
include:
|
||||||
options &&
|
options &&
|
||||||
options.includePath &&
|
options.includePath &&
|
||||||
options.includePath.map((v) => (Array.isArray(v) ? v.join(".") : v)),
|
options.includePath.map((v) => (Array.isArray(v) ? v.join('.') : v)),
|
||||||
exclude:
|
exclude:
|
||||||
options &&
|
options &&
|
||||||
options.excludePath &&
|
options.excludePath &&
|
||||||
options.excludePath.map((v) => (Array.isArray(v) ? v.join(".") : v)),
|
options.excludePath.map((v) => (Array.isArray(v) ? v.join('.') : v)),
|
||||||
});
|
});
|
||||||
|
|
||||||
Reflect.defineMetadata(
|
Reflect.defineMetadata(
|
||||||
loggedParam,
|
loggedParam,
|
||||||
existingLoggedParams,
|
existingLoggedParams,
|
||||||
target,
|
target,
|
||||||
propertyKey
|
propertyKey,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
type LoggedParamReturns = (name: string, options?: IncludeExcludePath) => ParameterDecoratorType;
|
type LoggedParamReturns = (
|
||||||
|
name: string,
|
||||||
|
options?: IncludeExcludePath,
|
||||||
|
) => ParameterDecoratorType;
|
||||||
|
|
||||||
export const Logged: LoggedParamReturns = (name, options) =>
|
export const Logged: LoggedParamReturns = (name, options) =>
|
||||||
createLoggedFunctionParam(name, options)
|
createLoggedFunctionParam(name, options);
|
||||||
|
|
||||||
type Pipe = Type<PipeTransform> | PipeTransform
|
type Pipe = Type<PipeTransform> | PipeTransform;
|
||||||
|
|
||||||
export function LoggedParam(): LoggedParamReturns;
|
export function LoggedParam(): LoggedParamReturns;
|
||||||
export function LoggedParam(
|
export function LoggedParam(...pipes: Pipe[]): LoggedParamReturns;
|
||||||
...pipes: Pipe[]
|
|
||||||
): LoggedParamReturns;
|
|
||||||
export function LoggedParam(
|
export function LoggedParam(
|
||||||
property: string,
|
property: string,
|
||||||
...pipes: Pipe[]
|
...pipes: Pipe[]
|
||||||
@ -97,10 +108,7 @@ export function LoggedParam(
|
|||||||
): LoggedParamReturns {
|
): LoggedParamReturns {
|
||||||
return (name, options) => {
|
return (name, options) => {
|
||||||
return (target, propertyKey, parameterIndex) => {
|
return (target, propertyKey, parameterIndex) => {
|
||||||
createPipesRouteParamDecorator(RouteParamtypes.PARAM)(
|
createPipesRouteParamDecorator(RouteParamtypes.PARAM)(property, ...pipes)(
|
||||||
property,
|
|
||||||
...pipes,
|
|
||||||
)(
|
|
||||||
target,
|
target,
|
||||||
propertyKey,
|
propertyKey,
|
||||||
parameterIndex,
|
parameterIndex,
|
||||||
@ -109,15 +117,13 @@ export function LoggedParam(
|
|||||||
target,
|
target,
|
||||||
propertyKey,
|
propertyKey,
|
||||||
parameterIndex,
|
parameterIndex,
|
||||||
)
|
);
|
||||||
}
|
};
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function LoggedQuery(): LoggedParamReturns;
|
export function LoggedQuery(): LoggedParamReturns;
|
||||||
export function LoggedQuery(
|
export function LoggedQuery(...pipes: Pipe[]): LoggedParamReturns;
|
||||||
...pipes: Pipe[]
|
|
||||||
): LoggedParamReturns;
|
|
||||||
export function LoggedQuery(
|
export function LoggedQuery(
|
||||||
property: string,
|
property: string,
|
||||||
...pipes: Pipe[]
|
...pipes: Pipe[]
|
||||||
@ -128,23 +134,23 @@ export function LoggedQuery(
|
|||||||
): LoggedParamReturns {
|
): LoggedParamReturns {
|
||||||
return (name, options) => {
|
return (name, options) => {
|
||||||
return (target, propertyKey, parameterIndex) => {
|
return (target, propertyKey, parameterIndex) => {
|
||||||
createPipesRouteParamDecorator(RouteParamtypes.QUERY)(
|
createPipesRouteParamDecorator(RouteParamtypes.QUERY)(property, ...pipes)(
|
||||||
property, ...pipes
|
target,
|
||||||
)(
|
propertyKey,
|
||||||
target, propertyKey, parameterIndex,
|
parameterIndex,
|
||||||
);
|
);
|
||||||
|
|
||||||
createLoggedFunctionParam(name, options)(
|
createLoggedFunctionParam(name, options)(
|
||||||
target, propertyKey, parameterIndex,
|
target,
|
||||||
|
propertyKey,
|
||||||
|
parameterIndex,
|
||||||
);
|
);
|
||||||
}
|
};
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function LoggedBody(): LoggedParamReturns;
|
export function LoggedBody(): LoggedParamReturns;
|
||||||
export function LoggedBody(
|
export function LoggedBody(...pipes: Pipe[]): LoggedParamReturns;
|
||||||
...pipes: Pipe[]
|
|
||||||
): LoggedParamReturns;
|
|
||||||
export function LoggedBody(
|
export function LoggedBody(
|
||||||
property: string,
|
property: string,
|
||||||
...pipes: Pipe[]
|
...pipes: Pipe[]
|
||||||
@ -155,41 +161,50 @@ export function LoggedBody(
|
|||||||
): LoggedParamReturns {
|
): LoggedParamReturns {
|
||||||
return (name, options) => {
|
return (name, options) => {
|
||||||
return (target, propertyKey, parameterIndex) => {
|
return (target, propertyKey, parameterIndex) => {
|
||||||
createPipesRouteParamDecorator(RouteParamtypes.BODY)(
|
createPipesRouteParamDecorator(RouteParamtypes.BODY)(property, ...pipes)(
|
||||||
property,
|
target,
|
||||||
...pipes,
|
propertyKey,
|
||||||
)(
|
parameterIndex,
|
||||||
target, propertyKey, parameterIndex
|
|
||||||
);
|
);
|
||||||
|
|
||||||
createLoggedFunctionParam(name, options)(
|
createLoggedFunctionParam(name, options)(
|
||||||
target, propertyKey, parameterIndex,
|
target,
|
||||||
|
propertyKey,
|
||||||
|
parameterIndex,
|
||||||
);
|
);
|
||||||
}
|
};
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function LoggedHeaders(property?: string): LoggedParamReturns {
|
export function LoggedHeaders(property?: string): LoggedParamReturns {
|
||||||
return (name, options) => {
|
return (name, options) => {
|
||||||
return (target, propertyKey, parameterIndex) => {
|
return (target, propertyKey, parameterIndex) => {
|
||||||
createRouteParamDecorator(RouteParamtypes.HEADERS)(property)(
|
createRouteParamDecorator(RouteParamtypes.HEADERS)(property)(
|
||||||
target, propertyKey, parameterIndex,
|
target,
|
||||||
|
propertyKey,
|
||||||
|
parameterIndex,
|
||||||
);
|
);
|
||||||
|
|
||||||
createLoggedFunctionParam(name, options)(
|
createLoggedFunctionParam(name, options)(
|
||||||
target, propertyKey, parameterIndex,
|
target,
|
||||||
)
|
propertyKey,
|
||||||
}
|
parameterIndex,
|
||||||
}
|
);
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Returns<F extends Array<any>, R>(namePaths?: {
|
export function Returns<F extends Array<any>, R>(
|
||||||
[name: string]: string;
|
namePaths?:
|
||||||
} | string) {
|
| {
|
||||||
|
[name: string]: string;
|
||||||
|
}
|
||||||
|
| string,
|
||||||
|
) {
|
||||||
return (
|
return (
|
||||||
_target: any,
|
_target: any,
|
||||||
_key: string | symbol,
|
_key: string | symbol,
|
||||||
descriptor: TypedPropertyDescriptor<(...args: F) => Promise<R> | R>
|
descriptor: TypedPropertyDescriptor<(...args: F) => Promise<R> | R>,
|
||||||
) => {
|
) => {
|
||||||
Reflect.defineMetadata(
|
Reflect.defineMetadata(
|
||||||
returns,
|
returns,
|
||||||
@ -198,10 +213,10 @@ export function Returns<F extends Array<any>, R>(namePaths?: {
|
|||||||
? namePaths
|
? namePaths
|
||||||
: Object.entries(namePaths).reduce<ReturnsReflectData[]>(
|
: Object.entries(namePaths).reduce<ReturnsReflectData[]>(
|
||||||
(prev, curr) => [...prev, { name: curr[0], path: curr[1] }],
|
(prev, curr) => [...prev, { name: curr[0], path: curr[1] }],
|
||||||
[]
|
[],
|
||||||
)
|
)
|
||||||
: true,
|
: true,
|
||||||
descriptor.value
|
descriptor.value,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
import { LoggedFunction, LoggedInjectable } from "../logged";
|
import { LoggedFunction, LoggedInjectable } from '../logged';
|
||||||
import { ScopedLogger } from "../logger";
|
import { ScopedLogger } from '../logger';
|
||||||
import {
|
import { InjectLogger, Logged, Returns } from '../reflected';
|
||||||
InjectLogger,
|
|
||||||
Logged,
|
|
||||||
Returns,
|
|
||||||
} from "../reflected";
|
|
||||||
|
|
||||||
type TestObject = {
|
type TestObject = {
|
||||||
a: string;
|
a: string;
|
||||||
@ -17,151 +13,149 @@ type TestObject = {
|
|||||||
class TestService {
|
class TestService {
|
||||||
public async service(paramA: string, @InjectLogger logger: ScopedLogger) {
|
public async service(paramA: string, @InjectLogger logger: ScopedLogger) {
|
||||||
logger.log(`received paramA ${paramA}`);
|
logger.log(`received paramA ${paramA}`);
|
||||||
return paramA
|
return paramA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedInjectable()
|
@LoggedInjectable()
|
||||||
class LoggedClass {
|
class LoggedClass {
|
||||||
constructor(
|
constructor(private service: TestService) {}
|
||||||
private service: TestService
|
|
||||||
) { }
|
|
||||||
|
|
||||||
async testParameterLoggingWithoutInjection(@Logged("key") key: number) {
|
async testParameterLoggingWithoutInjection(@Logged('key') key: number) {
|
||||||
console.log(key);
|
console.log(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
async testMultiParameterLoggingWithoutInjection(
|
async testMultiParameterLoggingWithoutInjection(
|
||||||
@Logged("key") key: number,
|
@Logged('key') key: number,
|
||||||
@Logged("key2") key2: string
|
@Logged('key2') key2: string,
|
||||||
) {
|
) {
|
||||||
console.log(key, key2);
|
console.log(key, key2);
|
||||||
}
|
}
|
||||||
|
|
||||||
async testParameterLoggingWithInjection(
|
async testParameterLoggingWithInjection(
|
||||||
@Logged("key") key: number,
|
@Logged('key') key: number,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(key.toString());
|
logger.log(key.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
async testMultiParameterLoggingWithInjection(
|
async testMultiParameterLoggingWithInjection(
|
||||||
@Logged("key") key: number,
|
@Logged('key') key: number,
|
||||||
@Logged("key2") key2: string,
|
@Logged('key2') key2: string,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(key.toString() + key2);
|
logger.log(key.toString() + key2);
|
||||||
}
|
}
|
||||||
|
|
||||||
async testObjectParameterLogging(
|
async testObjectParameterLogging(
|
||||||
@Logged("key") key: TestObject,
|
@Logged('key') key: TestObject,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(JSON.stringify(key));
|
logger.log(JSON.stringify(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
async testObjectParameterDotIncludeLogging(
|
async testObjectParameterDotIncludeLogging(
|
||||||
@Logged("key", { includePath: ["a", "b.c", "d.0", "e"] })
|
@Logged('key', { includePath: ['a', 'b.c', 'd.0', 'e'] })
|
||||||
key: TestObject,
|
key: TestObject,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(JSON.stringify(key));
|
logger.log(JSON.stringify(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
async testObjectParameterArrayIncludeLogging(
|
async testObjectParameterArrayIncludeLogging(
|
||||||
@Logged("key", { includePath: [["a"], ["b", "c"], ["d", "0"], ["e"]] })
|
@Logged('key', { includePath: [['a'], ['b', 'c'], ['d', '0'], ['e']] })
|
||||||
key: TestObject,
|
key: TestObject,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(JSON.stringify(key));
|
logger.log(JSON.stringify(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
async testObjectParameterDotExcludeLogging(
|
async testObjectParameterDotExcludeLogging(
|
||||||
@Logged("key", { excludePath: ["a", "b.c", "d.0", "e"] })
|
@Logged('key', { excludePath: ['a', 'b.c', 'd.0', 'e'] })
|
||||||
key: TestObject,
|
key: TestObject,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(JSON.stringify(key));
|
logger.log(JSON.stringify(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
async testObjectParameterArrayExcludeLogging(
|
async testObjectParameterArrayExcludeLogging(
|
||||||
@Logged("key", { excludePath: [["a"], ["b", "c"], ["d", "0"], ["e"]] })
|
@Logged('key', { excludePath: [['a'], ['b', 'c'], ['d', '0'], ['e']] })
|
||||||
key: TestObject,
|
key: TestObject,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(JSON.stringify(key));
|
logger.log(JSON.stringify(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Returns({ result: "http.result", userId: "body.user.id" })
|
@Returns({ result: 'http.result', userId: 'body.user.id' })
|
||||||
async testReturnLogging(
|
async testReturnLogging(
|
||||||
@Logged("userId")
|
@Logged('userId')
|
||||||
userId: string,
|
userId: string,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(userId);
|
logger.log(userId);
|
||||||
return {
|
return {
|
||||||
http: {
|
http: {
|
||||||
result: "success",
|
result: 'success',
|
||||||
code: 200,
|
code: 200,
|
||||||
},
|
},
|
||||||
body: {
|
body: {
|
||||||
user: {
|
user: {
|
||||||
id: userId,
|
id: userId,
|
||||||
name: "tester",
|
name: 'tester',
|
||||||
},
|
},
|
||||||
secret: "supersecret",
|
secret: 'supersecret',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Returns({ result: "http.result", userId: "body.user.id" })
|
@Returns({ result: 'http.result', userId: 'body.user.id' })
|
||||||
async testMissingReturnLogging(
|
async testMissingReturnLogging(
|
||||||
@Logged("userId")
|
@Logged('userId')
|
||||||
userId: string,
|
userId: string,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(userId);
|
logger.log(userId);
|
||||||
return {
|
return {
|
||||||
body: {
|
body: {
|
||||||
user: {
|
user: {
|
||||||
id: userId,
|
id: userId,
|
||||||
name: "tester",
|
name: 'tester',
|
||||||
},
|
},
|
||||||
secret: "supersecret",
|
secret: 'supersecret',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Returns()
|
@Returns()
|
||||||
async testRawObjectReturnLogging(
|
async testRawObjectReturnLogging(
|
||||||
@Logged("userId")
|
@Logged('userId')
|
||||||
userId: string,
|
userId: string,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(userId);
|
logger.log(userId);
|
||||||
return {
|
return {
|
||||||
body: {
|
body: {
|
||||||
user: {
|
user: {
|
||||||
id: userId,
|
id: userId,
|
||||||
name: "tester",
|
name: 'tester',
|
||||||
},
|
},
|
||||||
secret: "supersecret",
|
secret: 'supersecret',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Returns()
|
@Returns()
|
||||||
async testRawValueReturnLogging(
|
async testRawValueReturnLogging(
|
||||||
@Logged("userId")
|
@Logged('userId')
|
||||||
userId: string,
|
userId: string,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(userId);
|
logger.log(userId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
async testLoggerRootLogging2(@InjectLogger logger?: ScopedLogger) {
|
async testLoggerRootLogging2(@InjectLogger logger?: ScopedLogger) {
|
||||||
logger.log("2");
|
logger.log('2');
|
||||||
}
|
}
|
||||||
|
|
||||||
async testLoggerRootLogging(@InjectLogger logger?: ScopedLogger) {
|
async testLoggerRootLogging(@InjectLogger logger?: ScopedLogger) {
|
||||||
@ -169,16 +163,16 @@ class LoggedClass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
testSyncLoggerRootLogging2(@InjectLogger logger?: ScopedLogger) {
|
testSyncLoggerRootLogging2(@InjectLogger logger?: ScopedLogger) {
|
||||||
logger.log('2')
|
logger.log('2');
|
||||||
return 2
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
testSyncLoggerRootLogging(@InjectLogger logger?: ScopedLogger) {
|
testSyncLoggerRootLogging(@InjectLogger logger?: ScopedLogger) {
|
||||||
logger.log(this.testSyncLoggerRootLogging2(logger).toString())
|
logger.log(this.testSyncLoggerRootLogging2(logger).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
testSyncLogging(@InjectLogger logger?: ScopedLogger) {
|
testSyncLogging(@InjectLogger logger?: ScopedLogger) {
|
||||||
logger.log("synced yay");
|
logger.log('synced yay');
|
||||||
}
|
}
|
||||||
|
|
||||||
async testService(@InjectLogger logger?: ScopedLogger) {
|
async testService(@InjectLogger logger?: ScopedLogger) {
|
||||||
@ -187,128 +181,126 @@ class LoggedClass {
|
|||||||
|
|
||||||
@LoggedFunction({ skipCallLog: true, skipReturnLog: true })
|
@LoggedFunction({ skipCallLog: true, skipReturnLog: true })
|
||||||
testOptionOverriding(@InjectLogger logger?: ScopedLogger) {
|
testOptionOverriding(@InjectLogger logger?: ScopedLogger) {
|
||||||
logger.log("testOptionOverriding");
|
logger.log('testOptionOverriding');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class LoggedMethodsClass {
|
class LoggedMethodsClass {
|
||||||
constructor(
|
constructor(private service: TestService) {}
|
||||||
private service: TestService
|
|
||||||
) { }
|
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
async testParameterLoggingWithoutInjection(@Logged("key") key: number) {
|
async testParameterLoggingWithoutInjection(@Logged('key') key: number) {
|
||||||
console.log(key);
|
console.log(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
async testMultiParameterLoggingWithoutInjection(
|
async testMultiParameterLoggingWithoutInjection(
|
||||||
@Logged("key") key: number,
|
@Logged('key') key: number,
|
||||||
@Logged("key2") key2: string
|
@Logged('key2') key2: string,
|
||||||
) {
|
) {
|
||||||
console.log(key, key2);
|
console.log(key, key2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
async testParameterLoggingWithInjection(
|
async testParameterLoggingWithInjection(
|
||||||
@Logged("key") key: number,
|
@Logged('key') key: number,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(key.toString());
|
logger.log(key.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
async testMultiParameterLoggingWithInjection(
|
async testMultiParameterLoggingWithInjection(
|
||||||
@Logged("key") key: number,
|
@Logged('key') key: number,
|
||||||
@Logged("key2") key2: string,
|
@Logged('key2') key2: string,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(key.toString() + key2);
|
logger.log(key.toString() + key2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
async testObjectParameterLogging(
|
async testObjectParameterLogging(
|
||||||
@Logged("key") key: TestObject,
|
@Logged('key') key: TestObject,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(JSON.stringify(key));
|
logger.log(JSON.stringify(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
async testObjectParameterDotIncludeLogging(
|
async testObjectParameterDotIncludeLogging(
|
||||||
@Logged("key", { includePath: ["a", "b.c", "d.0", "e"] })
|
@Logged('key', { includePath: ['a', 'b.c', 'd.0', 'e'] })
|
||||||
key: TestObject,
|
key: TestObject,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(JSON.stringify(key));
|
logger.log(JSON.stringify(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
async testObjectParameterArrayIncludeLogging(
|
async testObjectParameterArrayIncludeLogging(
|
||||||
@Logged("key", { includePath: [["a"], ["b", "c"], ["d", "0"], ["e"]] })
|
@Logged('key', { includePath: [['a'], ['b', 'c'], ['d', '0'], ['e']] })
|
||||||
key: TestObject,
|
key: TestObject,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(JSON.stringify(key));
|
logger.log(JSON.stringify(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
async testObjectParameterDotExcludeLogging(
|
async testObjectParameterDotExcludeLogging(
|
||||||
@Logged("key", { excludePath: ["a", "b.c", "d.0", "e"] })
|
@Logged('key', { excludePath: ['a', 'b.c', 'd.0', 'e'] })
|
||||||
key: TestObject,
|
key: TestObject,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(JSON.stringify(key));
|
logger.log(JSON.stringify(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
async testObjectParameterArrayExcludeLogging(
|
async testObjectParameterArrayExcludeLogging(
|
||||||
@Logged("key", { excludePath: [["a"], ["b", "c"], ["d", "0"], ["e"]] })
|
@Logged('key', { excludePath: [['a'], ['b', 'c'], ['d', '0'], ['e']] })
|
||||||
key: TestObject,
|
key: TestObject,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(JSON.stringify(key));
|
logger.log(JSON.stringify(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
@Returns({ result: "http.result", userId: "body.user.id" })
|
@Returns({ result: 'http.result', userId: 'body.user.id' })
|
||||||
async testReturnLogging(
|
async testReturnLogging(
|
||||||
@Logged("userId")
|
@Logged('userId')
|
||||||
userId: string,
|
userId: string,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(userId);
|
logger.log(userId);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
http: {
|
http: {
|
||||||
result: "success",
|
result: 'success',
|
||||||
code: 200,
|
code: 200,
|
||||||
},
|
},
|
||||||
body: {
|
body: {
|
||||||
user: {
|
user: {
|
||||||
id: userId,
|
id: userId,
|
||||||
name: "tester",
|
name: 'tester',
|
||||||
},
|
},
|
||||||
secret: "supersecret",
|
secret: 'supersecret',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
@Returns({ result: "http.result", userId: "body.user.id" })
|
@Returns({ result: 'http.result', userId: 'body.user.id' })
|
||||||
async testMissingReturnLogging(
|
async testMissingReturnLogging(
|
||||||
@Logged("userId")
|
@Logged('userId')
|
||||||
userId: string,
|
userId: string,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(userId);
|
logger.log(userId);
|
||||||
return {
|
return {
|
||||||
body: {
|
body: {
|
||||||
user: {
|
user: {
|
||||||
id: userId,
|
id: userId,
|
||||||
name: "tester",
|
name: 'tester',
|
||||||
},
|
},
|
||||||
secret: "supersecret",
|
secret: 'supersecret',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -316,18 +308,18 @@ class LoggedMethodsClass {
|
|||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
@Returns()
|
@Returns()
|
||||||
async testRawObjectReturnLogging(
|
async testRawObjectReturnLogging(
|
||||||
@Logged("userId")
|
@Logged('userId')
|
||||||
userId: string,
|
userId: string,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(userId);
|
logger.log(userId);
|
||||||
return {
|
return {
|
||||||
body: {
|
body: {
|
||||||
user: {
|
user: {
|
||||||
id: userId,
|
id: userId,
|
||||||
name: "tester",
|
name: 'tester',
|
||||||
},
|
},
|
||||||
secret: "supersecret",
|
secret: 'supersecret',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -335,9 +327,9 @@ class LoggedMethodsClass {
|
|||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
@Returns()
|
@Returns()
|
||||||
async testRawValueReturnLogging(
|
async testRawValueReturnLogging(
|
||||||
@Logged("userId")
|
@Logged('userId')
|
||||||
userId: string,
|
userId: string,
|
||||||
@InjectLogger logger?: ScopedLogger
|
@InjectLogger logger?: ScopedLogger,
|
||||||
) {
|
) {
|
||||||
logger.log(userId);
|
logger.log(userId);
|
||||||
return true;
|
return true;
|
||||||
@ -345,7 +337,7 @@ class LoggedMethodsClass {
|
|||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
async testLoggerRootLogging2(@InjectLogger logger?: ScopedLogger) {
|
async testLoggerRootLogging2(@InjectLogger logger?: ScopedLogger) {
|
||||||
logger.log("2");
|
logger.log('2');
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
@ -355,18 +347,18 @@ class LoggedMethodsClass {
|
|||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
testSyncLoggerRootLogging2(@InjectLogger logger?: ScopedLogger) {
|
testSyncLoggerRootLogging2(@InjectLogger logger?: ScopedLogger) {
|
||||||
logger.log('2')
|
logger.log('2');
|
||||||
return 2
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
testSyncLoggerRootLogging(@InjectLogger logger?: ScopedLogger) {
|
testSyncLoggerRootLogging(@InjectLogger logger?: ScopedLogger) {
|
||||||
logger.log(this.testSyncLoggerRootLogging2(logger).toString())
|
logger.log(this.testSyncLoggerRootLogging2(logger).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
testSyncLogging(@InjectLogger logger?: ScopedLogger) {
|
testSyncLogging(@InjectLogger logger?: ScopedLogger) {
|
||||||
logger.log("synced yay");
|
logger.log('synced yay');
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoggedFunction()
|
@LoggedFunction()
|
||||||
@ -375,8 +367,6 @@ class LoggedMethodsClass {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// const service = new TestService();
|
// const service = new TestService();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
10
src/utils.ts
10
src/utils.ts
@ -1,9 +1,9 @@
|
|||||||
import { Logger } from "@nestjs/common";
|
import { Logger } from '@nestjs/common';
|
||||||
import { ScopedLogger } from "./logger";
|
import { ScopedLogger } from './logger';
|
||||||
import { REQUEST_LOG_ID } from "./logged/utils";
|
import { REQUEST_LOG_ID } from './logged/utils';
|
||||||
|
|
||||||
const logger = new Logger();
|
const logger = new Logger();
|
||||||
|
|
||||||
export function getRequestLogger(functionName: string, req: any): ScopedLogger {
|
export function getRequestLogger(functionName: string, req: any): ScopedLogger {
|
||||||
return new ScopedLogger(logger, [functionName], req[REQUEST_LOG_ID])
|
return new ScopedLogger(logger, [functionName], req[REQUEST_LOG_ID]);
|
||||||
}
|
}
|
||||||
|
10
yarn.lock
10
yarn.lock
@ -372,6 +372,7 @@ __metadata:
|
|||||||
"@nestjs/common": "npm:^10.2.8"
|
"@nestjs/common": "npm:^10.2.8"
|
||||||
"@types/node": "npm:^20.9.1"
|
"@types/node": "npm:^20.9.1"
|
||||||
hyperid: "npm:^3.1.1"
|
hyperid: "npm:^3.1.1"
|
||||||
|
prettier: "npm:^3.5.3"
|
||||||
reflect-metadata: "npm:^0.1.13"
|
reflect-metadata: "npm:^0.1.13"
|
||||||
rimraf: "npm:^5.0.5"
|
rimraf: "npm:^5.0.5"
|
||||||
rxjs: "npm:^7.8.1"
|
rxjs: "npm:^7.8.1"
|
||||||
@ -397,6 +398,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"prettier@npm:^3.5.3":
|
||||||
|
version: 3.5.3
|
||||||
|
resolution: "prettier@npm:3.5.3"
|
||||||
|
bin:
|
||||||
|
prettier: bin/prettier.cjs
|
||||||
|
checksum: 10c0/3880cb90b9dc0635819ab52ff571518c35bd7f15a6e80a2054c05dbc8a3aa6e74f135519e91197de63705bcb38388ded7e7230e2178432a1468005406238b877
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"reflect-metadata@npm:^0.1.13":
|
"reflect-metadata@npm:^0.1.13":
|
||||||
version: 0.1.13
|
version: 0.1.13
|
||||||
resolution: "reflect-metadata@npm:0.1.13"
|
resolution: "reflect-metadata@npm:0.1.13"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user