@foxycape/core 1.1.4 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
1
  import { IFileParser, IInternalUrlBuilder, SpineFile } from '../../../kernal';
2
+ import { DocumentInitParameters } from '../../../pdfjs/types/src/display/api';
2
3
 
3
4
  import * as pdfjsLib from '../../../pdfjs/legacy/build/pdf.mjs';
4
5
  export interface IPdfFileParser extends IFileParser {
@@ -11,4 +12,5 @@ export type PdfFileParserOptions = {
11
12
  showPasswordPrompt?: boolean;
12
13
  standardPasswordProvider?: (fileParser: IFileParser, spineFile?: SpineFile) => Promise<string | undefined>;
13
14
  internalUrlBuilder?: IInternalUrlBuilder;
15
+ documentInitParametersCallback?: (documentInitParameters: DocumentInitParameters) => void;
14
16
  };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../kernal/common/text.cjs"),t=require("../../../kernal/IFileParser.cjs"),n=require("../../../kernal/nav/Nav.cjs"),r=require("../loadPdfDocument.cjs"),i=require("../../base/fileParser/BaseFileParser.cjs"),a=require("./PdfTextDocument.cjs"),o=require("./PdfPasswordProvider.cjs");var s=class extends i.BaseFileParser{constructor(e,t,n,r,i,a,s,c,l,u,d,f){super(e,t,n,r,i,u,d),this.events=a,this.locale=s,this.context=c,this.storage=l,this.url=u,this.extension=d,this.options=f,this.getPdfSpineFileData=async e=>{let t,n=!1;if(e.data){if(e.data instanceof ArrayBuffer)e.data.byteLength>0&&(t=new Uint8Array(e.data),n=!0);else if(e.data.size>0){let n=await e.data.arrayBuffer();t=new Uint8Array(n)}}if(!n){if(!e.url)return new Uint8Array;t=(await this.getFileBytes(e.url)).data}return t},this.pdfDocs=new Map,this.passwordProvider=new o.PdfPasswordProvider(a,s,c,l),this.bindDefaultPasswordFlow()}bindDefaultPasswordFlow(){this.options.standardPasswordProvider||(this.options.standardPasswordProvider=this.passwordProvider.getPassword)}async buildLocation(t,r){let i=typeof t==`string`?new n.NavPoint(``,t):t,a=await super.buildLocation(t,r);return(i.startPageNumber??0)>0&&(a.current=i.startPageNumber,a.unit=`page`),e.isNullOrWhiteSpace(i.pdfDest)||(a.pdfDest=i.pdfDest),a}async getCover(e,t){return null}async getTextDocuments(){if(this.textDocuments)return this.textDocuments;this.textDocuments=[];let e=await this.getSpineFiles();for(let t=0;t<e.length;t++){let n=e[t],r=new a.PdfTextDocument(this,n);this.textDocuments.push(r)}return this.textDocuments}async getPdfDocument(e){let t=this.pdfDocs.get(e.url);return t&&!t.loadingTask.destroyed?t:(t=await this.internalGetPdfDocumentProxy(e),this.pdfDocs.set(e.url,t),t)}async internalGetPdfDocumentProxy(e){let t;this.options.standardPasswordProvider&&(t=await this.options.standardPasswordProvider(this,e));let n=await this.getPdfSpineFileData(e);return await r.loadPdfDocument(n,{password:t,cMapUrl:this.options.cMapUrl,standardFontDataUrl:this.options.standardFontDataUrl,showPasswordPrompt:this.options.showPasswordPrompt,passwordPrompt:this.passwordProvider.onPasswordPrompt,internalUrlBuilder:this.options.internalUrlBuilder})}async getFileHash(e){if(this.isMultiFiles)return``;if(!e||e==`SHA-1`){if(this.currentWholePdfFileHash)return this.currentWholePdfFileHash;let e=await Array.from(this.pdfDocs.values())[0].getData();return this.currentWholePdfFileHash=await this.crypto.digest(e,`SHA-1`),this.currentWholePdfFileHash}let t=await Array.from(this.pdfDocs.values())[0].getData();return await this.crypto.digest(t,`MD5`)}async parseUrl(e,n){let r=await super.parseUrl(e,n);if(r.spineFiles||=[],!r.isMultiFiles){let e=new t.SpineFile(r.data,r.mainUrl,this.extension),n=await this.internalGetPdfDocumentProxy(e);for(let e=0;e<n.numPages;e++){let i=`${e+1}.pdf`,a=new t.SpineFile(null,i,this.extension);r.spineFiles.push(a),this.pdfDocs.set(i,n)}r.nav=await this.initNav(n)}return r}async measureFilePercentage(e,t){if(!e)return;if(!e.find(e=>e.symbolCount==null)){e[0]?.ratio!=null&&this.applyProgressRanges(e);return}let n=0;e.forEach(e=>{(e.symbolCount==null||e.symbolCount<=0)&&(e.symbolCount=1),n+=e.symbolCount}),n<=0&&(n=1),e.forEach(e=>{e.ratio??=e.symbolCount/n}),this.applyProgressRanges(e)}async getNav(){return await super.getNav()||null}async dispose(){await super.dispose();for(let[e,t]of this.pdfDocs.entries())try{await t.cleanup(),t.loadingTask&&await t.loadingTask.destroy(),await t.destroy()}catch{}if(this.pdfDocs.clear(),this.textDocuments){for(let e of this.textDocuments)await e.dispose();this.textDocuments.splice(0)}}async initNav(e){let t=new n.Nav;if(!e)return t;let r=await e.getOutline();if(r==null||r.length==0)return t;for(let n=0;n<r.length;n++){let i=r[n],a=await this.getPageNumber(e,i.dest),o=await this.formatPdfDest(e,i.dest),s=await this.getNavPoint(e,i.title,a,o,i.items);t.navPoints.push(s)}return t}async getNavPoint(e,t,r,i,a){t=t?.trim().replace(/[\x00-\x1f]/gi,``);let o=r.toString()+`.pdf`,s=new n.NavPoint(t,o,r,i);if(a!=null&&a.length>0)for(let t=0;t<a.length;t++){let n=await this.getPageNumber(e,a[t].dest),r=await this.formatPdfDest(e,a[t].dest),i=await this.getNavPoint(e,a[t].title,n,r,a[t].items);s.children.push(i)}return s}async formatPdfDest(e,t){let n;return n=typeof t==`string`?await e.getDestination(t):t,JSON.stringify(n)}async getPageNumber(e,t){let n,r=0;try{if(n=typeof t==`string`?await e.getDestination(t):t,Array.isArray(n)){let[t]=n;typeof t==`object`&&t?r=await e.getPageIndex(t)+1:Number.isInteger(t)&&(r=t+1)}}catch{}return r}};exports.PdfFileParser=s;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../kernal/common/text.cjs"),t=require("../../../kernal/IFileParser.cjs"),n=require("../../../kernal/nav/Nav.cjs"),r=require("../loadPdfDocument.cjs"),i=require("../../base/fileParser/BaseFileParser.cjs"),a=require("./PdfTextDocument.cjs"),o=require("./PdfPasswordProvider.cjs");var s=class extends i.BaseFileParser{constructor(e,t,n,r,i,a,s,c,l,u,d,f){super(e,t,n,r,i,u,d),this.events=a,this.locale=s,this.context=c,this.storage=l,this.url=u,this.extension=d,this.options=f,this.getPdfSpineFileData=async e=>{let t,n=!1;if(e.data){if(e.data instanceof ArrayBuffer)e.data.byteLength>0&&(t=new Uint8Array(e.data),n=!0);else if(e.data.size>0){let n=await e.data.arrayBuffer();t=new Uint8Array(n)}}if(!n){if(!e.url)return new Uint8Array;t=(await this.getFileBytes(e.url)).data}return t},this.pdfDocs=new Map,this.passwordProvider=new o.PdfPasswordProvider(a,s,c,l),this.bindDefaultPasswordFlow()}bindDefaultPasswordFlow(){this.options.standardPasswordProvider||(this.options.standardPasswordProvider=this.passwordProvider.getPassword)}async buildLocation(t,r){let i=typeof t==`string`?new n.NavPoint(``,t):t,a=await super.buildLocation(t,r);return(i.startPageNumber??0)>0&&(a.current=i.startPageNumber,a.unit=`page`),e.isNullOrWhiteSpace(i.pdfDest)||(a.pdfDest=i.pdfDest),a}async getCover(e,t){return null}async getTextDocuments(){if(this.textDocuments)return this.textDocuments;this.textDocuments=[];let e=await this.getSpineFiles();for(let t=0;t<e.length;t++){let n=e[t],r=new a.PdfTextDocument(this,n);this.textDocuments.push(r)}return this.textDocuments}async getPdfDocument(e){let t=this.pdfDocs.get(e.url);return t&&!t.loadingTask.destroyed?t:(t=await this.internalGetPdfDocumentProxy(e),this.pdfDocs.set(e.url,t),t)}async internalGetPdfDocumentProxy(e){let t;this.options.standardPasswordProvider&&(t=await this.options.standardPasswordProvider(this,e));let n=await this.getPdfSpineFileData(e);return await r.loadPdfDocument(n,{password:t,cMapUrl:this.options.cMapUrl,standardFontDataUrl:this.options.standardFontDataUrl,showPasswordPrompt:this.options.showPasswordPrompt,passwordPrompt:this.passwordProvider.onPasswordPrompt,internalUrlBuilder:this.options.internalUrlBuilder,documentInitParametersCallback:this.options.documentInitParametersCallback})}async getFileHash(e){if(this.isMultiFiles)return``;if(!e||e==`SHA-1`){if(this.currentWholePdfFileHash)return this.currentWholePdfFileHash;let e=await Array.from(this.pdfDocs.values())[0].getData();return this.currentWholePdfFileHash=await this.crypto.digest(e,`SHA-1`),this.currentWholePdfFileHash}let t=await Array.from(this.pdfDocs.values())[0].getData();return await this.crypto.digest(t,`MD5`)}async parseUrl(e,n){let r=await super.parseUrl(e,n);if(r.spineFiles||=[],!r.isMultiFiles){let e=new t.SpineFile(r.data,r.mainUrl,this.extension),n=await this.internalGetPdfDocumentProxy(e);for(let e=0;e<n.numPages;e++){let i=`${e+1}.pdf`,a=new t.SpineFile(null,i,this.extension);r.spineFiles.push(a),this.pdfDocs.set(i,n)}r.nav=await this.initNav(n)}return r}async measureFilePercentage(e,t){if(!e)return;if(!e.find(e=>e.symbolCount==null)){e[0]?.ratio!=null&&this.applyProgressRanges(e);return}let n=0;e.forEach(e=>{(e.symbolCount==null||e.symbolCount<=0)&&(e.symbolCount=1),n+=e.symbolCount}),n<=0&&(n=1),e.forEach(e=>{e.ratio??=e.symbolCount/n}),this.applyProgressRanges(e)}async getNav(){return await super.getNav()||null}async dispose(){await super.dispose();for(let[e,t]of this.pdfDocs.entries())try{await t.cleanup(),t.loadingTask&&await t.loadingTask.destroy(),await t.destroy()}catch{}if(this.pdfDocs.clear(),this.textDocuments){for(let e of this.textDocuments)await e.dispose();this.textDocuments.splice(0)}}async initNav(e){let t=new n.Nav;if(!e)return t;let r=await e.getOutline();if(r==null||r.length==0)return t;for(let n=0;n<r.length;n++){let i=r[n],a=await this.getPageNumber(e,i.dest),o=await this.formatPdfDest(e,i.dest),s=await this.getNavPoint(e,i.title,a,o,i.items);t.navPoints.push(s)}return t}async getNavPoint(e,t,r,i,a){t=t?.trim().replace(/[\x00-\x1f]/gi,``);let o=r.toString()+`.pdf`,s=new n.NavPoint(t,o,r,i);if(a!=null&&a.length>0)for(let t=0;t<a.length;t++){let n=await this.getPageNumber(e,a[t].dest),r=await this.formatPdfDest(e,a[t].dest),i=await this.getNavPoint(e,a[t].title,n,r,a[t].items);s.children.push(i)}return s}async formatPdfDest(e,t){let n;return n=typeof t==`string`?await e.getDestination(t):t,JSON.stringify(n)}async getPageNumber(e,t){let n,r=0;try{if(n=typeof t==`string`?await e.getDestination(t):t,Array.isArray(n)){let[t]=n;typeof t==`object`&&t?r=await e.getPageIndex(t)+1:Number.isInteger(t)&&(r=t+1)}}catch{}return r}};exports.PdfFileParser=s;
@@ -58,7 +58,8 @@ var c = class extends a {
58
58
  standardFontDataUrl: this.options.standardFontDataUrl,
59
59
  showPasswordPrompt: this.options.showPasswordPrompt,
60
60
  passwordPrompt: this.passwordProvider.onPasswordPrompt,
61
- internalUrlBuilder: this.options.internalUrlBuilder
61
+ internalUrlBuilder: this.options.internalUrlBuilder,
62
+ documentInitParametersCallback: this.options.documentInitParametersCallback
62
63
  });
63
64
  }
64
65
  async getFileHash(e) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foxycape/core",
3
- "version": "1.1.4",
3
+ "version": "1.1.5",
4
4
  "description": "Browser-side multi-format reader kernel with pluggable parsers, renderers, services, and plugins.",
5
5
  "license": "MIT",
6
6
  "type": "module",