fix: 브라우저 확장 문서 URL 해석 및 응답 검증#437
Conversation
|
@postmelee 님 PR 감사드립니다. 코드 본질은 정상이고 메인테이너 dry-run 검증 게이트 모두 통과했습니다. 머지 전 한 가지 작은 보강 부탁드립니다. 검증 결과 (메인테이너 dry-run cherry-pick 후)
보강 요청 — 자동 테스트 실행 가능 상태 정비PR 본문에 "실행: 원인: 확장 (Chrome / Firefox SW) 런타임에서는 ESM 정상 동작이라 사용자 영향은 없습니다. 그러나 자동 테스트가 명령 한 번으로 실행되지 않으면 후속 컨트리뷰터가 회귀 검증을 누락할 위험 이 있습니다. 두 가지 선택지선택지 1: {
"name": "rhwp-shared",
"private": true,
"type": "module"
}장점: 향후 선택지 2: 테스트 파일을 mv rhwp-shared/sw/document-url-resolver.test.js rhwp-shared/sw/document-url-resolver.test.mjs
mv rhwp-shared/sw/document-url-resolver.js rhwp-shared/sw/document-url-resolver.mjs
# + 모든 import 경로 .mjs 로 갱신 (chrome/firefox sw/, viewer-launcher, thumbnail-extractor)장점: package.json 추가 없이 가능. 단점: import 경로 갱신 범위가 크고 (5+ 파일) 확장 빌드 영향 가능성 점검 필요. → 선택지 1 권장 — 변경 범위 최소 + 명확. 추가 검증선택 후 다음 명령으로 통과 확인 부탁드립니다: node --test rhwp-shared/sw/document-url-resolver.test.js
# 기대: 12 tests passed (제가 .mjs 확장자로 직접 실행 시 12개 모두 통과 확인했습니다)본 PR 의 좋은 점 (참고)
후속 정정 commit 추가하시면 즉시 머지 진행하겠습니다. 감사합니다. |
- mydocs/pr/pr_437_review.md (브라우저 확장 URL 해석/검증, dry-run cherry-pick + 검증 게이트 통과 + ESM 정황 발견) - mydocs/orders/20260429.md (PR #437 작성자 보강 대기 + v0.7.8 릴리즈 + Discussion #438 행 추가) 핵심: 코드 본질 정상 + 12 단위 테스트 통과 (.mjs 실행 시) + Rust core 영향 0 정황: PR 본문 명시 자동 테스트 명령이 rhwp-shared/package.json 부재로 실행 불가 요청: rhwp-shared/package.json 추가 ("type": "module") 권장 (선택지 1) PR #437 OPEN 유지, 작성자 재제출 대기
|
@edwardkim 검토와 dry-run 확인 감사합니다. 요청 주신 권장안대로 추가 커밋:
재검증 결과: node --test rhwp-shared/sw/document-url-resolver.test.js
node --test rhwp-shared/sw/download-interceptor-common.test.js
cd rhwp-firefox && npm run build
cd rhwp-chrome && npm run build
|
- mydocs/pr/pr_437_report.md (작성자 후속 정정 commit 1건 추가 흡수, 자동 테스트 38건 통과) - mydocs/orders/20260429.md (PR #437 완료 행으로 갱신) 작성자 신속 응답: - 1차 검토 후 17분 만에 권장안 정확 채택 (rhwp-shared/package.json 신규) - 보너스 효과: ESM 선언으로 download-interceptor-common.test.js (26 tests) 도 정상화 검증: 1066 passed + svg_snapshot 6/6 + issue_418 1/1 + clippy 0 + document-url-resolver 12 + download-interceptor-common 26 + Rust core byte 동일
|
@postmelee 님 빠른 정정 감사합니다. 메인테이너가 cherry-pick 으로 devel 에 적용 완료했습니다. 처리작성자 attribution 보존 6 commits cherry-pick (5 본질 + 1 후속 정정):
devel 머지 commit: 재검증 (메인테이너)
보너스 효과ESM 패키지 선언으로 본 PR 의 좋은 점
이슈 #432 도 함께 close 됩니다. 감사합니다. |
개요
Refs #432
브라우저 확장에서
.hwp/.hwpx처럼 보이는 링크가 실제 문서 바이트가 아닌 HTML 미리보기/오류 페이지를 반환할 때, viewer가 이를 그대로 HWP 파서에 넘겨 CFB 오류로 표시하던 문제를 해결합니다.이번 PR은 특정 GitHub wiki 링크만 rule-based로 처리하지 않고, 다음 두 계층으로 일반화했습니다.
원인
GitHub wiki의
saved/pr360-edward.hwp링크는 URL pathname만 보면 HWP 파일처럼 보이지만, 실제 링크 대상은 GitHub blob HTML 페이지입니다.기존 viewer는 원격 응답의 content-type이나 파일 시그니처를 확인하지 않고 곧바로
wasm.loadDocument()에 넘겼기 때문에 HTML의 첫 바이트가 CFB 파서 오류로 노출되었습니다.변경 사항
rhwp-shared/sw/document-url-resolver.js추가https://github.com/{owner}/{repo}/blob/{ref}/{path}.hwp[x]를raw.githubusercontent.comURL로 변환.hwp가 있는 위장 URL은 변환하지 않음url파라미터가 실제 fetch 가능한 문서 URL을 받도록 변경rhwp-studio/src/main.ts의loadFromUrlParam()에 원격 응답 바이트 검증 추가후속 확장 가능성
이번 PR의 핵심은 GitHub wiki 링크 하나를 예외 처리하는 것이 아니라, “링크 URL”과 “실제 파일 바이트 URL”이 다른 서비스를 provider adapter로 흡수할 수 있는 구조를 만든 것입니다.
따라서 이후 공공기관/교육청/지자체/전자문서 게시판처럼 HWP 링크가 다음 형태로 제공되는 사이트도 같은 계층에서 점진적으로 대응할 수 있습니다.
.hwp링크가 실제로는 미리보기 HTML 페이지를 반환하는 경우download,file,attach,viewendpoint 뒤에 숨어 있는 경우200 OK로 반환되는 경우새 사이트 대응 시에는 viewer나 thumbnail 호출부를 다시 분기하지 않고,
document-url-resolver.js에 provider adapter와 테스트 케이스를 추가하는 방식으로 확장할 수 있습니다. 또한 resolver가 아직 모르는 사이트라도 응답 바이트 검증 계층이 HTML/오류 페이지를 파서에 넘기지 않으므로, 내부 CFB 오류 대신 원인 중심 오류를 표시할 수 있습니다.사용자 영향
스크린샷
1. HTML/preview 응답 차단
CFB 파서 오류 대신 원인 중심 오류 메시지를 표시합니다.
2. GitHub blob 페이지 hover 카드 썸네일
GitHub blob 페이지에서
pr360-edward.hwphover 카드 썸네일이 정상 표시됩니다.3. wiki 카드에서 viewer 열기
wiki hover 카드의
rhwp로 열기클릭 후 viewer에서 35페이지 문서가 정상 로드됩니다.4. 기존 raw/blob viewer 흐름 유지
기존 blob/raw 흐름에서도
pr360-edward.hwp35페이지 로드가 유지됩니다.5. GitHub wiki hover 카드 썸네일
원래 실패하던 wiki 링크 카드에서도 썸네일이 정상 표시됩니다.
검증
node --test rhwp-shared/sw/document-url-resolver.test.js통과 (12 tests)node --test rhwp-shared/sw/download-interceptor-common.test.js통과 (26 tests)cd rhwp-firefox && npm run build통과cd rhwp-chrome && npm run build통과saved/pr360-edward.hwphover 카드에서 문서 썸네일 표시rhwp로 열기클릭 시 viewer에서pr360-edward.hwp35페이지 로드pr360-edward.hwp35페이지 로드 유지메모
upstream/devel에서 분기했고, 브라우저 확장: 실제 HWP/HWPX 응답 검증 및 파일 URL 해석 계층 도입 #432 관련 커밋만 선별 적용했습니다.local/*브랜치는 원격 push하지 않고, fork의contrib/fix-document-url-resolver브랜치로 PR을 생성합니다.