You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Sentry sdk adds "__wrapped"-properties to types, which prevents nestjs project from building #12682
asyncupdateTreatment(
@Update(UpdateInput)context: UpdateContext<Model,UpdateInput>){constentity=awaitthis.service.findOneByContext(context);if(!entity)thrownewNotFoundGqlError('Treatment not found');returnthis.service.updateByContext(entity,context);}
Install @sentry/node
run nest build
Expected Result
NestJs builds without Problems
Actual Result
The SDK expects the silently added __wrapped-property to be defined and Typescript throws the following Error:
TS2345: Argument of type 'typeof UpdateTreatmentInput' is not assignable to parameter of type 'Complete<Type<ContextAwareInput<GqlQueryContext>>>'.
Property '__wrapped' is optional in type 'typeof UpdateTreatmentInput' but required in type 'Complete<Type<ContextAwareInput<GqlQueryContext>>>'.
Hi, thanks for the quick response. Unfortunately it only occurs when adding Sentry to the project, without any "special" configuration. After further investigation, I could pin it down to this peerDependency: shimmer 1.05, which is used by openTelegraphy 1.16.0. So it isn't directly caused by Sentry, but rather by the used dependencies.
The error is complaining that the input UpdateInput given to the function-parameter decorator @Update() has an optional __wrapped-property. This does not satisfy the type Complete<T> as this type requires every property of a given type to be defined. As the __wrapped-property is magically injected into every type in the project(correct me if thats a wrong assumption), the functionality of the Complete<T>-type breaks, or gets as least really cumbersome, as it requires the __wrapped-property to be defined everywhere.
changed the title [-]Sentry sdk adds "__wrapper"-properties to types, which prevents nestjs project from building[/-][+]Sentry sdk adds "__wrapped"-properties to types, which prevents nestjs project from building[/+]on Jun 28, 2024
Update: The Problem also occurs with the typescript-native Utility-Type Required<T> when using it like this: Required<Type<T>>. The Type<T> is an interface originating from @nestjs/common and enables class-types to be passed as function-parameters instead of an actual instance of given class.
Current workaround would be to use Omit<Required<Type<T>>, '__wrapped'> instead.
Thanks a bunch for the investigation and reproduction! Grade A issue 👌
I opened a bunch of upstream contributions so we can fix this. For now, I recommend a good ol' @ts-ignore as a workaround until all of the changes are released.
Activity
lforst commentedon Jun 28, 2024
Hi, thanks for writing in. I am a bit confused tbh. We are only referencing the
__wrappedfield insentry-javascript/packages/aws-serverless/src/sdk.ts
Lines 374 to 377 in c7b8503
However, that type is not exposed in any way. Are you 100% sure Sentry is causing this? Are you referencing our internals in any weird way?
DnglHrdt commentedon Jun 28, 2024
Hi, thanks for the quick response. Unfortunately it only occurs when adding Sentry to the project, without any "special" configuration. After further investigation, I could pin it down to this peerDependency: shimmer 1.05, which is used by openTelegraphy 1.16.0. So it isn't directly caused by Sentry, but rather by the used dependencies.
lforst commentedon Jun 28, 2024
@DanielMenke interesting. Thanks for investigating. Could you elaborate where exactly the error points to? We'll try to report and fix this upstream.
DnglHrdt commentedon Jun 28, 2024
The error is complaining that the input
UpdateInputgiven to the function-parameter decorator@Update()has an optional__wrapped-property. This does not satisfy thetype Complete<T>as this type requires every property of a given type to be defined. As the__wrapped-property is magically injected into every type in the project(correct me if thats a wrong assumption), the functionality of theComplete<T>-type breaks, or gets as least really cumbersome, as it requires the__wrapped-property to be defined everywhere.I created a minimal reproduction repo here(I removed the graphql focus to keep it minimal):
https://github.com/DanielMenke/sentry_min_reproduction
I also added a separate branch without any sentry-relations, which starts without any problems (you might need to delete the node_modules directory upfront)
https://github.com/DanielMenke/sentry_min_reproduction/tree/no-sentry
[-]Sentry sdk adds "__wrapper"-properties to types, which prevents nestjs project from building[/-][+]Sentry sdk adds "__wrapped"-properties to types, which prevents nestjs project from building[/+]DnglHrdt commentedon Jun 28, 2024
Update: The Problem also occurs with the typescript-native Utility-Type
Required<T>when using it like this:Required<Type<T>>. TheType<T>is an interface originating from @nestjs/common and enables class-types to be passed as function-parameters instead of an actual instance of given class.Current workaround would be to use
Omit<Required<Type<T>>, '__wrapped'>instead.lforst commentedon Jul 1, 2024
Thanks a bunch for the investigation and reproduction! Grade A issue 👌
I opened a bunch of upstream contributions so we can fix this. For now, I recommend a good ol'
@ts-ignoreas a workaround until all of the changes are released.s1gr1d commentedon Dec 10, 2024
This was released in
1.26.0: open-telemetry/opentelemetry-js#4949Closing this, as we are using version
^1.29.0