Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions contributions/65660.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
pr-url: https://github.com/nodejs/node/pull/65660
---
## 문제 내용
Node.js의 `internalBinding('profiler')`에 대한 타입 선언이 `typings/internalBinding/`에 없었습니다.
Comment on lines +1 to +5

## 해결 과정과 검증
`setCoverageDirectory`, `setSourceMapCacheGetter`, `startCoverage`, `takeCoverage`, `stopCoverage`, `endCoverage`를 포함한 `ProfilerBinding` 타입을 작성하고, `typings/globals.d.ts`의 `InternalBindingMap`에 등록했습니다.
각 멤버를 C++ 등록 코드(`src/inspector_profiler.cc`)와 대조하고, `--expose-internals`로 실제 바인딩 값을 확인해 검증했습니다.

## 배운 점
정확한 선언을 작성하기 위해 실제 C++ 등록 코드와 런타임 값까지 대조해야 한다는 걸 배웠습니다.
13 changes: 13 additions & 0 deletions contributions/65661.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
pr-url: https://github.com/nodejs/node/pull/65661
---
## 문제 내용
`internalBinding('fs_event_wrap')`의 `FSEvent` 클래스에 대한 타입 선언이 없었습니다.
Comment on lines +1 to +5

## 해결 과정과 검증
`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를 살펴 타입을 빠트리지 않도록 하겠습니다.
13 changes: 13 additions & 0 deletions contributions/65662.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
pr-url: https://github.com/nodejs/node/pull/65662
---
## 문제 내용
`internalBinding('task_queue')`에 대한 타입 선언이 없었습니다.
Comment on lines +1 to +5

## 해결 과정과 검증
`enqueueMicrotask`, `setTickCallback`, `runMicrotasks`, `tickInfo`, `promiseRejectEvents`, `setPromiseRejectCallback`을 포함한 `TaskQueueBinding` 타입을 작성해 제출했습니다.
리뷰에서 `promiseRejectEvents` 상수를 `number`가 아닌 리터럴 타입으로 좁히자는 지적을 받아, V8 헤더(`deps/v8/include/v8-promise.h`)에서 실제 값(`kPromiseRejectWithNoHandler = 0`, `kPromiseHandlerAddedAfterReject = 1`)을 확인한 뒤 리터럴 유니온 타입으로 수정하는 후속 커밋을 올렸습니다.

## 배운 점
상수 값의 출처가 Node C++ 소스에서 안 끝나고 그 상위 계층(V8 등)까지 추적해야 확정되는 경우가 있고,
정의역이 유한한 상수는 처음부터 리터럴 타입으로 선언해야 한다는 걸 배웠습니다.
12 changes: 12 additions & 0 deletions contributions/65664.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
pr-url: https://github.com/nodejs/node/pull/65664
---
## 문제 내용
`internalBinding('stream_pipe')`의 `StreamPipe` 클래스에 대한 타입 선언이 없었습니다.
Comment on lines +1 to +5

## 해결 과정과 검증
`StreamPipe`의 `unpipe`, `start`, `isClosed`, `pendingWrites`, `onunpipe`/`oncomplete` 콜백을 포함한 `StreamPipeBinding` 타입을 작성해 제출했습니다.
C++ 등록 코드(`src/stream_pipe.cc`)와 콜백 인자 개수를 대조해 검증했고, 검증 시점 이후 추가된 관련 커밋 2건도 diff로 재확인해 영향이 없음을 확인했습니다.

## 배운 점
검증과 제출 사이에 시간차가 있으면 그 사이 근거 소스가 바뀔 수 있으므로, 제출 직전에 관련 소스의 최신 변경 이력을 다시 확인해야 한다는 걸 배웠습니다.