npm/editor RPC + Wrapper에 exportHwpx / exportHwpVerify 노출 (#557, followup #407)#558
npm/editor RPC + Wrapper에 exportHwpx / exportHwpVerify 노출 (#557, followup #407)#558johndoekim wants to merge 5 commits into
Conversation
- mydocs/plans/task_m100_557.md (수행계획서) - mydocs/plans/task_m100_557_impl.md (구현계획서, 5 stage) - rhwp-studio/e2e/export-hwpx.test.mjs (fail-first e2e) - mydocs/working/task_m100_557_stage0.md (단계 보고서) Stage 0 e2e 단언 3개 모두 PASS — RPC switch 의 'exportHwpx' / 'exportHwpVerify' default 응답이 자동화로 캡처됐다. Stage 1 에서 RPC case 추가 후 단언 [2], [3] 이 깨지면 Stage 4 에서 통과 단언으로 교체. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…rtHwpVerify 추가
- rhwp-studio/src/main.ts: RPC switch 에 case 2개 추가
- rhwp-studio/src/core/wasm-bridge.ts: WasmBridge.exportHwpVerify() wrapper 추가
(exportHwpx 는 이미 wrap 되어 있어 추가 작업 없음)
Stage 0 e2e 단언 [2], [3] 이 깨지면서 wasm 단계 baseline ('문서가
로드되지 않았습니다') 으로 합류 — RPC 노출 갭이 메워진 결정적 증거.
Stage 4 에서 통과 단언으로 일괄 교체 예정.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…Verify 메서드 추가 - npm/editor/index.js: RhwpEditor 에 두 async 메서드 + JSDoc - exportHwpx() — HWPX bytes 반환 (exportHwp 패턴 모방) - exportHwpVerify() — 검증 메타데이터 객체 반환 Stage 1 의 RPC layer 와 정합. 부모 페이지에서 editor.exportHwpx() / editor.exportHwpVerify() 호출 가능. Stage 4 통과 단언에서 정합성 일괄 검증 예정. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- npm/editor/index.d.ts: HwpVerifyResult 인터페이스 + 두 메서드 타입 추가 - npm/editor/README.md: editor.exportHwpx() / editor.exportHwpVerify() API 섹션 + 다운로드 예제 (Blob + URL.createObjectURL) + 검증 실패 감지 패턴 세 레이어 (Wrapper / Type / Doc) 모두 정합. Stage 0 의 갭 (exportHwp 한 항목만 존재) 이 완전히 메워짐. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- rhwp-studio/e2e/export-hwpx.test.mjs: fail-first → green 단언 일괄 교체
PK 매직 검증 + 라운드트립 (loadFile 정상 + ≥1 page) + verify 객체 정합성
- mydocs/working/task_m100_557_stage4.md
- mydocs/report/task_m100_557_report.md
검증:
- 본 task e2e 모든 단언 PASS (footnote-01.hwp, 6 page)
- exportHwpx HWPX 매직 [80,75,3,4] 확인
- exportHwpVerify {bytesLen:15360, recovered:true, before==after} 확인
- cargo build PASS, baseline e2e (text-flow) PASS
- 6 레이어 (WASM / WasmBridge / RPC / Wrapper / Type / Doc) 정합 완성
라운드트립 페이지 수 정확 일치는 HWP→HWPX 변환 자체 (edwardkim#178 영역)
책임이라 본 task 단언에서는 의도적으로 완화 (loadFile 정상 + ≥1 page).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…rtHwpx/exportHwpVerify 노출 — @johndoekim 5 commits + main.ts 옵션 C 통합)
|
@johndoekim 님, rhwp 에 첫 PR 이시군요 — 환영합니다. 본 PR 의 5 commit 을 본 환경 devel 에 cherry-pick 으로 통합했습니다 ( 통합 결과
본질 평가 — 정합
Stage 1 충돌 — 옵션 C 통합 안내
PR #581 은 모든 RPC case 앞에 case 'exportHwpx':
await initPromise; // ← PR #581 패턴 정합 추가
reply(Array.from(wasm.exportHwpx()));
break;
case 'exportHwpVerify':
await initPromise; // ← PR #581 패턴 정합 추가
reply(JSON.parse(wasm.exportHwpVerify()));
break;추가로, 본 PR 의 결정적 검증
API 노출 layer 만 변경하고 WASM 핵심 + 렌더링은 무영향이므로 시각 판정은 생략했습니다. 다음 PR 시 권장 사항본 PR 의 base 가 git fetch upstream
git checkout devel
git merge --ff-only upstream/devel
git push origin devel
git checkout -b local/task{N}본 PR 은 cherry-pick 통합 완료로 close 합니다. 다음 PR 도 기다리겠습니다. |
- mydocs/pr/archives/pr_558_review.md (검토 문서) - mydocs/pr/archives/pr_558_report.md (처리 보고서) - mydocs/orders/20260504.md: PR #581/582/583/578-579/558 항목 추가
본 task 종결 — Issue #595 (exam_math.hwp 2페이지부터 수식 더블클릭 hitTest 오동작) 본질 정정 + 광범위 회귀 sweep + 작업지시자 시각 판정 ★ 통과 + 이슈 본문 정오표 코멘트 등록 (#issuecomment-4389951401). 회귀 위험성 영역 점검 — 관련 CLOSED 이슈 (#236 PageAreas 영역 공식 / #42 머리말 Picture 렌더링 / #36 머리말 표 셀 이미지 / #340 머리말 누출) 모두 회귀 위험 0. 본 정정이 #236 정정의 영역을 일관 활용 (정확성 강화). 관련 함수 (hit_test_in_header_footer_native, get_active_hf_info, find_section_for_page) 무수정. TS 측 호출처 단 2곳 (input-handler-mouse.ts L494 onMouseDown / L784 onDblClick) 모두 정정 후 동작 정확. 보조 메모 영역 (본 task 분리) — 그리드 모드 (zoom ≤ 0.5) 좌표 결함 + hwpctl_Action_Table 꼬리말 hit:false. 정정 전후 동일 (회귀 0) + 사용자 시각 검증 안 됨 + 한컴 호환 진단 필요 → 본 사이클 영역 밖, 등록 보류. 향후 사용자 시각 검증 또는 한컴 호환 비교로 결함 확정 시 별도 task 진입. 산출물: - mydocs/report/task_m100_595_report.md (최종 보고서) mydocs/orders/yyyymmdd.md 는 메인테이너 영역 (PR #558 패턴 정합) — 본 PR 에서 제외, 메인테이너 PR 처리 후속에서 작성. 본 task 단계별 commit: - Stage 1 (54c0af2): 본질 진단 + 재현 단위 테스트 + 광범위 sweep - Stage 2 (0d20917): hit_test_header_footer 영역 정정 + 회귀 sweep - Stage 3 (본 commit): 최종 보고서 + 회귀 위험성 점검 closes #595 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Summary
#[wasm_bindgen]으로 노출된exportHwpx/exportHwpVerify두 함수를 npm/editor RPC switch + Wrapper + 타입 + README 에 Export API 추가 건의 사항 #407 패턴 그대로 노출.변경 (6 file, +168 라인)
rhwp-studio/src/main.tscase 'exportHwpx'/case 'exportHwpVerify'(+7)rhwp-studio/src/core/wasm-bridge.tsWasmBridge.exportHwpVerify(): stringwrapper (+5)npm/editor/index.jsRhwpEditor.exportHwpx()/exportHwpVerify()+ JSDoc (+20)npm/editor/index.d.tsHwpVerifyResultinterface + 두 메서드 타입 (+14)npm/editor/README.mdrhwp-studio/e2e/export-hwpx.test.mjsexportHwpVerify는 WASM 이 JSON 문자열을 반환하므로 RPC 단계에서JSON.parse후 객체로 흘림 — Wrapper 사용자가 매번 파싱하지 않도록 한 노출 layer 어댑팅.단계별 커밋 흐름
Unknown method: exportHwpx등 RPC default 캡처)검증
[0x50, 0x4B, 0x03, 0x04]확인{bytesLen:15360, pageCountBefore:6, pageCountAfter:6, recovered:true}cargo buildcargo testtext-flow.test.mjs)라운드트립 페이지 수 정확 일치 단언은 의도적으로 완화 (
≥ 1). 이유: HWP→HWPX 변환 자체의 페이지네이션 미세 차이 (footnote-01.hwp 의 경우 6→5) 는 #178 영역의 책임이며 본 task (RPC 노출 layer) 의 책임 범위를 넘어선다.영역 검토 (#272 와의 관계)
#272 에서 메인테이너가 명시한 마일스톤 구분:
본 PR 의 두 함수는 정확히 이 카테고리 (v1.0.0 영역 — HwpDocument high-level method 노출 점진 확장). 312 Action /
run_actiondispatcher / HwpCtrl Rust 이전 / WASM 새 함수 추가 — 어느 것에도 손대지 않음. v2.0.0 영역과 독립.6 레이어 정합 매트릭스
#[wasm_bindgen]index.d.ts)Test plan
node rhwp-studio/e2e/export-hwpx.test.mjs --mode=headless모든 단언 PASScargo buildPASSnode rhwp-studio/e2e/text-flow.test.mjs --mode=headlessbaseline 회귀 PASSnode e2e/edit-pipeline.test.mjs등 추가 회귀 점검 (선택)editor.exportHwpx()/editor.exportHwpVerify()호출 수동 확인후속 제안 (별도 이슈 권장)
본 PR 의 패턴은 다음 묶음에 동일 적용 가능 (각 묶음 변경량 50~100 라인 수준):
getDocumentInfo+getSourceFormat+getValidationWarnings(단순 getter 3종)searchText+replaceOne/replaceAll(검색/치환)saveSnapshot/restoreSnapshot/discardSnapshot(snapshot)renderPageHtml(SVG 대안)closes #557
🤖 Generated with Claude Code