@pdfme/pdf-lib 6.0.3 → 6.0.4-dev.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.
- package/{src/api/Embeddable.ts → dist/api/Embeddable.d.ts} +1 -1
- package/dist/api/PDFDocument.d.ts +778 -0
- package/dist/api/PDFDocumentOptions.d.ts +38 -0
- package/dist/api/PDFEmbeddedFile.d.ts +38 -0
- package/dist/api/PDFEmbeddedPage.d.ts +73 -0
- package/dist/api/PDFFont.d.ts +94 -0
- package/dist/api/PDFImage.d.ts +95 -0
- package/dist/api/PDFJavaScript.d.ts +38 -0
- package/dist/api/PDFPage.d.ts +910 -0
- package/dist/api/PDFPageOptions.d.ts +172 -0
- package/dist/api/StandardFonts.d.ts +16 -0
- package/dist/api/colors.d.ts +34 -0
- package/dist/api/errors.d.ts +42 -0
- package/dist/api/form/PDFButton.d.ts +137 -0
- package/dist/api/form/PDFCheckBox.d.ts +142 -0
- package/dist/api/form/PDFDropdown.d.ts +402 -0
- package/dist/api/form/PDFField.d.ts +203 -0
- package/dist/api/form/PDFForm.d.ts +411 -0
- package/dist/api/form/PDFOptionList.d.ts +335 -0
- package/dist/api/form/PDFRadioGroup.d.ts +252 -0
- package/dist/api/form/PDFSignature.d.ts +29 -0
- package/dist/api/form/PDFTextField.d.ts +537 -0
- package/dist/api/form/appearances.d.ts +41 -0
- package/dist/api/image/alignment.d.ts +5 -0
- package/dist/api/objects.d.ts +4 -0
- package/dist/api/operations.d.ts +226 -0
- package/dist/api/operators.d.ts +90 -0
- package/dist/api/rotations.d.ts +38 -0
- package/dist/api/sizes.d.ts +52 -0
- package/dist/api/svg.d.ts +70 -0
- package/dist/api/svgPath.d.ts +2 -0
- package/dist/api/text/alignment.d.ts +5 -0
- package/dist/api/text/layout.d.ts +54 -0
- package/dist/core/PDFContext.d.ts +84 -0
- package/dist/core/PDFObjectCopier.d.ts +37 -0
- package/dist/core/acroform/PDFAcroButton.d.ts +21 -0
- package/dist/core/acroform/PDFAcroCheckBox.d.ts +13 -0
- package/dist/core/acroform/PDFAcroChoice.d.ts +20 -0
- package/dist/core/acroform/PDFAcroComboBox.d.ts +9 -0
- package/dist/core/acroform/PDFAcroField.d.ts +36 -0
- package/dist/core/acroform/PDFAcroForm.d.ts +20 -0
- package/dist/core/acroform/PDFAcroListBox.d.ts +9 -0
- package/dist/core/acroform/PDFAcroNonTerminal.d.ts +13 -0
- package/dist/core/acroform/PDFAcroPushButton.d.ts +9 -0
- package/dist/core/acroform/PDFAcroRadioButton.d.ts +13 -0
- package/{src/core/acroform/PDFAcroSignature.ts → dist/core/acroform/PDFAcroSignature.d.ts} +2 -4
- package/dist/core/acroform/PDFAcroTerminal.d.ts +16 -0
- package/dist/core/acroform/PDFAcroText.d.ts +22 -0
- package/dist/core/acroform/flags.d.ts +141 -0
- package/dist/core/acroform/utils.d.ts +6 -0
- package/dist/core/annotation/AppearanceCharacteristics.d.ts +33 -0
- package/dist/core/annotation/BorderStyle.d.ts +11 -0
- package/dist/core/annotation/PDFAnnotation.d.ts +51 -0
- package/dist/core/annotation/PDFWidgetAnnotation.d.ts +26 -0
- package/dist/core/annotation/flags.d.ts +79 -0
- package/dist/core/crypto.d.ts +95 -0
- package/dist/core/document/PDFCrossRefSection.d.ts +27 -0
- package/dist/core/document/PDFHeader.d.ts +10 -0
- package/dist/core/document/PDFTrailer.d.ts +9 -0
- package/dist/core/document/PDFTrailerDict.d.ts +10 -0
- package/dist/core/embedders/CMap.d.ts +3 -0
- package/dist/core/embedders/CustomFontEmbedder.d.ts +44 -0
- package/dist/core/embedders/CustomFontSubsetEmbedder.d.ts +20 -0
- package/dist/core/embedders/FileEmbedder.d.ts +33 -0
- package/dist/core/embedders/FontFlags.d.ts +13 -0
- package/dist/core/embedders/JavaScriptEmbedder.d.ts +10 -0
- package/dist/core/embedders/JpegEmbedder.d.ts +23 -0
- package/dist/core/embedders/PDFPageEmbedder.d.ts +37 -0
- package/dist/core/embedders/PngEmbedder.d.ts +19 -0
- package/dist/core/embedders/StandardFontEmbedder.d.ts +36 -0
- package/dist/core/errors.d.ts +94 -0
- package/{src/core/index.ts → dist/core/index.d.ts} +1 -17
- package/dist/core/interactive/ViewerPreferences.d.ts +347 -0
- package/dist/core/objects/PDFArray.d.ts +63 -0
- package/dist/core/objects/PDFBool.d.ts +13 -0
- package/dist/core/objects/PDFDict.d.ts +62 -0
- package/dist/core/objects/PDFHexString.d.ts +16 -0
- package/dist/core/objects/PDFInvalidObject.d.ts +11 -0
- package/dist/core/objects/PDFName.d.ts +41 -0
- package/dist/core/objects/PDFNull.d.ts +10 -0
- package/dist/core/objects/PDFNumber.d.ts +15 -0
- package/dist/core/objects/PDFObject.d.ts +8 -0
- package/dist/core/objects/PDFRawStream.d.ts +16 -0
- package/dist/core/objects/PDFRef.d.ts +13 -0
- package/dist/core/objects/PDFStream.d.ts +16 -0
- package/dist/core/objects/PDFString.d.ts +16 -0
- package/dist/core/operators/PDFOperator.d.ts +19 -0
- package/dist/core/operators/PDFOperatorNames.d.ts +76 -0
- package/dist/core/parser/BaseParser.d.ts +14 -0
- package/dist/core/parser/ByteStream.d.ts +26 -0
- package/dist/core/parser/PDFObjectParser.d.ts +31 -0
- package/dist/core/parser/PDFObjectStreamParser.d.ts +13 -0
- package/dist/core/parser/PDFParser.d.ts +46 -0
- package/dist/core/parser/PDFXRefStreamParser.d.ts +21 -0
- package/dist/core/streams/Ascii85Stream.d.ts +9 -0
- package/dist/core/streams/AsciiHexStream.d.ts +9 -0
- package/dist/core/streams/DecodeStream.d.ts +26 -0
- package/dist/core/streams/DecryptStream.d.ts +12 -0
- package/dist/core/streams/FlateStream.d.ts +13 -0
- package/dist/core/streams/LZWStream.d.ts +12 -0
- package/dist/core/streams/RunLengthStream.d.ts +8 -0
- package/dist/core/streams/Stream.d.ts +34 -0
- package/dist/core/streams/decode.d.ts +3 -0
- package/dist/core/structures/PDFCatalog.d.ts +27 -0
- package/dist/core/structures/PDFContentStream.d.ts +15 -0
- package/dist/core/structures/PDFCrossRefStream.d.ts +53 -0
- package/dist/core/structures/PDFFlateStream.d.ts +13 -0
- package/dist/core/structures/PDFObjectStream.d.ts +20 -0
- package/dist/core/structures/PDFPageLeaf.d.ts +54 -0
- package/dist/core/structures/PDFPageTree.d.ts +41 -0
- package/dist/core/syntax/CharCodes.d.ts +61 -0
- package/dist/core/syntax/Delimiters.d.ts +1 -0
- package/dist/core/syntax/Irregular.d.ts +1 -0
- package/dist/core/syntax/Keywords.d.ts +22 -0
- package/dist/core/syntax/Numeric.d.ts +3 -0
- package/dist/core/syntax/Whitespace.d.ts +1 -0
- package/dist/core/writers/PDFStreamWriter.d.ts +19 -0
- package/dist/core/writers/PDFWriter.d.ts +29 -0
- package/dist/index.js +19124 -0
- package/dist/index.js.map +1 -0
- package/dist/types/fontkit.d.ts +597 -0
- package/{src/types/index.ts → dist/types/index.d.ts} +8 -13
- package/{src/types/matrix.ts → dist/types/matrix.d.ts} +1 -2
- package/dist/utils/Cache.d.ts +10 -0
- package/dist/utils/arrays.d.ts +16 -0
- package/dist/utils/async.d.ts +5 -0
- package/dist/utils/base64.d.ts +10 -0
- package/dist/utils/elements/Arc.d.ts +22 -0
- package/dist/utils/elements/Circle.d.ts +14 -0
- package/dist/utils/elements/Ellipse.d.ts +20 -0
- package/dist/utils/elements/GraphElement.d.ts +6 -0
- package/dist/utils/elements/Line.d.ts +23 -0
- package/dist/utils/elements/Plot.d.ts +11 -0
- package/dist/utils/elements/Point.d.ts +18 -0
- package/dist/utils/elements/Rectangle.d.ts +21 -0
- package/dist/utils/elements/Segment.d.ts +19 -0
- package/dist/utils/errors.d.ts +1 -0
- package/dist/utils/intersections.d.ts +9 -0
- package/dist/utils/maths.d.ts +45 -0
- package/dist/utils/numbers.d.ts +23 -0
- package/dist/utils/objects.d.ts +15 -0
- package/dist/utils/pdfDocEncoding.d.ts +7 -0
- package/dist/utils/png.d.ts +17 -0
- package/dist/utils/rng.d.ts +13 -0
- package/dist/utils/strings.d.ts +25 -0
- package/{src/utils/unicode.ts → dist/utils/unicode.d.ts} +8 -195
- package/dist/utils/validators.d.ts +26 -0
- package/package.json +6 -1
- package/__tests__/api/PDFDocument.spec.ts +0 -576
- package/__tests__/api/PDFImage.spec.ts +0 -60
- package/__tests__/api/PDFPage.spec.ts +0 -151
- package/__tests__/api/form/PDFCheckBox.spec.ts +0 -71
- package/__tests__/api/form/PDFDropdown.spec.ts +0 -118
- package/__tests__/api/form/PDFForm.spec.ts +0 -370
- package/__tests__/api/form/PDFOptionList.spec.ts +0 -104
- package/__tests__/api/form/PDFRadioGroup.spec.ts +0 -183
- package/__tests__/api/form/PDFTextField.spec.ts +0 -148
- package/__tests__/api/svgPath.spec.ts +0 -153
- package/__tests__/api/text/layout.spec.ts +0 -166
- package/__tests__/core/PDFContext.spec.ts +0 -194
- package/__tests__/core/PDFObjectCopier.spec.ts +0 -421
- package/__tests__/core/acroform/PDFAcroField.spec.ts +0 -98
- package/__tests__/core/acroform/PDFAcroTerminal.spec.ts +0 -39
- package/__tests__/core/annotation/PDFWidgetAnnotation.spec.ts +0 -40
- package/__tests__/core/document/PDFCrossRefSection.spec.ts +0 -88
- package/__tests__/core/document/PDFHeader.spec.ts +0 -22
- package/__tests__/core/document/PDFTrailer.spec.ts +0 -28
- package/__tests__/core/document/PDFTrailerDict.spec.ts +0 -24
- package/__tests__/core/embedders/CMap.spec.ts +0 -47
- package/__tests__/core/embedders/CustomFontEmbedder.spec.ts +0 -96
- package/__tests__/core/embedders/CustomFontSubsetEmbedder.spec.ts +0 -62
- package/__tests__/core/embedders/FileEmbedder.spec.ts +0 -54
- package/__tests__/core/embedders/JpegEmbedder.spec.ts +0 -67
- package/__tests__/core/embedders/PDFPageEmbedder.spec.ts +0 -65
- package/__tests__/core/embedders/PngEmbedder.spec.ts +0 -87
- package/__tests__/core/embedders/StandardFontEmbedder.spec.ts +0 -79
- package/__tests__/core/embedders/data/SourceHanSerifJP-Regular.otf.cmap +0 -16096
- package/__tests__/core/embedders/data/Ubuntu-R.ttf.cmap +0 -1211
- package/__tests__/core/objects/PDFArray.spec.ts +0 -134
- package/__tests__/core/objects/PDFBool.spec.ts +0 -42
- package/__tests__/core/objects/PDFDict.spec.ts +0 -195
- package/__tests__/core/objects/PDFHexString.spec.ts +0 -168
- package/__tests__/core/objects/PDFInvalidObject.spec.ts +0 -32
- package/__tests__/core/objects/PDFName.spec.ts +0 -122
- package/__tests__/core/objects/PDFNull.spec.ts +0 -30
- package/__tests__/core/objects/PDFNumber.spec.ts +0 -50
- package/__tests__/core/objects/PDFObject.spec.ts +0 -29
- package/__tests__/core/objects/PDFRawStream.spec.ts +0 -45
- package/__tests__/core/objects/PDFRef.spec.ts +0 -60
- package/__tests__/core/objects/PDFString.spec.ts +0 -237
- package/__tests__/core/operators/PDFOperator.spec.ts +0 -77
- package/__tests__/core/parser/PDFObjectParser.spec.ts +0 -730
- package/__tests__/core/parser/PDFObjectStreamParser.spec.ts +0 -158
- package/__tests__/core/parser/PDFParser.spec.ts +0 -398
- package/__tests__/core/parser/PDFXRefStreamParser.spec.ts +0 -187
- package/__tests__/core/parser/data/object-stream-invalid +0 -2
- package/__tests__/core/parser/data/object-stream1 +0 -16
- package/__tests__/core/parser/data/object-stream2 +0 -10
- package/__tests__/core/parser/data/object-stream3 +0 -0
- package/__tests__/core/parser/data/object-stream4 +0 -0
- package/__tests__/core/parser/data/xref-stream1 +0 -0
- package/__tests__/core/parser/data/xref-stream2 +0 -0
- package/__tests__/core/parser/data/xref-stream3 +0 -0
- package/__tests__/core/parser/data/xref-stream4 +0 -0
- package/__tests__/core/streams/Ascii85Stream.spec.ts +0 -20
- package/__tests__/core/streams/AsciiHexStream.spec.ts +0 -20
- package/__tests__/core/streams/FlateStream.spec.ts +0 -20
- package/__tests__/core/streams/LZWStream.spec.ts +0 -20
- package/__tests__/core/streams/RunLengthStream.spec.ts +0 -20
- package/__tests__/core/streams/Stream.spec.ts +0 -128
- package/__tests__/core/streams/data/ascii85/1.decoded +0 -0
- package/__tests__/core/streams/data/ascii85/1.encoded +0 -43
- package/__tests__/core/streams/data/asciihex/1.decoded +0 -1
- package/__tests__/core/streams/data/asciihex/1.encoded +0 -1
- package/__tests__/core/streams/data/asciihex/2.decoded +0 -7
- package/__tests__/core/streams/data/asciihex/2.encoded +0 -1
- package/__tests__/core/streams/data/flate/1.corrupt.encoded +0 -1
- package/__tests__/core/streams/data/flate/1.decoded +0 -0
- package/__tests__/core/streams/data/flate/1.encoded +0 -2
- package/__tests__/core/streams/data/flate/2.decoded +0 -33
- package/__tests__/core/streams/data/flate/2.encoded +0 -0
- package/__tests__/core/streams/data/flate/3.decoded +0 -15
- package/__tests__/core/streams/data/flate/3.encoded +0 -0
- package/__tests__/core/streams/data/flate/4.decoded +0 -16
- package/__tests__/core/streams/data/flate/4.encoded +0 -0
- package/__tests__/core/streams/data/flate/5.decoded +0 -0
- package/__tests__/core/streams/data/flate/5.encoded +0 -0
- package/__tests__/core/streams/data/flate/6.decoded +0 -17
- package/__tests__/core/streams/data/flate/6.encoded +0 -0
- package/__tests__/core/streams/data/flate/7.decoded +0 -20
- package/__tests__/core/streams/data/flate/7.encoded +0 -1
- package/__tests__/core/streams/data/lzw/1.decoded +0 -0
- package/__tests__/core/streams/data/lzw/1.encoded +0 -0
- package/__tests__/core/streams/data/lzw/2.decoded +0 -0
- package/__tests__/core/streams/data/lzw/2.encoded +0 -0
- package/__tests__/core/streams/data/lzw/3.decoded +0 -14
- package/__tests__/core/streams/data/lzw/3.encoded +0 -2
- package/__tests__/core/streams/data/lzw/4.decoded +0 -14
- package/__tests__/core/streams/data/lzw/4.encoded +0 -2
- package/__tests__/core/streams/data/runlength/1.decoded +0 -1
- package/__tests__/core/streams/data/runlength/1.encoded +0 -1
- package/__tests__/core/streams/data/runlength/2.decoded +0 -1
- package/__tests__/core/streams/data/runlength/2.encoded +0 -1
- package/__tests__/core/streams/data/runlength/3.decoded +0 -0
- package/__tests__/core/streams/data/runlength/3.encoded +0 -0
- package/__tests__/core/streams/data/runlength/4.decoded +0 -1
- package/__tests__/core/streams/data/runlength/4.encoded +0 -1
- package/__tests__/core/streams/data/runlength/5.decoded +0 -1
- package/__tests__/core/streams/data/runlength/5.encoded +0 -1
- package/__tests__/core/streams/data/runlength/empty.encoded +0 -1
- package/__tests__/core/structures/PDFCatalog.spec.ts +0 -108
- package/__tests__/core/structures/PDFContentStream.spec.ts +0 -117
- package/__tests__/core/structures/PDFCrossRefStream.spec.ts +0 -145
- package/__tests__/core/structures/PDFObjectStream.spec.ts +0 -138
- package/__tests__/core/structures/PDFPageLeaf.spec.ts +0 -355
- package/__tests__/core/structures/PDFPageTree.spec.ts +0 -592
- package/__tests__/core/writers/PDFStreamWriter.spec.ts +0 -71
- package/__tests__/core/writers/PDFWriter.spec.ts +0 -144
- package/__tests__/core/writers/data/stream-writer-1.pdf +0 -0
- package/__tests__/index.test.ts +0 -12
- package/__tests__/utils/base64.spec.ts +0 -61
- package/__tests__/utils/data/simple.pdf +0 -201
- package/__tests__/utils/data/simple.pdf.base64 +0 -1
- package/__tests__/utils/pdfDocEncoding.spec.ts +0 -82
- package/__tests__/utils/png.spec.ts +0 -53
- package/__tests__/utils/rng.spec.ts +0 -14
- package/__tests__/utils/strings.spec.ts +0 -98
- package/__tests__/utils/unicode.spec.ts +0 -337
- package/assets/fonts/source_hans_jp/SourceHanSerifJP-Regular.otf +0 -0
- package/assets/fonts/ubuntu/Ubuntu-B.ttf +0 -0
- package/assets/fonts/ubuntu/Ubuntu-R.ttf +0 -0
- package/assets/images/cat_riding_unicorn.jpg +0 -0
- package/assets/images/cmyk_colorspace.jpg +0 -0
- package/assets/images/greyscale_bird.png +0 -0
- package/assets/images/minions_banana_alpha.png +0 -0
- package/assets/images/minions_banana_no_alpha.png +0 -0
- package/assets/images/minions_laughing.jpg +0 -0
- package/assets/pdfs/bixby_guide.pdf +0 -0
- package/assets/pdfs/encrypted_new.pdf +0 -0
- package/assets/pdfs/encrypted_old.pdf +0 -0
- package/assets/pdfs/fancy_fields.pdf +0 -0
- package/assets/pdfs/giraffe.pdf +0 -0
- package/assets/pdfs/invalid_root_ref.pdf +0 -0
- package/assets/pdfs/just_metadata.pdf +0 -49
- package/assets/pdfs/missing_endobj_keyword.pdf +0 -70
- package/assets/pdfs/missing_xref_trailer_dict.pdf +0 -141
- package/assets/pdfs/normal.pdf +0 -0
- package/assets/pdfs/pdf20examples/PDF 2.0 with offset start.pdf +0 -179
- package/assets/pdfs/stuff_following_header.pdf +0 -0
- package/assets/pdfs/us_constitution.pdf +0 -0
- package/assets/pdfs/with_comments.pdf +0 -0
- package/assets/pdfs/with_invalid_objects.pdf +0 -53
- package/assets/pdfs/with_invalid_stream_EOL.pdf +0 -0
- package/assets/pdfs/with_null_parent_entry.pdf +0 -0
- package/assets/pdfs/with_signature.pdf +0 -0
- package/assets/pdfs/with_update_sections.pdf +0 -0
- package/assets/pdfs/with_viewer_prefs.pdf +0 -0
- package/assets/pdfs/with_xfa_fields.pdf +0 -0
- package/src/api/PDFDocument.ts +0 -1389
- package/src/api/PDFDocumentOptions.ts +0 -45
- package/src/api/PDFEmbeddedFile.ts +0 -87
- package/src/api/PDFEmbeddedPage.ts +0 -100
- package/src/api/PDFFont.ts +0 -149
- package/src/api/PDFImage.ts +0 -143
- package/src/api/PDFJavaScript.ts +0 -75
- package/src/api/PDFPage.ts +0 -1604
- package/src/api/PDFPageOptions.ts +0 -175
- package/src/api/StandardFonts.ts +0 -16
- package/src/api/colors.ts +0 -109
- package/src/api/errors.ts +0 -110
- package/src/api/form/PDFButton.ts +0 -242
- package/src/api/form/PDFCheckBox.ts +0 -247
- package/src/api/form/PDFDropdown.ts +0 -637
- package/src/api/form/PDFField.ts +0 -491
- package/src/api/form/PDFForm.ts +0 -842
- package/src/api/form/PDFOptionList.ts +0 -555
- package/src/api/form/PDFRadioGroup.ts +0 -455
- package/src/api/form/PDFSignature.ts +0 -44
- package/src/api/form/PDFTextField.ts +0 -811
- package/src/api/form/appearances.ts +0 -655
- package/src/api/image/alignment.ts +0 -5
- package/src/api/objects.ts +0 -10
- package/src/api/operations.ts +0 -873
- package/src/api/operators.ts +0 -335
- package/src/api/rotations.ts +0 -84
- package/src/api/sizes.ts +0 -52
- package/src/api/svg.ts +0 -888
- package/src/api/svgPath.ts +0 -460
- package/src/api/text/alignment.ts +0 -5
- package/src/api/text/layout.ts +0 -328
- package/src/core/PDFContext.ts +0 -274
- package/src/core/PDFObjectCopier.ts +0 -142
- package/src/core/acroform/PDFAcroButton.ts +0 -104
- package/src/core/acroform/PDFAcroCheckBox.ts +0 -48
- package/src/core/acroform/PDFAcroChoice.ts +0 -143
- package/src/core/acroform/PDFAcroComboBox.ts +0 -21
- package/src/core/acroform/PDFAcroField.ts +0 -168
- package/src/core/acroform/PDFAcroForm.ts +0 -96
- package/src/core/acroform/PDFAcroListBox.ts +0 -19
- package/src/core/acroform/PDFAcroNonTerminal.ts +0 -33
- package/src/core/acroform/PDFAcroPushButton.ts +0 -21
- package/src/core/acroform/PDFAcroRadioButton.ts +0 -57
- package/src/core/acroform/PDFAcroTerminal.ts +0 -70
- package/src/core/acroform/PDFAcroText.ts +0 -76
- package/src/core/acroform/flags.ts +0 -162
- package/src/core/acroform/utils.ts +0 -129
- package/src/core/annotation/AppearanceCharacteristics.ts +0 -133
- package/src/core/annotation/BorderStyle.ts +0 -31
- package/src/core/annotation/PDFAnnotation.ts +0 -148
- package/src/core/annotation/PDFWidgetAnnotation.ts +0 -111
- package/src/core/annotation/flags.ts +0 -90
- package/src/core/crypto.ts +0 -1844
- package/src/core/document/PDFCrossRefSection.ts +0 -161
- package/src/core/document/PDFHeader.ts +0 -48
- package/src/core/document/PDFTrailer.ts +0 -48
- package/src/core/document/PDFTrailerDict.ts +0 -39
- package/src/core/embedders/CMap.ts +0 -65
- package/src/core/embedders/CustomFontEmbedder.ts +0 -237
- package/src/core/embedders/CustomFontSubsetEmbedder.ts +0 -89
- package/src/core/embedders/FileEmbedder.ts +0 -77
- package/src/core/embedders/FontFlags.ts +0 -45
- package/src/core/embedders/JavaScriptEmbedder.ts +0 -34
- package/src/core/embedders/JpegEmbedder.ts +0 -118
- package/src/core/embedders/PDFPageEmbedder.ts +0 -139
- package/src/core/embedders/PngEmbedder.ts +0 -69
- package/src/core/embedders/StandardFontEmbedder.ts +0 -121
- package/src/core/errors.ts +0 -226
- package/src/core/interactive/ViewerPreferences.ts +0 -565
- package/src/core/objects/PDFArray.ts +0 -179
- package/src/core/objects/PDFBool.ts +0 -53
- package/src/core/objects/PDFDict.ts +0 -220
- package/src/core/objects/PDFHexString.ts +0 -94
- package/src/core/objects/PDFInvalidObject.ts +0 -34
- package/src/core/objects/PDFName.ts +0 -152
- package/src/core/objects/PDFNull.ts +0 -30
- package/src/core/objects/PDFNumber.ts +0 -44
- package/src/core/objects/PDFObject.ts +0 -22
- package/src/core/objects/PDFRawStream.ts +0 -41
- package/src/core/objects/PDFRef.ts +0 -51
- package/src/core/objects/PDFStream.ts +0 -87
- package/src/core/objects/PDFString.ts +0 -118
- package/src/core/operators/PDFOperator.ts +0 -72
- package/src/core/operators/PDFOperatorNames.ts +0 -92
- package/src/core/parser/BaseParser.ts +0 -119
- package/src/core/parser/ByteStream.ts +0 -76
- package/src/core/parser/PDFObjectParser.ts +0 -302
- package/src/core/parser/PDFObjectStreamParser.ts +0 -65
- package/src/core/parser/PDFParser.ts +0 -363
- package/src/core/parser/PDFXRefStreamParser.ts +0 -129
- package/src/core/streams/Ascii85Stream.ts +0 -97
- package/src/core/streams/AsciiHexStream.ts +0 -77
- package/src/core/streams/DecodeStream.ts +0 -188
- package/src/core/streams/DecryptStream.ts +0 -49
- package/src/core/streams/FlateStream.ts +0 -397
- package/src/core/streams/LZWStream.ts +0 -157
- package/src/core/streams/RunLengthStream.ts +0 -55
- package/src/core/streams/Stream.ts +0 -126
- package/src/core/streams/decode.ts +0 -70
- package/src/core/structures/PDFCatalog.ts +0 -81
- package/src/core/structures/PDFContentStream.ts +0 -58
- package/src/core/structures/PDFCrossRefStream.ts +0 -238
- package/src/core/structures/PDFFlateStream.ts +0 -40
- package/src/core/structures/PDFObjectStream.ts +0 -91
- package/src/core/structures/PDFPageLeaf.ts +0 -244
- package/src/core/structures/PDFPageTree.ts +0 -192
- package/src/core/syntax/CharCodes.ts +0 -62
- package/src/core/syntax/Delimiters.ts +0 -14
- package/src/core/syntax/Irregular.ts +0 -10
- package/src/core/syntax/Keywords.ts +0 -57
- package/src/core/syntax/Numeric.ts +0 -26
- package/src/core/syntax/Whitespace.ts +0 -10
- package/src/core/writers/PDFStreamWriter.ts +0 -114
- package/src/core/writers/PDFWriter.ts +0 -146
- package/src/types/fontkit.ts +0 -643
- package/src/utils/Cache.ts +0 -26
- package/src/utils/arrays.ts +0 -153
- package/src/utils/async.ts +0 -8
- package/src/utils/base64.ts +0 -98
- package/src/utils/elements/Arc.ts +0 -97
- package/src/utils/elements/Circle.ts +0 -47
- package/src/utils/elements/Ellipse.ts +0 -117
- package/src/utils/elements/GraphElement.ts +0 -14
- package/src/utils/elements/Line.ts +0 -83
- package/src/utils/elements/Plot.ts +0 -50
- package/src/utils/elements/Point.ts +0 -37
- package/src/utils/elements/Rectangle.ts +0 -65
- package/src/utils/elements/Segment.ts +0 -81
- package/src/utils/errors.ts +0 -3
- package/src/utils/intersections.ts +0 -237
- package/src/utils/maths.ts +0 -96
- package/src/utils/numbers.ts +0 -55
- package/src/utils/objects.ts +0 -13
- package/src/utils/pdfDocEncoding.ts +0 -69
- package/src/utils/png.ts +0 -100
- package/src/utils/rng.ts +0 -21
- package/src/utils/strings.ts +0 -191
- package/src/utils/validators.ts +0 -192
- package/tsconfig.build.json +0 -14
- package/tsconfig.json +0 -15
- package/vite.config.mts +0 -39
- /package/{src/api/form/index.ts → dist/api/form/index.d.ts} +0 -0
- /package/{src/api/image/index.ts → dist/api/image/index.d.ts} +0 -0
- /package/{src/api/index.ts → dist/api/index.d.ts} +0 -0
- /package/{src/api/text/index.ts → dist/api/text/index.d.ts} +0 -0
- /package/{src/core/acroform/index.ts → dist/core/acroform/index.d.ts} +0 -0
- /package/{src/core/annotation/index.ts → dist/core/annotation/index.d.ts} +0 -0
- /package/{src/index.ts → dist/index.d.ts} +0 -0
- /package/{src/utils/elements/index.ts → dist/utils/elements/index.d.ts} +0 -0
- /package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -0
package/src/utils/arrays.ts
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { decodeFromBase64DataUri } from './base64';
|
|
2
|
-
import { charFromCode } from './strings';
|
|
3
|
-
|
|
4
|
-
export const last = <T>(array: T[]): T => array[array.length - 1];
|
|
5
|
-
|
|
6
|
-
// export const dropLast = <T>(array: T[]): T[] =>
|
|
7
|
-
// array.slice(0, array.length - 1);
|
|
8
|
-
|
|
9
|
-
export const typedArrayFor = (value: string | Uint8Array): Uint8Array => {
|
|
10
|
-
if (value instanceof Uint8Array) return value;
|
|
11
|
-
const length = value.length;
|
|
12
|
-
const typedArray = new Uint8Array(length);
|
|
13
|
-
for (let idx = 0; idx < length; idx++) {
|
|
14
|
-
typedArray[idx] = value.charCodeAt(idx);
|
|
15
|
-
}
|
|
16
|
-
return typedArray;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export const mergeIntoTypedArray = (...arrays: (string | Uint8Array)[]) => {
|
|
20
|
-
const arrayCount = arrays.length;
|
|
21
|
-
|
|
22
|
-
const typedArrays: Uint8Array[] = [];
|
|
23
|
-
for (let idx = 0; idx < arrayCount; idx++) {
|
|
24
|
-
const element = arrays[idx];
|
|
25
|
-
typedArrays[idx] = element instanceof Uint8Array ? element : typedArrayFor(element);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
let totalSize = 0;
|
|
29
|
-
for (let idx = 0; idx < arrayCount; idx++) {
|
|
30
|
-
totalSize += arrays[idx].length;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const merged = new Uint8Array(totalSize);
|
|
34
|
-
let offset = 0;
|
|
35
|
-
for (let arrIdx = 0; arrIdx < arrayCount; arrIdx++) {
|
|
36
|
-
const arr = typedArrays[arrIdx];
|
|
37
|
-
for (let byteIdx = 0, arrLen = arr.length; byteIdx < arrLen; byteIdx++) {
|
|
38
|
-
merged[offset++] = arr[byteIdx];
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return merged;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
export const mergeUint8Arrays = (arrays: Uint8Array[]): Uint8Array => {
|
|
46
|
-
let totalSize = 0;
|
|
47
|
-
for (let idx = 0, len = arrays.length; idx < len; idx++) {
|
|
48
|
-
totalSize += arrays[idx].length;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const mergedBuffer = new Uint8Array(totalSize);
|
|
52
|
-
let offset = 0;
|
|
53
|
-
for (let idx = 0, len = arrays.length; idx < len; idx++) {
|
|
54
|
-
const array = arrays[idx];
|
|
55
|
-
mergedBuffer.set(array, offset);
|
|
56
|
-
offset += array.length;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return mergedBuffer;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
export const arrayAsString = (array: Uint8Array | number[]): string => {
|
|
63
|
-
let str = '';
|
|
64
|
-
for (let idx = 0, len = array.length; idx < len; idx++) {
|
|
65
|
-
str += charFromCode(array[idx]);
|
|
66
|
-
}
|
|
67
|
-
return str;
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
export const byAscendingId = <T extends { id: any }>(a: T, b: T) => a.id - b.id;
|
|
71
|
-
|
|
72
|
-
export const sortedUniq = <T>(array: T[], indexer: (elem: T) => any): T[] => {
|
|
73
|
-
const uniq: T[] = [];
|
|
74
|
-
|
|
75
|
-
for (let idx = 0, len = array.length; idx < len; idx++) {
|
|
76
|
-
const curr = array[idx];
|
|
77
|
-
const prev = array[idx - 1];
|
|
78
|
-
if (idx === 0 || indexer(curr) !== indexer(prev)) {
|
|
79
|
-
uniq.push(curr);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return uniq;
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
export const isArrayEqual = <T>(arr1: ArrayLike<T>, arr2: ArrayLike<T>) => {
|
|
87
|
-
if (arr1.length !== arr2.length) {
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
for (let i = 0, ii = arr1.length; i < ii; i++) {
|
|
91
|
-
if (arr1[i] !== arr2[i]) {
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return true;
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
// Arrays and TypedArrays in JS both have .reverse() methods, which would seem
|
|
99
|
-
// to negate the need for this function. However, not all runtimes support this
|
|
100
|
-
// method (e.g. React Native). This function compensates for that fact.
|
|
101
|
-
export const reverseArray = (array: Uint8Array) => {
|
|
102
|
-
const arrayLen = array.length;
|
|
103
|
-
for (let idx = 0, len = Math.floor(arrayLen / 2); idx < len; idx++) {
|
|
104
|
-
const leftIdx = idx;
|
|
105
|
-
const rightIdx = arrayLen - idx - 1;
|
|
106
|
-
const temp = array[idx];
|
|
107
|
-
|
|
108
|
-
array[leftIdx] = array[rightIdx];
|
|
109
|
-
array[rightIdx] = temp;
|
|
110
|
-
}
|
|
111
|
-
return array;
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
export const sum = (array: number[] | Uint8Array): number => {
|
|
115
|
-
let total = 0;
|
|
116
|
-
for (let idx = 0, len = array.length; idx < len; idx++) {
|
|
117
|
-
total += array[idx];
|
|
118
|
-
}
|
|
119
|
-
return total;
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
export const range = (start: number, end: number): number[] => {
|
|
123
|
-
const arr = Array<number>(end - start);
|
|
124
|
-
for (let idx = 0, len = arr.length; idx < len; idx++) {
|
|
125
|
-
arr[idx] = start + idx;
|
|
126
|
-
}
|
|
127
|
-
return arr;
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
export const pluckIndices = <T>(arr: T[], indices: number[]) => {
|
|
131
|
-
const plucked = Array<T>(indices.length);
|
|
132
|
-
for (let idx = 0, len = indices.length; idx < len; idx++) {
|
|
133
|
-
plucked[idx] = arr[indices[idx]];
|
|
134
|
-
}
|
|
135
|
-
return plucked;
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
export const canBeConvertedToUint8Array = (
|
|
139
|
-
input: any,
|
|
140
|
-
): input is string | ArrayBuffer | Uint8Array =>
|
|
141
|
-
input instanceof Uint8Array || input instanceof ArrayBuffer || typeof input === 'string';
|
|
142
|
-
|
|
143
|
-
export const toUint8Array = (input: string | ArrayBuffer | Uint8Array) => {
|
|
144
|
-
if (typeof input === 'string') {
|
|
145
|
-
return decodeFromBase64DataUri(input);
|
|
146
|
-
} else if (input instanceof ArrayBuffer) {
|
|
147
|
-
return new Uint8Array(input);
|
|
148
|
-
} else if (input instanceof Uint8Array) {
|
|
149
|
-
return input;
|
|
150
|
-
} else {
|
|
151
|
-
throw new TypeError('`input` must be one of `string | ArrayBuffer | Uint8Array`');
|
|
152
|
-
}
|
|
153
|
-
};
|
package/src/utils/async.ts
DELETED
package/src/utils/base64.ts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* The `chars`, `lookup`, `encode`, and `decode` members of this file are
|
|
3
|
-
* licensed under the following:
|
|
4
|
-
*
|
|
5
|
-
* base64-arraybuffer
|
|
6
|
-
* https://github.com/niklasvh/base64-arraybuffer
|
|
7
|
-
*
|
|
8
|
-
* Copyright (c) 2012 Niklas von Hertzen
|
|
9
|
-
* Licensed under the MIT license.
|
|
10
|
-
*
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
14
|
-
|
|
15
|
-
// Use a lookup table to find the index.
|
|
16
|
-
const lookup = new Uint8Array(256);
|
|
17
|
-
for (let i = 0; i < chars.length; i++) {
|
|
18
|
-
lookup[chars.charCodeAt(i)] = i;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export const encodeToBase64 = (bytes: Uint8Array): string => {
|
|
22
|
-
let base64 = '';
|
|
23
|
-
const len = bytes.length;
|
|
24
|
-
for (let i = 0; i < len; i += 3) {
|
|
25
|
-
base64 += chars[bytes[i] >> 2];
|
|
26
|
-
base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
|
|
27
|
-
base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
|
|
28
|
-
base64 += chars[bytes[i + 2] & 63];
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
if (len % 3 === 2) {
|
|
32
|
-
base64 = base64.substring(0, base64.length - 1) + '=';
|
|
33
|
-
} else if (len % 3 === 1) {
|
|
34
|
-
base64 = base64.substring(0, base64.length - 2) + '==';
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return base64;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
export const decodeFromBase64 = (base64: string): Uint8Array => {
|
|
41
|
-
let bufferLength = base64.length * 0.75;
|
|
42
|
-
const len = base64.length;
|
|
43
|
-
let i;
|
|
44
|
-
let p = 0;
|
|
45
|
-
let encoded1;
|
|
46
|
-
let encoded2;
|
|
47
|
-
let encoded3;
|
|
48
|
-
let encoded4;
|
|
49
|
-
|
|
50
|
-
if (base64[base64.length - 1] === '=') {
|
|
51
|
-
bufferLength--;
|
|
52
|
-
if (base64[base64.length - 2] === '=') {
|
|
53
|
-
bufferLength--;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const bytes = new Uint8Array(bufferLength);
|
|
58
|
-
|
|
59
|
-
for (i = 0; i < len; i += 4) {
|
|
60
|
-
encoded1 = lookup[base64.charCodeAt(i)];
|
|
61
|
-
encoded2 = lookup[base64.charCodeAt(i + 1)];
|
|
62
|
-
encoded3 = lookup[base64.charCodeAt(i + 2)];
|
|
63
|
-
encoded4 = lookup[base64.charCodeAt(i + 3)];
|
|
64
|
-
|
|
65
|
-
bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
|
|
66
|
-
bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
|
|
67
|
-
bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return bytes;
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
// This regex is designed to be as flexible as possible. It will parse certain
|
|
74
|
-
// invalid data URIs.
|
|
75
|
-
const DATA_URI_PREFIX_REGEX = /^(data)?:?([\w/+]+)?;?(charset=[\w-]+|base64)?.*,/i;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* If the `dataUri` input is a data URI, then the data URI prefix must not be
|
|
79
|
-
* longer than 100 characters, or this function will fail to decode it.
|
|
80
|
-
*
|
|
81
|
-
* @param dataUri a base64 data URI or plain base64 string
|
|
82
|
-
* @returns a Uint8Array containing the decoded input
|
|
83
|
-
*/
|
|
84
|
-
export const decodeFromBase64DataUri = (dataUri: string): Uint8Array => {
|
|
85
|
-
const trimmedUri = dataUri.trim();
|
|
86
|
-
|
|
87
|
-
const prefix = trimmedUri.substring(0, 100);
|
|
88
|
-
const res = prefix.match(DATA_URI_PREFIX_REGEX);
|
|
89
|
-
|
|
90
|
-
// Assume it's not a data URI - just a plain base64 string
|
|
91
|
-
if (!res) return decodeFromBase64(trimmedUri);
|
|
92
|
-
|
|
93
|
-
// Remove the data URI prefix and parse the remainder as a base64 string
|
|
94
|
-
const [fullMatch] = res;
|
|
95
|
-
const data = trimmedUri.substring(fullMatch.length);
|
|
96
|
-
|
|
97
|
-
return decodeFromBase64(data);
|
|
98
|
-
};
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { angleABC, distance, distanceCoords, rotate, vector } from '../maths';
|
|
2
|
-
|
|
3
|
-
import Circle from './Circle';
|
|
4
|
-
import GraphElement from './GraphElement';
|
|
5
|
-
import Point from './Point';
|
|
6
|
-
|
|
7
|
-
export default class Arc extends GraphElement {
|
|
8
|
-
O: Point;
|
|
9
|
-
A: Point;
|
|
10
|
-
B: Point;
|
|
11
|
-
/** Last sweep. Used to deduce the angle orientation */
|
|
12
|
-
lastSweep: number;
|
|
13
|
-
|
|
14
|
-
constructor(
|
|
15
|
-
O: Point = new Point(),
|
|
16
|
-
A: Point = new Point(),
|
|
17
|
-
B: Point = new Point(),
|
|
18
|
-
lastSweep = 0,
|
|
19
|
-
) {
|
|
20
|
-
super();
|
|
21
|
-
this.O = O;
|
|
22
|
-
this.A = A;
|
|
23
|
-
this.B = B;
|
|
24
|
-
this.lastSweep = lastSweep;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
center() {
|
|
28
|
-
return this.O;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
origin() {
|
|
32
|
-
return this.A;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
destination() {
|
|
36
|
-
return this.getCircle().orthoProjection(this.B);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
sweep() {
|
|
40
|
-
this.lastSweep = angleABC(this.origin(), this.center(), this.destination(), this.lastSweep);
|
|
41
|
-
return this.lastSweep;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
ray() {
|
|
45
|
-
return distance(this.center(), this.origin());
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
isEqual(element: GraphElement): boolean {
|
|
49
|
-
if (!(element instanceof Arc)) return false;
|
|
50
|
-
const dest = this.destination();
|
|
51
|
-
const o = this.origin();
|
|
52
|
-
const eDest = element.destination();
|
|
53
|
-
const eO = element.origin();
|
|
54
|
-
return (
|
|
55
|
-
this.getCircle().isEqual(element.getCircle()) &&
|
|
56
|
-
((dest.isEqual(eDest) && o.isEqual(eO)) || (dest.isEqual(eO) && o.isEqual(eDest)))
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
getCircle() {
|
|
61
|
-
const circle = new Circle(this.center(), this.ray());
|
|
62
|
-
return circle;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
originVect() {
|
|
66
|
-
return vector(this.center(), this.origin());
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
middle() {
|
|
70
|
-
const halfSweep = this.sweep() / 2;
|
|
71
|
-
const mid = this.center().plus(rotate(vector(this.center(), this.origin()), halfSweep));
|
|
72
|
-
return mid;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
includes(P: Point) {
|
|
76
|
-
// As angles are returned between -π and π, we need the middle of the arc
|
|
77
|
-
return (
|
|
78
|
-
this.getCircle().includes(P) &&
|
|
79
|
-
Math.abs(angleABC(this.middle(), this.center(), P)) <= Math.abs(this.sweep() / 2)
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
orthoProjection(P: Point) {
|
|
84
|
-
const H = this.getCircle().orthoProjection(P);
|
|
85
|
-
if (this.includes(H)) return H;
|
|
86
|
-
else {
|
|
87
|
-
const origin = this.origin().toCoords();
|
|
88
|
-
const destination = this.destination().toCoords();
|
|
89
|
-
// Returns the closest between origin and destination
|
|
90
|
-
const coords =
|
|
91
|
-
distanceCoords(H.toCoords(), origin) < distanceCoords(H.toCoords(), destination)
|
|
92
|
-
? origin
|
|
93
|
-
: destination;
|
|
94
|
-
return new Point(coords);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { distance, distanceCoords, isEqual, minus, plus, times, unitVector } from '../maths';
|
|
2
|
-
|
|
3
|
-
import GraphElement from './GraphElement';
|
|
4
|
-
import Point from './Point';
|
|
5
|
-
export default class Circle extends GraphElement {
|
|
6
|
-
O: Point;
|
|
7
|
-
r: number;
|
|
8
|
-
|
|
9
|
-
constructor(O: Point = new Point(), r = 1) {
|
|
10
|
-
super();
|
|
11
|
-
this.O = O;
|
|
12
|
-
this.r = r;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
ray() {
|
|
16
|
-
return this.r;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
center() {
|
|
20
|
-
return this.O;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** This is used to standardize type Circle | Arc */
|
|
24
|
-
getCircle() {
|
|
25
|
-
return this;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
isEqual(element: GraphElement): boolean {
|
|
29
|
-
return (
|
|
30
|
-
element instanceof Circle &&
|
|
31
|
-
this.center().isEqual(element.center()) &&
|
|
32
|
-
isEqual(this.ray(), element.ray())
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
includes(P: Point) {
|
|
37
|
-
return isEqual(distance(this.center(), P), this.ray());
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
orthoProjection(P: Point) {
|
|
41
|
-
const center = this.center().toCoords();
|
|
42
|
-
const coords = P.toCoords();
|
|
43
|
-
if (distanceCoords(coords, center) < this.ray()) return P;
|
|
44
|
-
const vect = times(unitVector(minus(coords, center)), this.ray());
|
|
45
|
-
return new Point(plus(center, vect));
|
|
46
|
-
}
|
|
47
|
-
}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { Size } from '../../types';
|
|
2
|
-
import {
|
|
3
|
-
angle,
|
|
4
|
-
distance,
|
|
5
|
-
isEqual,
|
|
6
|
-
orientation,
|
|
7
|
-
orthogonal,
|
|
8
|
-
times,
|
|
9
|
-
unitVector,
|
|
10
|
-
vector,
|
|
11
|
-
} from '../maths';
|
|
12
|
-
|
|
13
|
-
import GraphElement from './GraphElement';
|
|
14
|
-
import Point from './Point';
|
|
15
|
-
import Segment from './Segment';
|
|
16
|
-
|
|
17
|
-
export default class Ellipse extends GraphElement {
|
|
18
|
-
A: Point;
|
|
19
|
-
B: Point;
|
|
20
|
-
C: Point;
|
|
21
|
-
|
|
22
|
-
constructor(A: Point = new Point(), B: Point = new Point(), C: Point = new Point()) {
|
|
23
|
-
super();
|
|
24
|
-
this.A = A;
|
|
25
|
-
this.B = B;
|
|
26
|
-
this.C = C;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
center(): Point {
|
|
30
|
-
const center = this.axis().middle();
|
|
31
|
-
return center;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
axis(): Segment {
|
|
35
|
-
const axis = new Segment(this.A, this.B);
|
|
36
|
-
return axis;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
a(): number {
|
|
40
|
-
const axis = this.axis();
|
|
41
|
-
return Math.max(axis.length() / 2, axis.distance(this.C));
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
b(): number {
|
|
45
|
-
const axis = this.axis();
|
|
46
|
-
return Math.min(axis.length() / 2, axis.distance(this.C));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
rotation(): number {
|
|
50
|
-
const axis = this.axis();
|
|
51
|
-
return axis.length() / 2 > axis.distance(this.C)
|
|
52
|
-
? orientation(axis.dirVect())
|
|
53
|
-
: orientation(orthogonal(axis.dirVect()));
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
getSize(): Size {
|
|
57
|
-
return { width: 2 * this.a(), height: 2 * this.b() };
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
isEqual(element: GraphElement): boolean {
|
|
61
|
-
if (!(element instanceof Ellipse)) return false;
|
|
62
|
-
const a = this.a();
|
|
63
|
-
const b = this.b();
|
|
64
|
-
const rotation = this.rotation();
|
|
65
|
-
const eltA = element.a();
|
|
66
|
-
const eltB = element.b();
|
|
67
|
-
const eltRotation = element.rotation();
|
|
68
|
-
// If the main axis is the same on both ellipse
|
|
69
|
-
if (eltA < eltB === a < b) {
|
|
70
|
-
// The rotation is equivalent module PI as the element is symetrical
|
|
71
|
-
return (
|
|
72
|
-
isEqual(eltA, a) &&
|
|
73
|
-
isEqual(eltB, b) &&
|
|
74
|
-
isEqual(rotation + (Math.PI % Math.PI), eltRotation + (Math.PI % Math.PI))
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
// If the small axis is different
|
|
78
|
-
else {
|
|
79
|
-
// We add a rotation of PI / 2 to emulate the fact that the main axis are actually orthogonal
|
|
80
|
-
return (
|
|
81
|
-
isEqual(eltA, b) &&
|
|
82
|
-
isEqual(eltB, a) &&
|
|
83
|
-
isEqual(rotation + (Math.PI % Math.PI), eltRotation + (((3 * Math.PI) / 2) % Math.PI))
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
includes(P: Point) {
|
|
89
|
-
const { x, y } = P.toCoords();
|
|
90
|
-
const { x: cx, y: cy } = this.center().toCoords();
|
|
91
|
-
const teta = this.rotation();
|
|
92
|
-
return isEqual(
|
|
93
|
-
Math.pow(((x - cx) * Math.cos(teta) + (y - cy) * Math.sin(teta)) / this.a(), 2) +
|
|
94
|
-
Math.pow(((x - cx) * Math.sin(teta) - (y - cy) * Math.cos(teta)) / this.b(), 2),
|
|
95
|
-
1,
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
orthoProjection(P: Point) {
|
|
100
|
-
// We will consider that the parametric projection is a correct approximation of the distance for the current case, even if it is not orthogonal
|
|
101
|
-
const C = this.center();
|
|
102
|
-
const axis = this.axis();
|
|
103
|
-
const CP = vector(C, P);
|
|
104
|
-
const teta = angle(axis.dirVect(), vector(C, P));
|
|
105
|
-
const ray = this.polarRay(teta);
|
|
106
|
-
if (distance(P, this.center()) < ray) return P;
|
|
107
|
-
const vect = times(unitVector(CP), ray);
|
|
108
|
-
return new Point(this.center().plus(vect).toCoords());
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
polarRay(teta: number) {
|
|
112
|
-
const a = this.a();
|
|
113
|
-
const b = this.b();
|
|
114
|
-
const excentricity = Math.sqrt(Math.abs(a * a - b * b)) / Math.max(a, b);
|
|
115
|
-
return Math.min(a, b) / Math.sqrt(1 - Math.pow(excentricity * Math.cos(teta), 2));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { distance } from '../maths';
|
|
2
|
-
|
|
3
|
-
import Point from './Point';
|
|
4
|
-
|
|
5
|
-
export default abstract class GraphElement {
|
|
6
|
-
abstract isEqual(element: GraphElement): boolean;
|
|
7
|
-
|
|
8
|
-
abstract orthoProjection(P: Point): Point;
|
|
9
|
-
|
|
10
|
-
distance(P: Point) {
|
|
11
|
-
const H = this.orthoProjection(P);
|
|
12
|
-
return distance(H, P);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { Coordinates } from '../../types';
|
|
2
|
-
import { intersectionLine } from '../intersections';
|
|
3
|
-
import { isColinear, isEqual, orthogonal, vector } from '../maths';
|
|
4
|
-
|
|
5
|
-
import GraphElement from './GraphElement';
|
|
6
|
-
import Point from './Point';
|
|
7
|
-
|
|
8
|
-
export default class Line extends GraphElement {
|
|
9
|
-
origin(): Point {
|
|
10
|
-
return this.A;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
dirVect(): Coordinates {
|
|
14
|
-
return vector(this.A, this.B);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
A: Point;
|
|
18
|
-
B: Point;
|
|
19
|
-
|
|
20
|
-
constructor(A: Point = new Point(), B: Point = new Point()) {
|
|
21
|
-
super();
|
|
22
|
-
this.A = A;
|
|
23
|
-
this.B = B;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/** Line equation */
|
|
27
|
-
y(x: number) {
|
|
28
|
-
const a = this.a();
|
|
29
|
-
const b = this.b();
|
|
30
|
-
return a * x + b;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/** The slope */
|
|
34
|
-
a() {
|
|
35
|
-
const dirVect = this.dirVect();
|
|
36
|
-
return dirVect.y / dirVect.x;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/** Origin y coordinate */
|
|
40
|
-
b() {
|
|
41
|
-
const O = this.origin().toCoords();
|
|
42
|
-
const a = this.a();
|
|
43
|
-
return O.y - a * O.x;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
isEqual(element: GraphElement): boolean {
|
|
47
|
-
const vect = this.dirVect();
|
|
48
|
-
return (
|
|
49
|
-
element instanceof Line &&
|
|
50
|
-
isColinear(vect, element.dirVect()) &&
|
|
51
|
-
(isEqual(vect.x, 0)
|
|
52
|
-
? // We need to take care of the case of the vertical line
|
|
53
|
-
isEqual(this.origin().toCoords().x, element.origin().toCoords().x)
|
|
54
|
-
: isEqual(this.b(), element.b()))
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/** Reversed line equation */
|
|
59
|
-
x(y: number) {
|
|
60
|
-
const dirVect = this.dirVect();
|
|
61
|
-
return ((y - this.b()) * dirVect.x) / dirVect.y;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
includes(P: Point) {
|
|
65
|
-
const { x, y } = P.toCoords();
|
|
66
|
-
const vect = this.dirVect();
|
|
67
|
-
return isEqual(vect.x, 0) ? isEqual(this.origin().toCoords().x, x) : isEqual(this.y(x), y);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/** This is used to standarsize type Segment | HalfLine | Line */
|
|
71
|
-
getLine() {
|
|
72
|
-
const line = new Line(this.origin(), this.B);
|
|
73
|
-
return line;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
orthoProjection(P: Point): Point {
|
|
77
|
-
const vectOrtho = orthogonal(this.dirVect());
|
|
78
|
-
const A = new Point(P.toCoords());
|
|
79
|
-
const ortho = new Line(A, A.plus(vectOrtho));
|
|
80
|
-
const H = intersectionLine(this, ortho)[0];
|
|
81
|
-
return new Point(H);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { Coordinates } from '../../types';
|
|
2
|
-
import { plus } from '../maths';
|
|
3
|
-
|
|
4
|
-
import GraphElement from './GraphElement';
|
|
5
|
-
import Point from './Point';
|
|
6
|
-
import Segment from './Segment';
|
|
7
|
-
export default class Plot extends GraphElement {
|
|
8
|
-
points: Coordinates[];
|
|
9
|
-
|
|
10
|
-
constructor(points: Coordinates[] = []) {
|
|
11
|
-
super();
|
|
12
|
-
this.points = points;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
getPoints() {
|
|
16
|
-
return [...this.points];
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
translate(translationVector: Coordinates) {
|
|
20
|
-
this.points = this.points.map((point) => plus(point, translationVector));
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
isEqual(element: GraphElement): boolean {
|
|
24
|
-
if (!(element instanceof Plot)) return false;
|
|
25
|
-
const points = this.getPoints().map((coord) => new Point(coord));
|
|
26
|
-
const points2 = element.getPoints().map((coord) => new Point(coord));
|
|
27
|
-
return (
|
|
28
|
-
points.every((point, i) => point.isEqual(points2[i])) ||
|
|
29
|
-
points.reverse().every((point, i) => point.isEqual(points2[i]))
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
orthoProjection(P: Point) {
|
|
34
|
-
const points = this.getPoints();
|
|
35
|
-
const orthos = points
|
|
36
|
-
.slice(0, -1)
|
|
37
|
-
.map((pt, i) => new Segment(new Point(pt), new Point(points[i + 1])))
|
|
38
|
-
.map((seg) => seg.orthoProjection(P));
|
|
39
|
-
let min = Number.POSITIVE_INFINITY;
|
|
40
|
-
let closest: Point = new Point(points[0]);
|
|
41
|
-
orthos.forEach((ortho) => {
|
|
42
|
-
const d = ortho.distance(P);
|
|
43
|
-
if (d < min) {
|
|
44
|
-
min = d;
|
|
45
|
-
closest = ortho;
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
return closest;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { Coordinates } from '../../types';
|
|
2
|
-
|
|
3
|
-
import { isEqual, plus } from '../maths';
|
|
4
|
-
import GraphElement from './GraphElement';
|
|
5
|
-
|
|
6
|
-
export default class Point extends GraphElement {
|
|
7
|
-
static type = 'PointFixed';
|
|
8
|
-
|
|
9
|
-
x: number;
|
|
10
|
-
y: number;
|
|
11
|
-
|
|
12
|
-
constructor(coords = { x: 0, y: 0 }) {
|
|
13
|
-
super();
|
|
14
|
-
this.x = coords.x;
|
|
15
|
-
this.y = coords.y;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
toCoords() {
|
|
19
|
-
return { x: this.x, y: this.y };
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
isEqual(element: GraphElement): boolean {
|
|
23
|
-
if (!(element instanceof Point)) return false;
|
|
24
|
-
const A = this.toCoords();
|
|
25
|
-
const B = element.toCoords();
|
|
26
|
-
return isEqual(A.x, B.x) && isEqual(A.y, B.y);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
orthoProjection() {
|
|
30
|
-
return new Point(this.toCoords());
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
plus(vect: Coordinates) {
|
|
34
|
-
const P = new Point(plus(this.toCoords(), vect));
|
|
35
|
-
return P;
|
|
36
|
-
}
|
|
37
|
-
}
|