{"_id":"@adviser/qsf","_rev":"6-a9851534114a5a000ee843d291918f97","name":"@adviser/qsf","dist-tags":{"dev":"0.0.0-dev-local-1771947880793","latest":"1.1.3"},"versions":{"0.0.0-dev-local-1771947880793":{"name":"@adviser/qsf","version":"0.0.0-dev-local-1771947880793","keywords":["quic","stream","file","format","multiplexed","cid","encrypt"],"author":{"name":"Meno Abels","email":"meno.abels@adviser.com"},"license":"AFL-2.0","_id":"@adviser/qsf@0.0.0-dev-local-1771947880793","maintainers":[{"name":"fastandfearless","email":"meno.abels@gmail.com"}],"homepage":"https://github.com/mabels/qsf#readme","bugs":{"url":"https://github.com/mabels/qsf/issues"},"dist":{"shasum":"98f5ba2cb7688ad529bc6f0ecde4dcb12a94a6d6","tarball":"https://registry.npmjs.org/@adviser/qsf/-/qsf-0.0.0-dev-local-1771947880793.tgz","fileCount":123,"integrity":"sha512-8P9kM6TDt8p+35o11jSEpSi1hwKEmNXH8cRuMejxRddgTA0+viO+25rYSVpcwUTr0AWG4khqcT5n9aHzhszaGQ==","signatures":[{"sig":"MEUCIQCl4r1JKCpG7pkvsAUwQ/GBsA3ELwnwO9FoMEugXD0mIQIgCRgsbu2O4OU4XaObhhDQI7msf+4gO0pOEUWcJq04vy4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256924},"pnpm":{"onlyBuiltDependencies":["deno","esbuild","playwright-chromium"],"ignoredBuiltDependencies":["edgedriver","geckodriver","msw","sharp"]},"type":"module","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/ts/esm/index.d.ts","import":"./dist/ts/esm/index.js"}},"gitHead":"c2671dfaef704fc1b6f9ba62cf925b2937fce4c5","scripts":{"lint":"eslint .","test":"pnpm run test:js && pnpm run test:deno","build":"pnpm run build:tsgo && pnpm run build:js && pnpm run build:deno","format":"prettier --write .","pubdir":"pnpm exec cement preparePubdir --baseDir .","test:js":"vitest --run","build:js":"rm -rf dist/pkg ; mkdir -p dist/pkg; cp -pr ./dist/ts/* dist/pkg","test:deno":"deno run --quiet --allow-net --allow-write --allow-run --allow-sys --allow-ffi --allow-read --allow-env ./node_modules/vitest/vitest.mjs --run --project node","build:deno":"deno publish --dry-run --unstable-sloppy-imports --allow-dirty --allow-slow-types --set-version 0.0.0-dev --quiet","build:tsgo":"rm -rf ./dist/ts ; pnpm run /^build:tsgo:/","deno:publish":"pnpm run pubdir && cd dist/pubdir && pnpm exec deno publish --allow-dirty --unstable-sloppy-imports --allow-slow-types --quiet","format:check":"prettier --check .","build:tsgo:esm":"tsgo -p ./tsconfig.esm.json","build:tsgo:global":"tsgo --noEmit"},"_npmUser":{"name":"fastandfearless","email":"meno.abels@gmail.com"},"repository":{"url":"git+https://github.com/mabels/qsf.git","type":"git"},"_npmVersion":"11.7.0","description":"QUIC Stream File Format","directories":{},"_nodeVersion":"22.14.0","dependencies":{"arktype":"^2.1.29","multiformats":"^13.4.2","@noble/hashes":"^2.0.1","@adviser/cement":"^0.5.25"},"_hasShrinkwrap":false,"devDependencies":{"zx":"^8.8.5","tsx":"^4.19.1","deno":"^2.5.1","vite":"^7.0.4","cmd-ts":"^0.15.0","eslint":"^10.0.1","vitest":"^3.2.4","prettier":"^3.6.2","@eslint/js":"^10.0.1","playwright":"^1.54.1","@types/deno":"^2.3.0","@types/node":"^25.0.2","@vitest/browser":"^3.2.4","typescript-eslint":"^8.46.3","playwright-chromium":"^1.54.1","vite-tsconfig-paths":"^6.0.1","@typescript-eslint/parser":"^8.46.3","@typescript/native-preview":"7.0.0-dev.20260224.1","@typescript-eslint/eslint-plugin":"^8.46.3"},"_npmOperationalInternal":{"tmp":"tmp/qsf_0.0.0-dev-local-1771947880793_1771948065365_0.5262966211146873","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@adviser/qsf","version":"1.0.0","keywords":["quic","stream","file","format","multiplexed","cid","encrypt"],"author":{"name":"Meno Abels","email":"meno.abels@adviser.com"},"license":"AFL-2.0","_id":"@adviser/qsf@1.0.0","maintainers":[{"name":"fastandfearless","email":"meno.abels@gmail.com"}],"homepage":"https://github.com/mabels/qsf#readme","bugs":{"url":"https://github.com/mabels/qsf/issues"},"dist":{"shasum":"e13e9ebe919195400a96b840d65ee7c38d64c723","tarball":"https://registry.npmjs.org/@adviser/qsf/-/qsf-1.0.0.tgz","fileCount":223,"integrity":"sha512-kLMKr++45zjyRYWcWZjbkoDzosqGsUYlgi2cwoOy6pvBxzRoAvxFNPE/0yWP+rK6nLIx5hi8cWJ54BFTOi1ILw==","signatures":[{"sig":"MEUCIQC3z5FIWNeJGcCzsXYMTGmKU9/vrWY5QCr5lDzwPwjBjgIgSHFooe21vSHTHsL/3XqD15exrwevecOBJuChCIdSv44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adviser%2fqsf@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":439234},"pnpm":{"onlyBuiltDependencies":["deno","esbuild","playwright-chromium"],"ignoredBuiltDependencies":["edgedriver","geckodriver","msw","sharp"]},"type":"module","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/ts/esm/index.d.ts","import":"./dist/ts/esm/index.js"}},"gitHead":"c2671dfaef704fc1b6f9ba62cf925b2937fce4c5","scripts":{"lint":"eslint .","test":"pnpm run test:js && pnpm run test:deno","build":"pnpm run build:tsgo && pnpm run build:js && pnpm run build:deno","format":"prettier --write .","pubdir":"pnpm exec cement preparePubdir --baseDir .","test:js":"vitest --run","build:js":"rm -rf dist/pkg ; mkdir -p dist/pkg; cp -pr ./dist/ts/* dist/pkg","test:deno":"deno run --quiet --allow-net --allow-write --allow-run --allow-sys --allow-ffi --allow-read --allow-env ./node_modules/vitest/vitest.mjs --run --project node","build:deno":"deno publish --dry-run --unstable-sloppy-imports --allow-dirty --allow-slow-types --set-version 0.0.0-dev --quiet","build:tsgo":"rm -rf ./dist/ts ; pnpm run /^build:tsgo:/","deno:publish":"pnpm run pubdir && cd dist/pubdir && pnpm exec deno publish --allow-dirty --unstable-sloppy-imports --allow-slow-types --quiet","format:check":"prettier --check .","build:tsgo:esm":"tsgo -p ./tsconfig.esm.json","build:tsgo:global":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:98fdebb2-9d74-4334-a07c-ffd6d956527b"}},"repository":{"url":"git+https://github.com/mabels/qsf.git","type":"git"},"_npmVersion":"11.10.1","description":"QUIC Stream File Format","directories":{},"_nodeVersion":"22.22.0","dependencies":{"arktype":"^2.1.29","multiformats":"^13.4.2","@noble/hashes":"^2.0.1","@adviser/cement":"^0.5.25"},"_hasShrinkwrap":false,"devDependencies":{"zx":"^8.8.5","tsx":"^4.19.1","deno":"^2.5.1","vite":"^7.0.4","cmd-ts":"^0.15.0","eslint":"^10.0.1","vitest":"^3.2.4","prettier":"^3.6.2","@eslint/js":"^10.0.1","playwright":"^1.54.1","@types/deno":"^2.3.0","@types/node":"^25.0.2","@vitest/browser":"^3.2.4","typescript-eslint":"^8.46.3","vite-tsconfig-paths":"^6.0.1","@typescript-eslint/parser":"^8.46.3","@typescript/native-preview":"7.0.0-dev.20260224.1","@typescript-eslint/eslint-plugin":"^8.46.3"},"_npmOperationalInternal":{"tmp":"tmp/qsf_1.0.0_1771948329417_0.17366515670134297","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@adviser/qsf","version":"1.1.0","keywords":["quic","stream","file","format","multiplexed","cid","encrypt"],"author":{"name":"Meno Abels","email":"meno.abels@adviser.com"},"license":"AFL-2.0","_id":"@adviser/qsf@1.1.0","maintainers":[{"name":"fastandfearless","email":"meno.abels@gmail.com"}],"homepage":"https://github.com/mabels/qsf#readme","bugs":{"url":"https://github.com/mabels/qsf/issues"},"dist":{"shasum":"5dec1d234972c9de20de23f475bc9ac4eff2f626","tarball":"https://registry.npmjs.org/@adviser/qsf/-/qsf-1.1.0.tgz","fileCount":240,"integrity":"sha512-hNolxlRwvbAfGrVpf3OAa9aNCEalRP5dQmwNQ2bHmOPKzMVkLbs8UVcpJw/RQwoJZyHqoNp8Z7HY8eypC+Jgtw==","signatures":[{"sig":"MEUCIQDXMza79Evs2b6voCwy3JEXTyhGIQaRfBYk1D/BGi3xmAIgWrI4JdHhg0VqgwO0IFjdYHrt/FLKROWfMPAFNuCu4X4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adviser%2fqsf@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":500250},"pnpm":{"onlyBuiltDependencies":["deno","esbuild","playwright-chromium"],"ignoredBuiltDependencies":["edgedriver","geckodriver","msw","sharp"]},"type":"module","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/ts/esm/index.d.ts","import":"./dist/ts/esm/index.js"}},"gitHead":"47f72c367007d9e0c890d77e2d68e4d74590ea8a","scripts":{"lint":"eslint .","test":"pnpm run test:js && pnpm run test:deno","build":"pnpm run build:tsgo && pnpm run build:js && pnpm run build:deno","format":"prettier --write .","pubdir":"pnpm exec cement preparePubdir --baseDir .","test:js":"vitest --run","build:js":"rm -rf dist/pkg ; mkdir -p dist/pkg; cp -pr ./dist/ts/* dist/pkg","test:deno":"deno run --quiet --allow-net --allow-write --allow-run --allow-sys --allow-ffi --allow-read --allow-env ./node_modules/vitest/vitest.mjs --run --project node","build:deno":"deno publish --dry-run --unstable-sloppy-imports --allow-dirty --allow-slow-types --set-version 0.0.0-dev --quiet","build:tsgo":"rm -rf ./dist/ts ; pnpm run /^build:tsgo:/","deno:publish":"pnpm run pubdir && cd dist/pubdir && pnpm exec deno publish --allow-dirty --unstable-sloppy-imports --allow-slow-types --quiet","format:check":"prettier --check .","build:tsgo:esm":"tsgo -p ./tsconfig.esm.json","build:tsgo:global":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:98fdebb2-9d74-4334-a07c-ffd6d956527b"}},"repository":{"url":"git+https://github.com/mabels/qsf.git","type":"git"},"_npmVersion":"11.10.1","description":"QUIC Stream File Format","directories":{},"_nodeVersion":"22.22.0","dependencies":{"arktype":"^2.1.29","multiformats":"^13.4.2","@noble/hashes":"^2.0.1","@adviser/cement":"^0.5.25"},"_hasShrinkwrap":false,"devDependencies":{"zx":"^8.8.5","tsx":"^4.19.1","deno":"^2.5.1","vite":"^7.0.4","cmd-ts":"^0.15.0","eslint":"^10.0.1","vitest":"^3.2.4","prettier":"^3.6.2","@eslint/js":"^10.0.1","playwright":"^1.54.1","@types/deno":"^2.3.0","@types/node":"^25.0.2","@vitest/browser":"^3.2.4","typescript-eslint":"^8.46.3","vite-tsconfig-paths":"^6.0.1","@typescript-eslint/parser":"^8.46.3","@typescript/native-preview":"7.0.0-dev.20260224.1","@typescript-eslint/eslint-plugin":"^8.46.3"},"_npmOperationalInternal":{"tmp":"tmp/qsf_1.1.0_1772024719544_0.31864743206515467","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@adviser/qsf","version":"1.1.1","keywords":["quic","stream","file","format","multiplexed","cid","encrypt"],"author":{"name":"Meno Abels","email":"meno.abels@adviser.com"},"license":"AFL-2.0","_id":"@adviser/qsf@1.1.1","maintainers":[{"name":"fastandfearless","email":"meno.abels@gmail.com"}],"homepage":"https://github.com/mabels/qsf#readme","bugs":{"url":"https://github.com/mabels/qsf/issues"},"dist":{"shasum":"f50505c829a1caad30e318d56777c103cd17b2b9","tarball":"https://registry.npmjs.org/@adviser/qsf/-/qsf-1.1.1.tgz","fileCount":240,"integrity":"sha512-5x1gjwEKTjhKaf0PjLGpBqhT/XVyq1bkiLSL99Zk96cAeGjDHxvc/rVO0cbW+XKCTi2f2/mrzJbAlG0dEDBiSQ==","signatures":[{"sig":"MEYCIQDxSx8o/0JnBSkZmBBd7tUUqIEWj+V+HV8oG9hKsU66HAIhAKqveyCd3W9bZkNm8SzlgGuS4sO0xIxbfoCYBo6A3B7f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adviser%2fqsf@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":514725},"pnpm":{"onlyBuiltDependencies":["deno","esbuild","playwright-chromium"],"ignoredBuiltDependencies":["edgedriver","geckodriver","msw","sharp"]},"type":"module","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/ts/esm/index.d.ts","import":"./dist/ts/esm/index.js"}},"gitHead":"e6e36086b05de458e326236283890d06599c40c9","scripts":{"lint":"eslint .","test":"pnpm run test:js && pnpm run test:deno","build":"pnpm run build:tsgo && pnpm run build:js && pnpm run build:deno","format":"prettier --write .","pubdir":"pnpm exec cement preparePubdir --baseDir .","test:js":"vitest --run","build:js":"rm -rf dist/pkg ; mkdir -p dist/pkg; cp -pr ./dist/ts/* dist/pkg","test:deno":"deno run --quiet --allow-net --allow-write --allow-run --allow-sys --allow-ffi --allow-read --allow-env ./node_modules/vitest/vitest.mjs --run --project node","build:deno":"deno publish --dry-run --unstable-sloppy-imports --allow-dirty --allow-slow-types --set-version 0.0.0-dev --quiet","build:tsgo":"rm -rf ./dist/ts ; pnpm run /^build:tsgo:/","deno:publish":"pnpm run pubdir && cd dist/pubdir && pnpm exec deno publish --allow-dirty --unstable-sloppy-imports --allow-slow-types --quiet","format:check":"prettier --check .","build:tsgo:esm":"tsgo -p ./tsconfig.esm.json","build:tsgo:global":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:98fdebb2-9d74-4334-a07c-ffd6d956527b"}},"repository":{"url":"git+https://github.com/mabels/qsf.git","type":"git"},"_npmVersion":"11.11.0","description":"QUIC Stream File Format","directories":{},"_nodeVersion":"22.22.0","dependencies":{"arktype":"^2.1.29","multiformats":"^13.4.2","@noble/hashes":"^2.0.1","@adviser/cement":"^0.5.25"},"_hasShrinkwrap":false,"devDependencies":{"zx":"^8.8.5","tsx":"^4.19.1","deno":"^2.5.1","vite":"^7.0.4","cmd-ts":"^0.15.0","eslint":"^10.0.1","vitest":"^3.2.4","prettier":"^3.6.2","@eslint/js":"^10.0.1","playwright":"^1.54.1","@types/deno":"^2.3.0","@types/node":"^25.0.2","@vitest/browser":"^3.2.4","typescript-eslint":"^8.46.3","vite-tsconfig-paths":"^6.0.1","@typescript-eslint/parser":"^8.46.3","@typescript/native-preview":"7.0.0-dev.20260224.1","@typescript-eslint/eslint-plugin":"^8.46.3"},"_npmOperationalInternal":{"tmp":"tmp/qsf_1.1.1_1772091681290_0.04117947401608246","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@adviser/qsf","version":"1.1.2","keywords":["quic","stream","file","format","multiplexed","cid","encrypt"],"author":{"name":"Meno Abels","email":"meno.abels@adviser.com"},"license":"AFL-2.0","_id":"@adviser/qsf@1.1.2","maintainers":[{"name":"fastandfearless","email":"meno.abels@gmail.com"}],"homepage":"https://github.com/mabels/qsf#readme","bugs":{"url":"https://github.com/mabels/qsf/issues"},"dist":{"shasum":"0106489b09461c58372e48d89d58157f43ef683a","tarball":"https://registry.npmjs.org/@adviser/qsf/-/qsf-1.1.2.tgz","fileCount":240,"integrity":"sha512-444vlUNPRZgoR9AD26WViBaP0LlS05vQOWVqXivuIi/jJ0L98lbHUk73XlF6yJGZzygmafz74DYROfqupaSKwA==","signatures":[{"sig":"MEUCIEDLoQ9HtjNv8CPoxMDwWRi1cU3jpIsjsBjI34qsibc6AiEAzQcLCXJLeABFDBlVrAjgSiOw0p89ohlzOGMeiZMNOJ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adviser%2fqsf@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":514725},"pnpm":{"onlyBuiltDependencies":["deno","esbuild","playwright-chromium"],"ignoredBuiltDependencies":["edgedriver","geckodriver","msw","sharp"]},"type":"module","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/ts/esm/index.d.ts","import":"./dist/ts/esm/index.js"}},"gitHead":"e6e36086b05de458e326236283890d06599c40c9","scripts":{"lint":"eslint .","test":"pnpm run test:js && pnpm run test:deno","build":"pnpm run build:tsgo && pnpm run build:js && pnpm run build:deno","format":"prettier --write .","pubdir":"pnpm exec cement preparePubdir --baseDir .","test:js":"vitest --run","build:js":"rm -rf dist/pkg ; mkdir -p dist/pkg; cp -pr ./dist/ts/* dist/pkg","test:deno":"deno run --quiet --allow-net --allow-write --allow-run --allow-sys --allow-ffi --allow-read --allow-env ./node_modules/vitest/vitest.mjs --run --project node","build:deno":"deno publish --dry-run --unstable-sloppy-imports --allow-dirty --allow-slow-types --set-version 0.0.0-dev --quiet","build:tsgo":"rm -rf ./dist/ts ; pnpm run /^build:tsgo:/","deno:publish":"pnpm run pubdir && cd dist/pubdir && pnpm exec deno publish --allow-dirty --unstable-sloppy-imports --allow-slow-types --quiet","format:check":"prettier --check .","build:tsgo:esm":"tsgo -p ./tsconfig.esm.json","build:tsgo:global":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:98fdebb2-9d74-4334-a07c-ffd6d956527b"}},"repository":{"url":"git+https://github.com/mabels/qsf.git","type":"git"},"_npmVersion":"11.11.0","description":"QUIC Stream File Format","directories":{},"_nodeVersion":"22.22.0","dependencies":{"arktype":"^2.1.29","multiformats":"^13.4.2","@noble/hashes":"^2.0.1","@adviser/cement":"^0.5.25"},"_hasShrinkwrap":false,"devDependencies":{"zx":"^8.8.5","tsx":"^4.19.1","deno":"^2.5.1","vite":"^7.0.4","cmd-ts":"^0.15.0","eslint":"^10.0.1","vitest":"^3.2.4","prettier":"^3.6.2","@eslint/js":"^10.0.1","playwright":"^1.54.1","@types/deno":"^2.3.0","@types/node":"^25.0.2","@vitest/browser":"^3.2.4","typescript-eslint":"^8.46.3","vite-tsconfig-paths":"^6.0.1","@typescript-eslint/parser":"^8.46.3","@typescript/native-preview":"7.0.0-dev.20260224.1","@typescript-eslint/eslint-plugin":"^8.46.3"},"_npmOperationalInternal":{"tmp":"tmp/qsf_1.1.2_1772092257392_0.6919300887525666","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@adviser/qsf","version":"1.1.3","description":"QUIC Stream File Format","type":"module","exports":{".":{"types":"./dist/ts/esm/index.d.ts","import":"./dist/ts/esm/index.js"}},"scripts":{"build":"pnpm run build:tsgo && pnpm run build:js && pnpm run build:deno","build:tsgo":"rm -rf ./dist/ts ; pnpm run /^build:tsgo:/","build:tsgo:global":"tsgo --noEmit","build:tsgo:esm":"tsgo -p ./tsconfig.esm.json","build:js":"rm -rf dist/pkg ; mkdir -p dist/pkg; cp -pr ./dist/ts/* dist/pkg","build:deno":"deno publish --dry-run --unstable-sloppy-imports --allow-dirty --allow-slow-types --set-version 0.0.0-dev --quiet","pubdir":"pnpm exec cement preparePubdir --baseDir .","deno:publish":"pnpm run pubdir && cd dist/pubdir && pnpm exec deno publish --allow-dirty --unstable-sloppy-imports --allow-slow-types --quiet","test":"pnpm run test:js && pnpm run test:deno","test:deno":"deno run --quiet --allow-net --allow-write --allow-run --allow-sys --allow-ffi --allow-read --allow-env ./node_modules/vitest/vitest.mjs --run --project node","test:js":"vitest --run","lint":"eslint .","format":"prettier --write .","format:check":"prettier --check ."},"keywords":["quic","stream","file","format","multiplexed","cid","encrypt"],"author":{"name":"Meno Abels","email":"meno.abels@adviser.com"},"license":"AFL-2.0","bugs":{"url":"https://github.com/mabels/qsf/issues"},"repository":{"type":"git","url":"git+https://github.com/mabels/qsf.git"},"homepage":"https://github.com/mabels/qsf#readme","dependencies":{"@adviser/cement":"^0.5.25","@noble/hashes":"^2.0.1","arktype":"^2.1.29","multiformats":"^13.4.2"},"devDependencies":{"@eslint/js":"^10.0.1","@types/deno":"^2.3.0","@types/node":"^25.0.2","@typescript-eslint/eslint-plugin":"^8.46.3","@typescript-eslint/parser":"^8.46.3","@typescript/native-preview":"7.0.0-dev.20260224.1","@vitest/browser":"^3.2.4","cmd-ts":"^0.15.0","deno":"^2.5.1","eslint":"^10.0.1","playwright":"^1.54.1","prettier":"^3.6.2","tsx":"^4.19.1","typescript-eslint":"^8.46.3","vite":"^7.0.4","vite-tsconfig-paths":"^6.0.1","vitest":"^3.2.4","zx":"^8.8.5"},"engines":{"node":">=20.19.0"},"pnpm":{"ignoredBuiltDependencies":["edgedriver","geckodriver","msw","sharp"],"onlyBuiltDependencies":["deno","esbuild","playwright-chromium"]},"gitHead":"4f024c99eb449fd92036be53e9e148ac44080a7e","_id":"@adviser/qsf@1.1.3","_nodeVersion":"22.22.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-YwEjjYwvlesp0tff0vA7SfhpDS5ia0+z+R1kv6REzb6DunCUtDpBvFLSsMaLLM4xblhQn/Dne7VB7vE78sNdTg==","shasum":"21b1c0d613f1eba944f01af4018e0c181ba925f2","tarball":"https://registry.npmjs.org/@adviser/qsf/-/qsf-1.1.3.tgz","fileCount":240,"unpackedSize":521502,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adviser%2fqsf@1.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDv+1cVbiTZOkKMYVQyEJtlrRCZoc0wWOuSN8klkj1cUgIgRJvFBNR/HZRBagKbW93N9PBgZrlqkgL++/cCWvYMIE8="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:98fdebb2-9d74-4334-a07c-ffd6d956527b"}},"directories":{},"maintainers":[{"name":"fastandfearless","email":"meno.abels@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/qsf_1.1.3_1772093717962_0.49634049997510243"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-24T15:47:45.308Z","modified":"2026-02-26T08:15:18.452Z","0.0.0-dev-local-1771947880793":"2026-02-24T15:47:45.509Z","1.0.0":"2026-02-24T15:52:09.592Z","1.1.0":"2026-02-25T13:05:19.711Z","1.1.1":"2026-02-26T07:41:21.447Z","1.1.2":"2026-02-26T07:50:57.618Z","1.1.3":"2026-02-26T08:15:18.120Z"},"bugs":{"url":"https://github.com/mabels/qsf/issues"},"author":{"name":"Meno Abels","email":"meno.abels@adviser.com"},"license":"AFL-2.0","homepage":"https://github.com/mabels/qsf#readme","keywords":["quic","stream","file","format","multiplexed","cid","encrypt"],"repository":{"type":"git","url":"git+https://github.com/mabels/qsf.git"},"description":"QUIC Stream File Format","maintainers":[{"name":"fastandfearless","email":"meno.abels@gmail.com"}],"readme":"# @adviser/qsf\n\n**QUIC Stream File Format** — a multiplexed streaming container format for binary streams.\n\nInspired by [QUIC](https://www.rfc-editor.org/rfc/rfc9000) variable-length integer framing, `qsf` lets you pack\nmultiple independent binary streams into a single file, each with its own composable filter pipeline\n(content addressing, compression, encryption). The format is designed for streaming-first access:\na reader does not need to buffer the whole file to start consuming streams.\n\n---\n\n## Concepts\n\n| Term                | Description                                                                                                        |\n| ------------------- | ------------------------------------------------------------------------------------------------------------------ |\n| **Stream**          | One logical byte sequence written with `QsfWriter` and read back as `StreamFileBegin` + `StreamFileEnd`            |\n| **Filter**          | A transform applied during encode/decode: `CIDFilter`, `ZStrFilter`, `EncryptFilter`                               |\n| **Manifest**        | JSON records (`stream.config`, `stream.result`) embedded between stream frames, carrying filter config and results |\n| **StreamFileBegin** | Reader event: stream metadata + live `ReadableStream` + `decode(keyStore)` helper                                  |\n| **StreamFileEnd**   | Reader event: CID, byte range, and per-filter result summaries (`filterResult`)                                    |\n\n---\n\n## Install\n\n```sh\npnpm add @adviser/qsf\n```\n\n---\n\n## Write\n\n```ts\nimport { QsfWriter, CIDFilter, ZStrFilter, EncryptFilter, keyFingerprint } from \"@adviser/qsf\";\nimport { uint8array2stream } from \"@adviser/cement\";\n\nconst key = await crypto.subtle.generateKey({ name: \"AES-GCM\", length: 256 }, true, [\"encrypt\", \"decrypt\"]);\nconst keyId = await keyFingerprint(key);\n\nconst writer = new QsfWriter();\nconst chunks: Uint8Array[] = [];\nconst sink = new WritableStream<Uint8Array>({\n  write(c) {\n    chunks.push(c);\n  },\n});\n\nconst results = await writer.write(\n  [\n    {\n      stream: uint8array2stream(myDocumentBytes),\n      filters: [new CIDFilter(), new ZStrFilter(), new EncryptFilter(key, keyId)],\n    },\n    {\n      stream: uint8array2stream(myMetaBytes),\n      filters: [new CIDFilter(), new ZStrFilter()],\n    },\n  ],\n  sink,\n);\n\n// results[0].cid — content address of the first stream (pre-compression, pre-encryption)\n```\n\nFilters are applied **left-to-right** during encoding and **right-to-left** during decoding.\n\n---\n\n## Read\n\n```ts\nimport { QsfReader, isStreamFileBegin, isStreamFileEnd, streamIdOf } from \"@adviser/qsf\";\nimport { uint8array2stream, stream2uint8array } from \"@adviser/cement\";\n\nconst keyStore = async (keyId: string): Promise<CryptoKey | undefined> => myKeys.get(keyId);\n\nconst reader = QsfReader(uint8array2stream(fileBytes)).getReader();\nwhile (true) {\n  const { done, value } = await reader.read();\n  if (done) break;\n\n  if (isStreamFileBegin(value)) {\n    // value.filters — filter config from the manifest\n    // value.stream  — raw (encoded) ReadableStream\n    // value.decode(keyStore) — decoded ReadableStream (decompressed, decrypted, CID-verified)\n    const bytes = await stream2uint8array(value.decode(keyStore));\n  }\n\n  if (isStreamFileEnd(value)) {\n    // value.cid           — content address\n    // value.filterResult  — [{ filterName, result }] per filter\n    console.log(value.cid, value.filterResult);\n  }\n}\n```\n\nUse `streamIdOf(evt)` to correlate a `StreamFileBegin` with its `StreamFileEnd`.\n\n---\n\n## Filters\n\n| Filter          | Encode                                  | Decode                | `result()`          |\n| --------------- | --------------------------------------- | --------------------- | ------------------- |\n| `CIDFilter`     | SHA2-256 CID over raw bytes             | Verifies CID on flush | `{ cid: string }`   |\n| `ZStrFilter`    | `CompressionStream` (deflate/gzip)      | `DecompressionStream` | `{ codec: string }` |\n| `EncryptFilter` | AES-GCM per-chunk (fresh IV each chunk) | AES-GCM per-chunk     | `{ keyId: string }` |\n\n### CIDCollector\n\nGroup streams under a combined CID (e.g. data + metadata form one logical record):\n\n```ts\nimport { CIDCollector, CIDFilter } from \"@adviser/qsf\";\n\nconst col = new CIDCollector();\nawait writer.write(\n  [\n    { stream: dataStream, filters: [col.filter(), new ZStrFilter()], combineId: \"rec-1\" },\n    { stream: metaStream, filters: [col.filter()], combineId: \"rec-1\" },\n  ],\n  sink,\n);\n\nconst fileName = await col.result(); // combined CID of both streams\n```\n\n---\n\n## Injectable JSON codec\n\nBy default `QsfWriter` and `QsfReader` use `JSON.stringify` / `JSON.parse` with `TextEncoder` / `TextDecoder`\nfor manifest records. To plug in a custom codec (e.g. from `@adviser/cement`'s `SuperThis`):\n\n```ts\nconst writer = new QsfWriter({\n  ende: {\n    encode: (v) => sthis.ende.json.encodeToUint8(v),\n    decode: <T>(buf: Uint8Array) => sthis.ende.json.decodeUint8<T>(buf).Ok(),\n  },\n});\n```\n\n---\n\n## File format overview\n\n```\n┌─ MANIFEST_ENTRY  stream.config  (streamId, filters)\n├─ STREAM_HEADER   streamId\n├─ STREAM_DATA     streamId, payload   ← one frame per encoded chunk\n├─ STREAM_TRAILER  streamId, {cid}\n└─ MANIFEST_ENTRY  stream.result  (streamId, cid, offset, length, filterResult)\n   … repeated for each logical stream …\n```\n\nEach frame header uses QUIC-style variable-length integers (1/2/4/8 bytes) for `type`, `streamId`, and `length`.\n\n---\n\n## License\n\nAFL-2.0\n","readmeFilename":"README.md"}