2026-04-13
요약 (AI 작성)
오늘은 PluginState 구조체 분리, worklet Phase 6 완성, RSC directive 보존, WatchRebuildEvent, per-module sourcemap, Metro x_facebook_sources 등 다양한 기능을 추가하고 PR 16건을 머지했습니다. ZTS에서 PluginState를 worklet과 refresh로 분리하고, object-hook property values의 auto-workletization을 구현했습니다. __stackDetails를 global.Error()와 함께 emit하여 Babel plugin과 호환하고, shorthand destructuring + sourceMap 필드를 __initData.code에 추가했습니다. ES5 class lowering + Babel-style anonymous names, implicit context + globals + CJS dehoist를 완성하고, RSC에서 "use client"/"use server" directive 보존, multi-entry CLI, WatchRebuildEvent(#1223)를 추가했습니다. sourcemap에서 per-module standalone sourcemap을 지원하고, Metro x_facebook_sources per-source function map과 RN preset을 추가했습니다. AST에서 import attributes / import defer-source / TS type param modifiers를 보존하고, devserver에서 SSE broadcast TCP flush를 개선했습니다. Bungae에서는 iOS iPad fullscreen, @babel/plugin-transform-class-properties 보충, Reanimated demos 5개 추가, ZTS submodule 8번 bump, DragDemo 분리, @pluginVersion 버전 감지를 진행했습니다.
커밋
ohah/bungae
- fix(ios): require fullscreen on iPad (iOS 26 windowed default 회피)
- fix: add missing @babel/plugin-transform-class-properties for Metro worklet compat
- refactor(example): extract drag into independent DragDemo with ScrollView-safe Pan config
- chore: bump zts to 5486398 (object-hook autoworklet + gesture receiver validation)
- feat(example): add 5 Reanimated demos + bump zts with worklet fixes
- fix(example): remove workletWebCheck demo (requires substitute_web_platform_checks option)
- chore: bump ZTS submodule to main (ES5 class lowering + anon naming)
- chore: bump zts to include __stackDetails Babel format fix (#1203)
- chore: bump zts to include worklet shorthand+sourceMap fix (#1205)
- chore: bump zts to drop empty sourceMap field (#1206)
- chore: bump zts — fix export default namespace import assignment (#1210)
- chore: bump zts — lock package.json sideEffects (#1207, root cause of #1193)
- debug(example): add console.log to DragDemo gesture callbacks
- chore(example): remove DragDemo diagnostic console.logs
- example(ExampleApp): add ZTS worklet parity demos for all phases
- fix(napi-build): detect react-native-worklets version for __pluginVersion
ohah/zts
- docs(decisions): D097 — PluginState 구조체 분리 규칙 기록
- fix(bundler): emit init call for side-effect-only import to ESM module
- chore: update comments with new plugins.worklet.* field names
- refactor(transformer): move worklet state into PluginState.worklet
- refactor(transformer): extract visitWithRefreshSuppressed neutral API
- feat(worklet): auto-workletize object-hook property values
- fix(worklet): emit __stackDetails with global.Error() to match Babel plugin
- fix(worklet): shorthand destructuring + sourceMap field in __initData.code (Babel parity)
- refactor(transformer): move refresh state into PluginState.refresh
- fix(bundler): avoid duplicate init call for CJS side-effect import
- refactor(test): extract Worklet tests into worklet_test.zig
- refactor(worklet): wrap async function/arrow body visits with visitBodyWorkletAware
- fix(worklet): suppress --define substitution inside worklet function bodies
- fix(worklet): drop empty sourceMap field — causes Reanimated UI Runtime init failure
- feat(playground): expose all transpile options
- feat(rsc): preserve "use client"/"use server" directives + multi-entry CLI
- fix(devserver): SSE broadcast TCP flush via SseSink wrapper
- docs: AST 신규 노드 추가 체크리스트 + WASM 플러그인 호스트 토론 문서
- feat(worklet): Phase 6 final batch — implicit context + globals + CJS dehoist
- refactor(worklet): drop dead .program tag check, extract test return-check helper
- fix(worklet): preserve implicit return for arrow ExpressionBody in __initData.code
- test(worklet): add anon naming + ES5 class lowering parity tests
- feat(worklet): ES5 lowering for plugin-replaced classes + Babel-style anon names
- fix(worklet): suppress Fast Refresh registration inside factory IIFE
- refactor: extract nsToMs helper + trim narrating comments (simplify)
- feat(watch): expose phaseDurations on WatchRebuildEvent (#1223 Phase 3)
- refactor: collapse reparsed_count + incremental flag into ?usize (simplify)
- feat(watch): expose reparsedModules + incremental-cache initial build (#1223 Phase 2)
- refactor(watch): simplify findings — streaming hash + diff resync + helper consolidation
- feat(watch): event-based watcher + 50ms debounce + content hash cache (#1223 Phase 1)
- refactor(plugin): Babel-style visitor hooks for AST plugins
- test(worklet): activate export form file-workletization tests (Phase 6.4+)