{"_id":"@amateras/idb","_rev":"6-5893dce915279d26b43b2c2cc4ceafcf","name":"@amateras/idb","dist-tags":{"beta":"0.0.2-beta.1","latest":"0.1.2"},"versions":{"0.0.1":{"name":"@amateras/idb","version":"0.0.1","_id":"@amateras/idb@0.0.1","maintainers":[{"name":"defaultkavy","email":"defaultkavy@gmail.com"}],"dist":{"shasum":"d95df60645c1156497e296152c2c7c461905ab55","tarball":"https://registry.npmjs.org/@amateras/idb/-/idb-0.0.1.tgz","fileCount":13,"integrity":"sha512-5MqC9nXPyKLes7PcSo0Eo5i0xcm2FmczS5tSKR73nUg2dAlGvCh6XmUDJt9oF0VirRCEL55TMqlP8/tb5QwgIg==","signatures":[{"sig":"MEYCIQC99eObWY4uzQv7wJrTZllxS0+uYmm3HCakmdX7PdIotgIhAKWwGJ6CIBSyLyJCSkBSwwOrXnlmuZYjQqMFp0u6WdfD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34101},"exports":{".":"./src/index.ts"},"gitHead":"bed0a910f90367331b34b669f2202cf7003cb809","imports":{"#lib/*":"./src/lib/*.ts","#node/*":"./src/node/*.ts","#structure/*":"./src/structure/*.ts"},"_npmUser":{"name":"defaultkavy","email":"defaultkavy@gmail.com"},"_npmVersion":"11.17.0","description":"```ts import 'amateras'; import 'amateras/idb';","directories":{},"_nodeVersion":"22.13.1","_hasShrinkwrap":false,"peerDependencies":{"@amateras/core":"workspace:*","@amateras/utils":"workspace:*","@amateras/signal":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/idb_0.0.1_1784386686366_0.7847436534616175","host":"s3://npm-registry-packages-npm-production"}},"0.0.2-beta.0":{"name":"@amateras/idb","version":"0.0.2-beta.0","_id":"@amateras/idb@0.0.2-beta.0","maintainers":[{"name":"defaultkavy","email":"defaultkavy@gmail.com"}],"dist":{"shasum":"2a0425196989446460ff37753dba35f538adc1b8","tarball":"https://registry.npmjs.org/@amateras/idb/-/idb-0.0.2-beta.0.tgz","fileCount":13,"integrity":"sha512-UsXPU135TUY15YeBUgiupQovsYlrnKojcxzMWu1Y7q8wOrSfWetoe90pddw2w+XkHLPdMEtxl69naVEtgl8H1A==","signatures":[{"sig":"MEUCIGC2Hfn0BFGN+xNf95vXgzZUxZY+wmFqF+YNOAPsnhHWAiEAg0ClvEEJra1RFD7A/Gj/hC9VYomp5JQkSGzlUEpPVXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34108},"exports":{".":"./src/index.ts"},"gitHead":"bed0a910f90367331b34b669f2202cf7003cb809","imports":{"#lib/*":"./src/lib/*.ts","#node/*":"./src/node/*.ts","#structure/*":"./src/structure/*.ts"},"_npmUser":{"name":"defaultkavy","email":"defaultkavy@gmail.com"},"_npmVersion":"11.17.0","description":"```ts import 'amateras'; import 'amateras/idb';","directories":{},"_nodeVersion":"22.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"@amateras/core":"workspace:*","@amateras/utils":"workspace:*","@amateras/signal":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/idb_0.0.2-beta.0_1784389728087_0.5428967489880709","host":"s3://npm-registry-packages-npm-production"}},"0.0.2-beta.1":{"name":"@amateras/idb","version":"0.0.2-beta.1","_id":"@amateras/idb@0.0.2-beta.1","maintainers":[{"name":"defaultkavy","email":"defaultkavy@gmail.com"}],"dist":{"shasum":"3303724f6352fcd5b5dd3f4293ffb33f47612291","tarball":"https://registry.npmjs.org/@amateras/idb/-/idb-0.0.2-beta.1.tgz","fileCount":13,"integrity":"sha512-f88F7V05Iznvx4IYIupQrFyC1P+B9uDYlnp2oH4/JCmyeYamCm3rStmU3DakkJRtEViLRxF09wntaHVCntlV8g==","signatures":[{"sig":"MEYCIQDNggkisXxCgKsJEutrfs/g3TeL4saUCurzaGPk7/WG8gIhAONsf+m9mWiX/k/RPvNwcK9aECyL5b3kXxZ8VxUXJRKT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34110},"exports":{".":"./src/index.ts"},"imports":{"#lib/*":"./src/lib/*.ts","#node/*":"./src/node/*.ts","#structure/*":"./src/structure/*.ts"},"_npmUser":{"name":"defaultkavy","email":"defaultkavy@gmail.com"},"directories":{},"_nodeVersion":"22.13.1","_hasShrinkwrap":false,"peerDependencies":{"@amateras/core":"0.0.2-beta.1","@amateras/utils":"0.0.2-beta.1","@amateras/signal":"0.0.2-beta.1"},"_npmOperationalInternal":{"tmp":"tmp/idb_0.0.2-beta.1_1784391473198_0.23551118743422417","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@amateras/idb","version":"0.1.0","_id":"@amateras/idb@0.1.0","maintainers":[{"name":"defaultkavy","email":"defaultkavy@gmail.com"}],"dist":{"shasum":"bf3de8d9890c40e417c316ed2125e21d360977a3","tarball":"https://registry.npmjs.org/@amateras/idb/-/idb-0.1.0.tgz","fileCount":13,"integrity":"sha512-A7D1cGSsLrfkEA1l0PonpRMbvGkxGErrPMqUlkNjiQI+xxgX3CGG4unp0p8gkdJFFTP9DLqHJuoYkIB4mtI62Q==","signatures":[{"sig":"MEUCIQCv9nUvqwg0xkOly4yYcHvC+ppQR/Xjm6Yev9bzObcL0gIgW86x75nwzT+0HCNQpSPpIForQf3Yv4wR3ZgoZZh9o2M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34084},"shasum":"bf3de8d9890c40e417c316ed2125e21d360977a3","exports":{".":"./src/index.ts"},"imports":{"#lib/*":"./src/lib/*.ts","#node/*":"./src/node/*.ts","#structure/*":"./src/structure/*.ts"},"_npmUser":{"name":"defaultkavy","email":"defaultkavy@gmail.com"},"_integrity":"sha512-A7D1cGSsLrfkEA1l0PonpRMbvGkxGErrPMqUlkNjiQI+xxgX3CGG4unp0p8gkdJFFTP9DLqHJuoYkIB4mtI62Q==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"peerDependencies":{"@amateras/core":"0.17.0","@amateras/utils":"0.1.0","@amateras/signal":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/idb_0.1.0_1787121992225_0.6170493240434021","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@amateras/idb","version":"0.1.1","_id":"@amateras/idb@0.1.1","maintainers":[{"name":"defaultkavy","email":"defaultkavy@gmail.com"}],"dist":{"shasum":"17678e41c768a39ad0563112170750c00ddf236c","tarball":"https://registry.npmjs.org/@amateras/idb/-/idb-0.1.1.tgz","fileCount":13,"integrity":"sha512-pXc4e3U3EW2qDGCVj8aQXIHPrxUAW1iqkulHbILYqANb1BiQPzNslNO7CjOgO+zTi9IPmr3hpJjp5ZTyhEdb2g==","signatures":[{"sig":"MEQCIBTAnz0zpI0nkeoLb536Wud8FgkW9WGhIP843BshsfUqAiBldFrHDOvx5bZF6oLJbQq9mhQ4h52DyMQFDgdRHeD8QA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34101},"exports":{".":"./src/index.ts"},"gitHead":"7853a8996536d86925da28f161d13a47afb777b3","imports":{"#lib/*":"./src/lib/*.ts","#node/*":"./src/node/*.ts","#structure/*":"./src/structure/*.ts"},"_npmUser":{"name":"defaultkavy","email":"defaultkavy@gmail.com"},"_npmVersion":"10.9.8","description":"```ts import 'amateras'; import 'amateras/idb';","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"peerDependencies":{"@amateras/core":"workspace:*","@amateras/utils":"workspace:*","@amateras/signal":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/idb_0.1.1_1788065283401_0.3832567364048256","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@amateras/idb","peerDependencies":{"@amateras/core":"0.18.2","@amateras/signal":"0.1.3","@amateras/utils":"0.1.2"},"imports":{"#structure/*":"./src/structure/*.ts","#lib/*":"./src/lib/*.ts","#node/*":"./src/node/*.ts"},"exports":{".":"./src/index.ts"},"version":"0.1.2","_id":"@amateras/idb@0.1.2","_integrity":"sha512-37QAOxn+JFXRbvS0MubeDsqXISd3PLmfs8mADC5Qk/MYkIZEn1Aabari7Gr/+owAg8HVb+YFn2JpzBXLGzCDLw==","_nodeVersion":"26.3.0","_npmVersion":"10.8.3","shasum":"8de7f2691736da8217f676b9005ee01c4d73ab89","dist":{"integrity":"sha512-37QAOxn+JFXRbvS0MubeDsqXISd3PLmfs8mADC5Qk/MYkIZEn1Aabari7Gr/+owAg8HVb+YFn2JpzBXLGzCDLw==","shasum":"8de7f2691736da8217f676b9005ee01c4d73ab89","tarball":"https://registry.npmjs.org/@amateras/idb/-/idb-0.1.2.tgz","fileCount":13,"unpackedSize":34084,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHYE18/+PMEVa/4DLieehF7ZSqYodHwdIFeR2DplE8imAiAeXz25Rd7s4MP/a2DJxup9avLlHjAMinBJqpl5aW227g=="}]},"_npmUser":{"name":"defaultkavy","email":"defaultkavy@gmail.com"},"directories":{},"maintainers":[{"name":"defaultkavy","email":"defaultkavy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/idb_0.1.2_1788065995681_0.34557877331194975"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-18T14:58:06.238Z","modified":"2026-08-30T04:59:56.024Z","0.0.1":"2026-07-18T14:58:06.501Z","0.0.2-beta.0":"2026-07-18T15:48:48.245Z","0.0.2-beta.1":"2026-07-18T16:17:53.336Z","0.1.0":"2026-08-19T06:46:32.376Z","0.1.1":"2026-08-30T04:48:03.542Z","0.1.2":"2026-08-30T04:59:55.810Z"},"maintainers":[{"name":"defaultkavy","email":"defaultkavy@gmail.com"}],"readme":"# amateras/idb\n\n## Usage\n```ts\nimport 'amateras';\nimport 'amateras/idb';\n\n// configure indexedDB\nconst idb = await $.idb('MyDB', 1)\n// add store\n.store('userStore', store => store\n    .keyPath('id')\n    .autoIncrement(true)\n    // define store object type\n    .schema<{\n        id: number,\n        name: string,\n        age: number\n    }>()\n    .index('by_age', { keyPath: 'age' })\n)\n// open idb\n.open();\n\n// open `readwrite` transaction with `userStore`\nconst result = await idb.store('userStore', true, async store => {\n    store.put({name: 'Amateras', age: 16});\n    return store.getAll();\n})\n\nconsole.log(result); // [ { name: 'Amateras', age: 16, id: 1 } ]\n```\n\n## Quick Examples\n\n### Get object from store\n```ts\nawait idb.store('userStore', store => store.get(1))\n```\n\n### Get all object from store\n```ts\nawait idb.store('userStore', store => store.getAll())\n```\n\n### Add object to store\nAny changes to database without `readwrite` mode is resisted, pass `true` value to `writable` argument to enable `readwrite` mode.\n``` ts\nawait idb.store('userStore', true, store => store.add({name: 'Tsukimi', age: 16}))\n```\n\n### Put object to store\nThe `.put()` method is different with `.add()` method, put object will replace the object of existed key.\n``` ts\nawait idb.store('userStore', true, store => store.put({name: 'Amateras', age: 17}))\n```\n\n### Use index\n```ts\nawait idb.store('userStore', true, store => store.index('by_age').getAll(16))\n```\n\n### Operating multiple stores in one transaction\n```ts\nawait idb.transaction(['userStore', 'itemStore'], true, async transaction => {\n    transaction.store('itemStore').put({id: 2, name: 'Item 2'})\n    return {\n        users: await transaction.store('userStore').getAll(),\n        items: await transaction.store('itemStore').getAll()\n    }\n})\n```\n\n### Open cursor for advance operations\n```ts\nawait idb.store('userStore', true, async store => {\n    const teenagers = []\n    await store.cursor(cursor => {\n        if (cursor.value.age < 18) teenagers.push(cursor.value);\n        cursor.continue();\n    })\n    return teenagers;\n})\n```\n\n## Upgrade Database\nUsing `.upgrade()` in `$IDBStoreBuilder` can set the store upgrade handle function to list. The store upgrade function is used for change object structure when the store is upgrading. \n\nFor example, in version 10:\n```ts\n{\n    id: number,\n    name: string\n}\n```\n\nAfter version 11, we want to change the object structure:\n```ts\n{\n    id: string,\n    name: string,\n    intro: string\n}\n```\n\nYou see the `id` is change to `string` type, and come with the new property `intro`. In the following example, we will upgrade this object structure, and this upgrade is only executed when client IDB version is lower than argument `version`.\n\n```ts\nstore.upgrade(11, (objects) => {\n    return objects.map({key, value} => {\n        // since we didn't defined the object type in every different version,\n        // the object is any type, please handle the upgrade carefully\n        return { key,\n            value: {\n                ...value,\n                id: value.id.toString(), // convert to string\n                intro: `Hi, my name is ${object.name}` // add new intro property\n            }\n        }\n    })\n})\n```\n\nThe upgrade function is set, this will be executed on `$IDBBuilder.open()`.\n\n> [!NOTE]\n> You should leave all the upgrade function in your codebase, unless you are sure the client database version is larger than this upgrade function.","readmeFilename":"README.md"}