pdf-lite 1.6.4 → 1.7.0

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 (56) hide show
  1. package/dist/acroform/appearance/pdf-button-appearance-stream.js +1 -1
  2. package/dist/acroform/appearance/pdf-text-appearance-stream.js +42 -25
  3. package/dist/acroform/fields/pdf-button-form-field.d.ts +11 -2
  4. package/dist/acroform/fields/pdf-button-form-field.js +76 -37
  5. package/dist/acroform/fields/pdf-choice-form-field.js +2 -2
  6. package/dist/acroform/fields/pdf-form-field.d.ts +15 -9
  7. package/dist/acroform/fields/pdf-form-field.js +123 -46
  8. package/dist/acroform/fields/pdf-text-form-field.js +2 -2
  9. package/dist/acroform/pdf-acro-form.d.ts +1 -0
  10. package/dist/acroform/pdf-acro-form.js +15 -4
  11. package/dist/acroform/xfa/pdf-xfa-data.d.ts +2 -1
  12. package/dist/acroform/xfa/pdf-xfa-data.js +36 -28
  13. package/dist/annotations/pdf-annotation.d.ts +1 -1
  14. package/dist/annotations/pdf-annotation.js +16 -2
  15. package/dist/core/objects/pdf-array.d.ts +6 -1
  16. package/dist/core/objects/pdf-array.js +3 -0
  17. package/dist/core/objects/pdf-boolean.d.ts +6 -2
  18. package/dist/core/objects/pdf-boolean.js +3 -0
  19. package/dist/core/objects/pdf-comment.d.ts +6 -2
  20. package/dist/core/objects/pdf-comment.js +3 -0
  21. package/dist/core/objects/pdf-date.d.ts +4 -0
  22. package/dist/core/objects/pdf-date.js +3 -0
  23. package/dist/core/objects/pdf-dictionary.d.ts +5 -0
  24. package/dist/core/objects/pdf-dictionary.js +16 -0
  25. package/dist/core/objects/pdf-hexadecimal.d.ts +6 -2
  26. package/dist/core/objects/pdf-hexadecimal.js +3 -0
  27. package/dist/core/objects/pdf-indirect-object.d.ts +8 -1
  28. package/dist/core/objects/pdf-indirect-object.js +14 -0
  29. package/dist/core/objects/pdf-name.d.ts +6 -2
  30. package/dist/core/objects/pdf-name.js +3 -0
  31. package/dist/core/objects/pdf-null.d.ts +5 -2
  32. package/dist/core/objects/pdf-null.js +3 -0
  33. package/dist/core/objects/pdf-number.d.ts +6 -1
  34. package/dist/core/objects/pdf-number.js +3 -0
  35. package/dist/core/objects/pdf-object-reference.d.ts +5 -0
  36. package/dist/core/objects/pdf-object-reference.js +7 -0
  37. package/dist/core/objects/pdf-object.d.ts +1 -0
  38. package/dist/core/objects/pdf-start-xref.d.ts +6 -1
  39. package/dist/core/objects/pdf-start-xref.js +3 -0
  40. package/dist/core/objects/pdf-stream.d.ts +8 -0
  41. package/dist/core/objects/pdf-stream.js +7 -0
  42. package/dist/core/objects/pdf-string.d.ts +8 -2
  43. package/dist/core/objects/pdf-string.js +9 -0
  44. package/dist/core/objects/pdf-trailer.d.ts +7 -0
  45. package/dist/core/objects/pdf-trailer.js +3 -0
  46. package/dist/core/objects/pdf-xref-table.d.ts +31 -5
  47. package/dist/core/objects/pdf-xref-table.js +23 -0
  48. package/dist/pdf/pdf-document.d.ts +7 -0
  49. package/dist/pdf/pdf-document.js +6 -0
  50. package/dist/pdf/pdf-revision.d.ts +4 -0
  51. package/dist/pdf/pdf-revision.js +6 -0
  52. package/dist/utils/iterable-readable-stream.d.ts +2 -0
  53. package/dist/utils/iterable-readable-stream.js +8 -1
  54. package/dist/utils/xml.d.ts +9 -0
  55. package/dist/utils/xml.js +59 -0
  56. package/package.json +2 -2
@@ -1,6 +1,5 @@
1
1
  import { Ref } from '../ref.js';
2
- import { PdfXRefTableEntryToken } from '../tokens/xref-table-entry-token.js';
3
- import { PdfXRefTableSectionStartToken } from '../tokens/xref-table-section-start-token.js';
2
+ import { PdfToken } from '../tokens/token.js';
4
3
  import { PdfIndirectObject } from './pdf-indirect-object.js';
5
4
  import { PdfNumber } from './pdf-number.js';
6
5
  import { PdfObject } from './pdf-object.js';
@@ -15,8 +14,15 @@ export declare class PdfXRefTableEntry extends PdfObject {
15
14
  generationNumber: number | PdfNumber;
16
15
  inUse: boolean;
17
16
  });
18
- protected tokenize(): PdfXRefTableEntryToken[];
17
+ protected tokenize(): PdfToken[];
19
18
  cloneImpl(): this;
19
+ toJSON(): {
20
+ type: string;
21
+ objectNumber: number;
22
+ generationNumber: number;
23
+ byteOffset: number;
24
+ inUse: boolean;
25
+ };
20
26
  isModified(): boolean;
21
27
  }
22
28
  export declare class PdfXRefTableSectionHeader extends PdfObject {
@@ -26,8 +32,13 @@ export declare class PdfXRefTableSectionHeader extends PdfObject {
26
32
  startObjectNumber: number | PdfNumber;
27
33
  entryCount: number | PdfNumber;
28
34
  });
29
- protected tokenize(): PdfXRefTableSectionStartToken[];
35
+ protected tokenize(): PdfToken[];
30
36
  cloneImpl(): this;
37
+ toJSON(): {
38
+ type: string;
39
+ startObjectNumber: number;
40
+ entryCount: number;
41
+ };
31
42
  }
32
43
  export declare class PdfXRefTable extends PdfObject {
33
44
  sections: PdfXRefTableSectionHeader[];
@@ -42,7 +53,22 @@ export declare class PdfXRefTable extends PdfObject {
42
53
  addEntryForObject(obj: PdfIndirectObject): void;
43
54
  getEntry(objectNumber: number): PdfXRefTableEntry | undefined;
44
55
  get lastSection(): PdfXRefTableSectionHeader | null;
45
- protected tokenize(): import("../index.js").PdfToken[];
56
+ protected tokenize(): PdfToken[];
46
57
  private sortEntriesIntoSections;
47
58
  cloneImpl(): this;
59
+ toJSON(): {
60
+ type: string;
61
+ sections: {
62
+ type: string;
63
+ startObjectNumber: number;
64
+ entryCount: number;
65
+ }[];
66
+ entries: {
67
+ type: string;
68
+ objectNumber: number;
69
+ generationNumber: number;
70
+ byteOffset: number;
71
+ inUse: boolean;
72
+ }[];
73
+ };
48
74
  }
@@ -44,6 +44,15 @@ export class PdfXRefTableEntry extends PdfObject {
44
44
  inUse: this.inUse,
45
45
  });
46
46
  }
47
+ toJSON() {
48
+ return {
49
+ type: 'xref-entry',
50
+ objectNumber: this.objectNumber.value,
51
+ generationNumber: this.generationNumber.value,
52
+ byteOffset: this.byteOffset.value,
53
+ inUse: this.inUse,
54
+ };
55
+ }
47
56
  isModified() {
48
57
  return (super.isModified() ||
49
58
  this.byteOffset.isModified() ||
@@ -70,6 +79,13 @@ export class PdfXRefTableSectionHeader extends PdfObject {
70
79
  entryCount: this.entryCount.clone(),
71
80
  });
72
81
  }
82
+ toJSON() {
83
+ return {
84
+ type: 'xref-section-header',
85
+ startObjectNumber: this.startObjectNumber.value,
86
+ entryCount: this.entryCount.value,
87
+ };
88
+ }
73
89
  }
74
90
  export class PdfXRefTable extends PdfObject {
75
91
  sections;
@@ -180,4 +196,11 @@ export class PdfXRefTable extends PdfObject {
180
196
  offset: new Ref(this.offset.resolve()),
181
197
  });
182
198
  }
199
+ toJSON() {
200
+ return {
201
+ type: 'xref-table',
202
+ sections: this.sections.map((s) => s.toJSON()),
203
+ entries: this.entries.map((e) => e.toJSON()),
204
+ };
205
+ }
183
206
  }
@@ -311,6 +311,13 @@ export declare class PdfDocument extends PdfObject implements IPdfObjectResolver
311
311
  * @returns A cloned PdfDocument instance
312
312
  */
313
313
  cloneImpl(): this;
314
+ toJSON(): {
315
+ type: string;
316
+ revisions: {
317
+ type: string;
318
+ objects: object[];
319
+ }[];
320
+ };
314
321
  /**
315
322
  * Creates a PdfDocument from a byte stream.
316
323
  *
@@ -967,6 +967,12 @@ export class PdfDocument extends PdfObject {
967
967
  securityHandler: this.securityHandler,
968
968
  });
969
969
  }
970
+ toJSON() {
971
+ return {
972
+ type: 'document',
973
+ revisions: this.revisions.map((rev) => rev.toJSON()),
974
+ };
975
+ }
970
976
  /**
971
977
  * Creates a PdfDocument from a byte stream.
972
978
  *
@@ -124,6 +124,10 @@ export declare class PdfRevision extends PdfObject {
124
124
  *
125
125
  * @returns A cloned PdfRevision instance
126
126
  */
127
+ toJSON(): {
128
+ type: string;
129
+ objects: object[];
130
+ };
127
131
  cloneImpl(): this;
128
132
  protected tokenize(): PdfToken[];
129
133
  isEmpty(): boolean;
@@ -251,6 +251,12 @@ export class PdfRevision extends PdfObject {
251
251
  *
252
252
  * @returns A cloned PdfRevision instance
253
253
  */
254
+ toJSON() {
255
+ return {
256
+ type: 'revision',
257
+ objects: this._objects.map((obj) => obj.toJSON()),
258
+ };
259
+ }
254
260
  cloneImpl() {
255
261
  const clonedObjects = this.objects.map((obj) => obj.clone());
256
262
  return new PdfRevision({ objects: clonedObjects });
@@ -20,5 +20,7 @@ export declare class IterableReadableStream<T> extends ReadableStream<T> {
20
20
  */
21
21
  [Symbol.asyncIterator](): {
22
22
  next(): Promise<IteratorResult<T>>;
23
+ [Symbol.asyncIterator](): /*elided*/ any;
24
+ [Symbol.asyncDispose](): Promise<void>;
23
25
  };
24
26
  }
@@ -20,11 +20,18 @@ export class IterableReadableStream extends ReadableStream {
20
20
  */
21
21
  [Symbol.asyncIterator]() {
22
22
  const reader = this.getReader();
23
- return {
23
+ const iterator = {
24
24
  async next() {
25
25
  const result = await reader.read();
26
26
  return result;
27
27
  },
28
+ [Symbol.asyncIterator]() {
29
+ return iterator;
30
+ },
31
+ async [Symbol.asyncDispose]() {
32
+ reader.releaseLock();
33
+ },
28
34
  };
35
+ return iterator;
29
36
  }
30
37
  }
@@ -0,0 +1,9 @@
1
+ export declare class Xml {
2
+ static escapeValue(value: string): string;
3
+ static getElementContent(xml: string, tagName: string): string | null;
4
+ static setElementContent(xml: string, tagName: string, content: string): string;
5
+ static hasElement(xml: string, tagName: string): boolean;
6
+ static insertChild(xml: string, parentTagName: string, childXml: string): string;
7
+ static wrapInElements(content: string, tagNames: string[]): string;
8
+ static escapeRegex(str: string): string;
9
+ }
@@ -0,0 +1,59 @@
1
+ export class Xml {
2
+ static escapeValue(value) {
3
+ return value
4
+ .replace(/&/g, '&amp;')
5
+ .replace(/</g, '&lt;')
6
+ .replace(/>/g, '&gt;')
7
+ .replace(/"/g, '&quot;')
8
+ .replace(/'/g, '&apos;');
9
+ }
10
+ static getElementContent(xml, tagName) {
11
+ const escaped = Xml.escapeRegex(tagName);
12
+ const regex = new RegExp(`<${escaped}(?:\\s[^>]*)?>([\\s\\S]*?)</${escaped}\\s*>`);
13
+ const match = xml.match(regex);
14
+ return match ? match[1] : null;
15
+ }
16
+ static setElementContent(xml, tagName, content) {
17
+ const escaped = Xml.escapeRegex(tagName);
18
+ // Try expanding a self-closing tag
19
+ const selfClosing = new RegExp(`<${escaped}\\s*/>`);
20
+ if (selfClosing.test(xml)) {
21
+ return xml.replace(selfClosing, `<${tagName}>${content}</${tagName}>`);
22
+ }
23
+ // Try replacing content of an existing tag
24
+ const contentRegex = new RegExp(`(<${escaped}(?:\\s[^>]*)?>)[\\s\\S]*?(</${escaped}\\s*>)`);
25
+ if (contentRegex.test(xml)) {
26
+ return xml.replace(contentRegex, `$1${content}$2`);
27
+ }
28
+ return xml;
29
+ }
30
+ static hasElement(xml, tagName) {
31
+ const escaped = Xml.escapeRegex(tagName);
32
+ return (new RegExp(`</${escaped}\\s*>`).test(xml) ||
33
+ new RegExp(`<${escaped}\\s*/>`).test(xml));
34
+ }
35
+ static insertChild(xml, parentTagName, childXml) {
36
+ const escaped = Xml.escapeRegex(parentTagName);
37
+ // Insert before closing tag
38
+ const closingRegex = new RegExp(`(</${escaped}\\s*>)`);
39
+ if (closingRegex.test(xml)) {
40
+ return xml.replace(closingRegex, `${childXml}$1`);
41
+ }
42
+ // Expand self-closing tag
43
+ const selfClosing = new RegExp(`<${escaped}\\s*/>`);
44
+ if (selfClosing.test(xml)) {
45
+ return xml.replace(selfClosing, `<${parentTagName}>${childXml}</${parentTagName}>`);
46
+ }
47
+ return xml;
48
+ }
49
+ static wrapInElements(content, tagNames) {
50
+ let result = content;
51
+ for (let i = tagNames.length - 1; i >= 0; i--) {
52
+ result = `<${tagNames[i]}>${result}</${tagNames[i]}>`;
53
+ }
54
+ return result;
55
+ }
56
+ static escapeRegex(str) {
57
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
58
+ }
59
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pdf-lite",
3
- "version": "1.6.4",
3
+ "version": "1.7.0",
4
4
  "main": "dist/index.js",
5
5
  "type": "module",
6
6
  "exports": {
@@ -35,7 +35,7 @@
35
35
  "@vitest/browser-playwright": "^4.0.14",
36
36
  "@vitest/coverage-v8": "^4.0.14",
37
37
  "playwright": "^1.56.1",
38
- "typescript": "5.9.3",
38
+ "typescript": "6.0.2",
39
39
  "vitest": "^4.0.14"
40
40
  },
41
41
  "repository": {