From 31d10230f73d10d038cf7ab9ab44f2538be8f812 Mon Sep 17 00:00:00 2001 From: Muskan Raghav Date: Wed, 30 Jul 2025 01:40:51 +0530 Subject: [PATCH 1/5] feat(exporters): implement extensible exporter system - Add plugin-based exporter architecture - Implement multiple export formats (JSON, CSV, XML, UBL, QuickBooks, Xero) - Add base exporter with validation - Create exporter factory with registration system - Add comprehensive tests - Update documentation with usage examples --- README.md | 74 ++++++++++++++++- ai-invoice-extractor/.env | 76 +++++++++++++++--- ai-invoice-extractor/exporters/__init__.py | 18 +++++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 624 bytes .../__pycache__/base_exporter.cpython-312.pyc | Bin 0 -> 1772 bytes .../__pycache__/csv_exporter.cpython-312.pyc | Bin 0 -> 1180 bytes .../exporter_factory.cpython-312.pyc | Bin 0 -> 1681 bytes .../facturx_exporter.cpython-312.pyc | Bin 0 -> 2828 bytes .../__pycache__/json_exporter.cpython-312.pyc | Bin 0 -> 997 bytes .../quickbooks_exporter.cpython-312.pyc | Bin 0 -> 1362 bytes .../__pycache__/schemas.cpython-312.pyc | Bin 0 -> 2914 bytes .../__pycache__/ubl_exporter.cpython-312.pyc | Bin 0 -> 1643 bytes .../__pycache__/xero_exporter.cpython-312.pyc | Bin 0 -> 1438 bytes .../__pycache__/xml_exporter.cpython-312.pyc | Bin 0 -> 1287 bytes .../exporters/base_exporter.py | 21 +++++ .../exporters/csv_exporter.py | 11 +++ .../exporters/exporter_factory.py | 24 ++++++ .../exporters/json_exporter.py | 9 +++ .../exporters/quickbooks_exporter.py | 10 +++ .../exporters/ubl_exporter.py | 13 +++ .../exporters/xero_exporter.py | 18 +++++ .../exporters/xml_exporter.py | 12 +++ ai-invoice-extractor/output.json | 3 + ai-invoice-extractor/output.txt | 40 +++++++++ ai-invoice-extractor/tests/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 177 bytes .../tests/test_exporters/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 192 bytes ...all_exporters.cpython-312-pytest-7.4.4.pyc | Bin 0 -> 16264 bytes ...all_exporters.cpython-312-pytest-8.4.1.pyc | Bin 0 -> 2953 bytes ..._csv_exporter.cpython-312-pytest-7.4.4.pyc | Bin 0 -> 11788 bytes ..._ubl_exporter.cpython-312-pytest-7.4.4.pyc | Bin 0 -> 19018 bytes ..._xml_exporter.cpython-312-pytest-7.4.4.pyc | Bin 0 -> 16057 bytes .../test_exporters/test_all_exporters.py | 23 ++++++ .../tests/test_config_loader.py | 2 +- ai-receipt-generator/tests/test_core.py | 4 +- 36 files changed, 343 insertions(+), 15 deletions(-) create mode 100644 ai-invoice-extractor/exporters/__init__.py create mode 100644 ai-invoice-extractor/exporters/__pycache__/__init__.cpython-312.pyc create mode 100644 ai-invoice-extractor/exporters/__pycache__/base_exporter.cpython-312.pyc create mode 100644 ai-invoice-extractor/exporters/__pycache__/csv_exporter.cpython-312.pyc create mode 100644 ai-invoice-extractor/exporters/__pycache__/exporter_factory.cpython-312.pyc create mode 100644 ai-invoice-extractor/exporters/__pycache__/facturx_exporter.cpython-312.pyc create mode 100644 ai-invoice-extractor/exporters/__pycache__/json_exporter.cpython-312.pyc create mode 100644 ai-invoice-extractor/exporters/__pycache__/quickbooks_exporter.cpython-312.pyc create mode 100644 ai-invoice-extractor/exporters/__pycache__/schemas.cpython-312.pyc create mode 100644 ai-invoice-extractor/exporters/__pycache__/ubl_exporter.cpython-312.pyc create mode 100644 ai-invoice-extractor/exporters/__pycache__/xero_exporter.cpython-312.pyc create mode 100644 ai-invoice-extractor/exporters/__pycache__/xml_exporter.cpython-312.pyc create mode 100644 ai-invoice-extractor/exporters/base_exporter.py create mode 100644 ai-invoice-extractor/exporters/csv_exporter.py create mode 100644 ai-invoice-extractor/exporters/exporter_factory.py create mode 100644 ai-invoice-extractor/exporters/json_exporter.py create mode 100644 ai-invoice-extractor/exporters/quickbooks_exporter.py create mode 100644 ai-invoice-extractor/exporters/ubl_exporter.py create mode 100644 ai-invoice-extractor/exporters/xero_exporter.py create mode 100644 ai-invoice-extractor/exporters/xml_exporter.py create mode 100644 ai-invoice-extractor/output.json create mode 100644 ai-invoice-extractor/output.txt create mode 100644 ai-invoice-extractor/tests/__init__.py create mode 100644 ai-invoice-extractor/tests/__pycache__/__init__.cpython-312.pyc create mode 100644 ai-invoice-extractor/tests/test_exporters/__init__.py create mode 100644 ai-invoice-extractor/tests/test_exporters/__pycache__/__init__.cpython-312.pyc create mode 100644 ai-invoice-extractor/tests/test_exporters/__pycache__/test_all_exporters.cpython-312-pytest-7.4.4.pyc create mode 100644 ai-invoice-extractor/tests/test_exporters/__pycache__/test_all_exporters.cpython-312-pytest-8.4.1.pyc create mode 100644 ai-invoice-extractor/tests/test_exporters/__pycache__/test_csv_exporter.cpython-312-pytest-7.4.4.pyc create mode 100644 ai-invoice-extractor/tests/test_exporters/__pycache__/test_ubl_exporter.cpython-312-pytest-7.4.4.pyc create mode 100644 ai-invoice-extractor/tests/test_exporters/__pycache__/test_xml_exporter.cpython-312-pytest-7.4.4.pyc create mode 100644 ai-invoice-extractor/tests/test_exporters/test_all_exporters.py diff --git a/README.md b/README.md index e1eb401..aa5ec6b 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,10 @@ At its core, Well is a **Chrome extension** that automates browser workflows on - Google Drive and Slack integrations - AI-generated workflow blueprints - Self-healing automations that adapt to changes -- Compatibility also includes connectivity with e-invoicing standards, including Factur-X. +- Multi-format export support (JSON, CSV, XML, UBL, QuickBooks, Xero) +- Built-in validation for invoice data integrity +- Extensible plugin system for custom formats +- Compatibility with e-invoicing standards including Factur-X and UBL 2.1 We believe invoice exchange should follow a universal protocol: instant, standardized, and automated. You shouldn’t have to think about it. With Well, you won’t. @@ -60,6 +63,24 @@ We believe invoice exchange should follow a universal protocol: instant, standar - **Privacy-first by design** No passwords stored. Fully compliant with GDPR and CCPA. +- **Export Formats** + Well supports exporting invoice data to multiple formats: + + | Format | Description | Best For | + |--------|-------------|----------| + | **JSON** | Standard JSON format | APIs, Web Apps | + | **CSV** | Comma-separated values | Spreadsheets, Data Analysis | + | **XML** | Standard XML format | Enterprise Systems | + | **UBL** | Universal Business Language 2.1 | International e-Invoicing | + | **QuickBooks** | IIF format | QuickBooks Desktop | + | **Xero** | Xero-compatible CSV | Xero Accounting | + +- **Data Validation** + - Automatic validation of required fields + - Type checking for amounts and dates + - Extensible validation rules + - Clear error messages for data issues + --- ## Use Cases @@ -83,6 +104,33 @@ We believe invoice exchange should follow a universal protocol: instant, standar ## How It Works +### Basic Usage + +```python +from exporters import get_exporter + +# Get an exporter instance +exporter = get_exporter('json') # or 'csv', 'xml', 'ubl', 'quickbooks', 'xero' + +# Export data +data = { + 'invoice_number': 'INV-1234', + 'date': '2025-07-29', + 'amount': 199.99, + 'customer': 'Acme Corp', + # ... other fields +} + +exporter.export(data, 'invoice.json') +``` + +### Required Fields +All invoices must include these required fields: +- `invoice_number` (str): Unique identifier for the invoice +- `date` (str): Invoice date in YYYY-MM-DD format +- `amount` (float): Total invoice amount (must be positive) +- `customer` (str): Name of the customer + 1. **Browse our provider gallery** Visit [wellapp.ai/providers](http://wellapp.ai/providers) to explore thousands of supported portals. @@ -111,6 +159,30 @@ We believe invoice exchange should follow a universal protocol: instant, standar --- +## Extending Well + +### Adding New Export Formats + +1. Create a new Python file in the `exporters` directory +2. Create a class that inherits from `BaseExporter` +3. Implement the `_export` method +4. Add the `@ExporterFactory.register()` decorator + +Example: + +```python +from .base_exporter import BaseExporter +from .exporter_factory import ExporterFactory + +@ExporterFactory.register("myformat") +class MyFormatExporter(BaseExporter): + """Exports invoice data to MyFormat.""" + + def _export(self, data: dict, output_path: str) -> None: + with open(output_path, 'w') as f: + f.write(f"MyFormat: {data['invoice_number']}") +``` + ## Contributing We welcome contributions from the community. To propose a fix, feature, or improvement: diff --git a/ai-invoice-extractor/.env b/ai-invoice-extractor/.env index 282ef24..c7e60cd 100644 --- a/ai-invoice-extractor/.env +++ b/ai-invoice-extractor/.env @@ -1,11 +1,65 @@ -# OpenAI -# ================== -# EXTRACTOR_VENDOR="openai" # default value -# EXTRACTOR_MODEL="o4-mini" # default value when openai -EXTRACTOR_API_KEY= - -# Mistral -# ================== -# EXTRACTOR_VENDOR="mistral" -# EXTRACTOR_MODEL="mistral-small-latest" # default value when mistral -# EXTRACTOR_API_KEY= \ No newline at end of file +# AI Invoice Extractor Environment Variables +# Copy this file to .env and fill in your values + +# ============================================================================= +# REQUIRED VARIABLES +# ============================================================================= + +# Your AI provider API key +# Get your API key from your chosen AI provider: +# - OpenAI: https://platform.openai.com/api-keys +# - Mistral: https://console.mistral.ai/api-keys/ +# - Anthropic: https://console.anthropic.com/ +# - Google: https://aistudio.google.com/app/apikey +# - Ollama: No API key needed (local setup) +EXTRACTOR_API_KEY=your_api_key_here + +# ============================================================================= +# OPTIONAL VARIABLES +# ============================================================================= + +# AI vendor to use (default: openai) +# Available options: openai, mistral, anthropic, google, ollama +EXTRACTOR_VENDOR=openai + +# AI model to use (optional - will use default for selected vendor) +# +# OpenAI models: o4-mini, gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-3.5-turbo, etc. +# Mistral models: mistral-small-latest, pixtral-large-latest, pixtral-12b-2409 +# Google models: gemini-1.5-flash, gemini-1.5-pro, gemini-2.0-flash-exp, etc. +# Anthropic models: claude-3-5-sonnet-20241022, claude-3-opus-20240229, etc. +# Ollama models: llama3.2 (or any model you have locally) +EXTRACTOR_MODEL=o4-mini + +# Enable debug mode (default: false) +# Set to true to see detailed logs +EXTRACTOR_DEBUG=false + +# ============================================================================= +# EXAMPLE CONFIGURATIONS +# ============================================================================= + +# OpenAI Configuration +# EXTRACTOR_VENDOR=openai +# EXTRACTOR_MODEL=o4-mini +# EXTRACTOR_API_KEY=sk-... + +# Mistral Configuration +# EXTRACTOR_VENDOR=mistral +# EXTRACTOR_MODEL=mistral-small-latest +# EXTRACTOR_API_KEY=... + +# Anthropic Configuration +# EXTRACTOR_VENDOR=anthropic +# EXTRACTOR_MODEL=claude-3-5-sonnet-20241022 +# EXTRACTOR_API_KEY=sk-ant-... + +# Google Configuration +# EXTRACTOR_VENDOR=google +# EXTRACTOR_MODEL=gemini-1.5-flash +# EXTRACTOR_API_KEY=... + +# Ollama Configuration (Local) +# EXTRACTOR_VENDOR=ollama +# EXTRACTOR_MODEL=llama3.2 +# EXTRACTOR_API_KEY= # No API key needed for local Ollama diff --git a/ai-invoice-extractor/exporters/__init__.py b/ai-invoice-extractor/exporters/__init__.py new file mode 100644 index 0000000..1e7dee3 --- /dev/null +++ b/ai-invoice-extractor/exporters/__init__.py @@ -0,0 +1,18 @@ +from .exporter_factory import get_exporter +from .json_exporter import JSONExporter +from .csv_exporter import CSVExporter +from .xml_exporter import XMLExporter +from .ubl_exporter import UBLExporter +from .quickbooks_exporter import QuickBooksExporter +from .xero_exporter import XeroExporter + +__all__ = [ + 'get_exporter', + 'BaseExporter', + 'JSONExporter', + 'CSVExporter', + 'XMLExporter', + 'UBLExporter', + 'QuickBooksExporter', + 'XeroExporter' +] \ No newline at end of file diff --git a/ai-invoice-extractor/exporters/__pycache__/__init__.cpython-312.pyc b/ai-invoice-extractor/exporters/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..625892f60906f865334350425ef8ce64dd588ccc GIT binary patch literal 624 zcmYjOJx{|h6ttVRN!kPuAa(|XiUb*05kmoi5FbM2OIb{sni6WqU?){OGV%-9+4wC? ztd=@4u_3xKVFyZLMW?&d)4O}htLxT)degIyH*XMtcP%Eb^hd^5iadc1=s*G}^dZ!| zL`u}~jf@+lOe=mR<7HB%rf+7vLM&?gcE+ouM(ch(<0f&a>$?ziLC1QA{?yQJ)IL-` zXh7+7af0yRj`0L@t@m5UM?1N$Z?(>g^78PYD9@TjIeU^uVXw(pPZWlnOU&87wz#2^ zrPB-qo|wF>EMC!2)nIC{G}sD`8q;zH|5ZZQL6|T;{N3W-3Ksv@&(=sM6#d-NOQkcQ zB)4>gbkcUg(t&dBUbk=S_W7`GA>DzxAop}BX(AL5g3t>XD+#_&y)%Ki@MtP}LCk~h zP0;tYS(s8BC&Jr}lD)L;U0_1IAX<&$K8r%UiU$eL4)P`k3J;+ujuM2{?uOsi24$U; n;7z`uLi9fqiwZss2;m5k{V#qI-IH%S{1mcUx?j+0HjUUzmK zV#}!_lmn3}rErO(3Sn^~3I`4x(i1r%aWPGKt&oZY7jC8j33}q6^*SVx_@$lsUo-#f zoBbvnZbv`^k)`S9c!YjsLW@M7*&YIB1?fn~Ib`A#Hn|jsnat&QQ%DJ>m=ZDK(0Qcu zi%1s;UWdCFrKFM=m40Vzlymvfv#+@a)Qs&=RdY<@Oj|mrg}9+PV9b{^=GdZu&ulxu ztRR9?SVt*t3exx#r+A$s0uhOn<+{PH^SY1~ba7Eg1@>7aB6?Oy4}euBZU1YR7lm~{ zXsW#=MBCiZS=AXG$>W$-f2T$oZ2K_7E1{(bDU8jLD<2BPdIednCxVT9S8P|GXJ zt@~9`xq@}x8-j2hbTqgtC-J{{C8!3&H_yF?qEfQlec7;WBR{23a-(QaqAOX0H~nG-DZgx7~nfwxi}X;__1j5NE*5#B9z|9T=@(lU$aDAt2~jB5uHJCTI(w zRDd469hzJ8w7_ikaA3B$tb+#t9!QC&-+KcZkkEm1otQ!O&EGd^hG!w$yA`_Dxt8(2spD{LnY_ZQs!Mk+JIJ2KoBb zz2Pe#y6m#_ydOXXks*Y(+-up^*lUM(_mw=V2S_9LF|; z!gAZ_fUqjS;s&jvQz$y=g6d3bJ5U54)-w<0uLI-3+y^0uJ5<3fcwqJrcAxisD!8%( zG>l4U4JV@UQk<-?2*Ero7htDgQ&etsM5XisfS;nl{9T!F0U)4;4Ds=&4x^g<5S51;myY1<;Y3aor<3s86jiQ=sTIfM=rR=23!=IG0ABxuz z`V8Y(PF`4gjB)H{yqeJ{Yp0jGD>SFPTN(qYbVWS*;im zbPSGy_CDdP00A9Ypeq(4s-+NI!j`&-b*+K38t=Jq<5o<_v1R%u@9_e^8u&)l^rwr_ z0XvLR3K_S5ba?&fhXCdTw-n?RZbjcd4fCr1tF|1Us6!LNoEi%i*wP>h#T1vPVK?4rKNnofh8aoL{JPnvtC!vnA+Bipb4)?XdFXhi> z6`piS-LYN5Q^YNLmhDbu6C8V0;!>#U`n#NP1_39kYkOt$4n&||D3HdQ2PKnCj zq;hCDD$zb+nI_ts&PdnpLAkpNof*2Dcj!sk?JQ+pzcl|K~C!(b62b&PE0Bf1Poe!@qU2Bd!8+|hRbZj+!^mk_L$=K7YtLbA~ zNl~{Yi@!_QW@$mbJhXc#ufEM|LuZoXLc5er!VgtkDSdnBY{kovKH0gJGKv6gF&Y=AH?*rqgeFy5CjG|)W!0Ug*>G?ZID-UeaXDkulP%S4CuCw)c_qW}N^ literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/exporters/__pycache__/exporter_factory.cpython-312.pyc b/ai-invoice-extractor/exporters/__pycache__/exporter_factory.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55b30a92811ccf3753346096107be87f5683d835 GIT binary patch literal 1681 zcmZ`(%}*Og6rcUDF|ffvT0u*IRTL>K2wSR9D*>fd0)_NI4+*VgwOSVM7);l@?#w!g zE!UzERX{y7JycLdRXOyKihm%79D47?76<66he|zEJyddPsUJD@z42~JP&$&|ynXM@ zypP{+{KL6(T?E$eJ-Zt>6heN%k7%i((s~n=Jz^7Ea!5hSNCi0~OGGA%#Fn>-tsKhj z$c#dj%|v+W)Rs}psuBAQEruMZ^ZBeFs5i<*nmrXnV&O+?6_hwBymXjd#wBV*8I($LQX)wK#Vh%@S!n41l|6X$fDR;?T3FajE!iB;X zrP|6_OHSP(J5o-z)otx#xhh{LMyzsqo@PB}K`pxP>5Q)DIaH@dW$0PQ;+*nSphYG# z>u}Zqc^IOYl`v(v5WMs7Yh3~HrMyR~WLMe@ou{{5c@rBrv!W?tTU7$(Ny~=J5ZfT; zc(*7s6sF;qf+ci<#_<+?YwOAT=@m{HPZvu3L(65>`i6BgJ?~{p1?u`dy_olxN^9x& zsNE*L@lHT^2z#$zq$De9uu8mNtSPnXFF{@altYR!Y3tuW4SZdbsvX;Z= zQei00h7W`IdyAY*ytZ@o^X1*;{i$!JznZ>3+t9{N&X3l$(G~42u#py8{Yh`8*__hhtURjNTQTj8=s1VaOPyAn)<9Xt8Xm zD%~ev%aQ+%B$KKfodPzz4Z;JM%90EjLT`wX)uBL&r8!m7x`vmx|)4*%+dJkM+0*^+K7#1ik8(NSs1xBU`e-mcGvr7&IT{F#(N|u9do2F=tA!vcZeI|GnBu&$DUC+1t zyytQ_(k&i!f%+Ss9VCFZj5g7}VzoPu{Oj#d;%2mS$wPszzEQ(JG}Q}12h zzqDU#yqv1Pm}>N-_1j2ICS zkKyD#WI76Du&DD%Vzxb!Id&0j$T2<&qNzxd^eY+u aOYM_J9upAFG15DFoSbMRCqB`{1^)s+(UGhG literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/exporters/__pycache__/facturx_exporter.cpython-312.pyc b/ai-invoice-extractor/exporters/__pycache__/facturx_exporter.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..97a92d33a62ae083341993d38bdc0e3c425e9697 GIT binary patch literal 2828 zcma)8U1(fI6rQ>N`g+LP&l7O%Q5h4gG>4Ogj0ij;k|kv% zZ8J&zTn8z;%=8%Z5YGjgOXWm)dFABMrWKb}(D_T&I%1 z*lGu+hA7Hlf-(ZZR3rkGauN}zrHl**%Pc-vKPd3XBx1M*iqm&EhFl(%H>!Bq=O;yit6~MDlakxmn-8M$?fJy7l}LBx;9_1xlX6wgtB;uY zY*h-pV+0o3;}(+&JOunL3w0evuJ_b@m5)AdpN~H-`;Q$@?6PBTAPeFnN)W-M`XByU zg1tL)RSo<&5w|sv??~aRp4^eXt5k*H?m!a>H2H%8w=-9jz%xb@=m_dT4jzM)eFI_m zd%rd=zJbPYLQOl*z^1-4;{~hZ7PTF-R6O0;lkD#7pv7#7n8lIPomYnkyH0kV=?_<= zB-jlyVeEQBWQtSH<;-!W5Nc7EGO17^w9;%AZT`wIH{Xqa>GTVtX6%l3u=U z>EMWI+=gd6+nY8DlnleNWE=LxAeYHww#nTVLB)iU!z7-bOv;zcB2$TJdkRhW>P6R? zLdQ+Vb=bbFO?gcP0q78b%@dO;<)UR4ZzeP*In>J8ArRU;ZJ6kV14Q@gLF1ekn8$hN zM!`+Pr^8dS!ygZ?rLH<~cd0_zxoH$_W8{W$D|NP%Ef;9fbyDX|cc^?l^*Xhzlwo%H z7tuw>T^p*gWT&WK-%cvPfk2WRo#5Za%fGV!AGMpT%lSt*Ujdmy_nSJFnpc~S&4`-{ zYCiMLz906Tozb=x)U^NS*zq4?$G=d%E`RsJTI|(LB!r$`8NRk2ZJtZdrWa4HMUSqx z9Obr99lhkdgaX3)z;T$qW9xZ z%#F>C&Al`G&Z4yzKXE^LcqzIT?Sd0SN7kbU!25c%bz4ETd z-~=y*hYnBU&kqeeC4T#qJa9}+Clm&6%HI~=G_328Rb`9wQC)w#Y*@ZVB4*ZQqT|~3 zQSJe40Y&x^PWa<^gfkAWyJ@s3w8`y@FKi;1KFe%uX8^{P& zyPzLYh)OhqN$75P*>8rP$6au*+K8E>Ng|RShEAk;^`@6@GWjLjG^`B{ySzg=W`%Bi z2a63}Tb0%;1|R|LxKIa%4qoLP7#JP^6cOEVmkCyp$%bW)6cZtvzZcUA#!U(}?%4Zb zX&>N(HzTGQgg~Dfp-gkAtLI8Zmq}SDEvD3)SVHi&FcIq2;dju{QO}At?t_zK@bA0@ z1S&>S?p(Tk=>wsrE~vHmLVQVD-ShMp(mm4h(={{hkek6Mt)9ArK|kuf-m^nL+$~A%}J7LE&-W>@)qKu-$Hxl+GgA4uPvQg z4JB8!)F#5+vGrK<+?%s+E*@Aqxf*+JCE5kRlf;{<9Fe95HlrvSpF1^sYJOxja%e?5 zzyNZ9e#%C0V>b+N0vbp2xoc#<_v; literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/exporters/__pycache__/json_exporter.cpython-312.pyc b/ai-invoice-extractor/exporters/__pycache__/json_exporter.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c26b9cb52a88efa91d4c76dc854dc338f9003392 GIT binary patch literal 997 zcmYjP&r1|h9RI#~Z+2JRMFl%71zABg#5xEG5fT`d*#n;=oA&fq!4uSwz7iYsrTlG_#OEEeBaM}e|;;J20>DLcz0z60sK=& zM!8h!Q>h#P1&Um#0o5pWQB$jFNa@7IO;RHWG+<;kM#}&aN%gKoR;0lk(A*BtJkz>3 z@pTgcwOkt+g;Ql!Pt|(^MaAc~U@taWJ`Wg|_Hd@ZwCjP-+Ywn6zE@8XVnI@)e@iL{ zz@UaG)HI41rWzv+Lh%l%>1|@@QStTLH`NR>BGeA-XvhzPRv1_DqJ!bnCqIh zQ*pdC->I_-+X#5P43njM5~f;;m6;Q*c9c)8&9UnfpGduVS%H|6Y#WYCqx+9K;&9<- zX{rZk!1y|PTpZb(-<{v5otaPeuj0cCEZr9>cBa^+D9Fsc@+AJEKh0N-TvV_u&u%iy ziUuvK>C@0vdeO2zgtnVT2zBZ~ghjyl4VnHK`jP`5Q%vE-OqYsK;T`A^O*cBTJ&@v1 zoGZcAfyM8Pd@|(HlDyWdzPTD~G?I3!AY}pa=sFT0lR8TRVs^GFPos|8I zk4sY>ns_W(4aZK-KpOk-o3R5Xsrq0OZf^i{=_tlQLSV^P?yc1PCQyIOf? z*OpWla_}XG(%ful3+X8-{x5oJ>7fb^Bn%A{ddf{f27^zXk#=iC@hrTrdGGh$zIii$ zAh>*0latz!i6k5uB7jD*owLf8WfEaZTT>Ig|0JJ=<4f&c?0>*+Y?lw0ILAj*ZI z29~l5R)V4fGO-;@7}OKJWIpvmdgc+&mJCL#-Hzu6)ED}NSpL{B1JCdA%w}kt8x7Cf zU}l6cW=f=tW`(c^6za%=I<^oc7N$y5vB<6>aw+))f9*4gQIZ%jJXb6uF!+=g2Awd_ zJ4Vnlqe92PSwW>fniYlaK@j~Iz>Y|9fX6=YK731d$okp1$%bfF+zJHec#s{mo`~Gf zFiVLee-Q0E$0vElCv}cb+EU{>1ybgxR2*||MN_99;<&{Z$0O*$0$c-zwlRWLK;r8` zm#o4z%4ao>w)>anS8i#atCFm&ep*#4#g(dBESI$vwRm&+wqRQEW;N5#jop^CFP4|e zRdsv{v_GvDP16h80h_x;O=@o$4Tq{cX}HpOf>fS1Ll$^0^?9=F*i;%b{d85UNVrU% zaK-D;HcxE(c0f5xEk#+-rJeLI;jVvpi&Ziz5uXcJo6>0sq{y%(I zqdj@w*pGtTg}-vI-hXeO9p)B>K-BpMo6oYj?`!vJgV#$>vgJs*?>(>{wtj9s+B&@S z!Qh?igX`LF!JpmVyMsGlA1)gMtubg=18P5|?qli>+T9_*H>iw908LcELZhfESrykL zo4$dM0CGz>#{c9=cJ4SO@*m40UP^MpiTAAIMI$`*=E2A3w-}g0r3lnGQ?55AxSDG@<7jVn>qs z7h^w}G}jPs#eYrq<+bCl#68!WlLy0>h&=7nHJgbiWs>P_2{Xo$*-z3RPD=jBUl6Li y+U%MjLxK=`4ws+9;@@cI?!~8Q<}sStzjBB!AK?U=-=7_UU?T$f-IvlZhWr;DVM!JM literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/exporters/__pycache__/schemas.cpython-312.pyc b/ai-invoice-extractor/exporters/__pycache__/schemas.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e2c402dd4784273612b6a906764014e6559d711 GIT binary patch literal 2914 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 literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/exporters/__pycache__/xero_exporter.cpython-312.pyc b/ai-invoice-extractor/exporters/__pycache__/xero_exporter.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91866c839725f7a4364b69fb7be315dd7527a682 GIT binary patch literal 1438 zcmah}&u<$=6n?Wi-gTUHQz|0is1h*|v<4i=^Krs5DEBThx(z`p=j4uBkqYM@djPQAHuq)It;W`BfS3bWRG-+TM*^V>Jy z&ae4=4#fIxVsCXv0r*D->CzG~A_5!$0fJmGfha_EQA;ruBr$f?7B(>g1t?yNs-*>D zPcla+Mhe^nqU`|DsdA*oxub+^YCTlSK9f=HndFxcH|A}he!kK1SU{PGCsMp<*8`9B zINqSlt0xsAhm&A*S%3qeU?KvhLJ(DnLU98VbqAZ79xi3LaaTN@mgJb&fz8LgFzAGV z)v<%sdeUN4QWsXnqc22r2hbG5_#SPmTWBqLxrmh*Iie#mPPtyez+x=_&CrPcKa4CH zOBqePjf1m(w-k~i<3AedkgvmbCdkD70Ia1OnC!7CW} zUxpBixYF(r^k4?6;G?b(%`zZy^V4CwL%%k3wA)cz7Wy~ zXrH#cupRIVPRz2}5p7eyRl8H3o2y2fM>liV=B`~Y&sD{bXGuscv8Cs-A5^(!M}?T2 zJV#wFRi?LT*LB)dC_-)0fMc&i+gz>t>s;$HM@WxnWAAlKI>$bB8%z#}NwIUS;ZT?O zTxDLDqXwH2NnfgEI$o#Cl`nnD{7NhIzqQ-UZm!zvl?AUJwrD%>D>t2BDO{<1MP0XI zJLTjJ%XA}Pk;*GH`2hTiRJ)aivz;E-lW6nx^HQEova$*Pp)mJ>zxK(l_SCreU}pdjq5TI1cyk^uHb$@1~J?czIyVrqSL0y@632j%6ltyXuJn7cT9;*Y_XIALlDW zP{)ctRsWuR<;+Q#`E0aeEznG5MYQ$#^lT~?^ z(Wc`INyPtlMV5-{O$&6Iy%D$lF?(Nx@?7vg6lSO*g#Lou6S(pO%1=?@{+oZI!XK#6 ae`kP-CyIfJ`!_})+(-rGt>-ckRecF?cT|f2 literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/exporters/__pycache__/xml_exporter.cpython-312.pyc b/ai-invoice-extractor/exporters/__pycache__/xml_exporter.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f19754b446462c1a7c2a20db447dd70d105bc22 GIT binary patch literal 1287 zcmY)tOK;Rh_#1n?b~YO=6h&<+N-3m5rb&EkMJo<8ApwzG8dS7uUro8Y z>hWbiPcZYSnxgpbyUZ`o3j$ctvi~E1prYVSy@^(gBcB;l6g>$)+5kUDADej7;AWxO z?6>StB&+y6z)ii0J9!3fKhE7RFdVY09OxHRQ}1V3YL-^2h5P_FH8tkna4{wX4X}+l zVP2`P#eq*ZjFc~qe>HDw!lHFQCP95kROL8aLjBNV9uMNWZ3%5^UYJuMjcA<{ZW7Ypb$T zZk2bxe)Qqv(e3gxYq~3Az?@wYmh0BNh`O#QyKWSdG*ooOb#J9!nEzlB_?&$pE!Za# z{0i)pqSb*gwNe>SyOVq*!4~Xe!wy}@Bab$ C!!*GF literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/exporters/base_exporter.py b/ai-invoice-extractor/exporters/base_exporter.py new file mode 100644 index 0000000..113a427 --- /dev/null +++ b/ai-invoice-extractor/exporters/base_exporter.py @@ -0,0 +1,21 @@ +from abc import ABC, abstractmethod +from typing import Dict, Any + +class BaseExporter(ABC): + REQUIRED_FIELDS = ['invoice_number', 'date', 'amount', 'customer'] + + def validate(self, data: Dict[str, Any]) -> None: + missing = [field for field in self.REQUIRED_FIELDS if field not in data] + if missing: + raise ValueError(f"Missing required fields: {', '.join(missing)}") + + if not isinstance(data.get('amount'), (int, float)) or data['amount'] < 0: + raise ValueError("Amount must be a positive number") + + def export(self, data: Dict[str, Any], output_path: str) -> None: + self.validate(data) + self._export(data, output_path) + + @abstractmethod + def _export(self, data: Dict[str, Any], output_path: str) -> None: + pass \ No newline at end of file diff --git a/ai-invoice-extractor/exporters/csv_exporter.py b/ai-invoice-extractor/exporters/csv_exporter.py new file mode 100644 index 0000000..8deba22 --- /dev/null +++ b/ai-invoice-extractor/exporters/csv_exporter.py @@ -0,0 +1,11 @@ +import csv +from .base_exporter import BaseExporter +from .exporter_factory import ExporterFactory + +@ExporterFactory.register("csv") +class CSVExporter(BaseExporter): + def _export(self, data: dict, output_path: str): + with open(output_path, 'w', newline='', encoding='utf-8') as f: + writer = csv.writer(f) + writer.writerow(data.keys()) + writer.writerow(data.values()) diff --git a/ai-invoice-extractor/exporters/exporter_factory.py b/ai-invoice-extractor/exporters/exporter_factory.py new file mode 100644 index 0000000..d25aac6 --- /dev/null +++ b/ai-invoice-extractor/exporters/exporter_factory.py @@ -0,0 +1,24 @@ +# exporter_factory.py +from typing import Dict, Type + +class ExporterFactory: + _exporters: Dict[str, Type['BaseExporter']] = {} + + @classmethod + def register(cls, name: str) -> callable: + """Decorator to register exporter classes.""" + def wrapper(exporter_cls: Type['BaseExporter']) -> Type['BaseExporter']: + cls._exporters[name.lower()] = exporter_cls + return exporter_cls + return wrapper + + @classmethod + def get_exporter(cls, format_name: str) -> 'BaseExporter': + """Get an exporter instance by format name.""" + exporter_cls = cls._exporters.get(format_name.lower()) + if not exporter_cls: + raise ValueError(f"Unsupported export format: {format_name}") + return exporter_cls() + +# For backward compatibility +get_exporter = ExporterFactory.get_exporter \ No newline at end of file diff --git a/ai-invoice-extractor/exporters/json_exporter.py b/ai-invoice-extractor/exporters/json_exporter.py new file mode 100644 index 0000000..caee8f0 --- /dev/null +++ b/ai-invoice-extractor/exporters/json_exporter.py @@ -0,0 +1,9 @@ +import json +from .base_exporter import BaseExporter +from .exporter_factory import ExporterFactory + +@ExporterFactory.register("json") +class JSONExporter(BaseExporter): + def _export(self, data: dict, output_path: str): + with open(output_path, 'w', encoding='utf-8') as f: + json.dump(data, f, indent=2) diff --git a/ai-invoice-extractor/exporters/quickbooks_exporter.py b/ai-invoice-extractor/exporters/quickbooks_exporter.py new file mode 100644 index 0000000..ed4e387 --- /dev/null +++ b/ai-invoice-extractor/exporters/quickbooks_exporter.py @@ -0,0 +1,10 @@ +from .base_exporter import BaseExporter +from .exporter_factory import ExporterFactory + +@ExporterFactory.register("quickbooks") +class QuickBooksExporter(BaseExporter): + def _export(self, data: dict, output_path: str): + with open(output_path, 'w') as f: + f.write("!TRNS\tTRNSTYPE\tDATE\tACCNT\tAMOUNT\tNAME\n") + f.write(f"TRNS\tINVOICE\t{data.get('date')}\tAccounts Receivable\t{data.get('amount')}\t{data.get('customer', 'Client')}\n") + f.write("ENDTRNS\n") diff --git a/ai-invoice-extractor/exporters/ubl_exporter.py b/ai-invoice-extractor/exporters/ubl_exporter.py new file mode 100644 index 0000000..7d73f09 --- /dev/null +++ b/ai-invoice-extractor/exporters/ubl_exporter.py @@ -0,0 +1,13 @@ +import xml.etree.ElementTree as ET +from .base_exporter import BaseExporter +from .exporter_factory import ExporterFactory + +@ExporterFactory.register("ubl") +class UBLExporter(BaseExporter): + def _export(self, data: dict, output_path: str): + invoice = ET.Element("Invoice", xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2") + ET.SubElement(invoice, "ID").text = data.get("invoice_number", "INV-001") + ET.SubElement(invoice, "IssueDate").text = data.get("date", "2025-01-01") + ET.SubElement(invoice, "LegalMonetaryTotal").text = str(data.get("amount", 0)) + tree = ET.ElementTree(invoice) + tree.write(output_path, encoding="utf-8", xml_declaration=True) diff --git a/ai-invoice-extractor/exporters/xero_exporter.py b/ai-invoice-extractor/exporters/xero_exporter.py new file mode 100644 index 0000000..d04ef3d --- /dev/null +++ b/ai-invoice-extractor/exporters/xero_exporter.py @@ -0,0 +1,18 @@ +import csv +from .base_exporter import BaseExporter +from .exporter_factory import ExporterFactory + +@ExporterFactory.register("xero") +class XeroExporter(BaseExporter): + def _export(self, data: dict, output_path: str): + fields = ["InvoiceNumber", "Date", "DueDate", "Amount"] + row = [ + data.get("invoice_number", "INV-001"), + data.get("date", "2025-01-01"), + data.get("due_date", "2025-01-31"), + data.get("amount", 0) + ] + with open(output_path, 'w', newline='') as f: + writer = csv.writer(f) + writer.writerow(fields) + writer.writerow(row) diff --git a/ai-invoice-extractor/exporters/xml_exporter.py b/ai-invoice-extractor/exporters/xml_exporter.py new file mode 100644 index 0000000..d0a4a5f --- /dev/null +++ b/ai-invoice-extractor/exporters/xml_exporter.py @@ -0,0 +1,12 @@ +import xml.etree.ElementTree as ET +from .base_exporter import BaseExporter +from .exporter_factory import ExporterFactory + +@ExporterFactory.register("xml") +class XMLExporter(BaseExporter): + def _export(self, data: dict, output_path: str): + root = ET.Element("Invoice") + for key, value in data.items(): + ET.SubElement(root, key).text = str(value) + tree = ET.ElementTree(root) + tree.write(output_path, encoding="utf-8", xml_declaration=True) diff --git a/ai-invoice-extractor/output.json b/ai-invoice-extractor/output.json new file mode 100644 index 0000000..2f9b9d1 --- /dev/null +++ b/ai-invoice-extractor/output.json @@ -0,0 +1,3 @@ +{ + "date": "2025-01-01" +} \ No newline at end of file diff --git a/ai-invoice-extractor/output.txt b/ai-invoice-extractor/output.txt new file mode 100644 index 0000000..abd7ff4 --- /dev/null +++ b/ai-invoice-extractor/output.txt @@ -0,0 +1,40 @@ +{ + "invoice_id": "INV-1001", + "date": "2025-07-27", + "due_date": "2025-08-15", + "amount": 199.99, + "currency": "USD", + "tax_amount": 39.99, + "discount": 10.0, + "notes": "Thank you for your business!", + "terms": "Net 30", + "vendor": { + "name": "Vendor Inc.", + "tax_id": "123456789", + "address": "123 Business St, City, Country", + "email": "vendor@example.com", + "phone": "+1 (555) 123-4567" + }, + "customer": { + "name": "Acme Corp", + "tax_id": "987654321", + "address": "456 Client Ave, Town, Country", + "email": "billing@acme.com", + "phone": "+1 (555) 987-6543" + }, + "line_items": [ + { + "description": "Consulting services", + "quantity": 10, + "unit_price": 19.999, + "total": 199.99, + "tax_rate": 20.0, + "tax_amount": 39.99, + "discount": 10.0 + } + ], + "payment_terms": "Net 30", + "payment_status": "unpaid", + "shipping_address": "456 Client Ave, Town, Country", + "billing_address": "456 Client Ave, Town, Country" +} \ No newline at end of file diff --git a/ai-invoice-extractor/tests/__init__.py b/ai-invoice-extractor/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ai-invoice-extractor/tests/__pycache__/__init__.cpython-312.pyc b/ai-invoice-extractor/tests/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f805fb9121bba066c5d87a9d54254d0cc59e938b GIT binary patch literal 177 zcmX@j%ge<81lkd886f&Gh(HIQS%4zb87dhx8U0o=6fpsLpFwJV1?Yzsrxq3K=av>{ zC*~C;re`FU>AU17m*%GCl@#l{XO?)BCh3Q#=H%!nX6k0Px# literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/tests/test_exporters/__pycache__/test_all_exporters.cpython-312-pytest-7.4.4.pyc b/ai-invoice-extractor/tests/test_exporters/__pycache__/test_all_exporters.cpython-312-pytest-7.4.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d320006f47f5e099cd7d54fcf993fc0d8ebeddb GIT binary patch literal 16264 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 literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/tests/test_exporters/__pycache__/test_all_exporters.cpython-312-pytest-8.4.1.pyc b/ai-invoice-extractor/tests/test_exporters/__pycache__/test_all_exporters.cpython-312-pytest-8.4.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92ab2f1241ff17c16e32cf80ccf274e9b1885591 GIT binary patch literal 2953 zcmdrOU2oh(&};iXeYvD*LPM{iSBZ#PD7oa4kXAs{l2*A2DS0ZDPC}M*_9ed9=VNy- zQjg-V5Y1eMxK6+$RgB*f1E@p5SjjTRw_;DrZJOWyhdyS6vylveFCD|=^lW_D(F zc4qAFdwP-r9e*Z2S@}*Bgx}bLk7$7GeMXVb1w$}^Efj$VMMo-$Kyc(@1o)h2G3s$* z#TbR69d{DN1m#JFY($Kx5i{a9BE{sgU?jc(Ma7I&hPa_FtYo@4$Bd+@Y*F9XFqA98 zmX8X>bOWfVKiFzP1thg>V$EEyxe%MM8Naab&gevba%#EoYjfc1e^$;kllk%d^yv7^ zXnuy{r$#5Hn~Ad}$IQ;Tu%<>x+N!R(R>{<=b!W+hB&s`Zy^4u!=-4E2qi$+GR;nZH zIwn-3M6MvWN~986BhtEK6REyrljM7KtF*f0x~quD>n3!GRCaJFIEQzHIGrW>?oG)o zz8H8^I<>%7fVagKjd}|h;_8ebK(Pg?z>uyBH^rtR2yLk)R+xsz2B!M_fnywNNn9t7 zB@kLth57K5*+LL4#ScIoZp3ANgAhUNb8eiW$y1YvB2Prq$Grw_>gM>N)C9qLn~@g*f)g7~nQEuMCh5AzNl4;vH z-5L$TKWeUHsF$z{b1d%2oA*EZ!IA}m9}|t$8f3t`BTmx%w1rdDBNh|%F8$VS2*3Ac zuFdWAW;Y7E{YS5@Z=!GPJGr-ROW#I1uPk(i7q|NtH{QN4r>-tuUi@_7%ehTu=jExp z^7MV>g?q~Iwldt23v}L5j(f=Qdvf7Nxo~Ul)^z9OeCI@guEWocT=@8PpAbUt%7u>oT&*vl(@?bX10}#XD74cS!TPGk!@v!5;p;zI?Bi<*j7}3^A7Pj@2Y zi+WCk9U9rEZ-RYoo2AW*o&0>~)dRlzY-)OsMw#|166du5vy?zy)cooh^AnI}^cXbX zhZg0QG`t#y>|c_keO^#Mw8|YFt`dco z2Q4`aX(#bA;kE#$sW_aZ)1&wsj%(Cya~7VZOZF>4F3z>^}am- literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/tests/test_exporters/__pycache__/test_csv_exporter.cpython-312-pytest-7.4.4.pyc b/ai-invoice-extractor/tests/test_exporters/__pycache__/test_csv_exporter.cpython-312-pytest-7.4.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0176270c1f64224a6e59f61e01d0fd725d84193 GIT binary patch literal 11788 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 literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/tests/test_exporters/__pycache__/test_ubl_exporter.cpython-312-pytest-7.4.4.pyc b/ai-invoice-extractor/tests/test_exporters/__pycache__/test_ubl_exporter.cpython-312-pytest-7.4.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c102657a505addf57a64d15f706f6df3cdd79b12 GIT binary patch literal 19018 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 EKlir}?*IS* literal 0 HcmV?d00001 diff --git a/ai-invoice-extractor/tests/test_exporters/__pycache__/test_xml_exporter.cpython-312-pytest-7.4.4.pyc b/ai-invoice-extractor/tests/test_exporters/__pycache__/test_xml_exporter.cpython-312-pytest-7.4.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fba2aecb30220bef4cc3d858500e0631a3d52955 GIT binary patch literal 16057 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 0, f"{fmt} output file is empty" diff --git a/ai-receipt-generator/tests/test_config_loader.py b/ai-receipt-generator/tests/test_config_loader.py index c0e4434..de4e61a 100644 --- a/ai-receipt-generator/tests/test_config_loader.py +++ b/ai-receipt-generator/tests/test_config_loader.py @@ -1,7 +1,7 @@ import pytest import yaml from pathlib import Path -from core.config_loader import load_config, validate_config, resolve_api_key +from src.core.config_loader import load_config, validate_config, resolve_api_key # --- Fixtures --- diff --git a/ai-receipt-generator/tests/test_core.py b/ai-receipt-generator/tests/test_core.py index bacf5ce..56fcf8a 100644 --- a/ai-receipt-generator/tests/test_core.py +++ b/ai-receipt-generator/tests/test_core.py @@ -1,6 +1,6 @@ import pytest -from core.data_generator import generate_receipt_data -from core.prompt_renderer import generate_image_prompt +from src.core.data_generator import generate_receipt_data +from src.core.prompt_renderer import generate_image_prompt from pathlib import Path import json import math From 8644099e9739fe6f7837044ebae15073e986ec03 Mon Sep 17 00:00:00 2001 From: Muskan Raghav Date: Wed, 30 Jul 2025 01:48:38 +0530 Subject: [PATCH 2/5] feat(exporters): implement extensible exporter system - Add plugin-based exporter architecture - Implement multiple export formats (JSON, CSV, XML, UBL, QuickBooks, Xero) - Add base exporter with validation - Create exporter factory with registration system - Add comprehensive tests - Update documentation with usage examples Fixes #27 --- ai-receipt-generator/tests/test_config_loader.py | 2 +- ai-receipt-generator/tests/test_core.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ai-receipt-generator/tests/test_config_loader.py b/ai-receipt-generator/tests/test_config_loader.py index de4e61a..c0e4434 100644 --- a/ai-receipt-generator/tests/test_config_loader.py +++ b/ai-receipt-generator/tests/test_config_loader.py @@ -1,7 +1,7 @@ import pytest import yaml from pathlib import Path -from src.core.config_loader import load_config, validate_config, resolve_api_key +from core.config_loader import load_config, validate_config, resolve_api_key # --- Fixtures --- diff --git a/ai-receipt-generator/tests/test_core.py b/ai-receipt-generator/tests/test_core.py index 56fcf8a..bacf5ce 100644 --- a/ai-receipt-generator/tests/test_core.py +++ b/ai-receipt-generator/tests/test_core.py @@ -1,6 +1,6 @@ import pytest -from src.core.data_generator import generate_receipt_data -from src.core.prompt_renderer import generate_image_prompt +from core.data_generator import generate_receipt_data +from core.prompt_renderer import generate_image_prompt from pathlib import Path import json import math From 8def34765a346d0fb15a619f5bda350d9768eb81 Mon Sep 17 00:00:00 2001 From: Muskan Raghav Date: Wed, 30 Jul 2025 16:41:43 +0530 Subject: [PATCH 3/5] Fix biome lint & format check --- .gitignore | 2 +- ai-invoice-extractor/package-lock.json | 874 ++++++ .../package-lock.json | 2671 +++++++++++++++++ package-lock.json | 6 + 4 files changed, 3552 insertions(+), 1 deletion(-) create mode 100644 ai-invoice-extractor/package-lock.json create mode 100644 ai-invoice-receipt-fraud-detector/package-lock.json create mode 100644 package-lock.json diff --git a/.gitignore b/.gitignore index 60bef2a..62facec 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,6 @@ Thumbs.db *.csv *.js !*.json -package-lock.json +# package-lock.json package.json !index_by_mcp.json \ No newline at end of file diff --git a/ai-invoice-extractor/package-lock.json b/ai-invoice-extractor/package-lock.json new file mode 100644 index 0000000..cfcb1e3 --- /dev/null +++ b/ai-invoice-extractor/package-lock.json @@ -0,0 +1,874 @@ +{ + "name": "ai-invoice-extractor", + "version": "0.3.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ai-invoice-extractor", + "version": "0.3.0", + "license": "MIT", + "dependencies": { + "@ai-sdk/anthropic": "^1.2.12", + "@ai-sdk/google": "^1.2.18", + "@ai-sdk/mistral": "^1.2.8", + "@ai-sdk/openai": "^1.3.22", + "@types/dotenv": "^6.1.1", + "ai": "^4.3.16", + "commander": "^14.0.0", + "dotenv": "^16.5.0", + "figlet": "^1.8.1", + "ollama-ai-provider": "^1.2.0", + "pino": "^9.7.0", + "pino-pretty": "^13.0.0", + "zod": "^3.25.20", + "zod-to-json-schema": "^3.24.5" + }, + "bin": { + "ai-invoice-extractor": "dist/cli" + }, + "devDependencies": { + "@biomejs/biome": "^1", + "@types/figlet": "^1.7.0", + "@types/node": "^22.15.21", + "typescript": "^5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@ai-sdk/anthropic": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@ai-sdk/anthropic/-/anthropic-1.2.12.tgz", + "integrity": "sha512-YSzjlko7JvuiyQFmI9RN1tNZdEiZxc+6xld/0tq/VkJaHpEzGAb1yiNxxvmYVcjvfu/PcvCxAAYXmTYQQ63IHQ==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "node_modules/@ai-sdk/google": { + "version": "1.2.22", + "resolved": "https://registry.npmjs.org/@ai-sdk/google/-/google-1.2.22.tgz", + "integrity": "sha512-Ppxu3DIieF1G9pyQ5O1Z646GYR0gkC57YdBqXJ82qvCdhEhZHu0TWhmnOoeIWe2olSbuDeoOY+MfJrW8dzS3Hw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "node_modules/@ai-sdk/mistral": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@ai-sdk/mistral/-/mistral-1.2.8.tgz", + "integrity": "sha512-lv857D9UJqCVxiq2Fcu7mSPTypEHBUqLl1K+lCaP6X/7QAkcaxI36QDONG+tOhGHJOXTsS114u8lrUTaEiGXbg==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "node_modules/@ai-sdk/openai": { + "version": "1.3.23", + "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-1.3.23.tgz", + "integrity": "sha512-86U7rFp8yacUAOE/Jz8WbGcwMCqWvjK33wk5DXkfnAOEn3mx2r7tNSJdjukQFZbAK97VMXGPPHxF+aEARDXRXQ==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "node_modules/@ai-sdk/provider": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-1.1.3.tgz", + "integrity": "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==", + "license": "Apache-2.0", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ai-sdk/provider-utils": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-2.2.8.tgz", + "integrity": "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "nanoid": "^3.3.8", + "secure-json-parse": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.23.8" + } + }, + "node_modules/@ai-sdk/react": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-1.2.12.tgz", + "integrity": "sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider-utils": "2.2.8", + "@ai-sdk/ui-utils": "1.2.11", + "swr": "^2.2.5", + "throttleit": "2.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/ui-utils": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-1.2.11.tgz", + "integrity": "sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.23.8" + } + }, + "node_modules/@biomejs/biome": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", + "dev": true, + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@types/diff-match-patch": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz", + "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==", + "license": "MIT" + }, + "node_modules/@types/dotenv": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/dotenv/-/dotenv-6.1.1.tgz", + "integrity": "sha512-ftQl3DtBvqHl9L16tpqqzA4YzCSXZfi7g8cQceTz5rOlYtk/IZbFjAv3mLOQlNIgOaylCQWQoBdDQHPgEBJPHg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/figlet": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.7.0.tgz", + "integrity": "sha512-KwrT7p/8Eo3Op/HBSIwGXOsTZKYiM9NpWRBJ5sVjWP/SmlS+oxxRvJht/FNAtliJvja44N3ul1yATgohnVBV0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.16.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", + "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/ai": { + "version": "4.3.19", + "resolved": "https://registry.npmjs.org/ai/-/ai-4.3.19.tgz", + "integrity": "sha512-dIE2bfNpqHN3r6IINp9znguYdhIOheKW2LDigAMrgt/upT3B8eBGPSCblENvaZGoq+hxaN9fSMzjWpbqloP+7Q==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8", + "@ai-sdk/react": "1.2.12", + "@ai-sdk/ui-utils": "1.2.11", + "@opentelemetry/api": "1.9.0", + "jsondiffpatch": "0.6.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", + "license": "Apache-2.0" + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/fast-copy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", + "license": "MIT" + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, + "node_modules/figlet": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.8.2.tgz", + "integrity": "sha512-iPCpE9B/rOcjewIzDnagP9F2eySzGeHReX8WlrZQJkqFBk2wvq8gY0c6U6Hd2y9HnX1LQcYSeP7aEHoPt6sVKQ==", + "license": "MIT", + "bin": { + "figlet": "bin/index.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "license": "MIT" + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/jsondiffpatch": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz", + "integrity": "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==", + "license": "MIT", + "dependencies": { + "@types/diff-match-patch": "^1.0.36", + "chalk": "^5.3.0", + "diff-match-patch": "^1.0.5" + }, + "bin": { + "jsondiffpatch": "bin/jsondiffpatch.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/ollama-ai-provider": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ollama-ai-provider/-/ollama-ai-provider-1.2.0.tgz", + "integrity": "sha512-jTNFruwe3O/ruJeppI/quoOUxG7NA6blG3ZyQj3lei4+NnJo7bi3eIRWqlVpRlu/mbzbFXeJSBuYQWF6pzGKww==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "^1.0.0", + "@ai-sdk/provider-utils": "^2.0.0", + "partial-json": "0.1.7" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/partial-json": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/partial-json/-/partial-json-0.1.7.tgz", + "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", + "license": "MIT" + }, + "node_modules/pino": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.7.0.tgz", + "integrity": "sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.0.0.tgz", + "integrity": "sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.2", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pump": "^3.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^4.0.1", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT" + }, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" + }, + "node_modules/sonic-boom": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/swr": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.4.tgz", + "integrity": "sha512-bYd2lrhc+VarcpkgWclcUi92wYCpOgMws9Sd1hG1ntAu0NEy+14CbotuFjshBU2kt9rYj9TSmDcybpxpeTU1fg==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/throttleit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", + "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + } + } +} diff --git a/ai-invoice-receipt-fraud-detector/package-lock.json b/ai-invoice-receipt-fraud-detector/package-lock.json new file mode 100644 index 0000000..a476651 --- /dev/null +++ b/ai-invoice-receipt-fraud-detector/package-lock.json @@ -0,0 +1,2671 @@ +{ + "name": "ai-invoice-receipt-fraud-detector", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ai-invoice-receipt-fraud-detector", + "version": "0.0.1", + "license": "ISC", + "workspaces": [ + "packages/*" + ], + "dependencies": { + "dotenv": "^16.5.0", + "openai": "^5.1.1", + "pdfjs-dist": "^3.11.174", + "tesseract.js": "^6.0.1", + "typescript": "^5.8.3", + "yargs": "^17.7.2" + }, + "devDependencies": { + "@types/pdf-parse": "^1.1.5", + "@types/yargs": "^17.0.33", + "rimraf": "^6.0.1", + "shx": "^0.4.0", + "tsx": "^4.20.2" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/node": { + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz", + "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/@types/pdf-parse": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/pdf-parse/-/pdf-parse-1.1.5.tgz", + "integrity": "sha512-kBfrSXsloMnUJOKi25s3+hRmkycHfLK6A09eRGqF/N8BkQoPUmaCr+q8Cli5FnfohEz/rsv82zAiPz/LXtOGhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC", + "optional": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/aproba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", + "license": "ISC", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT", + "optional": true + }, + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT", + "optional": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC", + "optional": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT", + "optional": true + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/esbuild": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC", + "optional": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC", + "optional": true + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/idb-keyval": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", + "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", + "license": "Apache-2.0" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "optional": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC", + "optional": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "optional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "optional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "optional": true + }, + "node_modules/nan": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", + "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", + "license": "MIT", + "optional": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openai": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/openai/-/openai-5.10.2.tgz", + "integrity": "sha512-n+vi74LzHtvlKcDPn9aApgELGiu5CwhaLG40zxLTlFQdoSJCLACORIPC2uVQ3JEYAbqapM+XyRKFy2Thej7bIw==", + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "license": "MIT", + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path2d-polyfill": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path2d-polyfill/-/path2d-polyfill-2.0.1.tgz", + "integrity": "sha512-ad/3bsalbbWhmBo0D6FZ4RNMwsLsPpL6gnvhuSaU5Vm7b06Kr5ubSltQQ0T7YKsiJQO+g22zJ4dJKNTXIyOXtA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pdfjs-dist": { + "version": "3.11.174", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.11.174.tgz", + "integrity": "sha512-TdTZPf1trZ8/UFu5Cx/GXB7GZM30LT+wWUNfsi6Bq8ePLnb+woNKtDymI2mxZYBpMbonNFqKmiz684DIfnd8dA==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "canvas": "^2.11.2", + "path2d-polyfill": "^2.0.1" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC", + "optional": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.9.2.tgz", + "integrity": "sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "execa": "^1.0.0", + "fast-glob": "^3.3.2", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/shx": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.4.0.tgz", + "integrity": "sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.8", + "shelljs": "^0.9.2" + }, + "bin": { + "shx": "lib/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "license": "MIT", + "optional": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "optional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tesseract.js": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tesseract.js/-/tesseract.js-6.0.1.tgz", + "integrity": "sha512-/sPvMvrCtgxnNRCjbTYbr7BRu0yfWDsMZQ2a/T5aN/L1t8wUQN6tTWv6p6FwzpoEBA0jrN2UD2SX4QQFRdoDbA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "bmp-js": "^0.1.0", + "idb-keyval": "^6.2.0", + "is-url": "^1.2.4", + "node-fetch": "^2.6.9", + "opencollective-postinstall": "^2.0.3", + "regenerator-runtime": "^0.13.3", + "tesseract.js-core": "^6.0.0", + "wasm-feature-detect": "^1.2.11", + "zlibjs": "^0.3.1" + } + }, + "node_modules/tesseract.js-core": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tesseract.js-core/-/tesseract.js-core-6.0.0.tgz", + "integrity": "sha512-1Qncm/9oKM7xgrQXZXNB+NRh19qiXGhxlrR8EwFbK5SaUbPZnS5OMtP/ghtqfd23hsr1ZvZbZjeuAGcMxd/ooA==", + "license": "Apache-2.0" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tsx": { + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz", + "integrity": "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT", + "optional": true + }, + "node_modules/wasm-feature-detect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz", + "integrity": "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==", + "license": "Apache-2.0" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/zlibjs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/zlibjs/-/zlibjs-0.3.1.tgz", + "integrity": "sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==", + "license": "MIT", + "engines": { + "node": "*" + } + } + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..2b60e31 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "Well", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} From c49417f405966d5e93c76ff5f18f3329cdb82304 Mon Sep 17 00:00:00 2001 From: Muskan Raghav Date: Wed, 30 Jul 2025 17:53:31 +0530 Subject: [PATCH 4/5] Fix biome lint & format check --- .github/workflows/biome-lint-check.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/biome-lint-check.yml b/.github/workflows/biome-lint-check.yml index 1f834da..91d158f 100644 --- a/.github/workflows/biome-lint-check.yml +++ b/.github/workflows/biome-lint-check.yml @@ -23,9 +23,10 @@ jobs: - name: Install Dependencies run: npm ci + working-directory: ai-invoice-extractor - name: Run Biome Check run: npx biome check ai-invoice-extractor --formatter-enabled=false - name: Run Biome Formatter Check - run: npx biome check ai-invoice-extractor --linter-enabled=false + run: npx biome check ai-invoice-extractor --linter-enabled=false \ No newline at end of file From 2114a6b59ccc32c7ad08604c1f0910be0763ad9c Mon Sep 17 00:00:00 2001 From: Muskan Raghav Date: Wed, 30 Jul 2025 19:23:41 +0530 Subject: [PATCH 5/5] Fix CI failure on Linux runners --- .github/workflows/biome-lint-check.yml | 1 - ai-invoice-extractor/package.json | 1 - 2 files changed, 2 deletions(-) diff --git a/.github/workflows/biome-lint-check.yml b/.github/workflows/biome-lint-check.yml index 91d158f..173cdc9 100644 --- a/.github/workflows/biome-lint-check.yml +++ b/.github/workflows/biome-lint-check.yml @@ -23,7 +23,6 @@ jobs: - name: Install Dependencies run: npm ci - working-directory: ai-invoice-extractor - name: Run Biome Check run: npx biome check ai-invoice-extractor --formatter-enabled=false diff --git a/ai-invoice-extractor/package.json b/ai-invoice-extractor/package.json index 9e7c45d..cb4c2e9 100644 --- a/ai-invoice-extractor/package.json +++ b/ai-invoice-extractor/package.json @@ -50,7 +50,6 @@ }, "devDependencies": { "@biomejs/biome": "^1", - "@rollup/rollup-win32-x64-msvc": "^4.45.1", "@types/figlet": "^1.7.0", "@types/node": "^22.16.5", "bun-types": "^1.2.19",