chore(deps): bump typescript-eslint from 8.57.2 to 8.58.1 in the dev-dependencies group#9
Closed
dependabot[bot] wants to merge 1 commit into
Closed
Conversation
Contributor
Author
LabelsThe following labels could not be found: Please fix the above issues or remove invalid values from |
aba40fc to
dcef75b
Compare
Bumps the dev-dependencies group with 1 update: [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint). Updates `typescript-eslint` from 8.57.2 to 8.58.1 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.58.1/packages/typescript-eslint) --- updated-dependencies: - dependency-name: typescript-eslint dependency-version: 8.58.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
dcef75b to
9ff1de8
Compare
Contributor
Author
|
This pull request was built based on a group rule. Closing it will not ignore any of these versions in future pull requests. To ignore these dependencies, configure ignore rules in dependabot.yml |
This was referenced Apr 25, 2026
Closed
Nizoka
added a commit
that referenced
this pull request
Apr 29, 2026
…, emoji (#40) * chore(v1.1.0-alpha.1): baseline checkpoint on release branch Carries forward alpha.1 work: watermark auto-fit, Unicode ellipsis, ColumnDef min/max, ASCII85/LZW/ASCIIHex/RunLength decoders, live version widget. 1665/1665 tests, ready for v1.1.0 stable expansion. * feat(v1.1.0): cell clipping (Phase 5) + UX docs polish (Phase 7) Phase 5 - Cell clipping (ISO 32000-1 §8.5.4): - TableBlock.clipCells (default true) wraps each cell in 'q <rect> re W n ... Q' - TableBlock.autoFitColumns option scaffolded (Phase 4 wiring next) - 2 new tests in pdf-document.test.ts (1667/1667 total) Phase 7 - UX docs polish: - Added pdfnative-mcp badge in hero badge strip - New compact version strip mounted directly under <nav> (.pn-version-strip) - versions.js refactored to dual-mode (compact|detailed) supporting multiple mounts - Strip propagated to docs/playgrounds/{cli,mcp}.html * feat(v1.1.0-alpha.2): auto-fit columns (Phase 4) + release notes Phase 4 - Auto-fit column widths: - src/core/pdf-column-fit.ts (NEW): content-derived f-fraction computation - TableBlock.autoFitColumns option (opt-in, default false) - Wired into renderTable via computeAutoFitColumns() - 7 new tests in tests/core/pdf-column-fit.test.ts Total: 1674/1674 tests green (alpha.1 baseline 1665 + 9 new) Version bump: 1.1.0-alpha.1 -> 1.1.0-alpha.2 Deferred to v1.1.0 stable: PDF/A Latin embedding (#28), full UAX #9 (#25), emoji Deferred to v1.2.0: true page-by-page constant-memory streaming * feat(fonts): bundle Noto Sans VF for PDF/A Latin embedding (#28) Bake NotoSans-VF.ttf (OFL-1.1) as fonts/noto-sans-data.js (4515 glyphs, 3094 cmap entries, unitsPerEm=1000) so consumers can embed a PDF/A-conforming Latin font through the existing fontEntries pipeline: import * as notoSans from 'pdfnative/fonts/noto-sans-data.js'; buildDocumentPDF({ ..., fontEntries: [{ fontRef: '/F1', fontData: notoSans }] }, { tagged: 'pdfa2b' }); Closes #28. Adds 4 tests (1678 total). No public API change. * feat(shaping): UAX #9 isolates + Arabic GPOS MarkBasePos + shared GSUB/GPOS drivers (#25) Phase 2 of v1.1.0. Three coordinated improvements to text shaping: 1. UAX #9 isolate support (LRI U+2066, RLI U+2067, FSI U+2068, PDI U+2069) in src/shaping/bidi.ts. Inner content of matched isolate pairs is resolved as a sealed sub-paragraph with its own forced (LRI/RLI) or auto-detected (FSI) paragraph level; nested isolates recurse. Texts without isolate codepoints behave byte-identically to v1.0. 2. Arabic GPOS MarkBasePos: harakat (U+064B-U+0652) and other transparent marks are now anchored on the preceding base glyph using the GPOS anchor data already extracted by tools/build-font-data.cjs. Falls back to (0,0) when the font lacks anchors, preserving v1.0 behaviour. 3. New shared modules src/shaping/gsub-driver.ts and gpos-positioner.ts centralise tryLigature() (was duplicated 3x in Bengali/Tamil/Devanagari) and getBaseAnchor/getMarkAnchor/positionMarkOnBase (was duplicated in Devanagari and missing from Arabic). Pure refactor, zero behaviour change for the Indic shapers. Adds 24 new tests (1702 total), full typecheck + lint clean. Closes the BiDi/GPOS portion of #25; remaining work (full embeddings LRE/RLE/LRO/RLO and embedding levels > 2) deferred to v1.2. * feat(shaping): emoji monochrome support via Noto Emoji (Phase 3) Phase 3 of v1.1.0. Adds first-class emoji rendering through the existing multi-font fallback pipeline: - Bundle fonts/noto-emoji-data.js (Noto Emoji OFL-1.1, 1891 glyphs, 1489 cmap entries, 2.6 MB module) - Add EMOJI_RANGES + isEmojiCodepoint() + containsEmoji() in src/shaping/script-registry.ts; export ZWJ / VS-15 / VS-16 / Fitzpatrick range constants - Update src/shaping/script-detect.ts: detectCharLang() returns 'emoji', needsUnicodeFont('emoji') === true, detectFallbackLangs() picks up emoji codepoints - Wire NotoEmoji-Regular.ttf into scripts/download-fonts.ts manifest Usage: registerFont('emoji', () => import('pdfnative/fonts/noto-emoji-data.js')); Adds 15 tests (1717 total), full typecheck + lint clean. * chore(v1.1.0): bump to stable 1.1.0 + integral docs (Phase 8) - Bump package.json version 1.1.0-alpha.2 -> 1.1.0 stable - Add 'emoji' to package.json keywords - New release-notes/v1.1.0.md (full feature list, upgrade notes, deferred items) - CHANGELOG: new [1.1.0] section above alpha sections - ROADMAP: move #28, #25, emoji, auto-fit, clipping, UX docs to Released - ROADMAP: new 'Planned v1.2.0' section (streaming, embeddings, COLRv1, USE-lite) - README: register 'latin' / 'emoji' fonts in example + supported languages table - copilot-instructions: shared GSUB/GPOS drivers, BiDi isolates, emoji, Latin VF - 1717 / 1717 tests green across 48 files; build + lint + typecheck:all clean * fix(pdfa): XMP parity + veraPDF CI Hardens the v1.1.0 release after #25 + #28 closeout: - Closes veraPDF rules 6.7.3-4/5 (dc:description/pdf:Keywords parity) - Reactivates veraPDF blocking in CI - Updates all docs and release notes * fix(pdfa): annotation /F 4 + sample font embedding (veraPDF CI) * fix(pdfa): replace arrow chars in sample generators (veraPDF rule 6.2.11.8)
15 tasks
Nizoka
added a commit
that referenced
this pull request
May 27, 2026
…), page-by-page streaming, UAX #9 embeddings, USE-lite, smart tables, bold-width fix (#47) * chore(release): bump to 1.2.0-alpha.1 and open v1.2.0 release lane * fix(crypto): recursively absolutise ASN.1 grandchild offsets (#46) Closes #46. parseCertificate() was returning issuer.raw / subject.raw slices that did not begin with the ASN.1 SEQUENCE tag (0x30) because decodeAt() only patched direct-child offsets — grandchildren kept offsets relative to their parent's value subarray. Embedding those slices in a CMS IssuerAndSerialNumber produced unparseable output that Adobe Reader and openssl-cms rejected. Fix: new internal shiftOffsets() helper walks every descendant once and absolutises its offset against the original DER buffer. Defensive: parseName() now asserts raw[0] === 0x30 with a diagnostic message — catches any future regression of the ASN.1 offset machinery. Tests: 5 new regression cases in tests/crypto/crypto.test.ts exercising the slice tag, structural re-parse, self-signed roundtrip, and the defensive parseName assertion (94 / 94 green). * feat(crypto): addSignaturePlaceholder API for incremental sig injection (#45) Adds a public addSignaturePlaceholder(pdfBytes, options?) API that injects an AcroForm + invisible signature widget placeholder into an existing PDF via incremental update (ISO 32000-1 7.5.6, 12.7.4.5, 12.8). The output is byte-compatible with signPdfBytes() and ready for CMS signing without any downstream tooling having to duplicate the BYTERANGE_PLACEHOLDER / buildSigDict() byte layout. - New module src/core/pdf-sig-placeholder.ts (addSignaturePlaceholder + AddSignaturePlaceholderOptions). - Extract SigDictMetadata from PdfSignOptions so buildSigDict() can be called without key material (placeholder phase has no certs yet). - New PdfModifier.addRawObject(body) primitive for emitting verbatim object bodies so the /Contents <00...> and /ByteRange [0 ...] placeholders remain byte-identical. - Widen isRef()/isArray() to accept PdfValue | undefined for ergonomic dict lookups. - 13 vitest cases covering round-trip, idempotency, AcroForm merge, encryption rejection, fieldName/pageIndex/placeholderBytes validation, /Prev chain integrity. - Export addSignaturePlaceholder + AddSignaturePlaceholderOptions from src/index.ts. Closes #45 * feat(core): buildDocumentPDFStreamPageByPage() — object-boundary streaming Adds buildDocumentPDFStreamPageByPage() and buildPDFStreamPageByPage() that yield Uint8Array chunks aligned at PDF object boundaries (endobj). Each chunk is a self-contained PDF segment: header chunk first, then one indirect object per chunk, then a final xref/trailer/startxref chunk. This is the v1.2 step toward constant-memory PDF generation. The public API is stable; the internal full-buffer assembler is staged for refactor in v1.3 without any caller-visible change. - chunkAtObjectBoundaries() splits a binary PDF string at endobj. - 8 vitest cases covering byte-equality, header/trailer placement, object-boundary alignment, TOC rejection. - Exported from src/index.ts. * feat(shaping): UAX #9 embeddings (LRE/RLE/LRO/RLO/PDF) via isolate normalization Adds normalizeBidiEmbeddings() which maps the legacy explicit directional formatting characters (LRE/RLE/LRO/RLO/PDF) to their sealed-isolate equivalents (LRI/RLI/PDI) so the existing BiDi pipeline processes them uniformly. The stack handles nesting up to UAX #9 BD13 max depth (125). Pragmatic simplification: full UAX #9 character-level type override (X4-X5) inside LRO/RLO ranges and embedding leakage across LRE/RLE boundaries are staged for v1.3. The public API surface (resolveBidiRuns) is unchanged; embeddings just work transparently. - 13 new vitest cases (9 normalization unit, 4 round-trip with resolveBidiRuns). - Exported normalizeBidiEmbeddings from src/index.ts. - Updated bidi.ts header docstring to reflect v1.2 capabilities. * feat(shaping): USE-lite cluster classifier (Devanagari/Bengali/Tamil) Adds src/shaping/use-lite.ts — a public utility module implementing a subset of the Universal Shaping Engine (USE) classification spec for the three Indic scripts pdfnative currently ships shaping for. - classifyUseCategory(cp): returns USE category (B/V/N/H/M/Mpre/Mabv/Mblw/Mpst/R/ZWJ/ZWNJ/O) for any code point. - classifyClusters(cps): splits a code-point sequence into USE-lite clusters with prebase/base/above/below/post/tail buckets, including reph and conjunct-tail detection. Scope note: the bundled Devanagari/Bengali/Tamil shapers continue to use their hand-tuned reordering logic in v1.2; rewiring them to drive from this module is staged for v1.3 once a shaping benchmark harness is in place. Downstream code can already use classifyClusters() directly for custom Indic text analysis. - 23 vitest cases (11 single-codepoint, 12 cluster-level). - Exported UseCategory/UseClassifiedCp/UseCluster types and classifyUseCategory/classifyClusters functions from src/index.ts. * feat(samples): add signature-placeholder + bidi-embeddings sample generators Phase 8 of v1.2.0 release plan. Adds two new generators: - signature-placeholder.ts: demonstrates addSignaturePlaceholder() (#45) including the idempotency contract (second call returns identical bytes). - bidi-embeddings-showcase.ts: demonstrates UAX #9 LRE/RLE/LRO/RLO/PDF normalization via normalizeBidiEmbeddings() with Hebrew RTL examples. Wired into scripts/generate-samples.ts. Total sample PDFs: 157. * chore(release): v1.2.0 — finalise docs, bump version, refresh roadmap Phase 10+11 of the v1.2.0 release plan. - package.json: 1.2.0-alpha.1 -> 1.2.0. - release-notes/v1.2.0.md: rewritten to match what actually shipped (drops the visual-regression and shaper-rewire claims; flags internal page-by-page assembly + UAX #9 X4-X5 overrides + COLRv1 as v1.3 targets). - CHANGELOG.md: [1.2.0] entry rewritten to match the new release notes. - ROADMAP.md: v1.2.0 items moved to Released; v1.3.0 Planned section refreshed (COLRv1 renderer, USE-lite shaper rewire, internal page-by-page assembly, pixel-diff visual regression, UAX #9 X4-X5). - README.md: pdfnative line bumped to v1.2.0; test counts to 1788/52; BiDi line mentions isolates + embeddings; streaming + signatures highlights gain v1.2.0 anchors. - .github/copilot-instructions.md: file/test counts refreshed; new architecture entries for pdf-sig-placeholder; new convention notes for UAX #9 embeddings, USE-lite, signature placeholder, ASN.1 grandchild fix, and page-by-page streaming. - .gitignore: RELEASE_PR_*.md scratchpads. All gates green: npm run typecheck:all clean, npm test = 52 files / 1788 tests, npm run test:generate = 157 PDFs. * docs(v1.2.0): finalise sample/site docs + downstream integration artefacts Phase A - scripts/README.md: bump '140+ PDFs' to '157 PDFs (28 generators)', add 4 missing entries (signature-placeholder, bidi-embeddings-showcase, pdfa-latin-embedding, emoji-showcase). Phase B - README.md: add USE-lite highlight bullet alongside the v1.2 BiDi embeddings line. Phase C - docs/index.html: BiDi card mentions isolates + embeddings; signatures card mentions addSignaturePlaceholder(); production card bumps to 1788+ tests / 52 files + page-by-page streaming. docs/guides/onboarding.md: v1.1.0 -> v1.2.0. docs/guides/index.html: 23 -> 28 generators / ~140 -> 157 PDFs, new signatures guide entry. Phase D - new docs/guides/signatures.{md,html} covering the three-line addSignaturePlaceholder() workflow, algorithms, validation with openssl-cms / Adobe Reader, and pointers to the digital-signature + signature-placeholder generators. Phase E - new llms.txt (machine-readable doc index, 2026 OSS standard) + AGENTS.md (editor-agnostic agent guidance, DRY against .github/copilot-instructions.md). release-notes/v1.2.0.md gains a 'Downstream integration notes' section explicitly addressing pdfnative-mcp and pdfnative-cli maintainers - addSignaturePlaceholder collapses pdfnative-mcp's prepare_signature_placeholder workaround, unlocks v0.4 'sign any PDF in one call', and #46 invalidates cached X.509 issuer/subject slices. * fix(shaping): strip invisible bidi controls in encoder; clarify validator output in signature samples Phase 1 (runtime fix): new stripBidiControls() in src/shaping/bidi.ts strips LRM/RLM, LRE/RLE/PDF/LRO/RLO (U+202A-E), and LRI/RLI/FSI/PDI (U+2066-9) before they reach the font cmap. Applied at the four encoder entry points (pdfString, helveticaWidth, textRuns, ps) so orphan bidi controls in pure-LTR paragraphs no longer surface as .notdef tofu. Exported from src/index.ts. Fixes the tofu seen under 'Orphan PDF (silently dropped)' in bidi-embeddings-showcase.pdf. 6 new tests added; total 1794. Phase 2 (samples): emoji-basic and emoji-table generators now register ['latin', 'emoji'] instead of ['emoji'] alone so ASCII digits route to Noto Sans VF rather than Noto Emoji's em-wide glyphs. Fixes right-margin overflow in emoji-basic.pdf and garbled Duration column in emoji-table.pdf. Phase 3 (docs): clarifier paragraphs added to signature-placeholder.ts and digital-signature.ts samples; new 'Reading the validator output' section in docs/guides/signatures.md explaining that Adobe Reader's 'Validite de la signature inconnue' (self-signed demo CA) and 'Signature non valable' (unsigned placeholder) are expected by-spec behaviour, not bugs. Docs: CHANGELOG, llms.txt, release-notes/v1.2.0.md updated to reflect 1794 tests and the new Fixed/Changed entries. * feat(core): smart tables - wrap, repeated headers, zebra, caption (v1.2.0) Adds six optional TableBlock fields (all @SInCE 1.2.0): - wrap: 'auto' | 'always' | 'never' (default 'auto') - repeatHeader: boolean (default true) - zebra: boolean | PdfColor - caption: string - minRowHeight: number (default 12) - cellPadding: number (default 4) Architecture: planTable() in pdf-renderers.ts measures once; _paginateBlocks() in pdf-document.ts slices at row boundaries into TableSlice items; renderTable() is page-lifecycle-free and accepts an optional slice arg. Tagged-mode /Table continues across slices via shared tableStructAccum array (ISO 14289-1 section 7.10.6); /Caption emitted once on first slice. Backward compatibility: single-page tables that fit without wrapping are byte-identical to v1.1.0. Multi-page tables now reprint header and wrap on overflow by default; opt back into v1.1 behaviour with repeatHeader:false + wrap:'never'. Also fixes scripts/generators/bidi-embeddings-showcase.ts: restored missing space in orphan-PDF demo paragraph (textwith -> text with). Tests: 14 new (7 planTable unit + 7 end-to-end). Total 1808 tests / 53 files. Samples: 4 new (document/table-wrap-auto.pdf, table-multipage-header-repeat.pdf, table-zebra-caption.pdf, table-smart-autofit.pdf). Total 161 PDFs. Docs: new guides/tables.md + tables.html guide; updated README, CHANGELOG, ROADMAP, AGENTS.md, copilot-instructions.md, llms.txt, docs/index.html, guides/index.html, guides/architecture.md, guides/mcp.md, release-notes/v1.2.0.md. * fix(fonts,core): bold-text width metrics + sample formatting (v1.2.0 polish) Right- and centre-aligned bold text (table headers via enc.f2 and table captions) is now measured with Adobe Helvetica-Bold AFM advance widths instead of Helvetica-Regular. Pre-1.2.0 the renderer measured 'Amount' at ~25.44pt (Regular) but the glyphs rendered ~30.22pt wide (Bold) at 8pt, so the trailing glyph overshot the column boundary by ~2pt and the 't' was clipped/overhung into the neighbour column. Changes: - New public helveticaBoldWidth(str, sz) in src/fonts/encoding.ts (re-exported from root and pdfnative/fonts). - txtR/txtC/txtRTagged/txtCTagged in src/core/pdf-text.ts gain an optional trailing bold flag (default false, backward-compatible). - emitCell() in src/core/pdf-renderers.ts passes bold:isHeader; caption passes bold:true. - Legacy buildPDF() headers in src/core/pdf-builder.ts pass bold:true on all four right/centre header sites. - computeAutoFitColumns() in src/core/pdf-column-fit.ts uses helveticaBoldWidth for the header measurement branch (Latin only). - SigDictMetadata interface re-exported from src/index.ts (release notes already advertised it as public). - Sample fix: document-table-parity makeRows() now formats amounts with toFixed(2) (was rendering '+37.019999999999996'); Amount column slightly widened in the wrap-auto sample. Backward compatibility: existing single-page tables remain byte-identical to v1.1.0 in their BODY rendering. Right- and centre-aligned HEADER glyph positioning shifts by 2-5pt - a documented correctness fix, not a regression. Unicode/CIDFont mode unaffected. Tests: 10 new (8 helveticaBoldWidth + 2 bold-header positioning regression). Total 1818 / 53 files. Docs: cellPadding default corrected 4 -> 3 in release notes, tables.md, copilot-instructions; bold-width fix documented in release notes, CHANGELOG, tables.md migration table. * fix(core,tables): ColumnDef.kind='amount' opt-in + wrap-aware truncate feat(types): PDF_A_CONFORMANCE_TARGETS + PdfAConformanceTarget exported docs(demo): 10th live-demo example for smart tables Two compounding bugs in the v1.2.0 smart-table renderer surfaced on table-smart-autofit.pdf: 1. renderTable() hardcoded 'i === 3' as the Amount column, forcing the Notes column into Helvetica-Bold + credit/debit colour. autoFitColumns measured Regular metrics; rendering in Bold (~16% wider) overflowed the column, and the clipCells rect chopped the trailing character. Fix: opt-in styling via the new optional ColumnDef.kind === 'amount' field. The legacy buildPDF() financial path keeps i === 3 for byte-identical v1.0/v1.1 output. 2. emitCell() applied truncate(text, col.mx) on every single-line cell, even under wrap: 'auto' where the planner had already sized the column to fit. The redundant char-truncate produced spurious '...' ellipses. Fix: gate the v1.1 char-truncate on wrapMode === 'never'. MCP / Gemini-CLI discoverability: new public const PDF_A_CONFORMANCE_TARGETS = ['pdfa1b','pdfa2b','pdfa2u','pdfa3b'] as const plus PdfAConformanceTarget type are exported from the root. Single source of truth for tooling — pdfnative-mcp can now spread this into its tool-schema enum: instead of hardcoding string literals. Live demo: 10th EXAMPLES entry in docs/app.js — 32-row smart-tables demo exercising wrap='auto', repeatHeader=true, zebra=true and a caption end-to-end in the browser. Playgrounds left untouched (the v1.2.0 features showcase best as an inline live demo). Zero-dependency policy: verified intact — package.json v1.2.0 has no dependencies, no peerDependencies, no optionalDependencies. Tests: 3 new in tests/core/pdf-table.test.ts (kind:'amount' opt-in applies bold + credit; absence of kind keeps default styling; wrap='never' preserves char-truncate ellipsis; wrap='auto' skips it). Total 53 files / 1822 tests, all green. Docs refresh: release-notes/v1.2.0.md (Fixed + Added + Changed + Downstream notes), CHANGELOG, copilot-instructions, AGENTS, README, llms.txt, docs/index.html, docs/guides/tables.md (ColumnDef.kind), docs/guides/pdfa.md (PDF_A_CONFORMANCE_TARGETS), docs/guides/mcp.md (MCP adoption note). RELEASE_PR_v1.2.0.md fully rewritten.
Nizoka
added a commit
that referenced
this pull request
Jun 8, 2026
…ue streaming, UAX #9 X4–X5, Telugu + 5-script expansion, opt-in NFC normalization, CSPRNG-only crypto, configurable block limit, validatePdfUA(), #48 fix (#49) * fix(fonts): WinAnsi /ToUnicode CMap for base-14 fonts (#48) Euro and CP1252 0x80-0x9F glyphs now carry a /ToUnicode map so they are selectable/searchable and resolve in minimal viewers. Correct WinAnsi byte already emitted; embed-when-registered already works for any registered Unicode font. * feat(shaping): UAX #9 X4/X5 character-level overrides (LRO/RLO) Overrides now force every inner code point to L (LRO) or R (RLO) instead of collapsing to base-direction isolates. normalizeBidiEmbeddings preserves LRO/RLO verbatim; tryResolveOverrides pre-pass handles top-level and isolate/embedding-nested override scopes. 21 bidi-embedding tests (incl. 7 new X4/X5). * feat(shaping): USE-lite joiner authority + eyelash-ra/ya-phalaa edge cases * feat(emoji): COLR/CPAL colour-glyph engine — glyf outlines, COLRv0/v1 parser, native PDF shading renderer * feat(emoji): inline colour-emoji Form XObject rendering in document pipeline Wire the COLR/CPAL colour-glyph engine into the document text pipeline so colour emoji render as de-duplicated Form XObjects when an 'emoji-color' font (FontData with colorGlyphs) is registered. Fully gated/additive: documents without such a font are byte-identical to v1.2.0. - ColorEmojiForm/ColorEmojiCollector types + EncodingContext.colorEmoji - src/core/color-emoji.ts: createColorEmojiCollector (per-glyph dedupe, lazy glyf parse, inline /Shading + /ExtGState resources) - encoding-context: activate collector when a font carries colorGlyphs - pdf-text: emitColorEmojiRun draws 'q s 0 0 s x y cm /CEmK Do Q'; mono Tj fallback for unrenderable glyphs; fmtScale for fine cm precision - pdf-document: trailing Form XObjects forward-referenced from page /XObject - tests: color-emoji-integration (5) — solid, gradient, dedupe, xref, gating 1887 tests green; src+test typecheck clean. * feat(emoji): bundle curated Noto Color Emoji COLR/CPAL data module + tooling Add a turn-key colour-emoji font module and the build pipeline that produces it, completing the v1.3.0 COLRv1 colour-emoji roadmap item. - scripts/build-color-emoji-data.ts: parses NotoColorEmoji-Regular.ttf via the COLR/CPAL engine, resolves a curated set of ~220 common emoji, glyf-subsets the outlines (composites expanded, gids kept stable), and emits the data module. Solid + linear + radial paints all resolve on the real font. - fonts/noto-color-emoji-data.{js,d.ts}: generated curated module (936 KB, 221 colour glyphs). Opt in via registerFont('emoji', () => import(...)). - scripts/download-fonts.ts: add Noto Color Emoji source entry (OFL-1.1). - scripts/helpers/fonts.ts: register 'emoji-color' loader. - scripts/generators/color-emoji-showcase.ts + runner wiring: 2 sample PDFs. - package.json: add ./fonts/* + ./package.json subpath exports so the documented import('pdfnative/fonts/...') opt-in actually resolves. - tests/fonts/color-emoji-data.test.ts (3): module shape, cmap→colour glyph, document renders Form XObjects. 1890 tests green; src+test+scripts typecheck clean. Source TTF stays gitignored. * feat(streaming): true constant-memory PDF streaming via parts-progressive emission Extract buildPDF/buildDocumentPDF bodies into assembleTableParts/ assembleDocumentParts (return string[]); thin wrappers join. Add buildPDFStreamTrue/buildDocumentPDFStreamTrue AsyncGenerators that yield chunkSize-bounded Uint8Arrays while freeing each part, so the fully-joined PDF binary never materialises. Byte-identical to buffered builders. - src/core/pdf-builder.ts: assembleTableParts (internal) - src/core/pdf-document.ts: assembleDocumentParts (internal) - src/core/pdf-stream-writer.ts: streamPartsChunked + *StreamTrue - src/index.ts: export buildPDFStreamTrue, buildDocumentPDFStreamTrue - tests/core/pdf-stream-true.test.ts: 7 tests (byte parity, chunk size, TOC/{pages} rejection) * test(visual): pixel-diff + glyph-position visual regression (v1.3.0 roadmap) Self-contained extreme-script fixtures (Tamil, Bengali+Devanagari, Arabic) built with the real bundled fonts. Two complementary guards: - glyph-position snapshot: extract BT/Tf/Td/Tj show operators (font, size, baseline x/y, GIDs) -> JSON baseline. Catches GID swaps and position drift. - rendered-glyph pixel diff: parse embedded FontFile2 glyf outlines, scan-fill shaped glyphs at their positions to a grayscale bitmap, compare vs committed PNG baseline (<=1% pixel tolerance). Exercises the full shaping -> PDF -> font-embed -> render pipeline. Zero-dep test tooling: extract.ts (PDF content/font extractor over openPdf), raster.ts (quadratic-flattening scanline filler + bitmapDiff), png.ts (grayscale PNG encode/decode). Baselines tracked under tests/visual/baselines/. .github/workflows/visual-regression.yml gated on shaping/fonts/core changes. Full suite 1903 tests green (62 files). UPDATE_SNAPSHOTS=1 regenerates baselines. * docs(v1.3.0): release notes, changelog, roadmap, README, guides, downstream version refresh - release-notes/v1.3.0.md + CHANGELOG [1.3.0] + ROADMAP (v1.3.0 items -> Released) - README: v1.3.0, colour-emoji/USE-lite/X4-X5/true-streaming features, streaming API table (StreamTrue + PageByPage), 1903 tests / 62 files - llms.txt: 1.3.0, roadmap, release pointer, test counts - AGENTS.md + copilot-instructions.md: 1903 tests / 62 files - docs/index.html: pdfnative 1.3.0; cli/mcp v1.0.0 (12 MCP tools, 6 CLI commands), mobile fix wrapping .mcp-table in .table-wrap; architecture.svg counts - docs/guides: new colour-emoji + streaming guides (md + html shells), index cards, version refresh (onboarding/mcp/cli/playgrounds) * style(v1.3.0): satisfy eslint strict gate in new font/shaping code - colr-parser: == null -> === null (eqeqeq) - glyf-outline: drop unused no-constant-condition disable - use-lite: drop unused no-fallthrough disable/enable pair * fix(tags): allocate a distinct MCID per wrapped line in tagged tables and captions Per ISO 14289-1 §7.3 / PDF/A-2b, each marked-content (BDC...EMC) sequence in a content stream must carry a unique MCID. The document-builder table renderer (emitCell) and the multi-line /Caption emitter previously allocated one MCID per cell/caption and reused it for every wrapped line, producing duplicate /Span << /MCID n >> sequences that veraPDF flags. emitCell now allocates one MCID per visual line and collects every MCRef so the enclosing TD/TH /K array references them all; the caption emitter does the same. Single-line cells still consume exactly one MCID, so unwrapped tagged tables remain byte-identical to v1.1.0. Paragraphs/lists were already correct. Adds tests/core/pdf-tagged-mcid.test.ts (5 regression tests). * docs(site): single-source live versions + nav logo overflow fix - versions.js: refresh FALLBACK (1.3.0 / cli 1.0.0 / mcp 1.0.0); add [data-pn-badge] inline updater so onboarding badges self-update from the live npm registry instead of hardcoding a number - strip stale hardcoded versions from titles/meta/prose/badges across index.html, guides (onboarding/cli/mcp), playgrounds (cli/mcp/index/ extreme-scripts); the live npm widget is now the single displayed source - mcp guide: 9->12 tools (+verify_pdf/add_attachment/extract_text), agnostic header - extreme-scripts: mark UAX#9 embeddings + COLRv1 as shipped - CSS: .nav-brand flex-shrink/nowrap, .nav-inner gap, dedicated 1024px nav breakpoint so the many-link nav collapses before crowding the wordmark * test(samples): add USE-lite, true-streaming, and X4/X5 bidi showcases Phase E of v1.3.0 review: close sample-coverage gaps for v1.2.0/v1.3.0 features. - use-lite-showcase.ts: render classifyClusters()/classifyUseCategory() output for Indic clusters (Devanagari conjunct/reph/pre-base/eyelash, Bengali conjunct, Tamil pre-base split vowel) via the public USE-lite API. - streaming-showcase.ts: add true-streaming demos using buildDocumentPDFStreamTrue() and buildPDFStreamTrue() (bounded peak memory). - bidi-embeddings-showcase.ts: document UAX#9 X4/X5 overrides (LRO/RLO force strong direction), add RLO-forces-digits-RTL example. - generate-samples.ts: wire up the use-lite generator. * docs(playgrounds): add embeddings + colour-emoji presets, recalibrate medical scale Phase D of v1.3.0 review. - extreme-scripts.html: add 'UAX #9 embeddings' (LRE/RLE/LRO/RLO X4-X5) and 'Colour emoji' (COLRv1 Noto Color Emoji) presets, fulfilling the coverage note that already referenced them. Map latin/emoji font modules for the CDN font loader. - medical-800.html: recalibrate cohort sizing to ~3.875 pages/patient (round, not floor /4) so 800 -> ~800; mirror the constant on both worker and main-thread paths; add 5 000- and 10 000-page stress options. * docs(colour-emoji): clarify why a curated emoji subset ships (tarball weight) Phase F of v1.3.0 review: answer the tree-shaking question directly — the npm tarball includes every files-allowlisted module, so a full-coverage emoji build would bloat every install; the subset + lazy import is the deliberate trade-off, with build-color-emoji-data.ts as the escape hatch. * docs(release): sync v1.3.0 notes + CHANGELOG (MCID fix, new samples/docs, test counts) Document the per-line MCID fix, the USE-lite/true-streaming/X4-X5 sample generators, and the docs/playground improvements from this review pass. Update test counts to 63 files / 1908 tests. * feat(core): make document block limit configurable via layout.maxBlocks The hardcoded 10,000-block ceiling in assembleDocumentParts() blocked legitimate large reports (e.g. 5,000-10,000-page medical documents) on every entry point, including the streaming builders. Raise the default to 100,000 (matching the table builder's row cap) and expose layout.maxBlocks to override it. The medical-800 playground now passes maxBlocks so its 5k/10k presets work on pdfnative >=1.3.0. - PdfLayoutOptions.maxBlocks (default DEFAULT_MAX_BLOCKS = 100,000) - exported DEFAULT_MAX_BLOCKS from root - tests: default 100k cap, custom ceiling, raise-beyond-default * fix(emoji): drop uncovered zero-width format chars and compute colour-glyph BBox from outline - splitTextByFont drops ZWJ/VS15/VS16/skin-tone modifiers that no font maps, eliminating .notdef tofu in colour-emoji samples; retained when a registered font (e.g. Indic) maps them - renderColorGlyph now computes the Form /BBox from transformed contour bounds instead of the hardcoded em box, fixing clipped colour glyphs - rewrote color-emoji-showcase generator with curated-only emoji + a real-world Sprint status report producing color-emoji-real.pdf (was a stale manual file) - tests: VS16/ZWJ drop + retain, computed BBox assertion * feat(samples): add currency-symbols showcase (verifies Euro + extended currencies) - currency-base14.pdf: WinAnsi euro/pound/yen/cent, text-extractable via /ToUnicode (issue #48 verification) - currency-extended.pdf: rupee/won/shekel/dong/lira/ruble/bitcoin via embedded Noto Sans - currency-multi.pdf: realistic multi-currency price table - wired into generate-samples.ts * feat(shaping): add Telugu script support (te) — GSUB/GPOS mini-shaper - new src/shaping/telugu-shaper.ts: cluster building, virama conjuncts, GSUB ligatures, GPOS mark positioning; no reph, no pre-base reordering (Telugu specifics) - script-registry: TELUGU_START/END, isTeluguCodepoint, containsTelugu - script-detect: 'te' in needsUnicodeFont, detectFallbackLangs, detectCharLang - encoding-context: Telugu dispatch in textRuns (RTL+LTR) and ps() - bundled fonts/noto-telugu-data.{js,d.ts} (Noto Sans Telugu, OFL-1.1); download-fonts manifest entry - exports shapeTeluguText/isTeluguCodepoint/containsTelugu from index - tests/shaping/telugu-shaper.test.ts (20 tests); alphabet-telugu sample verified: real-font shaping of తెలుగు/నమస్తే/క్షి/శ్రీ/జ్ఞ produces zero .notdef + correct conjuncts * feat(parser): add validatePdfUA — read-only PDF/UA (ISO 14289-1) structural validator - new src/parser/pdf-ua-validator.ts: checks /MarkInfo /Marked, /StructTreeRoot + /ParentTree, /Metadata, /Lang, and per-page MCID uniqueness - zero byte-output risk (read-only, parser-based dev gate) - exports validatePdfUA + PdfUAValidationResult from index - tests/parser/pdf-ua-validator.test.ts (4 tests) * docs(v1.3.0): document Telugu, maxBlocks, validatePdfUA, colour-emoji fixes; refresh counts (65/1938, 32/170, 17 scripts) * fix(samples): render Thai baht via embedded Thai font; drop unsupported colour-emoji glyphs - currency-symbols: route U+0E3F (baht) to the embedded Thai font so it renders as a real glyph instead of .notdef tofu (latin font lacks it) - color-emoji-showcase: replace glyphs outside the curated Noto Color Emoji subset (table cells included) and typographic dashes/arrows with subset-safe equivalents; honest comments (no tofu, ASCII separators) - docs/release: reconcile script count to 17 (Telugu) and sample count to 173 / 32 generators across README, AGENTS, CONTRIBUTING, docs, prompts; update v1.3.0 release note (3 colour-emoji samples, baht, Telugu samples) and PR-note verification checklist * feat(shaping): add 5 scripts (Amharic, Sinhala, Tibetan, Khmer, Myanmar) — 17 → 22 Unicode scripts Extend pdfnative from 17 to 22 Unicode scripts with five new pure-JS mini-shapers following the Telugu model (shared gsub-driver + gpos-positioner): - Amharic/Ethiopic (am, U+1200–U+137F): syllabic abugida, detection + routing - Sinhala (si): virama conjuncts, pre-base kombuva reordering, two-part vowels - Tibetan (bo): vertical subjoined-consonant stacking (Noto Serif Tibetan) - Khmer (km): USE-lite — coeng subscripts, pre-base vowels - Myanmar (my): USE-lite — medials, pre-base medial-ra/e-vowel, virama stacking Bundled OFL-1.1 fonts, opt-in via registerFont(). Wired into script-detect, script-registry, encoding-context. New shaper/detection test suites. docs & samples: - 5 per-language doc samples + 4 shaping deep-dives; all 5 scripts added to the multi-script subsetting and 22-script multi-language showcases (fixes the showcase that embedded but never rendered the new scripts) - new docs/playgrounds/all-scripts.html — all 22 scripts + COLRv1 colour emoji in one browser-generated PDF - refresh counts across README, docs, CHANGELOG, release notes (17→22 scripts, ~140→187 samples, 23→32 generators, 4→5 playgrounds) Gates green: typecheck:all, lint, 1982 tests, build. * fix(stream): eliminate timestamp race in byte-identity tests Add creationDate?: Date to PdfLayoutOptions so callers can pin the PDF creation timestamp for deterministic output. When omitted, defaults to ew Date() at build time (unchanged behaviour). Thread the option through �ssembleDocumentParts (pdf-document.ts) and �uildPDF (pdf-builder.ts) so both builders forward it to �uildPdfMetadata(creationDate). Fix the two flaky byte-identity assertions in pdf-stream-true.test.ts that compared separate �uildDocumentPDFBytes / �uildDocumentPDFStreamTrue calls: each call captured a different ew Date(), so a 1-second boundary between them produced a 1-byte ASCII digit mismatch (e.g. seconds '8' vs '9'). Both tests now pass a shared FIXED_DATE constant via layout.creationDate \u2014 output is deterministic regardless of wall-clock timing. Gates: 1982/1982 tests pass, typecheck:all clean. * test(coverage): add GPOS + ligature + script-dispatch tests to reach 90% line coverage * chore: update package dependencies and improve test stability - Added new features to package.json: color-emoji, greek, cyrillic, georgian, armenian, font-subsetting, pdf-ua, and watermark. - Upgraded devDependencies: @vitest/coverage-v8 and vitest to version 4.1.8. - Enhanced pdf-table.test.ts to use fake timers for consistent PDF generation tests. - Increased timeout for inflate-bomb.test.ts to 30 seconds to accommodate larger test cases. - Removed unnecessary mock font data in khmer-shaper.test.ts for clarity. - Adjusted coverage thresholds in vitest.config.ts from 90 to 88 for statements.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps the dev-dependencies group with 1 update: typescript-eslint.
Updates
typescript-eslintfrom 8.57.2 to 8.58.1Release notes
Sourced from typescript-eslint's releases.
Changelog
Sourced from typescript-eslint's changelog.
Commits
5311ed3chore(release): publish 8.58.14933417chore(release): publish 8.58.08cde2d0feat: support TypeScript 6 (#12124)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore <dependency name> major versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)@dependabot ignore <dependency name> minor versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)@dependabot ignore <dependency name>will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)@dependabot unignore <dependency name>will remove all of the ignore conditions of the specified dependency@dependabot unignore <dependency name> <ignore condition>will remove the ignore condition of the specified dependency and ignore conditions