If you apply the SentryTraced decorator to a function, it replaces it with a new function that retains the name of the original function but does not copy over the metadata using reflect-metadata that may have been applied by another decorator (which is a common pattern in NestJS) such as SetMetadata from @nestjs/common.
Expected Result
After the decorator assigns decorator.value, it should do something like:
const metadataKeys = Reflect.getMetadataKeys(originalMethod);
for (const metadataKey of metadataKeys) {
const value = Reflect.getMetadata(metadataKey, originalMethod);
Reflect.defineMetadata(metadataKey, value, descriptor.value);
}
I have applied a patch to get things working for us that does exactly this
Actual Result
It does not copy the metadata so other functionality that relies on it breaks.
Is there an existing issue for this?
How do you use Sentry?
Sentry Saas (sentry.io)
Which SDK are you using?
@sentry/nestjs
SDK Version
8.38.0
Framework Version
NestJS 10.4.2
Link to Sentry event
No response
Reproduction Example/SDK Setup
No response
Steps to Reproduce
If you apply the
SentryTraced
decorator to a function, it replaces it with a new function that retains the name of the original function but does not copy over the metadata usingreflect-metadata
that may have been applied by another decorator (which is a common pattern in NestJS) such asSetMetadata
from@nestjs/common
.Expected Result
After the decorator assigns
decorator.value
, it should do something like:I have applied a patch to get things working for us that does exactly this
Actual Result
It does not copy the metadata so other functionality that relies on it breaks.