@libpdf/core 0.1.0 → 0.2.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.
package/dist/index.d.mts CHANGED
@@ -98,8 +98,9 @@ declare class PdfArray implements PdfPrimitive {
98
98
  get length(): number;
99
99
  /**
100
100
  * Get item at index. Returns undefined if out of bounds.
101
+ * If resolver is provided, resolves indirect references.
101
102
  */
102
- at(index: number): PdfObject | undefined;
103
+ at(index: number, resolver?: RefResolver): PdfObject | undefined;
103
104
  /**
104
105
  * Set item at index. Extends array if needed.
105
106
  */
@@ -332,7 +333,7 @@ declare class PdfDict implements PdfPrimitive {
332
333
  /**
333
334
  * Get value for key. Key can be string or PdfName.
334
335
  */
335
- get(key: PdfName | string): PdfObject | undefined;
336
+ get(key: PdfName | string, resolver?: RefResolver): PdfObject | undefined;
336
337
  /**
337
338
  * Set value for key. Key can be string or PdfName.
338
339
  */
@@ -354,15 +355,19 @@ declare class PdfDict implements PdfPrimitive {
354
355
  */
355
356
  [Symbol.iterator](): Iterator<[PdfName, PdfObject]>;
356
357
  /**
357
- * Typed getters
358
+ * Typed getters.
359
+ *
360
+ * All typed getters accept an optional resolver function. When provided,
361
+ * if the value is a PdfRef, it will be automatically dereferenced.
362
+ * This prevents the common bug of forgetting to handle indirect references.
358
363
  */
359
- getName(key: string): PdfName | undefined;
360
- getNumber(key: string): PdfNumber | undefined;
361
- getString(key: string): PdfString | undefined;
362
- getArray(key: string): PdfArray | undefined;
363
- getDict(key: string): PdfDict | undefined;
364
+ getName(key: string, resolver?: RefResolver): PdfName | undefined;
365
+ getNumber(key: string, resolver?: RefResolver): PdfNumber | undefined;
366
+ getString(key: string, resolver?: RefResolver): PdfString | undefined;
367
+ getArray(key: string, resolver?: RefResolver): PdfArray | undefined;
368
+ getDict(key: string, resolver?: RefResolver): PdfDict | undefined;
364
369
  getRef(key: string): PdfRef | undefined;
365
- getBool(key: string): PdfBool | undefined;
370
+ getBool(key: string, resolver?: RefResolver): PdfBool | undefined;
366
371
  /**
367
372
  * Create a shallow clone of this dictionary.
368
373
  * Values are shared, not deep-copied.
@@ -518,6 +523,19 @@ declare class PdfStream extends PdfDict {
518
523
  */
519
524
  type PdfObject = PdfNull | PdfBool | PdfNumber | PdfName | PdfString | PdfRef | PdfArray | PdfDict | PdfStream | PdfRaw;
520
525
  //#endregion
526
+ //#region src/helpers/types.d.ts
527
+ /**
528
+ * Function type for resolving a PdfRef to its target PdfObject.
529
+ *
530
+ * This is the standard resolver signature used throughout the library
531
+ * for dereferencing indirect object references. All PDF data is loaded
532
+ * into memory at parse time, so resolution is synchronous.
533
+ *
534
+ * @param ref - The indirect reference to resolve
535
+ * @returns The resolved object, or null if not found
536
+ */
537
+ type RefResolver = (ref: PdfRef) => PdfObject | null;
538
+ //#endregion
521
539
  //#region src/io/scanner.d.ts
522
540
  /**
523
541
  * Scanner - the lowest-level byte reader for PDF parsing.
@@ -595,15 +613,6 @@ type XRefEntry = {
595
613
  };
596
614
  //#endregion
597
615
  //#region src/document/object-registry.d.ts
598
- /**
599
- * Function to resolve objects not yet in the registry.
600
- * Called when resolve() encounters an unknown reference.
601
- *
602
- * This is synchronous because all PDF data is loaded into memory
603
- * at parse time. The resolver simply parses objects on demand from
604
- * the in-memory buffer.
605
- */
606
- type ObjectResolver = (ref: PdfRef) => PdfObject | null;
607
616
  /**
608
617
  * Registry for managing PDF objects and their references.
609
618
  *
@@ -637,7 +646,7 @@ declare class ObjectRegistry {
637
646
  /**
638
647
  * Set the resolver for fetching objects not yet in the registry.
639
648
  */
640
- setResolver(resolver: ObjectResolver): void;
649
+ setResolver(resolver: RefResolver): void;
641
650
  /**
642
651
  * Get the next object number that will be assigned.
643
652
  */
@@ -4502,12 +4511,6 @@ declare class StandardSecurityHandler {
4502
4511
  }
4503
4512
  //#endregion
4504
4513
  //#region src/document/name-tree.d.ts
4505
- /**
4506
- * Function to resolve a reference to its object.
4507
- *
4508
- * Synchronous because all PDF data is loaded into memory at parse time.
4509
- */
4510
- type Resolver = (ref: PdfRef) => PdfObject | null;
4511
4514
  /**
4512
4515
  * PDF Name Tree reader.
4513
4516
  *
@@ -4518,7 +4521,7 @@ declare class NameTree {
4518
4521
  private readonly root;
4519
4522
  private readonly resolver;
4520
4523
  private cache;
4521
- constructor(root: PdfDict, resolver: Resolver);
4524
+ constructor(root: PdfDict, resolver: RefResolver);
4522
4525
  /**
4523
4526
  * Lookup a single key using binary search.
4524
4527
  * Uses /Limits on intermediate nodes to skip subtrees.
@@ -4625,7 +4628,7 @@ declare class PDFPageTree {
4625
4628
  /**
4626
4629
  * Load and build the page tree by walking from the root.
4627
4630
  */
4628
- static load(pagesRef: PdfRef, getObject: (ref: PdfRef) => PdfObject | null): PDFPageTree;
4631
+ static load(pagesRef: PdfRef, getObject: RefResolver): PDFPageTree;
4629
4632
  /**
4630
4633
  * Create an empty page tree.
4631
4634
  * Note: This creates a minimal tree without a backing PDF structure.
@@ -4756,10 +4759,6 @@ declare class PDFContext {
4756
4759
  * so this operation never requires I/O.
4757
4760
  */
4758
4761
  resolve(ref: PdfRef): PdfObject | null;
4759
- /**
4760
- * Get an object by reference (sync, only if already loaded).
4761
- */
4762
- getObject(ref: PdfRef): PdfObject | null;
4763
4762
  /**
4764
4763
  * Get the reference for an object.
4765
4764
  */
@@ -4888,8 +4887,8 @@ declare class PDFPage {
4888
4887
  /** The page index (0-based) */
4889
4888
  readonly index: number;
4890
4889
  /** Document context for registering objects */
4891
- private readonly ctx?;
4892
- constructor(ref: PdfRef, dict: PdfDict, index: number, ctx?: PDFContext);
4890
+ private readonly ctx;
4891
+ constructor(ref: PdfRef, dict: PdfDict, index: number, ctx: PDFContext);
4893
4892
  /**
4894
4893
  * Get the MediaBox (page boundary).
4895
4894
  *
@@ -4962,7 +4961,9 @@ declare class PDFPage {
4962
4961
  /**
4963
4962
  * Get the page's Resources dictionary.
4964
4963
  *
4965
- * Creates an empty one if it doesn't exist.
4964
+ * If Resources is a reference, it's dereferenced.
4965
+ * If Resources doesn't exist or is inherited from a parent,
4966
+ * a new empty dict is created on this page.
4966
4967
  */
4967
4968
  getResources(): PdfDict;
4968
4969
  /**
@@ -8096,14 +8097,6 @@ declare class PDF {
8096
8097
  * Returns null if index out of bounds.
8097
8098
  */
8098
8099
  getPage(index: number): PDFPage | null;
8099
- /**
8100
- * Ensure page resources are resolved (not a reference).
8101
- *
8102
- * Pages may have Resources as a PdfRef pointing to a shared resources dict.
8103
- * The sync getResources() method on PDFPage needs the actual dict, not a ref.
8104
- * This resolves the reference and replaces it in the page dict.
8105
- */
8106
- private ensurePageResourcesResolved;
8107
8100
  /**
8108
8101
  * Add a new blank page.
8109
8102
  *
@@ -9261,11 +9254,11 @@ declare function createAnnotation(dict: PdfDict, ref: PdfRef | null, registry: O
9261
9254
  /**
9262
9255
  * Check if an annotation is a Widget (form field).
9263
9256
  */
9264
- declare function isWidgetAnnotation(dict: PdfDict): boolean;
9257
+ declare function isWidgetAnnotation(dict: PdfDict, registry?: ObjectRegistry): boolean;
9265
9258
  /**
9266
9259
  * Check if an annotation is a Popup.
9267
9260
  */
9268
- declare function isPopupAnnotation(dict: PdfDict): boolean;
9261
+ declare function isPopupAnnotation(dict: PdfDict, registry?: ObjectRegistry): boolean;
9269
9262
  //#endregion
9270
9263
  export { AnnotationFlags, type AnnotationSubtype, type AuthenticationResult, type BorderStyle, type BorderStyleType, type ButtonField, type CMYK, type CaretAnnotationOptions, type CaretSymbol, CertificateChainError, type CheckboxField, type CheckboxOptions, type CheckboxSymbol, type CircleAnnotationOptions, type Color, type CopyPagesOptions, CryptoKeySigner, type Degrees, type DestinationType, type DigestAlgorithm, type DocumentMetadata, type DrawCircleOptions, type DrawEllipseOptions, type DrawFieldOptions, type DrawImageOptions, type DrawLineOptions, type DrawPageOptions, type DrawRectangleOptions, type DrawTextOptions, type DropdownField, type DropdownOptions, type EmbedFontOptions, type EmbeddedFont, type EncryptionAlgorithmOption, type ExtractPagesOptions, type FieldOptions, type FieldType, type FieldValue, type FileAttachmentIcon, type FlattenAllOptions, type FlattenAllResult, type FlattenAnnotationsOptions, type FlattenLayersResult, type FlattenOptions, type FontInput, type FormField, type FormProperties, type FreeTextAnnotationOptions, type FreeTextJustification, GoogleKmsSigner, type Grayscale, type HighlightMode, HttpTimestampAuthority, type HttpTimestampAuthorityOptions, type InkAnnotationOptions, type KeyType, KmsSignerError, type LayerInfo, type LayoutResult, type LineAnnotationOptions, type LineCap, type LineEndingStyle, type LineJoin, type LinkAction, type LinkAnnotationOptions, type LinkDestination, type ListBoxField, type ListboxOptions, type LoadOptions, type MergeOptions, P12Signer, type PAdESLevel, PDF, PDFAnnotation, PDFCaretAnnotation, PDFCircleAnnotation, PDFEmbeddedPage, PDFFileAttachmentAnnotation, PDFForm, PDFFreeTextAnnotation, PDFHighlightAnnotation, PDFImage, PDFInkAnnotation, PDFLineAnnotation, PDFLinkAnnotation, PDFMarkupAnnotation, PDFPage, PDFPolygonAnnotation, PDFPolylineAnnotation, PDFPopupAnnotation, PDFSquareAnnotation, PDFSquigglyAnnotation, PDFStampAnnotation, PDFStrikeOutAnnotation, PDFTextAnnotation, PDFTextMarkupAnnotation, PDFUnderlineAnnotation, PDFUnknownAnnotation, PathBuilder, type PathOptions, PdfArray, PdfBool, PdfDict, PdfName, PdfNull, PdfNumber, type PdfObject, PdfRef, PdfStream, PdfString, type PemBlock, PermissionDeniedError, type PermissionOptions, type Permissions, PlaceholderError, type Point, type PolygonAnnotationOptions, type PolylineAnnotationOptions, type PopupOptions, type PositionedWord, type ProtectionOptions, type RGB, type RadioField, type RadioGroupOptions, type RadioSymbol, type Rect, type Rectangle, type RemoveAnnotationsOptions, RevocationError, type RevocationProvider, type Rotation, type RotationOrigin, type RotationOriginName, STANDARD_STAMPS, type SaveOptions, SecurityError, type SecurityInfo, type SetTitleOptions, type SignOptions, type SignResult, type SignWarning, type SignatureAlgorithm, SignatureError, type SignatureField, type SignatureFieldOptions, type Signer, SignerError, type SquareAnnotationOptions, type StampAnnotationOptions, type StampName, Standard14Font, type Standard14FontName, StandardFonts, type SubFilter, type TextAlignment, type TextAnnotationIcon, type TextAnnotationOptions, type TextAnnotationState, type TextAnnotationStateModel, type TextField, type TextFieldOptions, type TextLine, type TextMarkupAnnotationOptions, type TimestampAuthority, TimestampError, type TrappedStatus, black, blue, cmyk, createAnnotation, degrees, grayscale, green, isPopupAnnotation, isWidgetAnnotation, layoutJustifiedLine, layoutText, lineCapToNumber, lineJoinToNumber, measureText, parsePem, rectToQuadPoints, rectsToQuadPoints, red, rgb, version, white };
9271
9264
  //# sourceMappingURL=index.d.mts.map