{"_id":"@boramuyar/zip","_rev":"2-796a1a12c2229a87570a9928d2fcba34","name":"@boramuyar/zip","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@boramuyar/zip","version":"0.1.0","keywords":["zip","typescript","deflate","zip64"],"license":"MIT","_id":"@boramuyar/zip@0.1.0","maintainers":[{"name":"boramuyar","email":"boram@uyar.design"}],"homepage":"https://github.com/boramuyar/zip#readme","bugs":{"url":"https://github.com/boramuyar/zip/issues"},"dist":{"shasum":"def95887f89423298fa7e5f8c7851b96c9fbb64e","tarball":"https://registry.npmjs.org/@boramuyar/zip/-/zip-0.1.0.tgz","fileCount":20,"integrity":"sha512-Aj56iwwyHRhcWnF87B0hXX11xZfpOltXN4/77HUEASgSGeA+yM14tXJ6oWQD+6fXQ6r0vY35nWFGfjjolieIpw==","signatures":[{"sig":"MEYCIQCctkSCwlsIS1vI7+Rg3xy6J13ca7xGfn9ehcrRonBZFgIhAN3DbA3EqEmRy/PRNDTre1UvaqjrKEZMtmsNl9/ilSax","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":133226},"type":"module","_from":"file:boramuyar-zip-0.1.0.tgz","types":"./dist/index.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./node":{"types":"./dist/node.d.mts","default":"./dist/node.mjs"},"./browser":{"types":"./dist/browser.d.mts","default":"./dist/browser.mjs"}},"scripts":{"test":"vitest run","build":"tsdown","typecheck":"tsc --noEmit","test:fixtures":"vitest run test/fixtures.test.ts"},"_npmUser":{"name":"boramuyar","email":"boram@uyar.design"},"_resolved":"C:\\Users\\Boo\\AppData\\Local\\Temp\\e17e26d3f9eccea19f57c4ec0b9aca58\\boramuyar-zip-0.1.0.tgz","_integrity":"sha512-Aj56iwwyHRhcWnF87B0hXX11xZfpOltXN4/77HUEASgSGeA+yM14tXJ6oWQD+6fXQ6r0vY35nWFGfjjolieIpw==","repository":{"url":"git+https://github.com/boramuyar/zip.git","type":"git"},"_npmVersion":"11.12.1","description":"Compact dependency-free ZIP reading and writing for TypeScript.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.22.2","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/zip_0.1.0_1781558205426_0.9322483052578974","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@boramuyar/zip","version":"0.2.0","description":"Compact dependency-free ZIP reading and writing for TypeScript.","type":"module","sideEffects":false,"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./browser":{"types":"./dist/browser.d.mts","default":"./dist/browser.mjs"},"./node":{"types":"./dist/node.d.mts","default":"./dist/node.mjs"}},"types":"./dist/index.d.mts","repository":{"type":"git","url":"git+https://github.com/boramuyar/zip.git"},"bugs":{"url":"https://github.com/boramuyar/zip/issues"},"homepage":"https://github.com/boramuyar/zip#readme","engines":{"node":">=18"},"keywords":["zip","typescript","deflate","zip64"],"license":"MIT","devDependencies":{"@types/node":"^25.9.3","tsdown":"^0.22.2","typescript":"^6.0.3","vitest":"^4.1.9"},"scripts":{"build":"tsdown","test":"vitest run","test:fixtures":"vitest run test/fixtures.test.ts","typecheck":"tsc --noEmit"},"_id":"@boramuyar/zip@0.2.0","_integrity":"sha512-Mxrfks8isAemrBzofZqHYmskqU+o1I2q1bpfPg0DTWoECG12lB52AWU1a0/vDJPUWxztTFR1T31tnfbM2f8s/w==","_resolved":"C:\\Users\\Boo\\AppData\\Local\\Temp\\c392f3380bfb2fdb68a708f7bcd66c9c\\boramuyar-zip-0.2.0.tgz","_from":"file:boramuyar-zip-0.2.0.tgz","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-Mxrfks8isAemrBzofZqHYmskqU+o1I2q1bpfPg0DTWoECG12lB52AWU1a0/vDJPUWxztTFR1T31tnfbM2f8s/w==","shasum":"fb02c86d197818b6c204d09d93f00afa4d42c1d7","tarball":"https://registry.npmjs.org/@boramuyar/zip/-/zip-0.2.0.tgz","fileCount":20,"unpackedSize":150469,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC9Oh2pz7zbnl3sTJlACgwvsdQ+HcxDHyaEtDmaN/OdzgIhAJPoGj5yBcL4KMLxslaNiB9+l3wbe+Dh+eBQ4vC7H+si"}]},"_npmUser":{"name":"boramuyar","email":"boram@uyar.design"},"directories":{},"maintainers":[{"name":"boramuyar","email":"boram@uyar.design"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/zip_0.2.0_1781562123390_0.13654081188890643"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-15T21:16:45.225Z","modified":"2026-06-15T22:22:03.625Z","0.1.0":"2026-06-15T21:16:45.592Z","0.2.0":"2026-06-15T22:22:03.525Z"},"bugs":{"url":"https://github.com/boramuyar/zip/issues"},"license":"MIT","homepage":"https://github.com/boramuyar/zip#readme","keywords":["zip","typescript","deflate","zip64"],"repository":{"type":"git","url":"git+https://github.com/boramuyar/zip.git"},"description":"Compact dependency-free ZIP reading and writing for TypeScript.","maintainers":[{"name":"boramuyar","email":"boram@uyar.design"}],"readme":"# @boramuyar/zip\n\nCompact, dependency-free ZIP reading and writing for TypeScript.\n\n- Keeps existing entries compressed in memory.\n- Inflates only the entry you read.\n- Reuses unchanged compressed bytes when writing.\n- Uses native deflate through small Node and browser adapters.\n- Supports custom ZIP compression methods through an explicit registry.\n- Supports ZIP64, UTF-8, CP437, comments, directories, and extra-field preservation.\n\n## Install\n\n```bash\npnpm add @boramuyar/zip\n```\n\n## Read a ZIP\n\n```ts\nimport { ZIP_DEFLATE_METHOD, Zip } from \"@boramuyar/zip\";\nimport { nodeDeflateMethod } from \"@boramuyar/zip/node\";\n\nconst zip = new Zip(arrayBuffer, {\n  compressionMethods: { [ZIP_DEFLATE_METHOD]: nodeDeflateMethod },\n});\n\nconst text = await zip.readText(\"hello.txt\");\nconst data = await zip.read(\"image.png\");\n```\n\n## Create a ZIP\n\n```ts\nimport { ZIP_DEFLATE_METHOD, Zip } from \"@boramuyar/zip\";\nimport { nodeDeflateMethod } from \"@boramuyar/zip/node\";\n\nconst zip = new Zip(undefined, {\n  compressionMethods: { [ZIP_DEFLATE_METHOD]: nodeDeflateMethod },\n});\n\nawait zip.write(\"hello.txt\", \"hello world\\n\");\nawait zip.write(\"data.bin\", new Uint8Array([1, 2, 3]));\n\nconst output = await zip.toArrayBuffer();\n```\n\n## Custom compression methods\n\nRegister heavier algorithms, such as Zstandard or BZip2, in your application. The package does not bundle them.\n\n```ts\nimport { ZIP_DEFLATE_METHOD, Zip, type ZipCompressionMethod } from \"@boramuyar/zip\";\nimport { nodeDeflateMethod } from \"@boramuyar/zip/node\";\n\nconst zstdMethod: ZipCompressionMethod = {\n  name: \"zstd\",\n  compress: (input, context) => zstdCompress(input, context),\n  decompress: (input, context) => zstdDecompress(input, context),\n};\n\nconst zip = new Zip(input, {\n  compressionMethods: {\n    [ZIP_DEFLATE_METHOD]: nodeDeflateMethod,\n    93: zstdMethod,\n  },\n});\n\nawait zip.write(\"data/table.bin\", data, { compressionMethod: 93 });\n```\n\nEach entry has one compression method. One archive can mix stored, deflated, and custom-compressed entries. Unchanged custom entries are preserved even when no handler is registered.\n\n## Browser use\n\n```ts\nimport { ZIP_DEFLATE_METHOD, Zip } from \"@boramuyar/zip\";\nimport { browserDeflateMethod } from \"@boramuyar/zip/browser\";\n\nconst zip = new Zip(arrayBuffer, {\n  compressionMethods: { [ZIP_DEFLATE_METHOD]: browserDeflateMethod },\n});\n```\n\nThe browser adapter uses `CompressionStream(\"deflate-raw\")` and `DecompressionStream(\"deflate-raw\")`.\n\n## Node use\n\n```ts\nimport { ZIP_DEFLATE_METHOD, Zip } from \"@boramuyar/zip\";\nimport { nodeDeflateMethod } from \"@boramuyar/zip/node\";\n\nconst zip = new Zip(arrayBuffer, {\n  compressionMethods: { [ZIP_DEFLATE_METHOD]: nodeDeflateMethod },\n});\n```\n\nThe Node adapter uses `node:zlib` raw deflate and inflate.\n\nThe older `compression: nodeCompression` and `compression: browserCompression` options still work for method 8 deflate.\n\n## Documentation\n\n- [API reference](./API.md)\n- [Support matrix](./API.md#supported-zip-features)\n\n## Memory model\n\nThe constructor parses ZIP metadata but does not expand every file. `read()` and `readText()` return whole decompressed entries. `toArrayBuffer()` returns the whole output archive.\n\n## Unsupported features\n\nThe library rejects encrypted entries, central-directory encryption, split archives, and digital signatures. Methods other than store and deflate require user-provided registry handlers for reading or writing.\n\nMicrosoft Office password-protected `.xlsx` files use OOXML/OLE encryption, not ZIP encryption. Handle them in a separate package.\n\n## Development\n\n```bash\npnpm install\npnpm test\npnpm typecheck\npnpm build\n```\n","readmeFilename":"README.md"}