unpdf 1.2.2 → 1.3.1

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.
Files changed (44) hide show
  1. package/README.md +6 -1
  2. package/dist/index.cjs +45 -3
  3. package/dist/index.d.cts +5 -2
  4. package/dist/index.d.mts +5 -2
  5. package/dist/index.d.ts +5 -2
  6. package/dist/index.mjs +45 -3
  7. package/dist/pdfjs.mjs +1 -1
  8. package/dist/types/src/display/annotation_layer.d.ts +5 -0
  9. package/dist/types/src/display/api.d.ts +41 -19
  10. package/dist/types/src/display/canvas.d.ts +82 -80
  11. package/dist/types/src/display/canvas_dependency_tracker.d.ts +144 -0
  12. package/dist/types/src/display/display_utils.d.ts +1 -1
  13. package/dist/types/src/display/draw_layer.d.ts +2 -2
  14. package/dist/types/src/display/editor/alt_text.d.ts +1 -1
  15. package/dist/types/src/display/editor/annotation_editor_layer.d.ts +1 -1
  16. package/dist/types/src/display/editor/color_picker.d.ts +2 -2
  17. package/dist/types/src/display/editor/draw.d.ts +7 -7
  18. package/dist/types/src/display/editor/drawers/freedraw.d.ts +3 -3
  19. package/dist/types/src/display/editor/drawers/signaturedraw.d.ts +13 -13
  20. package/dist/types/src/display/editor/editor.d.ts +7 -1
  21. package/dist/types/src/display/editor/freetext.d.ts +4 -2
  22. package/dist/types/src/display/editor/highlight.d.ts +3 -3
  23. package/dist/types/src/display/editor/stamp.d.ts +1 -1
  24. package/dist/types/src/display/editor/toolbar.d.ts +3 -3
  25. package/dist/types/src/display/editor/tools.d.ts +2 -1
  26. package/dist/types/src/display/fetch_stream.d.ts +2 -2
  27. package/dist/types/src/display/text_layer.d.ts +9 -9
  28. package/dist/types/src/display/worker_options.d.ts +2 -2
  29. package/dist/types/src/shared/util.d.ts +7 -3
  30. package/dist/types/web/annotation_layer_builder.d.ts +4 -1
  31. package/dist/types/web/app_options.d.ts +1 -1
  32. package/dist/types/web/autolinker.d.ts +2 -2
  33. package/dist/types/web/base_pdf_page_view.d.ts +2 -0
  34. package/dist/types/web/genericl10n.d.ts +5 -5
  35. package/dist/types/web/interfaces.d.ts +7 -0
  36. package/dist/types/web/l10n.d.ts +2 -2
  37. package/dist/types/web/pdf_link_service.d.ts +7 -0
  38. package/dist/types/web/pdf_page_detail_view.d.ts +1 -0
  39. package/dist/types/web/pdf_page_view.d.ts +9 -0
  40. package/dist/types/web/pdf_thumbnail_view.d.ts +1 -1
  41. package/dist/types/web/pdf_viewer.d.ts +13 -0
  42. package/dist/types/web/text_accessibility.d.ts +1 -1
  43. package/dist/types/web/text_layer_builder.d.ts +4 -4
  44. package/package.json +8 -8
package/README.md CHANGED
@@ -18,7 +18,7 @@ This library is also intended as a modern alternative to the unmaintained but st
18
18
  ## PDF.js Compatibility
19
19
 
20
20
  > [!Tip]
21
- > The serverless PDF.js bundle provided by `unpdf` is built from PDF.js v5.4.54.
21
+ > The serverless PDF.js bundle provided by `unpdf` is built from PDF.js v5.4.149.
22
22
 
23
23
  You can use an [official PDF.js build](#official-or-legacy-pdfjs-build) by using the [`definePDFJSModule`](#definepdfjsmodule) method. This is useful if you want to use a specific version or a custom build of PDF.js.
24
24
 
@@ -131,11 +131,16 @@ function getResolvedPDFJS(): Promise<PDFJS>
131
131
 
132
132
  ### `getMeta`
133
133
 
134
+ Extracts metadata from a PDF. If `parseDates` is set to `true`, the date properties will be parsed into `Date` objects.
135
+
134
136
  **Type Declaration**
135
137
 
136
138
  ```ts
137
139
  function getMeta(
138
140
  data: DocumentInitParameters['data'] | PDFDocumentProxy,
141
+ options?: {
142
+ parseDates?: boolean
143
+ },
139
144
  ): Promise<{
140
145
  info: Record<string, any>
141
146
  metadata: Record<string, any>
package/dist/index.cjs CHANGED
@@ -229,14 +229,56 @@ async function getPageLinks(document, pageNumber) {
229
229
  return links;
230
230
  }
231
231
 
232
- async function getMeta$1(data) {
232
+ const XMP_DATE_PROPERTIES = [
233
+ "xmp:createdate",
234
+ "xmp:modifydate",
235
+ "xmp:metadatadate",
236
+ "xap:createdate",
237
+ "xap:modifydate",
238
+ "xap:metadatadate"
239
+ ];
240
+ async function getMeta$1(data, options = {}) {
233
241
  const pdf = isPDFDocumentProxy(data) ? data : await getDocumentProxy(data);
234
242
  const meta = await pdf.getMetadata();
243
+ const info = meta?.info || {};
244
+ if (options.parseDates) {
245
+ const { PDFDateString } = await getResolvedPDFJS();
246
+ if (info?.CreationDate) {
247
+ info.CreationDate = PDFDateString.toDateObject(info?.CreationDate);
248
+ }
249
+ if (info?.ModDate) {
250
+ info.ModDate = PDFDateString.toDateObject(info?.ModDate);
251
+ }
252
+ if (meta.metadata) {
253
+ meta.metadata = new Proxy(meta.metadata, {
254
+ get(target, prop) {
255
+ if (prop === "get") {
256
+ return (name) => {
257
+ const value = target.get(name);
258
+ if (XMP_DATE_PROPERTIES.includes(name) && value) {
259
+ return parseISODateString(value);
260
+ }
261
+ return value;
262
+ };
263
+ }
264
+ return target[prop];
265
+ }
266
+ });
267
+ }
268
+ }
235
269
  return {
236
- info: meta?.info ?? {},
237
- metadata: { ...meta?.metadata }
270
+ info,
271
+ metadata: meta?.metadata || {}
238
272
  };
239
273
  }
274
+ function parseISODateString(isoDateString) {
275
+ if (!isoDateString)
276
+ return;
277
+ const parsedDate = Date.parse(isoDateString);
278
+ if (!Number.isNaN(parsedDate)) {
279
+ return new Date(parsedDate);
280
+ }
281
+ }
240
282
 
241
283
  async function extractText$1(data, options = {}) {
242
284
  const { mergePages = false } = options;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as _napi_rs_canvas from '@napi-rs/canvas';
2
2
  import { DocumentInitParameters, PDFDocumentProxy } from './types/src/display/api';
3
+ import * as pdfjs_dist_types_src_display_metadata from './types/src/display/metadata';
3
4
  import * as PDFJS from './types/src/pdf';
4
5
 
5
6
  interface ExtractedImageObject {
@@ -48,9 +49,11 @@ declare function extractLinks$1(data: DocumentInitParameters['data'] | PDFDocume
48
49
  links: string[];
49
50
  }>;
50
51
 
51
- declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
52
+ declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, options?: {
53
+ parseDates?: boolean;
54
+ }): Promise<{
52
55
  info: Record<string, any>;
53
- metadata: Record<string, any>;
56
+ metadata: pdfjs_dist_types_src_display_metadata.Metadata;
54
57
  }>;
55
58
 
56
59
  declare function extractText$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, options?: {
package/dist/index.d.mts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as _napi_rs_canvas from '@napi-rs/canvas';
2
2
  import { DocumentInitParameters, PDFDocumentProxy } from './types/src/display/api';
3
+ import * as pdfjs_dist_types_src_display_metadata from './types/src/display/metadata';
3
4
  import * as PDFJS from './types/src/pdf';
4
5
 
5
6
  interface ExtractedImageObject {
@@ -48,9 +49,11 @@ declare function extractLinks$1(data: DocumentInitParameters['data'] | PDFDocume
48
49
  links: string[];
49
50
  }>;
50
51
 
51
- declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
52
+ declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, options?: {
53
+ parseDates?: boolean;
54
+ }): Promise<{
52
55
  info: Record<string, any>;
53
- metadata: Record<string, any>;
56
+ metadata: pdfjs_dist_types_src_display_metadata.Metadata;
54
57
  }>;
55
58
 
56
59
  declare function extractText$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, options?: {
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as _napi_rs_canvas from '@napi-rs/canvas';
2
2
  import { DocumentInitParameters, PDFDocumentProxy } from './types/src/display/api';
3
+ import * as pdfjs_dist_types_src_display_metadata from './types/src/display/metadata';
3
4
  import * as PDFJS from './types/src/pdf';
4
5
 
5
6
  interface ExtractedImageObject {
@@ -48,9 +49,11 @@ declare function extractLinks$1(data: DocumentInitParameters['data'] | PDFDocume
48
49
  links: string[];
49
50
  }>;
50
51
 
51
- declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
52
+ declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, options?: {
53
+ parseDates?: boolean;
54
+ }): Promise<{
52
55
  info: Record<string, any>;
53
- metadata: Record<string, any>;
56
+ metadata: pdfjs_dist_types_src_display_metadata.Metadata;
54
57
  }>;
55
58
 
56
59
  declare function extractText$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, options?: {
package/dist/index.mjs CHANGED
@@ -227,14 +227,56 @@ async function getPageLinks(document, pageNumber) {
227
227
  return links;
228
228
  }
229
229
 
230
- async function getMeta$1(data) {
230
+ const XMP_DATE_PROPERTIES = [
231
+ "xmp:createdate",
232
+ "xmp:modifydate",
233
+ "xmp:metadatadate",
234
+ "xap:createdate",
235
+ "xap:modifydate",
236
+ "xap:metadatadate"
237
+ ];
238
+ async function getMeta$1(data, options = {}) {
231
239
  const pdf = isPDFDocumentProxy(data) ? data : await getDocumentProxy(data);
232
240
  const meta = await pdf.getMetadata();
241
+ const info = meta?.info || {};
242
+ if (options.parseDates) {
243
+ const { PDFDateString } = await getResolvedPDFJS();
244
+ if (info?.CreationDate) {
245
+ info.CreationDate = PDFDateString.toDateObject(info?.CreationDate);
246
+ }
247
+ if (info?.ModDate) {
248
+ info.ModDate = PDFDateString.toDateObject(info?.ModDate);
249
+ }
250
+ if (meta.metadata) {
251
+ meta.metadata = new Proxy(meta.metadata, {
252
+ get(target, prop) {
253
+ if (prop === "get") {
254
+ return (name) => {
255
+ const value = target.get(name);
256
+ if (XMP_DATE_PROPERTIES.includes(name) && value) {
257
+ return parseISODateString(value);
258
+ }
259
+ return value;
260
+ };
261
+ }
262
+ return target[prop];
263
+ }
264
+ });
265
+ }
266
+ }
233
267
  return {
234
- info: meta?.info ?? {},
235
- metadata: { ...meta?.metadata }
268
+ info,
269
+ metadata: meta?.metadata || {}
236
270
  };
237
271
  }
272
+ function parseISODateString(isoDateString) {
273
+ if (!isoDateString)
274
+ return;
275
+ const parsedDate = Date.parse(isoDateString);
276
+ if (!Number.isNaN(parsedDate)) {
277
+ return new Date(parsedDate);
278
+ }
279
+ }
238
280
 
239
281
  async function extractText$1(data, options = {}) {
240
282
  const { mergePages = false } = options;