{"_id":"@an5/adapters","_rev":"10-14c29e01dd60a234a8396f056b83b9f8","name":"@an5/adapters","dist-tags":{"latest":"0.2.5"},"versions":{"0.1.0":{"name":"@an5/adapters","version":"0.1.0","keywords":["an5","orm","adapter","typescript","python","dotnet"],"license":"MIT","_id":"@an5/adapters@0.1.0","maintainers":[{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"}],"homepage":"https://github.com/an5ORM/an5Adapters#readme","bugs":{"url":"https://github.com/an5ORM/an5Adapters/issues"},"dist":{"shasum":"6a03f14ba3772f546b97f420e74fb12bb687d8f7","tarball":"https://registry.npmjs.org/@an5/adapters/-/adapters-0.1.0.tgz","fileCount":91,"integrity":"sha512-WJwph2iuCDFrb5Xz0LGd8dBXVOXVQSXlJjeL0+hGFguUcAnl2ZvnvBBD9q43Kix9Wts8l6B68wG74I9SR6LXQA==","signatures":[{"sig":"MEUCIEWa99IBmTZn168+YgJ1ehhPvneubQCR/y1U4zRNvyxQAiEA87nxOSaKxUQ+QuR2KqKwO7nN/cgEdc4D2kdGKeXjfm8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251783},"main":"typescript/index.js","types":"typescript/index.d.ts","exports":{".":"./typescript/index.js","./config":"./typescript/config.js","./dotnet":"./dotnet/An5Adapter.cs","./python":"./python/an5_adapter.py","./typescript":"./typescript/index.js","./typescript/*":"./typescript/*"},"scripts":{"test":"node test/unit.test.js","build":"tsc -p tsconfig.json","test:python":"python -m compileall python 2>&1"},"_npmUser":{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"},"repository":{"url":"git+https://github.com/an5ORM/an5Adapters.git","type":"git"},"_npmVersion":"10.9.4","description":"Standalone language adapters for AN5 ORM - TypeScript, Python, .NET query execution.","directories":{},"_nodeVersion":"24.9.0","dependencies":{"pg":"^8.13.0","mssql":"^12.5.5","googleapis":"^134.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.11.0","typescript":"^6.0.3","@types/node":"^20.11.0","@types/mssql":"^9.1.8"},"_npmOperationalInternal":{"tmp":"tmp/adapters_0.1.0_1785221332941_0.2183350567559581","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@an5/adapters","version":"0.1.1","keywords":["an5","orm","adapter","typescript","python","dotnet"],"license":"MIT","_id":"@an5/adapters@0.1.1","maintainers":[{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"}],"homepage":"https://github.com/an5ORM/an5Adapters#readme","bugs":{"url":"https://github.com/an5ORM/an5Adapters/issues"},"dist":{"shasum":"713ee17587bbfc29cf0896f81e408d1727609e7c","tarball":"https://registry.npmjs.org/@an5/adapters/-/adapters-0.1.1.tgz","fileCount":91,"integrity":"sha512-gsgFvb7hyq6YrLul5tKCEPk/wvxzdBPkOYKh0rGarewqS2etZXCReC7FUbvBG8P8p3IwzTzokPcGrw1Su8nUPg==","signatures":[{"sig":"MEUCICPoMwsbqMr+nRi00/jviv3c2X3uPqj64RSf8b/MUUyCAiEAoogHrxZg+xBSm8cFPVJdZV2ufViY4QrKQsoMnpaEkKM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251797},"main":"typescript/index.js","types":"typescript/index.d.ts","exports":{".":"./typescript/index.js","./config":"./typescript/config.js","./dotnet":"./dotnet/An5Adapter.cs","./python":"./python/an5_adapter.py","./typescript":"./typescript/index.js","./typescript/*":"./typescript/*"},"scripts":{"test":"node test/unit.test.js","build":"tsc -p tsconfig.json","test:python":"python -m compileall python 2>&1"},"_npmUser":{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"},"repository":{"url":"git+https://github.com/an5ORM/an5Adapters.git","type":"git"},"_npmVersion":"10.9.4","description":"Standalone language adapters for AN5 ORM - TypeScript, Python, .NET query execution.","directories":{},"_nodeVersion":"24.9.0","dependencies":{"pg":"^8.13.0","mssql":"^12.5.5","googleapis":"^134.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.11.0","typescript":"^6.0.3","@types/node":"^20.11.0","@types/mssql":"^9.1.8"},"_npmOperationalInternal":{"tmp":"tmp/adapters_0.1.1_1785225549129_0.422615419053018","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@an5/adapters","version":"0.1.2","keywords":["an5","orm","adapter","typescript","python","dotnet"],"license":"MIT","_id":"@an5/adapters@0.1.2","maintainers":[{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"}],"homepage":"https://github.com/an5ORM/an5Adapters#readme","bugs":{"url":"https://github.com/an5ORM/an5Adapters/issues"},"dist":{"shasum":"26beed7f858607cf98de4bc5344a97ea3fa7c71e","tarball":"https://registry.npmjs.org/@an5/adapters/-/adapters-0.1.2.tgz","fileCount":91,"integrity":"sha512-OKfgF1VquuWg7xAVH5MrPNq+ekdEtBfD7K/jLq6pMxtNa1Ct3btGPrxtwcZQJc1awkDavDWJO4JHXAMLvyHY3g==","signatures":[{"sig":"MEYCIQDoSUexk1HVAV3NdSs/PnKFlHqH0MRi8Rx1tn+JPqk9BgIhAObqUfYPIYmM7ktSwDGtJV5bbCkousJylBhyTQqSUwpJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251836},"main":"typescript/index.js","types":"typescript/index.d.ts","exports":{".":"./typescript/index.js","./config":"./typescript/config.js","./dotnet":"./dotnet/An5Adapter.cs","./python":"./python/an5_adapter.py","./typescript":"./typescript/index.js","./typescript/*":"./typescript/*"},"scripts":{"test":"node test/unit.test.js","build":"tsc -p tsconfig.json","test:python":"python -m compileall python 2>&1"},"_npmUser":{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"},"repository":{"url":"git+https://github.com/an5ORM/an5Adapters.git","type":"git"},"_npmVersion":"10.9.4","description":"Standalone language adapters for AN5 ORM - TypeScript, Python, .NET query execution.","directories":{},"_nodeVersion":"24.9.0","dependencies":{"pg":"^8.13.0","mssql":"^12.5.5","googleapis":"^134.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.11.0","typescript":"^6.0.3","@types/node":"^20.11.0","@types/mssql":"^9.1.8"},"_npmOperationalInternal":{"tmp":"tmp/adapters_0.1.2_1785227619096_0.8049237035070138","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@an5/adapters","version":"0.1.3","keywords":["an5","orm","adapter","typescript","python","dotnet"],"license":"MIT","_id":"@an5/adapters@0.1.3","maintainers":[{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"}],"homepage":"https://github.com/an5ORM/an5Adapters#readme","bugs":{"url":"https://github.com/an5ORM/an5Adapters/issues"},"dist":{"shasum":"75b2c5d4207448b6bbbbe0d7c0aa3ae3bb9e3da8","tarball":"https://registry.npmjs.org/@an5/adapters/-/adapters-0.1.3.tgz","fileCount":91,"integrity":"sha512-3naqZn46qZ15L+Rk/SQv6MRqidc/Oq47cjPsh8G/op77RB5lAfE1X0lvvk7cN4sqCYDyOLWT21kWzyt1LEgDdw==","signatures":[{"sig":"MEYCIQDrLzdvDFNniTnH8GsMVKELGuiFrS7qzxuG2eSWu0lNFwIhAJC1OpdNwUHfE96xarHIR6hVBP9VE0f+CGsgbd20rOlR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252256},"main":"typescript/index.js","types":"typescript/index.d.ts","exports":{".":"./typescript/index.js","./config":"./typescript/config.js","./dotnet":"./dotnet/An5Adapter.cs","./python":"./python/an5_adapter.py","./typescript":"./typescript/index.js","./typescript/*":"./typescript/*"},"scripts":{"test":"node test/unit.test.js","build":"tsc -p tsconfig.json","test:python":"python -m compileall python 2>&1"},"_npmUser":{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"},"repository":{"url":"git+https://github.com/an5ORM/an5Adapters.git","type":"git"},"_npmVersion":"10.9.4","description":"Standalone language adapters for AN5 ORM - TypeScript, Python, .NET query execution.","directories":{},"_nodeVersion":"24.9.0","dependencies":{"pg":"^8.13.0","mssql":"^12.5.5","googleapis":"^134.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.11.0","typescript":"^6.0.3","@types/node":"^20.11.0","@types/mssql":"^9.1.8"},"_npmOperationalInternal":{"tmp":"tmp/adapters_0.1.3_1785230162148_0.9864337293423318","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@an5/adapters","version":"0.2.0","keywords":["an5","orm","adapter","typescript","python","dotnet"],"license":"MIT","_id":"@an5/adapters@0.2.0","maintainers":[{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"}],"homepage":"https://github.com/an5ORM/an5Adapters#readme","bugs":{"url":"https://github.com/an5ORM/an5Adapters/issues"},"dist":{"shasum":"c5cc9382fc14c07a34a6c3c98e56c591ddc06d71","tarball":"https://registry.npmjs.org/@an5/adapters/-/adapters-0.2.0.tgz","fileCount":91,"integrity":"sha512-owOUCL66+3k/407rh5NMGzGYiptwCEK1PiNUqtfTqJVAK568GX65OsaHdG8iAz2j3epN6A+tIKgFnea7Q5f3AQ==","signatures":[{"sig":"MEQCICHhJz3hc441g+oeuoc5EKxEQe40RadDono6uIZK0xrhAiAzp2TF3FYOVe76bwQ7ZRWMJFL9QiRDj2nIVA0sCis6+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252149},"main":"typescript/index.js","types":"typescript/index.d.ts","exports":{".":"./typescript/index.js","./config":"./typescript/config.js","./dotnet":"./dotnet/An5Adapter.cs","./python":"./python/an5_adapter.py","./typescript":"./typescript/index.js","./typescript/*":"./typescript/*"},"scripts":{"test":"node test/unit.test.js","build":"tsc -p tsconfig.json","test:python":"python -m compileall python 2>&1"},"_npmUser":{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"},"repository":{"url":"git+https://github.com/an5ORM/an5Adapters.git","type":"git"},"_npmVersion":"10.9.4","description":"Standalone language adapters for AN5 ORM - TypeScript, Python, .NET query execution.","directories":{},"_nodeVersion":"24.9.0","dependencies":{"pg":"^8.13.0","mssql":"^12.5.5","googleapis":"^134.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.11.0","typescript":"^6.0.3","@types/node":"^20.11.0","@types/mssql":"^9.1.8"},"_npmOperationalInternal":{"tmp":"tmp/adapters_0.2.0_1785230582100_0.7448367777577465","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@an5/adapters","version":"0.2.1","keywords":["an5","orm","adapter","typescript","python","dotnet"],"license":"MIT","_id":"@an5/adapters@0.2.1","maintainers":[{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"}],"homepage":"https://github.com/an5ORM/an5Adapters#readme","bugs":{"url":"https://github.com/an5ORM/an5Adapters/issues"},"dist":{"shasum":"2f052de29b513d485588fb0d99c46e3f672e8b13","tarball":"https://registry.npmjs.org/@an5/adapters/-/adapters-0.2.1.tgz","fileCount":91,"integrity":"sha512-RdIH7LwYxrVtTgcqgmZxTxPyM+9cerNUPwXS/1JAIW/9aJgzE1o2YhRzDdTEBps4KWBDFcpEup6AagjkkJZ6qg==","signatures":[{"sig":"MEUCIBVE04kZbEhu7JhRkTGC25JNeqvSY2rc4PaG3PLRJKr8AiEAtuvZf715nS31g3DlGc9iYKa6kOEUaCj8gIO/1MpoaIA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":260896},"main":"typescript/index.js","types":"typescript/index.d.ts","exports":{".":"./typescript/index.js","./config":"./typescript/config.js","./dotnet":"./dotnet/An5Adapter.cs","./python":"./python/an5_adapter.py","./typescript":"./typescript/index.js","./typescript/*":"./typescript/*"},"scripts":{"test":"node test/unit.test.js","build":"tsc -p tsconfig.json","test:python":"python -m compileall python 2>&1"},"_npmUser":{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"},"repository":{"url":"git+https://github.com/an5ORM/an5Adapters.git","type":"git"},"_npmVersion":"10.9.4","description":"Standalone language adapters for AN5 ORM - TypeScript, Python, .NET query execution.","directories":{},"_nodeVersion":"24.9.0","dependencies":{"pg":"^8.13.0","mssql":"^12.5.5","googleapis":"^134.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.11.0","typescript":"^6.0.3","@types/node":"^20.11.0","@types/mssql":"^9.1.8"},"_npmOperationalInternal":{"tmp":"tmp/adapters_0.2.1_1785387568925_0.2688441805883792","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@an5/adapters","version":"0.2.2","keywords":["an5","orm","adapter","typescript","python","dotnet"],"license":"MIT","_id":"@an5/adapters@0.2.2","maintainers":[{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"}],"homepage":"https://github.com/an5ORM/an5Adapters#readme","bugs":{"url":"https://github.com/an5ORM/an5Adapters/issues"},"dist":{"shasum":"fc27af5b5edbe534e54c41e2e77924b878f31e16","tarball":"https://registry.npmjs.org/@an5/adapters/-/adapters-0.2.2.tgz","fileCount":94,"integrity":"sha512-6fBYn6sJdPMUFQseJv3aHJgSpX8iLmLnP+CJOdQ+k5dD9FpJB3nQVEqBuAYWNmSepgO8buEccCDIi6zAbeDDzA==","signatures":[{"sig":"MEYCIQCLVkBaWRmhh5pVU7Z1ezyC4Fs0XJRzrCFWjDPk8sLX+gIhAM1cGiLmGIoAVHzVyvcUa6NGXq0X+MlJs0KdYac3G2uW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":262376},"main":"typescript/index.js","types":"typescript/index.d.ts","exports":{".":"./typescript/index.js","./config":"./typescript/config.js","./dotnet":"./dotnet/An5Adapter.cs","./python":"./python/an5_adapter.py","./browser":"./typescript/browser.js","./typescript":"./typescript/index.js","./typescript/*":"./typescript/*"},"scripts":{"test":"node test/unit.test.js","build":"tsc -p tsconfig.json","test:python":"python -m compileall python 2>&1"},"_npmUser":{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"},"repository":{"url":"git+https://github.com/an5ORM/an5Adapters.git","type":"git"},"_npmVersion":"10.8.2","description":"Standalone language adapters for AN5 ORM - TypeScript, Python, .NET query execution.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"pg":"^8.13.0","mssql":"^12.5.5","googleapis":"^134.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.11.0","typescript":"^6.0.3","@types/node":"^20.11.0","@types/mssql":"^9.1.8"},"_npmOperationalInternal":{"tmp":"tmp/adapters_0.2.2_1785508080509_0.02547958185534771","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@an5/adapters","version":"0.2.3","keywords":["an5","orm","adapter","typescript","python","dotnet"],"author":{"name":"an5ORM"},"license":"MIT","_id":"@an5/adapters@0.2.3","maintainers":[{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"}],"homepage":"https://github.com/an5ORM/an5","bugs":{"url":"https://github.com/an5ORM/an5Adapters/issues"},"dist":{"shasum":"cb60e52877d67eaf3ab0be937c7af5b4be0286bc","tarball":"https://registry.npmjs.org/@an5/adapters/-/adapters-0.2.3.tgz","fileCount":97,"integrity":"sha512-QGpXYqRw27HWpRq4dpp0drZyQdDpGZrNZfxI5/dtNdwJXZNeaw4iOUrt3/V2SiA3NqCcC6F5PEpWkAbPoOyBwg==","signatures":[{"sig":"MEYCIQChm3MkI0L0WZPRIZ8sR8Eq00AsEl/RKZ6qXVzOKJDK7gIhAPc70Eh1ehYpnHV2bc6HT9U3DyKqP9fXjcF3jkgUdJ7m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":277304},"main":"typescript/index.js","types":"typescript/index.d.ts","exports":{".":"./typescript/index.js","./config":"./typescript/config.js","./dotnet":"./dotnet/An5Adapter.cs","./python":"./python/an5_adapter.py","./browser":"./typescript/browser.js","./typescript":"./typescript/index.js","./typescript/*":"./typescript/*"},"scripts":{"test":"node test/unit.test.js","build":"tsc -p tsconfig.json","test:python":"python -m compileall python 2>&1"},"_npmUser":{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"},"repository":{"url":"git+https://github.com/an5ORM/an5Adapters.git","type":"git"},"_npmVersion":"10.9.8","description":"Standalone language adapters for AN5 ORM - TypeScript, Python, .NET query execution.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.0","mssql":"^12.5.5","googleapis":"^134.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.11.0","typescript":"^6.0.3","@types/node":"^20.11.0","@types/mssql":"^9.1.8"},"_npmOperationalInternal":{"tmp":"tmp/adapters_0.2.3_1785574959085_0.051607330328424794","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@an5/adapters","version":"0.2.4","keywords":["an5","orm","adapter","typescript","python","dotnet"],"author":{"name":"an5ORM"},"license":"MIT","_id":"@an5/adapters@0.2.4","maintainers":[{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"}],"homepage":"https://github.com/an5ORM/an5","bugs":{"url":"https://github.com/an5ORM/an5Adapters/issues"},"dist":{"shasum":"a8db18e3cc1bb4285ce801de4a77a6d0e05e40a1","tarball":"https://registry.npmjs.org/@an5/adapters/-/adapters-0.2.4.tgz","fileCount":97,"integrity":"sha512-Zn+P7Edx5lO5+5KhXWcWC3Gkhl1qeOZO7c4sbvVF2m5nVezbsjaoKnHYyrE+X09jnumHJSJ7SLjF35wtnoR7sA==","signatures":[{"sig":"MEQCIDF0DT5oFjPsarjoGuMclCWsWLBAPbMxDcMuvUoFCZ1sAiBCdPyrYZwz3TI2FulhvtMLJwq4QwQ+mOmdy4xbx/k0UA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282615},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./base":"./dist/base/index.js","./mssql":"./dist/mssql/index.js","./mysql":"./dist/mysql/index.js","./base/*":"./dist/base/*","./config":"./dist/config.js","./dotnet":"./dotnet/An5Adapter.cs","./python":"./python/an5_adapter.py","./sqlite":"./dist/sqlite/index.js","./browser":"./dist/browser.js","./postgres":"./dist/postgres/index.js","./typescript":"./dist/index.js","./googlesheets":"./dist/googlesheets/index.js","./typescript/*":"./dist/*","./googlesheets/*":"./dist/googlesheets/*"},"scripts":{"test":"node test/unit.test.js","build":"tsc -p tsconfig.json","test:python":"python -m compileall python 2>&1","build:python":"python -m build --outdir dist-py"},"_npmUser":{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"},"repository":{"url":"git+https://github.com/an5ORM/an5Adapters.git","type":"git"},"_npmVersion":"12.0.1","description":"Standalone language adapters for AN5 ORM - TypeScript, Python, .NET query execution.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"pg":"^8.13.0","mssql":"^12.5.5","googleapis":"^134.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.11.0","typescript":"^6.0.3","@types/node":"^20.11.0","@types/mssql":"^9.1.8"},"_npmOperationalInternal":{"tmp":"tmp/adapters_0.2.4_1785587391183_0.16750736597644345","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@an5/adapters","version":"0.2.5","description":"Standalone language adapters for AN5 ORM - TypeScript, Python, .NET query execution.","license":"MIT","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./browser":"./dist/browser.js","./config":"./dist/config.js","./base":"./dist/base/index.js","./base/*":"./dist/base/*","./mssql":"./dist/mssql/index.js","./postgres":"./dist/postgres/index.js","./mysql":"./dist/mysql/index.js","./sqlite":"./dist/sqlite/index.js","./googlesheets":"./dist/googlesheets/index.js","./googlesheets/*":"./dist/googlesheets/*","./typescript":"./dist/index.js","./typescript/*":"./dist/*","./python":"./python/an5_adapter.py","./dotnet":"./dotnet/An5Adapter.cs"},"author":{"name":"an5ORM"},"homepage":"https://github.com/an5ORM/an5","repository":{"type":"git","url":"git+https://github.com/an5ORM/an5Adapters.git"},"keywords":["an5","orm","adapter","typescript","python","dotnet"],"scripts":{"build":"tsc -p tsconfig.json","build:python":"python -m build --outdir dist-py","test":"node test/unit.test.js && node test/package.test.js","test:python":"python -m compileall python 2>&1"},"dependencies":{"googleapis":"^134.0.0","mssql":"^12.5.5","pg":"^8.13.0"},"devDependencies":{"@types/mssql":"^9.1.8","@types/node":"^20.11.0","@types/pg":"^8.11.0","typescript":"^6.0.3"},"publishConfig":{"access":"public"},"_id":"@an5/adapters@0.2.5","bugs":{"url":"https://github.com/an5ORM/an5Adapters/issues"},"_nodeVersion":"24.17.0","_npmVersion":"12.0.1","dist":{"integrity":"sha512-FHL7ketiRUS9vE3r5vrp1uBvSjYSZWGSMD7qFIcpIx7ZJbMplwFrFbPaj6aP+3rcV/niwj3Ycyu2E/oTf29UzQ==","shasum":"c5a99fd03528f5f7f63ea561a99209c47f94d915","tarball":"https://registry.npmjs.org/@an5/adapters/-/adapters-0.2.5.tgz","fileCount":97,"unpackedSize":284194,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDmUWepRJX9uRltQZVntoTGs7ogjujubCzce9weLU7xjAIgUmYXR6f99YqN6B9GtPs3MGXMkzVsPPxGcSRPhK9sWWU="}]},"_npmUser":{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"},"directories":{},"maintainers":[{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/adapters_0.2.5_1785591747359_0.40462925965408214"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-28T06:48:52.819Z","modified":"2026-08-01T13:42:27.650Z","0.1.0":"2026-07-28T06:48:53.128Z","0.1.1":"2026-07-28T07:59:09.262Z","0.1.2":"2026-07-28T08:33:39.303Z","0.1.3":"2026-07-28T09:16:02.288Z","0.2.0":"2026-07-28T09:23:02.247Z","0.2.1":"2026-07-30T04:59:29.091Z","0.2.2":"2026-07-31T14:28:00.644Z","0.2.3":"2026-08-01T09:02:39.213Z","0.2.4":"2026-08-01T12:29:51.336Z","0.2.5":"2026-08-01T13:42:27.493Z"},"bugs":{"url":"https://github.com/an5ORM/an5Adapters/issues"},"author":{"name":"an5ORM"},"license":"MIT","homepage":"https://github.com/an5ORM/an5","keywords":["an5","orm","adapter","typescript","python","dotnet"],"repository":{"type":"git","url":"git+https://github.com/an5ORM/an5Adapters.git"},"description":"Standalone language adapters for AN5 ORM - TypeScript, Python, .NET query execution.","maintainers":[{"name":"n2flowjs-bot","email":"n2flowjs@gmail.com"}],"readme":"# an5Adapters\r\n\r\nStandalone runtime adapters for AN5 ORM. Provides connection pooling, query execution, typed table clients in TypeScript, Python, .NET, and Google Sheets API.\r\n\r\nAdapters are runtime packages only. They do not import generated `an5Client` artifacts; generated clients or applications can pass model metadata explicitly when table-name mapping or field type coercion is needed.\r\n\r\n## Features\r\n\r\n- **Connection pooling** — Managed connection pools with configurable limits\r\n- **Type-safe table clients** — Generic CRUD operations with type inference\r\n- **Full query support** — WHERE, ORDER BY, pagination, aggregates\r\n- **Vector search** — Cosine, euclidean, and dot product similarity\r\n- **Transactions** — Begin/commit/rollback with automatic cleanup\r\n- **Cross-language** — Same API in TypeScript, Python, and .NET\r\n- **Google Sheets** — Use spreadsheets as a database with the same CRUD API\r\n\r\n## Installation\r\n\r\n### TypeScript\r\n\r\n```bash\r\nnpm install @an5/adapters\r\n```\r\n\r\n### Python\r\n\r\n```bash\r\npip install an5-adapters\r\n```\r\n\r\n### .NET\r\n\r\n```bash\r\ndotnet add package An5Adapters\r\n```\r\n\r\n## Usage\r\n\r\n### TypeScript\r\n\r\n```typescript\r\nimport { createAn5Adapter, setAdapterMetadata } from '@an5/adapters';\r\n\r\nsetAdapterMetadata({\r\n  modelToTable: { User: 'dbo.users' },\r\n  modelFields: {\r\n    User: {\r\n      id: { ts: 'string', sql: 'uniqueidentifier', isId: true },\r\n      active: { ts: 'boolean', sql: 'bit' },\r\n    },\r\n  },\r\n});\r\n\r\nconst db = createAn5Adapter({\r\n  connectionString: 'sqlserver://localhost:1433;database=mydb;user=sa;password=pass',\r\n});\r\n\r\n// Table client\r\nconst users = db.table<User>('users');\r\nawait users.findMany({ where: { active: true }, take: 10 });\r\n\r\n// Raw queries\r\nconst rows = await db.exec('SELECT * FROM users WHERE id = @id', { id: '123' });\r\n\r\n// Transactions\r\nawait db.$transaction(async (tx) => {\r\n  await tx.table('users').create({ data: { name: 'John' } });\r\n});\r\n```\r\n\r\n### Python\r\n\r\n```python\r\nfrom an5_adapter import create_an5_adapter\r\nfrom base.metadata import set_adapter_metadata\r\n\r\nset_adapter_metadata({\r\n    \"modelToTable\": {\"User\": \"dbo.users\"},\r\n    \"modelFields\": {\r\n        \"User\": {\r\n            \"id\": {\"py\": \"str\", \"sql\": \"uniqueidentifier\", \"isId\": True},\r\n            \"active\": {\"py\": \"bool\", \"sql\": \"bit\"},\r\n        }\r\n    },\r\n})\r\n\r\ndb = create_an5_adapter(\"sqlserver://localhost:1433;database=mydb;user=sa;password=pass\")\r\n\r\n# Table client\r\nusers = db.table(\"User\")\r\nusers.find_many(where={\"active\": True}, take=10)\r\n\r\n# Raw queries\r\nrows = db.exec(\"SELECT * FROM users WHERE id = ?\", params=[\"123\"])\r\n\r\n# Transactions\r\ndb.transaction(lambda tx: tx.table(\"User\").create({\"name\": \"John\"}))\r\n```\r\n\r\n### .NET\r\n\r\n```csharp\r\nusing System.Collections.Generic;\r\nusing An5Orm;\r\n\r\nvar db = new An5Adapter(\"sqlserver://localhost:1433;database=mydb;user=sa;password=pass\");\r\n\r\n// Table client\r\nvar users = db.Table<User>(\"dbo.users\");\r\nvar activeUsers = users.FindMany(\r\n    \"IsActive = @p\",\r\n    new Dictionary<string, object> { [\"p\"] = true });\r\n\r\n// Raw queries\r\nvar rows = db.QueryRaw(\"SELECT * FROM users WHERE Id = @id\",\r\n    new Dictionary<string, object> { [\"id\"] = \"123\" });\r\n\r\n// Create / Update / Delete\r\nusers.Create(new User { Name = \"John\", IsActive = true });\r\nusers.Update(existingUser);            // uses the Id property as the key\r\nusers.Delete(\"123\");\r\n\r\n// Transactions (must return a value; use db.Transaction<int> for void-style)\r\ndb.Transaction(tx =>\r\n{\r\n    tx.Table<User>(\"dbo.users\").Create(new User { Name = \"John\" });\r\n    return 0;\r\n});\r\n```\r\n\r\nNote: `QueryRaw`/`FindMany` take parameters as a `Dictionary<string, object>`,\r\nnot anonymous objects. See `dotnet/An5Adapter.cs` for the full API.\r\n\r\n### Google Sheets\r\n\r\n```typescript\r\nimport { createAn5SheetsAdapter } from '@an5/adapters/googlesheets';\r\n\r\nconst db = createAn5SheetsAdapter({\r\n  spreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms',\r\n  // Option 1: client email + private key\r\n  clientEmail: 'sa@project.iam.gserviceaccount.com',\r\n  privateKey: '-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----',\r\n  // Option 2: full service account JSON\r\n  // credentials: { client_email: '...', private_key: '...' },\r\n  // Optional: map model names to sheet names\r\n  sheetMapping: { users: 'UsersData', orders: 'OrdersData' },\r\n});\r\n\r\n// Table client (same API as SQL adapters)\r\nconst users = db.table<User>('users');\r\nawait users.findMany({ where: { active: true }, take: 10 });\r\nawait users.create({ data: { name: 'John', email: 'john@example.com' } });\r\nawait users.update({ where: { email: 'john@example.com' }, data: { name: 'Johnny' } });\r\nawait users.delete({ where: { email: 'john@example.com' } });\r\n\r\n// Raw range access (Google Sheets specific)\r\nconst rawData = await db.readRange('Sheet1!A1:C10');\r\nawait db.writeRange('Sheet1!A1:B2', [['Name', 'Age'], ['Alice', '30']]);\r\nawait db.appendRange('Sheet1!A:A', [['Bob', '25']]);\r\n\r\n// Auto-creates sheet + header row on first create()\r\nawait db.table('orders').create({ data: { id: '1', total: 100 } });\r\n\r\n// List, delete sheets\r\nconst sheets = await db.listSheets();\r\nawait db.deleteSheet('OldSheet');\r\n\r\n// Clear data (keeps headers) or delete all rows\r\nawait db.table('users').clear();\r\nawait db.table('users').deleteAll();\r\n```\r\n\r\n### Browser Mode (Google Sheets)\r\n\r\nFor browser environments (React, Vue, Svelte, Next.js client components), import from `@an5/adapters/browser` and configure `accessToken` or `apiKey`. In browser mode, the adapter uses native `fetch()` without importing Node.js modules (`googleapis`, `crypto`, `fs`).\r\n\r\n```typescript\r\nimport { createAn5SheetsAdapter } from '@an5/adapters/browser';\r\n\r\n// Option 1: OAuth2 Access Token (e.g. from Firebase Auth or Google Sign-In)\r\nconst db = createAn5SheetsAdapter({\r\n  spreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms',\r\n  accessToken: userOAuthAccessToken,\r\n});\r\n\r\n// Option 2: Google API Key\r\nconst db2 = createAn5SheetsAdapter({\r\n  spreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms',\r\n  apiKey: 'AIzaSy...',\r\n});\r\n```\r\n\r\n### Integrated factory (auto-detect adapter)\r\n\r\n```typescript\r\nimport { createAn5Adapter, An5Adapter } from '@an5/adapters';\r\n\r\n// Auto-detects from connection string\r\nconst sqlDb = createAn5Adapter({ connectionString: 'sqlserver://localhost:1433;database=mydb;user=sa;password=pass' });\r\n\r\nconst sheetsDb = createAn5Adapter({\r\n  connectionString: 'googlesheets://spreadsheetId;clientEmail=sa@project.iam.gserviceaccount.com;privateKey=...',\r\n});\r\n\r\n// Or use the Sheets config object directly (also auto-detected)\r\nconst sheetsDb2 = createAn5Adapter({\r\n  spreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms',\r\n  clientEmail: 'sa@project.iam.gserviceaccount.com',\r\n  privateKey: '-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----',\r\n});\r\n\r\n// Constructor form also delegates googlesheets:// to the Sheets adapter\r\nconst sheetsDb3 = new An5Adapter({\r\n  connectionString: 'googlesheets://spreadsheetId;clientEmail=sa@project.iam.gserviceaccount.com;privateKey=...',\r\n});\r\n```\r\n\r\n**Notes:**\r\n- Each model/table maps to a **sheet tab** (first row = headers)\r\n- Sheets without header rows get auto-created on first `create()`\r\n- Type coercion can use optional adapter metadata (`setAdapterMetadata`) for field types and model-to-table mapping\r\n- Numeric strings (without leading zeros) are auto-coerced; `\"00123\"` stays string\r\n- Boolean strings `\"true\"` / `\"false\"` are auto-coerced\r\n- Sheet names with spaces are automatically escaped (A1 notation)\r\n- Supports service account JSON or individual `clientEmail`+`privateKey`\r\n- Automatic retry with exponential backoff for rate limits (429/500/503)\r\n\r\n### Provider Imports\r\n\r\nUse the package root for normal SQL applications:\r\n\r\n```typescript\r\nimport { createAn5Adapter, An5Adapter } from '@an5/adapters';\r\n```\r\n\r\nThe Sheets adapter is exposed from the package root and through its own subpath:\r\n\r\n```typescript\r\nimport { createAn5SheetsAdapter, An5SheetsAdapter, SheetsTableClient, parseSheetsConnectionString } from '@an5/adapters';\r\nimport { An5SheetsAdapter, createAn5SheetsAdapter } from '@an5/adapters/googlesheets';\r\nimport { parseSheetsConnectionString } from '@an5/adapters/googlesheets';\r\n```\r\n\r\nBrowser builds (no Node.js modules) use `@an5/adapters/browser`. The public SQL factory `createAn5Adapter` lives in `typescript/src/an5Adapter.ts` and auto-detects `googlesheets://` connection strings.\r\n\r\n## API Reference\r\n\r\n### An5Adapter / An5SheetsAdapter\r\n\r\n| Method | Description |\r\n|--------|-------------|\r\n| `exec(query, params)` | Execute query, return rows (SQL only) |\r\n| `table<T>(name)` | Get typed table client |\r\n| `$transaction(fn)` | Execute in transaction |\r\n| `$connect()` | Open connection / authenticate |\r\n| `$disconnect()` | Close connection / clear auth |\r\n| `readRange(range)` | Read raw sheet range (Sheets only) |\r\n| `writeRange(range, values)` | Write raw sheet range (Sheets only) |\r\n| `appendRange(range, values)` | Append rows to sheet (Sheets only) |\r\n| `listSheets()` | List all sheet tab names (Sheets only) |\r\n| `deleteSheet(name)` | Delete a sheet tab (Sheets only) |\r\n\r\n### AdapterTableClient / SheetsTableClient\r\n\r\n| Method | Description |\r\n|--------|-------------|\r\n| `findMany(args)` | Query multiple rows |\r\n| `findFirst(args)` | Query single row |\r\n| `findUnique(where)` | Find by unique key |\r\n| `count(where)` | Count rows |\r\n| `create(data)` | Insert row |\r\n| `createMany(data)` | Bulk insert |\r\n| `update(where, data)` | Update row |\r\n| `updateMany(where, data)` | Update multiple rows |\r\n| `delete(where)` | Delete row |\r\n| `deleteMany(where)` | Delete multiple rows |\r\n| `upsert(where, create, update)` | Insert or update |\r\n| `aggregate(args)` | SUM, AVG, MIN, MAX, COUNT |\r\n| `groupBy(args)` | Group by fields |\r\n| `vectorSearch(args)` | Semantic similarity search |\r\n| `clear()` | Clear all data rows, keep headers (Sheets only) |\r\n| `deleteAll()` | Delete all data rows including headers (Sheets only) |\r\n\r\n## Provider Layout\r\n\r\n- TypeScript source providers live under `typescript/src/{base,mssql,postgres,mysql,sqlite,googlesheets}`; `npm run build` compiles them into `dist/` (also exposed via `@an5/adapters/base`, `@an5/adapters/mssql`, … subpaths).\r\n- Python providers live under `python/{base,mssql,postgres}`, with `python/an5_adapter.py` kept as the public facade. `npm run build:python` (or `python -m build --outdir dist-py`) builds the package into `dist-py/`.\r\n- .NET providers live under `dotnet/{Base,Mssql,Postgres}`, with `dotnet/an5Adapter.cs` kept as the public facade.\r\n- Adapters do not depend on generated `an5-client` artifacts; generated clients may pass metadata in explicitly when they need model/table mapping.\r\n\r\n## Testing\r\n\r\n```bash\r\n# TypeScript/Node\r\nnode test/unit.test.js\r\n\r\n# Python\r\npython -m compileall python\r\npython test/smoke.py\r\n```\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}