Typia with swc, powerful validation and fast compile

00_8_3·2023년 3월 17일
1

0. 도입

개인 프로젝트에 swc와 typia typescript-json를 사용한적이 있었는데
swc의 빠른 컴파일 속도와 typia의 간편한 런타임 validation에 놀랐었다.

하지만 아쉽게도 같이 사용하지는 못했다.

typia는 ttsc를 사용한 JS로 컴파일 되기 때문에 같이 사용 될 수 없었다.

최근 typia 이슈 구경 중 typia generate를 통해 ts -> es6 ts 컴파일이 되는 것을 알게되어
둘을 한번 같이 사용해보려 한다.

https://github.com/samchon/typia/releases/tag/v3.6.1

1. typia

typia는 class-validator, typebox, ajv, zod와 같은 validation을 지원하는 라이브러리이다.
이 라이브러리들과는 다르게 class 또는 DTO를 사용하지 않고 타입스크립트 type 또는 interface를 사용하여
type safe한 validation이 가능하다는게 특징이다.
또한 AOT를 사용하기 때문에 다른 라이브러리들에 비해 월등한 속도를 자랑한다고 한다. 공식문서

최근 comment tags도 추가되었고
3.7 버전에는 custom tags도 추가된다고 한다.

1.1 사용법

JS로 컴파일 전 es6로 먼저 컴파일
npx typia generate --input src/templates --output src/functional

전체적인 사용법은 setup 을 참고하길 바랍니다.

1.2 에러

Error: Debug Failure. Unexpected moduleResolution: Node

위 generate 명령어 사용하면 에러 발생.
도입된지 얼마 안된 기능이라 아직 완전하지 않은듯 하다.

https://github.com/samchon/typia/issues/552

1.2.1 해결

약간 꼼수같은 방법이지만
tsconfig.json을 상속받는 typia.tsconfig.json 파일을 만들어 --project 플래그를 사용해 주입해주면 된다.

  • typia.tsconfig.json
{
    "extends": "./tsconfig.json",
    "compilerOptions": { "moduleResolution": 2 }
}

npx typia generate --input ./src/typia --output ./src/dist --project typia.tsconfig.json

2. swc 컴파일

npm i -D @swc/cli @swc/core

npx swc .\src\dist\validate.ts -d .\src\

ttsc는 target 옵션에 따라 swc 설정을 바꾸어 줘야합니다.

2.1 .swcrc

{
    "jsc": {
      "parser": {
        "syntax": "typescript",
        "tsx": true,
        "decorators": false
      },
      "target": "es5"
    },
    "module": {
      "type": "commonjs"
    }
}

후기

최근 회사 플젝 validation 라이브러리를 json-schema -> typia 마이크레이션을 진행하였는데
swc도 적용해서 조금 더 편한 개발 환경을 구성할 수 있게 되었다.

도중에 발견한 typia 오류도 제보했다.

TS로 컴파일하고 다시 JS로 컴파일 하는 방식이기 때문에
아직 번거로운 설정을 거쳐야 하고 수정되어야 할 버그들이 있어 아쉽지만
강력한 validation과 빠른 컴파일을 경험 해본다면
다시 돌아가기 힘들지 않을까 생각한다.

참고

https://github.com/samchon/typia/issues/146
https://github.com/samchon/typia/issues/509

https://swc.rs/docs/configuration/swcrc

0개의 댓글