2026-04-05

날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.

요약 (AI 작성)

zntc는 JSX 처리를 codegen에서 떼어 냈습니다. 리팩터링 전 동작을 스냅샷 테스트 20개로 고정한 뒤, 트랜스파일 모드와 번들 모드 모두 Transformer 패스가 JSX를 함수 호출로 낮추게 하고 codegen의 JSX 코드 약 800줄을 지웠습니다(#764). 앞서 HTML 엔티티 디코딩과 esbuild 방식 텍스트 줄 정규화 등 JSX 스펙 준수 수정(#761~#763)이 들어갔고, 분리 뒤에는 rest 요소가 JSX 분기로 잘못 가던 문제(#766)와 JSX spread props의 ES5 변환 누락(#767)을 고쳤습니다. 번들 모드에도 JSX 옵션을 넘기고 RN 기본값을 automatic으로 두었으며(#746), automatic 변환 때 react/jsx-runtime import를 자동 주입하고 그 합성 바인딩의 Span 충돌과 래핑 모듈 안 스코프 문제를 바로잡았습니다(#752, #753, #757, #759).

번들러에는 tree shaking과 함께 동작하는 번들 모드 소스맵이 생겼고(#735~#737), 서브프로세스 플러그인의 JSON 파싱 메모리 누수를 막았습니다(#738, #739). __esm 모듈은 rolldown 방식으로 함수 선언을 래퍼 밖에 두는 live binding을 적용해 TDZ 문제를 풀었고(#743, #744), namespace import를 exports_xxx로 바꾸던 rename은 걷어 냈습니다(#747). Hermes에서 속성 재정의가 막히던 문제는 런타임 헬퍼의 configurable: true로 고친 뒤 react-native 플랫폼에서 자동으로 켜지는 configurable_exports 옵션으로 분리했고(#745, #749), tsconfig를 번들 분기 전에 읽어 번들 모드에서도 jsx·decorator·sourcemap 설정이 반영되게 했습니다(#748).

ES5 변환에서는 화살표 함수, 클래스 메서드·setter, constructor·async·generator, private method 추출 함수가 매개변수 구조 분해·rest·기본값 lowering을 거치지 않던 경로를 모두 막았고(#768~#771), __rest 제외 목록에 문자열 키가 빠지던 문제(#772)를 고쳤습니다. Flow component 문법의 ref 파라미터는 hermes-parser처럼 React.forwardRef로 감쌉니다(#773). old/new 두 AST를 하나로 합치는 리팩터링 #775는 이날 PR이 열렸습니다.

bungae는 ExampleApp 화면이 일부만 그려지는 문제를 여러 디버그 커밋으로 추적한 끝에 App.tsx의 React default import 누락을 고치고 디버그 코드를 지웠으며, dev 모드에서 --jsx-dev를 넘겨 React DevTools가 컴포넌트 소스 위치를 보이게 했습니다. suji는 @suji/node SDK와 예제 전환 PR #8을 병합했습니다.

공개 커밋 57개, 해당일 생성 또는 병합된 PR 40개를 정리했습니다. PR 생성 39개·병합 39개는 같은 PR이 양쪽에 포함될 수 있습니다.

커밋

ohah/bungae

ohah/zntc

PR (해당일 생성/머지)

상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.

저장소PR해당일 활동상태대상 브랜치제목
ohah/suji#8병합mergedmain@suji/node SDK 추가 + 예제 전환
ohah/zntc#775생성mergedmainrefactor: old_ast/new_ast 분리 → 단일 AST (append-only) 통합
ohah/zntc#773생성 · 병합mergedmainfix(flow): component ref → React.forwardRef 래핑
ohah/zntc#772생성 · 병합mergedmainfix(transformer): __rest 제외 목록에서 string literal 키 누락 수정
ohah/zntc#771생성 · 병합mergedmainfix(transformer): buildStandaloneFunc ES5 params lowering 누락 수정
ohah/zntc#770생성 · 병합mergedmainfix(transformer): constructor/async/generator ES5 params lowering 누락 일괄 수정
ohah/zntc#769생성 · 병합mergedmainfix(transformer): class method/setter ES5 destructuring lowering 누락 수정
ohah/zntc#768생성 · 병합mergedmainfix(transformer): 화살표 함수 ES5 destructuring/rest lowering 누락 수정
ohah/zntc#767생성 · 병합mergedmainfix(transformer): JSX spread props ES5 lowering + es_helpers 공유 헬퍼
ohah/zntc#766생성 · 병합mergedmainfix(transformer): rest_element/yield/decorator JSX 분기 잘못 라우팅 수정
ohah/zntc#765생성 · 병합mergedmainfix(jsx_lowering): namespaced tag + dead code + control char escape
ohah/zntc#764생성 · 병합mergedmainrefactor: JSX lowering을 codegen에서 Transformer 패스로 이동
ohah/zntc#763생성 · 병합mergedmainfix(codegen): JSX entity 제어문자 이스케이프 + StaticStringMap + 루프 정리
ohah/zntc#762생성 · 병합mergedmainfeat(codegen): JSX 스펙 준수 5가지 수정 (entity, 정규���, UTF-16, key-spread)
ohah/zntc#761생성 · 병합mergedmainfix(codegen): JSX single child 텍스트 개행 정규화 누락 수정
ohah/zntc#760생성 · 병합mergedmaintest(bundler): ESM-wrapped JSX binding 스코프 테스트 3개 추가
ohah/zntc#759생성 · 병합mergedmainfix(emitter): ESM-wrapped 모듈 JSX binding 스코프 + hoisted function JSX 옵션 누락 수정
ohah/zntc#758생성 · 병합mergedmaintest(bundler): JSX automatic import 다양한 케이스 테스트 7개 추가
ohah/zntc#757생성 · 병합mergedmainfix(linker): ESM-wrapped 모듈에서 synthetic JSX binding skip 버그 수정
ohah/zntc#756생성 · 병합mergedmainfix: 실수로 삭제된 tests/benchmark 파일 복원
ohah/zntc#755생성 · 병합mergedmaintest(bundler): JSX automatic import injection 테스트 5개 추가
ohah/zntc#754생성 · 병합mergedmainchore: 실수로 커밋된 임시 파일 제거
ohah/zntc#753생성 · 병합mergedmainfix(bundler): JSX synthetic import Span 충돌 버그 수정 + 최적화
ohah/zntc#752생성 · 병합mergedmainfix(bundler): automatic JSX transform jsx-runtime import 자동 주입
ohah/zntc#751생성 · 병합mergedmainperf(linker): buildInlineObjectStr cache miss double-dupe 제거
ohah/zntc#750생성 · 병합mergedmainperf(linker): namespace import export 수집 결과 캐싱
ohah/zntc#749생성 · 병합mergedmainfeat(runtime): configurable_exports 옵션 추가 (RN 자동 활성화)
ohah/zntc#748생성 · 병합mergedmainfix(main): tsconfig 로딩 구조 수정 + jsx_runtime optional 전환
ohah/zntc#747생성 · 병합mergedmainfix(linker): ESM 래핑 모듈 namespace import exports_xxx rename 버그 수정
ohah/zntc#746생성 · 병합mergedmainfix(bundler): JSX 옵션 번들러 전달 + RN automatic 기본값
ohah/zntc#745생성 · 병합mergedmainfix(runtime): Object.defineProperty에 configurable: true 추가
ohah/zntc#744생성 · 병합mergedmainfix(bundler): __esm 모듈 간 live binding 적용 (rolldown 방식)
ohah/zntc#743생성 · 병합mergedmainfix(bundler): __esm 함수 TDZ 문제 수정 (rolldown 방식)
ohah/zntc#742생성 · 병합mergedmainfix(codegen): JSX factory rename이 일부 모듈에서 누락되는 문제
ohah/zntc#739생성 · 병합mergedmainrefactor(bundler): parseFromSliceLeaky → parseFromSlice
ohah/zntc#738생성 · 병합mergedmainfix(bundler): subprocess plugin JSON 파싱 메모리릭 수정
ohah/zntc#737생성 · 병합mergedmainfix(bundler): sourceMappingURL 실제 파일명 + 디버그 코드 제거
ohah/zntc#736생성 · 병합mergedmainfeat(bundler): emitWithTreeShaking에 소스맵 생성 통합
ohah/zntc#735생성 · 병합mergedmainfeat(bundler): 번들 모드 소스맵 생성 지원
ohah/zntc#734생성 · 병합mergedmainrefactor(transformer): makeParenExpr 헬퍼 추출