{"_id":"@effected/store","_rev":"14-2c68994d4851fe71496a356d68f92ff6","name":"@effected/store","dist-tags":{"latest":"0.10.0"},"versions":{"0.1.0":{"name":"@effected/store","version":"0.1.0","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.1.0","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"32ad9a3500b7d5890d879d12a8cb17666f1043c1","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.1.0.tgz","fileCount":9,"integrity":"sha512-lp8tNJ2tXZ497XIRT9QLEALymJpVBZl/kRZW2b7YsZfGrHRHxuXOinGsvXMTjmnH7iopKfhPnV5cFvhNbnfsTQ==","signatures":[{"sig":"MEYCIQCjfSGuen6shkwGVydgHzrDytqdoQS7AHKcBRUuyzrNxwIhALhg73h5ELl2foKpcQc8bR16aahZ1FNZTd6tV8n4qH/K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":56723},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.1.0.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"spencerbeggs","email":"spencer@beg.gs"},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.1.0.tgz","_integrity":"sha512-lp8tNJ2tXZ497XIRT9QLEALymJpVBZl/kRZW2b7YsZfGrHRHxuXOinGsvXMTjmnH7iopKfhPnV5cFvhNbnfsTQ==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.18.0","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","dependencies":{"@effect/sql-sqlite-node":"4.0.0-beta.98"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-beta.98"},"_npmOperationalInternal":{"tmp":"tmp/store_0.1.0_1784223061480_0.26815855586215864","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@effected/store","version":"0.1.1","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.1.1","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"5abb50f627da223adf2a6c4cfc7d1fa1926bd02b","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.1.1.tgz","fileCount":9,"integrity":"sha512-ymkOoipwBj16s2prL180Rkyqsr7cfuBAMdQC+6+IWjxE6zSJNijRtTxTNZpL/J3SFI/R6f2vH80u+vDWCeStRQ==","signatures":[{"sig":"MEQCIEhLyoHoX2UNzOBzzo3jMNQ+BOSU5E2+Xi021HuXO6OBAiAQ6fWjnTWPAWda+3ZRKom1du+nUqVDsBDbxs6oEWKquA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57038},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.1.1.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.1.1.tgz","_integrity":"sha512-ymkOoipwBj16s2prL180Rkyqsr7cfuBAMdQC+6+IWjxE6zSJNijRtTxTNZpL/J3SFI/R6f2vH80u+vDWCeStRQ==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.18.0","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","dependencies":{"@effect/sql-sqlite-node":"4.0.0-beta.99"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-beta.99"},"_npmOperationalInternal":{"tmp":"tmp/store_0.1.1_1784489732322_0.7463964939607173","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@effected/store","version":"0.1.2","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.1.2","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"16dffd1ae5d1258b88b6e29a00f612b6ca263fe0","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.1.2.tgz","fileCount":9,"integrity":"sha512-oB63ETeV6IJo/GLnLcSTZd+9neFTgdTo2fc1cPSdRFkGoGxyxtOORMhDL7Wxa8+lwhRK+1MctPFfLr2sxLXZRA==","signatures":[{"sig":"MEYCIQDfOsfUU5O96gf/eBd1takm6OKXKQAu0P7ZdbspkIg9FAIhAIbX8AP95DW9RRRa6weiThbk466FB6GVEkV/RiO5DXp9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57040},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.1.2.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.1.2.tgz","_integrity":"sha512-oB63ETeV6IJo/GLnLcSTZd+9neFTgdTo2fc1cPSdRFkGoGxyxtOORMhDL7Wxa8+lwhRK+1MctPFfLr2sxLXZRA==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.18.0","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","dependencies":{"@effect/sql-sqlite-node":"4.0.0-beta.101"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-beta.101"},"_npmOperationalInternal":{"tmp":"tmp/store_0.1.2_1784925492654_0.7555831514545261","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@effected/store","version":"0.1.3","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.1.3","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"ca21365a54a5db9859dc155d43e818a161a9e493","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.1.3.tgz","fileCount":9,"integrity":"sha512-m06UmBl+J2g6bpbPI7QUwJiqSTB4WZTvBuRSfqebvZDNhw8faL5b8frktBBSql79UF8i9nFQE0UHVvB5419kTw==","signatures":[{"sig":"MEUCIAxvTtFB461IcSdrRwqHcE1+vDOamDkL2jVza6e+gyaPAiEArt6K0XUaxwtoHpYdCvJO6lGSzciumOGxlOqbjEvLfp8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57040},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.1.3.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.1.3.tgz","_integrity":"sha512-m06UmBl+J2g6bpbPI7QUwJiqSTB4WZTvBuRSfqebvZDNhw8faL5b8frktBBSql79UF8i9nFQE0UHVvB5419kTw==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.19.0","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.1","dependencies":{"@effect/sql-sqlite-node":"4.0.0-beta.101"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-beta.101"},"_npmOperationalInternal":{"tmp":"tmp/store_0.1.3_1785795616019_0.8599691483056957","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@effected/store","version":"0.2.0","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.2.0","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"3a3a8ac76da7ccc2ca74132eb25c8547de9ef326","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.2.0.tgz","fileCount":9,"integrity":"sha512-bBD0uckkz2xoswjJAGmBvyQ73MQwwMgxXjXL/hXRUeN1/w77UyGEjp58WE4nPqAieXmHv20V2N58Bx9JToOWlA==","signatures":[{"sig":"MEUCIQCxqUAC2NhPiS2mBjKIjjm/jtNXwqRcWctevTcWnRj7rwIgZufswdrCiN9Xp4q0yXPk+XhJsSIR5AQqpBpXq8ndhQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57025},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.2.0.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.2.0.tgz","_integrity":"sha512-bBD0uckkz2xoswjJAGmBvyQ73MQwwMgxXjXL/hXRUeN1/w77UyGEjp58WE4nPqAieXmHv20V2N58Bx9JToOWlA==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.19.0","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.6.0","dependencies":{"@effect/sql-sqlite-node":"4.0.0-beta.107"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-beta.107"},"_npmOperationalInternal":{"tmp":"tmp/store_0.2.0_1786470528171_0.8461194666121918","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@effected/store","version":"0.3.0","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.3.0","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"5aa2fcc9d5ca020270d178725913615b32ca7707","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.3.0.tgz","fileCount":10,"integrity":"sha512-W2mNNh1Yu50iVMxjZ3Sre5zrGDHdcsdVUTDFBFyfFj7EySCEmyNLalJ1qY9oOOWJY4TrDyshu6tRxX6//UavXQ==","signatures":[{"sig":"MEYCIQDb/ugOsfRGjD0Z1GQf9AmdCPjmaIJUJSCrOPF79lQQPwIhAO02/Dz9PUlqE1QFZFLdW3EN57yHGmkdWG6Aclg/5krf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":70626},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.3.0.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.3.0.tgz","_integrity":"sha512-W2mNNh1Yu50iVMxjZ3Sre5zrGDHdcsdVUTDFBFyfFj7EySCEmyNLalJ1qY9oOOWJY4TrDyshu6tRxX6//UavXQ==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.19.0","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"@effect/sql-sqlite-node":"4.0.0-beta.107"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-beta.107"},"_npmOperationalInternal":{"tmp":"tmp/store_0.3.0_1786716043645_0.8261252527212348","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@effected/store","version":"0.4.0","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.4.0","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"fc450ccb6c970ee714f025dd07d9e281c85a4f80","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.4.0.tgz","fileCount":10,"integrity":"sha512-lOCaTt2ebVeW2kBnbkQWVLmvH6CXnEqP72VB+x1BMdufPiMm52edVGryh+j7OctH4O3fY6/R16CwTJAXticMcw==","signatures":[{"sig":"MEQCID25XfIYhFSMJJ3mJiVn7jCA2xbNeBneEgW5eEVk72gqAiBNGOuRipejovL+hdO9fGpwsAhSdoxjBuxZ/TkwoC0S6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":70628},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.4.0.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.4.0.tgz","_integrity":"sha512-lOCaTt2ebVeW2kBnbkQWVLmvH6CXnEqP72VB+x1BMdufPiMm52edVGryh+j7OctH4O3fY6/R16CwTJAXticMcw==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.19.0","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"@effect/sql-sqlite-node":"4.0.0-rc.109"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-rc.109"},"_npmOperationalInternal":{"tmp":"tmp/store_0.4.0_1786936866331_0.48581978987614005","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@effected/store","version":"0.5.0","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.5.0","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"2fceabdac9efad2bff075974db78e1e6533272c1","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.5.0.tgz","fileCount":11,"integrity":"sha512-K5V2lkDbOGZxJgd1521niJEIGs7fJYte+X66432Ez+SnzK0k10iz5Y1i9K21PZYHtZge0PNJey37Qvj+fJBTWQ==","signatures":[{"sig":"MEQCIH2zduH9Y5Wnt1PlRTke6wZewaCX4CW2fmMhTjCaF1baAiAppA2u537Iv636b8LAswJhFwVPjUxCz1shCNj5yxFXkg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78736},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.5.0.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.5.0.tgz","_integrity":"sha512-K5V2lkDbOGZxJgd1521niJEIGs7fJYte+X66432Ez+SnzK0k10iz5Y1i9K21PZYHtZge0PNJey37Qvj+fJBTWQ==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.19.0","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"@effect/sql-sqlite-node":"4.0.0-rc.109"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-rc.109"},"_npmOperationalInternal":{"tmp":"tmp/store_0.5.0_1787623850329_0.8275776620464734","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@effected/store","version":"0.6.0","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.6.0","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"105c9a4153302d8c0ea1ab00ad410a6add37183a","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.6.0.tgz","fileCount":11,"integrity":"sha512-fLEsF/xYJ17J1cFk+C6q2oYIrc8AmErL8T6zOgj8rVo4wO4YTccExpfl4NO7CfPbQRTf2F7Bs2qlLzWfVWh4Iw==","signatures":[{"sig":"MEUCIFpBhD3QcSSbzmkTug0oBZMiof/+CpM+qlDXKpaf2ZPxAiEAwrSHLdqwwpI/YUHlrj20Wbhq7qWeqvRB/FrUOMSqYN0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":88383},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.6.0.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.6.0.tgz","_integrity":"sha512-fLEsF/xYJ17J1cFk+C6q2oYIrc8AmErL8T6zOgj8rVo4wO4YTccExpfl4NO7CfPbQRTf2F7Bs2qlLzWfVWh4Iw==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.19.1","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.1","dependencies":{"@effect/sql-sqlite-node":"4.0.0-rc.109"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-rc.109"},"_npmOperationalInternal":{"tmp":"tmp/store_0.6.0_1788374675578_0.38343582363387485","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@effected/store","version":"0.7.0","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.7.0","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"9f8ef3ba0736ca8a12466cf67115101ae88d6125","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.7.0.tgz","fileCount":11,"integrity":"sha512-ZjnVyIoSqbJjEB37/Ye0lXEcRWUBTMlokm4xxt3urVKeLTGN8Vu+VqsnSEo9OHR3WdjnoS0XB81COrIoIDOuLw==","signatures":[{"sig":"MEQCIFyLZtKWmWn4iHRU4an/oXO2MzubeGV0hH30vjmTCQZoAiBmHg7rnZWpz9+gvOQS4rSW3WSKX2e5W8gng39894GKGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":88261},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.7.0.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.7.0.tgz","_integrity":"sha512-ZjnVyIoSqbJjEB37/Ye0lXEcRWUBTMlokm4xxt3urVKeLTGN8Vu+VqsnSEo9OHR3WdjnoS0XB81COrIoIDOuLw==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.19.1","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.1","dependencies":{"@effect/sql-sqlite-node":"4.0.0-rc.112"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-rc.112"},"_npmOperationalInternal":{"tmp":"tmp/store_0.7.0_1788629192677_0.08652758985912135","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@effected/store","version":"0.8.0","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.8.0","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"cdf3cba6b421b5dc442d9fa69cb26be4f57a4391","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.8.0.tgz","fileCount":11,"integrity":"sha512-ZTfu2F17SOUtZdNZKU0zj94mkxWesvU3yGE7z0tw8CB6r+L4AvBAAe0GNEefgWlTH8ibR0cJxdHJ5rvmJlBtfg==","signatures":[{"sig":"MEQCIFrxem9uUTUQLK0HGlJvfG4hwMWXWZxedwILORsd/FzPAiBwi54xtrGkRc1AQTGPA2nNHV1iIVwp7qFHLQmYbT7zGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":88261},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.8.0.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.8.0.tgz","_integrity":"sha512-ZTfu2F17SOUtZdNZKU0zj94mkxWesvU3yGE7z0tw8CB6r+L4AvBAAe0GNEefgWlTH8ibR0cJxdHJ5rvmJlBtfg==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.19.1","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","dependencies":{"@effect/sql-sqlite-node":"4.0.0-rc.115"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-rc.115"},"_npmOperationalInternal":{"tmp":"tmp/store_0.8.0_1789233760469_0.7655312781640555","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@effected/store","version":"0.8.1","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.8.1","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"a1cec97bc17d6581c3d57b824e4a96ba1d88782f","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.8.1.tgz","fileCount":11,"integrity":"sha512-eApfsFn8QQBt76pc3MTec9oPsEdDQi/TNCRClIzxh/sV4myZT+q9yIyfE5YSHwKrd0JsPLOxfqhnNHm01uLWGA==","signatures":[{"sig":"MEUCIG/aHDilkNJdCxQflhFaKnwmX0qxQmrh7wzg+pxCXtjpAiEA7cfspOjXUHVHGPMRhXsSXHjon1B9cpbuy3iG1WqQgmc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDe88Eub0GffSXPzzj4FimKGswFIRS+pd3eGqaQTCQ4JgIgew7E/xEUg/zYOJ9PaRi7s8/A5EqHrkAFIaoLEkAyNnk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":88261},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.8.1.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.8.1.tgz","_integrity":"sha512-eApfsFn8QQBt76pc3MTec9oPsEdDQi/TNCRClIzxh/sV4myZT+q9yIyfE5YSHwKrd0JsPLOxfqhnNHm01uLWGA==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"11.19.1","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.9.0","dependencies":{"@effect/sql-sqlite-node":"4.0.0-rc.115"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-rc.115"},"_npmOperationalInternal":{"tmp":"tmp/store_0.8.1_1789751110522_0.735895040151616","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@effected/store","version":"0.9.0","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","_id":"@effected/store@0.9.0","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"4fce5312c30c09b9b29c026dad6af43f3f519780","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.9.0.tgz","fileCount":11,"integrity":"sha512-yiZxbm2ARZXTmsw1Pm7XiW0XzZZtWkPDpwYal04VPKqCcdvbhSWuvO0IF8RB/JdWwvHb2ZUZxRJd8V43XdE2Ug==","signatures":[{"sig":"MEUCIHIKyVaPwOmrnDdfR/dam88etHZmjD3gjKE/4d8/hbO9AiEA2QpywPYCpG8lSGZRc54n2cOm0LOqV2VL2xbestnkVeE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFTKNeQsQq+isbXERJPWprXc3sweKNFw4uCnHMa0CPZ7AiBPI2llWBl2c/jeBKc4xtXftVTsg3mSEhNYg3n6JNkyAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":88261},"type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.9.0.tgz","types":"./index.d.ts","engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.9.0.tgz","_integrity":"sha512-yiZxbm2ARZXTmsw1Pm7XiW0XzZZtWkPDpwYal04VPKqCcdvbhSWuvO0IF8RB/JdWwvHb2ZUZxRJd8V43XdE2Ug==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"12.0.2","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"sideEffects":false,"_nodeVersion":"26.9.0","dependencies":{"@effect/sql-sqlite-node":"4.0.0-rc.116"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-rc.116"},"_npmOperationalInternal":{"tmp":"tmp/store_0.9.0_1789860598645_0.09157979714922715","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"_id":"@effected/store@0.10.0","bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"dist":{"shasum":"4037f86f253929190dd789d5285896d3655ed318","tarball":"https://registry.npmjs.org/@effected/store/-/store-0.10.0.tgz","fileCount":11,"integrity":"sha512-AJ3rwWVqFfoN0isX4qVy1H+bPLMa4T60h0Z7NbY+IaTbc3G22RkDBK6VTq+o2Ct4d8FngHjuH626r3vyg+8+Gg==","signatures":[{"sig":"MEUCIQD49EeOQVWzo2mmcr0zEHhUDom3bfouYXzG4lVJIFb4rwIgGPg26IQSrRcY8gJ8xmXYX4uY0/XzLBT5gUe+T6Tven4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAb0G8rM0P+5D3myXciv3Uib3VuY56uVonU6k6ijOZdQAiEA042JWLXpL409itx8U3Oh/g93NGQ9QSLYnWG5YLpUGXg="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@effected%2fstore@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":88262},"name":"@effected/store","type":"module","_from":"file:/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.10.0.tgz","types":"./index.d.ts","author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"engines":{"node":">=24.11.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"license":"MIT","private":false,"version":"0.10.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b368d8f8-0d4d-4efd-9d7d-ea5a7e7cb5d2"}},"homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"_resolved":"/home/runner/work/effected/effected/packages/store/dist/prod/npm/pkg/effected-store-0.10.0.tgz","_integrity":"sha512-AJ3rwWVqFfoN0isX4qVy1H+bPLMa4T60h0Z7NbY+IaTbc3G22RkDBK6VTq+o2Ct4d8FngHjuH626r3vyg+8+Gg==","repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"_npmVersion":"12.0.2","description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","directories":{},"maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"sideEffects":false,"_nodeVersion":"26.9.0","dependencies":{"@effect/sql-sqlite-node":"4.0.0-rc.117"},"_hasShrinkwrap":false,"peerDependencies":{"effect":"4.0.0-rc.117"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/store_0.10.0_1790110510478_0.879483033822309"}}},"time":{"created":"2026-07-16T17:31:01.364Z","modified":"2026-09-22T20:55:11.010Z","0.1.0":"2026-07-16T17:31:01.682Z","0.1.1":"2026-07-19T19:35:32.482Z","0.1.2":"2026-07-24T20:38:12.782Z","0.1.3":"2026-08-03T22:20:16.165Z","0.2.0":"2026-08-11T17:48:48.318Z","0.3.0":"2026-08-14T14:00:43.783Z","0.4.0":"2026-08-17T03:21:06.474Z","0.5.0":"2026-08-25T02:10:50.476Z","0.6.0":"2026-09-02T18:44:35.723Z","0.7.0":"2026-09-05T17:26:32.817Z","0.8.0":"2026-09-12T17:22:40.598Z","0.8.1":"2026-09-18T17:05:10.634Z","0.9.0":"2026-09-19T23:29:58.724Z","0.10.0":"2026-09-22T20:55:10.578Z"},"bugs":{"url":"https://github.com/spencerbeggs/effected/issues"},"author":{"url":"https://spencerbeg.gs","name":"C. Spencer Beggs","email":"spencer@beggs.codes"},"license":"MIT","homepage":"https://github.com/spencerbeggs/effected/tree/main/packages/store#readme","keywords":["sqlite","store","cache","ttl","migrations","effect","effected"],"repository":{"url":"git+https://github.com/spencerbeggs/effected.git","type":"git","directory":"packages/store"},"description":"Durable local state for Effect: a schema-versioned, migrated SQLite store and a TTL cache with tag invalidation, eviction, and a cache event stream.","maintainers":[{"name":"spencerbeggs","email":"spencer@beg.gs"}],"readme":"# @effected/store\n\n[![npm](https://img.shields.io/npm/v/@effected%2Fstore?label=npm&color=cb3837)](https://www.npmjs.com/package/@effected/store)\n[![License: MIT](https://img.shields.io/badge/License-MIT-4caf50.svg)](https://opensource.org/licenses/MIT)\n[![Node.js %3E%3D24.11.0](https://img.shields.io/badge/Node.js-%3E%3D24.11.0-5fa04e.svg)](https://nodejs.org/)\n[![TypeScript 7.0](https://img.shields.io/badge/TypeScript-7.0-3178c6.svg)](https://www.typescriptlang.org/)\n\nDurable local state for Effect: two services over one primitive. `Store` is a schema-versioned, migrated `SqlClient` — a managed database connection with a user-defined migration ledger that supports `up`, `down`, rollback and a status projection. `Cache` is a `key → Uint8Array` cache with TTL, tags, bulk invalidation, an eviction policy and a `PubSub` of lifecycle events. Both run on SQLite through Node's built-in `node:sqlite`, so there is no native compile step, and both surface their failures as tagged errors that carry the underlying `SqlError` structurally.\n\n> **Pre-release.** This package is part of the `@effected/*` kit, in pre-`1.0.0`\n> development against a single pinned Effect v4 prerelease. Packages graduate to\n> `1.0.0` once Effect `4.0.0` ships. To hold your own `effect` versions at\n> exactly the ones the kit is built and tested against, install\n> [`@effected/pnpm-plugin-effect`](https://www.npmjs.com/package/@effected/pnpm-plugin-effect).\n>\n> **Stability: unstable.** This package's API surface is not yet considered\n> complete and may change across `0.x` releases. Pin an exact version — even a\n> package marked *stable* before `1.0.0` can introduce a breaking change by\n> accident, and an exact pin turns that into a type-check error rather than a\n> runtime surprise. Full policy: [release strategy](https://github.com/spencerbeggs/effected#release-strategy).\n\n## Why @effected/store\n\nA store and a cache look like the same thing with a flag on it, and treating them that way is how caches end up holding data nobody can afford to lose. An evicted cache entry is correct behaviour; a lost state row is a bug. So they are two services here, with different contracts — only `Cache` has TTL, tags and eviction, and only `Store` has a migration ledger you own. They do share the ledger engine underneath, keyed by table name, so a `Store` and a `Cache` can live in the same database file without colliding.\n\nThe other thing this package refuses is defect laundering. A migration that throws is a programmer error, not a database failure, and it stays a defect rather than arriving as a `StoreError` you might be tempted to retry. Only a typed `SqlError` becomes a domain error, and it is carried whole rather than flattened into a `reason` string. Layer construction runs pending migrations and puts the failure on the layer's typed error channel — no `orDie` hiding a broken schema behind a working service.\n\n## Install\n\n```bash\nnpm install @effected/store effect\n```\n\n```bash\npnpm add @effected/store effect\n```\n\nRequires Node.js >=24.11.0.\n\nAll `@effected/*` packages are ESM-only: the exports maps publish only `import` conditions, so `require()` — including tools that resolve in CJS mode — fails with Node's `ERR_PACKAGE_PATH_NOT_EXPORTED` rather than loading a CJS build that does not exist. Import from an ES module.\n\n`effect` v4 is the only peer dependency. The SQLite driver (`@effect/sql-sqlite-node`) is a regular dependency of this package, so you do not install it yourself — it rides Node's built-in `node:sqlite`, with no native build and no transitive peers of its own. That single runtime dependency is what makes this the repo's one integrated-tier package: anything that depends on `@effected/store` inherits the driver.\n\n## Quick start\n\nDeclare your migrations, bind the layer to a const, and use `store.client` for your own queries:\n\n```ts\nimport { Store, type StoreMigration } from \"@effected/store\";\nimport { Effect } from \"effect\";\n\nconst migrations: ReadonlyArray<StoreMigration> = [\n  {\n    id: 1,\n    name: \"create-notes\",\n    up: (sql) => sql`CREATE TABLE notes (id INTEGER PRIMARY KEY, body TEXT NOT NULL)`,\n    down: (sql) => sql`DROP TABLE notes`,\n  },\n];\n\n// The filename reaches SQLite as given, so its parent directory must already\n// exist. Use `@effected/xdg` to resolve (and create) a real application data dir.\nconst StoreLive = Store.layerSqlite({ filename: \"state.db\", migrations });\n\nconst program = Effect.gen(function* () {\n  const store = yield* Store;\n  const sql = store.client;\n  yield* sql`INSERT INTO notes (body) VALUES (${\"first\"})`;\n  return yield* sql<{ id: number; body: string }>`SELECT id, body FROM notes`;\n});\n\nEffect.runPromise(program.pipe(Effect.provide(StoreLive))).then(console.log);\n// [ { id: 1, body: \"first\" } ]\n```\n\nThe layer statics are parameterized *factories*, not layers. Calling `Store.layerSqlite(...)` twice builds two layers, and Layer memoization is by reference — bind the result to a const, as above, or the database is opened twice.\n\nThe parent directory of `filename` must exist. The SQLite driver's construction has no error channel, so a missing directory arrives as a defect rather than a typed failure; creating it is the caller's job, and [`@effected/xdg`](../xdg) is the package that knows where the directory belongs.\n\n## The layer trio\n\nBoth services expose the same three statics, and the split is the seam:\n\n| Static | What it provides | Requirements |\n| ------ | ---------------- | ------------ |\n| `layer(options)` | The service over an abstract `SqlClient` — any Effect SQL driver satisfies it | `SqlClient` |\n| `layerSqlite(options & { filename })` | The service plus the SQLite driver | none |\n| `layerTest(options)` | `layerSqlite` at `:memory:`; hermetic, what the suites use | none |\n\nThe SQL core lives in `effect` itself, under `effect/unstable/sql` — there is no `@effect/sql` package on the v4 line, so `SqlClient` is imported from `effect/unstable/sql/SqlClient`.\n\n### Driver options\n\n`layerSqlite` takes the rest of the driver's configuration through `client`, so tuning the SQLite client no longer means dropping to the abstract `layer` with a hand-wired driver:\n\n```ts\nconst StoreLive = Store.layerSqlite({\n  filename: \"state.db\",\n  migrations,\n  client: { disableWAL: true, prepareCacheSize: 50 },\n  checkpointOnClose: true,\n});\n```\n\n- **`client`** passes through everything `SqliteClient.layer` accepts except `filename` (owned by this layer) and the two name-transform options — `transformResultNames`/`transformQueryNames` would rewrite the result names of the migration ledger's own queries and silently report every migration pending. If you need name transforms, wire your own client under the abstract `layer`.\n- **`checkpointOnClose: true`** registers a `PRAGMA wal_checkpoint(TRUNCATE)` finalizer that runs against the still-open connection, before the driver closes it — the finalizer every durable-SQLite consumer was writing by hand. Best-effort: a failing checkpoint never turns a clean shutdown into a failed one. SQLite-specific, so it lives on the sqlite layers only; `layerTest` (`:memory:`) has no WAL and never checkpoints.\n\n`Cache.layerSqlite` takes the same two options.\n\n## Migrations\n\nMigrations are a list you own: a positive-integer `id`, a `name` recorded in the ledger, an `up`, and an optional `down`. Both return `Effect<unknown, SqlError>`, so a tagged SQL template goes back as-is — the engine discards the value, and a `CREATE TABLE` that already describes itself needs no `Effect.asVoid` wrapped around it. Layer construction ensures the ledger table and applies everything pending, so a freshly built `Store` is already migrated. `migrate` re-runs pending migrations, `rollback(toId)` unwinds everything with `id > toId` newest-first (`rollback(0)` unwinds all of it), and `status` projects the full list with each migration's `appliedAt`:\n\n```ts\nimport { Store } from \"@effected/store\";\nimport { Effect } from \"effect\";\n\nconst program = Effect.gen(function* () {\n  const store = yield* Store;\n  yield* store.rollback(0);\n  return yield* store.status;\n});\n// Every migration is listed, each with `appliedAt` absent — they are all pending again.\n```\n\nDuplicate ids, non-positive-integer ids and a non-integer `toId` are wiring errors, not data conditions: they die at layer construction rather than failing typed. A migration that *throws* stays a defect too, and the surrounding transaction rolls back.\n\n### Adopting a database migrated by effect's Migrator\n\n`Store` is your schema — migrations create your tables, `client` queries them — but its ledger is its own. A database previously migrated by `effect/unstable/sql/Migrator` records what ran in `effect_sql_migrations` (`migration_id`, `name`, `created_at`), which `Store` does not read: on first construction over such a file, `Store` sees an empty `_store_migrations` ledger and re-runs every migration. If your migrations are idempotent (`CREATE TABLE IF NOT EXISTS …`), that re-run is harmless and you can skip all of this. If they are not — a bare `CREATE TABLE`, a seeding `INSERT` — seed the ledger **before** the first `Store` layer is built, because layer construction itself runs pending migrations.\n\nDetect the old ledger:\n\n```sql\nSELECT name FROM sqlite_master WHERE type = 'table' AND name = 'effect_sql_migrations';\n```\n\nSeed `_store_migrations` from it — this is a one-time step against the closed database file, so plain `node:sqlite` is the right tool:\n\n```ts\nimport { DatabaseSync } from \"node:sqlite\";\n\nconst db = new DatabaseSync(\"state.db\");\ndb.exec(`\n  CREATE TABLE IF NOT EXISTS _store_migrations (\n    id INTEGER PRIMARY KEY,\n    name TEXT NOT NULL,\n    applied_at TEXT NOT NULL\n  );\n  INSERT INTO _store_migrations (id, name, applied_at)\n  SELECT migration_id, name, strftime('%Y-%m-%dT%H:%M:%fZ', created_at)\n  FROM effect_sql_migrations\n  WHERE migration_id NOT IN (SELECT id FROM _store_migrations);\n`);\ndb.close();\n```\n\nTwo things to hold constant across the adoption: the `id`s in your `StoreMigration` list must equal the `migration_id`s the old Migrator recorded (it derived them from the migration file names), and the migration *contents* must describe the schema the database already has — the seed only tells `Store` \"these already ran\", it does not verify them. The old `effect_sql_migrations` table can be dropped afterwards or left in place; `Store` never touches it.\n\n## Cache\n\n`Cache` stores bytes under string keys, with an optional TTL and a set of tags for bulk invalidation:\n\n```ts\nimport { Cache } from \"@effected/store\";\nimport { Duration, Effect } from \"effect\";\n\nconst CacheLive = Cache.layerSqlite({ filename: \"cache.db\", maxEntries: 1000 });\n\nconst program = Effect.gen(function* () {\n  const cache = yield* Cache;\n\n  yield* cache.set({\n    key: \"npm:effect\",\n    value: new TextEncoder().encode(`{\"name\":\"effect\"}`),\n    contentType: \"application/json\",\n    tags: [\"npm\", \"registry\"],\n    ttl: Duration.minutes(10),\n  });\n\n  const hit = yield* cache.get(\"npm:effect\");\n  // Option.some(CacheEntry) while the entry is live; Option.none() once the TTL has passed\n\n  return yield* cache.invalidateByTag(\"npm\");\n  // { count: 1, keys: [ \"npm:effect\" ] }\n});\n\nEffect.runPromise(program.pipe(Effect.provide(CacheLive))).then(console.log);\n```\n\nThe invariants worth knowing:\n\n- **Expiry is lazy.** `get` and `has` delete an expired row on read; `prune` sweeps in bulk. The clock is read through `DateTime.now`, so `TestClock` drives expiry deterministically in tests — provide `TestClock.layer()` **outside** the `Effect.provide` that supplies the cache, never beneath it, or the test body has no `TestClock` in its context, `TestClock.adjust` dies as a defect, and nothing you try to expire ever expires.\n- **Eviction is least-recently-*written***, not LRU-read. With `maxEntries` set, a `set` evicts the oldest-written entries in the same transaction until the bound holds, and publishes an `Evicted` event.\n- **`onRemoved` runs inside the delete transaction.** `invalidate`, `invalidateByTag`, `invalidateAll` and `prune` each take an optional callback that runs before the delete commits: a typed failure rolls the delete back and suppresses the event, and your error type survives in the signature as `CacheError | E`. This is how you keep a cache entry and the file it points at from drifting apart.\n- **Keys and tags are data, never SQL.** Everything reaches SQLite through the tagged-template `SqlClient`, and tag matching escapes `%`, `_` and `\\` before it interpolates, so a tag containing a backslash matches its own entries.\n\n### Degrading to a miss\n\nA cache that cannot be constructed fails its layer, and that failure belongs to the whole program. `Cache.degrading` wraps any `Cache` layer so a construction failure yields a working, empty cache instead: reads miss, writes are discarded, removals report nothing removed, no operation can fail, and the cause is logged once at warning level.\n\n```ts\nimport { Cache } from \"@effected/store\";\nimport { Effect } from \"effect\";\n\nconst CacheLive = Cache.degrading(Cache.layerSqlite({ filename: \"cache.db\" }));\n\nconst program = Effect.gen(function* () {\n  const cache = yield* Cache;\n  return cache.degraded;\n  // false for a live cache; true when construction failed and this is the fallback\n});\n```\n\nIt is opt-in because the opposite posture is legitimate — a consumer that wants a cache problem to be fatal, or that wants the narrower per-operation form, keeps exactly that by not calling it. Two details make it worth having rather than hand-writing. The SQLite driver reports construction failures — a `filename` whose parent directory does not exist, the common case — as *defects* rather than typed failures, so a failure-only catch misses the case this exists for. And interruption is deliberately re-raised with its interrupting fiber intact, because a caller shutting down is not a broken cache. `degraded` is a plain field rather than a `CacheEvent` because degradation is decided at construction, before any subscriber exists, and the events hub does not replay.\n\n### Read-through, in one call\n\nThe loop above — get, decode, fetch on a miss, encode, set — is the entire reason to have a cache, so it is a single call rather than twenty-five lines in every consumer:\n\n```ts\nimport { Cache } from \"@effected/store\";\nimport { Effect, Schema } from \"effect\";\n\nconst Members = Schema.Struct({ login: Schema.String });\n\nconst program = Effect.gen(function* () {\n  const members = yield* Cache.through(\"team:platform\", Schema.fromJsonString(Members), {\n    ttl: \"1 hour\",\n    tags: [\"team\"],\n  })(fetchMembersFromApi); // ← only runs on a miss\n\n  return members;\n});\n```\n\n`schema` encodes to `string`; the last step to bytes is [`Uint8ArrayFromUtf8`](#uint8arrayfromutf8), so the encoding decision lives in one audited place instead of one per consumer. Use `Cache.throughVerbose` when the caller needs to know where the value came from — it returns `{ value, hit }`, which is what you want for printing *(cached)* next to a line of output. The `CacheEvent` PubSub is the right channel for telemetry and the wrong one for a fact the read-through already knew.\n\nTwo policies this makes the package's rather than yours:\n\n- **A value that fails to decode is a miss, not a failure.** Those bytes were written by an older build of your own program: the user did not cause it, cannot fix it without knowing the cache exists, and everything in here is re-derivable by definition. Failing would strand them behind a cache they cannot see. The stale entry is overwritten on the way out.\n- **`CacheError` is surfaced, not swallowed.** A cache is additive, and you may well want to push through a broken one — but that is your call to make with `Effect.catchTag(\"CacheError\", …)`, because a database that cannot be read is a real and reportable condition. This package will not hide it from you by default.\n\n### Uint8ArrayFromUtf8\n\nCache values are bytes, and the honest way to produce them is a schema. Core ships `Uint8ArrayFromBase64`, `Uint8ArrayFromBase64Url` and `Uint8ArrayFromHex` — and nothing for UTF-8, so `Schema.fromJsonString(schema)` gets you to `string` and stops one inch short. `Uint8ArrayFromUtf8` is that inch:\n\n```ts\nconst Payload = Schema.fromJsonString(Settings).pipe(Schema.encodeTo(Uint8ArrayFromUtf8));\n```\n\nEncoding **fails** on malformed UTF-8 rather than substituting replacement characters, so a corrupt value stays distinguishable from a valid one that happens to contain `U+FFFD`. If core ever ships an equivalent, prefer that one.\n\nEvery operation publishes to `cache.events`, an unbounded `PubSub<CacheEvent>` — `Hit`, `Miss`, `Set`, `Expired`, `Evicted`, `Invalidated`, `InvalidatedByTag`, `InvalidatedAll` and `Pruned`. It is unbounded on purpose: a slow subscriber must never backpressure a cache write.\n\n## Errors\n\n| Tag | Means | Recovery |\n| --- | --- | --- |\n| `StoreError` | A store operation's own SQL failed — ledger bookkeeping, or the queries around a migration. Carries `operation` and the structural `cause`. | Usually fatal; report the operation and the cause. |\n| `StoreMigrationError` | A user-supplied migration failed with a typed `SqlError`. Carries `direction`, `id`, `name` and the structural `cause`. | Report which migration and which direction; the ledger is left consistent. |\n| `CacheError` | A cache operation's SQL failed. Carries `operation`, an optional `key` and the structural `cause`. | A cache is a cache — falling back to the origin is usually right. |\n\nDefects are not errors here. A throwing migration callback, a throwing `onRemoved`, a `maxEntries` that is not a positive integer: all of those are programmer mistakes and stay on the defect channel where they belong.\n\n## Features\n\n- `Store` — a migrated `SqlClient` with `migrate`, `rollback`, `status` and the raw `client` for your own schema-aware queries.\n- `Cache` — TTL, tags, bulk invalidation, a `maxEntries` eviction policy and a `CacheEvent` stream, over `key → Uint8Array`.\n- `Cache.degrading` — an opt-in layer combinator that turns a construction failure into a working, empty cache; the `degraded` field on the service tells the two apart.\n- `layer` / `layerSqlite` / `layerTest` on both — driver-agnostic, batteries-included and in-memory, with the same options.\n- `StoreError`, `StoreMigrationError`, `CacheError` — tagged errors carrying the underlying `SqlError` structurally, never a `reason` string.\n- `CacheEntry`, `CacheEntryMeta`, `CacheRemovalResult`, `StoreMigrationStatus` — the returned records; `entries` lists metadata without loading BLOBs.\n- Named spans on every public fallible method (`Store.migrate`, `Cache.get`, …), nesting over the driver's own statement spans.\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}