2026-04-04
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 React Native 번들을 Hermes에서 실제로 돌리며 나온 런타임 오류를 계속 고쳤습니다. __esm 래퍼 안 클래스 선언 호이스팅(#694), Flow covariant·contravariant 클래스 프로퍼티 스트리핑(#695), IIFE 안 Object.defineProperty가 바깥 변수를 가리키던 문제(#696)를 병합했고, Hermes의 for-in이 반복마다 새 바인딩을 만들지 않아 __copyProps가 마지막 키만 잡던 문제를 forEach로 우회했습니다(#698). 여러 ESM 모듈의 _default 합성 변수가 충돌해 ErrorUtils 등이 덮어써지던 버그(#704), dev 모드에서 폴리필·banner가 빠지던 버그(#703), CJS 엔트리 자동 호출·hoisted var 중복·re-export default 할당 누락(#708~#710)도 수정했습니다.
ES5 클래스 변환은 React.Component 같은 표현식 super class(#701), 같은 이름 클래스가 여러 모듈에 있을 때 _super 매개변수로 부모를 격리하는 처리(#719), getter/setter의 configurable: true(#721), __callSuper와 Reflect.construct로 Error·Map 같은 네이티브 클래스 상속 지원(#722, #723), this를 _this로 바꾸는 범위 수정(#729, #730)으로 보강됐습니다. dev 번들링에서 extra_data 재할당 뒤 낡은 슬라이스를 읽어 죽던 문제(#724)와 optional chaining 변환 결과의 괄호 누락(#733)도 고쳤습니다.
번들러 rename이 코드 곳곳에 반영되지 않던 문제도 정리했습니다. ES5 구조 분해 키와 shorthand 확장(#700, #712), CJS export 바인딩(#717), JSX classic 모드의 React 변수와 태그 이름, JSX 멤버 식의 왼쪽 식별자(#726, #728, #731)가 대상입니다. 이 밖에 export type만 있는 CJS 모듈을 ESM으로 오판하던 버그(#713), 로더 없는 에셋의 조용한 실패를 빌드 에러로 바꾸고 RN 프리셋 에셋 확장자를 Metro 기본값 전체로 넓힌 작업(#714), JSON named export(#715), 래핑 모듈의 export *(#716), default와 named를 함께 쓰는 import(#718), Flow component 파라미터의 props 구조 분해 변환(#727)이 들어왔습니다.
bungae는 ZTS 서브프로세스 플러그인으로 에셋 파일을 AssetRegistry.registerAsset() 코드로 바꾸는 RN 에셋 플러그인을 추가해 이미지 치수 추출과 @2x/@3x 변형 탐색을 넣었고, AssetRegistry를 가상 모듈로 제공하며, dev 모드에서 process.env.NODE_ENV를 development로 define하도록 고쳤습니다.
공개 커밋 64개, 해당일 생성 또는 병합된 PR 34개를 정리했습니다. PR 생성 33개·병합 34개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- fix(zts-bundler): AssetRegistry를 가상 모듈로 제공
- feat(zts-bundler): RN 에셋 플러그인 + Metro assetExts 전체 지원
- fix(zts-bundler): dev 모드에서 process.env.NODE_ENV를 "development"로 define
ohah/zntc
- fix(transformer): optional chaining 변환 시 괄호 추가 (#732)
- fix(semantic): jsx_member_expression left side의 symbol 등록
- refactor: has_super 파라미터 제거, self.current_super_class 활용
- fix(transformer): super_call_this_alias를 field init에서만 활성화
- fix(transformer): /simplify 리뷰 반영
- fix(transformer): ES5 this→_this 치환 두 가지 버그 수정
- refactor(test): readFileSync를 static import로 변경
- style: oxfmt 포맷 적용
- fix(codegen): JSX 태그 이름에 번들러 rename 반영
- fix(transformer): Flow component 파라미터를 props destructuring으로 변환
- fix(codegen): JSX classic 모드에서 번들러 리네이밍된 React 변수 반영
- fix(transformer): postProcessSuperCallBody에서 extra_data dangling pointer 수정
- fix(transformer): __callSuper + instance fields를 _this에 초기화
- feat(transformer): __callSuper + Reflect.construct로 네이티브 클래스 extends 지원
- fix(transformer): ES5 class getter/setter에 configurable: true 추가
- test(integration): ES5 class super() 스코프 격리 통합 테스트 추가
- fix(transformer): ES5 class super() 호출에서 IIFE _super 매개변수 사용
- fix(codegen): default+named 혼합 import에도 __toESM 래핑 적용
- refactor(codegen): /simplify 리뷰 반영
- fix(codegen): import Default, { named } 동시 사용 시 default 바인딩 누락 수정
- fix(codegen): CJS export binding에서 linker rename을 반영
- refactor(bundler): entry 감지를 is_entry_point 플래그 기반으로 전환
- fix(bundler): ESM 래핑 모듈의 export * from (re_export_all) 지원
- refactor(json_to_esm): /simplify 리뷰 반영
- fix(bundler): JSON 모듈 named export 지원
- test: 에셋 로더 테스트 케이스 보강
- feat(bundler): RN 프리셋 에셋 확장자를 Metro defaults 전체로 확장
- fix(bundler): 플러그인 load 훅이 에셋 모듈을 오버라이드할 수 있도록 수정
- style: oxfmt
- style: zig fmt
- fix(bundler): loader 미설정 에셋 파일 silent failure → 빌드 에러 + RN 프리셋 기본 로더
- refactor: isTypeOnlyDeclaration을 Tag 메서드로 추출 + 혼합 export 테스트 추가
- test: export type/interface + module.exports CJS 판별 테스트 추가 (#713)
- fix(parser): export type alias/interface가 ESM으로 잘못 판별되는 버그 수정
- fix(codegen): ES2015 shorthand 확장 시 object property key에 scope hoisting rename이 적용되는 버그 수정
- refactor(emitter): /simplify 리뷰 반영
- fix(emitter): export { default } from re-export가 __esm 래퍼에서 할당 누락 수정 (#705)
- style: oxfmt 포맷 적용
- fix(emitter): import + export default 패턴에서 hoisted var 중복 선언 수정 (#706)
- fix(emitter): CJS 엔트리 모듈이 IIFE/ESM 번들에서 자동 호출되지 않는 버그 수정 (#707)
- test(linker): _default 합성 변수 충돌 방지 테스트 추가
- refactor(linker): addNameOwner 헬퍼 추출, 중복 코멘트·로직 정리
- fix(linker): _default 합성 변수 충돌으로 ESM default export가 덮어쓰이는 버그
- test: dev mode polyfill/banner 포함 검증 테스트 추가
- fix(bundler): dev mode에서 --polyfill, --banner:js가 번들에 포함되지 않는 버그
- fix(test): hermes-runtime 테스트가 CI에서 이전 테스트 결과에 의존하던 문제
- fix: lowerClassExpression에서도 표현식 super class 지원 추가
- fix(transformer): 표현식 super class (e.g. React.Component) ES5 변환 누락
- test: RN 번들 Node.js 실행 검증 추가 (ES5 + non-ES5)
- fix(transformer): ES5 destructuring에서 프로퍼티 키가 linker에 의해 리네이밍되는 버그
- refactor: runHermes shell→writeFileSync, findHermesc null 검증 추가
- test: Hermes 런타임 테스트 추가 + CI hermes-engine-cli 설정
- fix(runtime): __copyProps forEach로 변경 (Hermes for-in 스코프 버그)
- fix(runtime): __copyProps for-in 클로저가 Hermes에서 마지막 키만 캡처하는 버그
- test: class IIFE prototype 참조 + Flow covariant 스트리핑 + ESM class 호이스팅 회귀 테스트
- refactor: unused class_name_old_idx 파라미터 제거
- fix(transformer): IIFE 내부 Object.defineProperty가 외부 변수를 잘못 참조하는 버그
- fix: ES5 downlevel 경로에서도 Flow variance 프로퍼티 스트리핑 누락 수정
- fix(flow): covariant/contravariant 클래스 프로퍼티 타입 어노테이션 스트리핑
- refactor: 코멘트 정리 — what 중복 제거, why만 유지
- fix(bundler): __esm 래퍼 내 class 선언 호이스팅 누락 수정
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.