2026-04-03
요약 (AI 작성)
ZTS에서 증분 빌드와 watch-json 관련 안정화 작업을 집중적으로 수행했습니다. __esm 래퍼 기반 WrapKind.esm을 구현하고, CJS→WrapESM 참조 변환, __esm var/function 호이스팅, init_xxx() 주입, live binding 등 번들러 모듈 래핑 시스템을 대폭 개선했습니다. ES2022 private method 다운레벨링을 추가하고, Hermes 검증 CI를 도입했습니다. 번개(bungae) 프로젝트에서는 ZTS 번들러 연동을 위한 banner/global 변수/RN 폴리필 호환성 수정을 진행했습니다. Suji에서는 Node.js 백엔드 async invoke, 크로스 호출, 이벤트 API 등을 구현했습니다.
커밋
ohah/zts
- 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)
- fix: DEV define을 react-native 플랫폼에서만 적용
- fix(bundler): DEV 자동 define + define 치환 타입 수정
- fix(bundler): __esm function 호이스팅 제거 + init_xxx() 주입 + var import (#652)
- fix(linker): __esm 모듈 init_xxx() 호출 주입 + /simplify 반영 (#652)
- feat(emitter): __esm 래퍼 function 선언 호이스팅 (#652)
- ci: Hermes 검증 job 추가 (integration.yml)
- fix(emitter): __export default 예약어 수정 + hermesc CI 스크립트
- refactor(bundler): /simplify 리뷰 반영 + WrapESM 테스트 8개 추가
- feat(bundler): CJS 래핑 모듈의 scope hoisted ESM import 처리 (#645)
- feat(bundler): CJS→WrapESM 참조 변환 + ESM 모듈 CJS codegen (#645)
- feat(bundler): WrapKind.esm + __esm 래퍼 기반 구현 (#645)
- fix(linker): scope hoisted 모듈에도 require_rewrites 맵 구축
- refactor(codegen): require rewrite 로직 공통 헬퍼 추출 + 비관용적 패턴 제거
- fix(codegen): emitImportCJS에서 ESM import→require 변환 시 require_rewrites 맵 미참조
- fix(bundler): esm_with_dynamic_fallback 모듈이 require()로 불릴 때 __commonJS 래핑 누락
- fix(test): TSC contextual typing 3개 테스트 skip 처리
- fix(test): hermesc 바이너리 경로를 플랫폼별로 분기
- revert: helpers.ts 원본 복원 — workspace 루트 실행 문제는 bun 환경 이슈
- fix(test): bundleAndRun에 cwd 전달하여 workspace 환경 격리
- style: zig fmt 적용
- feat(transformer): ES2022 private method (#method) 다운레벨링
ohah/bungae
- fix(zts-bundler): banner prelude 구문 오류 수정
- fix(zts-bundler): banner에 global 변수 정의 추가 (Hermes 호환)
- style: oxfmt 포맷팅 수정
- feat(zts-bundler): RN 폴리필 + InitializeCore 전달 (Metro 호환)
- chore: zts로 변경
ohah/suji
- feat: suji.json JSON Schema 추가
- docs: 문서 동기화 (watcher.zig, CEF 비교표, 핫 리로드 체크)
- docs: 바이너리 데이터 채널 제거 (CEF suji:// 프로토콜로 대체)
- docs: CLAUDE.md + PLAN.md 업데이트
- fix(node): nullTerminateOrAlloc 힙 free 시 원본 슬라이스 사용
- test(node): nullTerminateOrAlloc 경계값 + NodeRuntime 테스트 확충
- refactor(node): bridge IPC 로직 중복 제거 + thread pool + deadlock 방지
- fix(node): async invoke 에러 판별을 bool 플래그로 변경
- feat(node): async invoke + GPU 비활성화 + Node 라우팅 수정
- fix(node): bridge 안정성 개선
- refactor(examples): multi-backend Node.js 핸들러 정리
- test(node): NodeRuntime 단위 테스트 추가
- feat(examples): multi-backend Node.js 크로스 호출/collab/이벤트 추가
- feat(examples): node-backend 예제에 info/system/hash 핸들러 추가
- feat(node): Node.js 백엔드에 크로스 호출/이벤트 API 추가
- feat(examples): multi-backend에 Node.js 백엔드 추가
- feat(examples): Node.js 단독 백엔드 예제 추가
- ci: libnode 다운로드 URL을 ohah/suji 릴리즈로 고정