Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ソースコードを読んでみる #1

Closed
takecchi opened this issue Jun 27, 2024 · 8 comments
Closed

ソースコードを読んでみる #1

takecchi opened this issue Jun 27, 2024 · 8 comments

Comments

@takecchi
Copy link
Owner

わかってる情報

  • multipart/form-dataを使用するとstringとして情報が渡される
    (application/jsonなどはjsonのパーサーが使用されると思われ)
  • enableImplicitConversion: trueを渡すと暗黙的な変換が行われる為、この時点で文字列'false'がbooleantrueに変換される。
  • つまりenableImplicitConversion: trueになってると@Transform(({ value }) => value === 'true')を書いても意味がない
@takecchi
Copy link
Owner Author

NestJSで問題が発生しているのはこの部分

https://github.com/nestjs/nest/blob/master/packages/common/pipes/validation.pipe.ts#L124

    let entity = classTransformer.plainToClass(
      metatype,
      value,
      this.transformOptions,
    );

どうやらclass-transformerに原因があるっぽい

@takecchi
Copy link
Owner Author

詳しく追って改修しようとしたところ同様の問題に対するPRが出ていた。

typestack/class-transformer#1686

@takecchi
Copy link
Owner Author

takecchi commented Jun 27, 2024

ValidatePipeをオーバーライドするかenableImplicitConversionを使用しないで@Transformを使用するのが良いかもしれない。

@takecchi
Copy link
Owner Author

解決しました!

https://zenn.dev/takecchi/articles/7d494986bc39ec

@takecchi
Copy link
Owner Author

I decided to set enableImplicitConversion to false and handle type conversion with @Transform(({ value }) => value === 'true').

@takecchi
Copy link
Owner Author

既存箇所に影響が出るため根本解決にならず

@takecchi takecchi reopened this Jun 27, 2024
@takecchi
Copy link
Owner Author

class-transformerは2021年からメンテナンスが止まってることがわかった。
typestack/class-validator#1775

移行先を探そう。

@takecchi
Copy link
Owner Author

forkしたライブラリを作ることで解決
https://www.npmjs.com/package/@takecchi/class-transformer

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant