UNPKG

@anyparser/core

Version:

The `@anyparser/core` Typescript SDK enables developers to quickly extract structured data from a wide variety of file formats like PDFs, images, websites, audio, and videos.

1 lines 32.3 kB
{"version":3,"sources":["../src/index.ts","../src/version.ts","../src/config/hardcoded.ts","../src/utils/fetcher.ts","../src/form.ts","../src/validator/index.ts","../src/utils/nullable.ts","../src/utils/env.ts","../src/options.default.ts","../src/options.ts","../src/validator/option.ts","../src/validator/path.ts","../src/validator/crawler.ts","../src/utils/casing.ts","../src/utils/camel-case.ts","../src/parser.ts"],"sourcesContent":["/**\n * Anyparser main entry point\n * @module anyparser\n */\nimport { ANYPARSER_VERSION, version } from './version.ts'\nimport { OCR_LANGUAGES, OCR_PRESETS } from './config/hardcoded.ts'\nimport { Anyparser } from './parser.ts'\nimport type { OcrLanguageType, OcrPresetType, AnyparserOption, AnyparserImageReference, AnyparserResultBase, AnyparserCrawlDirectiveBase, AnyparserCrawlDirective, AnyparserUrl, AnyparserRobotsTxtDirective, AnyparserPdfPage, AnyparserPdfResult, AnyparserCrawlResult, AnyparserResult, Result } from './anyparser.d.ts'\n\nexport { version, ANYPARSER_VERSION, OCR_LANGUAGES, OCR_PRESETS, Anyparser }\nexport type { OcrLanguageType, OcrPresetType, AnyparserOption, AnyparserImageReference, AnyparserResultBase, AnyparserCrawlDirectiveBase, AnyparserCrawlDirective, AnyparserUrl, AnyparserRobotsTxtDirective, AnyparserPdfPage, AnyparserPdfResult, AnyparserCrawlResult, AnyparserResult, Result }\n","export const ANYPARSER_VERSION = '1.0.1'\nexport const version = ANYPARSER_VERSION\n","/**\n * Hardcoded configuration constants\n * @module config/hardcoded\n */\n\nexport const FALLBACK_API_URL = 'https://anyparserapi.com'\n\nexport const OCR_PRESETS = Object.freeze({\n DOCUMENT: 'document',\n HANDWRITING: 'handwriting',\n SCAN: 'scan',\n RECEIPT: 'receipt',\n MAGAZINE: 'magazine',\n INVOICE: 'invoice',\n BUSINESS_CARD: 'business-card',\n PASSPORT: 'passport',\n DRIVER_LICENSE: 'driver-license'\n} as const)\n\nexport const OCR_LANGUAGES = Object.freeze({\n AFRIKAANS: 'afr',\n AMHARIC: 'amh',\n ARABIC: 'ara',\n ASSAMESE: 'asm',\n AZERBAIJANI: 'aze',\n AZERBAIJANI_CYRILLIC: 'aze_cyrl',\n BELARUSIAN: 'bel',\n BENGALI: 'ben',\n TIBETAN: 'bod',\n BOSNIAN: 'bos',\n BRETON: 'bre',\n BULGARIAN: 'bul',\n CATALAN: 'cat',\n CEBUANO: 'ceb',\n CZECH: 'ces',\n SIMPLIFIED_CHINESE: 'chi_sim',\n SIMPLIFIED_CHINESE_VERTICAL: 'chi_sim_vert',\n TRADITIONAL_CHINESE: 'chi_tra',\n TRADITIONAL_CHINESE_VERTICAL: 'chi_tra_vert',\n CHEROKEE: 'chr',\n CORSICAN: 'cos',\n WELSH: 'cym',\n DANISH: 'dan',\n DANISH_FRAKTUR: 'dan_frak',\n GERMAN: 'deu',\n GERMAN_FRAKTUR: 'deu_frak',\n GERMAN_LATIN: 'deu_latf',\n DIVESH: 'div',\n DZONGKHA: 'dzo',\n GREEK: 'ell',\n ENGLISH: 'eng',\n MIDDLE_ENGLISH: 'enm',\n ESPERANTO: 'epo',\n EQUATORIAL_GUINEAN: 'equ',\n ESTONIAN: 'est',\n BASQUE: 'eus',\n FAROESE: 'fao',\n PERSIAN: 'fas',\n FILIPINO: 'fil',\n FINNISH: 'fin',\n FRENCH: 'fra',\n OLD_FRENCH: 'frm',\n FRISIAN: 'fry',\n SCOTTISH_GAELIC: 'gla',\n IRISH: 'gle',\n GALICIAN: 'glg',\n ANCIENT_GREEK: 'grc',\n GUJARATI: 'guj',\n HAITIAN_CREOLE: 'hat',\n HEBREW: 'heb',\n HINDI: 'hin',\n CROATIAN: 'hrv',\n HUNGARIAN: 'hun',\n ARMENIAN: 'hye',\n IGBO: 'iku',\n INDONESIAN: 'ind',\n ICELANDIC: 'isl',\n ITALIAN: 'ita',\n OLD_ITALIAN: 'ita_old',\n JAVANESE: 'jav',\n JAPANESE: 'jpn',\n JAPANESE_VERTICAL: 'jpn_vert',\n KANNADA: 'kan',\n GEORGIAN: 'kat',\n OLD_GEORGIAN: 'kat_old',\n KAZAKH: 'kaz',\n KHMER: 'khm',\n KIRGHIZ: 'kir',\n KURDISH: 'kmr',\n KOREAN: 'kor',\n KOREAN_VERTICAL: 'kor_vert',\n LAO: 'lao',\n LATIN: 'lat',\n LATVIAN: 'lav',\n LITHUANIAN: 'lit',\n LUXEMBOURGISH: 'ltz',\n MALAYALAM: 'mal',\n MARATHI: 'mar',\n MACEDONIAN: 'mkd',\n MALTESE: 'mlt',\n MONGOLIAN: 'mon',\n MAORI: 'mri',\n MALAY: 'msa',\n MYANMAR: 'mya',\n NEPALI: 'nep',\n DUTCH: 'nld',\n NORWEGIAN: 'nor',\n OCCITAN: 'oci',\n ODISHA: 'ori',\n OSD: 'osd',\n PUNJABI: 'pan',\n POLISH: 'pol',\n PORTUGUESE: 'por',\n PASHTO: 'pus',\n QUECHUA: 'que',\n ROMANIAN: 'ron',\n RUSSIAN: 'rus',\n SANSKRIT: 'san',\n SINHALA: 'sin',\n SLOVAK: 'slk',\n SLOVAK_FRAKTUR: 'slk_frak',\n SLOVENIAN: 'slv',\n SINDHI: 'snd',\n SPANISH: 'spa',\n OLD_SPANISH: 'spa_old',\n ALBANIAN: 'sqi',\n SERBIAN: 'srp',\n SERBIAN_LATIN: 'srp_latn',\n SUNDIANESE: 'sun',\n SWAHILI: 'swa',\n SWEDISH: 'swe',\n SYRIAC: 'syr',\n TAMIL: 'tam',\n TATAR: 'tat',\n TELUGU: 'tel',\n TAJIK: 'tgk',\n TAGALOG: 'tgl',\n THAI: 'tha',\n TIGRINYA: 'tir',\n TONGAN: 'ton',\n TURKISH: 'tur',\n UIGHUR: 'uig',\n UKRAINIAN: 'ukr',\n URDU: 'urd',\n UZBEK: 'uzb',\n UZBEK_CYRILLIC: 'uzb_cyrl',\n VIETNAMESE: 'vie',\n YIDDISH: 'yid',\n YORUBA: 'yor'\n} as const)\n\nexport type OcrPresetType = (typeof OCR_PRESETS)[keyof typeof OCR_PRESETS]\nexport type OcrLanguageType = (typeof OCR_LANGUAGES)[keyof typeof OCR_LANGUAGES]\n","export class WrappedError extends Error {\n override cause: Error\n statusCode: number\n\n constructor (message: string, cause: Error, statusCode: number) {\n super(message)\n this.name = 'WrappedError'\n this.cause = cause\n this.statusCode = statusCode\n }\n}\n\nexport const wrappedFetch = async (input: string | URL | Request, options?: RequestInit) => {\n const response = await fetch(input, options)\n\n if (!response.ok) {\n const { status, statusText } = response\n const text = await response.text()\n\n throw new WrappedError(\n `HTTP ${status} ${statusText}: ${input}`,\n new Error(text),\n status\n )\n }\n\n return response\n}\n","/* eslint-disable complexity */\n\n/**\n * Form data builder module for creating multipart form data for API requests.\n * @module form\n */\n\nimport type { AnyparserParsedOption } from './anyparser.d.ts'\n\n/**\n * Builds multipart form data from parsed options.\n * @param parsed - Validated parser options\n * @returns Form data for API request\n */\nexport function buildForm (parsed: AnyparserParsedOption): FormData {\n const formData = new FormData()\n\n // Add regular form fields\n formData.append('format', parsed.format)\n formData.append('model', parsed.model)\n\n // Only add image and table fields if not using OCR model or crawler model\n if (parsed.model !== 'ocr' && parsed.model !== 'crawler') {\n if (parsed.image !== undefined) {\n formData.append('image', String(parsed.image))\n }\n\n if (parsed.table !== undefined) {\n formData.append('table', String(parsed.table))\n }\n }\n\n // Add OCR-specific fields\n if (parsed.model === 'ocr') {\n if (parsed.ocrLanguage?.length) {\n formData.append('ocrLanguage', parsed.ocrLanguage.join(','))\n }\n\n if (parsed.ocrPreset) {\n formData.append('ocrPreset', parsed.ocrPreset)\n }\n }\n\n // Add crawler-specific fields\n if (parsed.model === 'crawler') {\n formData.append('url', parsed.url ?? '')\n\n if (parsed.maxDepth !== undefined) {\n formData.append('maxDepth', String(parsed.maxDepth))\n }\n\n if (parsed.maxExecutions !== undefined) {\n formData.append('maxExecutions', String(parsed.maxExecutions))\n }\n\n if (parsed.strategy) {\n formData.append('strategy', parsed.strategy)\n }\n\n if (parsed.traversalScope) {\n formData.append('traversalScope', parsed.traversalScope)\n }\n } else {\n // Add files to the form for non-crawler models\n if (parsed.files) {\n for (const file of parsed.files) {\n formData.append('files', file.contents, file.fileName)\n }\n }\n }\n\n return formData\n}\n","/**\n * Option validation and parsing module\n * @module validator\n */\nimport * as fsapi from 'node:fs'\nimport { basename } from 'node:path'\nimport * as fs from 'node:fs/promises'\nimport type { AnyparserOption, AnyparserParsedOption } from '../anyparser.d.ts'\nimport { buildOptions } from '../options.ts'\nimport { validateOption } from './option.ts'\nimport { validatePath } from './path.ts'\nimport type { ValidPathValidationResult } from './validation.d.ts'\nimport { getURLToCrawl } from './crawler.ts'\n\n/**\n * Check if a file is accessible and not locked\n * @param filePath - Path to the file to check\n * @returns Promise that resolves when file is accessible, rejects if file is locked or not found\n */\nasync function checkFileAccess (filePath: string): Promise<void> {\n try {\n await fs.access(filePath)\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n throw new Error(`File ${filePath} was not found or was removed`)\n }\n\n throw error\n }\n\n try {\n // Try to open file for reading to check if it's locked\n const fileHandle = await fs.open(filePath, 'r')\n await fileHandle.close()\n } catch (error) {\n if (error instanceof Error && 'code' in error && (error.code === 'EBUSY' || error.code === 'ELOCK')) {\n throw new Error(`File ${filePath} is locked by another process`)\n }\n\n throw error\n }\n}\n\n/**\n * Validates options and processes input files\n * @param filePaths - Files to process\n * @param options - Parser options\n * @returns Processed options and files\n */\nexport async function validateAndParse (\n filePaths: string | string[],\n options?: AnyparserOption\n): Promise<AnyparserParsedOption> {\n const parsed = buildOptions(options)\n validateOption(parsed)\n\n if (!['json', 'markdown', 'html'].includes(parsed.format)) {\n throw new Error(`Unsupported format: ${parsed.format}`)\n }\n\n // Determine if we're in crawler mode\n const isCrawler = options?.model === 'crawler'\n\n // Validate URL for crawler mode, otherwise validate file paths\n const result = isCrawler ?\n { valid: true, files: [getURLToCrawl(filePaths)] } as ValidPathValidationResult :\n await validatePath(filePaths)\n\n if (result.valid === false) {\n throw result.error\n }\n\n const parsedOption: AnyparserParsedOption = {\n apiUrl: parsed.apiUrl,\n apiKey: parsed.apiKey,\n format: parsed.format,\n model: parsed.model,\n image: parsed.image,\n table: parsed.table,\n ocrLanguage: parsed.ocrLanguage,\n ocrPreset: parsed.ocrPreset,\n url: parsed.url,\n maxDepth: parsed.maxDepth,\n maxExecutions: parsed.maxExecutions,\n strategy: parsed.strategy,\n traversalScope: parsed.traversalScope,\n encoding: parsed.encoding\n }\n\n // Handle crawler mode\n if (isCrawler) {\n parsedOption.url = result.files[0]\n } else {\n // Process files for non-crawler mode\n const processed = []\n\n for (const filePath of result.files) {\n await checkFileAccess(filePath)\n\n const fileStream = fsapi.createReadStream(filePath)\n const chunks = []\n\n for await (const chunk of fileStream) {\n chunks.push(chunk)\n }\n\n const buffer = Buffer.concat(chunks)\n const contents = new File([buffer], basename(filePath), {\n type: 'application/octet-stream'\n })\n\n processed.push({\n fileName: basename(filePath),\n contents\n })\n }\n\n parsedOption.files = processed\n }\n\n return parsedOption\n}\n","export type Nullable<T> = T | null\nexport type Optional<T> = T | undefined\nexport type Nullish<T> = Nullable<T> | Optional<T>\n\nconst isNullOrUndefined = <T>(suspect: Nullish<T>): suspect is null | undefined => {\n if (typeof suspect === 'undefined' || suspect === null) {\n return true\n }\n\n if (typeof suspect === 'string') {\n return suspect.trim() === ''\n }\n\n return false\n}\n\nconst isValidObject = (suspect: unknown): suspect is object => {\n return typeof suspect === 'object' && suspect !== undefined && suspect !== null\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nconst isEmptyObject = (suspect: unknown): suspect is {} => {\n return isValidObject(suspect) && Object.keys(suspect).length === 0\n}\n\nconst isInvalidOrEmptyArray = <T>(suspect: Nullish<Array<T>>): suspect is null | undefined | [] => {\n if (isNullOrUndefined(suspect)) {\n return true\n }\n\n if (!Array.isArray(suspect)) {\n throw new Error('isInvalidOrEmptyArray expects an array')\n }\n\n return suspect.length === 0\n}\n\nconst isValidArrayWithMembers = <T>(suspect: Nullish<Array<T>>): suspect is Array<T> => !isInvalidOrEmptyArray(suspect)\n\nconst or = <T>(value: Nullish<T>, or: T): T => {\n if (isNullOrUndefined(value)) {\n return or\n }\n\n return value\n}\n\nexport {\n isInvalidOrEmptyArray,\n isNullOrUndefined,\n isValidArrayWithMembers,\n isValidObject,\n isEmptyObject,\n or\n}\n","import { isNullOrUndefined } from './nullable.ts'\n\nconst env = (key: string, fallback = '') => {\n const value = process.env[key]\n\n if (!isNullOrUndefined(value)) {\n return value\n }\n\n if (!isNullOrUndefined(fallback)) {\n return fallback\n }\n\n return ''\n}\n\nconst envOr = (key: string, fallback = '') => {\n const value = process.env[key] as string\n\n if (isNullOrUndefined(value)) {\n return fallback\n }\n\n return ''\n}\n\nexport { env, envOr }\n","/**\n * Configuration module for Anyparser default options\n * @module options.default\n */\n\nimport { FALLBACK_API_URL } from '@/config/hardcoded.ts'\nimport { env } from '@src/utils/env.ts'\nimport type { AnyparserOption } from '@anyparser/core'\n\n/**\n * Retrieves and validates the API URL from environment or fallback\n * @returns {URL} Valid API URL instance\n */\nexport const getApiUrl = (): URL => {\n const value = env('ANYPARSER_API_URL', FALLBACK_API_URL)\n\n try {\n return new URL(value)\n } catch {\n console.error('Invalid API URL %s', value)\n }\n\n console.debug('Defaulting to %s', FALLBACK_API_URL)\n\n return new URL(FALLBACK_API_URL)\n}\n\n/**\n * Default configuration options for Anyparser\n * @type {Option}\n */\nexport const defaultOptions: AnyparserOption = {\n apiUrl: getApiUrl(),\n apiKey: env('ANYPARSER_API_KEY'),\n format: 'json',\n model: 'text',\n image: true,\n table: true\n}\n","/**\n * Options module for Anyparser configuration and parsing.\n * @module options\n */\n\nimport type { AnyparserOption, AnyparserParsedOption } from './anyparser.d.ts'\nimport { defaultOptions } from './options.default.ts'\n\n/**\n * Validate API key format and presence\n * @param apiKey - API key to validate\n * @throws {Error} If API key is invalid or missing\n */\nexport function validateApiKey (apiKey: string | undefined): void {\n if (!apiKey) {\n throw new Error('API key is required')\n }\n\n if (typeof apiKey !== 'string' || apiKey.trim().length === 0) {\n throw new Error('API key must be a non-empty string')\n }\n}\n\n/**\n * Build final options by merging defaults with provided options.\n * @param options - User-provided options to override defaults\n * @returns Complete options with all required fields\n * @throws {Error} If required options are missing or invalid\n */\nexport function buildOptions (options?: AnyparserOption): AnyparserParsedOption {\n const mergedOptions = { ...defaultOptions, ...options }\n\n validateApiKey(mergedOptions.apiKey)\n\n if (!mergedOptions.apiUrl) {\n throw new Error('API URL is required')\n }\n\n const parsedOptions: AnyparserParsedOption = {\n apiUrl: mergedOptions.apiUrl,\n apiKey: mergedOptions.apiKey as string,\n format: mergedOptions.format || 'json',\n model: mergedOptions.model || 'text',\n encoding: mergedOptions.encoding || 'utf-8',\n image: mergedOptions.image,\n table: mergedOptions.table,\n ocrLanguage: mergedOptions.ocrLanguage,\n ocrPreset: mergedOptions.ocrPreset,\n url: mergedOptions.url,\n maxDepth: mergedOptions.maxDepth,\n maxExecutions: mergedOptions.maxExecutions,\n strategy: mergedOptions.strategy,\n traversalScope: mergedOptions.traversalScope\n }\n\n return parsedOptions\n}\n","/**\n * Validation module for options\n * @module validation\n */\n\nimport { isNullOrUndefined } from '@src/utils/nullable.ts'\nimport type { AnyparserOption } from '@anyparser/core'\nimport { OCR_LANGUAGES, OCR_PRESETS } from '../config/hardcoded.ts'\n\n/**\n * Validates parsing options configuration\n * @param {Option} parsed - Options to validate\n * @throws {Error} If validation fails\n */\nexport const validateOption = (parsed: AnyparserOption) => {\n if (isNullOrUndefined(parsed.apiUrl)) {\n throw new Error('API URL is required')\n }\n\n if (!isNullOrUndefined(parsed.ocrLanguage)) {\n parsed.ocrLanguage.forEach((language: string) => {\n if (!Object.values(OCR_LANGUAGES as Record<string, string>).includes(language)) {\n throw new Error('Invalid OCR language')\n }\n })\n }\n\n if (!isNullOrUndefined(parsed.ocrPreset)) {\n if (!Object.values(OCR_PRESETS as Record<string, string>).includes(parsed.ocrPreset)) {\n throw new Error('Invalid OCR preset')\n }\n }\n}\n","/**\n * Validation module for file paths\n * @module validation\n */\n\nimport { access } from 'node:fs/promises'\nimport type { PathValidationResult } from './validation.d.ts'\n\n/**\n * Validates file paths exist and are accessible\n * @param {string|string[]} filePaths - Single path or array of paths\n * @returns {Promise<PathValidationResult>} Validation result\n */\nexport const validatePath = async (filePaths: string | string[]): Promise<PathValidationResult> => {\n // Add input validation\n if (!filePaths) {\n return {\n valid: false,\n error: new Error('No files provided')\n }\n }\n\n const files = Array.isArray(filePaths) ? filePaths : [filePaths]\n\n if (files.length === 0) {\n return {\n valid: false,\n error: new Error('No files provided')\n }\n }\n\n for (const filePath of files) {\n try {\n await access(filePath)\n } catch (error) {\n return {\n valid: false,\n error: error as Error\n }\n }\n }\n\n return {\n valid: true,\n files\n }\n}\n","import { isNullOrUndefined } from '@src/utils/nullable.ts'\n\nexport const getURLToCrawl = (filePaths: string | string[]) => {\n if (Array.isArray(filePaths)) {\n const filePath = filePaths.find(x => !isNullOrUndefined(x))\n\n if (!isNullOrUndefined(filePath)) {\n return new URL(filePath).toString()\n }\n }\n\n return new URL(filePaths).toString()\n}\n","export const toUnderscore = (x = '') => x.trim().split(/\\.?(?=[A-Z])/).join('_').toLowerCase()\n\nexport const hyphenToCamel = (x: string) => x.replace(/-+(.)/g, (_, c) => c.toUpperCase())\n\nexport const underscoreToCamel = (x: string) => x.replace(/_+(.)/g, (_, c) => c.toUpperCase())\n\nexport const camelToTitle = (c: string) => c\n// Insert space before capital letters, but not if they're part of an acronym\n .replace(/([^A-Z])([A-Z])/g, '$1$2')\n// Capitalize first letter\n .replace(/^./, match => match.toUpperCase())\n// Remove any extra spaces\n .replace(/\\s+/g, '')\n","import { underscoreToCamel } from './casing.ts'\nimport { isValidObject } from './nullable.ts'\n\nexport const transformToCamel = <T>(item: unknown): T => {\n if (item instanceof Date || item instanceof RegExp || item instanceof URL) {\n return item as T\n }\n\n // If the item is a Function, return it as-is\n if (typeof item === 'function') {\n return item as T\n }\n\n // If the item is null or undefined, return it as-is\n if (item === null || item === undefined) {\n return item as T\n }\n\n // If the item is an array, recursively transform each element\n if (Array.isArray(item)) {\n return item.map(el => transformToCamel(el)) as unknown as T\n }\n\n // If the item is a Map or Set, do not modify its structure\n if (item instanceof Map) {\n const transformedMap = new Map()\n item.forEach((value, key) => {\n transformedMap.set(transformToCamel(key), transformToCamel(value))\n })\n\n return transformedMap as unknown as T\n }\n\n if (item instanceof Set) {\n const transformedSet = new Set()\n item.forEach((value) => {\n transformedSet.add(transformToCamel(value))\n })\n\n return transformedSet as unknown as T\n }\n\n // If the item is a plain object, recursively transform its keys to camelCase\n if (isValidObject(item)) {\n return Object.keys(item).reduce((acc: any, key: string) => { // eslint-disable-line @typescript-eslint/no-explicit-any\n const camelKey = underscoreToCamel(key)\n acc[camelKey] = transformToCamel((item as Record<string, unknown>)[key])\n\n return acc\n }, {} as T)\n }\n\n // If it's a primitive type (string, number, boolean), return it as-is\n return item as T\n}\n","import { wrappedFetch } from '@src/utils/fetcher.ts'\nimport { ANYPARSER_VERSION } from '@anyparser/core'\nimport { buildForm } from './form.ts'\nimport { validateAndParse } from './validator/index.ts'\nimport { transformToCamel } from '@src/utils/camel-case.ts'\n\nimport type { AnyparserOption, Result } from '@anyparser/core'\n\n/**\n * Main class for parsing items using the Anyparser API.\n */\nexport class Anyparser {\n public options?: AnyparserOption\n\n /**\n * Initialize the parser with optional configuration.\n * @param options - Configuration options for the parser\n */\n constructor (options?: AnyparserOption) {\n this.options = options\n }\n\n /**\n * Parse files using the Anyparser API.\n * @param filePathsOrUrl - A single file path or list of file paths to parse, or a start URL for crawling\n * @returns List of parsed file results if format is JSON, or raw text content if format is text/markdown\n * @throws Error if the API request fails\n */\n async parse (filePathsOrUrl: string | string[]): Promise<Result> {\n const parsed = await validateAndParse(filePathsOrUrl, this.options)\n const { apiUrl, apiKey } = parsed\n\n const formData = buildForm(parsed)\n\n const fetchOptions = {\n method: 'POST',\n body: formData,\n headers: {\n ...(apiKey ?\n {\n Authorization: `Bearer ${apiKey}`,\n 'User-Agent': `@anyparser/core@${ANYPARSER_VERSION}` // eslint-disable-line @typescript-eslint/naming-convention\n } :\n {})\n }\n }\n\n const url = new URL('/parse/v1', apiUrl)\n\n const response = await wrappedFetch(url, fetchOptions)\n\n switch (parsed.format) {\n case 'json':\n return transformToCamel<Result>(await response.json())\n case 'markdown':\n case 'html':\n return await response.text()\n default:\n throw new Error(`Unsupported format: ${parsed.format}`)\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,oBAAoB;AAC1B,IAAM,UAAU;;;ACIhB,IAAM,mBAAmB;AAEzB,IAAM,cAAc,OAAO,OAAO;AAAA,EACvC,UAAU;AAAA,EACV,aAAa;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,eAAe;AAAA,EACf,UAAU;AAAA,EACV,gBAAgB;AAClB,CAAU;AAEH,IAAM,gBAAgB,OAAO,OAAO;AAAA,EACzC,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,aAAa;AAAA,EACb,sBAAsB;AAAA,EACtB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,oBAAoB;AAAA,EACpB,6BAA6B;AAAA,EAC7B,qBAAqB;AAAA,EACrB,8BAA8B;AAAA,EAC9B,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,UAAU;AAAA,EACV,eAAe;AAAA,EACf,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,SAAS;AAAA,EACT,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,WAAW;AAAA,EACX,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,aAAa;AAAA,EACb,UAAU;AAAA,EACV,SAAS;AAAA,EACT,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,MAAM;AAAA,EACN,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AACV,CAAU;;;ACrJH,IAAM,eAAN,cAA2B,MAAM;AAAA,EAItC,YAAa,SAAiB,OAAc,YAAoB;AAC9D,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,aAAa;AAAA,EACpB;AACF;AAEO,IAAM,eAAe,CAAO,OAA+B,YAA0B;AAC1F,QAAM,WAAW,MAAM,MAAM,OAAO,OAAO;AAE3C,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,EAAE,QAAQ,WAAW,IAAI;AAC/B,UAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,UAAM,IAAI;AAAA,MACR,QAAQ,MAAM,IAAI,UAAU,KAAK,KAAK;AAAA,MACtC,IAAI,MAAM,IAAI;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACbO,SAAS,UAAW,QAAyC;AAdpE;AAeE,QAAM,WAAW,IAAI,SAAS;AAG9B,WAAS,OAAO,UAAU,OAAO,MAAM;AACvC,WAAS,OAAO,SAAS,OAAO,KAAK;AAGrC,MAAI,OAAO,UAAU,SAAS,OAAO,UAAU,WAAW;AACxD,QAAI,OAAO,UAAU,QAAW;AAC9B,eAAS,OAAO,SAAS,OAAO,OAAO,KAAK,CAAC;AAAA,IAC/C;AAEA,QAAI,OAAO,UAAU,QAAW;AAC9B,eAAS,OAAO,SAAS,OAAO,OAAO,KAAK,CAAC;AAAA,IAC/C;AAAA,EACF;AAGA,MAAI,OAAO,UAAU,OAAO;AAC1B,SAAI,YAAO,gBAAP,mBAAoB,QAAQ;AAC9B,eAAS,OAAO,eAAe,OAAO,YAAY,KAAK,GAAG,CAAC;AAAA,IAC7D;AAEA,QAAI,OAAO,WAAW;AACpB,eAAS,OAAO,aAAa,OAAO,SAAS;AAAA,IAC/C;AAAA,EACF;AAGA,MAAI,OAAO,UAAU,WAAW;AAC9B,aAAS,OAAO,QAAO,YAAO,QAAP,YAAc,EAAE;AAEvC,QAAI,OAAO,aAAa,QAAW;AACjC,eAAS,OAAO,YAAY,OAAO,OAAO,QAAQ,CAAC;AAAA,IACrD;AAEA,QAAI,OAAO,kBAAkB,QAAW;AACtC,eAAS,OAAO,iBAAiB,OAAO,OAAO,aAAa,CAAC;AAAA,IAC/D;AAEA,QAAI,OAAO,UAAU;AACnB,eAAS,OAAO,YAAY,OAAO,QAAQ;AAAA,IAC7C;AAEA,QAAI,OAAO,gBAAgB;AACzB,eAAS,OAAO,kBAAkB,OAAO,cAAc;AAAA,IACzD;AAAA,EACF,OAAO;AAEL,QAAI,OAAO,OAAO;AAChB,iBAAW,QAAQ,OAAO,OAAO;AAC/B,iBAAS,OAAO,SAAS,KAAK,UAAU,KAAK,QAAQ;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACpEA,YAAuB;AACvB,uBAAyB;AACzB,SAAoB;;;ACFpB,IAAM,oBAAoB,CAAI,YAAqD;AACjF,MAAI,OAAO,YAAY,eAAe,YAAY,MAAM;AACtD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO,QAAQ,KAAK,MAAM;AAAA,EAC5B;AAEA,SAAO;AACT;AAEA,IAAM,gBAAgB,CAAC,YAAwC;AAC7D,SAAO,OAAO,YAAY,YAAY,YAAY,UAAa,YAAY;AAC7E;;;AChBA,IAAM,MAAM,CAAC,KAAa,WAAW,OAAO;AAC1C,QAAM,QAAQ,QAAQ,IAAI,GAAG;AAE7B,MAAI,CAAC,kBAAkB,KAAK,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,kBAAkB,QAAQ,GAAG;AAChC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;ACDO,IAAM,YAAY,MAAW;AAClC,QAAM,QAAQ,IAAI,qBAAqB,gBAAgB;AAEvD,MAAI;AACF,WAAO,IAAI,IAAI,KAAK;AAAA,EACtB,SAAQ;AACN,YAAQ,MAAM,sBAAsB,KAAK;AAAA,EAC3C;AAEA,UAAQ,MAAM,oBAAoB,gBAAgB;AAElD,SAAO,IAAI,IAAI,gBAAgB;AACjC;AAMO,IAAM,iBAAkC;AAAA,EAC7C,QAAQ,UAAU;AAAA,EAClB,QAAQ,IAAI,mBAAmB;AAAA,EAC/B,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT;;;ACzBO,SAAS,eAAgB,QAAkC;AAChE,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAEA,MAAI,OAAO,WAAW,YAAY,OAAO,KAAK,EAAE,WAAW,GAAG;AAC5D,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AACF;AAQO,SAAS,aAAc,SAAkD;AAC9E,QAAM,gBAAgB,kCAAK,iBAAmB;AAE9C,iBAAe,cAAc,MAAM;AAEnC,MAAI,CAAC,cAAc,QAAQ;AACzB,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAEA,QAAM,gBAAuC;AAAA,IAC3C,QAAQ,cAAc;AAAA,IACtB,QAAQ,cAAc;AAAA,IACtB,QAAQ,cAAc,UAAU;AAAA,IAChC,OAAO,cAAc,SAAS;AAAA,IAC9B,UAAU,cAAc,YAAY;AAAA,IACpC,OAAO,cAAc;AAAA,IACrB,OAAO,cAAc;AAAA,IACrB,aAAa,cAAc;AAAA,IAC3B,WAAW,cAAc;AAAA,IACzB,KAAK,cAAc;AAAA,IACnB,UAAU,cAAc;AAAA,IACxB,eAAe,cAAc;AAAA,IAC7B,UAAU,cAAc;AAAA,IACxB,gBAAgB,cAAc;AAAA,EAChC;AAEA,SAAO;AACT;;;AC1CO,IAAM,iBAAiB,CAAC,WAA4B;AACzD,MAAI,kBAAkB,OAAO,MAAM,GAAG;AACpC,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAEA,MAAI,CAAC,kBAAkB,OAAO,WAAW,GAAG;AAC1C,WAAO,YAAY,QAAQ,CAAC,aAAqB;AAC/C,UAAI,CAAC,OAAO,OAAO,aAAuC,EAAE,SAAS,QAAQ,GAAG;AAC9E,cAAM,IAAI,MAAM,sBAAsB;AAAA,MACxC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,kBAAkB,OAAO,SAAS,GAAG;AACxC,QAAI,CAAC,OAAO,OAAO,WAAqC,EAAE,SAAS,OAAO,SAAS,GAAG;AACpF,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAAA,EACF;AACF;;;AC3BA,sBAAuB;AAQhB,IAAM,eAAe,CAAO,cAAgE;AAEjG,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO,IAAI,MAAM,mBAAmB;AAAA,IACtC;AAAA,EACF;AAEA,QAAM,QAAQ,MAAM,QAAQ,SAAS,IAAI,YAAY,CAAC,SAAS;AAE/D,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO,IAAI,MAAM,mBAAmB;AAAA,IACtC;AAAA,EACF;AAEA,aAAW,YAAY,OAAO;AAC5B,QAAI;AACF,gBAAM,wBAAO,QAAQ;AAAA,IACvB,SAAS,OAAO;AACd,aAAO;AAAA,QACL,OAAO;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO;AAAA,IACP;AAAA,EACF;AACF;;;AC5CO,IAAM,gBAAgB,CAAC,cAAiC;AAC7D,MAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,UAAM,WAAW,UAAU,KAAK,OAAK,CAAC,kBAAkB,CAAC,CAAC;AAE1D,QAAI,CAAC,kBAAkB,QAAQ,GAAG;AAChC,aAAO,IAAI,IAAI,QAAQ,EAAE,SAAS;AAAA,IACpC;AAAA,EACF;AAEA,SAAO,IAAI,IAAI,SAAS,EAAE,SAAS;AACrC;;;APOA,SAAe,gBAAiB,UAAiC;AAAA;AAC/D,QAAI;AACF,YAAS,UAAO,QAAQ;AAAA,IAC1B,SAAS,OAAO;AACd,UAAI,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS,UAAU;AACxE,cAAM,IAAI,MAAM,QAAQ,QAAQ,+BAA+B;AAAA,MACjE;AAEA,YAAM;AAAA,IACR;AAEA,QAAI;AAEF,YAAM,aAAa,MAAS,QAAK,UAAU,GAAG;AAC9C,YAAM,WAAW,MAAM;AAAA,IACzB,SAAS,OAAO;AACd,UAAI,iBAAiB,SAAS,UAAU,UAAU,MAAM,SAAS,WAAW,MAAM,SAAS,UAAU;AACnG,cAAM,IAAI,MAAM,QAAQ,QAAQ,+BAA+B;AAAA,MACjE;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAQA,SAAsB,iBACpB,WACA,SACgC;AAAA;AAChC,UAAM,SAAS,aAAa,OAAO;AACnC,mBAAe,MAAM;AAErB,QAAI,CAAC,CAAC,QAAQ,YAAY,MAAM,EAAE,SAAS,OAAO,MAAM,GAAG;AACzD,YAAM,IAAI,MAAM,uBAAuB,OAAO,MAAM,EAAE;AAAA,IACxD;AAGA,UAAM,aAAY,mCAAS,WAAU;AAGrC,UAAM,SAAS,YACX,EAAE,OAAO,MAAM,OAAO,CAAC,cAAc,SAAS,CAAC,EAAE,IACnD,MAAM,aAAa,SAAS;AAE9B,QAAI,OAAO,UAAU,OAAO;AAC1B,YAAM,OAAO;AAAA,IACf;AAEA,UAAM,eAAsC;AAAA,MAC1C,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,KAAK,OAAO;AAAA,MACZ,UAAU,OAAO;AAAA,MACjB,eAAe,OAAO;AAAA,MACtB,UAAU,OAAO;AAAA,MACjB,gBAAgB,OAAO;AAAA,MACvB,UAAU,OAAO;AAAA,IACnB;AAGA,QAAI,WAAW;AACb,mBAAa,MAAM,OAAO,MAAM,CAAC;AAAA,IACnC,OAAO;AAEL,YAAM,YAAY,CAAC;AAEnB,iBAAW,YAAY,OAAO,OAAO;AACnC,cAAM,gBAAgB,QAAQ;AAE9B,cAAM,aAAmB,uBAAiB,QAAQ;AAClD,cAAM,SAAS,CAAC;AAEhB;AAAA,qCAA0B,aAA1B,0EAAsC;AAA3B,kBAAM,QAAjB;AACE,mBAAO,KAAK,KAAK;AAAA,UACnB;AAAA,iBAFA,MAtGN;AAsGM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,cAAM,SAAS,OAAO,OAAO,MAAM;AACnC,cAAM,WAAW,IAAI,KAAK,CAAC,MAAM,OAAG,2BAAS,QAAQ,GAAG;AAAA,UACtD,MAAM;AAAA,QACR,CAAC;AAED,kBAAU,KAAK;AAAA,UACb,cAAU,2BAAS,QAAQ;AAAA,UAC3B;AAAA,QACF,CAAC;AAAA,MACH;AAEA,mBAAa,QAAQ;AAAA,IACvB;AAEA,WAAO;AAAA,EACT;AAAA;;;AQrHO,IAAM,oBAAoB,CAAC,MAAc,EAAE,QAAQ,UAAU,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC;;;ACDtF,IAAM,mBAAmB,CAAI,SAAqB;AACvD,MAAI,gBAAgB,QAAQ,gBAAgB,UAAU,gBAAgB,KAAK;AACzE,WAAO;AAAA,EACT;AAGA,MAAI,OAAO,SAAS,YAAY;AAC9B,WAAO;AAAA,EACT;AAGA,MAAI,SAAS,QAAQ,SAAS,QAAW;AACvC,WAAO;AAAA,EACT;AAGA,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAO,KAAK,IAAI,QAAM,iBAAiB,EAAE,CAAC;AAAA,EAC5C;AAGA,MAAI,gBAAgB,KAAK;AACvB,UAAM,iBAAiB,oBAAI,IAAI;AAC/B,SAAK,QAAQ,CAAC,OAAO,QAAQ;AAC3B,qBAAe,IAAI,iBAAiB,GAAG,GAAG,iBAAiB,KAAK,CAAC;AAAA,IACnE,CAAC;AAED,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,KAAK;AACvB,UAAM,iBAAiB,oBAAI,IAAI;AAC/B,SAAK,QAAQ,CAAC,UAAU;AACtB,qBAAe,IAAI,iBAAiB,KAAK,CAAC;AAAA,IAC5C,CAAC;AAED,WAAO;AAAA,EACT;AAGA,MAAI,cAAc,IAAI,GAAG;AACvB,WAAO,OAAO,KAAK,IAAI,EAAE,OAAO,CAAC,KAAU,QAAgB;AACzD,YAAM,WAAW,kBAAkB,GAAG;AACtC,UAAI,QAAQ,IAAI,iBAAkB,KAAiC,GAAG,CAAC;AAEvE,aAAO;AAAA,IACT,GAAG,CAAC,CAAM;AAAA,EACZ;AAGA,SAAO;AACT;;;AC3CO,IAAM,YAAN,MAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOrB,YAAa,SAA2B;AACtC,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQM,MAAO,gBAAoD;AAAA;AAC/D,YAAM,SAAS,MAAM,iBAAiB,gBAAgB,KAAK,OAAO;AAClE,YAAM,EAAE,QAAQ,OAAO,IAAI;AAE3B,YAAM,WAAW,UAAU,MAAM;AAEjC,YAAM,eAAe;AAAA,QACnB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,SAAS,mBACH,SACA;AAAA,UACE,eAAe,UAAU,MAAM;AAAA,UAC/B,cAAc,mBAAmB,iBAAiB;AAAA;AAAA,QACpD,IACA,CAAC;AAAA,MAET;AAEA,YAAM,MAAM,IAAI,IAAI,aAAa,MAAM;AAEvC,YAAM,WAAW,MAAM,aAAa,KAAK,YAAY;AAErD,cAAQ,OAAO,QAAQ;AAAA,QACrB,KAAK;AACH,iBAAO,iBAAyB,MAAM,SAAS,KAAK,CAAC;AAAA,QACvD,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,MAAM,SAAS,KAAK;AAAA,QAC7B;AACE,gBAAM,IAAI,MAAM,uBAAuB,OAAO,MAAM,EAAE;AAAA,MAC1D;AAAA,IACF;AAAA;AACF;","names":[]}