@nypl/web-reader 4.3.4 → 4.3.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.
package/dist/index.d.ts CHANGED
@@ -423,14 +423,14 @@ declare type HTMLActiveReader = CommonReader & {
423
423
  };
424
424
  declare type ActiveReader = PDFActiveReader | HTMLActiveReader;
425
425
  declare type ReaderReturn = InactiveReader | LoadingReader | ActiveReader;
426
- declare type GetContent = (href: string) => Promise<string>;
426
+ declare type GetContent<T extends string | Uint8Array> = (href: string, proxyUrl?: string) => Promise<T>;
427
427
  declare type ReaderManagerArguments = {
428
428
  headerLeft?: JSX.Element;
429
429
  };
430
- declare type UseWebReaderArguments = {
430
+ declare type UseWebReaderArguments<T extends string | Uint8Array> = {
431
431
  webpubManifestUrl: string;
432
432
  proxyUrl?: string;
433
- getContent?: GetContent;
433
+ getContent?: GetContent<T>;
434
434
  pdfWorkerSrc?: string;
435
435
  injectablesReflowable?: Injectable[];
436
436
  injectablesFixed?: Injectable[];
@@ -470,20 +470,23 @@ declare type UseWebReaderArguments = {
470
470
  */
471
471
  persistSettings?: boolean;
472
472
  };
473
- declare type ActiveReaderArguments = UseWebReaderArguments & {
473
+ declare type ActiveReaderArguments<T extends string | Uint8Array> = UseWebReaderArguments<T> & {
474
474
  manifest: WebpubManifest;
475
475
  };
476
476
  declare type InactiveReaderArguments = undefined;
477
- declare type ReaderArguments = ActiveReaderArguments | InactiveReaderArguments;
478
477
 
479
478
  /**
480
479
  * The React hook that exposes the main API into the reader. It
481
480
  * will determine the type of the webpub, and then use the correct reader
482
481
  * for that type.
483
482
  */
484
- declare function useWebReader(args: UseWebReaderArguments): HTMLActiveReader | PDFActiveReader | LoadingReader;
483
+ declare function useWebReader(args: UseWebReaderArguments<string | Uint8Array>): HTMLActiveReader | PDFActiveReader | LoadingReader;
485
484
 
486
- declare function useHtmlReader(args: ReaderArguments): ReaderReturn;
485
+ declare type HtmlReaderArguments = ActiveReaderArguments<string> | InactiveReaderArguments;
486
+
487
+ declare function useHtmlReader(args: HtmlReaderArguments): ReaderReturn;
488
+
489
+ declare type PdfReaderArguments = ActiveReaderArguments<Uint8Array> | InactiveReaderArguments;
487
490
 
488
491
  /**
489
492
  * The PDF reader
@@ -494,7 +497,7 @@ declare function useHtmlReader(args: ReaderArguments): ReaderReturn;
494
497
  * @param args T
495
498
  * @returns
496
499
  */
497
- declare function usePdfReader(args: ReaderArguments): ReaderReturn;
500
+ declare function usePdfReader(args: PdfReaderArguments): ReaderReturn;
498
501
 
499
502
  declare type Dict<T = any> = Record<string, T>;
500
503
 
@@ -526,7 +529,7 @@ declare function addTocToManifest(manifest: WebpubManifest, getResource: (url: s
526
529
  /**
527
530
  * The main React component export.
528
531
  */
529
- declare type WebReaderProps = UseWebReaderArguments & ReaderManagerArguments;
532
+ declare type WebReaderProps = UseWebReaderArguments<string | Uint8Array> & ReaderManagerArguments;
530
533
  declare const WebReaderWithoutBoundary: FC<WebReaderProps>;
531
534
  declare const WebReader: FC<WebReaderProps>;
532
535
 
package/dist/index.js CHANGED
@@ -6720,7 +6720,7 @@ var getResourceUrl = (index, readingOrder) => {
6720
6720
  }
6721
6721
  return readingOrder[index].href;
6722
6722
  };
6723
- var loadResource = (resourceUrl, proxyUrl) => __async(void 0, null, function* () {
6723
+ var fetchAsUint8Array = (resourceUrl, proxyUrl) => __async(void 0, null, function* () {
6724
6724
  const url = proxyUrl ? `${proxyUrl}${encodeURIComponent(resourceUrl)}` : resourceUrl;
6725
6725
  const response = yield fetch(url, { mode: "cors" });
6726
6726
  const array = new Uint8Array(yield response.arrayBuffer());
@@ -6874,6 +6874,12 @@ function makePdfReducer(args) {
6874
6874
  // end of the PDF that was just parsed
6875
6875
  pageNumber: state2.pageNumber === -1 ? action.numPages : state2.pageNumber
6876
6876
  });
6877
+ case "PDF_LOAD_ERROR":
6878
+ return __spreadProps(__spreadValues({}, state2), {
6879
+ state: "ERROR",
6880
+ error: action.error,
6881
+ settings: DEFAULT_SETTINGS
6882
+ });
6877
6883
  case "SET_SCROLL":
6878
6884
  if (state2.state !== "ACTIVE") {
6879
6885
  return handleInvalidTransition(state2, action);
@@ -6929,7 +6935,7 @@ function usePdfReader(args) {
6929
6935
  webpubManifestUrl,
6930
6936
  manifest,
6931
6937
  proxyUrl,
6932
- getContent,
6938
+ getContent = fetchAsUint8Array,
6933
6939
  injectablesReflowable,
6934
6940
  injectablesFixed,
6935
6941
  height = DEFAULT_HEIGHT,
@@ -6985,17 +6991,22 @@ function usePdfReader(args) {
6985
6991
  if (!manifest.readingOrder || !manifest.readingOrder.length) {
6986
6992
  throw new Error("Manifest has no Reading Order");
6987
6993
  }
6988
- const resourceUrl = getResourceUrl(
6994
+ const currentResource = getResourceUrl(
6989
6995
  state2.resourceIndex,
6990
6996
  manifest.readingOrder
6991
6997
  );
6992
- loadResource(resourceUrl, proxyUrl).then((data) => {
6993
- dispatch({
6994
- type: "RESOURCE_FETCH_SUCCESS",
6995
- resource: { data }
6998
+ const fetchResource = () => __async(this, null, function* () {
6999
+ getContent(currentResource, proxyUrl).then((data) => {
7000
+ dispatch({
7001
+ type: "RESOURCE_FETCH_SUCCESS",
7002
+ resource: { data }
7003
+ });
6996
7004
  });
6997
7005
  });
6998
- }, [state2.resourceIndex, manifest, proxyUrl]);
7006
+ if (manifest.readingOrder && manifest.readingOrder.length) {
7007
+ fetchResource();
7008
+ }
7009
+ }, [state2.resourceIndex, manifest, proxyUrl, getContent]);
6999
7010
  const resizePage = React34.useCallback(
7000
7011
  (pdfWidth, pdfHeight, containerSize2) => {
7001
7012
  const wRatio = pdfWidth / containerSize2.width;
@@ -7084,12 +7095,20 @@ function usePdfReader(args) {
7084
7095
  state: null
7085
7096
  };
7086
7097
  }
7098
+ if (state2.state === "ERROR")
7099
+ throw state2.error;
7087
7100
  const onDocumentLoadSuccess = ({ numPages }) => {
7088
7101
  dispatch({
7089
7102
  type: "PDF_PARSED",
7090
7103
  numPages
7091
7104
  });
7092
7105
  };
7106
+ const onDocumentLoadError = (error2) => {
7107
+ dispatch({
7108
+ type: "PDF_LOAD_ERROR",
7109
+ error: error2
7110
+ });
7111
+ };
7093
7112
  function onRenderSuccess(page) {
7094
7113
  if (!page.height || !page.width)
7095
7114
  throw new Error(
@@ -7129,28 +7148,36 @@ function usePdfReader(args) {
7129
7148
  overflow-y: auto;
7130
7149
  }
7131
7150
  `),
7132
- /* @__PURE__ */ React34.createElement(import_react_pdf2.Document, { file: state2.resource, onLoadSuccess: onDocumentLoadSuccess }, isParsed && state2.numPages && /* @__PURE__ */ React34.createElement(React34.Fragment, null, state2.settings.isScrolling && Array.from(new Array(state2.numPages), (_, index) => /* @__PURE__ */ React34.createElement(
7133
- ScrollPage_default,
7151
+ /* @__PURE__ */ React34.createElement(
7152
+ import_react_pdf2.Document,
7134
7153
  {
7135
- key: `page_${index + 1}`,
7136
- width: containerSize.width,
7137
- placeholderHeight: state2.pdfHeight,
7138
- placeholderWidth: state2.pdfWidth,
7139
- scale: state2.scale,
7140
- pageNumber: index + 1,
7141
- onLoadSuccess: onRenderSuccess
7142
- }
7143
- )), !state2.settings.isScrolling && /* @__PURE__ */ React34.createElement(
7144
- ChakraPage_default,
7145
- {
7146
- pageNumber: state2.pageNumber,
7147
- onLoadSuccess: onRenderSuccess,
7148
- width: state2.pageWidth,
7149
- height: state2.pageHeight,
7150
- scale: state2.scale,
7151
- loading: /* @__PURE__ */ React34.createElement(React34.Fragment, null)
7152
- }
7153
- )))
7154
+ file: state2.resource,
7155
+ onLoadSuccess: onDocumentLoadSuccess,
7156
+ onLoadError: onDocumentLoadError
7157
+ },
7158
+ isParsed && state2.numPages && /* @__PURE__ */ React34.createElement(React34.Fragment, null, state2.settings.isScrolling && Array.from(new Array(state2.numPages), (_, index) => /* @__PURE__ */ React34.createElement(
7159
+ ScrollPage_default,
7160
+ {
7161
+ key: `page_${index + 1}`,
7162
+ width: containerSize.width,
7163
+ placeholderHeight: state2.pdfHeight,
7164
+ placeholderWidth: state2.pdfWidth,
7165
+ scale: state2.scale,
7166
+ pageNumber: index + 1,
7167
+ onLoadSuccess: onRenderSuccess
7168
+ }
7169
+ )), !state2.settings.isScrolling && /* @__PURE__ */ React34.createElement(
7170
+ ChakraPage_default,
7171
+ {
7172
+ pageNumber: state2.pageNumber,
7173
+ onLoadSuccess: onRenderSuccess,
7174
+ width: state2.pageWidth,
7175
+ height: state2.pageHeight,
7176
+ scale: state2.scale,
7177
+ loading: /* @__PURE__ */ React34.createElement(React34.Fragment, null)
7178
+ }
7179
+ ))
7180
+ )
7154
7181
  ),
7155
7182
  state: state2,
7156
7183
  manifest,
@@ -8389,11 +8416,13 @@ function useWebReader(args) {
8389
8416
  const readerType = getReaderType(
8390
8417
  manifest ? manifest.metadata.conformsTo : null
8391
8418
  );
8419
+ const getContentHtml = getContent;
8420
+ const getContentPdf = getContent;
8392
8421
  const htmlReader = useHtmlReader(
8393
8422
  readerType === "HTML" && manifest ? {
8394
8423
  webpubManifestUrl,
8395
8424
  manifest,
8396
- getContent,
8425
+ getContent: getContentHtml,
8397
8426
  injectablesReflowable,
8398
8427
  injectablesFixed,
8399
8428
  height,
@@ -8406,6 +8435,7 @@ function useWebReader(args) {
8406
8435
  readerType === "PDF" && manifest ? {
8407
8436
  webpubManifestUrl,
8408
8437
  manifest,
8438
+ getContent: getContentPdf,
8409
8439
  proxyUrl,
8410
8440
  pdfWorkerSrc,
8411
8441
  height,