fix: load the pdf.js worker with the Map upsert polyfill

This commit is contained in:
alam00000 committed 2026-08-22 16:02:34 +05:30
1 parent 8e606b652c
commit c449a85745
42 files changed
+112 -181

No files matched your search

+1 -5
View File
@@ -6,11 +6,7 @@ import { icons, createIcons } from 'lucide';
import * as pdfjsLib from 'pdfjs-dist';
import type { PDFDocumentProxy, PDFPageProxy } from 'pdfjs-dist';
import type { CropBox } from '@/types';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import './utils/setup-pdf-worker.js';
const editorState: {
pdf: PDFDocumentProxy | null;
+4 -2
View File
@@ -3765,11 +3765,12 @@ function openEditor(spec, caret) {
openPv = lockedPv;
renderLockedLines(ed, para.runs, lockedPv, para, para.box.x);
singleLine = false;
const countable = (s) => s.replace(/[\u200B\u2060\n]/g, '').length;
const wantChars = para.runs.reduce(
(n, r) => n + (r.text ? r.text.length : 0),
(n, r) => n + (r.text ? countable(r.text) : 0),
0
);
const gotChars = ed.textContent.replace(/[\u200B\u2060]/g, '').length;
const gotChars = countable(ed.textContent);
if (wantChars > 0 && gotChars < wantChars * 0.98) {
ed.textContent = '';
delete ed.dataset.locked;
@@ -3840,6 +3841,7 @@ function openEditor(spec, caret) {
pristine: !!spec.para && ed.dataset.locked === '1',
};
if (state.editing.pristine) wrap.classList.add('pristine');
else if (spec.para) renderPage();
ed.focus();
placeCaret(ed, caret?.x, caret?.y);
const refocus = () => {
+1 -5
View File
@@ -29,11 +29,7 @@ import {
} from '../config/pdf-tools.js';
import * as pdfjsLib from 'pdfjs-dist';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
export {
getRotationState,
+1 -5
View File
@@ -21,11 +21,7 @@ import {
import * as pdfjsLib from 'pdfjs-dist';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
const pageState: AddWatermarkState = {
file: null,
+1 -5
View File
@@ -12,11 +12,7 @@ import * as pdfjsLib from 'pdfjs-dist';
import type { AdjustColorsSettings } from '../types/adjust-colors-type.js';
import { t } from '../i18n/i18n';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
let files: File[] = [];
let cachedBaselineData: ImageData | null = null;
+1 -5
View File
@@ -14,6 +14,7 @@ import {
} from '../utils/helpers.js';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
import '../utils/setup-pdf-worker.js';
import {
BookmarkNode,
BookmarkTree,
@@ -32,11 +33,6 @@ import {
PDF_COLOR_MAP,
} from '@/types';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
const modalContainer = document.getElementById(
'modal-container'
) as HTMLElement | null;
+1 -5
View File
@@ -11,11 +11,7 @@ import * as pdfjsLib from 'pdfjs-dist';
import { CombineSinglePageState } from '@/types';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
const pageState: CombineSinglePageState = {
file: null,
+1 -5
View File
@@ -19,17 +19,13 @@ import type {
import { exportComparePdf } from '../compare/reporting/export-compare-pdf.ts';
import { LRUCache } from '../compare/lru-cache.ts';
import { COMPARE_CACHE_MAX_SIZE } from '../compare/config.ts';
import '../utils/setup-pdf-worker.js';
import {
getElement,
computeComparisonForPair,
getComparisonCacheKey,
} from './compare-render.ts';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
const pageState: CompareState = {
pdfDoc1: null,
pdfDoc2: null,
+1 -5
View File
@@ -13,11 +13,7 @@ import { showWasmRequiredDialog } from '../utils/wasm-provider.js';
import { loadPyMuPDF, isPyMuPDFAvailable } from '../utils/pymupdf-loader.js';
import * as pdfjsLib from 'pdfjs-dist';
import type { PDFDocumentProxy } from 'pdfjs-dist';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
const CONDENSE_PRESETS = {
light: {
+1 -5
View File
@@ -7,11 +7,7 @@ import * as pdfjsLib from 'pdfjs-dist';
import { PDFDocument as PDFLibDocument } from 'pdf-lib';
import { CropperState, CropPercentages } from '@/types';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
const cropperState: CropperState = {
pdfDoc: null,
+1 -5
View File
@@ -10,14 +10,10 @@ import * as pdfjsLib from 'pdfjs-dist';
import { PDFDocument as PDFLibDocument } from 'pdf-lib';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
// --- Global State for the Cropper Tool ---
import type { CropPercentages } from '@/types';
import type { PDFDocumentProxy } from 'pdfjs-dist';
import '../utils/setup-pdf-worker.js';
const cropperState: {
pdfDoc: PDFDocumentProxy | null;
+1 -5
View File
@@ -10,11 +10,7 @@ import { deletePdfPages } from '../utils/pdf-operations.js';
import * as pdfjsLib from 'pdfjs-dist';
import { DeletePagesState } from '@/types';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
const deleteState: DeletePagesState = {
file: null,
+1 -5
View File
@@ -10,11 +10,7 @@ import Sortable from 'sortablejs';
import { icons, createIcons } from 'lucide';
import { PDFDocument as PDFLibDocument } from 'pdf-lib';
import * as pdfjsLib from 'pdfjs-dist';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
const duplicateOrganizeState: {
sortableInstances: { pageGrid?: Sortable };
+1 -4
View File
@@ -30,10 +30,6 @@ import * as bwipjs from 'bwip-js/browser';
import 'pdfjs-dist/web/pdf_viewer.css';
// Initialize PDF.js worker
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import {
ExtractExistingFieldsResult,
@@ -43,6 +39,7 @@ import {
} from '@/types';
import { extractExistingFields as extractExistingPdfFields } from './form-creator-extraction.js';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
import '../utils/setup-pdf-worker.js';
let fields: FormField[] = [];
let selectedField: FormField | null = null;
+1 -5
View File
@@ -7,11 +7,7 @@ import * as pdfjsLib from 'pdfjs-dist';
import { InvertColorsState } from '@/types';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
const pageState: InvertColorsState = { file: null, pdfDoc: null };
+1 -5
View File
@@ -17,11 +17,7 @@ import { createIcons, icons } from 'lucide';
import * as pdfjsLib from 'pdfjs-dist';
import Sortable from 'sortablejs';
import type { MergeJob, MergeFile, MergeMessage, MergeResponse } from '@/types';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
interface MergeState {
pdfDocs: Record<string, pdfjsLib.PDFDocumentProxy>;
+1 -5
View File
@@ -7,11 +7,7 @@ import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
import * as pdfjsLib from 'pdfjs-dist';
import Sortable from 'sortablejs';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
interface OrganizeState {
file: File | null;
+1 -5
View File
@@ -5,11 +5,7 @@ import { PDFDocument as PDFLibDocument, degrees, PageSizes } from 'pdf-lib';
import * as pdfjsLib from 'pdfjs-dist';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
interface BookletState {
file: File | null;
+1 -5
View File
@@ -15,13 +15,9 @@ import { repairPdfFile } from './repair-pdf.js';
import { partitionIncomingFiles } from '../utils/multi-tool-file-input.js';
import { convertImagesToPdfFile } from '../utils/images-to-pdf-lib.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import { t } from '../i18n/i18n';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
import '../utils/setup-pdf-worker.js';
interface PageData {
id: string; // Unique ID for DOM reconciliation
+1 -5
View File
@@ -12,11 +12,7 @@ import * as pdfjsLib from 'pdfjs-dist';
import { PDFPageProxy } from 'pdfjs-dist';
import { t } from '../i18n/i18n';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
let files: File[] = [];
+1 -5
View File
@@ -18,11 +18,7 @@ import {
} from '../utils/comic-info.js';
import type { CbzOptions, ComicMetadata } from '@/types';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
let files: File[] = [];
+1 -5
View File
@@ -11,11 +11,7 @@ import { applyGreyscale } from '../utils/image-effects.js';
import * as pdfjsLib from 'pdfjs-dist';
import { t } from '../i18n/i18n';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
let files: File[] = [];
+1 -5
View File
@@ -12,11 +12,7 @@ import * as pdfjsLib from 'pdfjs-dist';
import { PDFPageProxy } from 'pdfjs-dist';
import { t } from '../i18n/i18n';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
let files: File[] = [];
+1 -5
View File
@@ -12,11 +12,7 @@ import * as pdfjsLib from 'pdfjs-dist';
import { PDFPageProxy } from 'pdfjs-dist';
import { t } from '../i18n/i18n';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
let files: File[] = [];
+1 -5
View File
@@ -15,11 +15,7 @@ import type Vips from 'wasm-vips';
import wasmUrl from 'wasm-vips/vips.wasm?url';
import type { TiffOptions } from '@/types';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
let files: File[] = [];
let vipsInstance: typeof Vips | null = null;
+1 -5
View File
@@ -12,11 +12,7 @@ import * as pdfjsLib from 'pdfjs-dist';
import { PDFPageProxy } from 'pdfjs-dist';
import { t } from '../i18n/i18n';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
let files: File[] = [];
+1 -5
View File
@@ -9,11 +9,7 @@ import { PDFDocument, PageSizes } from 'pdf-lib';
import * as pdfjsLib from 'pdfjs-dist';
import { createIcons, icons } from 'lucide';
import { PosterizeState } from '@/types';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
const pageState: PosterizeState = {
file: null,
+1 -5
View File
@@ -5,11 +5,7 @@ import { initPagePreview } from '../utils/page-preview.js';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
import { escapeHtml } from '../utils/helpers.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
// State
const pageState: {
+1 -5
View File
@@ -9,6 +9,7 @@ import {
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
import * as pdfjsLib from 'pdfjs-dist';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
import '../utils/setup-pdf-worker.js';
import {
ROTATION_MIN,
ROTATION_MAX,
@@ -18,11 +19,6 @@ import {
parseAngleInput,
} from '../utils/rotation-utils.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
interface RotateState {
file: File | null;
pdfDoc: PDFLibDocument | null;
+1 -5
View File
@@ -10,11 +10,7 @@ import { rotatePdfPages } from '../utils/pdf-operations.js';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
import * as pdfjsLib from 'pdfjs-dist';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
interface RotateState {
file: File | null;
+1 -5
View File
@@ -12,11 +12,7 @@ import * as pdfjsLib from 'pdfjs-dist';
import type { ScanSettings } from '../types/scanner-effect-type.js';
import { t } from '../i18n/i18n';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
let files: File[] = [];
let cachedBaselineData: ImageData | null = null;
+1 -5
View File
@@ -20,6 +20,7 @@ import { showWasmRequiredDialog } from '../utils/wasm-provider.js';
import JSZip from 'jszip';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
import type { QpdfInstanceExtended } from '@/types';
import '../utils/setup-pdf-worker.js';
import {
parseRangeGroups,
evenOddIndices,
@@ -31,11 +32,6 @@ import {
extractPagesWithQpdf,
} from '../utils/split-pdf-helpers.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
document.addEventListener('DOMContentLoaded', () => {
let visualSelectorRendered = false;
let isSplitting = false;
+1 -5
View File
@@ -12,11 +12,7 @@ import * as pdfjsLib from 'pdfjs-dist';
import { TextColorState } from '@/types';
import { loadPdfWithPasswordPrompt } from '../utils/password-prompt.js';
import { loadPdfDocument } from '../utils/load-pdf-document.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import '../utils/setup-pdf-worker.js';
const pageState: TextColorState = { file: null, pdfDoc: null };
+1 -4
View File
@@ -1,4 +1,5 @@
import './utils/map-upsert-polyfill.js';
import './utils/setup-pdf-worker.js';
import { categories } from './config/tools.js';
import { dom, switchView, hideAlert } from './ui.js';
import { ShortcutsManager } from './logic/shortcuts.js';
@@ -55,10 +56,6 @@ const init = async () => {
return;
}
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
if (__SIMPLE_MODE__) {
const hideBrandingSections = () => {
const heroSection = document.getElementById('hero-section');
+2
View File
@@ -0,0 +1,2 @@
import './utils/map-upsert-polyfill.js';
import 'pdfjs-dist/build/pdf.worker.min.mjs';
+1 -5
View File
@@ -14,11 +14,7 @@ import {
import * as pdfjsLib from 'pdfjs-dist';
import { t } from './i18n/i18n';
import type { FileInputOptions } from '@/types';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import './utils/setup-pdf-worker.js';
// Centralizing DOM element selection
export const dom = {
+1 -5
View File
@@ -1,11 +1,7 @@
import * as pdfjsLib from 'pdfjs-dist';
import type { PDFDocumentProxy } from 'pdfjs-dist';
import { PreviewState } from '@/types';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import './setup-pdf-worker.js';
const state: PreviewState = {
modal: null,
+1 -5
View File
@@ -1,9 +1,5 @@
import * as pdfjsLib from 'pdfjs-dist';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.min.mjs',
import.meta.url
).toString();
import './setup-pdf-worker.js';
/**
* Configuration for progressive rendering
+4
View File
@@ -0,0 +1,4 @@
import * as pdfjsLib from 'pdfjs-dist';
import pdfWorkerUrl from '../pdf.worker?worker&url';
pdfjsLib.GlobalWorkerOptions.workerSrc = pdfWorkerUrl;