2026-04-06
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 구조 개편과 ES5 다운레벨링 마무리를 함께 진행했습니다. 파서와 트랜스포머가 따로 쓰던 old/new AST를 하나의 append-only AST로 합쳤고(#775), ES2015 매개변수 lowering을 별도 2차 패스로 옮겼으며(#777), 모든 태그의 데이터 레이아웃을 한 표에 등록하고 comptime으로 검증하는 노드 레이아웃 인프라를 들였습니다. 이 과정에서 object_property·export default·JSX fragment 등의 레이아웃 오분류(#791, #792)와 클래스 접근자 변환의 dangling pointer 크래시(#793)가 드러나 고쳐졌습니다.
ES5 변환에는 tagged template, new.target(#781), for 루프 let/const 클로저 캡처를 위한 _loop 함수 추출, 블록 단위 let/const 이름 격리와 그 구조 분해 지원(#797, #801), using/await using과 --sourcemap-debug-ids(#822)가 추가됐습니다. let을 var로 바꿀 때 = void 0 초기화가 빠져 RN Fabric 레이아웃이 깨지던 문제(#818), 클래스 필드 화살표 함수의 _this 캡처(#819), 템플릿 보간식과 spread new의 괄호(#795, #796), __rest의 Symbol 프로퍼티 복사(#817)도 고쳤습니다. kangax compat-table 러너를 CI에 붙여 ES5 다운레벨링 99%를 기록했고(#815), 트랜스파일러로는 통과할 수 없는 항목을 스킵해 ES5 타깃 237개를 모두 통과했으며, SWC와 실행 결과를 비교하는 테스트도 CI에 넣었습니다(#820).
번들러는 RN 실행 안정화를 이어 갔습니다. 런타임 헬퍼 __copyProps·__toCommonJS를 Rolldown과 같은 방식으로 바꿔 non-enumerable getter를 살리고(#805), RN 엔트리 모듈도 __esm으로 감싸 초기화 순서를 보장하며 IIFE 래핑을 없앴습니다(#806, #807). namespace 인라인 객체를 getter로 만들어 live binding을 보존하고(#810), ESM default re-export의 __toESM 누락(#813), 자기 자신을 require하는 경우와 --shim-missing-exports(#814), top-level await 모듈의 async 래핑(#780), 번들 소스맵의 sourcesContent와 preamble 오프셋(#804)을 처리했습니다.
bungae는 prod 빌드에서 에셋 파일을 출력 디렉터리로 복사하고 플랫폼별 스케일을 거르며 WebP/BMP 치수도 읽게 했고, global을 덮어쓰지 않도록 __BUNGAE_GLOBAL__로 치환하고 폴리필용 폴백을 두었습니다. suji는 윈도우 기능의 설계 결정(메인 윈도우 개념 제거, 이벤트 콜백의 preventDefault 등)과 테스트 계획을 문서로 정리했습니다. ohah.github.io에는 ZTS 개발기 3-9·3-10과 3월 28일부터의 오늘의 커밋 페이지가 추가됐습니다.
공개 커밋 66개, 해당일 생성 또는 병합된 PR 38개를 정리했습니다. PR 생성 37개·병합 37개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- fix(zts-bundler): global 폴백 추가 — 폴리필이 참조하는 global 보장
- fix(zts-bundler): global → BUNGAE_GLOBAL 치환 (롤다운 호환)
- fix(zts-bundler): IIFE 주석 정리 — RN은 자체 JS 컨텍스트 사용
- fix(zts-bundler): 에셋 복사 + 플랫폼 스케일 필터 + WebP/BMP 치수 + codegen 가이드
ohah/ohah.github.io
- docs: 오늘의 커밋 3/28~4/6 일괄 추가 (10일분)
- docs: 오늘의 커밋 2026-04-07 추가 — ZTS kangax 99%, Bungae RN 수정
- docs: ZTS 개발기 3-9, 3-10 추가 — ES5 다운레벨링 완성 + RN 플랫폼 + 최종 성능
ohah/suji
ohah/zntc
- docs(ROADMAP): using/sourcemapDebugIds 완료 반영 + 번들러 인프라 미구현 테이블 추가
- chore: bun.lock 업데이트 (@swc/cli, @swc/core 추가)
- feat: sourcemapDebugIds + using/await using 다운레벨링
- docs: 세션 성과 반영 — Phase 24~26, compat-table/SWC 테스트, shimMissingExports
- feat(test): ZTS vs SWC ES5 다운레벨링 비교 테스트 + CI
- fix(transformer): class field arrow function의 _this 캡처 누락 수정
- fix(transformer): let → var 변환 시 = void 0 초기화 누락 수정
- fix(runtime): __rest에서 Symbol 프로퍼티 복사 누락 수정
- refactor: /simplify 리뷰 반영 — super this 헬퍼 추출, generator proto Symbol 안전성
- fix(test): 트랜스파일러 통과 불가능한 compat-table 테스트 스킵
- feat(transformer): kangax compat-table 테스트 러너 + ES5 다운레벨링 99% 달성
- fix(linker): self-require/re-export 자기참조 방지 + shimMissingExports + RN 프리셋 정렬
- style: oxfmt 포맷 수정
- fix(linker): ESM default re-export에서 __toESM 누락으로 CJS .default가 undefined (#812)
- fix(linker): namespace getter에서 JS 예약어 따옴표 처리 + 테스트 추가
- fix(linker): namespace 인라인 객체를 getter로 생성하여 live binding 보존
- refactor: /simplify 리뷰 반영 — 매직 넘버, 중복 주석, 깨진 테스트 수정
- fix(bundler): 런타임 헬퍼 ES5 호환 + 합성 노드 주석 위치 수정
- fix(bundler): RN 플랫폼에서 IIFE 래핑 제거
- fix(bundler): RN 엔트리 모듈도 __esm 래핑하여 초기화 순서 보장
- fix(bundler): __copyProps/__toCommonJS 런타임 헬퍼를 Rolldown 호환으로 수정
- fix(transformer): shorthand property에서 scope hoisting rename 미적용 수정
- refactor(semantic): flow_component_wrapper 방문 로직을 별도 메서드로 추출
- refactor: /simplify 리뷰 반영 — 소스맵 매핑 헬퍼 추출
- fix(sourcemap): 번들 소스맵에 sourcesContent 추가 및 preamble 오프셋 수정
- fix(semantic): Flow component syntax body의 symbol_id 미설정 수정
- fix(codegen): export default <identifier> mangling 시 할당문 누락 수정
- fix(transformer): block scoping 격리에서 destructuring 패턴 지원 (#800)
- refactor: /simplify 리뷰 반영 — block scoping 정리
- refactor: /simplify 리뷰 반영 — block scoping 정리
- feat(transformer): block scoping 블록 단위 let/const 스코프 격리 (#784)
- fix(transformer): spread in new expression에서 괄호 누락 수정 (#783)
- fix(transformer): template literal 변환에서 보간 표현식 괄호 추가 (#782)
- refactor: /simplify 리뷰 반영 — dangling pointer 수정 정리
- fix(transformer): class accessor 변환에서 extra_data dangling pointer 크래시 수정 (#788)
- fix(ast): export_default_declaration, jsx_fragment 노드 레이아웃 오분류 수정
- fix(ast): object_property 노드 레이아웃 오분류 수정 (#790)
- refactor: /simplify 리뷰 반영 — 중복 제거 + 코멘트 정리
- fix(transformer): block scoping 재귀→반복 변환 + AST 노드 레이아웃 오분류 수정
- refactor: /simplify 스킵 항목 해소
- fix(transformer): /simplify 리뷰 반영 — 버그 3개 수정
- fix(transformer): getNodeText에서 string_table 참조 처리 누락 수정
- refactor(ast): comptime 노드 레이아웃 인프라 — Tag.dataKind/extraChildOffsets/extraListOffsets
- fix(bundler): TLA scope-hoisted IIFE를 async function으로 감싸기 (#779)
- refactor: /simplify 리뷰 반영 — 버그 수정 + 코드 품질 개선
- feat(transformer): for-loop let/const 클로저 캡처 IIFE 추출 (Phase 4)
- feat(transformer): tagged template literal 다운레벨링 구현
- feat(transformer): new.target 다운레벨링 구현
- fix(transformer): for-of 블록 없는 body에서 변수 바인딩 누락 수정
- test: ES2015 다운레벨링 테스트 38개 추가 (SWC 대비 커버리지 보강)
- fix(bundler): __esm 래핑 시 TLA async 키워드 누락 수정 + 문서 현행화
- refactor: /simplify 리뷰 반영 — 중복 제거 + pass2 visitNode 제거
- refactor: ES2015 params lowering을 2-pass로 전환 (Phase 4)
- test: template literal 스냅샷 업데이트
- refactor(flow): component ref 변환을 파서로 이동 (Phase 3)
- refactor: linker/emitter new_ast 파라미터명 변경 + transformer_node_start를 Transformer로 이동
- refactor: /simplify 리뷰 반영 — OOM 안전성, dead code, 주석 정리
- refactor: old_ast/new_ast 분리 → 단일 AST (append-only) 통합
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.