diff --git a/contributions/65639.md b/contributions/65639.md new file mode 100644 index 0000000..f4134c9 --- /dev/null +++ b/contributions/65639.md @@ -0,0 +1,29 @@ +--- +pr-url: https://github.com/nodejs/node/pull/65639 +--- + +@greenheadHQ 올려주신 아이디어를 참고해서 typings 관련해 기여했습니다. 감사합니다. + +## 문제 내용 + +최신 Node.js 빌드에서 `internalBinding('zlib')`의 실제 export를 타입 선언과 비교했습니다. + +런타임에는 `ZLIB_VERSION`, `ZstdCompress`, `ZstdDecompress`, `crc32`가 존재하지만, `typings/internalBinding/zlib.d.ts`에는 해당 타입이 선언되어 있지 않은 것을 확인했습니다. + +## 해결 과정과 검증 + +C++ 구현과 내부 JavaScript 사용처를 확인해 각 export의 타입을 정의했습니다. + +- `ZLIB_VERSION`: 문자열 +- `crc32`: 문자열 또는 `ArrayBufferView`를 받아 숫자를 반환 +- `ZstdCompress`, `ZstdDecompress`: 기존 압축 스트림과 동일한 base class를 따르는 native stream + +런타임 동작은 변경하지 않고 누락된 타입 선언만 추가했으며, `make js-linter`를 실행해 검증했습니다. + +해당 PR은 업로드 후 바로 approved 되어 commit queue에 포함되었습니다. 확실히 typings 관련 PR은 리뷰 하기에 부담없는 부분인 것 같습니다. + +## 배운 점 + +Node.js의 native binding은 C++ 구현과 TypeScript 타입 선언이 별도로 관리되기 때문에, 런타임 export가 추가되어도 타입 선언이 함께 갱신되지 않을 수 있다는 점을 배웠습니다. + +또한 타입을 추가할 때 이름만 맞추는 것이 아니라 C++의 export 등록 코드와 실제 JavaScript 사용처를 함께 확인해야 정확한 타입을 정의할 수 있음을 알게 되었습니다.