{"_id":"pushduck","_rev":"25-3774c34baa16e443b47e00cca88a221e","name":"pushduck","dist-tags":{"beta":"0.1.23-beta.0","latest":"0.7.0"},"versions":{"0.1.1":{"name":"pushduck","version":"0.1.1","keywords":["nextjs","s3","minio","upload","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","express","hono","fastify","elysia","framework-agnostic"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.1","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.abhayramesh.com","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"06bc8a3ff9a86683d7a2591ca513965b56cfce86","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.1.tgz","fileCount":33,"integrity":"sha512-BbmJFApEqm/1a8yBLQcgfiQcqwUKr/wrZYY/G26BPKXpz7OaPmxwbl4YUPQQLZMbRVcwR4wOVcX4KoZxQVM5LQ==","signatures":[{"sig":"MEQCIApyC28zxGlOoOVHqGPa14aNqeDlHDb1fru8stqksMeyAiBtpDYwNGYyNbBaGq6LFGO0DTYpjGErKfOXjAeCDY/gew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":216259},"main":"./dist/index.js","type":"module","_from":"file:pushduck-0.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","release:patch":"pnpm changeset add --type patch && pnpm changeset version && pnpm changeset publish","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","release:preview":"pnpm changeset status","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","release:snapshot":"pnpm changeset version --snapshot && pnpm changeset publish --tag snapshot","release:changeset":"pnpm changeset && pnpm changeset version && pnpm changeset publish","maintenance:health":"./scripts/health-check.sh","validate-changesets":"node ./scripts/changeset-validator.cjs"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"_resolved":"/tmp/ab9044f750491e56965b1840cade5693/pushduck-0.1.1.tgz","_integrity":"sha512-BbmJFApEqm/1a8yBLQcgfiQcqwUKr/wrZYY/G26BPKXpz7OaPmxwbl4YUPQQLZMbRVcwR4wOVcX4KoZxQVM5LQ==","repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"A simple way to upload files to S3 from a Next.js app directory (aws s3, minio, or any s3 compatible service)","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^8.57.1","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.1_1750755229876_0.20512154473255695","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"pushduck","version":"0.1.7","keywords":["nextjs","s3","minio","upload","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","express","hono","fastify","elysia","framework-agnostic"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.7","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"003c699f911a239df6a0882ab55df14bb66cfecc","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.7.tgz","fileCount":32,"integrity":"sha512-YfNvZj+1xBLrz2xP9+V8QcQlel6RCMc6THQg1NhvvmWTioReGJApkpOL/8PYM9zioFsHvamwn1H/cGzVOgwOgQ==","signatures":[{"sig":"MEUCIBnAd5ozsF/rhl04poP/cGKXmNHou26qhxZKdC0qjy98AiEAwbDeIFBAfIhisRfOjtH98tljBFKforBw5KUHjkh6GKs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214793},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"gitHead":"03756c5af9687251902a59db2c6b8c9c64261b36","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"11.2.0","description":"A simple way to upload files to S3 from a Next.js app directory (aws s3, minio, or any s3 compatible service)","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^8.57.1","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.7_1750854309142_0.14946643280582084","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"pushduck","version":"0.1.8","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.8","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"01e5896c7efd7ffc67e946675bd451ed87c4cd1e","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.8.tgz","fileCount":32,"integrity":"sha512-wKKlw0Fuc6hGlnTFluileyodsMtGgl728DaHLnpLeYiotnIMoJ1F+gzxBr28Btntge/moIr00Q6azdW95acP8Q==","signatures":[{"sig":"MEUCIAduiuYx4mzh1L9YrJNQNs/Fa4GkxR6KKVv3U1yF6ZIPAiEA07Xssp5ClkQGTVRVZtU9tcgDj+ai//OOb/rOOQI52CM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":215539},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"6b299be22cc7729b98bb4d29df49afd611aaf634","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^8.57.1","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.8_1750924180754_0.5444772023298252","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"pushduck","version":"0.1.10","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.10","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"75c8aea229df17af5ac5b55eaf2a11ac1592a0b8","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.10.tgz","fileCount":32,"integrity":"sha512-VKJFiKXGZ10/FOxLImikoDk91bLtia3ZYwDBpfcuDmIylumAHiBnBprGb3lgBk739rphzjLyH5NxeFXbO99j5Q==","signatures":[{"sig":"MEUCIG2caafIjyxGQ15M5CWveBxlrJaFCn0qe+vRgbL8oMP+AiEAxvWyyUxaptAv4csRc6RDwFGzQR4TGyL1vRHswUoPhtw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":215540},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"57f11be3f580d5bd83a59662d3da55040b3605c5","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^8.57.1","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.10_1750925820690_0.213744446059833","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"pushduck","version":"0.1.11","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.11","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"846f4a4d36e6e8dd5443fabf40ac35c7aa80c187","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.11.tgz","fileCount":32,"integrity":"sha512-kh5qKuY7tFzojDPIszt7FwZrn6JUx4kmtHHoRMkx3bB6KtTJzA3rp11UM4aevbnbKHdHoFgR2VougeEQ/GGvtg==","signatures":[{"sig":"MEUCIQCrB7S6Kn2vROxL58+WeVFlexprKvgCIgAEplGM6OtiywIgKckqey2knd3gNaro/Vzy27nUCUnRKGZXeMi7wGoXtPY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":215518},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"a6c9b5f8afbe6e71bfcdd404bacda5d25f54e7ec","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^8.57.1","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.11_1750926556306_0.035441837889308214","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"pushduck","version":"0.1.12","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.12","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"93e299bf778c5301785bcf7593e8524397f08526","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.12.tgz","fileCount":32,"integrity":"sha512-J5dJZWkrEnqVwbywtSMGxr3HYfWeIWbVjfdk3akyzP+P5W8mUvgsWJ8tCI6S7FlJIMCatoDOmNKBQdySbx78JQ==","signatures":[{"sig":"MEUCIHMC22FLpz+h8z/yBKwtVFYRy0N+uyLVQ4ATFTFXwDPEAiEAg+Q7SyJaRq+QuMMWn1DbdcmxkPJrn1jzcycYET6euIU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":215540},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"1bb5839d1a78f3800d987f89de8388e047a9e439","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^8.57.1","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.12_1750927020699_0.17644472279930445","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"pushduck","version":"0.1.13","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.13","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"67c909b6cdb22040cf47835eee633226d8004f8e","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.13.tgz","fileCount":32,"integrity":"sha512-KLDEVAKjBGjvf/9GH0NdifWBky2BKn++w+Xj1lTp7cgD00LXUJMpKIbAryzt6MNq4FmcsZhCQyHmvE64CkAuGA==","signatures":[{"sig":"MEQCIDvbEaeYKyL2B+03i2rWoy37IvznYpEDSo57jo6muZL+AiAZp/vIvAEQpvARfItdTomO6+GGqnJalLFHhiBXy9qq2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":215540},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"282dd95710871745dd90da77f48a310a4265eb63","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^8.57.1","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.13_1750928125692_0.04975613326885231","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"pushduck","version":"0.1.14","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.14","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"cf7a5eb0a31a3053207885e48ff3c67ea85d7703","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.14.tgz","fileCount":31,"integrity":"sha512-RsA3i5fGAKuXLBwxJfc9g2M8I48eRH8axTz6TEaKWQVk2mfwvjxpELeCg0TBykzDK7imYXtV8FWWEBVslMEX2Q==","signatures":[{"sig":"MEYCIQDOdOj2VnR/EliVLxhRIfX5qwhnft8Nf611R/FY9Q+X8wIhAIkhYo+tj6Z3+/Wel9Lieo+xYdtwQv4LuRQSoZZ2K4/i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":215405},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"966b5bda182af5ab4be54e9de39af9d483537050","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^8.57.1","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.14_1750933824619_0.5902065481535079","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"pushduck","version":"0.1.15","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.15","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"abb527c3ddd6467b713b3831554af1f10cf6945f","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.15.tgz","fileCount":31,"integrity":"sha512-8iUYK07qJa0ZxNTxCkpn2QUdR403XRqa0rQKXCGYcYTLbh2mG1VE8zPHp3bIT5UI9H5rnNLRwBsEaI5k3MwQbw==","signatures":[{"sig":"MEQCIBn30x5D7Ili96Ks081rkyTg/IUD9NnRarEY2qLPmD0NAiA/NsSfdrIEVqVmYqAKvXQAcSlj3ehnI5IVjaF2B+8aNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":228455},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"49aa99bbcd7f202982e7b46c163dec3846c3f4cf","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^8.57.1","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.15_1751082770986_0.20719163158702592","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"pushduck","version":"0.1.16","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.16","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"89de7822b7de8ffa20342ec46e7812df8209e700","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.16.tgz","fileCount":31,"integrity":"sha512-o6C+ERj3uBLsSMKhzv5TH73qdOqF5UxxTBe5T90PGJOiV3BpKQodN/RQfrj2fFq2MurVdvbVLJ0qCLAIdQz5uQ==","signatures":[{"sig":"MEUCIHCV65oul4N8UpAEVsr1IXonI/qHo/3m60KK5QR31q4vAiEAg0T0buOZBhefRSVm5L7kxTHIAxox0DP3gTiOOe+lrkU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":228455},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"0d04b2abf46d4289c39d83afa1d33567b6883783","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^8.57.1","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.16_1751308708320_0.5289928718806767","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"pushduck","version":"0.1.17","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.17","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"7fbf5c85fe7d60d92bc5ce8a72542c70a23a9244","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.17.tgz","fileCount":31,"integrity":"sha512-rmGKcqU0HS5x48Fbhui/y8xqSgD7we9J3nZnGS9mN2KvHpGie12XwjpfYyuxNarO7LaKRnrdDpMsbp7bH9KdNA==","signatures":[{"sig":"MEUCIG6z+zMOOJbPnqtXSybp+xvMyntwvfdIC9/MdoiFhtyDAiEA9i9KMCm3KcKVU0YSLHC2yVrP5jMDEGaDTZRWcl2BVsE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":229846},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"fc6a5611f56f650c2834a0c0cc5686f3d2d3978b","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^9.30.0","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.17_1751434836799_0.018483796297450672","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"pushduck","version":"0.1.18","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.18","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"3088cee9af27a9861b1dd85b33a303470df8a9b9","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.18.tgz","fileCount":31,"integrity":"sha512-F/7WeGc8m20/rpe9wDSrwpILMSAXuCR9F5we5pu3/3wClc5UrXy9AvUxwZ8Mkmn/eAS4rbqvXh/bW3vT0X8XHA==","signatures":[{"sig":"MEQCIEXndVuPjU8zdFDFVccIH27LGVvUZLS3nrqSfi90b1rCAiAIZef9AKI2MS1dIFtBGVw1W8++Lesm9aOYlXcawJ0TmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":230914},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"4987834cbcae2e5b217817e10d124659555765e8","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^9.30.0","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^4.18.2","fastify":"^4.0.0","prettier":"^3.0.3","happy-dom":"^15.11.7","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^4.17.21","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.18_1751695737208_0.836402581567351","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"pushduck","version":"0.1.19","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.19","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"f45c59c25adc0243cfa21dac2fc15807ca5408fb","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.19.tgz","fileCount":31,"integrity":"sha512-a5gdzeepDY82VWSIxbitgxuWzBgBxpT67r/tV5POzAX1PFJr2M+Rlqky1sbQpDlg/LdTAlEcfRm+Wvt6ZOVyWw==","signatures":[{"sig":"MEUCIQD9r7ndVCbFu5/DLpl02Kj9BG1WLdO7RsBoRarJZ6tSyAIgRyYfbfmF/ANcdah+92KYrVNTE3zSvaKNXTgXl7JZ8Lc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":232834},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"7f08880317ba66e072edba74cb42e9492e6764ee","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^9.30.0","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^5.1.0","fastify":"^5.4.0","prettier":"^3.6.2","happy-dom":"^18.0.1","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^5.0.3","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.19_1751706393961_0.8234072139944149","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"pushduck","version":"0.1.20","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.20","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"7a962547fbb596cfe181a58c998059124294acec","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.20.tgz","fileCount":31,"integrity":"sha512-mhB/pI65MsuerFxjGM3BeYNSJx1sgfP3WaXuQgg2lp4iv6rrQhrS8EZbXgeaaz+iqKcsTE2fYVskVZt2BFeEBQ==","signatures":[{"sig":"MEYCIQDsQsM58P27pmw3gBjr2/A6VZFuiXLCyJ0oYCgO5DAvYQIhANuPB7nRaMQrGQxrEWSzDE53Dt+rTiGKNnL8j0qdcnmb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":232820},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"5c8a1e033e96879dbaa75e304d5d497f3de48b7b","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^9.30.0","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^5.1.0","fastify":"^5.4.0","prettier":"^3.6.2","happy-dom":"^18.0.1","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^5.0.3","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.20_1751732540464_0.5952468369818","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"pushduck","version":"0.1.21","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.21","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"115ef9b64bcd2d49e16362509d820533efb1a126","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.21.tgz","fileCount":31,"integrity":"sha512-9fA/O9VneC1ToQU4gCSgfQg3tP3h1vNYSPRccD1QSvms3F63eAjjnd4/gk9HKDiUWPHFIXEY3R2g9+6AmzdtSg==","signatures":[{"sig":"MEUCIQD4BZDZE9m5k5ZInaF0NF/WvbR9nL+Q9zfYuRzMIe5WJwIgAwbGPFXluzq0ckBCtRmURFpL89/4gvSqvpfiDhHdT/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":232901},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"0fbd7cdc07dd0627aad01ff908f75ef75b21d0fb","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","actor":{"name":"abhay-ramesh","type":"user","email":"ramesh.abhay14@gmail.com"},"email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.3","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","next":"^15.3.4","react":"^19.1.0","eslint":"^9.30.0","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^5.1.0","fastify":"^5.4.0","prettier":"^3.6.2","happy-dom":"^18.0.1","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^5.0.3","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.35.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.1"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.21_1752176260902_0.5816902909893054","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"pushduck","version":"0.1.22","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.22","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"a43e760c0f6c2d0b40b57c7b8abf89a981f7e7ae","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.22.tgz","fileCount":31,"integrity":"sha512-u16C2O8O4ZTIOEc2sHHJSfv/TmKV5v5zuvxR5rXeSQjqqSmDTdb3hY7Q87/qXZo7NLbge5Hn+kdvWUs7ettvnA==","signatures":[{"sig":"MEQCIGIQmbb5JpV/4ejCOUfTKA/j8jh+BDKbqg2v1f2cCR/DAiB80erBl23KgWMUY9pqLpU7oLvDCK7a9Qrwrz5ZBDsEbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":233083},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.mjs","require":"./dist/adapters/index.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"db85de04492d8e0f7a3f1f450aeb0e1516f81991","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.3","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.0.5","next":"^15.3.4","react":"^19.1.0","eslint":"^9.30.0","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^5.1.0","fastify":"^5.4.0","prettier":"^3.6.2","happy-dom":"^18.0.1","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^5.0.3","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.36.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.1"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.22_1753008808073_0.07001392955547048","host":"s3://npm-registry-packages-npm-production"}},"0.1.23-beta.0":{"name":"pushduck","version":"0.1.23-beta.0","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.1.23-beta.0","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"fbd5b8eff31b11edf6c09e69d265494196b18314","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.1.23-beta.0.tgz","fileCount":31,"integrity":"sha512-yKJeDuLK12q3e/jdqlVRH8y8BFWA/6VyyykZUItU5Q+EnJ/LH/bOzbuiUfqoe72dvmJmVdUfSnLiaskH8kdtpw==","signatures":[{"sig":"MEQCIBtwc3Vruln8NvOz2nKyYhcQXn2NSDtk3ATSx1buf/E8AiBHqp5XglYeNheu6FM4/1J0UBytNnLAehMpFqy3z/6NSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.1.23-beta.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":359210},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.mjs","require":"./dist/adapters/index.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"aa5d133e1ba96c40aae569ff0458a07373cf8c59","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.4","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"zod":"^4.0.5","next":"^15.3.4","react":"^19.1.0","eslint":"^9.30.0","tsdown":"^0.12.8","vitest":"^3.2.4","express":"^5.1.0","fastify":"^5.4.0","prettier":"^3.6.2","happy-dom":"^18.0.1","typescript":"^5.2.2","@types/node":"^24.0.3","@types/react":"^19.1.8","gzip-size-cli":"^5.1.0","@types/express":"^5.0.3","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^4.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.36.0","@testing-library/user-event":"^14.5.1","@typescript-eslint/eslint-plugin":"^8.35.1"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.1.23-beta.0_1753339655275_0.17352616381228225","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"pushduck","version":"0.2.0","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.2.0","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"b5a451fcae4be0cf9c96f92575d8e5b0a4b25a16","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.2.0.tgz","fileCount":31,"integrity":"sha512-tnKyBQnJ98EYGP2xpOmAkglDV3jGozlC5Yl3uTpUr3mkhtOKPu3BaxJ6mVPpoco3+Em0Zv1+JvKjH4KNN/zFpw==","signatures":[{"sig":"MEUCIA8LbBCPJZ96r2ZRrtaUvKDSFongHyv9yf+0o68gGgnPAiEA0JOOcrt/OCBwdX+iLIEDAQIFi2V1u/K4i8a0/kyD9vY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":375067},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.mjs","require":"./dist/adapters/index.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"fa52ddf8cbb7efab0e2f12cb5a78b3e32702a09b","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.1.12","next":"^15.5.4","react":"^19.2.0","eslint":"^9.37.0","tsdown":"^0.15.6","vitest":"^3.2.4","express":"^5.1.0","fastify":"^5.6.1","prettier":"^3.6.2","happy-dom":"^19.0.2","typescript":"^5.9.3","@types/node":"^24.7.0","@types/react":"^19.2.2","gzip-size-cli":"^5.1.0","@types/express":"^5.0.3","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^5.0.4","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.46.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.2.0_1759838200019_0.43964368031472345","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"pushduck","version":"0.2.1","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.2.1","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"0575499378c95af72091103813c88d4353656950","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.2.1.tgz","fileCount":30,"integrity":"sha512-nXK/M+829m1kY0goAcq78EJqZoi5S1smtj1S+yy/TSqFZg4lUaHkr1zZnZVOfzhSyID8nkiy8R93Z1Ywxwtelg==","signatures":[{"sig":"MEUCIQCHavki+FSJKOBaOiZ4EpN3e29CwEjLRqvSYNmP4YCKFgIgN62j8YFXZN7gS7rmf2AafTizno+AWqaF4TBOvzwJj3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":372603},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.mjs","require":"./dist/adapters/index.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"3f98e56ba54f6e9babf2ad4078fdb286914d2389","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\n📁 File Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"The fastest way to add file uploads to any web application. Enterprise security, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.1.12","next":"^15.5.6","react":"^19.2.0","eslint":"^9.39.1","tsdown":"^0.16.1","vitest":"^4.0.10","express":"^5.1.0","fastify":"^5.6.1","prettier":"^3.6.2","happy-dom":"^20.0.7","typescript":"^5.9.3","@types/node":"^24.10.0","@types/react":"^19.2.2","gzip-size-cli":"^5.1.0","@types/express":"^5.0.3","@vitest/coverage-v8":"^4.0.10","@vitejs/plugin-react":"^5.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.2","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.2.1_1763653833816_0.8653636163155771","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"pushduck","version":"0.3.0","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.3.0","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"9919eb298c94bc58a83c0e2bcd25339dd3f148c6","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.3.0.tgz","fileCount":30,"integrity":"sha512-zvNgLQAM5dTUF/UYP46CdneN83tkT2AW6RXNiQeM7H6CHZV4iHqdoOg4yEPTJQ4SFhoPPG2ImIu0b9xTIkazsA==","signatures":[{"sig":"MEUCICCFTqZP2wef1Wt93PZTdtfvlwvNmE4AaJqpdfm1gEiIAiEAi3bYfr/TgbcEgEJdsydrO5zYQcJvd/rq6UNUuzU0iuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":372783},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.mjs","require":"./dist/adapters/index.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"5ec4ef8a05fbc066c46c5644994c607154a02633","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\nFile Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"Add file uploads to any web application. Secure, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.1.12","next":"15.5.9","react":"^19.2.0","eslint":"^9.39.1","tsdown":"^0.16.1","vitest":"^4.0.10","express":"^5.2.1","fastify":"^5.6.1","prettier":"^3.6.2","happy-dom":"^20.0.7","typescript":"^5.9.3","@types/node":"^24.10.9","@types/react":"^19.2.2","gzip-size-cli":"^5.1.0","@types/express":"^5.0.6","@vitest/coverage-v8":"^4.0.10","@vitejs/plugin-react":"^5.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.2","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.3.0_1769280561674_0.4051816790267586","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"pushduck","version":"0.3.1","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.3.1","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"6505c357b5fd3711dd5fe618f8bd11121777dd88","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.3.1.tgz","fileCount":30,"integrity":"sha512-x+cawKnX7sK1EMsigZNcexT+mhTe0BHK/ZF8EdrNVqOjIslsIOyLXPkugwroor25JiUkuoMIYKGShNN4fE+wlw==","signatures":[{"sig":"MEUCICDHa3tDmvArtarVdmckf5ADqZYh0Siq66ZxGS3TnR7/AiEAiuyoDJgoId3svbRJIgYKSo8amTl30ae7ScigAaMIMgA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":373015},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.mjs","require":"./dist/adapters/index.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"9fc0ac859775ab3ba7bba7aa4af14c0069d5b0b3","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\nFile Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"Add file uploads to any web application. Secure, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.1.12","next":"15.5.9","react":"^19.2.0","eslint":"^9.39.1","tsdown":"^0.16.1","vitest":"^4.0.10","express":"^5.2.1","fastify":"^5.6.1","prettier":"^3.6.2","happy-dom":"^20.0.7","typescript":"^5.9.3","@types/node":"^24.10.9","@types/react":"^19.2.2","gzip-size-cli":"^5.1.0","@types/express":"^5.0.6","@vitest/coverage-v8":"^4.0.10","@vitejs/plugin-react":"^5.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.2","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.3.1_1770322795489_0.29957273999732603","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"pushduck","version":"0.4.0","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.4.0","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"a17df09eff879d419c0a483fbf8293712e8c3186","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.4.0.tgz","fileCount":28,"integrity":"sha512-CCMRPyTyJpJHwAqO2L09YFdSZLEP0fOugYIoWNJmRXSC90pmYBBV4i492a15XV8LBI4hm2s+5FSXEQzyNfMk/A==","signatures":[{"sig":"MEUCIQCs7sm+3U0iKmmr+G5M8/KsWkPT36laU4cMS3pCwYOtbAIgFywQYkeni44F2+DYXsmSfunss6SF/ZFKgZ4uRqse6ec=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":379710},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.mjs","require":"./dist/adapters/index.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"c218dcc277250380f63c11bb5f9da677b5e92b00","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\nFile Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"Add file uploads to any web application. Secure, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","next":"15.5.9","react":"^19.2.0","eslint":"^9.39.1","tsdown":"^0.20.3","vitest":"^4.0.10","express":"^5.2.1","fastify":"^5.7.4","prettier":"^3.8.1","happy-dom":"^20.6.1","typescript":"^5.9.3","@types/node":"^24.10.9","@types/react":"^19.2.2","gzip-size-cli":"^5.1.0","@types/express":"^5.0.6","@vitest/coverage-v8":"^4.0.10","@vitejs/plugin-react":"^5.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.55.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.55.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.4.0_1773219976995_0.16779865119984216","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"pushduck","version":"0.5.0","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.5.0","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"643bbe881b43f0e5d1fb78042f9c5c24f0671dcd","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.5.0.tgz","fileCount":36,"integrity":"sha512-LgLADwixMgl2I9YUPR6envHJA+LLj9FzH4EmTf7RYWKBrXjReMJjKksQ5m01B6tUn9yL09tzINUsz9+jUphaTg==","signatures":[{"sig":"MEUCIEkodtcrbuhinoYjyHQYpAqVS7Vu6tcfRMijLkZFguAfAiEAix1EaLKDqRZTSg3fh5jG+V/JlbxATFrwdFrLGJ/3Wrw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":393475},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.mjs","require":"./dist/adapters/index.js"},"./react-native":{"types":"./dist/react-native.d.ts","import":"./dist/react-native.mjs","require":"./dist/react-native.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"398290793ac326d5c886ed8d2ddd58daa4e1bf34","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\nFile Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"Add file uploads to any web application. Secure, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","next":"15.5.9","react":"^19.2.0","eslint":"^9.39.1","tsdown":"^0.20.3","vitest":"^4.0.10","express":"^5.2.1","fastify":"^5.7.4","prettier":"^3.8.1","happy-dom":"^20.6.1","typescript":"^5.9.3","@types/node":"^24.10.9","@types/react":"^19.2.2","gzip-size-cli":"^5.1.0","@types/express":"^5.0.6","@vitest/coverage-v8":"^4.0.10","@vitejs/plugin-react":"^5.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.55.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.55.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.5.0_1775324499402_0.13330747394696818","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"pushduck","version":"0.6.0","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"author":{"name":"Abhay Ramesh"},"license":"MIT","_id":"pushduck@0.6.0","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"homepage":"https://pushduck.dev","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"a0b1fcd159a0b818f82a5b8dcea14d9cc639d7b7","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.6.0.tgz","fileCount":36,"integrity":"sha512-r10qgVFy3uvyw7lnGIOZ4INA+gzmwizAMmio7CnNEgY/mUzVBaQ3RtDy5xrS0nM+n+lxevjuiyOuk1WgRG4wgA==","signatures":[{"sig":"MEUCIQCJB9Yzam3uluHHT54O+/ZMbs23BD1Vol1U8KpHsMX/qwIgElnMWOf7hGzlGXorrZMKPhDk7Dyv9kiQ5czU9jeKHhM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":399487},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.mjs","require":"./dist/server.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.mjs","require":"./dist/adapters/index.js"},"./react-native":{"types":"./dist/react-native.d.ts","import":"./dist/react-native.mjs","require":"./dist/react-native.js"},"./adapters/nextjs":{"types":"./dist/adapters/nextjs.d.ts","import":"./dist/adapters/nextjs.mjs","require":"./dist/adapters/nextjs.js"},"./adapters/express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.mjs","require":"./dist/adapters/express.js"},"./adapters/fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.mjs","require":"./dist/adapters/fastify.js"},"./adapters/nextjs-pages":{"types":"./dist/adapters/nextjs-pages.d.ts","import":"./dist/adapters/nextjs-pages.mjs","require":"./dist/adapters/nextjs-pages.js"}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"413637a48845583b446fdf188f5d5ed3c1f005be","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest","build":"tsdown","clean":"rm -rf dist","test:ui":"vitest --ui","lint:fix":"eslint src --fix","size-check":"node scripts/size-check.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest --coverage","bundle:analyze":"pnpm size-check && echo '\nFile Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.js --open","maintenance:deps":"./scripts/update-deps.sh","maintenance:health":"./scripts/health-check.sh"},"_npmUser":{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"},"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.8.2","description":"Add file uploads to any web application. Secure, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","next":"15.5.9","react":"^19.2.0","eslint":"^9.39.1","tsdown":"^0.20.3","vitest":"^4.0.10","express":"^5.2.1","fastify":"^5.7.4","prettier":"^3.8.1","happy-dom":"^20.6.1","typescript":"^5.9.3","@types/node":"^24.10.9","@types/react":"^19.2.2","gzip-size-cli":"^5.1.0","@types/express":"^5.0.6","@vitest/coverage-v8":"^4.0.10","@vitejs/plugin-react":"^5.1.0","@testing-library/react":"^16.3.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.55.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^8.55.0"},"peerDependencies":{"zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","express":">=4.18.0","fastify":">=4.0.0","@types/express":"*"},"peerDependenciesMeta":{"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pushduck_0.6.0_1775593492469_0.9334357392428774","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"_id":"pushduck@0.7.0","bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"dist":{"shasum":"9d81d25a65409b4add6f634105b842b4ccc99b2f","tarball":"https://registry.npmjs.org/pushduck/-/pushduck-0.7.0.tgz","fileCount":74,"integrity":"sha512-JtH9ek8EjPFP/S0ZZyy20pLgpcM771ghpxxV1xQr1CDKuMJ3Ss7+3NsJm90SPngsXDzxQ+pl9iXGEQU2KBSQ+w==","signatures":[{"sig":"MEYCIQCmfM5ukfBEoV+xkq1EI3jX6i3796HFjMlfMO2sxVNkRwIhAIGB9duxK871/A+psLM072o8c6TDjPBeAAoL1nwjwatf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDbbwEejFDWkOa1M3zFLHR5BSUMaki+ybgmPsPMNqfUGgIgDudWBAfQL3UHP8MjvM+Ri/rGzNBdBrkZzHGXASauXuw="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pushduck@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":628266},"main":"./dist/index.cjs","name":"pushduck","type":"module","types":"./dist/index.d.cts","author":{"name":"Abhay Ramesh"},"module":"./dist/index.mjs","engines":{"npm":">=8.0.0","node":">=16.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./vue":{"import":{"types":"./dist/vue.d.mts","default":"./dist/vue.mjs"},"require":{"types":"./dist/vue.d.cts","default":"./dist/vue.cjs"}},"./core":{"import":{"types":"./dist/core.d.mts","default":"./dist/core.mjs"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./solid":{"import":{"types":"./dist/solid.d.mts","default":"./dist/solid.mjs"},"require":{"types":"./dist/solid.d.cts","default":"./dist/solid.cjs"}},"./client":{"import":{"types":"./dist/client.d.mts","default":"./dist/client.mjs"},"require":{"types":"./dist/client.d.cts","default":"./dist/client.cjs"}},"./server":{"import":{"types":"./dist/server.d.mts","default":"./dist/server.mjs"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}},"./svelte":{"import":{"types":"./dist/svelte.d.mts","default":"./dist/svelte.mjs"},"require":{"types":"./dist/svelte.d.cts","default":"./dist/svelte.cjs"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.mts","default":"./dist/adapters/index.mjs"},"require":{"types":"./dist/adapters/index.d.cts","default":"./dist/adapters/index.cjs"}},"./package.json":"./package.json","./react-native":{"import":{"types":"./dist/react-native.d.mts","default":"./dist/react-native.mjs"},"require":{"types":"./dist/react-native.d.cts","default":"./dist/react-native.cjs"}},"./adapters/nextjs":{"import":{"types":"./dist/adapters/nextjs.d.mts","default":"./dist/adapters/nextjs.mjs"},"require":{"types":"./dist/adapters/nextjs.d.cts","default":"./dist/adapters/nextjs.cjs"}},"./adapters/express":{"import":{"types":"./dist/adapters/express.d.mts","default":"./dist/adapters/express.mjs"},"require":{"types":"./dist/adapters/express.d.cts","default":"./dist/adapters/express.cjs"}},"./adapters/fastify":{"import":{"types":"./dist/adapters/fastify.d.mts","default":"./dist/adapters/fastify.mjs"},"require":{"types":"./dist/adapters/fastify.d.cts","default":"./dist/adapters/fastify.cjs"}},"./adapters/nextjs-pages":{"import":{"types":"./dist/adapters/nextjs-pages.d.mts","default":"./dist/adapters/nextjs-pages.mjs"},"require":{"types":"./dist/adapters/nextjs-pages.d.cts","default":"./dist/adapters/nextjs-pages.cjs"}}},"funding":{"url":"https://github.com/sponsors/abhay-ramesh","type":"github"},"gitHead":"1a4a907986cd9086f0272ed7800306a49299a951","license":"MIT","scripts":{"dev":"tsdown --watch","lint":"eslint src","test":"vitest run","build":"tsdown","clean":"rm -rf dist","minio":"./scripts/minio.sh start","test:ui":"vitest --ui","lint:fix":"eslint src --fix","minio:stop":"./scripts/minio.sh stop","size-check":"node scripts/size-check.js","test:types":"vitest run --typecheck","test:watch":"vitest --watch","type-check":"tsc --noEmit","build:analyze":"pnpm build && pnpm bundle:analyze","test:coverage":"vitest run --coverage","bundle:analyze":"pnpm size-check && echo '\nFile Details:' && ls -la dist/","prepublishOnly":"pnpm build","bundle:visualize":"npx esbuild-visualizer dist/index.mjs --open","maintenance:deps":"./scripts/update-deps.sh","test:integration":"./scripts/minio.sh start && vitest run src/__tests__/minio-integration.test.ts","maintenance:health":"./scripts/health-check.sh"},"version":"0.7.0","_npmUser":{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"},"homepage":"https://pushduck.org","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"_npmVersion":"10.9.8","description":"Add file uploads to any web application. Secure, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","directories":{},"maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"aws4fetch":"^1.0.20"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"vue":["./dist/vue.d.cts"],"core":["./dist/core.d.cts"],"solid":["./dist/solid.d.cts"],"client":["./dist/client.d.cts"],"server":["./dist/server.d.cts"],"svelte":["./dist/svelte.d.cts"],"adapters":["./dist/adapters/index.d.cts"],"react-native":["./dist/react-native.d.cts"],"adapters/nextjs":["./dist/adapters/nextjs.d.cts"],"adapters/express":["./dist/adapters/express.d.cts"],"adapters/fastify":["./dist/adapters/fastify.d.cts"],"adapters/nextjs-pages":["./dist/adapters/nextjs-pages.d.cts"]}},"_hasShrinkwrap":false,"devDependencies":{"h3":"2.0.1-rc.26","vue":"^3.5.42","zod":"^4.5.4","hono":"^4.13.5","next":"15.5.9","astro":"^7.2.10","react":"^19.2.8","effect":"^3.22.1","elysia":"^1.4.30","eslint":"^9.39.5","svelte":"^5.57.0","tsdown":"^0.22.14","vitest":"^4.1.11","express":"^5.2.1","fastify":"^5.12.1","prettier":"^3.9.6","solid-js":"^1.9.15","happy-dom":"^20.13.2","react-dom":"^19.2.8","typescript":"^5.9.3","@types/node":"^24.13.3","@types/react":"^19.2.18","react-router":"^8.3.1","@sveltejs/kit":"^2.70.3","gzip-size-cli":"^5.1.0","@types/express":"^5.0.6","@vue/test-utils":"^2.5.0","@effect/platform":"^0.97.1","@vitest/coverage-v8":"^4.1.11","@vitejs/plugin-react":"^5.2.0","@testing-library/react":"^16.3.3","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.69.0","@testing-library/user-event":"^14.6.7","@sveltejs/vite-plugin-svelte":"^7.3.0","@typescript-eslint/eslint-plugin":"^8.69.0"},"peerDependencies":{"vue":">=3.3.0","zod":">=3.20.0","next":">=13.0.0","react":">=18.0.0","svelte":">=4.0.0","express":">=4.18.0","fastify":">=4.0.0","solid-js":">=1.7.0","@types/express":"*"},"peerDependenciesMeta":{"vue":{"optional":true},"zod":{"optional":true},"next":{"optional":true},"react":{"optional":true},"svelte":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"solid-js":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pushduck_0.7.0_1789895051828_0.38484609135599324"}}},"time":{"created":"2025-06-24T08:53:49.777Z","modified":"2026-09-20T09:04:12.378Z","0.1.1":"2025-06-24T08:53:50.055Z","0.1.7":"2025-06-25T12:25:09.328Z","0.1.8":"2025-06-26T07:49:40.954Z","0.1.10":"2025-06-26T08:17:00.862Z","0.1.11":"2025-06-26T08:29:16.462Z","0.1.12":"2025-06-26T08:37:00.880Z","0.1.13":"2025-06-26T08:55:25.862Z","0.1.14":"2025-06-26T10:30:24.803Z","0.1.15":"2025-06-28T03:52:51.241Z","0.1.16":"2025-06-30T18:38:28.543Z","0.1.17":"2025-07-02T05:40:37.005Z","0.1.18":"2025-07-05T06:08:57.397Z","0.1.19":"2025-07-05T09:06:34.180Z","0.1.20":"2025-07-05T16:22:20.641Z","0.1.21":"2025-07-10T19:37:41.064Z","0.1.22":"2025-07-20T10:53:28.354Z","0.1.23-beta.0":"2025-07-24T06:47:35.451Z","0.2.0":"2025-10-07T11:56:40.219Z","0.2.1":"2025-11-20T15:50:34.044Z","0.3.0":"2026-01-24T18:49:21.829Z","0.3.1":"2026-02-05T20:19:55.644Z","0.4.0":"2026-03-11T09:06:17.174Z","0.5.0":"2026-04-04T17:41:39.547Z","0.6.0":"2026-04-07T20:24:52.618Z","0.7.0":"2026-09-20T09:04:12.020Z"},"bugs":{"url":"https://github.com/abhay-ramesh/pushduck/issues"},"author":{"name":"Abhay Ramesh"},"license":"MIT","homepage":"https://pushduck.org","keywords":["file-upload","upload","s3","aws","cloudflare-r2","digitalocean-spaces","google-cloud-storage","minio","presigned-urls","nextjs","remix","sveltekit","nuxt","astro","react","nextjs app directory","nextjs app folder","nextjs 13 app directory file upload","aws","aws-s3","file-upload","multipart-upload","chunked-upload","typescript","express","hono","fastify","hono","elysia","framework-agnostic","edge-runtime","cloudflare-workers","vercel-edge","serverless","framework-agnostic","universal","enterprise-security","multipart-upload","chunked-upload","upload-library","web-development","backend","frontend"],"repository":{"url":"git+https://github.com/abhay-ramesh/pushduck.git","type":"git"},"description":"Add file uploads to any web application. Secure, edge-ready. Works with 16+ frameworks and 5+ storage providers. No heavy AWS SDK required.","maintainers":[{"name":"abhay-ramesh","email":"ramesh.abhay14@gmail.com"}],"readme":"# Pushduck\n\n[![NPM Version](https://img.shields.io/npm/v/pushduck?style=flat&colorA=18181B&colorB=374151)](https://www.npmjs.com/package/pushduck)\n[![NPM Downloads](https://img.shields.io/npm/dm/pushduck?style=flat&colorA=18181B&colorB=374151)](https://www.npmjs.com/package/pushduck)\n[![Bundle Size](https://img.shields.io/bundlephobia/minzip/pushduck?style=flat&colorA=18181B&colorB=374151)](https://bundlephobia.com/package/pushduck)\n[![GitHub Stars](https://img.shields.io/github/stars/abhay-ramesh/pushduck?style=flat&colorA=18181B&colorB=374151)](https://github.com/abhay-ramesh/pushduck)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue?style=flat&colorA=18181B&colorB=3178C6)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow?style=flat&colorA=18181B&colorB=F59E0B)](https://opensource.org/licenses/MIT)\n[![Discord](https://img.shields.io/badge/Discord-Join%20Community-7289DA?style=flat&colorA=18181B&colorB=7289DA)](https://discord.gg/pushduck)\n[![Twitter](https://img.shields.io/badge/Twitter-Share%20on%20Twitter-1DA1F2?style=flat&colorA=18181B&colorB=1DA1F2)](https://twitter.com/intent/tweet?text=Just%20discovered%20%40pushduck%20-%20the%20fastest%20way%20to%20add%20file%20uploads%20to%20any%20web%20app!%20🦆%20https%3A//github.com/abhay-ramesh/pushduck)\n\n![](https://pushduck.org/banner.png)\n\n**Pushduck** is a type-safe file upload library for Next.js applications with S3-compatible storage providers. Built with modern React patterns and comprehensive TypeScript support.\n\n## Features\n\n- **Easy Integration**: Straightforward setup with Next.js App Router\n- **Config-Aware Architecture**: Type-safe configuration with multiple provider support\n- **Type Safety**: Full TypeScript support with schema validation\n- **Progress Tracking**: Real-time upload progress with comprehensive state management\n- **Lifecycle Callbacks**: Complete upload lifecycle with `onStart`, `onProgress`, `onSuccess`, and `onError`\n- **Error Handling**: Robust error handling with retry mechanisms\n- **Cancellation**: Cancel uploads with AbortController support\n- **Multi-Provider**: AWS S3, Cloudflare R2, DigitalOcean Spaces, MinIO, and more\n- **Security**: Private/public bucket support with presigned URLs\n- **Validation**: Built-in file type, size, and custom validation\n- **Modern**: Built for React 18+ and Next.js App Router\n\n## Installation\n\n```bash\n# Using npm\nnpm install pushduck\n\n# Using yarn\nyarn add pushduck\n\n# Using pnpm\npnpm add pushduck\n```\n\n## Quick Start\n\n### 1. Configure Your Upload Settings\n\n```typescript\n// lib/upload.ts\nimport { createUploadConfig } from 'pushduck/server';\n\nconst { s3, config } = createUploadConfig()\n  .provider(\"aws\", {\n    bucket: process.env.AWS_BUCKET_NAME!,\n    region: process.env.AWS_REGION!,\n    accessKeyId: process.env.AWS_ACCESS_KEY_ID!,\n    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,\n  })\n  .defaults({\n    maxFileSize: '10MB',\n    acl: 'public-read',\n  })\n  .paths({\n    prefix: 'uploads',\n    generateKey: (file, metadata) => {\n      const userId = metadata.userId || 'anonymous';\n      const timestamp = Date.now();\n      const randomId = Math.random().toString(36).substring(2, 8);\n      return `${userId}/${timestamp}/${randomId}/${file.name}`;\n    },\n  })\n  .build();\n\n// Create router with your upload routes\nconst router = s3.createRouter({\n  imageUpload: s3.image().maxFileSize('5MB'),\n  documentUpload: s3.file({ maxSize: '10MB' }),\n  avatarUpload: s3.image().maxFileSize('2MB').middleware(async ({ metadata }) => ({\n    ...metadata,\n    userId: metadata.userId || 'anonymous',\n  })),\n});\n\nexport { router };\nexport type AppRouter = typeof router;\n```\n\n### 2. Create API Route\n\n```typescript\n// app/api/upload/route.ts\nimport { router } from '@/lib/upload';\n\nexport const { GET, POST } = router.handlers;\n```\n\n### 3. Use in Your Components\n\n```typescript\n// app/upload/page.tsx\n'use client';\n\nimport { useUpload } from 'pushduck/client';\nimport type { AppRouter } from '@/lib/upload';\n\nexport default function UploadPage() {\n  const { uploadFiles, files, isUploading, error, reset } = useUpload<AppRouter>('imageUpload');\n\n  const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const selectedFiles = Array.from(e.target.files || []);\n    // Optional: Pass client-side metadata\n    uploadFiles(selectedFiles, {\n      albumId: 'vacation-2025',\n      tags: ['summer'],\n      visibility: 'private'\n    });\n  };\n\n  return (\n    <div className=\"p-6\">\n      <input\n        type=\"file\"\n        multiple\n        accept=\"image/*\"\n        onChange={handleFileSelect}\n        disabled={isUploading}\n        className=\"mb-4\"\n      />\n\n      {files.map((file) => (\n        <div key={file.id} className=\"mb-2 p-2 border rounded\">\n          <div className=\"flex justify-between items-center\">\n            <span className=\"font-medium\">{file.name}</span>\n            <span className=\"text-sm text-gray-500\">{file.status}</span>\n          </div>\n          \n          <div className=\"w-full bg-gray-200 rounded-full h-2 mt-2\">\n            <div \n              className=\"bg-blue-600 h-2 rounded-full transition-all\"\n              style={{ width: `${file.progress}%` }}\n            />\n          </div>\n          \n          {file.status === 'success' && file.url && (\n            <a \n              href={file.url} \n              target=\"_blank\" \n              rel=\"noopener noreferrer\"\n              className=\"text-blue-600 hover:underline text-sm\"\n            >\n              View uploaded file\n            </a>\n          )}\n          \n          {file.status === 'error' && (\n            <p className=\"text-red-600 text-sm mt-1\">Error: {file.error}</p>\n          )}\n        </div>\n      ))}\n\n      <button \n        onClick={reset} \n        disabled={isUploading}\n        className=\"px-4 py-2 bg-gray-500 text-white rounded disabled:opacity-50\"\n      >\n        Reset\n      </button>\n    </div>\n  );\n}\n```\n\n## Upload Lifecycle Callbacks\n\nPushduck provides comprehensive callback support for handling the complete upload lifecycle:\n\n```typescript\nconst { uploadFiles } = useUpload<AppRouter>('imageUpload', {\n  // Called when upload process begins (after validation passes)\n  onStart: (files) => {\n    console.log(`Starting upload of ${files.length} files`);\n    setUploadStarted(true);\n  },\n  \n  // Called with progress updates (0-100)\n  onProgress: (progress) => {\n    console.log(`Progress: ${progress}%`);\n    setProgress(progress);\n  },\n  \n  // Called when all uploads complete successfully\n  onSuccess: (results) => {\n    console.log('Upload complete!', results);\n    setUploadStarted(false);\n    // Update your UI with uploaded file URLs\n  },\n  \n  // Called when upload fails\n  onError: (error) => {\n    console.error('Upload failed:', error.message);\n    setUploadStarted(false);\n    // Show error message to user\n  },\n});\n```\n\n### Callback Execution Order\n\nThe callbacks follow a predictable sequence:\n\n- **Validation errors** (size limits, file types): Only `onError` is called\n- **Successful uploads**: `onStart` → `onProgress(0)` → `onProgress(n)` → `onSuccess`\n- **Upload errors** (network issues): `onStart` → `onProgress(0)` → `onError`\n\n### Using onStart for Better UX\n\nThe `onStart` callback is perfect for:\n\n```typescript\nonStart: (files) => {\n  // Show loading state immediately\n  setIsUploading(true);\n  \n  // Display file list being uploaded\n  setUploadingFiles(files);\n  \n  // Show toast notification\n  toast.info(`Uploading ${files.length} files...`);\n  \n  // Disable form submission\n  setFormDisabled(true);\n}\n```\n\n## Configuration\n\n### Provider Setup\n\n#### AWS S3\n\n```typescript\ncreateUploadConfig().provider(\"aws\", {\n  bucket: 'your-bucket',\n  region: 'us-east-1',\n  accessKeyId: process.env.AWS_ACCESS_KEY_ID!,\n  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,\n})\n```\n\n#### Cloudflare R2\n\n```typescript\ncreateUploadConfig().provider(\"cloudflareR2\", {\n  accountId: process.env.CLOUDFLARE_ACCOUNT_ID!,\n  bucket: process.env.R2_BUCKET!,\n  accessKeyId: process.env.CLOUDFLARE_R2_ACCESS_KEY_ID!,\n  secretAccessKey: process.env.CLOUDFLARE_R2_SECRET_ACCESS_KEY!,\n  region: 'auto',\n})\n```\n\n#### DigitalOcean Spaces\n\n```typescript\ncreateUploadConfig().provider(\"digitalOceanSpaces\", {\n  region: 'nyc3',\n  bucket: 'your-space',\n  accessKeyId: process.env.DO_SPACES_ACCESS_KEY_ID!,\n  secretAccessKey: process.env.DO_SPACES_SECRET_ACCESS_KEY!,\n})\n```\n\n#### MinIO\n\n```typescript\ncreateUploadConfig().provider(\"minio\", {\n  endpoint: 'localhost:9000',\n  bucket: 'your-bucket',\n  accessKeyId: process.env.MINIO_ACCESS_KEY_ID!,\n  secretAccessKey: process.env.MINIO_SECRET_ACCESS_KEY!,\n  useSSL: false,\n})\n```\n\n### Advanced Configuration\n\n#### File Validation & Defaults\n\n```typescript\n.defaults({\n  maxFileSize: '10MB',\n  allowedFileTypes: ['image/*', 'application/pdf'],\n  acl: 'public-read',\n  metadata: {\n    uploadedBy: 'system',\n    environment: process.env.NODE_ENV,\n  },\n})\n```\n\n#### Path Configuration\n\n```typescript\n.paths({\n  prefix: 'uploads',\n  generateKey: (file, metadata) => {\n    const userId = metadata.userId || 'anonymous';\n    const timestamp = Date.now();\n    const randomId = Math.random().toString(36).substring(2, 8);\n    const sanitizedName = file.name.replace(/[^a-zA-Z0-9.-]/g, '_');\n    return `${userId}/${timestamp}/${randomId}/${sanitizedName}`;\n  },\n})\n```\n\n#### Lifecycle Hooks\n\n```typescript\n.hooks({\n  onUploadStart: async ({ file, metadata }) => {\n    console.log(`Starting upload: ${file.name}`);\n  },\n  onUploadComplete: async ({ file, metadata, url, key }) => {\n    console.log(`Upload complete: ${file.name} -> ${url}`);\n    // Save to database, send notifications, etc.\n  },\n  onUploadError: async ({ file, metadata, error }) => {\n    console.error(`Upload failed: ${file.name}`, error);\n    // Log error, send alerts, etc.\n  },\n})\n```\n\n## API Reference\n\n### Router Schema Methods\n\n```typescript\n// Image validation\ns3.image().maxFileSize('5MB')\n\n// File validation\ns3.file({ maxSize: '10MB', allowedTypes: ['application/pdf'] })\n\n// Custom validation\ns3.file().validate(async (file) => {\n  if (file.name.includes('virus')) {\n    throw new Error('Suspicious file detected');\n  }\n})\n\n// Middleware for metadata\ns3.image().middleware(async ({ file, metadata }) => ({\n  ...metadata,\n  processedAt: new Date().toISOString(),\n}))\n\n// Route-specific paths\ns3.image().paths({\n  prefix: 'avatars',\n  generateKey: (file, metadata) => `user-${metadata.userId}/avatar.${file.name.split('.').pop()}`,\n})\n\n// Lifecycle hooks per route\ns3.image().onUploadComplete(async ({ file, url, metadata }) => {\n  await updateUserAvatar(metadata.userId, url);\n})\n```\n\n### Client Hooks\n\n#### useUpload Hook\n\n```typescript\nconst {\n  uploadFiles,     // (files: File[]) => Promise<void>\n  files,          // UploadFile[] - reactive file state\n  isUploading,    // boolean\n  error,          // Error | null\n  reset,          // () => void\n} = useUpload<AppRouter>('routeName', {\n  onSuccess: (results) => console.log('Success:', results),\n  onError: (error) => console.error('Error:', error),\n});\n```\n\n#### useUploadRoute Hook\n\n```typescript\nconst {\n  uploadFiles,\n  files,\n  isUploading,\n  progress,\n  cancel,\n  retry,\n} = useUploadRoute('routeName', {\n  onProgress: (progress) => console.log(`${progress.percentage}%`),\n  onComplete: (results) => console.log('Complete:', results),\n});\n```\n\n### Upload Client\n\nFor more control, use the upload client directly:\n\n```typescript\nimport { createUploadClient } from 'pushduck/client';\nimport type { AppRouter } from '@/lib/upload';\n\nconst client = createUploadClient<AppRouter>({\n  endpoint: '/api/upload',\n});\n\n// Upload files\nawait client.imageUpload.upload(files, {\n  onProgress: (progress) => console.log(`${progress.percentage}%`),\n  metadata: { userId: '123' },\n});\n```\n\n## Examples\n\n### Multi-Route Upload Form\n\n```typescript\nfunction MultiUploadForm() {\n  const imageUpload = useUpload<AppRouter>('imageUpload');\n  const documentUpload = useUpload<AppRouter>('documentUpload');\n\n  return (\n    <div>\n      <div>\n        <h3>Images</h3>\n        <input\n          type=\"file\"\n          accept=\"image/*\"\n          multiple\n          onChange={(e) => imageUpload.uploadFiles(Array.from(e.target.files || []))}\n        />\n        {/* Render image upload state */}\n      </div>\n\n      <div>\n        <h3>Documents</h3>\n        <input\n          type=\"file\"\n          accept=\".pdf,.doc,.docx\"\n          multiple\n          onChange={(e) => documentUpload.uploadFiles(Array.from(e.target.files || []))}\n        />\n        {/* Render document upload state */}\n      </div>\n    </div>\n  );\n}\n```\n\n### Custom Upload Component\n\n```typescript\nfunction CustomUploader() {\n  const { uploadFiles, files, isUploading } = useUpload<AppRouter>('imageUpload');\n  const [dragActive, setDragActive] = useState(false);\n\n  const handleDrop = (e: React.DragEvent) => {\n    e.preventDefault();\n    setDragActive(false);\n    const droppedFiles = Array.from(e.dataTransfer.files);\n    uploadFiles(droppedFiles);\n  };\n\n  return (\n    <div\n      className={`border-2 border-dashed p-8 text-center ${\n        dragActive ? 'border-blue-500 bg-blue-50' : 'border-gray-300'\n      }`}\n      onDragOver={(e) => e.preventDefault()}\n      onDragEnter={() => setDragActive(true)}\n      onDragLeave={() => setDragActive(false)}\n      onDrop={handleDrop}\n    >\n      {isUploading ? (\n        <p>Uploading...</p>\n      ) : (\n        <p>Drag and drop files here, or click to select</p>\n      )}\n    </div>\n  );\n}\n```\n\n## Environment Variables\n\n```bash\n# AWS S3\nAWS_ACCESS_KEY_ID=your_access_key\nAWS_SECRET_ACCESS_KEY=your_secret_key\nAWS_REGION=us-east-1\nAWS_BUCKET_NAME=your_bucket\n\n# Cloudflare R2\nCLOUDFLARE_ACCOUNT_ID=your_account_id\nCLOUDFLARE_R2_ACCESS_KEY_ID=your_access_key\nCLOUDFLARE_R2_SECRET_ACCESS_KEY=your_secret_key\nR2_BUCKET=your_bucket\n\n# DigitalOcean Spaces\nDO_SPACES_ACCESS_KEY_ID=your_access_key\nDO_SPACES_SECRET_ACCESS_KEY=your_secret_key\n\n# MinIO\nMINIO_ACCESS_KEY_ID=your_access_key\nMINIO_SECRET_ACCESS_KEY=your_secret_key\n```\n\n## Migration Guide\n\nIf you're upgrading from an older version, see our [Migration Guide](https://pushduck.org/docs/guides/migration) for step-by-step instructions.\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\n- **Documentation**: [pushduck.org](https://pushduck.org)\n- **Issues**: [GitHub Issues](https://github.com/abhay-ramesh/pushduck/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/abhay-ramesh/pushduck/discussions)\n","readmeFilename":"README.md"}