{"_id":"@smooai/file","_rev":"28-76c5d9de03f8d37d85198e00b3d82481","name":"@smooai/file","dist-tags":{"latest":"2.2.20"},"versions":{"1.0.4":{"name":"@smooai/file","version":"1.0.4","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@1.0.4","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"93f0a2826a459e8c3255eb8ed07fb81091809f16","tarball":"https://registry.npmjs.org/@smooai/file/-/file-1.0.4.tgz","fileCount":17,"integrity":"sha512-svsoO+rgbZhJz+yqXEbnnYEtzz1/HkVlaKJhU5YfK6XnhX4hd309J9vOCNVoP0vuXONov3FTejWrf9psdSD+8Q==","signatures":[{"sig":"MEUCIFyI1DexuCURU60FKioIZdENyGJ5sUdgLWaa2GzWwKASAiEAngYQD8doBsZ4mra4ilz/qyI+d83t8eyIO65NHDP/6k0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189781},"main":"./dist/index.js","_from":"file:smooai-file-1.0.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./File":{"types":"./dist/File.d.ts","import":"./dist/File.mjs","default":"./dist/File.js","require":"./dist/File.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup","watch":"tsup --watch","format":"prettier --write \"**/*.{ts,tsx,md,json,js,cjs,mjs}\"","lint:fix":"eslint src/ --fix","check-all":"pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build","typecheck":"tsc --noEmit --skipLibCheck","ci:publish":"pnpm build && pnpm changeset publish","test:integration":"vitest run File.integration.spec"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/62dccef18511406709f768366d01be95/smooai-file-1.0.4.tgz","_integrity":"sha512-svsoO+rgbZhJz+yqXEbnnYEtzz1/HkVlaKJhU5YfK6XnhX4hd309J9vOCNVoP0vuXONov3FTejWrf9psdSD+8Q==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.14.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","@smooai/fetch":"^1.0.7","@smooai/utils":"^1.0.18","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^1.0.19","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","eslint":"^9.21.0","vitest":"^3.0.9","prettier":"^3.5.3","vite-node":"^3.0.9","@types/node":"^22.13.10","lint-staged":"^15.4.3","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","@vercel/style-guide":"^6.0.0","vite-tsconfig-paths":"^5.1.4","@smooai/config-eslint":"^1.0.12","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8","prettier-plugin-packagejson":"^2.5.10"},"_npmOperationalInternal":{"tmp":"tmp/file_1.0.4_1743481809736_0.9309869891770453","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@smooai/file","version":"1.0.5","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@1.0.5","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"12947a3580edc5d99aa30620171c100d3991ac53","tarball":"https://registry.npmjs.org/@smooai/file/-/file-1.0.5.tgz","fileCount":17,"integrity":"sha512-ddirpFDh5iyS0xZ/BZdKmvBatrF6vXD94nVhVDstUOKidHqciiCbbFRRbUrouX7aoN2QXutQyUeAEAOsqGcESQ==","signatures":[{"sig":"MEYCIQCsJLWjcz/RVLN7sZ6n8ffqjcwrqEmlHiAQs5D0sOor8wIhAIfSYEIBggAV9jrW1PUF4nfDGZ8J/MRx6y35ov1GdNhC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256405},"main":"./dist/index.js","_from":"file:smooai-file-1.0.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./File":{"types":"./dist/File.d.ts","import":"./dist/File.mjs","default":"./dist/File.js","require":"./dist/File.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup","watch":"tsup --watch","format":"prettier --write \"**/*.{ts,tsx,md,json,js,cjs,mjs}\"","lint:fix":"eslint src/ --fix","check-all":"pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build","typecheck":"tsc --noEmit --skipLibCheck","ci:publish":"pnpm build && pnpm changeset publish","test:integration":"vitest run File.integration.spec"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/fbab25a46f4f2e88db12e4bc8c6afa18/smooai-file-1.0.5.tgz","_integrity":"sha512-ddirpFDh5iyS0xZ/BZdKmvBatrF6vXD94nVhVDstUOKidHqciiCbbFRRbUrouX7aoN2QXutQyUeAEAOsqGcESQ==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.14.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","@smooai/fetch":"^1.0.7","@smooai/utils":"^1.0.18","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^1.0.19","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","eslint":"^9.21.0","vitest":"^3.0.9","prettier":"^3.5.3","vite-node":"^3.0.9","@types/node":"^22.13.10","lint-staged":"^15.4.3","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","@vercel/style-guide":"^6.0.0","vite-tsconfig-paths":"^5.1.4","@smooai/config-eslint":"^1.0.12","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8","prettier-plugin-packagejson":"^2.5.10"},"_npmOperationalInternal":{"tmp":"tmp/file_1.0.5_1743540856583_0.33651106981804024","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@smooai/file","version":"1.0.6","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@1.0.6","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"528071e29abbfef53f91e38fc53c731a64178666","tarball":"https://registry.npmjs.org/@smooai/file/-/file-1.0.6.tgz","fileCount":17,"integrity":"sha512-0l3rioHaCxC/6Ubaxmb90CccMY7xhyS9749qeYpcXxkzTE/hWNVSNEMkcj9QikBYb5ePflO++OfYI2goAcHB3w==","signatures":[{"sig":"MEUCIQCGfI8lwe5WY+NOucxGJHxpjDHr8xr2sKBCNvVc1L7U2gIgfK1pH6ox885xF287JioBbWebVN3w8mqXALH3InCfKZ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256880},"main":"./dist/index.js","_from":"file:smooai-file-1.0.6.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./File":{"types":"./dist/File.d.ts","import":"./dist/File.mjs","default":"./dist/File.js","require":"./dist/File.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup","watch":"tsup --watch","format":"prettier --write \"**/*.{ts,tsx,md,json,js,cjs,mjs}\"","lint:fix":"eslint src/ --fix","check-all":"pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build","typecheck":"tsc --noEmit --skipLibCheck","ci:publish":"pnpm build && pnpm changeset publish","test:integration":"vitest run File.integration.spec"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/7a6071e51269f2902e6a6bc5e5789af2/smooai-file-1.0.6.tgz","_integrity":"sha512-0l3rioHaCxC/6Ubaxmb90CccMY7xhyS9749qeYpcXxkzTE/hWNVSNEMkcj9QikBYb5ePflO++OfYI2goAcHB3w==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.14.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","@smooai/fetch":"^1.4.1","@smooai/utils":"^1.0.21","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^1.0.22","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","eslint":"^9.21.0","vitest":"^3.0.9","prettier":"^3.5.3","vite-node":"^3.0.9","@types/node":"^22.13.10","lint-staged":"^15.4.3","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","@vercel/style-guide":"^6.0.0","vite-tsconfig-paths":"^5.1.4","@smooai/config-eslint":"^1.0.13","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","prettier-plugin-css-order":"^2.1.2","@types/content-disposition":"^0.5.8","prettier-plugin-packagejson":"^2.5.10","prettier-plugin-tailwindcss":"^0.6.11","@ianvs/prettier-plugin-sort-imports":"^4.4.1"},"_npmOperationalInternal":{"tmp":"tmp/file_1.0.6_1744060406746_0.8149855539557544","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@smooai/file","version":"1.0.7","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@1.0.7","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"28bc261eb677802d980fd6fc92905ea1de1ae752","tarball":"https://registry.npmjs.org/@smooai/file/-/file-1.0.7.tgz","fileCount":17,"integrity":"sha512-plg1ktzdU6lu6AKMkimFU4QsTwMqlFy5G0nmSFU25OsdSylnW4Woq7f8w+uqY9r2bGr+Yre6MgaQRjIt3r4jzQ==","signatures":[{"sig":"MEQCIFPqnvEl8Pe4Rg7Ki7/iAvGcLsmY311MP7rnf8trYv17AiB4vUqnxmcxsPUVzh6wy/yZj7hbmA9oGb/VpubC5Tovyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256932},"main":"./dist/index.js","_from":"file:smooai-file-1.0.7.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./File":{"types":"./dist/File.d.ts","import":"./dist/File.mjs","default":"./dist/File.js","require":"./dist/File.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup","watch":"tsup --watch","format":"prettier --write \"**/*.{ts,tsx,md,json,js,cjs,mjs}\"","lint:fix":"eslint src/ --fix","check-all":"pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build","typecheck":"tsc --noEmit --skipLibCheck","ci:publish":"pnpm build && pnpm changeset publish","test:integration":"vitest run File.integration.spec"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/ab158c698d74553860b5258268a9394a/smooai-file-1.0.7.tgz","_integrity":"sha512-plg1ktzdU6lu6AKMkimFU4QsTwMqlFy5G0nmSFU25OsdSylnW4Woq7f8w+uqY9r2bGr+Yre6MgaQRjIt3r4jzQ==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.14.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","@smooai/fetch":"^1.4.1","@smooai/utils":"^1.0.21","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^1.0.22","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","eslint":"^9.21.0","vitest":"^3.0.9","prettier":"^3.5.3","vite-node":"^3.0.9","@types/node":"^22.13.10","lint-staged":"^15.4.3","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","@vercel/style-guide":"^6.0.0","vite-tsconfig-paths":"^5.1.4","@smooai/config-eslint":"^1.0.13","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","prettier-plugin-css-order":"^2.1.2","@types/content-disposition":"^0.5.8","prettier-plugin-packagejson":"^2.5.10","prettier-plugin-tailwindcss":"^0.6.11","@ianvs/prettier-plugin-sort-imports":"^4.4.1"},"_npmOperationalInternal":{"tmp":"tmp/file_1.0.7_1744208759571_0.625793748000318","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@smooai/file","version":"1.1.0","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@1.1.0","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"3e17fee950ba5c42743df17d97755c62785635dd","tarball":"https://registry.npmjs.org/@smooai/file/-/file-1.1.0.tgz","fileCount":17,"integrity":"sha512-Kl8ID8ZnY+sy+4QUJ1H+bq3cEPXTppr7wFbyKvIDMppbycU4kOfjKibeE9oFmTbAS7zZiG0S/pB0DyUFyzPzgA==","signatures":[{"sig":"MEYCIQD9UscKODzKXWtA7bKmXORgp9BvON2wKVfZ8Az7E3ZVywIhAOLdrMcWQ6C1fkGZxWDSmrPq2+opME9khkBwi2+SSZSB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256883},"main":"./dist/index.js","_from":"file:smooai-file-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup","watch":"tsup --watch","format":"prettier --write \"**/*.{ts,tsx,md,json,js,cjs,mjs}\"","lint:fix":"eslint src/ --fix","check-all":"pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build","typecheck":"tsc --noEmit --skipLibCheck","ci:publish":"pnpm build && pnpm changeset publish","test:integration":"vitest run File.integration.spec"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/d25dbebec6f672e5ed51523ab2f6ec36/smooai-file-1.1.0.tgz","_integrity":"sha512-Kl8ID8ZnY+sy+4QUJ1H+bq3cEPXTppr7wFbyKvIDMppbycU4kOfjKibeE9oFmTbAS7zZiG0S/pB0DyUFyzPzgA==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.15.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","@smooai/fetch":"^1.5.0","@smooai/utils":"^1.2.3","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^1.2.0","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","eslint":"^9.21.0","vitest":"^3.0.9","prettier":"^3.5.3","vite-node":"^3.0.9","@types/node":"^22.13.10","lint-staged":"^15.4.3","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","@vercel/style-guide":"^6.0.0","vite-tsconfig-paths":"^5.1.4","@smooai/config-eslint":"^1.0.13","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","prettier-plugin-css-order":"^2.1.2","@types/content-disposition":"^0.5.8","prettier-plugin-packagejson":"^2.5.10","prettier-plugin-tailwindcss":"^0.6.11","@ianvs/prettier-plugin-sort-imports":"^4.4.1"},"_npmOperationalInternal":{"tmp":"tmp/file_1.1.0_1746907659973_0.2695137797147078","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@smooai/file","version":"1.1.1","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@1.1.1","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"99ef4acb81b7b749f9c28b00f667b392c3ec8e17","tarball":"https://registry.npmjs.org/@smooai/file/-/file-1.1.1.tgz","fileCount":17,"integrity":"sha512-kHnksm+jve28QxmAlHeDBuBGkv+6Vxk3wIuMXM9N5CknTC5xhJHk/tNGl9pRSdPPLhRjJrN9XqomwDRxGk7ndQ==","signatures":[{"sig":"MEYCIQCgwiKBWFi9iF9WhPG5iqbVYotVDiyRGEm2aFytIo855QIhALz7L1gzLzGq1FxnhFabUlcXn64F7umfQHgxddAlPZ2P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256884},"main":"./dist/index.js","_from":"file:smooai-file-1.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup","watch":"tsup --watch","format":"prettier --write \"**/*.{ts,tsx,md,json,js,cjs,mjs}\"","lint:fix":"eslint src/ --fix","check-all":"pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build","typecheck":"tsc --noEmit --skipLibCheck","ci:publish":"pnpm build && pnpm changeset publish","test:integration":"vitest run File.integration.spec"},"_npmUser":{"name":"brentragersmoo","actor":{"name":"brentragersmoo","type":"user","email":"brent@smoo.ai"},"email":"brent@smoo.ai"},"_resolved":"/tmp/ca34fc21114e058e26cfccb66070744f/smooai-file-1.1.1.tgz","_integrity":"sha512-kHnksm+jve28QxmAlHeDBuBGkv+6Vxk3wIuMXM9N5CknTC5xhJHk/tNGl9pRSdPPLhRjJrN9XqomwDRxGk7ndQ==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.16.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","@smooai/fetch":"^2.0.0","@smooai/utils":"^1.2.10","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.0.1","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","eslint":"^9.21.0","vitest":"^3.0.9","prettier":"^3.5.3","vite-node":"^3.0.9","@types/node":"^22.13.10","lint-staged":"^15.4.3","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","@vercel/style-guide":"^6.0.0","vite-tsconfig-paths":"^5.1.4","@smooai/config-eslint":"^1.0.16","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","prettier-plugin-css-order":"^2.1.2","@types/content-disposition":"^0.5.8","prettier-plugin-packagejson":"^2.5.10","prettier-plugin-tailwindcss":"^0.6.11","@ianvs/prettier-plugin-sort-imports":"^4.4.1"},"_npmOperationalInternal":{"tmp":"tmp/file_1.1.1_1751325235256_0.46940433444448826","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@smooai/file","version":"1.1.2","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@1.1.2","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"47b78521db9a3c78cd6b84bbe4c9e979bd756bdc","tarball":"https://registry.npmjs.org/@smooai/file/-/file-1.1.2.tgz","fileCount":17,"integrity":"sha512-FFli3VDs5FhhkF2ybTmDOvTWN3HH97/s5aWMZNI4MligLWyOYfzRwItrL0yvkY4T7QBuXdMxw2HhIRFXrgA6rA==","signatures":[{"sig":"MEYCIQCt/PhDt+mBkaP34X1X4pyirYL/46pFLE/mIwxanTo8BgIhAOb61rHbcMiBoyTpVKpcJ8uX/T5sF9SnfnaehhuUgpe0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257083},"main":"./dist/index.js","_from":"file:smooai-file-1.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup","watch":"tsup --watch","format":"prettier --write \"**/*.{ts,tsx,md,json,js,cjs,mjs}\"","lint:fix":"eslint src/ --fix","check-all":"pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build","typecheck":"tsc --noEmit --skipLibCheck","ci:publish":"pnpm build && pnpm changeset publish","pre-commit-check":"(zsh .husky/pre-commit)","test:integration":"vitest run File.integration.spec"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/07a86bd4c029dbc6f26becba099f8db6/smooai-file-1.1.2.tgz","_integrity":"sha512-FFli3VDs5FhhkF2ybTmDOvTWN3HH97/s5aWMZNI4MligLWyOYfzRwItrL0yvkY4T7QBuXdMxw2HhIRFXrgA6rA==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.3","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.19.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.0.1","@smooai/utils":"^1.3.0","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.1","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","eslint":"^9.21.0","vitest":"^3.0.9","prettier":"^3.5.3","vite-node":"^3.0.9","@types/node":"^22.13.10","lint-staged":"^15.4.3","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","@vercel/style-guide":"^6.0.0","vite-tsconfig-paths":"^5.1.4","@smooai/config-eslint":"^1.0.17","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","prettier-plugin-css-order":"^2.1.2","@types/content-disposition":"^0.5.8","prettier-plugin-packagejson":"^2.5.10","prettier-plugin-tailwindcss":"^0.6.11","@ianvs/prettier-plugin-sort-imports":"^4.4.1"},"_npmOperationalInternal":{"tmp":"tmp/file_1.1.2_1756906552992_0.7857028751784678","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@smooai/file","version":"1.1.3","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@1.1.3","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"553025f9dd513a99efd3011ec974acd15d739967","tarball":"https://registry.npmjs.org/@smooai/file/-/file-1.1.3.tgz","fileCount":17,"integrity":"sha512-LpZkN1TxcAvp0qyFB1iNyJjECeqMu6q0DVyPJPytDrpIn+3YkE3DCLw+RRjGo4NupptNoy/Ucc+MRtkSG2Hq6g==","signatures":[{"sig":"MEUCIQDD4nDce4JiAwkPakOyyzuj9J/hGNt+EhuZhnN8Bs88LQIgEQ+QH35j7NreOaKnvm/sNg4C1YNelb2zUETgB49DfDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257127},"main":"./dist/index.js","_from":"file:smooai-file-1.1.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup","watch":"tsup --watch","format":"prettier --write \"**/*.{ts,tsx,md,json,js,cjs,mjs}\"","aibranch":"pnpm generate-git-branch","lint:fix":"eslint src/ --fix","check-all":"pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build","typecheck":"tsc --noEmit --skipLibCheck","ci:publish":"pnpm build && pnpm changeset publish","pre-commit-check":"(zsh .husky/pre-commit)","test:integration":"vitest run File.integration.spec"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/912b898998a68576f3110d365d5133a6/smooai-file-1.1.3.tgz","_integrity":"sha512-LpZkN1TxcAvp0qyFB1iNyJjECeqMu6q0DVyPJPytDrpIn+3YkE3DCLw+RRjGo4NupptNoy/Ucc+MRtkSG2Hq6g==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.3","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.19.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.1.0","@smooai/utils":"^1.3.1","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.2","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","eslint":"^9.21.0","vitest":"^3.0.9","prettier":"^3.5.3","vite-node":"^3.0.9","@types/node":"^22.13.10","lint-staged":"^15.4.3","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","@vercel/style-guide":"^6.0.0","vite-tsconfig-paths":"^5.1.4","@smooai/config-eslint":"^1.0.17","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","prettier-plugin-css-order":"^2.1.2","@types/content-disposition":"^0.5.8","prettier-plugin-packagejson":"^2.5.10","prettier-plugin-tailwindcss":"^0.6.11","@ianvs/prettier-plugin-sort-imports":"^4.4.1"},"_npmOperationalInternal":{"tmp":"tmp/file_1.1.3_1758565445092_0.9877860844182216","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@smooai/file","version":"1.1.4","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@1.1.4","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"a277a5230816acd877205ff782e753ac8db1c068","tarball":"https://registry.npmjs.org/@smooai/file/-/file-1.1.4.tgz","fileCount":17,"integrity":"sha512-fzp2Mi+yxmnHvbBg/EdqowhQ+RN/ZS2O96db9WLyXzB8Q5VJ/5JCWV0F2f2UWGtRxQPZAQY82OuTDHpm/Uu7/A==","signatures":[{"sig":"MEUCIGGstpewetzkzS8ZQi2Ib7BEf4ECIRcWAMi9hu0NBtB5AiEAtFPRg2bpp/6dpu9LFOLFVeTeOcZvonnKkbqOt0BJUqQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258059},"main":"./dist/index.js","_from":"file:smooai-file-1.1.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup","watch":"tsup --watch","format":"prettier --write \"**/*.{ts,tsx,md,json,js,cjs,mjs}\"","aibranch":"pnpm generate-git-branch","lint:fix":"eslint src/ --fix","check-all":"pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build","typecheck":"tsc --noEmit --skipLibCheck","ci:publish":"pnpm build && pnpm changeset publish","pre-commit-check":"(zsh .husky/pre-commit)","test:integration":"vitest run File.integration.spec"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/4afd929bd061a74fcc731729cdd600e6/smooai-file-1.1.4.tgz","_integrity":"sha512-fzp2Mi+yxmnHvbBg/EdqowhQ+RN/ZS2O96db9WLyXzB8Q5VJ/5JCWV0F2f2UWGtRxQPZAQY82OuTDHpm/Uu7/A==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.3","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.19.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.1.0","@smooai/utils":"^1.3.1","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.2","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","eslint":"^9.21.0","vitest":"^3.0.9","prettier":"^3.5.3","vite-node":"^3.0.9","@types/node":"^22.13.10","lint-staged":"^15.4.3","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","@vercel/style-guide":"^6.0.0","vite-tsconfig-paths":"^5.1.4","@smooai/config-eslint":"^1.0.17","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","prettier-plugin-css-order":"^2.1.2","@types/content-disposition":"^0.5.8","prettier-plugin-packagejson":"^2.5.10","prettier-plugin-tailwindcss":"^0.6.11","@ianvs/prettier-plugin-sort-imports":"^4.4.1"},"_npmOperationalInternal":{"tmp":"tmp/file_1.1.4_1758653647787_0.7198206900251007","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@smooai/file","version":"1.1.5","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@1.1.5","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"60be8c6cd8b34ccc2e10973bdf716769e0b0849d","tarball":"https://registry.npmjs.org/@smooai/file/-/file-1.1.5.tgz","fileCount":17,"integrity":"sha512-/YzElYbWhfMbsKllv0i/krz7y6yTgTiChXAQonM+PI2tmA79gJ+PYmtMYABXtkVC3IHnClCsoXqA0vLrnqNDyg==","signatures":[{"sig":"MEUCIAYbaoa/E5BmEhVgTupIRP0Kd6R/rGiYItcE7B+NRbBJAiEAq5Q4EO5S7Wq+7wAbYklW1fimRCyMsN0kvGtBF9NokI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257860},"main":"./dist/index.js","_from":"file:smooai-file-1.1.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint .","test":"vitest run","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup","watch":"tsup --watch","format":"oxfmt --write .","aibranch":"pnpm generate-git-branch","lint:fix":"oxlint --fix .","check-all":"pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build","typecheck":"tsc --noEmit --skipLibCheck","ci:publish":"pnpm build && pnpm changeset publish","format:check":"oxfmt --check .","pre-commit-check":"(zsh .husky/pre-commit)","test:integration":"vitest run File.integration.spec"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/14f2af1ed525336285ca49e0412b5596/smooai-file-1.1.5.tgz","_integrity":"sha512-/YzElYbWhfMbsKllv0i/krz7y6yTgTiChXAQonM+PI2tmA79gJ+PYmtMYABXtkVC3IHnClCsoXqA0vLrnqNDyg==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.4","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.22.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.1.0","@smooai/utils":"^1.3.1","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.2","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_1.1.5_1771863417206_0.7405152338415124","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@smooai/file","version":"2.0.0","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.0.0","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"b50af86196bd4edd9d6e646d2726c2c340659f77","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.0.0.tgz","fileCount":17,"integrity":"sha512-FFc09BoXdz8k8cPKC2cwdaXQcry3QkXlq3SvAGqqNSZBF1FcKyDZrjFs1hwDxuKtvFX3OE1oVNgeplVailSvsA==","signatures":[{"sig":"MEYCIQCVaXEO9t7OHMRXSoirOgtAhJOQ6Z0EIwiLVdH7PKhlsAIhAOzeoFdxc8p4v9fX4IcgVZpqswSIWO0Edp0TJ1uFfprO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":260631},"main":"./dist/index.js","_from":"file:smooai-file-2.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/140ce368ee4863dbaef35092bf0e4cf7/smooai-file-2.0.0.tgz","_integrity":"sha512-FFc09BoXdz8k8cPKC2cwdaXQcry3QkXlq3SvAGqqNSZBF1FcKyDZrjFs1hwDxuKtvFX3OE1oVNgeplVailSvsA==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.4","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.22.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.1.0","@smooai/utils":"^1.3.1","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.2","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.0.0_1771997943589_0.3265214752209975","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@smooai/file","version":"2.0.1","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.0.1","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"e5d3fe98a9e050b98d37a5243964b74ae0952f17","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.0.1.tgz","fileCount":17,"integrity":"sha512-CnkFB0cDR+Oaf6ghcoZ6PuieuTMzCSfN8y2lnHByNftD3LDe+VFDWgF9+DaRy+mxTutOL7yBgMcBy5R/Z7I9LQ==","signatures":[{"sig":"MEUCIDG7DMXN79wCcUHV/V/zDuUjGGQzAT1NDSaQJzMUT2oXAiEA5XGHjte9Jtkr+iXkhYYBL6SwnOl3uhs5mPTnw/Ft/FQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":260631},"main":"./dist/index.js","_from":"file:smooai-file-2.0.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/f8c90b2ed9cd19694b332bfa1d02ea37/smooai-file-2.0.1.tgz","_integrity":"sha512-CnkFB0cDR+Oaf6ghcoZ6PuieuTMzCSfN8y2lnHByNftD3LDe+VFDWgF9+DaRy+mxTutOL7yBgMcBy5R/Z7I9LQ==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.4","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.22.0","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.1.0","@smooai/utils":"^1.3.1","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.2","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.0.1_1772901190161_0.35811365837274867","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@smooai/file","version":"2.1.0","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.1.0","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"aae8220e3f97cc98d598981e88609415a509e6a4","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.1.0.tgz","fileCount":25,"integrity":"sha512-K3w5X7wTRhbenzSq6xejtKgU0+Ka9ZP8t5MIbA9S50pNgijGLyYXH92UrFw/zDTf6Uh1lh3pVbR8p+IAOdcGsw==","signatures":[{"sig":"MEUCICsDm716ZsUUo3QrVzdHHnylfgwVv5EKJQ3pmJFB43OoAiEAxQ2L0913blZUR5mN7GpFR1DyqddRc/ZTXBT61uT/gOQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339240},"main":"./dist/index.js","_from":"file:smooai-file-2.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/aa9f2b15a7b0145e48f078a99c5f0b1b/smooai-file-2.1.0.tgz","_integrity":"sha512-K3w5X7wTRhbenzSq6xejtKgU0+Ka9ZP8t5MIbA9S50pNgijGLyYXH92UrFw/zDTf6Uh1lh3pVbR8p+IAOdcGsw==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.1.0","@smooai/utils":"^1.3.1","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.2","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.1.0_1776884314996_0.5204222359685009","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@smooai/file","version":"2.2.0","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.0","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"b9e41c76d799ac1d6b50fa763cc1b5f83200b976","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.0.tgz","fileCount":25,"integrity":"sha512-gFZIvPpDXcKRO1iDU7oAS14PHytvKGVikW2zfIhvIfnXlkY4mtq1svjcT06Ian6I8CeEAAaNhYnEQBg0Q5UsgQ==","signatures":[{"sig":"MEUCIQCNy6xlqhECAPkquySvObpzSpRqcw+MGthXUDo8b+TKMQIgEtj8Mk7Iwq+Id8vxRHnnlhETzBDPxMTqHRfnPnBA9as=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339794},"main":"./dist/index.js","_from":"file:smooai-file-2.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/20b603a22ca958128a8eecdd60a1f95b/smooai-file-2.2.0.tgz","_integrity":"sha512-gFZIvPpDXcKRO1iDU7oAS14PHytvKGVikW2zfIhvIfnXlkY4mtq1svjcT06Ian6I8CeEAAaNhYnEQBg0Q5UsgQ==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.1.0","@smooai/utils":"^1.3.1","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.2","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.0_1777005325469_0.09868018990875127","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@smooai/file","version":"2.2.1","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.1","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"7238c904f83419179186d93e35b828e4d6042c8b","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.1.tgz","fileCount":25,"integrity":"sha512-TowziXU0BWDjpagbK9KuzekP8APWl0id8sk1OEmHO8688fJ9BOgcnOKU4hRXTRpH5iGY0hF6IiWpn0MgQWOl0Q==","signatures":[{"sig":"MEUCIFiPNYeaFVDwOrDSZxI5v3geh4uwZvft3OjNHPSQ33M9AiEA3/VZb1mAga3ODTWI5eMQEcXoj8Vyk+j27vrWU1v/znE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339794},"main":"./dist/index.js","_from":"file:smooai-file-2.2.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/53fcdc3878441cf69db77eed56d98bfd/smooai-file-2.2.1.tgz","_integrity":"sha512-TowziXU0BWDjpagbK9KuzekP8APWl0id8sk1OEmHO8688fJ9BOgcnOKU4hRXTRpH5iGY0hF6IiWpn0MgQWOl0Q==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"A powerful file handling library for Node.js that provides a unified interface for working with files from local filesystem, S3, URLs, and more. Built with streaming in mind, it handles file bytes lazily where possible to minimize memory usage and improve","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.1.0","@smooai/utils":"^1.3.1","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.2","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.1_1777036673121_0.7552308117654203","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"@smooai/file","version":"2.2.2","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.2","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"5f3d7d74632fd76d00eadc0d56384627ca145e5f","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.2.tgz","fileCount":25,"integrity":"sha512-pgkkNwGUG6lqk6qs87i+XImXTo43lFSmjjKeDRNPvPrRzr7UbxRrLK1Xl1YbBmAHaIpMc3Zd5LSlunPUQSz0vA==","signatures":[{"sig":"MEQCIAkfcieot1qk7+8k3Nt/+iZIv6F3wXMB01eYnENTBlLtAiBCl3447eaY2YPXpVT2LRQpYIuU8Pcxkv860hkuA/Xr8Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339969},"main":"./dist/index.js","_from":"file:smooai-file-2.2.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/3b2d4db9eb18769a35226d1f087ed971/smooai-file-2.2.2.tgz","_integrity":"sha512-pgkkNwGUG6lqk6qs87i+XImXTo43lFSmjjKeDRNPvPrRzr7UbxRrLK1Xl1YbBmAHaIpMc3Zd5LSlunPUQSz0vA==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.1.0","@smooai/utils":"^1.3.1","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.2","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.2_1777041751795_0.2534877754470972","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"@smooai/file","version":"2.2.3","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.3","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"ef1ca999819b02882e62f5dbc448ac07fc8d5688","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.3.tgz","fileCount":25,"integrity":"sha512-R7c2Y0V4CRylR53X1DN2wzPV5AdGLTW9lClRCQ+ASy+ATdnbvBZ+NZ8xVBM7W2n0DhoGaYuLk7o/64pFr7JgKg==","signatures":[{"sig":"MEUCIFNt89eiW9Ao10kzrL6YGLg5P6jIhrFz5DQH6oJ0QpQHAiEAxa2GNpGv7IZokhNhk+E9/03kiivjOuVp/jPc9JrH83k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339969},"main":"./dist/index.js","_from":"file:smooai-file-2.2.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/7b854a2b366593d82fcdb2ef73402a28/smooai-file-2.2.3.tgz","_integrity":"sha512-R7c2Y0V4CRylR53X1DN2wzPV5AdGLTW9lClRCQ+ASy+ATdnbvBZ+NZ8xVBM7W2n0DhoGaYuLk7o/64pFr7JgKg==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.1.0","@smooai/utils":"^1.3.1","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.2","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.3_1777045022244_0.3303822057948764","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"@smooai/file","version":"2.2.4","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.4","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"9b12a7b176c39ef9aff09a1e54d1ac700abe65e1","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.4.tgz","fileCount":25,"integrity":"sha512-QdrMS+Wg6KsknvdqgNSgEHZBHrhLmtxw7LT3Wht9/upEFWQj1Rbwpecf367UtE6tRzWtm9NSSU6zb5qOhd/OqQ==","signatures":[{"sig":"MEUCIQCcHDd0IZdWLz5lhBkW43zrMfHP2gT5o3Z3wumfMUP/RwIgeaSjfgdw2EH1oZSS1mT+h7mHy8gu5N0X6LJllqUFnW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339969},"main":"./dist/index.js","_from":"file:smooai-file-2.2.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/822aa8fc433d3dd0c7c526fecc168fc7/smooai-file-2.2.4.tgz","_integrity":"sha512-QdrMS+Wg6KsknvdqgNSgEHZBHrhLmtxw7LT3Wht9/upEFWQj1Rbwpecf367UtE6tRzWtm9NSSU6zb5qOhd/OqQ==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^2.1.0","@smooai/utils":"^1.3.1","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^3.1.2","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.4_1777046525526_0.33251685888353033","host":"s3://npm-registry-packages-npm-production"}},"2.2.5":{"name":"@smooai/file","version":"2.2.5","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.5","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"217042558a1253df3c69690e31df2f1997b77a5a","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.5.tgz","fileCount":25,"integrity":"sha512-INHNTKt1iVEp/1IWAxniWiL4IRBv0EILeV4TwIINBGQcu3BHqJBHzXk1VGwlxfQ/FbK+zzKW/xNNIfdePORO8w==","signatures":[{"sig":"MEUCIQDw0z1jECaa4FPF508OsPsj60vLrYsb2K+1oYEoVWntwAIgG5w4IiCH1TsVmTcaCRifVlBw9w4wqGpJU6AHu5ghUjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339969},"main":"./dist/index.js","_from":"file:smooai-file-2.2.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/50b84b5ba5f397ae868c4760b14a9b6b/smooai-file-2.2.5.tgz","_integrity":"sha512-INHNTKt1iVEp/1IWAxniWiL4IRBv0EILeV4TwIINBGQcu3BHqJBHzXk1VGwlxfQ/FbK+zzKW/xNNIfdePORO8w==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^3.3.5","@smooai/utils":"^1.3.3","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^4.1.4","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.5_1778557137580_0.7039211369333105","host":"s3://npm-registry-packages-npm-production"}},"2.2.6":{"name":"@smooai/file","version":"2.2.6","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.6","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"adac8b652ab1497b22e30ba7b880ef8b71f6767f","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.6.tgz","fileCount":25,"integrity":"sha512-di1ClvQDnYuLfSogPTYxF5eZ3ixVVe4Wxe1CsBm2riXmXYhkvaUfQqdcJ/ATxX89ySuG6u1UOt80pGA9HZWHOw==","signatures":[{"sig":"MEYCIQD9s5G2d/SaX+EP6CWDPgdSAy1JxS9xcOU0k7xwUXeUpQIhAPv1Qfw0cgm+qOhIsGvuFqNVQVBlztfWvfE4q2YCGdmT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339969},"main":"./dist/index.js","_from":"file:smooai-file-2.2.6.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/430fe8b599f847bf2e5cf0fd45f0a4cd/smooai-file-2.2.6.tgz","_integrity":"sha512-di1ClvQDnYuLfSogPTYxF5eZ3ixVVe4Wxe1CsBm2riXmXYhkvaUfQqdcJ/ATxX89ySuG6u1UOt80pGA9HZWHOw==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^3.3.5","@smooai/utils":"^1.3.3","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^4.1.4","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.6_1778604768107_0.4066839941590452","host":"s3://npm-registry-packages-npm-production"}},"2.2.9":{"name":"@smooai/file","version":"2.2.9","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.9","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"a224d2ab022e3d8d442f54bb2e878883e7b0bec0","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.9.tgz","fileCount":25,"integrity":"sha512-m8+jnoLYBfaCyLZPb/u7sOxNKZ5pPms0fC9nOIRVnGsSm/6zdYaSW+l5rQGjuNYDNUnG3OXdS0ZeRFZt6QEUyQ==","signatures":[{"sig":"MEUCIQC6F+Q155IyS/9P7yjtYxoNTtyFWX6aNaVfI0c1UB6ExQIgJfxDcmLQaiHqFzdgrTKYThBMlfTVBhOoJQknUVomAGw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339969},"main":"./dist/index.js","_from":"file:smooai-file-2.2.9.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/a895682bf41c6e9f77b06bad39ae880e/smooai-file-2.2.9.tgz","_integrity":"sha512-m8+jnoLYBfaCyLZPb/u7sOxNKZ5pPms0fC9nOIRVnGsSm/6zdYaSW+l5rQGjuNYDNUnG3OXdS0ZeRFZt6QEUyQ==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^3.3.5","@smooai/utils":"^1.3.3","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^4.1.4","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.9_1778607216295_0.7138240871304793","host":"s3://npm-registry-packages-npm-production"}},"2.2.10":{"name":"@smooai/file","version":"2.2.10","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.10","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"77cbe26956e54bc3587d4918708ada5290ee3be6","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.10.tgz","fileCount":25,"integrity":"sha512-t26JPfaaXrHYmjHxNv0Y4LT7nj4aYq2Huc1Nvvcl+c9gCeHatupvi/l8cj63Z6Cu5/9u10CD3yhyMC4Q+wUVVA==","signatures":[{"sig":"MEYCIQDDaeR0JSgY3w6tUYh4Z5rvly7TqZ7BvSuM6Mc+LkNHUwIhAI78YblPMWEM6mbDZKX3/XiiV6GdULwCeC5yBta77gXR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339970},"main":"./dist/index.js","_from":"file:smooai-file-2.2.10.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.js","require":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.mjs","require":"./dist/*.js"}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsup && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsup --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/4cb35a22ba3bb3a72aa9875706537613/smooai-file-2.2.10.tgz","_integrity":"sha512-t26JPfaaXrHYmjHxNv0Y4LT7nj4aYq2Huc1Nvvcl+c9gCeHatupvi/l8cj63Z6Cu5/9u10CD3yhyMC4Q+wUVVA==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^3.3.5","@smooai/utils":"^1.3.3","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^4.1.4","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","tsup":"^8.4.0","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","oxlint":"^0.16.0","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.10_1778613553750_0.5295551679239807","host":"s3://npm-registry-packages-npm-production"}},"2.2.11":{"name":"@smooai/file","version":"2.2.11","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.11","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"9894eb2bd65b42252eec99371f7c538cefb2ded8","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.11.tgz","fileCount":26,"integrity":"sha512-QSwU5sVIWm085mH0ATV6sPoeOI3RMJvfeex1XhbJZTxPyR8nwZWOK3imD9sxrZcuNvSRPWvd+k6swA/HL1bCOg==","signatures":[{"sig":"MEUCIQDiGk2XMI3bLdEkEM3/Vv8u7jpN6tZZV/wIPezjx1WlkwIgY8JR1w2AN8w6muYzhaZOxWBoMHZqfPVZC3ATK38wdhw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239512},"main":"./dist/index.cjs","_from":"file:smooai-file-2.2.11.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"default":"./dist/index.cjs","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./*":{"import":{"types":"./dist/*.d.mts","default":"./dist/*.mjs"},"require":{"types":"./dist/*.d.cts","default":"./dist/*.cjs"}}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm create-entry-points -i \"src/**/*.ts\" && pnpm tsdown && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsdown --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/e6c22c5216e8035eb8689d59d816f12c/smooai-file-2.2.11.tgz","_integrity":"sha512-QSwU5sVIWm085mH0ATV6sPoeOI3RMJvfeex1XhbJZTxPyR8nwZWOK3imD9sxrZcuNvSRPWvd+k6swA/HL1bCOg==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^3.3.5","@smooai/utils":"^1.3.4","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^4.1.4","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","unrun":"latest","oxlint":"^0.16.0","tsdown":"latest","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.11_1779134238908_0.9971343472023435","host":"s3://npm-registry-packages-npm-production"}},"2.2.12":{"name":"@smooai/file","version":"2.2.12","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.12","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"67f676101b8002a9c776e5a2c9996a4ee4f1c6c1","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.12.tgz","fileCount":26,"integrity":"sha512-tJt6Rz82K9iY2rzWDx8U+sUQ9i5wkataaGaqqWRq5l0tshgyYwpRcXxrk6aNV6yCPT5eCl3TP0UUwNzxqsbEuA==","signatures":[{"sig":"MEQCIFTQTtBUvOgfs2/4hYcyqjQ4TrvvdmyjwlJJZJJG1tV+AiA3XODoWu6qxguT70jHyGyuGp6/9lEkZ8NjyCumPiiNrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239434},"main":"./dist/index.cjs","_from":"file:smooai-file-2.2.12.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"default":"./dist/index.cjs","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./*":{"import":{"types":"./dist/*.d.mts","default":"./dist/*.mjs"},"require":{"types":"./dist/*.d.cts","default":"./dist/*.cjs"}}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm tsdown && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsdown --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish && pnpm run version:sync","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/a5a92aa74aa50f515a3a9963ef0560d1/smooai-file-2.2.12.tgz","_integrity":"sha512-tJt6Rz82K9iY2rzWDx8U+sUQ9i5wkataaGaqqWRq5l0tshgyYwpRcXxrk6aNV6yCPT5eCl3TP0UUwNzxqsbEuA==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.7","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^3.3.5","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^4.1.4","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","unrun":"latest","oxlint":"^0.16.0","tsdown":"latest","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.12_1779137371603_0.05652974875586603","host":"s3://npm-registry-packages-npm-production"}},"2.2.13":{"name":"@smooai/file","version":"2.2.13","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.13","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"5a5f36b1d8d4d50098c47d9ab79b0fe0376b3d77","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.13.tgz","fileCount":26,"integrity":"sha512-M7DKvaqzIG1gh1j4SF2C7vmJobSSh8+N6yvENTohMwtGo4Nvr8kNiPtUGGtQEoMU1HQi23v2jErZyENzhcSLew==","signatures":[{"sig":"MEYCIQD15PqNyp/iq2cwrw51m2UMcIGfkifu4n9XP8tP90I0agIhAOJlX77VpAqVvg4S34imK/I5r12Ci1ReB4+YdUihDqx0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244912},"main":"./dist/index.cjs","_from":"file:smooai-file-2.2.13.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"default":"./dist/index.cjs","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./*":{"import":{"types":"./dist/*.d.mts","default":"./dist/*.mjs"},"require":{"types":"./dist/*.d.cts","default":"./dist/*.cjs"}}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm tsdown && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsdown --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","version":"changeset version && node scripts/sync-versions.mjs","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run version:check && pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","version:check":"node scripts/check-versions.mjs","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/157dd68023f382ef2a2e8f91dce85ffa/smooai-file-2.2.13.tgz","_integrity":"sha512-M7DKvaqzIG1gh1j4SF2C7vmJobSSh8+N6yvENTohMwtGo4Nvr8kNiPtUGGtQEoMU1HQi23v2jErZyENzhcSLew==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.8","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^3.3.5","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^4.1.4","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","unrun":"latest","oxlint":"^0.16.0","tsdown":"latest","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.13_1787250502677_0.48294636667712565","host":"s3://npm-registry-packages-npm-production"}},"2.2.14":{"name":"@smooai/file","version":"2.2.14","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.14","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"22444ccd67f5b62353900b56cd25f07beebebacc","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.14.tgz","fileCount":26,"integrity":"sha512-oS1EpkJSkvmiUvtEcW69ZtdG6zlZY7NijKdRgHZFKzvmfA6PG+CF/DRqDWwu/v2UjAYVVfmR1nIjH6jBG+AV1w==","signatures":[{"sig":"MEYCIQDqivMVrNxFlbxcpNlWee4vRVViwnVj0LpO7aikOJfksgIhAIWfFSKbEtZo7MU0YGTIx+Nx7flfsJfX8BPyntzix7gL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":279566},"main":"./dist/index.cjs","_from":"file:smooai-file-2.2.14.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"default":"./dist/index.cjs","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./*":{"import":{"types":"./dist/*.d.mts","default":"./dist/*.mjs"},"require":{"types":"./dist/*.d.cts","default":"./dist/*.cjs"}}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test","build":"pnpm tsdown && pnpm run python:build && pnpm run rust:build && pnpm run go:build","watch":"tsdown --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","version":"changeset version && node scripts/sync-versions.mjs","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run version:check && pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run python:typecheck && pnpm run python:lint && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run rust:lint && pnpm run rust:test && pnpm run go:fmt:check && pnpm run go:lint && pnpm run go:test && pnpm run build","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","format:check":"oxfmt --check .","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","python:format":"(cd python && uv run poe format)","version:check":"node scripts/check-versions.mjs","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/8a686d441fb0b64dad3da3e5d5e7dec5/smooai-file-2.2.14.tgz","_integrity":"sha512-oS1EpkJSkvmiUvtEcW69ZtdG6zlZY7NijKdRgHZFKzvmfA6PG+CF/DRqDWwu/v2UjAYVVfmR1nIjH6jBG+AV1w==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.8","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","typescript":"^5.9.2","@smooai/fetch":"^3.3.5","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^4.1.4","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","unrun":"latest","oxlint":"^0.16.0","tsdown":"latest","vitest":"^3.0.9","vite-node":"^3.0.9","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.14_1787251041847_0.5406758680943873","host":"s3://npm-registry-packages-npm-production"}},"2.2.19":{"name":"@smooai/file","version":"2.2.19","author":{"url":"https://smooai.com","name":"SmooAI","email":"brent@smooai.com"},"license":"MIT","_id":"@smooai/file@2.2.19","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"dist":{"shasum":"19d77bb72ce996f3212e2df2e7575492247cebc2","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.19.tgz","fileCount":26,"integrity":"sha512-08RuXlJV7aozJZB1LrwOy/LW+ZhZWJabQ7goBfZ0JNGoOecdIWaYXIyy3e3xp5ByuNnJfMetAkafrHfLE5OmXg==","signatures":[{"sig":"MEUCIHiYhwC/ShA12Mof7np7PUZndh+A0egepD+ko98MPA/qAiEA7pAUI8wXxIdQ47Vql7wOBfzOvYTEUypzoUpLa9b6TXs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292465},"main":"./dist/index.cjs","_from":"file:smooai-file-2.2.19.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"default":"./dist/index.cjs","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./*":{"import":{"types":"./dist/*.d.mts","default":"./dist/*.mjs"},"require":{"types":"./dist/*.d.cts","default":"./dist/*.cjs"}}},"scripts":{"lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test && pnpm dotnet:test","build":"pnpm tsdown && pnpm run python:build && pnpm run rust:build && pnpm run go:build && pnpm run dotnet:build","watch":"tsdown --watch","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt && pnpm run dotnet:format","go:fmt":"(cd go/file && gofmt -w .)","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -v ./...)","version":"changeset version && node scripts/sync-versions.mjs","aibranch":"pnpm generate-git-branch","go:build":"(cd go/file && go build ./...)","lint:fix":"oxlint --fix .","rust:fmt":"(cd rust/file && cargo fmt)","check-all":"pnpm run version:check && pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run build","postbuild":"node scripts/check-lazy-s3.mjs","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","ci:publish":"pnpm build && pnpm changeset publish","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","dotnet:test":"(cd dotnet && dotnet test --configuration Release --logger \"console;verbosity=minimal\")","python:lint":"(cd python && uv run poe lint)","python:test":"(cd python && uv run poe test)","dotnet:build":"(cd dotnet && dotnet build --configuration Release)","format:check":"oxfmt --check . && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run go:fmt:check && pnpm run dotnet:format:check","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","python:build":"(cd python && uv run poe build)","version:sync":"node scripts/sync-versions.mjs","dotnet:format":"(cd dotnet && dotnet format)","python:format":"(cd python && uv run poe format)","version:check":"node scripts/check-versions.mjs","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","python:lint:fix":"(cd python && uv run poe lint:fix)","pre-commit-check":"(zsh .husky/pre-commit)","python:typecheck":"(cd python && uv run poe typecheck)","test:integration":"vitest run File.integration.spec","python:install-dev":"(cd python && uv run poe install-dev)","dotnet:format:check":"(cd dotnet && dotnet format --verify-no-changes)","python:format:check":"(cd python && uv run poe format:check)"},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"_resolved":"/tmp/ef683d06423328846a69289150961aec/smooai-file-2.2.19.tgz","_integrity":"sha512-08RuXlJV7aozJZB1LrwOy/LW+ZhZWJabQ7goBfZ0JNGoOecdIWaYXIyy3e3xp5ByuNnJfMetAkafrHfLE5OmXg==","repository":{"url":"git+https://github.com/SmooAI/file.git","type":"git"},"_npmVersion":"10.9.8","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"file-type":"^20.4.1","mime-types":"^2.1.35","@smooai/fetch":"^3.3.5","formdata-node":"^6.0.3","@file-type/xml":"^0.4.1","@smooai/logger":"^4.1.4","tiny-invariant":"^1.3.3","@aws-sdk/client-s3":"^3.777.0","content-disposition":"^0.5.4","@aws-sdk/s3-request-presigner":"^3.777.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.7.3","vite":"^6.2.3","husky":"^9.1.7","oxfmt":"^0.28.0","unrun":"latest","oxlint":"^0.16.0","tsdown":"latest","vitest":"^3.0.9","vite-node":"^3.0.9","typescript":"^5.9.2","@types/node":"^22.13.10","@changesets/cli":"^2.28.1","@types/mime-types":"^2.1.4","vite-tsconfig-paths":"^5.1.4","vitest-tsconfig-paths":"^3.4.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8"},"_npmOperationalInternal":{"tmp":"tmp/file_2.2.19_1787253959312_0.5666008234691882","host":"s3://npm-registry-packages-npm-production"}},"2.2.20":{"name":"@smooai/file","version":"2.2.20","description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","homepage":"https://github.com/SmooAI/file#readme","bugs":{"url":"https://github.com/SmooAI/file/issues"},"license":"MIT","author":{"name":"SmooAI","email":"brent@smooai.com","url":"https://smooai.com"},"repository":{"type":"git","url":"git+https://github.com/SmooAI/file.git"},"main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.mts","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"default":"./dist/index.cjs"},"./*":{"import":{"types":"./dist/*.d.mts","default":"./dist/*.mjs"},"require":{"types":"./dist/*.d.cts","default":"./dist/*.cjs"}}},"publishConfig":{"access":"public"},"dependencies":{"@aws-sdk/client-s3":"^3.777.0","@aws-sdk/s3-request-presigner":"^3.777.0","@file-type/xml":"^0.4.1","@smooai/fetch":"^3.3.5","@smooai/logger":"^4.1.4","content-disposition":"^0.5.4","file-type":"^20.4.1","formdata-node":"^6.0.3","mime-types":"^2.1.35","tiny-invariant":"^1.3.3"},"devDependencies":{"@changesets/cli":"^2.28.1","@smooai/config-typescript":"^1.0.16","@types/content-disposition":"^0.5.8","@types/mime-types":"^2.1.4","@types/node":"^22.13.10","husky":"^9.1.7","msw":"^2.7.3","oxfmt":"^0.28.0","oxlint":"^0.16.0","tsdown":"latest","typescript":"^5.9.2","unrun":"latest","vite":"^6.2.3","vite-node":"^3.0.9","vite-tsconfig-paths":"^5.1.4","vitest":"^3.0.9","vitest-tsconfig-paths":"^3.4.1"},"scripts":{"aibranch":"pnpm generate-git-branch","build":"pnpm tsdown && pnpm run python:build && pnpm run rust:build && pnpm run go:build && pnpm run dotnet:build","check-all":"pnpm run version:check && pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run build","ci:publish":"pnpm build && pnpm changeset publish","format":"oxfmt --write . && pnpm run python:format && pnpm run rust:fmt && pnpm run go:fmt && pnpm run dotnet:format","lint":"oxlint . && pnpm run python:lint && pnpm run rust:lint && pnpm run go:lint","lint:fix":"oxlint --fix .","postbuild":"node scripts/check-lazy-s3.mjs","pre-commit-check":"(zsh .husky/pre-commit)","test":"vitest run && pnpm python:test && pnpm rust:test && pnpm go:test && pnpm dotnet:test","test:integration":"vitest run File.integration.spec","typecheck":"tsc --noEmit --skipLibCheck && pnpm run python:typecheck && pnpm run rust:check","watch":"tsdown --watch","format:check":"oxfmt --check . && pnpm run python:format:check && pnpm run rust:fmt:check && pnpm run go:fmt:check && pnpm run dotnet:format:check","python:build":"(cd python && uv run poe build)","python:format":"(cd python && uv run poe format)","python:format:check":"(cd python && uv run poe format:check)","python:install-dev":"(cd python && uv run poe install-dev)","python:lint":"(cd python && uv run poe lint)","python:lint:fix":"(cd python && uv run poe lint:fix)","python:test":"(cd python && uv run poe test)","python:typecheck":"(cd python && uv run poe typecheck)","rust:build":"(cd rust/file && cargo build --release)","rust:check":"(cd rust/file && cargo check --all-targets)","rust:fmt":"(cd rust/file && cargo fmt)","rust:fmt:check":"(cd rust/file && cargo fmt --all -- --check)","rust:lint":"(cd rust/file && cargo clippy --all-targets -- -D warnings)","rust:test":"(cd rust/file && cargo test)","go:build":"(cd go/file && go build ./...)","go:fmt":"(cd go/file && gofmt -w .)","go:fmt:check":"(cd go/file && test -z \"$(gofmt -l .)\")","go:lint":"(cd go/file && go vet ./...)","go:test":"(cd go/file && go test -count=1 -v ./...)","dotnet:build":"(cd dotnet && dotnet build --configuration Release)","dotnet:format":"(cd dotnet && dotnet format)","dotnet:format:check":"(cd dotnet && dotnet format --verify-no-changes)","dotnet:test":"(cd dotnet && dotnet test --configuration Release --logger \"console;verbosity=minimal\")","version":"changeset version && node scripts/sync-versions.mjs && pnpm run format","version:check":"node scripts/check-versions.mjs","version:sync":"node scripts/sync-versions.mjs"},"_id":"@smooai/file@2.2.20","_integrity":"sha512-zOBZMundOpcrTmUUF7JjbmPb+tWeF6dFtOZKBjWRdbTjxYbE7/JlrAb5C+7qd/XTVryq+z5ztTruFYwIrFrbYw==","_resolved":"/tmp/f5ed6c7b8bfb6709968640c341171116/smooai-file-2.2.20.tgz","_from":"file:smooai-file-2.2.20.tgz","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-zOBZMundOpcrTmUUF7JjbmPb+tWeF6dFtOZKBjWRdbTjxYbE7/JlrAb5C+7qd/XTVryq+z5ztTruFYwIrFrbYw==","shasum":"21b8b1c123d00e471554b38658af9c02d55f112d","tarball":"https://registry.npmjs.org/@smooai/file/-/file-2.2.20.tgz","fileCount":26,"unpackedSize":292493,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCsSg2IzACSxAPRhuW0aHukEaMeFOm3Tc9b8ESZobRnAgIhAMO9CJgPbDdG96rYTI7f2AQ3xHf6NPoJhgDqvsfZmwbF"}]},"_npmUser":{"name":"brentragersmoo","email":"brent@smoo.ai"},"directories":{},"maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/file_2.2.20_1787257505276_0.0657060864126413"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-01T04:30:09.633Z","modified":"2026-08-20T20:25:05.623Z","1.0.4":"2025-04-01T04:30:09.916Z","1.0.5":"2025-04-01T20:54:16.773Z","1.0.6":"2025-04-07T21:13:26.973Z","1.0.7":"2025-04-09T14:25:59.804Z","1.1.0":"2025-05-10T20:07:40.206Z","1.1.1":"2025-06-30T23:13:55.447Z","1.1.2":"2025-09-03T13:35:53.179Z","1.1.3":"2025-09-22T18:24:05.278Z","1.1.4":"2025-09-23T18:54:07.970Z","1.1.5":"2026-02-23T16:16:57.364Z","2.0.0":"2026-02-25T05:39:03.737Z","2.0.1":"2026-03-07T16:33:10.315Z","2.1.0":"2026-04-22T18:58:35.139Z","2.2.0":"2026-04-24T04:35:25.672Z","2.2.1":"2026-04-24T13:17:53.260Z","2.2.2":"2026-04-24T14:42:31.956Z","2.2.3":"2026-04-24T15:37:02.389Z","2.2.4":"2026-04-24T16:02:05.685Z","2.2.5":"2026-05-12T03:38:57.747Z","2.2.6":"2026-05-12T16:52:48.267Z","2.2.9":"2026-05-12T17:33:36.484Z","2.2.10":"2026-05-12T19:19:13.930Z","2.2.11":"2026-05-18T19:57:19.079Z","2.2.12":"2026-05-18T20:49:31.748Z","2.2.13":"2026-08-20T18:28:22.855Z","2.2.14":"2026-08-20T18:37:22.027Z","2.2.19":"2026-08-20T19:25:59.458Z","2.2.20":"2026-08-20T20:25:05.444Z"},"bugs":{"url":"https://github.com/SmooAI/file/issues"},"author":{"name":"SmooAI","email":"brent@smooai.com","url":"https://smooai.com"},"license":"MIT","homepage":"https://github.com/SmooAI/file#readme","repository":{"type":"git","url":"git+https://github.com/SmooAI/file.git"},"description":"File operations that don't lie — magic-byte MIME detection catches spoofed extensions, size + content validation is built in, and presigned S3 uploads are one call away. Stream-first so large uploads don't blow your memory.","maintainers":[{"name":"brentragersmoo","email":"brent@smoo.ai"}],"readme":"<a name=\"readme-top\"></a>\n\n<p align=\"center\">\n  <a href=\"https://smoo.ai\"><img src=\".github/banner.png\" alt=\"@smooai/file — Trust the bytes, not the extension\" width=\"100%\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@smooai/file\"><img src=\"https://img.shields.io/npm/v/@smooai/file?style=for-the-badge&color=00A6A6&label=npm&logo=npm&logoColor=white&labelColor=020618\" alt=\"npm\"></a>\n  <a href=\"https://pypi.org/project/smooai-file/\"><img src=\"https://img.shields.io/pypi/v/smooai-file?style=for-the-badge&color=F49F0A&label=PyPI&logo=python&logoColor=white&labelColor=020618\" alt=\"PyPI\"></a>\n  <a href=\"https://crates.io/crates/smooai-file\"><img src=\"https://img.shields.io/crates/v/smooai-file?style=for-the-badge&color=FF6B6C&label=crates.io&logo=rust&logoColor=white&labelColor=020618\" alt=\"crates.io\"></a>\n  <a href=\"https://www.nuget.org/packages/SmooAI.File\"><img src=\"https://img.shields.io/nuget/v/SmooAI.File?style=for-the-badge&color=00A6A6&label=NuGet&logo=nuget&logoColor=white&labelColor=020618\" alt=\"NuGet\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://smoo.ai\"><img src=\"https://img.shields.io/badge/Smoo_AI-platform-00A6A6?style=for-the-badge&labelColor=020618\" alt=\"Smoo AI\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-F49F0A?style=for-the-badge&labelColor=020618\" alt=\"license\"></a>\n  <a href=\"https://github.com/SmooAI/file/actions/workflows/release.yml\"><img src=\"https://github.com/SmooAI/file/actions/workflows/release.yml/badge.svg\" alt=\"CI\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@smooai/file\"><img src=\"https://img.shields.io/npm/dw/@smooai/file?style=flat-square&color=F49F0A&label=downloads\" alt=\"downloads\"></a>\n  <img src=\"https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white\" alt=\"TypeScript\">\n  <img src=\"https://img.shields.io/badge/Python-3776AB?style=flat-square&logo=python&logoColor=white\" alt=\"Python\">\n  <img src=\"https://img.shields.io/badge/Rust-000000?style=flat-square&logo=rust&logoColor=white\" alt=\"Rust\">\n  <img src=\"https://img.shields.io/badge/Go-00ADD8?style=flat-square&logo=go&logoColor=white\" alt=\"Go\">\n  <img src=\"https://img.shields.io/badge/.NET-512BD4?style=flat-square&logo=dotnet&logoColor=white\" alt=\".NET\">\n</p>\n\n<p align=\"center\">\n  <a href=\"#-features\"><b>Features</b></a> &nbsp;·&nbsp;\n  <a href=\"#-install\"><b>Install</b></a> &nbsp;·&nbsp;\n  <a href=\"#five-languages-honestly\"><b>Language status</b></a> &nbsp;·&nbsp;\n  <a href=\"#-usage\"><b>Usage</b></a> &nbsp;·&nbsp;\n  <a href=\"#-part-of-smoo-ai\"><b>Platform</b></a>\n</p>\n\n---\n\n> **A file abstraction that trusts the bytes, not the extension.** Built for backends that take uploads from the open internet: magic-byte MIME detection, size and content validation, and presigned S3 uploads — one `File` API over local files, URLs, streams, S3 objects, and browser uploads, ported natively to **five languages**: TypeScript, Python, Rust, Go, and .NET.\n\n## ✨ Features <a name=\"features\"></a>\n\n|     | Capability                                                 | What you get                                                         |\n| --- | ---------------------------------------------------------- | -------------------------------------------------------------------- |\n| 🔒  | [**Trust the bytes**](#-trust-the-bytes-not-the-extension) | Magic-byte MIME detection catches spoofed uploads, in all five ports |\n| ☁️  | [**S3 in one call**](#️-s3-in-one-call)                     | Upload, download, signed URLs, presigned uploads with size caps      |\n| 🌐  | [**One API, many sources**](#-one-api-many-sources)        | Local · URL · bytes · stream · S3 · multipart, one `File` type       |\n| 🌊  | [**Lazy streaming**](#-lazy-streaming)                     | Streams ingest without full buffering — all five ports               |\n| 📝  | [**Rich metadata**](#-rich-metadata)                       | Detected MIME, size, timestamps, hash — on one object                |\n\n#### 🔒 Trust the bytes, not the extension\n\nMagic-byte MIME detection catches spoofed uploads. A `.php` renamed to `avatar.png` fails validation because the bytes disagree with the claim.\n\n- Magic-byte detection across 100+ file types — in every port\n- Validation fails with a **typed error** when the client-claimed MIME disagrees with the bytes, when the file is oversize, or when the type isn't allowed\n- One `validate()` call; the errors map cleanly to HTTP 400\n\nThe error shape is idiomatic per language: TypeScript and Python throw `FileContentMismatchError` / `FileSizeError` / `FileMimeError` (all extending `FileValidationError`); .NET throws the same three as exceptions; Rust has a `FileValidationError` enum; Go returns one `FileValidationError` with a `Kind` field. Because catch-by-type doesn't survive that, **all five also carry the same `kind` string** (`size` · `mime` · `content_mismatch`) — the discriminant portable code branches on.\n\n#### ☁️ S3 in one call\n\n- Stream a file into S3 and pull S3 objects back through the same validation pipeline — all five ports\n- Presigned upload URLs with `maxSize` baked into the signature, so oversized uploads are rejected by S3 before they hit you — all five ports\n- Signed download URLs — all five ports\n- In .NET, S3 support is the separate [`SmooAI.File.S3`](https://www.nuget.org/packages/SmooAI.File.S3) package, so .NET consumers who only need detection/validation skip the AWS SDK dependency (the TypeScript package currently ships its AWS SDK dependencies unconditionally)\n\n#### 🌐 One API, many sources\n\nLocal filesystem, URL download, S3 object, raw bytes, streams, multipart form uploads, or a browser `File`/`Blob` — all resolve to the same `File` instance with the same validation and metadata surface.\n\n#### 🌊 Lazy streaming\n\n**All five ports** ingest streams lazily — only a 64 KiB head is read for MIME sniffing, and the rest of the bytes flow through without buffering the whole file (`createFromStreamLazy` · `from_stream(lazy=True)` · `from_stream_lazy` · `NewFromStreamLazy` · `CreateFromStreamLazyAsync`). The semantics are identical because all five test suites load one shared fixture, [`spec/lazy-stream-contract.json`](./spec/lazy-stream-contract.json) — head size, what stays lazy, what triggers a full read, and what a read after a full iteration does. The honest per-port breakdown is in the [capability matrix](#five-languages-honestly).\n\n#### 📝 Rich metadata\n\nFile name, real (detected) MIME type, size, created/modified timestamps, hash/checksum, source type — all on one object.\n\n### How it fits together\n\n```mermaid\n%%{init: {'theme':'base','themeVariables':{\n  'background':'#020618','primaryColor':'#0b1426','primaryTextColor':'#e6edf6','primaryBorderColor':'#2b3a52',\n  'lineColor':'#7c8aa0','secondaryColor':'#0b1426','tertiaryColor':'#0b1426','fontFamily':'ui-sans-serif, system-ui, sans-serif',\n  'clusterBkg':'#0b1426','clusterBorder':'#22304a'}}}%%\nflowchart LR\n  SRC[\"local file · URL · bytes<br/>stream · S3 · multipart · Blob\"] --> F\n  subgraph F[\"File\"]\n    D[\"magic-byte MIME detection\"] --> V[\"validate()<br/>size · allowed types · claim vs bytes\"]\n    V --> M[\"metadata<br/>name · MIME · size · hash\"]\n  end\n  F --> OUT[\"save · S3 upload · FormData<br/>base64 · signed URLs\"]\n\n  classDef warm fill:#f49f0a,stroke:#ff6b6c,color:#1a0f00;\n  classDef teal fill:#00a6a6,stroke:#00c2c2,color:#011;\n  class V warm\n  class SRC,OUT teal\n```\n\n## 📦 Install <a name=\"install\"></a>\n\n| Language    | Package                                                           | Install                                    |\n| ----------- | ----------------------------------------------------------------- | ------------------------------------------ |\n| TypeScript  | [`@smooai/file`](https://www.npmjs.com/package/@smooai/file)      | `pnpm add @smooai/file`                    |\n| Python      | [`smooai-file`](https://pypi.org/project/smooai-file/)            | `pip install smooai-file`                  |\n| Rust        | [`smooai-file`](https://crates.io/crates/smooai-file)             | `cargo add smooai-file`                    |\n| Go          | `github.com/SmooAI/file/go/file/v2`                               | `go get github.com/SmooAI/file/go/file/v2` |\n| .NET (core) | [`SmooAI.File`](https://www.nuget.org/packages/SmooAI.File)       | `dotnet add package SmooAI.File`           |\n| .NET (S3)   | [`SmooAI.File.S3`](https://www.nuget.org/packages/SmooAI.File.S3) | `dotnet add package SmooAI.File.S3`        |\n\nLanguage-specific source lives in [`src/`](./src/) (TypeScript), [`python/`](./python/), [`rust/`](./rust/), [`go/`](./go/), and [`dotnet/`](./dotnet/). The .NET port uses [Mime-Detective](https://github.com/MediatedCommunications/Mime-Detective) for magic-byte MIME sniffing.\n\n## Five languages, honestly\n\nEvery port carries the core promise: **magic-byte MIME detection, typed size/mime/content-mismatch validation, rich metadata, S3 upload + presigned/signed URLs, and creation from local files, URLs, bytes, streams, S3, and multipart uploads.** Beyond that the surfaces are uneven — here is the verified breakdown, so you know before you pick one:\n\n| Capability                                          | TypeScript | Python | Rust | Go  |                             .NET                             |\n| --------------------------------------------------- | :--------: | :----: | :--: | :-: | :----------------------------------------------------------: |\n| Magic-byte detection + typed `validate()`           |     ✅     |   ✅   |  ✅  | ✅  |                              ✅                              |\n| Lazy streaming ingest                               |     ✅     |   ✅   |  ✅  | ✅  |                              ✅                              |\n| Chunked reads (`iter_bytes`)                        |     ✅     |   ✅   |  ✅  | ✅  |                    ✅ (`OpenReadStream`)                     |\n| `pipeTo` a writable stream                          |     ✅     |   ❌   |  ❌  | ❌  |                              ❌                              |\n| `append` / `prepend` / `truncate`                   |     ✅     |   ✅   |  ❌  | ✅  |                              ❌                              |\n| `exists` / `isReadable` / `isWritable` / `getStats` |     ✅     |   ✅   |  ❌  | ❌  |                              ❌                              |\n| Upload to S3 + presigned upload URL                 |     ✅     |   ✅   |  ✅  | ✅  | ✅ ([S3 pkg](https://www.nuget.org/packages/SmooAI.File.S3)) |\n| Signed download URL                                 |     ✅     |   ✅   |  ✅  | ✅  |                              ✅                              |\n| `saveToS3` / `moveToS3` (returns new `File`)        |     ✅     |   ✅   |  ❌  | ❌  |                              ❌                              |\n| `downloadFromS3` (S3 → local path)                  |     ❌     |   ✅   |  ❌  | ❌  |                              ❌                              |\n| `setMetadata`                                       |     ✅     |   ✅   |  ✅  | ✅  |                              ✅                              |\n\n> **On `downloadFromS3`:** only Python writes an S3 object to a local path. Rust's `download_from_s3` is a plain alias for `from_s3`, and Go's replaces the receiver in place — neither touches the filesystem, so neither belongs in this row. TypeScript composes the same thing today with `(await File.createFromS3(b, k)).saveToFile(p)`.\n\nSame semantics where a capability exists in two ports; each port is written idiomatically for its ecosystem and carries its own test suite.\n\n**Errors are portable by `kind`, not by type.** TypeScript, Python and .NET raise three distinct classes; Rust collapses them into one enum; Go returns one struct with a `Kind` field — so `catch (e) { if (e instanceof FileSizeError) }` has no equivalent in Rust or Go. Every port now also carries the same `kind` discriminant (`\"size\"` · `\"mime\"` · `\"content_mismatch\"`), and that is what portable code branches on. The values and the fields each one carries are pinned by [`spec/error-taxonomy.json`](./spec/error-taxonomy.json), which all five test suites load.\n\n## 🚀 Usage <a name=\"usage\"></a>\n\nTypeScript below; the same shapes exist per the matrix above in [Python](./python/), [Rust](./rust/), [Go](./go/), and [.NET](./dotnet/).\n\nJump to a pattern:\n\n- [Basic usage](#basic-usage)\n- [Reading and saving](#reading-and-saving)\n- [S3 integration](#s3-integration)\n- [File type detection](#file-type-detection)\n- [FormData support](#formdata-support)\n- [Web File / Blob (Hono, Next.js, Browser)](#web-file)\n- [Validation (size, mime, content-vs-claim)](#validation)\n- [Base64 encoding](#base64)\n- [Presigned upload URL](#presigned-upload)\n\n#### Basic usage <a name=\"basic-usage\"></a>\n\n```typescript\nimport File from '@smooai/file';\n\n// Create a file from a local path\nconst file = await File.createFromFile('path/to/file.txt');\n\n// Read file contents\nconst content = await file.readFileString();\nconsole.log(content);\n\n// Get file metadata\nconsole.log(file.metadata);\n// {\n//   name: 'file.txt',\n//   mimeType: 'text/plain',\n//   size: 1234,\n//   extension: 'txt',\n//   path: 'path/to/file.txt',\n//   lastModified: Date,\n//   createdAt: Date\n// }\n```\n\n<p align=\"right\">(<a href=\"#usage\">back to usage</a>)</p>\n\n#### Reading and saving <a name=\"reading-and-saving\"></a>\n\n```typescript\nimport File from '@smooai/file';\n\n// Create a file from a URL\nconst file = await File.createFromUrl('https://example.com/file.zip');\n\n// Pipe to a destination stream\nawait file.pipeTo(someWritableStream);\n\n// Read as bytes (note: buffers the content — the TS port has no lazy streaming yet)\nconst bytes = await file.readFileBytes();\n\n// Save to filesystem\nconst { original, newFile } = await file.saveToFile('downloads/file.zip');\n```\n\n<p align=\"right\">(<a href=\"#usage\">back to usage</a>)</p>\n\n#### S3 integration <a name=\"s3-integration\"></a>\n\n```typescript\nimport File from '@smooai/file';\n\n// Create from S3\nconst file = await File.createFromS3('my-bucket', 'path/to/file.jpg');\n\n// Upload to S3\nawait file.uploadToS3('my-bucket', 'remote/file.jpg');\n\n// Save to S3 (creates new file instance)\nconst { original, newFile } = await file.saveToS3('my-bucket', 'remote/file.jpg');\n\n// Move to S3 (deletes local file if source was local)\nconst s3File = await file.moveToS3('my-bucket', 'remote/file.jpg');\n\n// Generate signed URL\nconst signedUrl = await s3File.getSignedUrl(3600); // URL expires in 1 hour\n```\n\n<p align=\"right\">(<a href=\"#usage\">back to usage</a>)</p>\n\n#### File type detection <a name=\"file-type-detection\"></a>\n\n```typescript\nimport File from '@smooai/file';\n\nconst file = await File.createFromFile('document.xml');\n\n// Get file type information (detected via magic numbers)\nconsole.log(file.mimeType); // 'application/xml'\nconsole.log(file.extension); // 'xml'\n\n// File type is automatically detected from:\n// - Magic numbers (via file-type)\n// - MIME type headers\n// - File extension\n// - Custom detectors\n```\n\n<p align=\"right\">(<a href=\"#usage\">back to usage</a>)</p>\n\n#### FormData support <a name=\"formdata-support\"></a>\n\n```typescript\nimport File from '@smooai/file';\n\nconst file = await File.createFromFile('document.pdf');\n\n// Convert to FormData for uploads\nconst formData = await file.toFormData('document');\n\n// Use with fetch or other HTTP clients\nawait fetch('https://api.example.com/upload', {\n    method: 'POST',\n    body: formData,\n});\n```\n\n<p align=\"right\">(<a href=\"#usage\">back to usage</a>)</p>\n\n#### Web File / Blob (Hono, Next.js, Browser) <a name=\"web-file\"></a>\n\n```typescript\nimport File from '@smooai/file';\n\n// Hono multipart route\napp.post('/upload', async (c) => {\n    const form = await c.req.formData();\n    const webFile = form.get('file') as globalThis.File;\n\n    // Preserves the web File's name and type hints.\n    const file = await File.createFromWebFile(webFile);\n    // …validate, upload, etc.\n});\n```\n\n<p align=\"right\">(<a href=\"#usage\">back to usage</a>)</p>\n\n#### Validation (size, mime, content-vs-claim) <a name=\"validation\"></a>\n\n```typescript\nimport File, { FileValidationError } from '@smooai/file';\n\nconst file = await File.createFromWebFile(webFile);\n\ntry {\n    await file.validate({\n        maxSize: 5 * 1024 * 1024, // 5MB\n        allowedMimes: ['image/png', 'image/jpeg', 'image/webp'],\n        expectedMimeType: webFile.type, // compares magic-byte detection vs claimed Content-Type\n    });\n} catch (err) {\n    if (err instanceof FileValidationError) {\n        // FileSizeError | FileMimeError | FileContentMismatchError — map to HTTP 400\n        throw new HTTPException(400, { message: err.message });\n    }\n    throw err;\n}\n```\n\n`expectedMimeType` is the primary defense against mime-spoofing: a `.php` file uploaded with `Content-Type: image/png` will fail because magic-byte detection doesn't match the claim.\n\n<p align=\"right\">(<a href=\"#usage\">back to usage</a>)</p>\n\n#### Base64 encoding (email attachments, data URLs) <a name=\"base64\"></a>\n\n```typescript\nimport File from '@smooai/file';\n\nconst file = await File.createFromUrl('https://s3.example.com/invoice.pdf');\n\nawait sendEmail({\n    attachments: [\n        {\n            filename: 'invoice.pdf',\n            content: await file.toBase64(),\n            encoding: 'base64',\n        },\n    ],\n});\n```\n\n<p align=\"right\">(<a href=\"#usage\">back to usage</a>)</p>\n\n#### Presigned upload URL (server signs, client uploads direct to S3) <a name=\"presigned-upload\"></a>\n\n```typescript\nimport File from '@smooai/file';\n\n// Server issues a time-limited signed URL the client uploads bytes to directly.\n// `maxSize` is baked into the signature so oversized uploads are rejected by S3.\nconst url = await File.createPresignedUploadUrl({\n    bucket: Resource.Bucket.name,\n    key: `avatars/${userId}.png`,\n    contentType: 'image/png',\n    expiresIn: 600,\n    maxSize: 2 * 1024 * 1024,\n});\n```\n\n<p align=\"right\">(<a href=\"#usage\">back to usage</a>)</p>\n\n## 🔧 Built with\n\n- TypeScript · Node.js File System API · AWS SDK v3\n- [file-type](https://github.com/sindresorhus/file-type) for magic number-based MIME type detection (TypeScript port)\n- [Mime-Detective](https://github.com/MediatedCommunications/Mime-Detective) for MIME sniffing (.NET port)\n- [@smooai/fetch](https://github.com/SmooAI/fetch) for URL downloads\n- [@smooai/logger](https://github.com/SmooAI/logger) for structured logging\n\n## 🧩 Part of Smoo AI <a name=\"part-of-smoo-ai\"></a>\n\n`@smooai/file` is built and open-sourced by **[Smoo AI](https://smoo.ai)** — the AI-powered business platform with AI built into every product: CRM, customer support, campaigns, field service, observability, and developer tools.\n\n- 🧰 **More open source from Smoo AI** — [smoo.ai/open-source](https://smoo.ai/open-source)\n- 🧩 **Sibling packages** — [@smooai/fetch](https://github.com/SmooAI/fetch), [@smooai/logger](https://github.com/SmooAI/logger), [@smooai/config](https://github.com/SmooAI/config), [smooth-operator](https://github.com/SmooAI/smooth-operator), [smooth](https://github.com/SmooAI/smooth)\n\n## 🤝 Contributing <a name=\"contributing\"></a>\n\nContributions are welcome. This project uses [changesets](https://github.com/changesets/changesets) to manage versions and releases.\n\n#### Development workflow\n\n1. Fork the repository\n2. Create your branch (`git checkout -b amazing-feature`)\n3. Make your changes (the five ports live in `src/`, `python/`, `rust/`, `go/`, `dotnet/`)\n4. Add a changeset to document them:\n\n    ```sh\n    pnpm changeset\n    ```\n\n    You'll be prompted to choose a version bump (patch, minor, or major) and describe the change.\n\n5. Commit your changes (`git commit -m 'Add some amazing feature'`)\n6. Push to the branch (`git push origin feature/amazing-feature`)\n7. Open a pull request — reference any related issues in the description\n\nThe maintainers will review your PR and may request changes before merging.\n\n## 📄 License <a name=\"license\"></a>\n\nMIT — see [LICENSE](./LICENSE).\n\n## 📬 Contact\n\nBrent Rager\n\n- [Email](mailto:brent@smoo.ai)\n- [LinkedIn](https://www.linkedin.com/in/brentrager/)\n- [BlueSky](https://bsky.app/profile/brentragertech.bsky.social)\n- [TikTok](https://www.tiktok.com/@brentragertech)\n- [Instagram](https://www.instagram.com/brentragertech/)\n\nSmoo GitHub: [https://github.com/SmooAI](https://github.com/SmooAI)\n\n<p align=\"right\">(<a href=\"#readme-top\">back to top</a>)</p>\n\n---\n\n<p align=\"center\">\n  Built by <a href=\"https://smoo.ai\"><strong>Smoo AI</strong></a> — AI built into every product.\n</p>\n","readmeFilename":"README.md"}