Git Product home page Git Product logo

Comments (4)

kamilmysliwiec avatar kamilmysliwiec commented on May 4, 2024 1

Hi @Mark-McCracken,
Thanks for the report.

Issue is fixed in 1.0.2 version. Please, update your package :)

from nest.

Mark-McCracken avatar Mark-McCracken commented on May 4, 2024

I think this is due to the following file

src/common/utils/decorators/route-params.decorator.ts

import 'reflect-metadata';
import { ROUTE_ARGS_METADATA } from '../../constants';
import { RouteParamtypes } from '../../enums/route-paramtypes.enum';

export type ParamData = object | string | number;
export interface RouteParamsMetadata {
    [prop: number]: {
        index: number;
        data?: ParamData;
    };
}

const assignMetadata = (
    args: RouteParamsMetadata,
    paramtype: RouteParamtypes,
    index: number,
    data?: ParamData) => ({
    ...args,
    [paramtype]: { index, data },
});

const createRouteParamDecorator = (paramtype: RouteParamtypes) => {
    return (data?: ParamData): ParameterDecorator => (target, key, index) => {
        const args = Reflect.getMetadata(ROUTE_ARGS_METADATA, target, key) || {};
        Reflect.defineMetadata(
            ROUTE_ARGS_METADATA,
            assignMetadata(args, paramtype, index, data),
            target,
            key,
        );
    };
};

export const Request: () => ParameterDecorator = createRouteParamDecorator(RouteParamtypes.REQUEST);
export const Response: () => ParameterDecorator = createRouteParamDecorator(RouteParamtypes.RESPONSE);
export const Next: () => ParameterDecorator = createRouteParamDecorator(RouteParamtypes.NEXT);
export const Query: (property?: string) => ParameterDecorator = createRouteParamDecorator(RouteParamtypes.QUERY);
export const Body: (property?: string) => ParameterDecorator = createRouteParamDecorator(RouteParamtypes.BODY);
export const Param: (property?: string) => ParameterDecorator = createRouteParamDecorator(RouteParamtypes.PARAM);
export const Session: () => ParameterDecorator = createRouteParamDecorator(RouteParamtypes.SESSION);
export const Headers: (property?: string) => ParameterDecorator = createRouteParamDecorator(RouteParamtypes.HEADERS);

the createRouteParamDecorator function I think will be called multiple times when using the decorator twice.
The assignMetadata function is using [paramtype] as the key, however this key will not be unique when using enums.
This needs to be combined with the index, perhaps as a Map value I think, so that when then next decorator comes along with the same enum (Param or body), it doesn't cause a conflict with the existing key.

from nest.

Mark-McCracken avatar Mark-McCracken commented on May 4, 2024

perhaps this could solve it?

export interface RouteParamsMetadata {
[prop: string]: {
index: number;
data?: ParamData;
};
}

const assignMetadata = (
args: RouteParamsMetadata,
paramtype: RouteParamtypes,
index: number,
data?: ParamData) => ({
...args,
[paramtype:${paramtype}, index:${index}]: { index, data },
});

from nest.

lock avatar lock commented on May 4, 2024

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

from nest.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.