Legacy-сборка pdf.js: «Не удалось открыть PDF» в Яндекс Браузере (#22) #23

Merged
aep merged 1 commits from feat/22-pdfjs-legacy into test 2026-10-09 18:50:20 +03:00
Owner

Closes #22.

Причина. Воркер обычной сборки pdfjs-dist 5.7 (build/pdf.worker.mjs) при открытии документа вызывает Uint8Array.prototype.toHex (отпечаток документа). Метод появился в Chromium 140; у Яндекс Браузера ядро старше, поэтому getDocument падает UnknownErrorException: a.toHex is not a function, а карточка «Исходный документ» показывает «Не удалось открыть PDF». В Node 24 метода тоже нет.

Что сделано.

  • Новый модуль src/widgets/DocumentReview/pdfjs.ts: модуль и воркер берутся из pdfjs-dist/legacy/build (в них полифиллы core-js, включая toHex); PdfPages импортирует его.
  • Регрессионный тест pdfjs.test.ts: удаляет Uint8Array.prototype.toHex, открывает минимальный PDF через наш модуль и ждёт одну страницу. Без legacy-сборки тест не проходит.
  • CLAUDE.md: строка про pdfjs-dist.

Проверки (worktree, node_modules — симлинк на установленные зависимости той же package.json): vitest 21 файл / 125 тестов зелёные; tsc --noEmit чисто; biome check src — 0 ошибок (7 старых warning); rsbuild build собирается, в dist/static/assets/ ложится legacy-воркер с полифиллом.

Rulings I made.

  • R-1: фикс bounded (без OpenSpec change): одна замена сборки библиотеки, поведение экрана не меняется.
  • R-2: то же изменение продублировано в arm-core/web отдельным PR (arm-core #90), т. к. контур разворачивается оттуда; синхронизация остальных расхождений arm-web ↔ arm-core/web не делалась.
  • R-3: в тесте воркер задаётся относительным путём до node_modules (без @types/node), потому что new URL(<пакет>, import.meta.url) под vitest не резолвится.

Остаток для владельца. docs/dev/qa-guide.md, таблица неполадок: строка «Скан PDF не отображается — старый браузер» теперь неактуальна для Яндекс Браузера.

🤖 Generated with Claude Code

Closes #22. **Причина.** Воркер обычной сборки pdfjs-dist 5.7 (`build/pdf.worker.mjs`) при открытии документа вызывает `Uint8Array.prototype.toHex` (отпечаток документа). Метод появился в Chromium 140; у Яндекс Браузера ядро старше, поэтому `getDocument` падает `UnknownErrorException: a.toHex is not a function`, а карточка «Исходный документ» показывает «Не удалось открыть PDF». В Node 24 метода тоже нет. **Что сделано.** - Новый модуль `src/widgets/DocumentReview/pdfjs.ts`: модуль и воркер берутся из `pdfjs-dist/legacy/build` (в них полифиллы core-js, включая `toHex`); `PdfPages` импортирует его. - Регрессионный тест `pdfjs.test.ts`: удаляет `Uint8Array.prototype.toHex`, открывает минимальный PDF через наш модуль и ждёт одну страницу. Без legacy-сборки тест не проходит. - CLAUDE.md: строка про pdfjs-dist. **Проверки** (worktree, node_modules — симлинк на установленные зависимости той же `package.json`): vitest 21 файл / 125 тестов зелёные; `tsc --noEmit` чисто; `biome check src` — 0 ошибок (7 старых warning); `rsbuild build` собирается, в `dist/static/assets/` ложится legacy-воркер с полифиллом. **Rulings I made.** - R-1: фикс bounded (без OpenSpec change): одна замена сборки библиотеки, поведение экрана не меняется. - R-2: то же изменение продублировано в arm-core/web отдельным PR (arm-core #90), т. к. контур разворачивается оттуда; синхронизация остальных расхождений arm-web ↔ arm-core/web не делалась. - R-3: в тесте воркер задаётся относительным путём до `node_modules` (без `@types/node`), потому что `new URL(<пакет>, import.meta.url)` под vitest не резолвится. **Остаток для владельца.** `docs/dev/qa-guide.md`, таблица неполадок: строка «Скан PDF не отображается — старый браузер» теперь неактуальна для Яндекс Браузера. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-10-09 18:41:49 +03:00
Обычная сборка pdfjs-dist 5.7 в воркере вызывает Uint8Array.prototype.toHex (отпечаток документа) —
метод есть только в Chromium 140+, в Яндекс Браузере getDocument падает «a.toHex is not a function».
PdfPages берёт модуль и воркер из pdfjs-dist/legacy/build (с полифиллами core-js) через новый
widgets/DocumentReview/pdfjs.ts; регрессионный тест открывает PDF без Uint8Array.prototype.toHex.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
aep merged commit a3d3154f6f into test 2026-10-09 18:50:20 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-web#23
No description provided.