Skip to content

npm/editor RPC + Wrapper에 exportHwpx / exportHwpVerify 노출 (#407 후속) #557

@johndoekim

Description

@johndoekim

배경

#407"WASM 코어에는 exportHwp 가 있는데 npm/editor Wrapper에서 editor.exportHwp is not a function 으로 호출 실패" 사례였습니다. 본질은 WASM ↔ JS Wrapper 사이 노출 갭 이었고 해당 이슈는 closed 됐습니다.

조사 결과 동일한 갭이 두 함수에서 추가로 재현됩니다.

정적 증거 (현재 상태)

레이어 exportHwp exportHwpx exportHwpVerify
WASM #[wasm_bindgen] ✅ src/wasm_api.rs:3441 ✅ src/wasm_api.rs:3447 ✅ src/wasm_api.rs:3466
RPC switch (rhwp-studio/src/main.ts) ✅ L698 ❌ 없음 → Unknown method: exportHwpx ❌ 없음
Wrapper (npm/editor/index.js) ✅ L164 ❌ → editor.exportHwpx is not a function
타입 (npm/editor/index.d.ts) ✅ L26
README API 표 ✅ L104

#407 과 같은 패턴의 갭이 두 함수에서 동일하게 남아 있습니다.

작업 범위

WASM 측은 손대지 않고 노출 레이어만 메웁니다.

  • rhwp-studio/src/main.ts 의 RPC switch 에 case 'exportHwpx' / case 'exportHwpVerify' 추가
  • npm/editor/index.jsRhwpEditorexportHwpx() / exportHwpVerify() 메서드 추가
  • npm/editor/index.d.ts 에 두 메서드 + HwpVerifyResult 인터페이스 추가
  • npm/editor/README.md API 표/예제 갱신
  • rhwp-studio/e2e/export-hwpx.test.mjs 신규 추가 (라운드트립 검증, fail-first 로 작성 후 통과 전환)

exportHwpVerify 는 WASM 이 JSON 문자열을 반환하므로 RPC 단계에서 JSON.parse 후 객체로 흘립니다 (Wrapper 사용자는 객체 그대로 사용).

검증

  1. e2e (node e2e/export-hwpx.test.mjs) — 빨강(미구현 상태)에서 시작해 초록(구현 완료)으로 전환
  2. cargo build / cargo test 회귀 없음
  3. 브라우저 콘솔에서 editor.exportHwpx()Uint8Array (ZIP 매직 PK\x03\x04) 반환 확인
  4. editor.exportHwpVerify(){bytesLen, pageCountBefore, pageCountAfter, recovered} 객체 반환 확인
  5. exportHwpx 결과를 다시 loadFile 로 로드 → 페이지 수 일치(라운드트립)

후속 제안 (별도 이슈)

본 PR 의 패턴을 템플릿으로 다음 묶음을 동일하게 노출 가능합니다.

  • getDocumentInfo + getSourceFormat + getValidationWarnings (단순 getter 3종)
  • searchText + replaceText 계열
  • saveSnapshot / restoreSnapshot / discardSnapshot

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions