Files
dsh-web/image/install-pdf-compat.mjs
T

26 lines
1.6 KiB
JavaScript

import { readFileSync, writeFileSync } from 'node:fs';
import { join, resolve } from 'node:path';
import { pathToFileURL } from 'node:url';
export const workerTarget = 'new Blob([_dsh_pdf_worker_default,';
export const marker = '// dsh-pdf-map-compat-v1';
export const compat = readFileSync(new URL('./pdf-map-compat.js', import.meta.url), 'utf8');
export function patchPdf(source, hostVersion, packageVersion) {
if (hostVersion !== '0.2.1-rc.2' || packageVersion !== '0.2.1-rc.2') throw new Error('unsupported PDF preview version');
if (source.includes(marker)) throw new Error('PDF compatibility patch already installed');
if (source.split(workerTarget).length !== 2 || !source.includes('this.#methodPromises.getOrInsertComputed(')) {
throw new Error('unexpected PDF.js bundle: expected main-thread upsert and exactly one worker Blob');
}
return marker + '\n' + compat + '\n' + source.replace(workerTarget, 'new Blob([' + JSON.stringify(compat) + ', _dsh_pdf_worker_default,');
}
export function install(root = '/usr/local/lib/node_modules/@deepseek-ai/dsh') {
const dir = join(root, 'node_modules/@deepseek-ai/dsh-client-ui-sidebar-documentpreview');
const version = path => JSON.parse(readFileSync(join(path, 'package.json'), 'utf8')).version;
const file = join(dir, 'lib/client.pdf.js');
writeFileSync(file, patchPdf(readFileSync(file, 'utf8'), version(root), version(dir)));
console.log('Installed PDF Map compatibility patch (main thread + worker)');
}
if (process.argv[1] && import.meta.url === pathToFileURL(resolve(process.argv[1])).href) install(process.argv[2]);