diff --git a/contributions/65660.md b/contributions/65660.md new file mode 100644 index 0000000..a2d80c2 --- /dev/null +++ b/contributions/65660.md @@ -0,0 +1,12 @@ +--- +pr-url: https://github.com/nodejs/node/pull/65660 +--- +## 문제 내용 +Node.js의 `internalBinding('profiler')`에 대한 타입 선언이 `typings/internalBinding/`에 없었습니다. + +## 해결 과정과 검증 +`setCoverageDirectory`, `setSourceMapCacheGetter`, `startCoverage`, `takeCoverage`, `stopCoverage`, `endCoverage`를 포함한 `ProfilerBinding` 타입을 작성하고, `typings/globals.d.ts`의 `InternalBindingMap`에 등록했습니다. +각 멤버를 C++ 등록 코드(`src/inspector_profiler.cc`)와 대조하고, `--expose-internals`로 실제 바인딩 값을 확인해 검증했습니다. + +## 배운 점 +정확한 선언을 작성하기 위해 실제 C++ 등록 코드와 런타임 값까지 대조해야 한다는 걸 배웠습니다. diff --git a/contributions/65661.md b/contributions/65661.md new file mode 100644 index 0000000..18c8c77 --- /dev/null +++ b/contributions/65661.md @@ -0,0 +1,13 @@ +--- +pr-url: https://github.com/nodejs/node/pull/65661 +--- +## 문제 내용 +`internalBinding('fs_event_wrap')`의 `FSEvent` 클래스에 대한 타입 선언이 없었습니다. + +## 해결 과정과 검증 +`FSEvent`의 `start`, `close`, `hasRef`, `ref`, `unref`, `onchange` 콜백을 포함한 `FsEventWrapBinding` 타입을 작성해 제출했습니다. +리뷰에서 `start()`의 `filename` 파라미터가 `string`뿐 아니라 Buffer 경로도 지원한다는 지적을 받아, `lib/internal/fs/watchers.js`와 `lib/internal/fs/utils.js`의 `validatePath` 구현을 직접 추적해 사실을 확인한 뒤 `string | Uint8Array`로 수정하는 후속 커밋을 올렸습니다. + +## 배운 점 +해당 API가 지원하는 입력 형태 전체를 선언이 다 커버하는지까지 확인해야 한다는 걸 배웠습니다. +같은 실수가 나오지 않도록, 관련된 모든 docs와 code를 살펴 타입을 빠트리지 않도록 하겠습니다. diff --git a/contributions/65662.md b/contributions/65662.md new file mode 100644 index 0000000..ce43347 --- /dev/null +++ b/contributions/65662.md @@ -0,0 +1,13 @@ +--- +pr-url: https://github.com/nodejs/node/pull/65662 +--- +## 문제 내용 +`internalBinding('task_queue')`에 대한 타입 선언이 없었습니다. + +## 해결 과정과 검증 +`enqueueMicrotask`, `setTickCallback`, `runMicrotasks`, `tickInfo`, `promiseRejectEvents`, `setPromiseRejectCallback`을 포함한 `TaskQueueBinding` 타입을 작성해 제출했습니다. +리뷰에서 `promiseRejectEvents` 상수를 `number`가 아닌 리터럴 타입으로 좁히자는 지적을 받아, V8 헤더(`deps/v8/include/v8-promise.h`)에서 실제 값(`kPromiseRejectWithNoHandler = 0`, `kPromiseHandlerAddedAfterReject = 1`)을 확인한 뒤 리터럴 유니온 타입으로 수정하는 후속 커밋을 올렸습니다. + +## 배운 점 +상수 값의 출처가 Node C++ 소스에서 안 끝나고 그 상위 계층(V8 등)까지 추적해야 확정되는 경우가 있고, +정의역이 유한한 상수는 처음부터 리터럴 타입으로 선언해야 한다는 걸 배웠습니다. diff --git a/contributions/65664.md b/contributions/65664.md new file mode 100644 index 0000000..db91768 --- /dev/null +++ b/contributions/65664.md @@ -0,0 +1,12 @@ +--- +pr-url: https://github.com/nodejs/node/pull/65664 +--- +## 문제 내용 +`internalBinding('stream_pipe')`의 `StreamPipe` 클래스에 대한 타입 선언이 없었습니다. + +## 해결 과정과 검증 +`StreamPipe`의 `unpipe`, `start`, `isClosed`, `pendingWrites`, `onunpipe`/`oncomplete` 콜백을 포함한 `StreamPipeBinding` 타입을 작성해 제출했습니다. +C++ 등록 코드(`src/stream_pipe.cc`)와 콜백 인자 개수를 대조해 검증했고, 검증 시점 이후 추가된 관련 커밋 2건도 diff로 재확인해 영향이 없음을 확인했습니다. + +## 배운 점 +검증과 제출 사이에 시간차가 있으면 그 사이 근거 소스가 바뀔 수 있으므로, 제출 직전에 관련 소스의 최신 변경 이력을 다시 확인해야 한다는 걸 배웠습니다.