Sırdaş

@sirdaspdf/core (library)

The @sirdaspdf/core library, in Node and in the browser.

Start here

npm i @sirdaspdf/core

For your AI agent

Paste this into Claude, ChatGPT or Cursor and the agent installs and configures itself by reading the Markdown version of this page.

The runtime-agnostic engine behind the web app, the CLI and the MCP server. Depends only on pdf-lib and fflate; the PDF.js part receives an already-opened document so it runs the same in a browser (PDF.js worker build) and in Node (pdfjs-dist/legacy/build/pdf.mjs, no canvas needed).

import { anonymize, pdfToMarkdown, estimateTokens, parseRanges, mergePdfs, splitPdf, pageCount, organizePdf, compressLossless, classifyError } from "@sirdaspdf/core";
import * as pdfjs from "pdfjs-dist/legacy/build/pdf.mjs";   // Node

const doc = await pdfjs.getDocument({ data: bytes, isEvalSupported: false, verbosity: 0 }).promise;
const markdown = await pdfToMarkdown(doc);      // layout-aware Markdown
await doc.destroy();

const { text, findings } = anonymize(markdown); // consistent placeholders
console.log(estimateTokens(text), findings.length);

Subpath imports keep bundles small: @sirdaspdf/core/<module> for any module (anonymize, formats, extract, classify, segment, forms, chunk, ranges…).

Exports

FunctionPurpose
pdfToMarkdown(doc, onProgress?)Full pipeline: extractLineslinesToMarkdown.
extractLines(doc, onProgress?) / linesToMarkdown(lines)The two halves, if you want to post-process lines.
anonymize(text){ text, findings: { type, value, label }[] }.
estimateTokens(text)~4 characters per token.
parseRanges("1-3, 5, 8-end", pageCount)0-based page groups; throws a user-facing error on bad input.
mergePdfs(buffers) · splitPdf(buffer, groups) · pageCount(buffer) · organizePdf(buffer, edits) · compressLossless(buffer)pdf-lib operations returning Uint8Array.
classifyError(err)"encrypted" | "corrupt" | "generic" · PdfErrorTurn pdf-lib / PDF.js failures into actionable causes.
convertToMarkdown(bytes, filename) · detectFormat · htmlToMarkdown · parseDelimitedDOCX, XLSX, PPTX, ODT/ODS/ODP, EPUB, HTML, CSV, EML, RTF, JSON → { format, markdown, parts, tables, warnings }.
classifyDocument(text) · extractFields(markdown, type)Document type with visible signals; fields with page and evidence.
chunkForAgents(markdown, maxTokens) · contentId(text)Chunks with stable id, pages, section. Use pdfToMarkdown(doc, _, { pageMarkers: true }).
locateText(lines, text, page?)Bounding box (0–1, top-left origin) of a citation across up to three lines.
segmentPages(pageTexts)Documents inside a batch PDF, with the reasons for each cut.
readFormFields(bytes) · findTextCheckboxes(text)AcroForm fields and written checkboxes.
buildRecords · toJsonl · datasetCard · DATASET_FORMATSTraining/RAG datasets and the Hugging Face card.
protectPdf · unlockPdf · lockStateAES-256 via an injected qpdf WebAssembly module.
deletePages · extractPages · rotatePages · addPageNumbers · addWatermarkPage tools.

ESM, TypeScript types included. Node ≥ 20 or any modern browser.