{"_id":"@diegoaltoworks/zipper","_rev":"7-50b4fd6438aa978c6003f54627480d97","name":"@diegoaltoworks/zipper","dist-tags":{"latest":"1.0.6"},"versions":{"1.0.0":{"name":"@diegoaltoworks/zipper","version":"1.0.0","keywords":["download","zip","bulk","files","browser","jszip","file-saver"],"author":"","license":"MIT","_id":"@diegoaltoworks/zipper@1.0.0","maintainers":[{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"}],"homepage":"https://diegoaltoworks.github.io/zipper","bugs":{"url":"https://github.com/diegoaltoworks/zipper/issues"},"dist":{"shasum":"eab44a598cdc0c2f37fd9f96677b07f4c1b6cea4","tarball":"https://registry.npmjs.org/@diegoaltoworks/zipper/-/zipper-1.0.0.tgz","fileCount":7,"integrity":"sha512-icF0wWkKgK++lWWlVJsoD4ysdyPzSNeB/T4hVPR5U/NddOYzskkx7r3XT5StmNQf4uWq3GZyeoIwTVJZ41yz7g==","signatures":[{"sig":"MEQCIHNXHWZkzgxzO/LYMQywX90y/mUetHWFzTFJvekJ38t5AiAOzkNjqlJiIvICrt2jSt7+9i79nHHgkT9gyWJG9mNjcQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23148},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"c9da84ec933d54a309a1b2a29a6a3ee78df400c7","scripts":{"lint":"eslint src --ext .ts","test":"jest --testTimeout=10000","build":"rollup -c","format":"prettier --write \"src/**/*.ts\" \"__tests__/**/*.ts\"","lint:fix":"eslint src --ext .ts --fix","test:watch":"jest --watch --testTimeout=10000","type-check":"tsc --noEmit","test:coverage":"jest --coverage --testTimeout=10000","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"},"repository":{"url":"git+https://github.com/diegoaltoworks/zipper.git","type":"git"},"_npmVersion":"10.9.3","description":"A modern TypeScript package for downloading multiple files and combining them into a ZIP archive","directories":{},"_nodeVersion":"22.18.0","dependencies":{"jszip":"^3.10.1","file-saver":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tslib":"^2.6.2","eslint":"^8.56.0","rollup":"^4.9.2","ts-jest":"^29.1.1","prettier":"^3.1.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/file-saver":"^2.0.7","rollup-plugin-dts":"^6.1.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.2","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^6.17.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/zipper_1.0.0_1763171559987_0.1315425357882789","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@diegoaltoworks/zipper","version":"1.0.1","keywords":["download","zip","bulk","files","browser","jszip","file-saver"],"author":{"name":"Diego Alto","email":"diego@diegoalto.works"},"license":"MIT","_id":"@diegoaltoworks/zipper@1.0.1","maintainers":[{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"}],"homepage":"https://diegoaltoworks.github.io/zipper","bugs":{"url":"https://github.com/diegoaltoworks/zipper/issues"},"dist":{"shasum":"2132ea40d6dca7b6aefd59395ccad24a3302c9c1","tarball":"https://registry.npmjs.org/@diegoaltoworks/zipper/-/zipper-1.0.1.tgz","fileCount":7,"integrity":"sha512-UA/K8TUJxVityWUIuqYHgOlXHLZEVEK6aS4G3fqi2iF1N8/ORRLCwlBjWh045SHkQEK8Y6PFYMdVXBhNfpptdw==","signatures":[{"sig":"MEYCIQD1ab0fIuZeoY3riDiIEJyRfGk0T1Fl4q37iOwxkPcURgIhAJd/Q78aGzDezqDQzhX7GoabOqwUuAWuJ+BTXEaf5dWG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28354},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js","require":"./dist/index.cjs.js"}},"gitHead":"bafbb334cb0f2057358de3ad7d4b49eaad0f6f7b","scripts":{"lint":"eslint src --ext .ts","test":"jest --testTimeout=10000","build":"rollup -c","format":"prettier --write \"src/**/*.ts\" \"__tests__/**/*.ts\"","lint:fix":"eslint src --ext .ts --fix","test:e2e":"playwright test","test:watch":"jest --watch --testTimeout=10000","type-check":"tsc --noEmit","test:e2e:ui":"playwright test --ui","test:coverage":"jest --coverage --testTimeout=10000","prepublishOnly":"npm run lint && npm run test && npm run build","test:e2e:debug":"playwright test --debug","test:e2e:headed":"playwright test --headed"},"_npmUser":{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"},"repository":{"url":"git+https://github.com/diegoaltoworks/zipper.git","type":"git"},"_npmVersion":"10.9.3","description":"A modern TypeScript package for downloading multiple files and combining them into a ZIP archive","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"jszip":"^3.10.1","file-saver":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","sharp":"^0.34.5","tslib":"^2.6.2","eslint":"^8.56.0","rollup":"^4.9.2","ts-jest":"^29.1.1","prettier":"^3.1.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@playwright/test":"^1.56.1","@types/file-saver":"^2.0.7","rollup-plugin-dts":"^6.1.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.2","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^6.17.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/zipper_1.0.1_1763178204313_0.5233380220994341","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@diegoaltoworks/zipper","version":"1.0.2","keywords":["download","zip","bulk","files","browser","node","nodejs","server","isomorphic","universal","jszip","file-saver"],"author":{"name":"Diego Alto","email":"diego@diegoalto.works"},"license":"MIT","_id":"@diegoaltoworks/zipper@1.0.2","maintainers":[{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"}],"homepage":"https://diegoaltoworks.github.io/zipper","bugs":{"url":"https://github.com/diegoaltoworks/zipper/issues"},"dist":{"shasum":"8a850943d777088bc2d851bc9ff6c79fbed7115b","tarball":"https://registry.npmjs.org/@diegoaltoworks/zipper/-/zipper-1.0.2.tgz","fileCount":7,"integrity":"sha512-Bfrmx0dS1D5PkRF5iZb+Ssv9vsb60naLmaJL4uzirnbPOmFZeAWtfB2ZpaWzZBmvsBeHKqxZPrbyNr5kwKnsNg==","signatures":[{"sig":"MEYCIQDBURSunFTCFE6NaZSbRqyb0tQeVTjxylIJOPSrhgpGyQIhAOed/uT9nhEq8BBPxG57BIevaxaGOYlrFFz/F4HtYIDr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41039},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js","require":"./dist/index.cjs.js"}},"gitHead":"05141845765f763efea97d0256a6a962c0b243a7","scripts":{"lint":"eslint src --ext .ts","test":"jest --testTimeout=10000","build":"rollup -c","format":"prettier --write \"src/**/*.ts\" \"__tests__/**/*.ts\"","lint:fix":"eslint src --ext .ts --fix","test:e2e":"playwright test","test:watch":"jest --watch --testTimeout=10000","type-check":"tsc --noEmit","test:e2e:ui":"playwright test --ui","test:coverage":"jest --coverage --testTimeout=10000","prepublishOnly":"npm run lint && npm run test && npm run build","test:e2e:debug":"playwright test --debug","test:e2e:headed":"playwright test --headed"},"_npmUser":{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"},"repository":{"url":"git+https://github.com/diegoaltoworks/zipper.git","type":"git"},"_npmVersion":"10.9.3","description":"An isomorphic TypeScript package for downloading and zipping files in browser and Node.js","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"jszip":"^3.10.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","sharp":"^0.34.5","tslib":"^2.6.2","eslint":"^8.56.0","rollup":"^4.9.2","ts-jest":"^29.1.1","prettier":"^3.1.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.0.0","@playwright/test":"^1.56.1","@types/file-saver":"^2.0.7","rollup-plugin-dts":"^6.1.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.2","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^6.17.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^6.17.0"},"peerDependencies":{"file-saver":"^2.0.5"},"peerDependenciesMeta":{"file-saver":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/zipper_1.0.2_1763179382411_0.49778405635073675","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@diegoaltoworks/zipper","version":"1.0.3","keywords":["download","zip","bulk","files","browser","node","nodejs","server","isomorphic","universal","jszip","file-saver"],"author":{"name":"Diego Alto","email":"diego@diegoalto.works"},"license":"MIT","_id":"@diegoaltoworks/zipper@1.0.3","maintainers":[{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"}],"homepage":"https://diegoaltoworks.github.io/zipper","bugs":{"url":"https://github.com/diegoaltoworks/zipper/issues"},"dist":{"shasum":"1f58496fb2c3c9b9f32f8c9cdd013e6506985bf6","tarball":"https://registry.npmjs.org/@diegoaltoworks/zipper/-/zipper-1.0.3.tgz","fileCount":7,"integrity":"sha512-AMgw62i0YLAkHyruzPfNsxr3E6t2IgV8hgXRkRv2GrDJmYRdafnLkA5FheGX/IQwP81vWx4MhE4ohwuJkMZ6xg==","signatures":[{"sig":"MEYCIQC7d4IAVMuBDptEWhwRwgYcfCc4d7tWiVezQiG3Hpf2agIhAM3ONsgy+wCsdcZ8a9ndXpuC/aZsoqnjvkEAD4MN+vIt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60157},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js","require":"./dist/index.cjs.js"}},"gitHead":"5994c3fe0a18118c9b5ef16e776f434a9c22148c","scripts":{"lint":"eslint src --ext .ts","test":"jest --testTimeout=10000","build":"rollup -c","format":"prettier --write \"src/**/*.ts\" \"__tests__/**/*.ts\"","lint:fix":"eslint src --ext .ts --fix","test:e2e":"playwright test","test:watch":"jest --watch --testTimeout=10000","type-check":"tsc --noEmit","test:e2e:ui":"playwright test --ui","test:coverage":"jest --coverage --testTimeout=10000","prepublishOnly":"npm run lint && npm run test && npm run build","test:e2e:debug":"playwright test --debug","test:e2e:headed":"playwright test --headed"},"_npmUser":{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"},"repository":{"url":"git+https://github.com/diegoaltoworks/zipper.git","type":"git"},"_npmVersion":"10.9.3","description":"An isomorphic TypeScript package for downloading and zipping files in browser and Node.js","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"jszip":"^3.10.1","file-saver":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","sharp":"^0.34.5","tslib":"^2.6.2","eslint":"^8.56.0","rollup":"^4.9.2","ts-jest":"^29.1.1","prettier":"^3.1.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.0.0","@playwright/test":"^1.56.1","@types/file-saver":"^2.0.7","rollup-plugin-dts":"^6.1.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.2","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^6.17.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/zipper_1.0.3_1763196126354_0.7843022723918676","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@diegoaltoworks/zipper","version":"1.0.4","keywords":["download","zip","bulk","files","browser","node","nodejs","server","isomorphic","universal","jszip","file-saver"],"author":{"name":"Diego Alto","email":"diego@diegoalto.works"},"license":"MIT","_id":"@diegoaltoworks/zipper@1.0.4","maintainers":[{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"}],"homepage":"https://diegoaltoworks.github.io/zipper","bugs":{"url":"https://github.com/diegoaltoworks/zipper/issues"},"dist":{"shasum":"0ad460bb74478bf280210b0ecfb2fa14bc1d03d7","tarball":"https://registry.npmjs.org/@diegoaltoworks/zipper/-/zipper-1.0.4.tgz","fileCount":7,"integrity":"sha512-SJmZW3BWtQ+gB1Szvyimh51LmzYdV5tnBo5RKKNlf4+fnhelXgVoGlL8+13Zxy5F3EhUPOhIhVEpgmFZB9MMfA==","signatures":[{"sig":"MEQCIBepf+1vM1nByPJmcpLaXEcc8ZStHCtBQ/onw5AAN49zAiB9P9WdG0n7RovDI2daXkRN5YhGjAlX9crfIFr0RcDCzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60157},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js","require":"./dist/index.cjs.js"}},"gitHead":"5385dd247024ab03c78e17a9c1b9a8c47764371b","scripts":{"lint":"eslint src --ext .ts","test":"jest --testTimeout=10000","build":"rollup -c","format":"prettier --write \"src/**/*.ts\" \"__tests__/**/*.ts\"","lint:fix":"eslint src --ext .ts --fix","test:e2e":"playwright test","test:watch":"jest --watch --testTimeout=10000","type-check":"tsc --noEmit","test:e2e:ui":"playwright test --ui","test:coverage":"jest --coverage --testTimeout=10000","prepublishOnly":"npm run lint && npm run test && npm run build","test:e2e:debug":"playwright test --debug","test:e2e:headed":"playwright test --headed"},"_npmUser":{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"},"repository":{"url":"git+https://github.com/diegoaltoworks/zipper.git","type":"git"},"_npmVersion":"10.9.3","description":"An isomorphic TypeScript package for downloading and zipping files in browser and Node.js","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"jszip":"^3.10.1","file-saver":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","sharp":"^0.34.5","tslib":"^2.6.2","eslint":"^8.56.0","rollup":"^4.9.2","ts-jest":"^29.1.1","prettier":"^3.1.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.0.0","@playwright/test":"^1.56.1","@types/file-saver":"^2.0.7","rollup-plugin-dts":"^6.1.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.2","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^6.17.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/zipper_1.0.4_1763197965997_0.6866215387459074","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@diegoaltoworks/zipper","version":"1.0.5","keywords":["download","zip","bulk","files","browser","node","nodejs","server","isomorphic","universal","jszip","file-saver"],"author":{"name":"Diego Alto","email":"diego@diegoalto.works"},"license":"MIT","_id":"@diegoaltoworks/zipper@1.0.5","maintainers":[{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"}],"homepage":"https://diegoaltoworks.github.io/zipper","bugs":{"url":"https://github.com/diegoaltoworks/zipper/issues"},"dist":{"shasum":"75c812eac645a998952747eaf099808962ba8705","tarball":"https://registry.npmjs.org/@diegoaltoworks/zipper/-/zipper-1.0.5.tgz","fileCount":9,"integrity":"sha512-Y/ugQhc0UK32NhvXsj1Z0r9dmFeqhvPsRhqjvmBLtT5w3XGRv+7K1O8dyvT819CZL5aWxzFECXg1ji7kynXpdQ==","signatures":[{"sig":"MEYCIQDT9qYC9b9WbAFa6+ou7oQmX0aDIht/0hjT2qJjbJReswIhAMugcZh0dzTSmMKOjW0n/rKyCpgpcNfKnP83jkx9Ln+5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41115},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","default":"./dist/index.esm.js","require":"./dist/index.cjs.js"}},"gitHead":"135b891a6e167233ebbf0a0748cd436baf173180","scripts":{"lint":"eslint src --ext .ts","test":"jest --testTimeout=10000","build":"rollup -c","format":"prettier --write \"src/**/*.ts\" \"__tests__/**/*.ts\"","lint:fix":"eslint src --ext .ts --fix","test:e2e":"playwright test","test:watch":"jest --watch --testTimeout=10000","type-check":"tsc --noEmit","test:e2e:ui":"playwright test --ui","test:coverage":"jest --coverage --testTimeout=10000","prepublishOnly":"npm run lint && npm run test && npm run build","test:e2e:debug":"playwright test --debug","test:e2e:headed":"playwright test --headed"},"_npmUser":{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"},"repository":{"url":"git+https://github.com/diegoaltoworks/zipper.git","type":"git"},"_npmVersion":"10.9.3","description":"An isomorphic TypeScript package for downloading and zipping files in browser and Node.js","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"jszip":"^3.10.1","file-saver":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","sharp":"^0.34.5","tslib":"^2.6.2","eslint":"^8.56.0","rollup":"^4.9.2","ts-jest":"^29.1.1","prettier":"^3.1.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.0.0","@playwright/test":"^1.56.1","@types/file-saver":"^2.0.7","rollup-plugin-dts":"^6.1.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.2","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^6.17.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/zipper_1.0.5_1763203524098_0.8557024517315572","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@diegoaltoworks/zipper","version":"1.0.6","description":"An isomorphic TypeScript package for downloading and zipping files in browser and Node.js","main":"dist/index.cjs.js","module":"dist/index.esm.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js","default":"./dist/index.esm.js"}},"sideEffects":false,"author":{"name":"Diego Alto","email":"diego@diegoalto.works"},"repository":{"type":"git","url":"git+https://github.com/diegoaltoworks/zipper.git"},"bugs":{"url":"https://github.com/diegoaltoworks/zipper/issues"},"homepage":"https://diegoaltoworks.github.io/zipper","scripts":{"build":"rollup -c","test":"jest --testTimeout=10000","test:watch":"jest --watch --testTimeout=10000","test:coverage":"jest --coverage --testTimeout=10000","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","test:e2e:headed":"playwright test --headed","test:e2e:debug":"playwright test --debug","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","format":"prettier --write \"src/**/*.ts\" \"__tests__/**/*.ts\"","type-check":"tsc --noEmit","prepublishOnly":"npm run lint && npm run test && npm run build"},"keywords":["download","zip","bulk","files","browser","node","nodejs","server","isomorphic","universal","jszip","file-saver"],"license":"MIT","devDependencies":{"@playwright/test":"^1.56.1","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3","@rollup/plugin-typescript":"^11.1.5","@types/file-saver":"^2.0.7","@types/jest":"^29.5.11","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.17.0","@typescript-eslint/parser":"^6.17.0","eslint":"^8.56.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.2","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","prettier":"^3.1.1","rollup":"^4.9.2","rollup-plugin-dts":"^6.1.0","sharp":"^0.34.5","ts-jest":"^29.1.1","tslib":"^2.6.2","typescript":"^5.3.3"},"dependencies":{"file-saver":"^2.0.5","jszip":"^3.10.1"},"_id":"@diegoaltoworks/zipper@1.0.6","gitHead":"a264f542b72c08ee14a428698d03ee4dbc4261cf","_nodeVersion":"20.19.5","_npmVersion":"10.8.2","dist":{"integrity":"sha512-6atMQ0fzUdpXhcwnbyIoKTPGVmXk5J+8EIKZc0w8lD/V6VznAfvoCPYob/Kou2IeOawpvmSqP6s/OBH50I9cag==","shasum":"248e10206e844e70f8ee3c51a60fcbd282c17dc4","tarball":"https://registry.npmjs.org/@diegoaltoworks/zipper/-/zipper-1.0.6.tgz","fileCount":9,"unpackedSize":41115,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@diegoaltoworks%2fzipper@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDh6S8lF2+LUJRFJQ+ung8o9n5mqpMF/GbLz4eIx+M15AiEAtlZgHybRagX1Vxxu5aqsy8SWNgH4hlfGiyYggnlq/GE="}]},"_npmUser":{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"},"directories":{},"maintainers":[{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/zipper_1.0.6_1763227210041_0.4102846599687069"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-15T01:52:39.926Z","modified":"2025-11-15T17:20:10.700Z","1.0.0":"2025-11-15T01:52:40.200Z","1.0.1":"2025-11-15T03:43:24.525Z","1.0.2":"2025-11-15T04:03:02.591Z","1.0.3":"2025-11-15T08:42:06.562Z","1.0.4":"2025-11-15T09:12:46.225Z","1.0.5":"2025-11-15T10:45:24.305Z","1.0.6":"2025-11-15T17:20:10.269Z"},"bugs":{"url":"https://github.com/diegoaltoworks/zipper/issues"},"author":{"name":"Diego Alto","email":"diego@diegoalto.works"},"license":"MIT","homepage":"https://diegoaltoworks.github.io/zipper","keywords":["download","zip","bulk","files","browser","node","nodejs","server","isomorphic","universal","jszip","file-saver"],"repository":{"type":"git","url":"git+https://github.com/diegoaltoworks/zipper.git"},"description":"An isomorphic TypeScript package for downloading and zipping files in browser and Node.js","maintainers":[{"name":"diegoaltoworks","email":"diego@diegoalto.co.uk"}],"readme":"# Zipper\n\nAn **isomorphic** TypeScript package for downloading multiple files and combining them into a ZIP archive. Works in both **browser** and **Node.js** environments!\n\n**By Diego Alto** | [GitHub](https://github.com/diegoaltoworks/zipper) | [NPM](https://www.npmjs.com/package/@diegoaltoworks/zipper) | [Documentation](https://diegoaltoworks.github.io/zipper) | [Live Demo](https://zipper-demo.vercel.app)\n\n## Features\n\n- ⚡ **Isomorphic**: Works in both browser and Node.js environments\n- 📦 **TypeScript Support**: Full type definitions included\n- 🚀 **Concurrent Downloads**: Download multiple files in parallel\n- 📊 **Progress Tracking**: Built-in progress callbacks\n- 🛡️ **Error Handling**: Robust error handling with optional error callbacks\n- 🌐 **Modern Dependencies**: Uses standard npm packages (JSZip, File-Saver)\n- 🔧 **Flexible**: Continue on errors or fail fast\n- ⚙️ **Customizable**: Custom fetch options, timeouts, and ZIP filename\n\n## Installation\n\n```bash\nnpm install @diegoaltoworks/zipper\n```\n\nThat's it! File-saver is included automatically for browser support.\n\n## Environment Support\n\n- **Browser**: Auto-triggers ZIP download\n- **Node.js**: Returns Buffer for server-side use\n- **Next.js**: Works in both Client Components and API Routes\n- **Express**: Perfect for server-side ZIP generation\n\n## Usage\n\n### Browser Example (Auto-Download)\n\n```typescript\nimport { downloadZipFile, type FileInput } from '@diegoaltoworks/zipper';\n\nconst files: FileInput[] = [\n  { url: '/api/documents/report1.pdf', name: 'Report 1.pdf' },\n  { url: '/api/documents/report2.pdf', name: 'Report 2.pdf' },\n];\n\nawait downloadZipFile(files, { zipFilename: 'reports.zip' });\n// ✓ Triggers browser download automatically\n```\n\n### Node.js Example (Get Buffer)\n\n```typescript\nimport { createZipFile } from '@diegoaltoworks/zipper';\nimport { writeFile } from 'fs/promises';\n\nconst files = [\n  { url: 'https://example.com/file1.pdf', name: 'Document A.pdf' },\n  { url: 'https://example.com/file2.pdf', name: 'Document B.pdf' }\n];\n\nconst buffer = await createZipFile(files);\n// ✓ Returns Buffer in Node.js\n\nawait writeFile('output.zip', buffer);\n```\n\n### Alternative: Use Default Export\n\n```typescript\nimport zipper from '@diegoaltoworks/zipper';\n\n// Same as downloadZipFile\nawait zipper(files, { zipFilename: 'download.zip' });\n```\n\n### Next.js API Route Example\n\n```typescript\n// app/api/download/route.ts\nimport { NextResponse } from 'next/server';\nimport { createZipFile } from '@diegoaltoworks/zipper';\n\nexport async function GET() {\n  const buffer = await createZipFile([\n    { url: 'https://example.com/file1.pdf', name: 'file1.pdf' },\n    { url: 'https://example.com/file2.pdf', name: 'file2.pdf' }\n  ]);\n\n  return new NextResponse(buffer, {\n    headers: {\n      'Content-Type': 'application/zip',\n      'Content-Disposition': 'attachment; filename=\"download.zip\"'\n    }\n  });\n}\n```\n\n### With Options\n\n```typescript\nimport { downloadZipFile, type FileInput, type DownloadOptions } from '@diegoaltoworks/zipper';\n\nconst files: FileInput[] = [\n  { url: 'https://example.com/file1.pdf', name: 'Document A.pdf' },\n  { url: 'https://example.com/file2.pdf', name: 'Document B.pdf' }\n];\n\nconst options: DownloadOptions = {\n  zipFilename: 'my-documents.zip',\n\n  onProgress: (current, total) => {\n    console.log(`Downloaded ${current} of ${total} files`);\n    // Update your UI progress indicator here\n  },\n\n  onError: (error, file) => {\n    console.error(`Failed to download ${file.name}:`, error.message);\n    // Handle individual file errors\n  },\n\n  continueOnError: true, // Continue downloading even if some files fail\n\n  timeout: 30000, // 30 second timeout per file\n\n  fetchOptions: {\n    headers: {\n      'Authorization': 'Bearer your-token-here'\n    }\n  }\n};\n\nawait downloadZipFile(files, options);\n```\n\n### React Example\n\n```tsx\nimport { useState } from 'react';\nimport { downloadZipFile, type FileInput } from '@diegoaltoworks/zipper';\n\nfunction DownloadButton() {\n  const [progress, setProgress] = useState('');\n  const [isDownloading, setIsDownloading] = useState(false);\n\n  const handleDownload = async () => {\n    setIsDownloading(true);\n\n    const files: FileInput[] = [\n      { url: '/api/file1.pdf', name: 'file1.pdf' },\n      { url: '/api/file2.pdf', name: 'file2.pdf' }\n    ];\n\n    try {\n      await downloadZipFile(files, {\n        zipFilename: 'files.zip',\n        onProgress: (current, total) => {\n          setProgress(`${current}/${total}`);\n        }\n      });\n\n      setProgress('Complete!');\n    } catch (error) {\n      console.error('Download failed:', error);\n    } finally {\n      setIsDownloading(false);\n    }\n  };\n\n  return (\n    <div>\n      <button onClick={handleDownload} disabled={isDownloading}>\n        {isDownloading ? `Downloading... ${progress}` : 'Download ZIP'}\n      </button>\n    </div>\n  );\n}\n```\n\n## API Reference\n\n### `createZipFile(files, options?)`\n\nDownloads multiple files and creates a ZIP archive (works in both browser and Node.js).\n\n#### Parameters\n\n- **`files`** `FileInput[]` - Array of files to download\n  - `url` `string` - The URL to fetch the file from\n  - `name` `string` - The filename to use in the ZIP archive\n\n- **`options?`** `DownloadOptions` - Optional configuration\n  - `onProgress?` `(current: number, total: number) => void` - Progress callback\n  - `onError?` `(error: Error, file: FileInput) => void` - Error callback\n  - `continueOnError?` `boolean` - Continue on errors (default: `true`)\n  - `timeout?` `number` - Request timeout in milliseconds (default: `30000`)\n  - `fetchOptions?` `RequestInit` - Additional fetch options (headers, etc.)\n\n#### Returns\n\n- `Promise<Buffer>` in Node.js\n- `Promise<Blob>` in browser\n\n#### Throws\n\n- Throws an error if no files are provided\n- Throws an error if all downloads fail\n- Throws an error if `continueOnError` is `false` and any download fails\n\n---\n\n### `downloadZipFile(files, options?)`\n\nDownloads multiple files, creates a ZIP, and triggers browser download.\n\n#### Parameters\n\n- **`files`** `FileInput[]` - Array of files to download\n- **`options?`** `DownloadOptions` - Optional configuration\n  - `zipFilename?` `string` - Name of the ZIP file (default: `'download.zip'`)\n  - All options from `createZipFile` are also supported\n\n#### Returns\n\n`Promise<void>` - Resolves when download is triggered\n\n#### Throws\n\n- Same errors as `createZipFile`\n- Throws an error if browser is not supported\n\n## Type Definitions\n\n```typescript\ninterface FileInput {\n  url: string;\n  name: string;\n}\n\ninterface DownloadOptions {\n  zipFilename?: string;\n  onProgress?: (current: number, total: number) => void;\n  onError?: (error: Error, file: FileInput) => void;\n  continueOnError?: boolean;\n  timeout?: number;\n  fetchOptions?: RequestInit;\n}\n```\n\n## Demo & Documentation\n\n### Live Demo Application\n\nTry the **full-stack demo application** at **[zipper-demo.vercel.app](https://zipper-demo.vercel.app)** featuring:\n- Interactive file selection and downloads\n- Server-side ZIP generation with Next.js API routes\n- Real-time progress tracking\n- Error handling demonstrations\n- Mobile-responsive UI\n\n**Source code:** [github.com/diegoaltoworks/zipper-demo](https://github.com/diegoaltoworks/zipper-demo)\n\n### Interactive Documentation\n\nBrowse examples and code samples at **[diegoaltoworks.github.io/zipper](https://diegoaltoworks.github.io/zipper)**\n\nThe documentation site (`docs/` directory) includes:\n- Browser usage examples with live demos\n- Server-side usage patterns\n- Code playground for experimentation\n- Multiple file type demonstrations\n- 100+ test files for testing (PDFs, PNGs, text files)\n\nTo run the docs locally:\n\n```bash\ncd docs\nnpm install\nnpm run dev\n```\n\n## Development\n\n### Setup\n\n```bash\nnpm install\n```\n\n### Build\n\n```bash\nnpm run build\n```\n\nOutputs ESM and CJS modules to `dist/`:\n- `dist/index.esm.js` - ES module\n- `dist/index.cjs.js` - CommonJS module\n- `dist/index.d.ts` - TypeScript definitions\n\n### Test\n\n```bash\nnpm test              # Run tests\nnpm run test:watch    # Watch mode\nnpm run test:coverage # Coverage report\n```\n\n### Lint\n\n```bash\nnpm run lint          # Check for issues\nnpm run lint:fix      # Auto-fix issues\nnpm run format        # Format with Prettier\n```\n\n### Type Check\n\n```bash\nnpm run type-check\n```\n\n## Browser Compatibility\n\nThis package works in all modern browsers that support:\n- Fetch API\n- Blob\n- Promise\n- AbortController\n\nFor older browser support, you may need polyfills.\n\n## License\n\nMIT\n\n## Credits\n\nBuilt with:\n- [JSZip](https://stuk.github.io/jszip/) - Create ZIP files\n- [FileSaver.js](https://github.com/eligrey/FileSaver.js/) - Save files in the browser\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n","readmeFilename":"README.md"}