{"_id":"i45","_rev":"28-ea2b816a48f35a47ee070901bf99a9aa","name":"i45","dist-tags":{"latest":"3.0.0"},"versions":{"1.0.0":{"name":"i45","version":"1.0.0","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CisGuru"},"license":"MIT","_id":"i45@1.0.0","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"","dist":{"shasum":"e408bcdc1f1dc58dffe7cc8253788788ff3da6a1","tarball":"https://registry.npmjs.org/i45/-/i45-1.0.0.tgz","fileCount":8,"integrity":"sha512-pizMOnIYZOzHnQ1J6IifYRlkGbUCX2MP8cToNfwO+1iXaylleCch16zF/OsSCRbmVNvvTRg0YTiHkIYZ83U8tQ==","signatures":[{"sig":"MEUCIBjwzlq6jOhg1B69nc7Am8vYzAXAXdBAEgMIXG8dgrDoAiEA/OGtRNMtfRkDd/Ke5psgRdk6f1Sbzlm2OQPTijr8/2A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3859},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","scripts":{"build":"tsup"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"21.2.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","typescript":"^5.6.2"},"_npmOperationalInternal":{"tmp":"tmp/i45_1.0.0_1727917414590_0.5093993493484226","host":"s3://npm-registry-packages"}},"0.0.1":{"name":"i45","version":"0.0.1","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CisGuru"},"license":"MIT","_id":"i45@0.0.1","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"","dist":{"shasum":"0c74a10e76a7c028eb4be2dde2141294c3a98f10","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.1.tgz","fileCount":8,"integrity":"sha512-KWK8ZQOCTb3FTE6LOEQm5OQHA2nXUQvWsafWcjOArddu2gheW6yMW4eMHAYtV1WLxVcunBjpRy1eCgf13PGzHg==","signatures":[{"sig":"MEQCID8WJPqvuAu9n96ZdyJuKes4yRieAQGt8Key3wjrpoyAAiAC0GqqeyUuv/Hhi3sAPhu9oPQWSxIIm8PeIsanzW+BJg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3079},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","scripts":{"build":"tsup"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"21.2.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","typescript":"^5.6.2"},"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.1_1727921564379_0.47857707933506966","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"i45","version":"0.0.2","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CisGuru"},"license":"MIT","_id":"i45@0.0.2","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"","dist":{"shasum":"a4578817ba1385656c10f22f5225444ca0d5770d","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.2.tgz","fileCount":3,"integrity":"sha512-lMy28XA4C6gvhmpmoW1QtcM6DU3D9vWhpy/TM9crN61c+lnt3TsuFDINYLNq6HButcwNdGnNRI61Z0fHzwWW+A==","signatures":[{"sig":"MEQCIBcy8/FLsS5vL7JKnRJFkG3CYzUk/hm5mhEqPFj3Ba9GAiBovDJHCOWTqKyUJLI/AybizOMYVloJ+v16yVo2BJioPQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":564},"main":"index.js","type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"21.2.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.2_1727923731690_0.41975177596060975","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"i45","version":"0.0.3","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CisGuru"},"license":"MIT","_id":"i45@0.0.3","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"","dist":{"shasum":"223b83d9151906d3475a0bb3bb4a20fff3e192dd","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.3.tgz","fileCount":3,"integrity":"sha512-SzgMLaBVurWswWa6uNWbQQWI2IHDmNYRyRXBvrFz4I7XgnHsk/3AyQeHjybFbWvsR8T5WT43hsd02Y5ls7WHQg==","signatures":[{"sig":"MEYCIQC5xNJGfjbFEQjoXWFjQQlGF7ietZKlIAIZHEzaad4+YgIhANfQ+f1bFc/rvYLsIrFLkiNB9NsowYvDisazbM6uuNoN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":551},"main":"index.js","type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"21.2.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.3_1727924369491_0.2786690637023428","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"i45","version":"0.0.4","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.4","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"9f235207031919f8be245787f5ae494e14e6857a","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.4.tgz","fileCount":3,"integrity":"sha512-CdP0McW6TwnwuNdX8QygPWEAzDLttXfot8vWvmGNU30wIhZA9HXfDPmc9ddEKU3QRYc/Vx/i8aoTQQ388izeBA==","signatures":[{"sig":"MEQCIE9SBPCMLu0AhKGXNZbiIjNyyoZ3k8WJYWJ/LNN2mn3mAiAEjmQJuQE5aGsUB86xAZOfMiVArZrvJBuC6fAINcPg9Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":865},"main":"./src/index.js","type":"module","gitHead":"8d4405518f2c917ba9fef5c6b6a5ff116f4c4cd1","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -r src dist","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.4_1730392141192_0.15532357176576395","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"i45","version":"0.0.5","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.5","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"900664ec1f148dc5e1a754013f4bb7b0c3fa7dfa","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.5.tgz","fileCount":3,"integrity":"sha512-qPD+dOHtONajtPM1UnPPZRc28mDx6AGo2yAWc+eggiwoSk5pQntNCqy2TNt48p4vCMT/H4WktQf1JrTRwBmCEA==","signatures":[{"sig":"MEYCIQDfDM/iD6fO0sGvkNoYa/M8pGwai4Q48B727Ni21u/9BwIhAJqzy6NkdwNl+N9OLkuE2fpWSo06+Qpx0hp39apga0x6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":883},"main":"./src/index.js","type":"module","gitHead":"dfc0f4d2df73f48b1c9bb91d3c1f4db10f540c19","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -a src/. dist/","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.5_1730393623231_0.42637901780715026","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"i45","version":"0.0.6","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.6","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"c84821f27e1c91fccc76d458ea563d7cfbbb0525","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.6.tgz","fileCount":9,"integrity":"sha512-VOgG14LHALIwO6VDSdylkt3VjELCSfD4OIOks5fa6lgnX121ix/hPtoZhJTIBEZ4Tj8PQFy/VVrRDJshXbGTsQ==","signatures":[{"sig":"MEUCIQDYRm4d9vW1YyybqR0ExWXSbh2Ttoq4CAi6LBgtTsD13wIgTBSTezRhPRYFbJJTKkIcUjFg4SFg1Pi79DV7Q8eWIcs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22219},"main":"./dist/dataservice.js","type":"module","gitHead":"0fd2bd1b7a0c9dfa54a64096181169f700fd0372","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -a src/. dist/","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.6_1730396670242_0.14183399016975828","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"i45","version":"0.0.7","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.7","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"eaaec916b97293e5c9769625c3870e3291235de2","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.7.tgz","fileCount":9,"integrity":"sha512-QdD9T/16vvyx5kj6knyC35xEvsS5mg/4U3m3uTghi/0ZcJosY9olHTMGM0l5jzSP+/nZmAxCHpHQeUXhasGcEg==","signatures":[{"sig":"MEYCIQDAuyjIWw5Pgy5UXnIcKUlTNDcXDu/i2oKpIY1FH432fAIhAKUYBeLK9wFwOHYCtZ3Ojc1sPNyC7IyrlWvzII6qQImu","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22313},"main":"./dist/dataService.js","type":"module","gitHead":"fd7816b74f70eba778cb5582c6018d5e4b7da9be","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -a src/. dist/","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.7_1730399861846_0.6439737010272599","host":"s3://npm-registry-packages"}},"0.0.8":{"name":"i45","version":"0.0.8","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.8","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"e5d7814b53236e05aaa5caa417e76de1c536edb6","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.8.tgz","fileCount":9,"integrity":"sha512-rkAXO5W6JeikCz9CUGajNGlbuxPyVW2n8Slxgz7oEWWSZJTF6/2sqvecDI2oqfKe2Y698GcBmytCy6r+PzhrdA==","signatures":[{"sig":"MEYCIQDxibqhTj6npBazHJZtCZAvAtkQgce2QUtfmTTkUq1a2wIhAL/tQmUqBTwLLQNXFdGhUK7Lpul2mo4+Xj00qI/ZagvN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24339},"main":"./dist/dataService.js","type":"module","gitHead":"ca08eda5c461b2582d2c0bb9b3e693c28cbe7666","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -a src/. dist/","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.8_1730410133448_0.37427619807680834","host":"s3://npm-registry-packages"}},"0.0.9":{"name":"i45","version":"0.0.9","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.9","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"625f060cbc097f5bf93cc7bd69e6d86642da4a69","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.9.tgz","fileCount":9,"integrity":"sha512-rFnwRoXs2B5rsKkiYPnx45oa+yejB5nnvmYSz0XjzuRhbLikDoqlkX7szow04oepgUl8uaWN2OdgU1+BQo9jrg==","signatures":[{"sig":"MEUCICwS0wzOt2rKL41/C1bx/NlwsoKChmReVi+ccm4cxoeRAiEA9ajJOhZtxCm52BRU8YjrfeG8SNnwgaaull+pnlyxOEk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24351},"main":"./dist/dataService.js","type":"module","gitHead":"6f582ccbcc38ca2b8f136779cb19766d53c7b78b","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -a src/. dist/","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.9_1730421118158_0.6392182915112574","host":"s3://npm-registry-packages"}},"0.0.0-alpha.10":{"name":"i45","version":"0.0.0-alpha.10","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.0-alpha.10","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"d969e3fc046026cd65413ade9002a021c92712cd","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.0-alpha.10.tgz","fileCount":10,"integrity":"sha512-cZHZo9X3Q9knuAvhsPN8upVMOaH0CcBa5fGW+lDncBw1DkzE9Z497m/Gt/bFbbFA4VyNH/3B/KxBjJ0EN2zPtw==","signatures":[{"sig":"MEYCIQDPvgIS9EzBKj3lA/tTyzcvbeWw2gmdfymE2ALWVGMTGAIhAOfogHeJBtaQ2YIsZ0SJcB2CD2drJ0nr5Y4ezAaAcNmS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26179},"main":"./dist/dataService.js","type":"module","gitHead":"2bd558602f9ee7ac0524b7159c5ddc8806644cf8","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -a src/. dist/","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.0-alpha.10_1730474182219_0.9050101702697886","host":"s3://npm-registry-packages"}},"0.0.0-alpha.11":{"name":"i45","version":"0.0.0-alpha.11","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.0-alpha.11","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"1e7f8b9a61e4f3c2f98e92cfb13b1b7d09c45be8","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.0-alpha.11.tgz","fileCount":10,"integrity":"sha512-mhQ8geypIyO6GsKUYa0gyuQmdOUwMMqm4z1AsDnVYJCSEFpNZVCVr/NsAo7jUw/C7oiVvtRFiA2dEJIKtGb9IA==","signatures":[{"sig":"MEUCIQCWwIUiBHi/CmCyKQJNwBqLwrtD842ZWa72ZrmJcepB1wIgZE68nnAuw3Q9AHJ4W8K/WGXXfEuy1GXhPkLqc7LsWMI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26195},"main":"./dist/dataService.js","type":"module","gitHead":"c9532a764f9ceca8ba23a5778ad34c0244a8a005","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -a src/. dist/","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.0-alpha.11_1730481132828_0.7973872491045153","host":"s3://npm-registry-packages"}},"0.0.0-alpha.13":{"name":"i45","version":"0.0.0-alpha.13","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.0-alpha.13","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"66c36b731d53cba0c37ad7ab7cb5b1590d0b6f1e","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.0-alpha.13.tgz","fileCount":10,"integrity":"sha512-EJmzUf/1yy+NAnuWSpG0CW2XAXAGKbSXnHbyQOwdoqUVuze86wAPnrgZTrFfW/WQAbj4EdPDQPRKOrZDi6RmnA==","signatures":[{"sig":"MEQCIEU0nckFaqAj9nZerh5vSM1spRsWLc3soV8ZyDtO5+xLAiBSVqNF2wbmUfSr1J7SR+ZJIjCPOiHMuDNxGGeuBH5TBQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26248},"main":"./dist/dataService.js","type":"module","gitHead":"9719c048adf18ca5c0f09c0c3805ca1e96921fdf","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -a src/. dist/","patch":"npm version prerelease --preid=alpha","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.0-alpha.13_1730482680334_0.5140525599666701","host":"s3://npm-registry-packages"}},"0.0.0-alpha.14":{"name":"i45","version":"0.0.0-alpha.14","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.0-alpha.14","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"22a48ee5cbd60bfedf9e6d8608a498e7340b58ff","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.0-alpha.14.tgz","fileCount":10,"integrity":"sha512-wgQ0sRY4KZYC5v9vV28pzd5sphn5SzVN18g6Zkk8eLIqTVqsjuiP8drxsr+tw4cujfY1sRNCBQGN3tldeHj+Qg==","signatures":[{"sig":"MEUCIQCsV2JGGfS8CeGclS0sxDm127O9WuTpyQI4Xt7GE89QZgIgE+Iqa7tW4DRHrVkGWl/+pV78jIeR+LUPqRaURmlp2Fk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26283},"main":"./dist/dataService.js","type":"module","gitHead":"0faa911073a34c40e80525da13f4cc5e591ffb2f","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -a src/. dist/","patch":"npm version prerelease --preid=alpha","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.8.3","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.0-alpha.14_1730486065926_0.12430506611483283","host":"s3://npm-registry-packages"}},"0.0.0-alpha.15":{"name":"i45","version":"0.0.0-alpha.15","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.0-alpha.15","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"05eb5669ee600c3d9ab465a2f6da997cf7d9661a","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.0-alpha.15.tgz","fileCount":10,"integrity":"sha512-9t+WXpI7PRap8ZF5ucGyPJyfmDLhYORm0Pksli2qZjQr/rJxc4dU5/XzldBXGyX2IoHKmfqQK/9CGTlTY//bfg==","signatures":[{"sig":"MEUCIHOQOkDlyfK5oIMDTtxR5u1R+tFdIdt2yy60cB+xwffXAiEAhyP7aFqSL4O9lXi75tv+8Z82e+snEBG/HH9znI8DAzE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28900},"main":"./dist/dataService.js","type":"module","gitHead":"95f1e2abfd572c06af43b147cfe52b3af88f2dc1","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -a src/. dist/","patch":"npm version prerelease --preid=alpha","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.9.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"23.1.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.0-alpha.15_1732224516686_0.42619176580144447","host":"s3://npm-registry-packages"}},"0.0.0-alpha.16":{"name":"i45","version":"0.0.0-alpha.16","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"cisguru"},"license":"MIT","_id":"i45@0.0.0-alpha.16","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"019f65309ea6d367234f0d55fb2fdf68d7c4f811","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.0-alpha.16.tgz","fileCount":10,"integrity":"sha512-/COWQzPaJP24riKRVCPYsh2j3dLgTSrxjsnzyzfe5gyRC1ddi1F3cg0NGVZGVrlcG/PqvpnxjF+kfLfy79Xnxw==","signatures":[{"sig":"MEUCIHN0Y36r7DxO1EG7OnUTwmSvLpXHFWf29Xd1Mq+8CHDqAiEA+YLjx1kObH4o0lyr3IJdv1wp7VWqxXb1sQrZQdZyqho=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30571},"main":"./dist/dataService.js","type":"module","gitHead":"453aa6c7835da36d9449ecd2279c657107b1976f","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cp -a src/. dist/","patch":"npm version prerelease --preid=alpha","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.9.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"23.3.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.0-alpha.16_1732653459108_0.39994688922375876","host":"s3://npm-registry-packages"}},"0.0.0-alpha.17":{"name":"i45","version":"0.0.0-alpha.17","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","_id":"i45@0.0.0-alpha.17","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"4215daeae2d5ffad75b1fd15b4ffbf634c076b08","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.0-alpha.17.tgz","fileCount":10,"integrity":"sha512-uZfVIDCTEbzpZQ3zdUU0Oe4f82JW7r657tRPGVIG4taHHQbxugTw0NdmBMON9Le/d7O3EnJUepebv+p8GkOV5Q==","signatures":[{"sig":"MEUCIF7Z7Q1hpQl1lZkjD7MGMW55cz3z+SWpI7v6JX+6J4m6AiEAvRmxKJc5csdiB/bQP1IcK6yb9BIt8gvezHST0gyxhEQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30713},"main":"./dist/dataService.js","type":"module","gitHead":"f93e931cee42029c6a9babde831d5594d65c54af","scripts":{"build":"cp -a src/. dist/","patch":"npm version prerelease --preid=alpha","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.9.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"23.3.0","_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.0-alpha.17_1733246412231_0.10778406102891225","host":"s3://npm-registry-packages"}},"0.0.0-alpha.18":{"name":"i45","version":"0.0.0-alpha.18","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","_id":"i45@0.0.0-alpha.18","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"d86b93d8c700b0172dc2a701e6ebebbdc584e35b","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.0-alpha.18.tgz","fileCount":12,"integrity":"sha512-NfYJ2NcHoXgzL0txxfX+cYoCpxmz7FI5vObKC5GfkJBdukLy6MBNEAbOyJhivOARxoHlPL1C4cEtBFdccTzk6g==","signatures":[{"sig":"MEUCIAKhcedKk4YCfbayZ83Tu50MtEW2+FP52LyWqxKKkE6XAiEA8UCJDijAlV96QQ89tTqgxy7kzyS9uxk3BkPfw31yZ0I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38970},"main":"./dist/dataService.js","type":"module","gitHead":"a728eca6aec32b35664bfe01490f7f31f731bfa5","scripts":{"build":"cp -a src/. dist/","patch":"npm version prerelease --preid=alpha","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" "},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"10.9.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"23.3.0","_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.0-alpha.18_1733677961146_0.1076168629102956","host":"s3://npm-registry-packages"}},"0.0.0-alpha.19":{"name":"i45","version":"0.0.0-alpha.19","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","_id":"i45@0.0.0-alpha.19","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"103a4b833e61cc2b78b6eb79e1899b4bd861d492","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.0-alpha.19.tgz","fileCount":11,"integrity":"sha512-6R4xrKn6+NVJCReXjqtwakNRXcQWmHwcB0cT0aXhxDRtMoFOgW46/c2xByyXIbL3x8RJt7IITL0w+E5qS9BZCQ==","signatures":[{"sig":"MEUCIBSeqfdZMPo5Te8snIwJsv0DJydx0IteBfOYAyaqD6CRAiEApG9Qo+T/zcTZAK6ws1sDlfFu+yHimU7fctP3pPaB52I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38587},"main":"./dist/dataService.js","type":"module","gitHead":"b44378d49e3f25468d29d3ec29c43be06e6558df","scripts":{"build":"npm run build-linux && npm run build-windows","patch":"npm version prerelease --preid=alpha","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" ","build-linux":"cp -r src/* dist/","build-windows":"xcopy src\\* dist\\ /s /e"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"11.3.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"24.0.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.0-alpha.19_1746649737696_0.19648624342368337","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-alpha.20":{"name":"i45","version":"0.0.0-alpha.20","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","_id":"i45@0.0.0-alpha.20","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"4a51f9851ea5bd76ec3dccc1354cf153e24aa448","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.0-alpha.20.tgz","fileCount":11,"integrity":"sha512-RxauOFNsID6sGtQRJNuM0YBrjofcj+MkbMTkXGdvaP0G0+dYooeE1aTjwHFF9sbOiub/kA/MTsLWvi1ZEyWlcw==","signatures":[{"sig":"MEUCIQD2gCGZmSbLp6IzsT/owGwjRJse44i3LO+klJb5rev3FgIgAaq3fZlJ+yLoxM+uVRJZh53jPO8rbONV8/49Hp+AEoQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38587},"main":"./dist/dataService.js","type":"module","gitHead":"3a6529fc22676d8b8899c09461226372cbf6065c","scripts":{"build":"npm run build-linux && npm run build-windows","patch":"npm version prerelease --preid=alpha","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" ","build-linux":"cp -r src/* dist/","build-windows":"xcopy src\\* dist\\ /s /e"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"11.3.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"24.0.0","_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.0-alpha.20_1746650204469_0.45213299659924533","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-alpha.21":{"name":"i45","version":"0.0.0-alpha.21","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","_id":"i45@0.0.0-alpha.21","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"2b9b04ff44fe68c64dbd879d9a7a1aa728165bf0","tarball":"https://registry.npmjs.org/i45/-/i45-0.0.0-alpha.21.tgz","fileCount":36,"integrity":"sha512-lqaqd4wtBX50a+qeM8coNIuEtgi+ubF4hf7CpI92H2u5OUyrawWRhYCyrRQb45QCpd8iBeSTXD2eombS/gSxcQ==","signatures":[{"sig":"MEYCIQDf5Pcuna6BR3SLY9X94UJzA9GMFEvl89rBRlhpVEFKjAIhAM/b7dzvLaUUqag9tCNkDL6bU3Bp4eO3zAqMkV+KAsek","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1323099},"main":"./dist/dataService.js","type":"module","gitHead":"5c09dc8c67e47edaa356e107bbb10708309c1089","scripts":{"dev":"vite","link":"npm run build-all && npm link","lint":"eslint .","build":"vite build","patch":"npm version prerelease --preid=alpha","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" ","preview":"vite preview","build-all":"npm run build-linux && npm run build-windows","build-linux":"cp -r src/data dist/ && cp -r src/models dist/ && cp -r src/services dist/ && cp src/dataService.js dist/dataService.js","build-windows":"xcopy src\\* dist\\ /s /e"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"11.3.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"24.1.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.4","react":"^19.1.0","eslint":"^9.30.1","globals":"^16.3.0","react-dom":"^19.1.0","@eslint/js":"^9.30.1","prop-types":"^15.8.1","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@vitejs/plugin-react":"^4.6.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/i45_0.0.0-alpha.21_1755828462394_0.23554316285208787","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"i45","version":"1.1.0","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","_id":"i45@1.1.0","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"8536c06ec511f83032ed53a843c4328f1fecb327","tarball":"https://registry.npmjs.org/i45/-/i45-1.1.0.tgz","fileCount":36,"integrity":"sha512-wH1BigrrpI3ca7Ts05d0w1kw2yU6DTUpffjzUeWGNDmoW0wL0W4hEAhtxhjdMe7B2f4MBTNMUYvM+B47WXB0RQ==","signatures":[{"sig":"MEUCIQD/UFIYDfA1WnurOl7yfeaPUYx+zf2ztgwUicM6RVi2mAIgMqNfkPpmoO/7MdMLhqUK7llUFE5+5oIjzNpHqPHYHrY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1323198},"main":"./dist/dataService.js","type":"module","gitHead":"31168b582a0608ec7d58f89586482567990c7d84","scripts":{"dev":"vite","link":"npm run build-all && npm link","lint":"eslint .","build":"vite build","major":"npm version major","minor":"npm version minor","patch":"npm version patch","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" ","preview":"vite preview","build-all":"npm run build-linux && npm run build-windows","alpha-patch":"npm version prerelease --preid=alpha","build-linux":"cp -r src/data dist/ && cp -r src/models dist/ && cp -r src/services dist/ && cp src/dataService.js dist/dataService.js","build-windows":"xcopy src\\* dist\\ /s /e"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"11.3.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"24.1.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.4","react":"^19.1.0","eslint":"^9.30.1","globals":"^16.3.0","react-dom":"^19.1.0","@eslint/js":"^9.30.1","prop-types":"^15.8.1","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@vitejs/plugin-react":"^4.6.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/i45_1.1.0_1755828844283_0.7849054088465472","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"i45","version":"1.2.0","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","_id":"i45@1.2.0","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"39d306a5e153d13326452b50ae61db0365f8171d","tarball":"https://registry.npmjs.org/i45/-/i45-1.2.0.tgz","fileCount":40,"integrity":"sha512-y3DpzfyofFOLGp9NawaZ6n3X5Qhup+6Fp0PwrjsXai4PPsI4rIvZvDCfR+3PT9tvQgdAp3+NtqqMcjLvF+rLKA==","signatures":[{"sig":"MEYCIQCfZfjSKOda3voWYxjsrgSyE+D5kfHAcvzNxqKnPIGN9AIhAMUYo3Muv88IQK7PPwtxISPIpcNNCmLGJiatZdNEhazI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1356428},"main":"./dist/dataService.js","type":"module","gitHead":"a4b59620a3b8ced7276a9ffb9dc0245fb16d701e","scripts":{"dev":"vite","link":"npm run build-all && npm link","lint":"eslint .","build":"vite build","major":"npm version major","minor":"npm version minor","patch":"npm version patch","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" ","preview":"vite preview","build-all":"npm run build-linux && npm run build-windows","alpha-patch":"npm version prerelease --preid=alpha","build-linux":"cp -r src/data dist/ && cp -r src/models dist/ && cp -r src/services dist/ && cp src/dataService.js dist/dataService.js","build-windows":"xcopy src\\* dist\\ /s /e"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"11.3.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"24.1.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.4","react":"^19.1.0","eslint":"^9.30.1","globals":"^16.3.0","react-dom":"^19.1.0","@eslint/js":"^9.30.1","prop-types":"^15.8.1","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@vitejs/plugin-react":"^4.6.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/i45_1.2.0_1755830869147_0.9556130407710004","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"i45","version":"2.0.0","keywords":["LocalStorage","SessionStorage","Cookie"],"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","_id":"i45@2.0.0","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"fd98ace5670498f685fe4ff8696c960ed31533b5","tarball":"https://registry.npmjs.org/i45/-/i45-2.0.0.tgz","fileCount":36,"integrity":"sha512-+YN6OLpifPycpVtMr8CLgjZD45kps7+wYt3XaKxJ4ytdQpB0YPuQ/ZuZUp0JOuYACtQeOhjH/a43w/TVHtu6TQ==","signatures":[{"sig":"MEYCIQC6zvGlU+vxJbXa4ev/E38Z889tcAIUuDp+BezbWLs0dwIhANNy5gN+qE5RLjuE6/E0gda15ywPM9WUlHwT1SA8jmVe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1317206},"main":"./dist/dataService.js","type":"module","gitHead":"1d782aaccccb2d8cabcd5570678c0f2e4db96f4b","scripts":{"dev":"vite","link":"npm run build-all && npm link","lint":"eslint .","build":"vite build","major":"npm version major","minor":"npm version minor","patch":"npm version patch","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" ","preview":"vite preview","build-all":"npm run build-linux && npm run build-windows","alpha-patch":"npm version prerelease --preid=alpha","build-linux":"cp -r src/data dist/ && cp -r src/models dist/ && cp -r src/services dist/ && cp src/dataService.js dist/dataService.js","build-windows":"xcopy src\\* dist\\ /s /e"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"11.3.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"i45-jslogger":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.4","react":"^19.1.0","eslint":"^9.30.1","globals":"^16.3.0","react-dom":"^19.1.0","@eslint/js":"^9.30.1","prop-types":"^15.8.1","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@vitejs/plugin-react":"^4.6.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/i45_2.0.0_1756319750849_0.6505114143119872","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"i45","version":"2.1.0","keywords":["LocalStorage","SessionStorage"],"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","_id":"i45@2.1.0","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"1f0712656182e4a7efe3583587ae42b1edb4007c","tarball":"https://registry.npmjs.org/i45/-/i45-2.1.0.tgz","fileCount":13,"integrity":"sha512-/q8bekoLlvKxJTDKm+C6XGisiqHji4K1hvOTw+Bhx3yNhOUfK6OMQKGQX8f3JZgva1cBSX/kLaBK+8DnAfg+iw==","signatures":[{"sig":"MEUCIQDH5bjT26O2Yx1Mb1dWq5TH4GaQY5JMn0jy1btWYV22YAIgNhSZ8QmFtb1khmZ9eM+ZjHnSwMyLpgFGMOzrAS937Us=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54792},"main":"./dist/dataService.js","type":"module","gitHead":"5f089e16ab7e37d0167511ec4c312c1ebcb4e63d","scripts":{"dev":"vite","link":"npm run build-all && npm link","lint":"eslint .","build":"vite build","major":"npm version major","minor":"npm version minor","patch":"npm version patch","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" ","preview":"vite preview","build-all":"npm run build-linux && npm run build-windows","alpha-patch":"npm version prerelease --preid=alpha","build-linux":"cp -r src/data dist/ && cp -r src/models dist/ && cp -r src/services dist/ && cp src/dataService.js dist/dataService.js","build-windows":"xcopy src\\* dist\\ /s /e"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"11.3.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"i45-jslogger":"^1.0.0","i45-sample-data":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.4","react":"^19.1.0","eslint":"^9.30.1","globals":"^16.3.0","react-dom":"^19.1.0","@eslint/js":"^9.30.1","prop-types":"^15.8.1","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@vitejs/plugin-react":"^4.6.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/i45_2.1.0_1756514954088_0.7208282082294712","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"i45","version":"2.1.1","keywords":["LocalStorage","SessionStorage"],"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","_id":"i45@2.1.1","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"homepage":"https://github.com/xnodeoncode/i45","bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"dist":{"shasum":"e72d0378a4d4d4f3591e209677be83de6ee2e17a","tarball":"https://registry.npmjs.org/i45/-/i45-2.1.1.tgz","fileCount":13,"integrity":"sha512-JoY7ew4Q4Rn0sbPb/QLj8K8vWd9KEJKs7/EUNf5TTNzV7CbZxTliHMNUNl9+CceGVys9JHqxnN0Kc1VEOcQ8ag==","signatures":[{"sig":"MEUCIQCPJeef39JQ3XLVcLSinmNoc9aHHh1UuExUi31kopwWgAIgI9Ob2jM72Th+Gl19fMsyc9GU4HnERJQInUhe40+ZDvg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55774},"main":"./dist/dataService.js","type":"module","gitHead":"d1c0eff6132a458657423a23a1f94e915abb5d63","scripts":{"dev":"vite","link":"npm run build-all && npm link","lint":"eslint .","build":"vite build","major":"npm version major","minor":"npm version minor","patch":"npm version patch","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" ","preview":"vite preview","build-all":"npm run build-linux && npm run build-windows","alpha-patch":"npm version prerelease --preid=alpha","build-linux":"cp -r src/models dist/ && cp -r src/services dist/ && cp src/dataService.js dist/dataService.js","build-windows":"xcopy src\\* dist\\ /s /e"},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"repository":{"url":"git+https://github.com/xnodeoncode/i45.git","type":"git"},"_npmVersion":"11.3.0","description":"A wrapper for brower storage.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"i45-jslogger":"^1.0.0","i45-sample-data":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.4","react":"^19.1.0","eslint":"^9.30.1","globals":"^16.3.0","react-dom":"^19.1.0","@eslint/js":"^9.30.1","prop-types":"^15.8.1","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@vitejs/plugin-react":"^4.6.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/i45_2.1.1_1756515509804_0.6115735349201339","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"i45","version":"3.0.0","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","type":"module","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"alpha-patch":"npm version prerelease --preid=alpha","patch":"npm version patch","minor":"npm version minor","major":"npm version major","test:verbose":"jest --verbose","test:ci":"jest --ci --coverage --maxWorkers=2","checkin":"git add . && git commit -a -m \"See CHANGES.md for a list of Revisions.\" ","link":"npm run build && npm link","build":"npm run clean && npm run build:types && npm run build:bundle","build:types":"tsc --emitDeclarationOnly","build:bundle":"rollup -c","clean":"rm -rf dist","dev":"rollup -c -w","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src/**/*.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run test && npm run build"},"keywords":["localStorage","sessionStorage","browser-storage","web-storage","storage-wrapper","data-persistence","client-side-storage","storage-manager","browser-cache","session-management","local-storage","storage-api","javascript-storage","typescript-storage"],"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","description":"A powerful, type-safe wrapper for browser storage (localStorage, sessionStorage) with built-in logging, validation, and error handling. Simplifies storing and retrieving collections in web applications.","sideEffects":false,"engines":{"node":">=14.0.0"},"homepage":"https://github.com/xnodeoncode/i45","repository":{"type":"git","url":"git+https://github.com/xnodeoncode/i45.git"},"bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"devDependencies":{"@eslint/js":"^9.30.1","@jest/globals":"^30.2.0","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-node-resolve":"^16.0.3","@rollup/plugin-typescript":"^12.3.0","@types/jest":"^30.0.0","eslint":"^9.30.1","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20","globals":"^16.3.0","jest":"^30.2.0","jest-environment-jsdom":"^30.2.0","prop-types":"^15.8.1","rollup":"^4.53.5","ts-jest":"^29.4.6","ts-node":"^10.9.2","tslib":"^2.8.1","typescript":"^5.9.3"},"dependencies":{"i45-jslogger":"^2.0.1","i45-sample-data":"^3.1.0"},"_id":"i45@3.0.0","gitHead":"9d9ec94dbad39f96b5a8ad147cfb61641b098304","_nodeVersion":"24.1.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-6E4oHmka1vaBg3wDWl5ECloGM6ngjMOvnQ2uf3tnvZxFI32NenKDWhH5qbJTwa/1v168o/fzkt4ovNntaKixeA==","shasum":"501b9a56787c99c641e2067ded7bf03434c7d653","tarball":"https://registry.npmjs.org/i45/-/i45-3.0.0.tgz","fileCount":54,"unpackedSize":231722,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBTZiK35/MUnsjxx2SelTrvZoN7O5zZSf5qIj+rhQU0/AiEAgg2sAcl5fRCKgatOgh3kKuYTn092fclAHa2iJjVcA0U="}]},"_npmUser":{"name":"cisguru","email":"xnodeoncode@gmail.com"},"directories":{},"maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/i45_3.0.0_1766244615265_0.876753955051595"},"_hasShrinkwrap":false}},"time":{"created":"2024-10-03T01:03:34.589Z","modified":"2025-12-20T15:30:15.606Z","1.0.0":"2024-10-03T01:03:34.800Z","0.0.1":"2024-10-03T02:12:44.537Z","0.0.2":"2024-10-03T02:48:51.851Z","0.0.3":"2024-10-03T02:59:29.669Z","0.0.4":"2024-10-31T16:29:01.396Z","0.0.5":"2024-10-31T16:53:43.424Z","0.0.6":"2024-10-31T17:44:30.391Z","0.0.7":"2024-10-31T18:37:42.108Z","0.0.8":"2024-10-31T21:28:53.612Z","0.0.9":"2024-11-01T00:31:58.368Z","0.0.0-alpha.10":"2024-11-01T15:16:22.512Z","0.0.0-alpha.11":"2024-11-01T17:12:13.062Z","0.0.0-alpha.13":"2024-11-01T17:38:00.615Z","0.0.0-alpha.14":"2024-11-01T18:34:26.148Z","0.0.0-alpha.15":"2024-11-21T21:28:36.875Z","0.0.0-alpha.16":"2024-11-26T20:37:39.277Z","0.0.0-alpha.17":"2024-12-03T17:20:12.433Z","0.0.0-alpha.18":"2024-12-08T17:12:41.320Z","0.0.0-alpha.19":"2025-05-07T20:28:57.906Z","0.0.0-alpha.20":"2025-05-07T20:36:44.643Z","0.0.0-alpha.21":"2025-08-22T02:07:42.681Z","1.1.0":"2025-08-22T02:14:04.512Z","1.2.0":"2025-08-22T02:47:49.418Z","2.0.0":"2025-08-27T18:35:51.089Z","2.1.0":"2025-08-30T00:49:14.285Z","2.1.1":"2025-08-30T00:58:30.008Z","3.0.0":"2025-12-20T15:30:15.410Z"},"bugs":{"url":"https://github.com/xnodeoncode/i45/issues"},"author":{"name":"CIS Guru","email":"cisguru@outlook.com"},"license":"MIT","homepage":"https://github.com/xnodeoncode/i45","keywords":["localStorage","sessionStorage","browser-storage","web-storage","storage-wrapper","data-persistence","client-side-storage","storage-manager","browser-cache","session-management","local-storage","storage-api","javascript-storage","typescript-storage"],"repository":{"type":"git","url":"git+https://github.com/xnodeoncode/i45.git"},"description":"A powerful, type-safe wrapper for browser storage (localStorage, sessionStorage) with built-in logging, validation, and error handling. Simplifies storing and retrieving collections in web applications.","maintainers":[{"name":"cisguru","email":"xnodeoncode@gmail.com"}],"readme":"# i45\n\n**Type-safe browser storage wrapper for localStorage and sessionStorage**\n\n[![npm version](https://img.shields.io/npm/v/i45)](https://www.npmjs.com/package/i45)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n[NodeJS package](https://www.npmjs.com/package/i45) | [GitHub Repository](https://github.com/xnodeoncode/i45)\n\nA powerful, type-safe wrapper for browser storage (localStorage and sessionStorage) with built-in logging, validation, and error handling. Built with TypeScript for maximum type safety and developer experience.\n\n**Version 3.0.0-alpha.1** - Complete TypeScript rewrite with architectural refactoring (December 2025)\n\n## Features\n\n- ✨ **Full TypeScript support** with generic types: `DataContext<T>`\n- 🔒 **Type-safe operations** - catch errors at compile time\n- 🏗️ **Modern architecture** - modular design with service orchestration\n- 📦 **Simple API** - config object pattern or legacy constructor\n- 🎯 **Zero code duplication** - 300+ lines eliminated through refactoring\n- ✅ **Comprehensive validation** - centralized with `ValidationUtils`\n- 🚨 **6 custom error classes** - specific, actionable error handling\n- 🪵 **Built-in logging** via [i45-jslogger](https://www.npmjs.com/package/i45-jslogger)\n- 🧪 **Well tested** - 172 tests with 92% coverage\n- 🎯 **Zero dependencies** (except i45-jslogger and i45-sample-data)\n- 📝 **Sample data included** via [i45-sample-data](https://www.npmjs.com/package/i45-sample-data)\n- 🌳 **Tree-shakeable** ESM build\n- 📖 **Comprehensive type definitions** (.d.ts)\n\n**📚 Documentation:** [Migration Guide](./docs/MIGRATION.md) | [API Reference](./docs/API.md) | [TypeScript Guide](./docs/TYPESCRIPT.md) | [Examples](./docs/EXAMPLES.md)\n\n## Installation\n\n```bash\nnpm install i45\n```\n\n## Quick Start\n\n### TypeScript (Recommended)\n\n```typescript\nimport { DataContext, StorageLocations, Logger } from \"i45\";\n\n// Define your data type\ninterface User {\n  id: number;\n  name: string;\n  email: string;\n}\n\n// Create a type-safe context with config object (modern approach)\nconst context = new DataContext<User>({\n  storageKey: \"Users\",\n  storageLocation: StorageLocations.LocalStorage,\n  loggingEnabled: true,\n  logger: new Logger(),\n});\n\n// Or use legacy constructor (still supported)\nconst legacyContext = new DataContext<User>(\n  \"Users\",\n  StorageLocations.LocalStorage\n);\n\n// Store data (fully typed!)\nawait context.store([\n  { id: 1, name: \"Alice\", email: \"alice@example.com\" },\n  { id: 2, name: \"Bob\", email: \"bob@example.com\" },\n]);\n\n// Retrieve data (returns User[])\nconst users = await context.retrieve();\nconsole.log(users);\n```\n\n📖 **More examples:** [EXAMPLES.md](./docs/EXAMPLES.md) | [TypeScript Guide](./docs/TYPESCRIPT.md)\n\n### JavaScript\n\n```javascript\nimport { DataContext, SampleData } from \"i45\";\n\n// Create an instance of the datacontext\n// The default storage location is localStorage\nconst context = new DataContext();\n\n// Store data using sample data\nawait context.store(SampleData.Lists.Astronomy);\n\n// Retrieve data\nconst data = await context.retrieve();\nconsole.log(\"Astronomy terms:\", data);\n```\n\n## Architecture\n\ni45 v3.0.0 features a completely refactored, modular architecture (December 2025).\n\n📖 **See also:** [Migration Guide - Architecture](./docs/MIGRATION.md#new-architecture) | [API Reference](./docs/API.md)\n\n```\n/src\n  /core                      # Core application logic\n    DataContext.ts           # Main storage context\n    StorageManager.ts        # Service orchestration\n  /services\n    /base                    # Abstract base classes\n      IStorageService.ts     # Service interface\n      BaseStorageService.ts  # Shared service logic\n    LocalStorageService.ts\n    SessionStorageService.ts\n  /errors                    # Custom error classes\n    StorageKeyError.ts\n    StorageLocationError.ts\n    DataRetrievalError.ts\n    StorageQuotaError.ts\n    PersistenceServiceNotEnabled.ts\n    DataServiceUnavailable.ts\n  /models                    # Data models\n    DataContextConfig.ts\n    storageItem.ts\n    storageLocations.ts\n  /utils                     # Shared utilities\n    ValidationUtils.ts       # Centralized validation\n    ErrorHandler.ts          # Error management\n```\n\n### Architecture Benefits\n\n- **Single Responsibility**: Each module has one clear purpose\n- **Zero Duplication**: 300+ lines of duplicate code eliminated\n- **Easy Testing**: Isolated modules with 92% test coverage\n- **Type Safe**: Strong typing throughout\n- **Extensible**: Add new storage services by implementing interface\n\n## Usage\n\n- [TypeScript Usage](#typescript-usage)\n- [Default Storage Settings](#default-storage-settings)\n- [Custom Storage Settings](#custom-storage-settings)\n- [Retrieving Data](#retrieving-data)\n- [Retrieving Data from Custom Data Stores](#retrieving-data-from-custom-data-stores)\n- [Removing Items and Clearing the Data Store](#removing-items-and-clearing-the-data-store)\n- [Storage Locations](#storage-locations)\n- [Using Sample Data](#using-sample-data)\n- [Logging](#logging)\n\n### TypeScript Usage\n\ni45 v3.0 is built with TypeScript and provides full type safety.\n\n📖 **See [TYPESCRIPT.md](./docs/TYPESCRIPT.md) for comprehensive TypeScript usage guide**\n\n```typescript\nimport { DataContext, StorageLocations, type StorageItem } from \"i45\";\n\n// Generic type for your data\ninterface Product {\n  id: string;\n  name: string;\n  price: number;\n}\n\n// Type-safe context\nconst context = new DataContext<Product>(\n  \"products\",\n  StorageLocations.SessionStorage\n);\n\n// Store - TypeScript ensures correct types\nawait context.store([\n  { id: \"1\", name: \"Widget\", price: 9.99 },\n  { id: \"2\", name: \"Gadget\", price: 19.99 },\n]);\n\n// Retrieve - returns Product[]\nconst products = await context.retrieve();\nproducts.forEach((p) => console.log(`${p.name}: $${p.price}`));\n```\n\n### Default Storage Settings\n\n```javascript\nimport { DataContext, SampleData } from \"i45\";\n\n// Create an instance - uses localStorage by default with key \"i45\"\nconst context = new DataContext();\n\n// Store data\nawait context.store(SampleData.Lists.Astronomy);\n\n// Retrieve data\nconst data = await context.retrieve();\nconsole.log(data);\n```\n\n### Custom Storage Settings\n\n#### Modern Config Object (Recommended)\n\n```typescript\nimport { DataContext, StorageLocations, Logger } from \"i45\";\n\n// Create context with configuration object\nconst context = new DataContext<BookType>({\n  storageKey: \"Books\",\n  storageLocation: StorageLocations.SessionStorage,\n  loggingEnabled: true,\n  logger: new Logger(),\n});\n\n// Store books collection\nawait context.store(SampleData.JsonData.Books);\n\n// Retrieve data\nconst books = await context.retrieve();\nconsole.log(books);\n```\n\n#### Legacy Constructor (Still Supported)\n\n```javascript\nimport { DataContext, StorageLocations, SampleData } from \"i45\";\n\n// Create context with positional parameters\nconst context = new DataContext(\"Books\", StorageLocations.SessionStorage);\n\n// Store books collection\nawait context.store(SampleData.JsonData.Books);\n\n// Retrieve data\nconst books = await context.retrieve();\nconsole.log(books);\n```\n\n### Retrieving Data\n\n```javascript\nimport { DataContext, SampleData } from \"i45\";\n\n// Create context\nconst context = new DataContext();\n\n// Store data\nawait context.store(SampleData.JsonData.States);\n\n// Retrieve and use\nconst states = await context.retrieve();\nconsole.log(\"State data:\", states);\n```\n\n### Explicit Method Signatures\n\nv3.0.0 provides clear, explicit methods (no confusing overloads):\n\n```typescript\nimport { DataContext, StorageLocations } from \"i45\";\n\nconst context = new DataContext<MyType>();\n\n// Store with different scopes\nawait context.store(items); // Default key/location\nawait context.storeAs(\"customKey\", items); // Custom key\nawait context.storeAt(\"key\", StorageLocations.SessionStorage, items); // Full control\n\n// Retrieve with different scopes\nconst data1 = await context.retrieve(); // Default\nconst data2 = await context.retrieveFrom(\"customKey\"); // Custom key\nconst data3 = await context.retrieveAt(\"key\", StorageLocations.SessionStorage); // Full control\n\n// Remove with different scopes\nawait context.remove(); // Default\nawait context.removeFrom(\"customKey\"); // Custom key\nawait context.removeAt(\"key\", StorageLocations.SessionStorage); // Full control\n```\n\n### Retrieving Data from Custom Data Stores\n\n```javascript\nimport { DataContext, StorageLocations, SampleData } from \"i45\";\n\n// Create context with custom settings\nconst context = new DataContext(\"Questions\", StorageLocations.SessionStorage);\n\n// Store questions\nawait context.store(SampleData.JsonData.TriviaQuestions);\n\n// Retrieve by key\nconst questions = await context.retrieve(\"Questions\");\nconsole.log(questions);\n\n// Retrieve with specific location\nconst data = await context.retrieve(\"MyItems\", StorageLocations.LocalStorage);\n```\n\n### Removing Items and Clearing the Data Store\n\n```javascript\n// Delete a specific data store by key\nawait context.remove(\"Questions\");\n\n// Clear all data from current storage location\nawait context.clear();\n```\n\nTo clear all entries in all storage locations, call the clear() method.\n\n**Warning:** Calling the clear() method will clear all entries in all storage locations.\n\n```javascript\nimport { DataContext } from \"i45\";\n\nvar dataContext = new DataContext();\n\n// create an array of countries using sample data.\nvar countries = SampleData.KeyValueLists.Countries;\n\n// save the collection\ndataContext.store(\"Countries\", countries);\n\n// removes the item from storage.\ndataContext.remove(\"Countries\");\n\n// removes all items from all storage locations.\n// *** WARNING *** calling clear() will clears all entries.\ndatacontext.clear();\n```\n\n### Storage Locations\n\nStorageLocations is an enum of available storage options:\n\n```typescript\nimport { StorageLocations } from \"i45\";\n\n// Available options\nStorageLocations.LocalStorage; // Uses window.localStorage (default)\nStorageLocations.SessionStorage; // Uses window.sessionStorage\n```\n\n#### Using StorageLocations\n\n```javascript\nimport { DataContext, StorageLocations } from \"i45\";\n\n// Specify storage location in constructor\nconst context = new DataContext(\"MyItems\", StorageLocations.SessionStorage);\n\n// Or use properties\ncontext.storageLocation = StorageLocations.LocalStorage;\n```\n\n### Using Sample Data\n\nThe [i45-sample-data](https://www.npmjs.com/package/i45-sample-data) package provides sample datasets for development and testing:\n\n```javascript\nimport { SampleData } from \"i45\";\n\n// Access various sample datasets\nconst books = SampleData.JsonData.Books;\nconst states = SampleData.JsonData.States;\nconst astronomy = SampleData.Lists.Astronomy;\nconst countries = SampleData.KeyValueLists.Countries;\n\nconsole.log(books);\n```\n\n### Logging\n\ni45 integrates [i45-jslogger](https://www.npmjs.com/package/i45-jslogger) for comprehensive logging support.\n\n📖 **See also:** [EXAMPLES.md - Custom Logger](./docs/EXAMPLES.md#custom-logger)\n\n#### Built-In Logging\n\n```javascript\nimport { DataContext } from \"i45\";\n\nconst context = new DataContext();\n\n// Enable logging\ncontext.loggingEnabled = true;\n\n// Operations will now be logged\nawait context.store([{ id: 1, name: \"Test\" }]);\n```\n\nWhen enabled, log messages are written to the console and stored in localStorage.\n\n#### Using a Custom Logger\n\nAdd custom logging clients to receive DataContext events:\n\n```javascript\nimport { DataContext, Logger } from \"i45\";\n\n// Create or use your existing logger\nconst customLogger = new Logger({\n  logToConsole: true,\n  logToStorage: false,\n});\n\n// Add to context\nconst context = new DataContext();\ncontext.addClient(customLogger);\n\n// Multiple loggers supported\ncontext.addClient(fileSystemLogger);\ncontext.addClient(apiLogger);\n```\n\n## API Reference\n\n📖 **Complete API documentation:** [API.md](./docs/API.md)\n\n### DataContext<T>\n\nMain class for managing browser storage operations.\n\n```typescript\nclass DataContext<T = any> {\n  // Constructor - Config object (recommended)\n  constructor(config?: DataContextConfig);\n\n  // Constructor - Legacy (still supported)\n  constructor(storageKey?: string, storageLocation?: StorageLocation);\n\n  // Properties\n  storageKey: string;\n  storageLocation: StorageLocation;\n  loggingEnabled: boolean;\n  logger: Logger | null;\n\n  // Store methods\n  async store(items: T[]): Promise<DataContext<T>>;\n  async storeAs(storageKey: string, items: T[]): Promise<DataContext<T>>;\n  async storeAt(\n    storageKey: string,\n    storageLocation: StorageLocation,\n    items: T[]\n  ): Promise<DataContext<T>>;\n\n  // Retrieve methods\n  async retrieve(): Promise<T[]>;\n  async retrieveFrom(storageKey: string): Promise<T[]>;\n  async retrieveAt(\n    storageKey: string,\n    storageLocation: StorageLocation\n  ): Promise<T[]>;\n\n  // Remove methods\n  async remove(): Promise<DataContext<T>>;\n  async removeFrom(storageKey: string): Promise<DataContext<T>>;\n  async removeAt(\n    storageKey: string,\n    storageLocation: StorageLocation\n  ): Promise<DataContext<T>>;\n\n  // Other methods\n  async clear(): Promise<DataContext<T>>;\n  addClient(logger: Logger): DataContext<T>;\n  getCurrentSettings(): {\n    storageKey: string;\n    storageLocation: StorageLocation;\n  };\n  getData(): any[];\n  printLog(): any[];\n}\n```\n\n### DataContextConfig\n\nConfiguration object for DataContext (v3.0.0+):\n\n```typescript\ninterface DataContextConfig {\n  storageKey?: string; // Default: \"Items\"\n  storageLocation?: StorageLocation; // Default: localStorage\n  logger?: Logger | null; // Optional logger instance\n  loggingEnabled?: boolean; // Default: false\n}\n```\n\n### Types\n\n```typescript\n// Storage location type\nexport enum StorageLocations {\n  SessionStorage = \"sessionStorage\",\n  LocalStorage = \"localStorage\",\n}\nexport type StorageLocation = `${StorageLocations}`;\n\n// Storage item interface\nexport interface StorageItem {\n  name: string;\n  value: string;\n}\n\n// Database settings\nexport interface DatabaseSettings {\n  storageKey: string;\n  storageLocation: StorageLocation;\n  loggingEnabled: boolean;\n}\n```\n\n### Error Types\n\nv3.0.0 provides 6 custom error classes for specific error handling.\n\n📖 **Full error documentation:** [API.md - Error Classes](./docs/API.md#error-classes) | [Examples](./docs/EXAMPLES.md#error-handling)\n\n```typescript\nimport {\n  PersistenceServiceNotEnabled,\n  DataServiceUnavailable,\n  StorageKeyError,\n  StorageLocationError,\n  DataRetrievalError,\n  StorageQuotaError, // NEW in December 2025\n} from \"i45\";\n\ntry {\n  await context.store(data);\n} catch (error) {\n  if (error instanceof StorageKeyError) {\n    console.error(\"Invalid storage key:\", error.key);\n  } else if (error instanceof StorageQuotaError) {\n    console.error(\"Storage full:\", error.key, error.storageType);\n  } else if (error instanceof DataRetrievalError) {\n    console.error(\"Failed to retrieve:\", error.key, \"Cause:\", error.cause);\n  } else if (error instanceof StorageLocationError) {\n    console.error(\n      \"Invalid location:\",\n      error.location,\n      \"Valid:\",\n      error.validLocations\n    );\n  }\n}\n```\n\n## Migration from v2.x\n\nv3.0.0 includes breaking changes and major architectural improvements. See [MIGRATION.md](./docs/MIGRATION.md) for the complete migration guide.\n\n### Key Changes\n\n1. **New Architecture**: Modular design with service orchestration (December 2025)\n2. **Config Object Pattern**: New recommended way to initialize DataContext\n3. **TypeScript First**: Full TypeScript rewrite with generic types\n4. **Explicit Methods**: `store()`, `storeAs()`, `storeAt()` instead of overloaded signatures\n5. **6 Custom Errors**: Specific error classes for better error handling\n6. **Centralized Validation**: `ValidationUtils` for consistent validation\n7. **Zero Duplication**: 300+ lines of duplicate code eliminated\n8. **Property Names**: `StorageItem.Name` → `name`, `StorageItem.Value` → `value` (camelCase)\n9. **Async Operations**: All storage operations return Promises\n\n### Quick Migration Example\n\n```javascript\n// v2.x (Old)\nconst context = new DataContext();\ncontext.setStorageKey(\"MyData\");\ncontext.store(data); // May not be async\n\n// v3.x (New - Config Object)\nconst context = new DataContext({\n  storageKey: \"MyData\",\n  loggingEnabled: true,\n});\nawait context.store(data); // Always async\n\n// v3.x (New - Legacy Constructor)\nconst context = new DataContext(\"MyData\");\nawait context.store(data); // Always async\n```\n\nFor detailed migration steps, error handling examples, and troubleshooting, see [MIGRATION.md](./docs/MIGRATION.md).\n\n## Browser Support\n\n- Chrome/Edge: Latest 2 versions\n- Firefox: Latest 2 versions\n- Safari: Latest 2 versions\n- Modern browsers with ES2015+ support\n\n## Requirements\n\n- Node.js 16+ (for development)\n- Modern browser with localStorage/sessionStorage support\n\n## Framework Integration\n\n- **React:** See [EXAMPLES.md - React Integration](./docs/EXAMPLES.md#react-integration)\n- **Vue:** See [EXAMPLES.md - Vue Integration](./docs/EXAMPLES.md#vue-integration)\n- **TypeScript:** See [TYPESCRIPT.md](./docs/TYPESCRIPT.md) for type-safe integration patterns\n\n## Testing\n\ni45 v3.0.0 includes comprehensive testing:\n\n- **172 tests** with Jest\n- **92.08% statement coverage**\n- Unit tests for all components\n- Type safety tests\n- Error handling tests\n\n```bash\n# Run tests\nnpm test\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Watch mode\nnpm run test:watch\n```\n\n📖 **Testing examples:** [EXAMPLES.md - Testing Examples](./docs/EXAMPLES.md#testing-examples)\n\n## Documentation\n\n### Core Documentation\n\n- **[README.md](./README.md)** - This file (getting started and quick reference)\n- **[API.md](./docs/API.md)** - Complete API reference with all methods, properties, and error classes\n- **[TYPESCRIPT.md](./docs/TYPESCRIPT.md)** - TypeScript usage guide with patterns and best practices\n- **[EXAMPLES.md](./docs/EXAMPLES.md)** - 20+ comprehensive examples including React/Vue integration\n- **[MIGRATION.md](./docs/MIGRATION.md)** - Complete v2.x → v3.x migration guide\n\n### Additional Resources\n\n- **[CHANGES.md](./CHANGES.md)** - Version history and changelog\n- **[REFACTORING-SUMMARY.md](../../../Documents/Orion/Projects/i45/REFACTORING-SUMMARY.md)** - December 2025 refactoring details\n\n## License\n\nMIT © [CIS Guru](mailto:cisguru@outlook.com)\n\n## Links\n\n- [npm package](https://www.npmjs.com/package/i45)\n- [GitHub Repository](https://github.com/xnodeoncode/i45)\n- [Issue Tracker](https://github.com/xnodeoncode/i45/issues)\n- [i45-jslogger](https://www.npmjs.com/package/i45-jslogger) - Logging support\n- [i45-sample-data](https://www.npmjs.com/package/i45-sample-data) - Sample datasets\n\n## Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.\n\n## Changelog\n\nSee [CHANGES.md](./CHANGES.md) for version history and release notes.\n","readmeFilename":"README.md"}