#!/bin/bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" PDFJS_DIR="$PROJECT_DIR/public/pdfjs" if [ -n "${1:-}" ]; then VERSION="$1" else echo "Fetching latest PDF.js version..." VERSION=$(curl -sL "https://api.github.com/repos/mozilla/pdf.js/releases/latest" \ | grep '"tag_name"' | head -1 | sed -E 's/.*"v([^"]+)".*/\1/') if [ -z "$VERSION" ]; then echo "Error: Could not determine latest version." >&2 exit 1 fi fi echo "Updating PDF.js to v${VERSION}..." DOWNLOAD_URL="https://github.com/mozilla/pdf.js/releases/download/v${VERSION}/pdfjs-${VERSION}-dist.zip" TMPFILE=$(mktemp /tmp/pdfjs-XXXXXX.zip) echo "Downloading from ${DOWNLOAD_URL}..." curl -L -o "$TMPFILE" "$DOWNLOAD_URL" INIT_SCRIPT="" if [ -f "$PDFJS_DIR/margin-pdfjs-init.js" ]; then INIT_SCRIPT=$(cat "$PDFJS_DIR/margin-pdfjs-init.js") fi rm -rf "$PDFJS_DIR" mkdir -p "$PDFJS_DIR" echo "Extracting..." unzip -q -o "$TMPFILE" -d "$PDFJS_DIR" rm -f "$TMPFILE" if [ -n "$INIT_SCRIPT" ]; then echo "$INIT_SCRIPT" > "$PDFJS_DIR/margin-pdfjs-init.js" fi echo "Cleaning up..." rm -f "$PDFJS_DIR/web/compressed.tracemonkey-pldi-09.pdf" rm -f "$PDFJS_DIR/web/debugger.css" "$PDFJS_DIR/web/debugger.mjs" rm -rf "$PDFJS_DIR/web/wasm" find "$PDFJS_DIR" -name '*.map' -delete KEEP_LOCALES="ar bg ca cs da de el en-GB en-US es-AR es-CL es-ES es-MX et fi fr he hi-IN hr hu id it ja ko lt lv ms nb-NO nl pl pt-BR pt-PT ro ru sk sl sr sv-SE th tr uk vi zh-CN zh-TW" LOCALE_DIR="$PDFJS_DIR/web/locale" if [ -d "$LOCALE_DIR" ]; then for dir in "$LOCALE_DIR"/*/; do locale=$(basename "$dir") if ! echo " $KEEP_LOCALES " | grep -q " $locale "; then rm -rf "$dir" fi done if command -v python3 &>/dev/null && [ -f "$LOCALE_DIR/locale.json" ]; then python3 -c " import json, sys keep = set('$KEEP_LOCALES'.split()) d = json.load(open('$LOCALE_DIR/locale.json')) filtered = {k:v for k,v in d.items() if k in keep} json.dump(filtered, open('$LOCALE_DIR/locale.json','w'), ensure_ascii=False, separators=(',',':')) print(f' Kept {len(filtered)} of {len(d)} locales') " fi fi echo "Patching viewer.mjs (origin check bypass)..." sed -i '' 's/if (HOSTED_VIEWER_ORIGINS.has(viewerOrigin)) {/if (true) {/' \ "$PDFJS_DIR/web/viewer.mjs" echo "Patching viewer.html (script injection)..." sed -i '' 's||\ \ |' \ "$PDFJS_DIR/web/viewer.html" FINAL_SIZE=$(du -sh "$PDFJS_DIR" | cut -f1) echo "" echo "PDF.js v${VERSION} installed successfully (${FINAL_SIZE})" echo "Location: $PDFJS_DIR"