2026-04-07
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 이날 PR 70여 개를 병합하며 여러 갈래로 나아갔습니다. 먼저 커진 파일을 나눴습니다. emitter.zig, bundler_test.zig, codegen_test.zig를 폴더로 쪼개고(#825), React Fast Refresh와 클래스·데코레이터 변환, linker 메타데이터 빌드를 별도 파일로 옮겼습니다(#826, #827). 기능으로는 --outbase·--packages=external·--drop-labels 등 CLI 옵션 13개(#829), SWC 호환 emitDecoratorMetadata(#832, #833), 모듈 하나를 출력 파일 하나로 내는 --preserve-modules(#835), 설정 파일 옵션 확장과 JS Build API(#837)가 들어왔고, 모든 에러 경로가 0이 아닌 종료 코드를 돌려주게 했습니다(#838). 시맨틱 에러가 있어도 tsc처럼 출력을 내고(#842), private name의 읽기·쓰기 검사를 정밀하게 다듬었습니다(#857).
wasm32-wasi 트랜스파일 모듈과 @zts/wasm 패키지를 만들고(#839), CLI 트랜스파일 옵션 전체를 WASM에 바인딩했습니다(#849). 이를 바탕으로 Astro Starlight 문서 사이트와 WASM Playground를 세웠고(#841), 한국어·영어 i18n과 SWC 스타일 풀스크린 Playground(#845), Tailwind 기반 커스텀 페이지로 옮긴 Playground v3(#854), ECharts 성능 벤치마크 페이지와 TypeDoc API 레퍼런스(#858), Monaco 에러 마커와 Plugin Context API(#863)가 이어졌습니다. Starlight CSS가 Monaco 커서·드래그를 깨뜨리던 문제는 여러 PR에 걸쳐 고쳤고, WASM 에러 메시지에는 줄·열과 소스 코드를 함께 보여 줍니다(#864, #865).
후반에는 bungae dev 서버와 연동하는 dev 모드와 HMR에 매달렸습니다. --dev 플래그와 RN에 맞춘 HMR 런타임(#867)에서 출발해 자체 모듈 레지스트리에 CJS 호환 factory 인자, 의존성 맵, lazy evaluation 등을 차례로 붙였다가, CJS/ESM 상호 운용과 순환 참조 문제 때문에 dev 모드를 프로덕션 파이프라인으로 옮겼습니다(#884). 이어 모든 ESM 모듈을 __esm으로 감싸고 HMR hook과 import.meta.hot 변환을 넣었으며(#885, #886), React 컴포넌트 모듈의 hot.accept() 자동 삽입, 바뀐 모듈만 보내는 --watch-json diff, direct eval로 흰 화면을 없앤 수정, react-refresh 런타임 자동 주입과 Metro의 __ReactRefresh 호환(#888~#898)까지 이어졌습니다.
bungae는 이에 맞춰 Metro HMRClient 인터페이스를 구현한 ZTS 전용 HMR 클라이언트를 만들고, RN 내부의 상대 경로 require까지 바꾸도록 HMRClient 교체를 플러그인 onLoad hook으로 옮겼습니다.
공개 커밋 94개, 해당일 생성 또는 병합된 PR 72개를 정리했습니다. PR 생성 72개·병합 72개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- fix(zts-bundler): HMR 클라이언트 파일 경로 수정
- fix(zts-bundler): HMRClient 교체를 플러그인 onLoad hook으로 변경
- fix(zts-bundler): HMRClient에 default export 추가
- feat(zts-bundler): ZTS 커스텀 HMR 구현 — 롤리팝 방식
ohah/zntc
- fix(core): HMR Metro 호환 — __ReactRefresh 지원 + RN 중복 주입 방지
- fix(core): react-refresh 미설치 시 경고 출력
- feat(core): dev mode에서 react-refresh/runtime 자동 주입
- fix(core): 첫 rebuild부터 HMR 동작 (full reload 제거)
- fix(ci): .claude/worktrees 서브모듈 제거 + .gitignore 추가
- fix(core): HMR API 전역 노출 + 중복 저장 시 불필요한 reload 방지
- fix(core): HMR direct eval + configurable exports — 흰화면 근본 수정
- fix(core): HMR apply에서 reset()/fn() 제거 — 흰화면 깜빡임 수정
- fix(core): --watch-json HMR diff — 변경된 모듈만 updates로 출력
- fix(core): --watch-json HMR diff — 변경된 모듈만 updates로 출력
- fix(core): React 컴포넌트 모듈에 hot.accept() 자동 삽입
- fix(core): /simplify Phase 3-6 — 중복 제거 + stale 독스트링 수정
- feat(core): HMR hook + dev_id + import.meta.hot 변환 (Phase 4-6)
- feat(core): dev mode 모듈 강제 래핑 + HMR 런타임 주입 + per-module code 수집 (Phase 3)
- fix(test): incremental_test 증분 빌드 테스트를 Phase 2에 맞게 수정
- refactor(core): dev mode를 프로덕션 파이프라인으로 전환 (Phase 2)
- fix(core): dev mode에서 모든 ES5 런타임 헬퍼 주입
- fix(core): dev mode에서 run-before-main 실행 누락 수정
- fix(core): dev mode named import binding 혼합 버그 수정
- fix(core): node_modules에 React Refresh 미적용 — IIFE 스코프 에러 수정
- fix(core): dev mode 모듈 초기화 에러에 모듈 ID 표시
- refactor(core): dev mode 모듈 ID 일원화 — dev_id 필드 도입
- fix(core): dev mode 모듈 ID 불일치 수정 — preamble에 makeModuleId 적용
- fix(core): HMR 업데이트 시 factory 강제 실행 + entry point 감지 개선
- feat(core): dev mode lazy evaluation — Metro 방식 모듈 초기화
- feat(core): dev mode CJS/ESM interop — __toESM 래핑 + 헬퍼 주입
- fix(core): dev mode에서 ES5 런타임 헬퍼 글로벌 주입
- fix(core): dev mode dependency map — CJS require() 상대 경로 resolve
- fix(core): dev mode factory에 require 파라미터 추가 — CJS require() 호환
- chore: 주석의 __zts_exports → exports 정리
- fix(core): dev mode factory 파라미터 module/exports로 변경 — CJS 호환
- fix(test): IncrementalBundler 테스트에 collect_module_codes=true 추가
- fix(core): dev mode OOM 수정 — $RefreshSig$ 스캔 제거 + collect_module_codes 옵션
- feat(core): --dev 모드 + HMR 런타임 RN 적응 + watch-json updates 필드
- fix(ci): src/** 변경 시에도 문서 사이트 재배포
- fix(wasm): 첫 번째 에러만 표시 — 후속 복구 에러 노이즈 제거
- fix(wasm): 에러 메시지에 줄번호/컬럼/소스 코드 표시
- feat(playground,core): Monaco 에러 마커/자동완성 + Plugin Context API
- docs(core): add English JSDoc to all public API exports
- fix(docs): API Reference를 레퍼런스에서 분리하여 별도 사이드바 섹션으로
- fix(docs): CI에서 TypeDoc 빌드 실패 수정
- fix(playground): Monaco 에디터 드래그 문제 근본 수정
- feat(docs): 성능 벤치마크 페이지 + API 레퍼런스 자동 생성 + Monaco 드래그 수정
- chore: oxfmt에서 compat-table-report.json 제외
- style: zig fmt
- feat(semantic): private names 시맨틱 체크 정확도 향상
- fix(docs): 오른쪽 TOC 좌우 패딩 추가
- fix(playground): 사이드바 유지 + ES2024/ES2025 타겟 추가
- feat(docs): Playground v3 — 커스텀 페이지 + Tailwind + links-validator
- fix(playground): 네거티브 마진 제거 — content 영역 넘침 수정
- fix(playground): content-panel/right-sidebar 완전 제거 — 풀스크린
- fix(playground): 오른쪽 TOC 목차 숨김
- fix(playground): 페이지 타이틀 숨김 + content 패딩 제거
- feat(wasm): CLI 트랜스파일 옵션 전체 WASM 바인딩 추가
- fix(docs): content 영역 폭 제한 강화 해제
- fix(docs): 모든 페이지 content 영역 풀사이즈로 변경
- fix(playground): Monaco 커서 깨짐 + content 영역 폭 제한 해제
- feat(docs): 사이드바 전 페이지 표시 + 한국어/영어 i18n 지원
- fix(playground): Monaco 에디터 블록/커서 위치 깨짐 수정
- fix(playground): stale closure 버그 수정 — 입력 변경 시 출력 업데이트
- feat(playground): SWC 스타일 풀스크린 Playground UI
- fix(docs): WASM 경로 수정 + 파일명 zts-core.wasm으로 변경
- fix(semantic): tsc 호환 — 시맨틱 에러 시에도 output 생성 + constructor overloads 허용
- feat(docs): Monaco Editor 적용 + TSC 테스트 known limitation 처리
- feat(docs): Starlight 문서 사이트 + WASM Playground 구축
- fix(core): build() API의 outfile 읽기에서 readFile 미정의 버그 수정
- refactor(wasm): /simplify 리뷰 반영 — 코드 품질 개선
- style: oxfmt 포매팅 적용
- fix(wasm): 테스트 assertion을 실제 출력에 맞게 수정
- feat(wasm): wasm32-wasi 트랜스파일 모듈 구현
- refactor(cli): 전체 에러 경로에 non-zero exit code 적용
- style: 미사용 import 제거 + oxfmt 적용
- feat(config): 설정 파일 옵션 확장 + JS Build API + 에러 exit code 수정
- refactor(preserve-modules): /simplify 리뷰 반영 — 코드 중복 제거 및 품질 개선
- style: oxfmt 포매팅 적용
- feat(bundler): --preserve-modules 구현 (Rollup/Rolldown 호환)
- fix(class): super 없는 class field에서 this→_this 잘못 치환되는 버그 수정 + compat-table 의존성 추가
- test(decorator): emitDecoratorMetadata 테스트 커버리지 강화 (SWC 기준 12개 추가)
- feat(decorator): emitDecoratorMetadata 구현 (SWC 호환)
- feat(decorator): emitDecoratorMetadata 구현
- test(decorator): 레거시 데코레이터 e2e 테스트 15개 추가 + ROADMAP 배치 E 완료 반영
- feat(cli): 배치 E — CLI 옵션 13개 일괄 추가
- docs(STRUCTURE): 리팩토링 반영 — 서브 모듈 폴더 구조 추가
- refactor(linker): metadata 빌드 → linker/metadata.zig 분리 (997줄)
- refactor(transformer): class+decorator → transformer/class_decorator.zig 분리 (1,294줄)
- refactor(transformer): React Fast Refresh → transformer/refresh.zig 분리 (530줄)
- style: zig fmt
- refactor(bundler): emitter.zig → emitter/ 폴더 분리 (3,086줄 → 4개 파일)
- refactor(test): codegen_test.zig → codegen_test/ 폴더 분리 (4,649줄 → 9개 파일)
- refactor(test): bundler_test.zig → bundler_test/ 폴더 분리 (13,649줄 → 13개 파일)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.