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
- debug: runZtsBuild에 args 로그 추가
- feat(zts-bundler): RN 전역 식별자 예약 (--global-identifier)
- fix(zts-bundler): ZTS 바이너리 경로 탐색 확장
- fix(zts-bundler): banner prelude 구문 오류 수정
- fix(zts-bundler): banner에 global 변수 정의 추가 (Hermes 호환)
- style: oxfmt 포맷팅 수정
- feat(zts-bundler): RN 폴리필 + InitializeCore 전달 (Metro 호환)
- chore: zts로 변경
ohah/ohah.github.io
- docs: update CRON_CRD_WRITE.md timestamp (2026-04-04 01:29)
- docs: CRON 30분마다 맞춤법 교정 - 2026-04-03 03:30 AM (Asia/Seoul)
ohah/zntc
- refactor(transformer): SWC 호환 IIFE 패턴 (fresh identifier + _super 매개변수)
- fix(transformer): IIFE 내부 함수에 별도 이름 + static fields IIFE 밖 배치
- fix(transformer): IIFE 내부 함수에 별도 이름 + static fields IIFE 밖 배치
- fix(emitter): named fn expr 이름 제거 시 리네이밍된 base name으로 매칭
- feat(linker): --global-identifier 예약 전역 식별자 지원
- fix(transformer): class → IIFE 패턴으로 ES5 downlevel (SWC 호환)
- fix(transformer): class → IIFE 패턴으로 ES5 downlevel (SWC 호환)
- fix(emitter): --run-before-main 모듈을 엔트리 직전에 강제 호출
- fix: 에러 코드 프레임 출력 복원 (transpile.zig ErrorCallback)
- fix: TranspileResult 에러 경로 버그 수정 + TranspileOptions 중복 제거
- refactor: main.zig transpileFile을 transpile.zig 호출로 리팩터링
- feat: 독립 transpile 모듈 추가 + 폴리필 Flow strip
- test: TSC 스냅샷 업데이트 (new Foo()() → new Foo() 수정 반영)
- fix: lint 경고 수정 (unused import, oxfmt)
- feat(bundler): --polyfill, --run-before-main 옵션 추가 (Metro 호환)
- feat(bundler): --platform=react-native에서 ESM 모듈 lazy loading (Metro 호환)
- refactor: symbol_id 전파 헬퍼 통합 + while-loop 최적화
- fix(codegen): __esm import destructuring에서 renamed 이름을 키로 사용하는 버그 수정
- test(integration): ES5 + bundle rename symbol_id 전파 회귀 테스트 추가
- fix(transformer): optional chaining lowering 시 복제된 노드에 symbol_id 누락 수정
- fix(codegen): export default class ES5 lowering 시 var X = OriginalName 생성 버그 수정
- fix(transformer): ES5 class 변환 시 rename된 심볼이 __extends/prototype 참조에 반영되지 않는 버그 수정
- refactor: execIndexLessThan → bundleOrderLessThan rename + 가독성 개선
- fix(emitter): __esm/__commonJS 모듈이 scope-hoisted 모듈보다 먼저 emit되도록 정렬
- refactor(parser): speculative type argument 파싱 3곳을 trySkipTypeArgsSpeculative로 통합
- fix(parser): new expression에서 TS/Flow type argument가 이중 호출로 변환되는 버그 수정
- chore: lint/format 수정 — 미사용 import 제거 + fixture 디렉토리 lint 제외
- fix(linker): __esm import binding이 scope-hoisted 타겟과 이름 충돌 시 잘못된 rename 방지
- fix(codegen): __esm body에서 CJS default/namespace import에 __toESM 래핑 추가
- refactor: /simplify — linker __esm skip 통합 + 테스트 보강
- fix(emitter): __esm 실행 순서 보장 — rolldown 방식 strict execution order
- refactor: /simplify — docstring 위치 수정 + collectImportBindingNames 헬퍼 추출
- fix(emitter): __esm import 변수 호이스팅 + CJS import rename 적용
- test: Flow type cast + namespace import, var hoisting 테스트 추가
- fix(semantic): Flow 타입 캐스트 내부 expression의 symbol_id 누락
- fix(emitter): __esm var/function 호이스팅 — esbuild/rolldown 방식
- WIP: fix(emitter): __esm var/function 호이스팅 (esbuild/rolldown 방식)
- fix(bundler): JSON 모듈 require 시 __commonJS 래핑 사용 (esbuild 호환)
- style: zig fmt
- fix(resolver): self-reference skip 제거 — ProgressBarAndroid 등 정당한 자기참조 깨짐
- fix(bundler): resolve self-reference skip + export getter rename
- fix: dev 모드(--serve/--watch)에서 DEV=true, NODE_ENV="development"
- fix(codegen): __esm export default — _default 미정의 + 중복 선언 해결
- test: __esm 래퍼 런타임 안전성 검증 테스트 추가
- fix(linker): __esm namespace import → exports_xxx rename + 테스트 5개 (#652)
- fix(emitter): __export()를 __esm 래퍼 안으로 이동
- fix(codegen): __esm 모듈의 CJS export 출력 억제 (exports.x, module.exports)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.