2026-04-03

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

요약 (AI 작성)

zntc는 전날 도입한 __esm 래퍼를 실제 React Native 번들에서 돌리며 드러난 결함을 잡았습니다. __esm 모듈의 CJS export 출력 억제(#658), __export()를 래퍼 안으로 옮긴 수정(#659), namespace import를 exports_xxx로 바꾸는 rename(#660), export default의 _default 미정의(#662), import 변수 호이스팅(#668), rolldown 방식의 엄격한 실행 순서(#669), CJS default import의 __toESM 래핑(#670), 래핑 모듈을 scope hoisting 모듈보다 먼저 내보내는 정렬(#674) 등이 이어졌습니다. 번들 rename이 ES5 클래스 변환과 optional chaining 복제 노드에 반영되지 않던 symbol_id 전파 누락(#676~#678), Flow 타입 캐스트 안 식의 symbol_id 누락(#667), 제네릭 new 식이 이중 호출로 출력되던 파서 버그(#672)도 고쳤습니다.

Metro 호환 기능으로는 --platform=react-native에서 ESM 모듈을 require 시점에 실행하는 지연 로딩(#682), 폴리필과 초기화 모듈을 넣는 --polyfill·--run-before-main(#683, #686), RN 전역 이름과 모듈 변수 충돌을 막는 --global-identifier(#689)를 추가했고, dev 모드에서는 __DEV__를 true로 둡니다(#663). I/O 없는 독립 transpile 모듈을 분리해 폴리필의 Flow 구문을 걷어 내게 했으며(#685), ES5 클래스 다운레벨링은 Hermes 이름 충돌을 피하려고 SWC와 같은 IIFE 패턴으로 바꿨습니다(#691, #693). __esm 래퍼 안 클래스 선언 호이스팅 수정 #694는 이날 PR이 열렸습니다.

bungae는 연동 대상 표기를 zts로 바꾸고, ZTS의 새 옵션으로 RN 폴리필과 InitializeCore를 넘겨 Metro와 같은 초기화 순서를 맞췄습니다(#41). Hermes에 global이 없어 생기는 에러를 banner prelude로 막고, 바이너리 경로 탐색과 전역 식별자 예약도 붙였습니다. suji는 libnode 다운로드 URL을 자체 릴리스로 고정하고(#5), Node.js 백엔드의 크로스 호출과 async invoke(#6), 문서 동기화와 suji.json JSON Schema(#7)를 병합했으며, @suji/node SDK PR #8을 열었습니다. ohah.github.io에는 맞춤법 크론이 수정 없이 검사만 남긴 커밋이 있습니다.

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

커밋

ohah/bungae

ohah/ohah.github.io

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/bungae#41생성 · 병합mergedmainfeat(zts-bundler): RN 폴리필 + InitializeCore 전달 (Metro 호환)
ohah/suji#8생성mergedmain@suji/node SDK 추가 + 예제 전환
ohah/suji#7생성 · 병합mergedmain문서 동기화 + suji.json JSON Schema 추가
ohah/suji#6생성 · 병합mergedmainNode.js 백엔드 크로스 호출 + async invoke + 예제 추가
ohah/suji#5생성 · 병합mergedmainchore: ibnode 다운로드 URL을 ohah/suji 릴리즈로 고정
ohah/zntc#694생성mergedmainfix(bundler): __esm 래퍼 내 class 선언 호이스팅 누락 수정
ohah/zntc#693생성 · 병합mergedmainrefactor(transformer): SWC 호환 IIFE 패턴 (fresh identifier + _super)
ohah/zntc#692생성closedmainfix(transformer): SWC 호환 IIFE 패턴 (parent 매개변수 + fresh identifier)
ohah/zntc#691생성 · 병합mergedmainfix(transformer): IIFE 내부 함수에 별도 이름 (_ClassName) + classCallCheck
ohah/zntc#690생성 · 병합mergedmainfix(emitter): named fn expr base name 매칭 수정
ohah/zntc#689생성 · 병합mergedmainfeat(linker): --global-identifier 예약 전역 식별자 (롤리팝 호환)
ohah/zntc#688생성 · 병합mergedmainfix(emitter): Hermes named function expression 이름 충돌 방지
ohah/zntc#687생성 · 병합mergedmainfix(emitter): __esm 호이스팅 function 이름 충돌 방지 (Hermes)
ohah/zntc#686생성 · 병합mergedmainfix(emitter): --run-before-main 모듈을 엔트리 직전에 강제 호출
ohah/zntc#685생성 · 병합mergedmainfeat: 독립 transpile 모듈 + 폴리필 Flow strip
ohah/zntc#684생성 · 병합mergedmaintest: TSC 스냅샷 업데이트 (new Foo()() → new Foo())
ohah/zntc#683생성 · 병합mergedmainfeat(bundler): --polyfill, --run-before-main 옵션 추가 (Metro 호환)
ohah/zntc#682생성 · 병합mergedmainfeat(bundler): --platform=react-native ESM 모듈 lazy loading (Metro 호환)
ohah/zntc#681생성 · 병합mergedmainrefactor: symbol_id 전파 헬퍼 통합 + while-loop 최적화
ohah/zntc#680생성 · 병합mergedmainfix(codegen): __esm import destructuring rename 키 불일치 수정
ohah/zntc#679생성 · 병합mergedmaintest(integration): ES5 + bundle rename symbol_id 회귀 테스트 추가
ohah/zntc#678생성 · 병합mergedmainfix(transformer): optional chaining 복제 노드 symbol_id 누락 수정
ohah/zntc#677생성 · 병합mergedmainfix(codegen): export default class ES5 rename 시 var 덮어쓰기 버그 수정
ohah/zntc#676생성 · 병합mergedmainfix(transformer): ES5 class rename symbol_id 전파 누락 수정
ohah/zntc#675생성 · 병합mergedmainrefactor: execIndexLessThan → bundleOrderLessThan rename
ohah/zntc#674생성 · 병합mergedmainfix(emitter): __esm 모듈 정렬 — scope-hoisted 호출 전 선언 보장
ohah/zntc#673생성 · 병합mergedmainrefactor(parser): speculative type argument 파싱 통합
ohah/zntc#672생성 · 병합mergedmainfix(parser): new X<T>() type argument 이중 호출 버그 수정
ohah/zntc#671생성 · 병합mergedmainfix(linker): __esm import binding rename — scope-hoisted 타겟 충돌 방지
ohah/zntc#670생성 · 병합mergedmainfix(codegen): __esm body CJS import __toESM 래핑
ohah/zntc#669생성 · 병합mergedmainfix(emitter): __esm 실행 순서 보장
ohah/zntc#668생성 · 병합mergedmainfix(emitter): __esm import 변수 호이스팅 + CJS import rename 적용
ohah/zntc#667생성 · 병합mergedmainfix(semantic): Flow 타입 캐스트 내부 expression symbol_id 누락 + 테스트
ohah/zntc#666생성 · 병합mergedmainWIP: fix(emitter): __esm var/function 호이스팅 (esbuild/rolldown 방식)
ohah/zntc#664생성 · 병합mergedmainfix(bundler): resolve self-reference skip + export getter rename
ohah/zntc#663생성 · 병합mergedmainfix: dev 모드에서 DEV=true + NODE_ENV=development
ohah/zntc#662생성 · 병합mergedmainfix(codegen): __esm export default _default 미정의 + 중복 선언
ohah/zntc#661생성 · 병합mergedmaintest: __esm 래퍼 런타임 안전성 정적 검증 테스트
ohah/zntc#660생성 · 병합mergedmainfix(linker): __esm namespace import exports_xxx rename + 테스트 5개
ohah/zntc#659생성 · 병합mergedmainfix(emitter): __export()를 __esm 래퍼 안으로 이동 — deepFreeze 에러 해결
ohah/zntc#658생성 · 병합mergedmainfix(codegen): __esm 모듈 exports 미정의 에러 — CJS export 출력 억제