{"_id":"@aibulat/indexeddb-impl","_rev":"4-9b592e2d733a179b1f73efb5d7775d95","name":"@aibulat/indexeddb-impl","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@aibulat/indexeddb-impl","version":"0.1.0","keywords":["indexeddb","idb","in-memory","polyfill","shim","testing","database","ESM","TypeScript"],"author":{"name":"Aibulat"},"license":"Apache-2.0","_id":"@aibulat/indexeddb-impl@0.1.0","maintainers":[{"name":"aibulat","email":"ngmAibulat@gmail.com"}],"homepage":"https://github.com/ngmaibulat/packages/tree/main/packages/indexeddb-impl#readme","bugs":{"url":"https://github.com/ngmaibulat/packages/issues"},"dist":{"shasum":"2f974286374202372b015b46dbc51b7c57971712","tarball":"https://registry.npmjs.org/@aibulat/indexeddb-impl/-/indexeddb-impl-0.1.0.tgz","fileCount":55,"integrity":"sha512-bmGQBfmibiYucN448RrRNdLSN7JTkvziZyUlsaKb34loa8eyW6wxLNQEa7dAHm7D04PFNqdxVqI6Jhvfo1xDgQ==","signatures":[{"sig":"MEUCIDE82XLqwZIKdo7iiaYfEXHfbO0rM+kOwHtTr3hZYPvRAiEA7+ygKu6nzmo+WfiBVQIvusl+U49evdx0rT5rV1SeQMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":319492},"main":"./dist/index.js","type":"module","types":"./types.d.ts","engines":{"node":">=22.5"},"exports":{".":{"types":"./types.d.ts","default":"./dist/index.js"},"./auto":{"types":"./auto.d.ts","default":"./dist/auto.js"},"./package.json":"./package.json"},"gitHead":"3f3eab57c09324a925a7d12896c01f98e87030c8","scripts":{"dev":"tsdown --watch","test":"node --test \"test/**/*.test.ts\"","build":"tsdown","prepack":"pnpm run build","test:bun":"bun test test/","test:wpt":"node --test test/wpt/run-all.test.ts","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json"},"_npmUser":{"name":"aibulat","email":"ngmAibulat@gmail.com"},"repository":{"url":"git+https://github.com/ngmaibulat/packages.git","type":"git","directory":"packages/indexeddb-impl"},"_npmVersion":"11.19.0","description":"A pure JavaScript in-memory implementation of IndexedDB, for tests that must not need a browser","directories":{},"_nodeVersion":"26.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^11.0.2","dexie":"^4.0.11","tsdown":"^0.22.14","publint":"^0.3.23","smol-toml":"^1.4.1","typescript":"^5.9.3","@types/node":"^22.13.1","@arethetypeswrong/core":"^0.18.5"},"_npmOperationalInternal":{"tmp":"tmp/indexeddb-impl_0.1.0_1786878348459_0.32025291803306377","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aibulat/indexeddb-impl","version":"0.1.1","keywords":["indexeddb","idb","in-memory","polyfill","shim","testing","database","ESM","TypeScript"],"author":{"name":"Aibulat"},"license":"Apache-2.0","_id":"@aibulat/indexeddb-impl@0.1.1","maintainers":[{"name":"aibulat","email":"ngmAibulat@gmail.com"}],"homepage":"https://github.com/ngmaibulat/packages/tree/main/packages/indexeddb-impl#readme","bugs":{"url":"https://github.com/ngmaibulat/packages/issues"},"dist":{"shasum":"9b8b5569c459f00b34914b403852f267b2104f68","tarball":"https://registry.npmjs.org/@aibulat/indexeddb-impl/-/indexeddb-impl-0.1.1.tgz","fileCount":56,"integrity":"sha512-Y/KZoCFwPNL2hCE/Y07ahsmD289iRSBQdTGfKFgIh9qgsya1BnwMw2X9GyS5UE5T5jPV6blYqzik7EUaa2/8nQ==","signatures":[{"sig":"MEUCIHkYdRf/UNT508pv2jUSn3cZLAhx2ZuUL/gAdD8bKB6jAiEAjZ0EwtD9tHmmfOEdqBeOeWHfTDp/K5EwopFpwQP/5Ns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aibulat%2findexeddb-impl@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":346498},"main":"./dist/index.js","type":"module","types":"./types.d.ts","engines":{"bun":">=1.3","node":">=26"},"exports":{".":{"types":"./types.d.ts","default":"./dist/index.js"},"./auto":{"types":"./auto.d.ts","default":"./dist/auto.js"},"./package.json":"./package.json"},"gitHead":"afd0b7f3a1c0a73f620c0763a69ffa36595e6dde","scripts":{"dev":"tsdown --watch","test":"node --test \"test/**/*.test.ts\"","build":"tsdown","prepack":"pnpm run build","test:bun":"bun test test/","test:wpt":"node --test test/wpt.test.ts","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2f47cec8-2ad8-4a7f-8305-dd9080a4c252"}},"repository":{"url":"git+https://github.com/ngmaibulat/packages.git","type":"git","directory":"packages/indexeddb-impl"},"_npmVersion":"12.0.2","description":"A pure JavaScript in-memory implementation of IndexedDB, for tests that must not need a browser","directories":{},"_nodeVersion":"26.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^11.0.2","dexie":"^4.0.11","tsdown":"^0.22.14","publint":"^0.3.23","smol-toml":"^1.4.1","typescript":"^5.9.3","@types/node":"^26.0.0","@arethetypeswrong/core":"^0.18.5"},"_npmOperationalInternal":{"tmp":"tmp/indexeddb-impl_0.1.1_1786887597795_0.13717419591601443","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aibulat/indexeddb-impl","version":"0.1.2","keywords":["indexeddb","idb","in-memory","polyfill","shim","testing","database","ESM","TypeScript"],"author":{"name":"Aibulat"},"license":"Apache-2.0","_id":"@aibulat/indexeddb-impl@0.1.2","maintainers":[{"name":"aibulat","email":"ngmAibulat@gmail.com"}],"homepage":"https://github.com/ngmaibulat/packages/tree/main/packages/indexeddb-impl#readme","bugs":{"url":"https://github.com/ngmaibulat/packages/issues"},"dist":{"shasum":"9ed1526c74d77d1faa40d999c6d88e425b1390f7","tarball":"https://registry.npmjs.org/@aibulat/indexeddb-impl/-/indexeddb-impl-0.1.2.tgz","fileCount":57,"integrity":"sha512-5UMgZOc0jxv29FeJSYwl2tFar9TOOCLCg/lL4x7ue6o4aiiX+XiFx79aR8++YVVVAq0A4oEgo/yYvK70mgGR3A==","signatures":[{"sig":"MEUCIFA5G05h6kbQuLU3b+gp0E2MfSh+Dm2Vrn8egBSkGd/qAiEAwaVgx40AY3B5i5+NC7JMBx8klgoynAVaJz3Wk26lnF0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aibulat%2findexeddb-impl@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":382075},"main":"./dist/index.js","type":"module","types":"./types.d.ts","engines":{"bun":">=1.3","node":">=26"},"exports":{".":{"types":"./types.d.ts","default":"./dist/index.js"},"./auto":{"types":"./auto.d.ts","default":"./dist/auto.js"},"./package.json":"./package.json"},"gitHead":"69024f47f0e1692601c8069fa118888e0b52e497","scripts":{"dev":"tsdown --watch","test":"node --test \"test/**/*.test.ts\"","build":"tsdown","prepack":"pnpm run build","test:bun":"bun test test/","test:wpt":"node --test test/wpt.test.ts","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2f47cec8-2ad8-4a7f-8305-dd9080a4c252"}},"repository":{"url":"git+https://github.com/ngmaibulat/packages.git","type":"git","directory":"packages/indexeddb-impl"},"_npmVersion":"12.0.2","description":"A pure JavaScript in-memory implementation of IndexedDB, for tests that must not need a browser","directories":{},"_nodeVersion":"26.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^11.0.2","dexie":"^4.0.11","tsdown":"^0.22.14","publint":"^0.3.23","smol-toml":"^1.4.1","typescript":"^5.9.3","@types/node":"^26.0.0","@arethetypeswrong/core":"^0.18.5"},"_npmOperationalInternal":{"tmp":"tmp/indexeddb-impl_0.1.2_1786902862358_0.02219836047092305","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@aibulat/indexeddb-impl","version":"0.1.3","description":"A pure JavaScript in-memory implementation of IndexedDB, for tests that must not need a browser","type":"module","main":"./dist/index.js","types":"./types.d.ts","exports":{".":{"types":"./types.d.ts","default":"./dist/index.js"},"./auto":{"types":"./auto.d.ts","default":"./dist/auto.js"},"./package.json":"./package.json"},"scripts":{"build":"tsdown","dev":"tsdown --watch","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json","test":"node --test \"test/**/*.test.ts\"","test:bun":"bun test test/","test:wpt":"node --test test/wpt.test.ts","prepack":"pnpm run build"},"publishConfig":{"access":"public"},"keywords":["indexeddb","idb","in-memory","polyfill","shim","testing","database","ESM","TypeScript"],"repository":{"type":"git","url":"git+https://github.com/ngmaibulat/packages.git","directory":"packages/indexeddb-impl"},"bugs":{"url":"https://github.com/ngmaibulat/packages/issues"},"homepage":"https://github.com/ngmaibulat/packages/tree/main/packages/indexeddb-impl#readme","author":{"name":"Aibulat"},"license":"Apache-2.0","devDependencies":{"@arethetypeswrong/core":"^0.18.5","@types/node":"^26.0.0","dexie":"^4.0.11","glob":"^11.0.2","publint":"^0.3.23","smol-toml":"^1.4.1","tsdown":"^0.22.14","typescript":"^5.9.3"},"engines":{"node":">=26","bun":">=1.3"},"gitHead":"5cba1ce77767afaac3134ab78aa55daecbe36a4f","_id":"@aibulat/indexeddb-impl@0.1.3","_nodeVersion":"26.7.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-OoBfdNqAo8BgOvC6Yu7mgdwjpupXXCDQtKFbw6Lj1FzNi8qPpnizBG4xf6hg3LiZNmN7/fyKYZAIx25/5ebJnQ==","shasum":"638b5eb512aa15d3b2e9804b38cfe896daa65b5f","tarball":"https://registry.npmjs.org/@aibulat/indexeddb-impl/-/indexeddb-impl-0.1.3.tgz","fileCount":58,"unpackedSize":398966,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aibulat%2findexeddb-impl@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEF5AuQhZJYammhiahW3oSSbWLU3U11Ngg994K5I9ovZAiEA8m8dFyZMpSnJh3QYCFB2fTzR/gJdFPRNLSQIWsJu0hQ="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2f47cec8-2ad8-4a7f-8305-dd9080a4c252"}},"directories":{},"maintainers":[{"name":"aibulat","email":"ngmAibulat@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/indexeddb-impl_0.1.3_1786979848560_0.7625690596614518"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-16T11:05:48.306Z","modified":"2026-08-17T15:17:29.086Z","0.1.0":"2026-08-16T11:05:48.617Z","0.1.1":"2026-08-16T13:39:57.972Z","0.1.2":"2026-08-16T17:54:22.506Z","0.1.3":"2026-08-17T15:17:28.761Z"},"bugs":{"url":"https://github.com/ngmaibulat/packages/issues"},"author":{"name":"Aibulat"},"license":"Apache-2.0","homepage":"https://github.com/ngmaibulat/packages/tree/main/packages/indexeddb-impl#readme","keywords":["indexeddb","idb","in-memory","polyfill","shim","testing","database","ESM","TypeScript"],"repository":{"type":"git","url":"git+https://github.com/ngmaibulat/packages.git","directory":"packages/indexeddb-impl"},"description":"A pure JavaScript in-memory implementation of IndexedDB, for tests that must not need a browser","maintainers":[{"name":"aibulat","email":"ngmAibulat@gmail.com"}],"readme":"# @aibulat/indexeddb-impl\n\nA pure JavaScript, in-memory implementation of IndexedDB. Import it and code\nthat expects a browser database works in Node or Bun, with no browser, no\njsdom, and no disk.\n\n> A fork of [`fake-indexeddb`](https://github.com/dumbmatter/fakeIndexedDB) by\n> Jeremy Scheff, forked at v6.2.5. The API is unchanged. This fork is ESM only,\n> builds with tsdown, and — the point of the exercise — runs **every** one of its\n> test suites without a browser, under both `node --test` and `bun test`. See\n> [CHANGELOG.md](CHANGELOG.md) for what changed and [NOTICE](NOTICE) for\n> attribution.\n\n## Install\n\n```bash\nnpm install --save-dev @aibulat/indexeddb-impl\n```\n\n## Use\n\nThe usual way is the side-effect import, which installs `indexedDB` and the\n`IDB*` constructors onto `globalThis`:\n\n```ts\nimport \"@aibulat/indexeddb-impl/auto\";\n\nconst request = indexedDB.open(\"my-db\", 1);\n```\n\nOr take the pieces directly, without touching globals:\n\n```ts\nimport { indexedDB, IDBKeyRange } from \"@aibulat/indexeddb-impl\";\n```\n\n`installGlobals()` is the callable form of `/auto`. Reach for it when a side\neffect import will not do — a runner that shares one process across test files\nonly executes the import once, so it cannot reinstall after a test has tampered\nwith the globals:\n\n```ts\nimport { installGlobals } from \"@aibulat/indexeddb-impl\";\n\ninstallGlobals(); // or installGlobals(someOtherGlobalObject)\n```\n\nEach database lives in memory for the life of the process. There is no\npersistence and nothing to clean up between runs.\n\n## With `@aibulat/indexeddb`\n\nThe sibling [`@aibulat/indexeddb`](../indexeddb) is a promise wrapper over the\nIndexedDB API; this package is an implementation of the API itself. They compose:\n\n```ts\nimport \"@aibulat/indexeddb-impl/auto\";\nimport { openDB } from \"@aibulat/indexeddb\";\n\nconst db = await openDB(\"my-db\", 1, {\n    upgrade(db) {\n        db.createObjectStore(\"keyval\");\n    },\n});\n```\n\n## Runtimes\n\nNode >= 26 and Bun >= 1.3 (both declared in `engines`). It is written against the DOM lib rather than Node's, so\nit also runs in a browser or a worker — which is mostly useful for testing a\npage against a database that resets on reload.\n\n## Tests\n\nFour suites, 1,793 tests, all headless and all hermetic:\n\n| Suite                | What it is                                                                                                                                                     |\n| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `test/wpt/`          | The W3C [web-platform-tests](https://github.com/web-platform-tests/wpt) IndexedDB conformance corpus, 229 files (19 of them support files that are skipped), each forked into its own process. 1,536 pass. |\n| `test/qunit/`        | The indexedDBmock corpus, 105 tests. Upstream could only run this in a real browser.                                                                           |\n| `test/unit/`         | The project's own unit tests, 124 of them — including `conformance-fixes.test.ts`, one test per spec fix that the corpus did not cover.                        |\n| `test/smoke.test.ts` | The public export surface, plus a Dexie round-trip.                                                                                                            |\n\n```bash\npnpm run test        # everything, under node:test\npnpm run test:bun    # everything, under bun test\npnpm run test:wpt    # just the conformance corpus\npnpm run typecheck   # both the src and test projects\npnpm run build       # tsdown -> dist/, plus publint and attw\n```\n\nBoth runners report the same totals. Expected conformance results live in\n`test/wpt/manifests/*.toml`: a test known to fail is recorded there rather than\ndeleted, so fixing one shows up as an unexpected pass rather than silence.\nRegenerate them with `GENERATE_MANIFESTS=1 pnpm run test:wpt`.\n\n### Known gaps\n\nThree conformance tests are recorded as expected failures, two as unstable and\none as an expected timeout, down from 144 failures at the fork. Every idlharness\nassertion passes. What remains is event-loop emulation that Node and Bun cannot\nexpress, plus two load-dependent races.\n\n`test/wpt/manifests/` is the authoritative record, and\n[CONFORMANCE.md](CONFORMANCE.md) breaks each one down.\n","readmeFilename":"README.md"}