{"_id":"strict-vuex","_rev":"27-9ec13e04d95f6cb123f3a0831d49d513","name":"strict-vuex","dist-tags":{"docs":"0.0.25","latest":"0.0.27"},"versions":{"0.0.1":{"name":"strict-vuex","version":"0.0.1","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.1","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"b3a51583e6eb0973b906e7e57d66eecea6454c72","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.1.tgz","fileCount":3,"integrity":"sha512-VM3F7jwRTWDzJh01zSUDQqn8Ld1299yG0piZ20iR+r2j43TaO58ztJ61VDYzhw0RFie/wss6Y9HLgqLX0wejxw==","signatures":[{"sig":"MEYCIQD4C6/jG8cOhpa8gfrbrxPkccDKMLT0cguueN18177kjQIhAN+SXsbY51cIiopei6/wr2Pa/QYEMJ2lHxKPx1fqGZSP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148688},"_from":"file:strict-vuex-0.0.1.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\fb86e44f77d07c27476a9002642bd10f\\strict-vuex-0.0.1.tgz","_integrity":"sha512-VM3F7jwRTWDzJh01zSUDQqn8Ld1299yG0piZ20iR+r2j43TaO58ztJ61VDYzhw0RFie/wss6Y9HLgqLX0wejxw==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.1_1763814507354_0.10776300274924733","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"strict-vuex","version":"0.0.2","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.2","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"3a3b90a7c63217af0e13d1f8608639b7c0b484a4","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.2.tgz","fileCount":3,"integrity":"sha512-n7Htprerygj4XYeujBGyfJllg1Rj4eFuGMm51+Jh1DxqzR6hh9iqdkRlQLo1po1OygYselmgQKcghyAYtSwtVw==","signatures":[{"sig":"MEQCIHLkwbfoYjN4pTeJpekLk148bo99bRhNidBUtb2euIabAiA7jiwBqWnkAqJMUFQybE9M5lafGspmUH/52NuCZoM94Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137864},"_from":"file:strict-vuex-0.0.2.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\0541890a4a244cdbd7e360b338488237\\strict-vuex-0.0.2.tgz","_integrity":"sha512-n7Htprerygj4XYeujBGyfJllg1Rj4eFuGMm51+Jh1DxqzR6hh9iqdkRlQLo1po1OygYselmgQKcghyAYtSwtVw==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.2_1763816192530_0.09077599304066064","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"strict-vuex","version":"0.0.3","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.3","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"7e71d32cc08006309ec6a30d1079e878c9318d95","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.3.tgz","fileCount":3,"integrity":"sha512-/fGuKkUTyVV5LmOZ7LBLV+u4ZT1iN8YAdfNK+q6X1XP9ui4pJFM+jM3rytkVF49VKAxd/1EqrYOX7oci3QKAtA==","signatures":[{"sig":"MEUCIQCki2f+mjCUVAd6d0EAFUlczXIp/tOsKtDXorEVZMw2/QIgG32GfVHh8Ro8io3BDteMsqYOwGFK1NL0AbYmfXn+jQw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137840},"_from":"file:strict-vuex-0.0.3.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\7a52c59ed0d43b5de25ceeb9822e0782\\strict-vuex-0.0.3.tgz","_integrity":"sha512-/fGuKkUTyVV5LmOZ7LBLV+u4ZT1iN8YAdfNK+q6X1XP9ui4pJFM+jM3rytkVF49VKAxd/1EqrYOX7oci3QKAtA==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.3_1763817104372_0.32311324190158386","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"strict-vuex","version":"0.0.4","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.4","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"4c875650d398a8f0a32a669f1b83a16c75fd8d56","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.4.tgz","fileCount":3,"integrity":"sha512-b98mmhgIweG2yci6vbUWX1vN2alTPVA4hb8dv2M+l9J3H2aARu+NFMp6WLaOLLxQPGmttKhe4DdqWBhb+Odg2g==","signatures":[{"sig":"MEYCIQCgyPpVgAf43ZQ+ePzMQ235v8vjHvmNh0+iCTcgfAYCBgIhAPjysCiAgKZgsVisYAXvO9UU8QDwKmeiUd+xR4/S0bvW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137840},"_from":"file:strict-vuex-0.0.4.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\91010f45263d50347b2572bdfc3fa6b7\\strict-vuex-0.0.4.tgz","_integrity":"sha512-b98mmhgIweG2yci6vbUWX1vN2alTPVA4hb8dv2M+l9J3H2aARu+NFMp6WLaOLLxQPGmttKhe4DdqWBhb+Odg2g==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.4_1763817237453_0.2018229950126147","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"strict-vuex","version":"0.0.5","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.5","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"93aaa13a11500144bcb90f61dff85b9e387ce3d2","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.5.tgz","fileCount":3,"integrity":"sha512-sjpdCd0Li+bwV5d1W2K9Qd3amA7yeyn0xzJy8kGbLHTXf26SQxHu0/5NIoU90LEu/Y2/uWpD7BmghBFx68Yb7w==","signatures":[{"sig":"MEYCIQC9nemeaRV8Vch/fHCBH0c0Qfer3yMbICliNNeuA9pAOwIhAKufW+0IAKGWxKfi+PSMLlvsGjuZfcxn3+w9J91ir/VP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137903},"_from":"file:strict-vuex-0.0.5.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\d2623c7fbfd14742b949b5919f018cbd\\strict-vuex-0.0.5.tgz","_integrity":"sha512-sjpdCd0Li+bwV5d1W2K9Qd3amA7yeyn0xzJy8kGbLHTXf26SQxHu0/5NIoU90LEu/Y2/uWpD7BmghBFx68Yb7w==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.5_1763818148395_0.5810025545897071","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"strict-vuex","version":"0.0.6","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.6","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"831bc2ea724b0c29f62f4311a0cbb79c05f3ec94","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.6.tgz","fileCount":3,"integrity":"sha512-KghzSFhbWqDJV3M7a393og8LS6/tU1o7tptUITt2xoFGgteGUwTRv3t5AStJ/mAX/pBSFzm5h716pZ5OglRPkw==","signatures":[{"sig":"MEUCIEHuIeBz+fRehA5QOnTQZLXBkAf5GNToW8kjeX7H9OiyAiEAi7aXNZ/b0ouM4dhYZ5n2SijTslQd+1JObQhLQyFL04A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137455},"_from":"file:strict-vuex-0.0.6.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\1d3742a3a50d60fd1b68c8395266ef4a\\strict-vuex-0.0.6.tgz","_integrity":"sha512-KghzSFhbWqDJV3M7a393og8LS6/tU1o7tptUITt2xoFGgteGUwTRv3t5AStJ/mAX/pBSFzm5h716pZ5OglRPkw==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.6_1763849131912_0.8647311592580298","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"strict-vuex","version":"0.0.7","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.7","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"128aa06b4cac8d8b6b500bd60dcae11328eff358","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.7.tgz","fileCount":3,"integrity":"sha512-pRZWxP76CdKU4xUN4UW1jElp3U8KfBRfU0ugOQbZX9WETAya6PnpfQIt7XXJ3VNIc2AYJgirVWA1hlqwuJsNuQ==","signatures":[{"sig":"MEQCIBK8dYGHMA8f6oyzuQP2uaCG9EwwEBG1FSZuJXkuf4fYAiBToeu4UeFgK9hi6zcOLIJYVP9I30rRRpkBUezuZ4SBRg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137481},"_from":"file:strict-vuex-0.0.7.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\68cdeb80e922807b4fafea323435ddc7\\strict-vuex-0.0.7.tgz","_integrity":"sha512-pRZWxP76CdKU4xUN4UW1jElp3U8KfBRfU0ugOQbZX9WETAya6PnpfQIt7XXJ3VNIc2AYJgirVWA1hlqwuJsNuQ==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.7_1763857757085_0.5613997254126843","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"strict-vuex","version":"0.0.8","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.8","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"af456fca18902a997d5c43b15529b3e8364afaf0","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.8.tgz","fileCount":3,"integrity":"sha512-/lbWYfauddx1Zyv/giM+6+hHtJTZlVVDJj30IzxB8BOpXurAMdOO5MhudQWgc0eTneqY/3jdB15NeFe1xQonMw==","signatures":[{"sig":"MEYCIQDgW5ll0uOr2Mnpgrp+ogNdAdmFxElThTlMdqARdB8r5wIhAPjqdR2j+kd6Y0LNI6iWGC2EojN9AbNUwGObOjHt0B1B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137148},"_from":"file:strict-vuex-0.0.8.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\f83340456b73a7d4d14e4e3486de66ad\\strict-vuex-0.0.8.tgz","_integrity":"sha512-/lbWYfauddx1Zyv/giM+6+hHtJTZlVVDJj30IzxB8BOpXurAMdOO5MhudQWgc0eTneqY/3jdB15NeFe1xQonMw==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.8_1763860397329_0.5757888108135625","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"strict-vuex","version":"0.0.9","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.9","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"fa8252082b570622cda254e01724c54dbb6ec270","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.9.tgz","fileCount":3,"integrity":"sha512-eyU/xsFJmKjpk6t+rZL3UnOIHYm3pG4Mlm0gt7aBbzvXHmxVvs9FfifojqaQZyVboz4WBGkAlLpSkrf38t9wCA==","signatures":[{"sig":"MEQCIA4wTmPMvZ1REXSCAYE6yndZ8dDJqz01rueaJX4ggKMvAiBwKRQKEnGzm/jG/dB7WdwG6KA/aGErjKyQuIc9VV7wkA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139554},"_from":"file:strict-vuex-0.0.9.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\631788a7841ed77932165a7848047bc1\\strict-vuex-0.0.9.tgz","_integrity":"sha512-eyU/xsFJmKjpk6t+rZL3UnOIHYm3pG4Mlm0gt7aBbzvXHmxVvs9FfifojqaQZyVboz4WBGkAlLpSkrf38t9wCA==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.9_1763912940162_0.6356173471856428","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"strict-vuex","version":"0.0.10","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.10","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"fa96a6eb596377ce04314c655e5bf00265b808d1","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.10.tgz","fileCount":3,"integrity":"sha512-cCCfx6UVGoFUplx45jYHgkeacfI6SYMNE3hLLlCr80qbD2hKFcHTBNCkr6kl/6bUcBDQ3f3168zfuZOrqwsC/A==","signatures":[{"sig":"MEUCIQC1gVlMzbE4QKbo4n4phBGid7dkfD5mV3Lc6Qw5b8c1CQIgZHy3t6mjb0kxvMi6ffKNhLe4B0Klugu+YrnoKo2maBQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153928},"_from":"file:strict-vuex-0.0.10.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\b071ca3572195cd91939f3f3eb76b808\\strict-vuex-0.0.10.tgz","_integrity":"sha512-cCCfx6UVGoFUplx45jYHgkeacfI6SYMNE3hLLlCr80qbD2hKFcHTBNCkr6kl/6bUcBDQ3f3168zfuZOrqwsC/A==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.10_1763922397427_0.02402388008612677","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"strict-vuex","version":"0.0.11","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.11","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"1ae8a9c037e20e71adad7b679658d4f85256c85b","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.11.tgz","fileCount":3,"integrity":"sha512-O4sapze6nh02Y2KN+QIhHSRLsxL1MRFttR1M1RVDqBI/9yb4WuV0/5xXOBXA0tRItUpDTmt5+L4D220PwAKnDA==","signatures":[{"sig":"MEUCIQCyrJXqkNgetxOHSi0YumclRUFEkv5BS8u/uXJf39XedgIgfsHheSCIUHUD9Ol90UJyJj4XjQcOf0HV/AihH2bs8Tw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153937},"_from":"file:strict-vuex-0.0.11.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\f5427da2bdfc3067b9151be6bc93bada\\strict-vuex-0.0.11.tgz","_integrity":"sha512-O4sapze6nh02Y2KN+QIhHSRLsxL1MRFttR1M1RVDqBI/9yb4WuV0/5xXOBXA0tRItUpDTmt5+L4D220PwAKnDA==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.11_1763923123700_0.7311895443005578","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"strict-vuex","version":"0.0.12","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.12","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"828c8afae7ffb182bf88b687601bd3fa0f7437f2","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.12.tgz","fileCount":3,"integrity":"sha512-HEDEyY6QMPIs07bu2fKkZlJd19bLXb5Y7G06+WCcPbGMTLtL9+BIJOMCAoxLu5mGu8sJifW9lPqMiTdZCTHTGA==","signatures":[{"sig":"MEUCIQDxA3cIhyB3DFqASIC93hSxsvet/GpYzvhSG+sookx1QAIgFr7e+IHoLiCX1IYCU8D+jFZnJAJZvFPWwSX/BrxRwMU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148639},"_from":"file:strict-vuex-0.0.12.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\6d6cc694a745e7cb12bf4b8ff75742c2\\strict-vuex-0.0.12.tgz","_integrity":"sha512-HEDEyY6QMPIs07bu2fKkZlJd19bLXb5Y7G06+WCcPbGMTLtL9+BIJOMCAoxLu5mGu8sJifW9lPqMiTdZCTHTGA==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.12_1763984694338_0.09892386287109245","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"strict-vuex","version":"0.0.13","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.13","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"a3d10457e93197229ef7e35c91d803e959e3b74c","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.13.tgz","fileCount":3,"integrity":"sha512-52scpxqfCNgZf8I0EDf8JR961l+YN1uO6I2nPw6g6oRWKRoZNHPBS8yS7rzI5hlqOcsfmEfmUFNonRpP7BfFoA==","signatures":[{"sig":"MEQCIHN3yQjmFuZn5YG13Fsb31G6rI1QeXfcH7Vsjmp0uwREAiBtZ9vTRetTbcoqsx4sXyB4ednFLnsal7sh0b+FeE7AhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148639},"_from":"file:strict-vuex-0.0.13.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\3b7e2865e24007437c0b23e118216090\\strict-vuex-0.0.13.tgz","_integrity":"sha512-52scpxqfCNgZf8I0EDf8JR961l+YN1uO6I2nPw6g6oRWKRoZNHPBS8yS7rzI5hlqOcsfmEfmUFNonRpP7BfFoA==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.13_1763984830508_0.34894784680584423","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"strict-vuex","version":"0.0.14","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.14","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"b460fae90c9cb6b6ff049d9fb070af273aede57e","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.14.tgz","fileCount":3,"integrity":"sha512-zg6ooj9xGxCNa6dsPtMDXzaDkHqjTaGN4xYoJ6Hw8BTiBJdG/FGCH3dyQX0GuTIwf5d87D36Wpvx9r8R3FEQsw==","signatures":[{"sig":"MEUCIQCeJXmeWsRUoIIWv/rVdQb5ggbl0bMrxxtWJ5zT4YW/FgIgL9ejyqeX9mVvH/aCddJd6CgWV9f0n5bV3H+gBv1m65Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148668},"_from":"file:strict-vuex-0.0.14.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\717c8098dcc2e5e9b2844f9a64c47edc\\strict-vuex-0.0.14.tgz","_integrity":"sha512-zg6ooj9xGxCNa6dsPtMDXzaDkHqjTaGN4xYoJ6Hw8BTiBJdG/FGCH3dyQX0GuTIwf5d87D36Wpvx9r8R3FEQsw==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.14_1763985607235_0.177649219118869","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"strict-vuex","version":"0.0.15","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.15","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"6971ee75a7805f9f14a420e94ee84b7e93112581","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.15.tgz","fileCount":3,"integrity":"sha512-hgQeAUQH65oukP9dPRwra4dLdKqeS75KIl1fHMz9tt9AKwEe0YLDBTgJzECcpfdoMvNMCIn5b55dt6ddOxaAuw==","signatures":[{"sig":"MEUCICf6AdsLa/FFUblyfY+13HBasYy28umsWuGgmIp1lldlAiEAkKkQ5L8wdekBmgor2HQuceHh8p+G61ShMId3dJjWG5E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148682},"_from":"file:strict-vuex-0.0.15.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\e215195cc5db437e6945dd0f5650329f\\strict-vuex-0.0.15.tgz","_integrity":"sha512-hgQeAUQH65oukP9dPRwra4dLdKqeS75KIl1fHMz9tt9AKwEe0YLDBTgJzECcpfdoMvNMCIn5b55dt6ddOxaAuw==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.15_1763995815503_0.021617667740938984","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"strict-vuex","version":"0.0.16","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.16","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"393cb9d28b1b5a35aec9c3703a6c7392c24a3503","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.16.tgz","fileCount":3,"integrity":"sha512-hJSZy9hueDXAPP3O6LnMlPcEGiSRPqPEFRScI507YZMJwTqBo4n0MNFPkiLf5TKQ2978Yk8fCo6pV8tit1pYlQ==","signatures":[{"sig":"MEUCIQCYCKP8SQUb11nvcPO0T6a0okZgIlY9K8AMFkEkgvaN+AIgYzx7R0d2m+KYHpbY18ZY6F7JdBvK6Mawh6Oz9XU6bro=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148754},"_from":"file:strict-vuex-0.0.16.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\c4286558baae557cea9e41260f120f03\\strict-vuex-0.0.16.tgz","_integrity":"sha512-hJSZy9hueDXAPP3O6LnMlPcEGiSRPqPEFRScI507YZMJwTqBo4n0MNFPkiLf5TKQ2978Yk8fCo6pV8tit1pYlQ==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.16_1763996244914_0.941348191628345","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"strict-vuex","version":"0.0.17","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.17","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"bf569652f51a035cad7b0905d506b907b77f1dd6","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.17.tgz","fileCount":3,"integrity":"sha512-JCt8jfLBkGPPDro1tBjoW7gkDfZybjeJ0GlCO/NQzkZICk2IQQu2x+8k7UmF/fFpzkyhGOuVB5qhodiFQHN2Fg==","signatures":[{"sig":"MEUCIFnRTtguxMc7g1hw5O0C+Yq0B5uOv+9wZAXfmedNc8oQAiEA87re2a1veMfAaI65Om3Tna3i+YmGzYJzhH8DdtI81fI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148690},"_from":"file:strict-vuex-0.0.17.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\39f2fc10aa2479dc1a8567782d0d2187\\strict-vuex-0.0.17.tgz","_integrity":"sha512-JCt8jfLBkGPPDro1tBjoW7gkDfZybjeJ0GlCO/NQzkZICk2IQQu2x+8k7UmF/fFpzkyhGOuVB5qhodiFQHN2Fg==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.1.0","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.17_1763997981961_0.840318845673472","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"strict-vuex","version":"0.0.18","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.18","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"99cd21608b26f26c9266dd377fa954bdf5dd7fea","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.18.tgz","fileCount":3,"integrity":"sha512-QWO9S3VpHjQxm/n/zrbEWnpHo7fJ1FHq8dFqpG1iMzF72VIjs7QtPffDR3HlRcSQLngnjwRoTpNEQ85jhU0nkA==","signatures":[{"sig":"MEUCIEogDhOMqhRvJmbgzlaJELyv9klj29zNftX2M3rJI+KKAiEA3QqLRkFEv+1vc78O7Scqm0sHkrEXVoGmTebj9wakZl8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148729},"_from":"file:strict-vuex-0.0.18.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\ec7b54908e63ada004bb14b44b6fd53d\\strict-vuex-0.0.18.tgz","_integrity":"sha512-QWO9S3VpHjQxm/n/zrbEWnpHo7fJ1FHq8dFqpG1iMzF72VIjs7QtPffDR3HlRcSQLngnjwRoTpNEQ85jhU0nkA==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.6.4","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.18_1764711843186_0.7855279075850594","host":"s3://npm-registry-packages-npm-production"}},"0.0.19":{"name":"strict-vuex","version":"0.0.19","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.19","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"6dbf94bbca19f91082d7a2b2b0f0947001a02a6e","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.19.tgz","fileCount":3,"integrity":"sha512-hzjdYnLbXU2uxF9AHMKUSMa3BCL2HEatwnsSQN0LXJBYnjyRaLr/CmO+Eu0jYVdzckgpNINc4386TuEGiwqV3A==","signatures":[{"sig":"MEQCIB+wFUIqq21ELxUg5k7DWu33vMzdsPaTnu5w9yC9ldXVAiAEqPAGg2zqaNC6KbHK0tcMo46yUt9FnCgw3hNYE+kM0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148731},"_from":"file:strict-vuex-0.0.19.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\71654b9a038d35bd9dad48a83e2e15bb\\strict-vuex-0.0.19.tgz","_integrity":"sha512-hzjdYnLbXU2uxF9AHMKUSMa3BCL2HEatwnsSQN0LXJBYnjyRaLr/CmO+Eu0jYVdzckgpNINc4386TuEGiwqV3A==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.6.4","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.19_1764711946234_0.5541598683604598","host":"s3://npm-registry-packages-npm-production"}},"0.0.20":{"name":"strict-vuex","version":"0.0.20","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.20","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"9eb44bc7f60a34414685d328b06735acf23eb06c","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.20.tgz","fileCount":3,"integrity":"sha512-JyzF2011eE4p0tnj/k4wrT9LtT1eMkbkXG1AsMWTWJYAFOq8eHA740ZUm6r1GSlt8ipAqZjdxKPQxcCuUpT9QQ==","signatures":[{"sig":"MEUCICJ/m4UHPeL+uiGwFl3D2D6DO1jeN/a7UVO4D4f2fd9hAiEAuoSx+ozFCEsNGlQX9l7L4zEo/Bbvrk9CrkRl2QK+aiw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148865},"_from":"file:strict-vuex-0.0.20.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\e4bc3d47edf89b1d66f5edd894de6f59\\strict-vuex-0.0.20.tgz","_integrity":"sha512-JyzF2011eE4p0tnj/k4wrT9LtT1eMkbkXG1AsMWTWJYAFOq8eHA740ZUm6r1GSlt8ipAqZjdxKPQxcCuUpT9QQ==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.6.4","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.20_1764712118590_0.01961774454566645","host":"s3://npm-registry-packages-npm-production"}},"0.0.21":{"name":"strict-vuex","version":"0.0.21","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.21","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"c2a0ab0e605f155da14c3eca0df100b5becddc6a","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.21.tgz","fileCount":3,"integrity":"sha512-50/FuU5gZiUh9XyLfUwT0f1dXVPTGmcUg2KRrWw1sQmHYB6GobZrxrkUjSFWyqT6VaQK4GxWXegZZweGgRWgcg==","signatures":[{"sig":"MEQCID9RFFPAaWwjFVZPZFjM4tQrOMfx9QtGTOdQvm9WIjkrAiAe1EXkeB5vy4oIeniGSmb5/Gi6rLIGZarAVv2WErA2OA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149317},"_from":"file:strict-vuex-0.0.21.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\65a777e13dd571fed711981b7c10e0eb\\strict-vuex-0.0.21.tgz","_integrity":"sha512-50/FuU5gZiUh9XyLfUwT0f1dXVPTGmcUg2KRrWw1sQmHYB6GobZrxrkUjSFWyqT6VaQK4GxWXegZZweGgRWgcg==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.6.4","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.21_1764734184045_0.9288358000164127","host":"s3://npm-registry-packages-npm-production"}},"0.0.22":{"name":"strict-vuex","version":"0.0.22","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.22","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"1a4c76cf2075f3b46f2882518e90f15ae9b6d266","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.22.tgz","fileCount":3,"integrity":"sha512-7nZUc7iZ1jPfFXzlW2gBYKH8cqIEZAkkBq63iabYIuZV4/GeHxJMp9v8OkC8nfEW1BgN2j54wvdJaMslPVvb/w==","signatures":[{"sig":"MEQCIBPy27aIYHWyvRV/JbABRkOZipnXSGElXbXnf5YVuOpKAiBgWI1MfknhGg+QEIgRk3IaRkoS2T1d7fdwf+0UfaqFAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149544},"_from":"file:strict-vuex-0.0.22.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\42569ef8d368f3ef3fe1adcb4d213a33\\strict-vuex-0.0.22.tgz","_integrity":"sha512-7nZUc7iZ1jPfFXzlW2gBYKH8cqIEZAkkBq63iabYIuZV4/GeHxJMp9v8OkC8nfEW1BgN2j54wvdJaMslPVvb/w==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.6.4","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.22_1764738423552_0.41549279536870154","host":"s3://npm-registry-packages-npm-production"}},"0.0.23":{"name":"strict-vuex","version":"0.0.23","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.23","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"f5ef4d46fabb4f522fcfc10b1c5edef9446e8a13","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.23.tgz","fileCount":3,"integrity":"sha512-oH8bI/1nTfZPv0Vm7jaRYWgooXGzheAGLPLQVdiuksddmUnGV59Ierz60ZwXKFnkGca0w5C4SX/INxb+vS5nOg==","signatures":[{"sig":"MEQCICKEzFNqRYMSVeRpyIU8SaR/73TKfa219sCtOBOxAqy/AiBY6iF2OaDtPUM6XgS9QIrgyEMBoPBR8KLU2+JZwSPmWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149544},"_from":"file:strict-vuex-0.0.23.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\2ff6bb4b896f0b76286bd2d55595db53\\strict-vuex-0.0.23.tgz","_integrity":"sha512-oH8bI/1nTfZPv0Vm7jaRYWgooXGzheAGLPLQVdiuksddmUnGV59Ierz60ZwXKFnkGca0w5C4SX/INxb+vS5nOg==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.6.4","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.23_1764738444763_0.726007625619103","host":"s3://npm-registry-packages-npm-production"}},"0.0.24":{"name":"strict-vuex","version":"0.0.24","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.24","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"fc34e8ae00de3dc663e0c5e0cbe5d467a783c029","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.24.tgz","fileCount":3,"integrity":"sha512-AvO3iJ3m6AdLiT2qFoAs2czN+jasDenA8jIvL/YoEQsDw7u0pzo/JlcVf/B6l5hXQ1GeqcPObw/aZRECMDfSYg==","signatures":[{"sig":"MEUCICq3GKwm0ts86pe3PmpkRdpeRRt4NWyu8xdjLwh1ykeQAiEAoQvxTGPNbrsO5vGdsOSApDWI4JNRWLonuVGnMDOlTcw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149564},"_from":"file:strict-vuex-0.0.24.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\27389a4744da61aba55ce73a876b2460\\strict-vuex-0.0.24.tgz","_integrity":"sha512-AvO3iJ3m6AdLiT2qFoAs2czN+jasDenA8jIvL/YoEQsDw7u0pzo/JlcVf/B6l5hXQ1GeqcPObw/aZRECMDfSYg==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.6.4","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.24_1764738528664_0.6213911593103032","host":"s3://npm-registry-packages-npm-production"}},"0.0.25":{"name":"strict-vuex","version":"0.0.25","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.25","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"2c1696ee0acae47d1bbc485c2d67d2e07734db92","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.25.tgz","fileCount":3,"integrity":"sha512-04TFlNtq7VMpXFY/vYe7gdG4KXkjtGiX/p2TC1ga1j6MdTMiztIvo2QaAL9NvFpetCKp4s5ygynyTWSOBifxWw==","signatures":[{"sig":"MEQCIDpdn9UD98Lg47wmo3DvSIbr/COnpmuWkr2fKODDjo0eAiBSjWxsAQdphYP/xqNPVgRtBIrMypoB4/86h2c7+0DwwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149553},"_from":"file:strict-vuex-0.0.25.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\244329633db438761ef2b524002a924b\\strict-vuex-0.0.25.tgz","_integrity":"sha512-04TFlNtq7VMpXFY/vYe7gdG4KXkjtGiX/p2TC1ga1j6MdTMiztIvo2QaAL9NvFpetCKp4s5ygynyTWSOBifxWw==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.6.4","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.25_1764738648597_0.9365771046010765","host":"s3://npm-registry-packages-npm-production"}},"0.0.26":{"name":"strict-vuex","version":"0.0.26","keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"license":"MIT","_id":"strict-vuex@0.0.26","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"dist":{"shasum":"d3d7d0f67b74c48a9c97d403bc3cf5787d4c3786","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.26.tgz","fileCount":3,"integrity":"sha512-kw5Db9VH2UZziK8SfJ7TQHNwD1oITWch/sbB8sv82Bc7ZRKfkfCkATWoV/nM9dL66RtFW8LoxnJooc/HWDRV1w==","signatures":[{"sig":"MEQCIAmPY80zvbMmdsqg/aUfZKjC9P6TAFBTwsPi8O21fjMrAiAwNnSC2oVNrLo4z0yO2/WI+bmtWGgOos5cHsh48TMPaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149481},"_from":"file:strict-vuex-0.0.26.tgz","types":"index.d.ts","scripts":{},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\24a1da6424e2401d9157f4ccf63f7611\\strict-vuex-0.0.26.tgz","_integrity":"sha512-kw5Db9VH2UZziK8SfJ7TQHNwD1oITWch/sbB8sv82Bc7ZRKfkfCkATWoV/nM9dL66RtFW8LoxnJooc/HWDRV1w==","repository":{"url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git","type":"git"},"_npmVersion":"11.6.4","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.22","vuex":"^4.1.0","typescript":"^5.8.3"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/strict-vuex_0.0.26_1764738781862_0.1694476928758557","host":"s3://npm-registry-packages-npm-production"}},"0.0.27":{"name":"strict-vuex","version":"0.0.27","description":"A comprehensive TypeScript type system to create a fully typed Vuex store","types":"index.d.ts","license":"MIT","repository":{"type":"git","url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git"},"keywords":["typescript","vuex","vue","types","declaration"],"author":{"name":"MAHMOUDGAD123"},"publishConfig":{"access":"public"},"devDependencies":{"typescript":"^5.8.3","vue":"^3.5.22","vuex":"^4.1.0"},"peerDependencies":{"vue":"^3.5.22","vuex":"^4.1.0"},"scripts":{},"_id":"strict-vuex@0.0.27","bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","_integrity":"sha512-J7/5CuEFNx5KGaOLbHsjW/J65FXGZAtmIRoxBVTtR7FSyVeXG+fYHNcSSL5zRP3BF/esQt7QuAFRzmjLuVdfAQ==","_resolved":"C:\\Users\\MG\\AppData\\Local\\Temp\\b9428a8b0175dcbe07e8ac5e6f7fce33\\strict-vuex-0.0.27.tgz","_from":"file:strict-vuex-0.0.27.tgz","_nodeVersion":"24.11.0","_npmVersion":"11.6.4","dist":{"integrity":"sha512-J7/5CuEFNx5KGaOLbHsjW/J65FXGZAtmIRoxBVTtR7FSyVeXG+fYHNcSSL5zRP3BF/esQt7QuAFRzmjLuVdfAQ==","shasum":"8910f00493a1dd56dc8fc343f3a093934db761e7","tarball":"https://registry.npmjs.org/strict-vuex/-/strict-vuex-0.0.27.tgz","fileCount":3,"unpackedSize":149554,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCVzdbeN4VXz6tHsxrqeRfntDQWyh+zsOBLiR2Lcdy6KgIgDjJoI5j3REPMjFdDom7R4ZtQnfehBoVaDkxvS/a9v/U="}]},"_npmUser":{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"},"directories":{},"maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/strict-vuex_0.0.27_1764739378001_0.708522664566726"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-22T12:28:27.251Z","modified":"2025-12-03T05:22:58.361Z","0.0.1":"2025-11-22T12:28:27.577Z","0.0.2":"2025-11-22T12:56:32.713Z","0.0.3":"2025-11-22T13:11:44.577Z","0.0.4":"2025-11-22T13:13:57.639Z","0.0.5":"2025-11-22T13:29:08.592Z","0.0.6":"2025-11-22T22:05:32.130Z","0.0.7":"2025-11-23T00:29:17.307Z","0.0.8":"2025-11-23T01:13:17.503Z","0.0.9":"2025-11-23T15:49:00.395Z","0.0.10":"2025-11-23T18:26:37.622Z","0.0.11":"2025-11-23T18:38:43.905Z","0.0.12":"2025-11-24T11:44:54.528Z","0.0.13":"2025-11-24T11:47:10.714Z","0.0.14":"2025-11-24T12:00:07.392Z","0.0.15":"2025-11-24T14:50:15.714Z","0.0.16":"2025-11-24T14:57:25.091Z","0.0.17":"2025-11-24T15:26:22.135Z","0.0.18":"2025-12-02T21:44:03.401Z","0.0.19":"2025-12-02T21:45:46.424Z","0.0.20":"2025-12-02T21:48:38.780Z","0.0.21":"2025-12-03T03:56:24.226Z","0.0.22":"2025-12-03T05:07:03.779Z","0.0.23":"2025-12-03T05:07:24.946Z","0.0.24":"2025-12-03T05:08:48.831Z","0.0.25":"2025-12-03T05:10:48.814Z","0.0.26":"2025-12-03T05:13:02.057Z","0.0.27":"2025-12-03T05:22:58.182Z"},"bugs":{"url":"https://github.com/MAHMOUDGAD123/strict-vuex/issues"},"author":{"name":"MAHMOUDGAD123"},"license":"MIT","homepage":"https://github.com/MAHMOUDGAD123/strict-vuex#readme","keywords":["typescript","vuex","vue","types","declaration"],"repository":{"type":"git","url":"git+https://github.com/MAHMOUDGAD123/strict-vuex.git"},"description":"A comprehensive TypeScript type system to create a fully typed Vuex store","maintainers":[{"name":"mahmoud_gad","email":"hooda.gad333@gmail.com"}],"readme":"<p align=\"center\">\r\n  <img src=\"./logo.svg\" width=\"300\" />\r\n</p>\r\n\r\n# Strict Vuex Type System\r\n\r\nA comprehensive TypeScript type system for Vuex that provides complete type safety for modules, state, getters, actions, mutations, and mappers - This package will allow you to use vuex as-is but with a very strong and strict types to help you use it in a safe way.\r\n\r\n## Table of Contents\r\n\r\n- [Strict Vuex Type System](#strict-vuex-type-system)\r\n  - [Table of Contents](#table-of-contents)\r\n  - [Features](#features)\r\n  - [Installation](#installation)\r\n    - [Package Installation](#package-installation)\r\n    - [TypeScript Configuration](#typescript-configuration)\r\n    - [Troubleshooting Installation Issues](#troubleshooting-installation-issues)\r\n  - [Naming Conventions](#naming-conventions)\r\n  - [Project Store Structure](#project-store-structure)\r\n    - [Best Practices for Structure](#best-practices-for-structure)\r\n    - [Module Hierarchy](#module-hierarchy)\r\n    - [Module Communication Pattern](#module-communication-pattern)\r\n    - [File Organization Patterns](#file-organization-patterns)\r\n      - [Pattern 1: Separate Type Files (Recommended)](#pattern-1-separate-type-files-recommended)\r\n      - [Pattern 2: Single File Module (Simple Modules)](#pattern-2-single-file-module-simple-modules)\r\n  - [Quick Start](#quick-start)\r\n    - [Understanding the \\_Module Type Parameters](#understanding-the-_module-type-parameters)\r\n    - [Setup Step By Step](#setup-step-by-step)\r\n      - [Step 1: Define Your Module Types](#step-1-define-your-module-types)\r\n      - [Step 2: Register Modules in Type Declaration (CRITICAL STEP)](#step-2-register-modules-in-type-declaration-critical-step)\r\n      - [Step 3: Implement Your Modules](#step-3-implement-your-modules)\r\n      - [Step 4: Create the Store](#step-4-create-the-store)\r\n      - [Step 5: Install The Store Instance As A Plugin](#step-5-install-the-store-instance-as-a-plugin)\r\n      - [Step 6: Verify Type System is Working](#step-6-verify-type-system-is-working)\r\n    - [How the Type System Works](#how-the-type-system-works)\r\n    - [Common Mistakes to Avoid](#common-mistakes-to-avoid)\r\n  - [Usage](#usage)\r\n    - [Direct Store Access](#direct-store-access)\r\n    - [Using Mappers in Components](#using-mappers-in-components)\r\n    - [Namespaced Helpers](#namespaced-helpers)\r\n    - [Root Actions in Namespaced Modules](#root-actions-in-namespaced-modules)\r\n    - [Dynamic Module Registration](#dynamic-module-registration)\r\n  - [Advanced Features](#advanced-features)\r\n    - [Module Modes](#module-modes)\r\n      - [Isolated Mode (namespaced: true)](#isolated-mode-namespaced-true)\r\n      - [Default Mode (namespaced: false)](#default-mode-namespaced-false)\r\n    - [Logger Plugin](#logger-plugin)\r\n      - [Basic Usage](#basic-usage)\r\n      - [Advanced Configuration](#advanced-configuration)\r\n      - [Type-Safe Filtering](#type-safe-filtering)\r\n    - [Action Context](#action-context)\r\n      - [Root Level Actions](#root-level-actions)\r\n      - [Isolated Module Actions](#isolated-module-actions)\r\n      - [Default Module Actions](#default-module-actions)\r\n      - [Context Properties](#context-properties)\r\n    - [Nested Module Access](#nested-module-access)\r\n      - [State Access](#state-access)\r\n      - [Getters Access (Isolated Modules)](#getters-access-isolated-modules)\r\n      - [Actions and Mutations (Isolated Modules)](#actions-and-mutations-isolated-modules)\r\n      - [Cross-Module Communication](#cross-module-communication)\r\n      - [Type-Safe Module State Resolution](#type-safe-module-state-resolution)\r\n      - [Accessing Nested Modules in Context](#accessing-nested-modules-in-context)\r\n      - [Store Subscriptions](#store-subscriptions)\r\n      - [Watch API](#watch-api)\r\n  - [Type Definitions Reference](#type-definitions-reference)\r\n    - [StoreActionRecord - interface](#storeactionrecord---interface)\r\n    - [\\_Module - interface](#_module---interface)\r\n    - [ResolveModuleStateByName - type](#resolvemodulestatebyname---type)\r\n  - [API Reference](#api-reference)\r\n    - [Store Methods](#store-methods)\r\n    - [Mapper Functions](#mapper-functions)\r\n  - [Best Practices](#best-practices)\r\n    - [Best Practices Examples](#best-practices-examples)\r\n      - [1. Always Use Object Payloads For Actions and Mutations](#1-always-use-object-payloads-for-actions-and-mutations)\r\n      - [2. Define Types Before Implementation](#2-define-types-before-implementation)\r\n      - [3. Use Consistent Naming Conventions](#3-use-consistent-naming-conventions)\r\n      - [4. Organize Module Structure](#4-organize-module-structure)\r\n      - [5. Handle Root Actions Properly](#5-handle-root-actions-properly)\r\n  - [⚡ Performance Tips](#-performance-tips)\r\n    - [1. TypeScript Configuration (Recommended)](#1-typescript-configuration-recommended)\r\n    - [2. Git Ignore](#2-git-ignore)\r\n    - [3. Restart TypeScript Server](#3-restart-typescript-server)\r\n  - [Migration Guide](#migration-guide)\r\n  - [Troubleshooting](#troubleshooting)\r\n  - [FAQ](#faq)\r\n    - [Circular Dependency Issue](#circular-dependency-issue)\r\n\r\n## Features\r\n\r\n- ✅ **Full Type Safety**: Complete TypeScript support for all Vuex features with end-to-end type inference\r\n- ✅ **Nested Modules**: Support for deeply nested module structures with proper type inference and state resolution\r\n- ✅ **Namespaced Modules**: Full support for both namespaced (`isolated`) and non-namespaced (`default`) modules\r\n- ✅ **Root Actions**: Proper typing for root-level actions in namespaced modules with `{ root: true }` flag\r\n- ✅ **Typed Mappers**: Fully typed `mapState`, `mapGetters`, `mapActions`, `mapMutations` helpers with namespace support\r\n- ✅ **Dynamic Module Registration**: Type-safe module registration/unregistration at runtime with path validation\r\n- ✅ **Action Context**: Properly typed dispatch and commit within action contexts with module-aware types\r\n- ✅ **Path Validation**: Type-safe module paths for `hasModule`, `registerModule`, and `unregisterModule`\r\n- ✅ **Getters Resolution**: Full getter type resolution across module boundaries with proper namespace prefixing\r\n- ✅ **Mutations Resolution**: Complete mutation typing with namespace awareness\r\n- ✅ **Actions Resolution**: Action typing with root action support and proper return type inference\r\n- ✅ **Logger Support**: Typed logger plugin with filtering, transformation options, and custom logger support\r\n- ✅ **Subscription Hooks**: Typed mutation and action subscription methods with proper payload types\r\n- ✅ **Watch API**: Type-safe store watching capabilities with getter and callback typing\r\n- ✅ **Hot Module Replacement**: Full HMR support with type safety through `hotUpdate` method\r\n- ✅ **Composition API Support**: Full `useStore` hook typing for Vue 3 Composition API\r\n- ✅ **Store Options**: Fully typed store creation options including plugins, strict mode, and devtools\r\n- ✅ **Namespaced Helpers**: `createNamespacedHelpers` with full type inference for bound mappers\r\n- ✅ **Module Modes**: Support for `isolated` (namespaced) and `default` (non-namespaced) module modes\r\n- ✅ **Module Tree Traversal**: Automatic type resolution for complex module hierarchies\r\n- ✅ **Payload Validation**: Enforced object-style payloads for better type safety and consistency\r\n- ✅ **Custom Store Properties**: Extensible store types through TypeScript module augmentation\r\n- ✅ **Component Integration**: Automatic `$store` typing in Vue components through module augmentation\r\n- ✅ **State Functions**: Support for both object and function-style state definitions\r\n- ✅ **Module Relationship Tracking**: Parent-child module relationships with depth and hierarchy information\r\n\r\n## Installation\r\n\r\n### Package Installation\r\n\r\nInstall the package using your preferred package manager:\r\n\r\n```bash\r\n# Using npm\r\nnpm install strict-vuex -D\r\n\r\n# Using yarn\r\nyarn add strict-vuex -D\r\n\r\n# Using pnpm 🤍\r\npnpm add strict-vuex -D\r\n```\r\n\r\n### TypeScript Configuration\r\n\r\n**_for PNPM users - you have to add the path mapping for vuex_**\r\n\r\n```json\r\n{\r\n  \"compilerOptions\": {\r\n    \"paths\": {\r\n      \"@/*\": [\"./src/*\"],\r\n      \"vuex\": [\"./node_modules/vuex/types\"] // Fix for PNPM hoisting issue\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Troubleshooting Installation Issues\r\n\r\n**Module Resolution Issues**\r\n\r\nIf TypeScript can't find Vuex types:\r\n\r\n1. Clear TypeScript cache:\r\n\r\n```bash\r\nrm -rf node_modules/.cache\r\nrm -rf node_modules/.tmp\r\n```\r\n\r\n2. Restart TypeScript service in your IDE:\r\n\r\n   - VSCode: `Cmd/Ctrl` + `Shift` + `P` → \"TypeScript: Restart TS Server\"\r\n\r\n3. Rebuild node_modules:\r\n\r\n```bash\r\nrm -rf node_modules package-lock.json\r\npnpm install\r\n```\r\n\r\n**Type Declaration Conflicts**\r\n\r\nIf you see duplicate identifier errors:\r\n\r\n1. Ensure you don't have multiple Vuex type declarations\r\n2. Check that skipLibCheck is set to true in tsconfig:\r\n\r\n```bash\r\n{\r\n  \"compilerOptions\": {\r\n    \"skipLibCheck\": true\r\n  }\r\n}\r\n```\r\n\r\n**Version Compatibility**\r\n\r\nEnsure you're using compatible versions:\r\n\r\n| Vue Version | Vuex Version | TypeScript Version |\r\n| ----------- | ------------ | ------------------ |\r\n| Vue 3.x     | Vuex 4.x     | TypeScript 4.5+    |\r\n| Vue 2.7     | Vuex 3.x     | TypeScript 4.5+    |\r\n| Vue 2.6     | Vuex 3.x     | TypeScript 3.5+    |\r\n\r\n**Post-Installation Checklist**\r\n\r\n- [ ] Vuex 4 is installed in `package.json`\r\n- [ ] TypeScript configuration includes Vuex types\r\n- [ ] PNPM path mapping is added (if using PNPM)\r\n- [ ] Store directory structure is created\r\n- [ ] IDE extensions are installed and configured\r\n- [ ] TypeScript service recognizes Vuex types\r\n- [ ] Test store creation works without type errors\r\n\r\n## Naming Conventions\r\n\r\n| Element             | Convention             | Example                |\r\n| ------------------- | ---------------------- | ---------------------- |\r\n| Module Files        | camelCase              | moduleA/index.ts       |\r\n| Type Files          | camelCase              | types.ts               |\r\n| Module Types        | PascalCase             | ModuleA, ModuleAA      |\r\n| State Interface     | PascalCase + State     | ModuleAState           |\r\n| Getters Interface   | PascalCase + Getters   | ModuleAGetters         |\r\n| Actions Interface   | PascalCase + Actions   | ModuleAActions         |\r\n| Mutations Interface | PascalCase + Mutations | ModuleAMutations       |\r\n| Action Names        | camelCase              | fetchData, updateUser  |\r\n| Mutation Names      | SCREAMING_SNAKE_CASE   | SET_DATA, UPDATE_USER  |\r\n| Getter Names        | camelCase              | isLoggedIn, totalCount |\r\n\r\n## Project Store Structure\r\n\r\n```text\r\nsrc/\r\n└── store/\r\n    ├── index.ts                    # Root store configuration\r\n    └── modules/\r\n        ├── moduleA/\r\n        │   ├── index.ts            # ModuleA definition\r\n        │   ├── types.ts            # ModuleA type interfaces\r\n        │   └── modules/\r\n        │       └── moduleAA/\r\n        │           ├── index.ts    # ModuleAA definition\r\n        │           ├── types.ts    # ModuleAA type interfaces\r\n        │           └── modules/\r\n        │               └── moduleAAA/\r\n        │                   ├── index.ts    # ModuleAAA definition\r\n        │                   └── types.ts    # ModuleAAA type interfaces\r\n        └── moduleB/\r\n             ├── index.ts    # ModuleB definition\r\n             ├── types.ts    # ModuleB type interfaces\r\n             └── modules/\r\n                 └── moduleBB/\r\n                     ├── index.ts    # ModuleBB definition\r\n                     ├── types.ts    # ModuleBB type interfaces\r\n                     └── modules/\r\n                         └── moduleBBB/\r\n                             ├── index.ts    # ModuleBBB definition\r\n                             └── types.ts    # ModuleBBB type interfaces\r\n```\r\n\r\n### Best Practices for Structure\r\n\r\n1. Keep modules focused - Each module should handle a single feature/domain\r\n2. Consistent nesting - Follow the same structure pattern throughout\r\n3. Type-first approach - Define types before implementation\r\n4. Separate concerns - Split large modules into sub-modules\r\n5. Avoid circular dependencies - Use type-only imports when needed\r\n6. Document module purpose - Add comments explaining module responsibilities\r\n\r\n### Module Hierarchy\r\n\r\nThe module tree structure for this example:\r\n\r\n- `root` → `moduleA` → `moduleAA` → `moduleAAA`\r\n- `root` → `moduleB` → `moduleBB` → `moduleBBB`\r\n\r\n### Module Communication Pattern\r\n\r\n```text\r\n      ┌────────────────┐\r\n      │      Root      │\r\n      ├────────────────┤\r\n      │                │\r\n      ▼                ▼\r\n   moduleA          moduleB\r\n      │                │\r\n      ▼                ▼\r\n  moduleAA         moduleBB\r\n      │                │\r\n      ▼                ▼\r\n  moduleAAA        moduleBBB\r\n```\r\n\r\n### File Organization Patterns\r\n\r\n#### Pattern 1: Separate Type Files (Recommended)\r\n\r\n```text\r\nmoduleA/\r\n├── types.ts # Type definitions\r\n├── state.ts # State definition\r\n├── getters.ts # Getters\r\n├── actions.ts # Actions\r\n├── mutations.ts # Mutations\r\n└── index.ts # Module assembly\r\n```\r\n\r\n#### Pattern 2: Single File Module (Simple Modules)\r\n\r\n```text\r\nstore/\r\n├── features/\r\n│ ├── authentication/\r\n│ ├── shopping-cart/\r\n│ └── user-profile/\r\n└── shared/\r\n├── types.ts\r\n└── utils.ts\r\n```\r\n\r\n## Quick Start\r\n\r\n### Understanding the \\_Module Type Parameters\r\n\r\nThe `_Module` type is the core of the type system. It accepts 7 parameters that define every aspect of your module:\r\n\r\n```ts\r\ninterface _Module<\r\n  ModuleName extends ModuleNames,           // 1. Module identifier\r\n  Mode extends ModuleMode,                  // 2. 'isolated' or 'default'\r\n  State extends StoreStateGeneric,          // 3. State type\r\n  Getters extends StoreGettersGeneric,      // 4. Getters type\r\n  Actions extends StoreActionsGeneric,      // 5. Actions type\r\n  Mutations extends StoreMutationsGeneric,  // 6. Mutations type\r\n  Modules = undefined                       // 7. Child modules (optional)\r\n>\r\n```\r\n\r\n**Parameter 1: ModuleName**\r\n\r\nThe module's unique identifier. Must match the key used when registering the module.\r\n\r\n```ts\r\ntype MyModule = _Module<\r\n  'myModule', // Must be a string literal, not a variable\r\n  ...\r\n>;\r\n\r\n// code\r\nconst myModuleInstance: MyModule = { ... }\r\n\r\n// When registering:\r\nconst parentModule: ParentModule = {\r\n  modules: {\r\n    myModule: myModuleInstance // Key must match 'myModule'\r\n  }\r\n}\r\n```\r\n\r\n**Parameter 2: Mode**\r\n\r\nDetermines if the module is namespaced or not:\r\n\r\n- `'isolated'` → `{ namespaced: true }` (creates namespace)\r\n- `'default'` → `{ namespaced: false }` (no namespace)\r\n\r\n```ts\r\n// Isolated module - creates namespace 'userModule/'\r\ntype UserModule = _Module<'userModule', 'isolated', ...>;\r\n\r\n// code\r\nconst userModule: UserModule = {\r\n  namespaced: true,\r\n  ...\r\n}\r\n\r\n// Default module - no namespace, merges with parent\r\ntype HelperModule = _Module<'helperModule', 'default', ...>;\r\n\r\n// code\r\nconst helperModule: HelperModule = {\r\n  namespaced: false,\r\n  ...\r\n}\r\n```\r\n\r\n**Parameter 3: State**\r\n\r\nDefine your state structure as an object type:\r\n\r\n```ts\r\n// [1] Simple state\r\ntype SimpleModule = _Module<\r\n  'simpleModule',\r\n  'isolated',\r\n  { count: number }, // State with single property\r\n  ...\r\n>;\r\n\r\n// code\r\nconst simpleModule: SimpleModule = {\r\n  namespaced: true,\r\n  state: { count: 5 },\r\n  ...\r\n}\r\n\r\n// [2] Complex state\r\ninterface UserState {\r\n  currentUser: User | null;\r\n  users: User[];\r\n  loading: boolean;\r\n  filters: {\r\n    role: string;\r\n    status: 'active' | 'inactive';\r\n  };\r\n}\r\n\r\ntype UserModule = _Module<\r\n  'userModule',\r\n  'isolated',\r\n  UserState, // Use interface for complex state\r\n  ...\r\n>;\r\n\r\n// code\r\nconst userModule: UserModule = {\r\n  namespaced: true,\r\n  state: {\r\n    currentUser: { ... };\r\n    users: [...];\r\n    loading: true;\r\n    filters: {\r\n      role: 'admin';\r\n      status: 'active';\r\n    };\r\n  },\r\n  ...\r\n}\r\n```\r\n\r\n**Parameter 4: Getters**\r\n\r\nDefine getter return types as key-value pairs:\r\n\r\n```ts\r\n// Simple getters\r\ntype Module1 = _Module<\r\n  'module1',\r\n  'isolated',\r\n  { count: number },\r\n  {\r\n    doubleCount: number;        // Simple return type\r\n    isPositive: boolean;        // Boolean return\r\n    formattedCount: (prefix: string) => string;     // Parameterized getter\r\n  },\r\n  ...\r\n>;\r\n\r\n// code\r\nconst module1: Module1 = {\r\n  namespace: true,\r\n  { count: 7 },\r\n  {\r\n    doubleCount(state) {\r\n      return state.count * 2;\r\n    },\r\n    isPositive(state) {\r\n      return state.count > 0;\r\n    },\r\n    formattedCount: (state) => (prefix: string) => `${prefix}${state.count}`;\r\n  },\r\n  ...\r\n}\r\n```\r\n\r\n**Parameter 5: Actions**\r\n\r\nUse `StoreActionRecord<Payload, Return, RootLevel>` to define actions:\r\n\r\n```ts\r\ninterface StoreActionRecord<\r\n  Payload,\r\n  Return,\r\n  RootLevel extends boolean = false\r\n> {\r\n  payload: Payload; // the action payload type\r\n  return: Return; // the action return type\r\n  root: RootLevel; // if true the action will be a root level action\r\n}\r\n```\r\n\r\n```ts\r\ntype MyModule = _Module<\r\n  'myModule',\r\n  'isolated',\r\n  State,\r\n  Getters,\r\n  {\r\n    // Simple action - no payload - no return\r\n    fetchData: StoreActionRecord<null, void>;\r\n\r\n    // Action with payload\r\n    updateUser: StoreActionRecord<\r\n      { id: string; data: Partial<User> },  // Payload type\r\n      User                                  // Return type\r\n    >;\r\n\r\n    // Root-level action (accessible globally)\r\n    globalNotify: StoreActionRecord<\r\n      { message: string },\r\n      void,\r\n      true  // Root level flag\r\n    >;\r\n  },\r\n  ...\r\n>;\r\n\r\n// code\r\nconst myModule: MyModule = {\r\n  namespaced: true,\r\n  { ... }, // State\r\n  { ... }, // Getters\r\n  {\r\n    fetchData({ dipatch }) {\r\n      // Calling the globalNotify action with root level flag\r\n      dipatch('globalNotify', { message: 'msg' }, { root: true }); // ✅\r\n      // Calling it like this won't work\r\n      dipatch('globalNotify', { message: 'msg' }); // ❌\r\n      // You can use this which pointing to the store instance\r\n      this.state // root level state\r\n    },\r\n\r\n    updateUser(ctx, payload) {\r\n      return { ... }; // User\r\n    }\r\n\r\n    // Must define it like this or you will git a TypeScript error\r\n    globalNotify: {\r\n      root: true,\r\n      handler: (ctx, payload) => {}\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n**Parameter 6: Mutations**\r\n\r\nMutations are simple key-value pairs with payload types:\r\n\r\n```ts\r\ntype MyModule = _Module<\r\n  'myModule',\r\n  'isolated',\r\n  State,\r\n  Getters,\r\n  Actions,\r\n  {\r\n    // Use SCREAMING_SNAKE_CASE for mutation names\r\n    SET_LOADING: { loading: boolean };\r\n    UPDATE_USER: { user: User };\r\n    ADD_ITEM: { item: Item };\r\n    DELETE_ITEM: { id: string };\r\n    RESET_STATE: null;  // No payload\r\n  },\r\n  ...\r\n>;\r\n\r\n// code\r\nconst myModule: MyModule = {\r\n  namespaced: true,\r\n  { ... },\r\n  { ... },\r\n  { ... },\r\n  {\r\n    SET_LOADING(state, payload) {\r\n      console.log(payload.loading);\r\n    }\r\n    ...\r\n  }\r\n}\r\n```\r\n\r\n**Parameter 7: Modules (Child Modules)**\r\n\r\nDefine nested modules or use `undefined` for leaf modules:\r\n\r\n```ts\r\n// Leaf module (no children)\r\ntype LeafModule = _Module<\r\n  \"leaf\",\r\n  \"isolated\",\r\n  State,\r\n  Getters,\r\n  Actions,\r\n  Mutations,\r\n  undefined // No child modules\r\n>;\r\n\r\n// Parent module with children\r\ntype ParentModule = _Module<\r\n  \"parent\",\r\n  \"isolated\",\r\n  State,\r\n  Getters,\r\n  Actions,\r\n  Mutations,\r\n  {\r\n    childA: ChildModuleA; // Child module type\r\n    childB: ChildModuleB; // Another child\r\n    optionalChild?: OptionalModule; // Optional child module (used with module registed with registerModule() API at runtime)\r\n  }\r\n>;\r\n```\r\n\r\n**Empty Parameter**\r\n\r\nIf any parameter of the 7 parameters is empty and you won't assign any data to it\r\nall you have to do is just assign a type `never` to in the type declaration.\r\n\r\n```ts\r\ntype ModuleWithNoGetters = _Module<\r\n  'moduleWithNoGetters',\r\n  'isolated',\r\n  State,\r\n  never, // Empty getters\r\n  Actions,\r\n  Mutations,\r\n  Modules\r\n>;\r\n\r\nconst moduleWithNoGetters: ModuleWithNoGetters = {\r\n  namespaced: true,\r\n  state: { ... },\r\n  // no Getters\r\n  Mutations: { ... },\r\n  actions: { ... },\r\n  modules: { ... },\r\n}\r\n```\r\n\r\n---\r\n\r\n### Setup Step By Step\r\n\r\n**_→ You need to make the type system see your modules tree types 👀_**\r\n\r\nThe key to making the Vuex type system work is proper module registration in the type declarations. Follow these steps to set up your typed store:\r\n\r\n#### Step 1: Define Your Module Types\r\n\r\nStart from the deepest modules and work your way up to the root:\r\n\r\n`root` → `moduleA` → `moduleAA` → `moduleAAA`\r\n\r\n```ts\r\n// src/store/modules/moduleA/modules/moduleAA/modules/moduleAAA/types.ts\r\nimport type { _Module, StoreActionRecord } from \"strict-vuex\";\r\n\r\nexport type ModuleAAA = _Module<\r\n  \"moduleAAA\",\r\n  \"isolated\",\r\n  { valueAAA: string },\r\n  { getterAAA: string },\r\n  { actionAAA: StoreActionRecord<{ data: string }, void> },\r\n  { SET_AAA: { value: string } },\r\n  undefined // No child modules\r\n>;\r\n```\r\n\r\n```ts\r\n// src/store/modules/moduleA/modules/moduleAA/types.ts\r\nimport type { ModuleAAA } from \"./modules/moduleAAA/types\";\r\n\r\nexport type ModuleAA = _Module<\r\n  \"moduleAA\",\r\n  \"default\",\r\n  { valueAA: number },\r\n  { getterAA: number },\r\n  { actionAA: StoreActionRecord<{ val: number }, string> },\r\n  { SET_AA: { value: number } },\r\n  { moduleAAA: ModuleAAA } // Include child module type\r\n>;\r\n```\r\n\r\n```ts\r\n// src/store/modules/moduleA/types.ts\r\nimport type { ModuleAA } from \"./modules/moduleAA/types\";\r\n\r\nexport type ModuleA = _Module<\r\n  \"moduleA\",\r\n  \"isolated\",\r\n  { valueA: boolean },\r\n  { getterA: string },\r\n  { actionA: StoreActionRecord<{ id: string }, boolean> },\r\n  { SET_A: { value: boolean } },\r\n  { moduleAA: ModuleAA } // Include child module type\r\n>;\r\n```\r\n\r\n#### Step 2: Register Modules in Type Declaration (CRITICAL STEP)\r\n\r\nThis is the most important step 🔥 - Register your modules at the `VuexStoreRootModules` interface in to actualy make the system see you types - This is the step when the intellisense magical effect will start:\r\n\r\n**Important Note**: You have to do this step before you start write you actual modules code in [step 3](#step-3-implement-your-modules)\r\n\r\nAnd you can use the next interfaces to define the root data if you want too:\r\n\r\n`VuexStoreRootState`, `VuexStoreRootGetters`, `VuexStoreRootActions`, `VuexStoreRootMutations`\r\n\r\nAnd you can do this by simply extending the `strict-vuex` module in the app and i choose to extend it in the `src/store/types.d.ts` file which contains the root level data:\r\n\r\n```ts\r\n// src/store/index.ts\r\nimport { moduleA } from \"@/store/modules/moduleA\";\r\nimport { moduleB } from \"@/store/modules/moduleB\";\r\n\r\nconst store = createStore({\r\n  modules: { moduleA, moduleB },\r\n});\r\n```\r\n\r\n```ts\r\n// src/store/types.d.ts\r\nimport type { ModuleA } from \"@/store/modules/moduleA/types\";\r\nimport type { ModuleB } from \"@/store/modules/moduleB/types\";\r\n\r\ndeclare module \"strict-vuex\" {\r\n  // Root level configurations\r\n  interface VuexStoreRootState {\r\n    rootValue: string;\r\n  }\r\n\r\n  interface VuexStoreRootGetters {\r\n    rootGetter: string;\r\n  }\r\n\r\n  interface VuexStoreRootActions {\r\n    rootAction: StoreActionRecord<{ data: string }, void>;\r\n  }\r\n\r\n  interface VuexStoreRootMutations {\r\n    SET_ROOT: { value: string };\r\n  }\r\n\r\n  // ⚠️ CRITICAL: Register your root modules here (only root modules)\r\n  // For example if we have the next module tree:\r\n  // root -> moduleA -> moduleAA -> moduleAAA\r\n  // root -> moduleB -> moduleBB -> moduleBBB\r\n  // So, you only need to define the root modules only like this\r\n  // This is the step when the intellisense magical effect will start\r\n  interface VuexStoreRootModules {\r\n    moduleA: ModuleA; // The key must match the module name in store\r\n    moduleB: ModuleB;\r\n  }\r\n}\r\n```\r\n\r\n#### Step 3: Implement Your Modules\r\n\r\nStarting from this step you will find that vuex system is fully typed and TypeScipt will force you to write the right code as your types defined before 😎🥲\r\n\r\n```ts\r\n// src/store/modules/moduleA/modules/moduleAA/modules/moduleAAA/index.ts\r\nimport type { ModuleAAA } from \"./types\";\r\n\r\nconst moduleAAA: ModuleAAA = {\r\n  namespaced: true, // isolated = true\r\n  state: {\r\n    valueAAA: \"AAA\",\r\n  },\r\n  getters: {\r\n    getterAAA: (state) => state.valueAAA,\r\n  },\r\n  actions: {\r\n    actionAAA: async ({ commit }, payload) => {\r\n      commit(\"SET_AAA\", { value: payload.data });\r\n    },\r\n  },\r\n  mutations: {\r\n    SET_AAA(state, payload) {\r\n      state.valueAAA = payload.value;\r\n    },\r\n  },\r\n};\r\n\r\nexport default moduleAAA;\r\n\r\n// And just do the same for other modules...\r\n```\r\n\r\n#### Step 4: Create the Store\r\n\r\n```ts\r\n// src/store/index.ts\r\nimport { createStore } from \"vuex\";\r\nimport moduleA from \"./modules/moduleA\";\r\nimport moduleB from \"./modules/moduleB\";\r\n\r\nconst store = createStore({\r\n  state: {\r\n    rootValue: \"root\",\r\n  },\r\n  getters: {\r\n    rootGetter: (state) => state.rootValue,\r\n  },\r\n  actions: {\r\n    rootAction: async ({ commit }, payload) => {\r\n      commit(\"SET_ROOT\", { value: payload.data });\r\n    },\r\n  },\r\n  mutations: {\r\n    SET_ROOT(state, payload) {\r\n      state.rootValue = payload.value;\r\n    },\r\n  },\r\n  modules: {\r\n    moduleA, // Key must match VuexStoreRootModules interface\r\n    moduleB,\r\n  },\r\n});\r\n\r\nexport default store;\r\n```\r\n\r\n#### Step 5: Install The Store Instance As A Plugin\r\n\r\n```ts\r\n// src/main.ts\r\nimport { createApp } from 'vue';\r\nimport vuexStore from `./store`;\r\nconst app = createApp({ ... });\r\n\r\napp.use(vuexStore);\r\n```\r\n\r\n#### Step 6: Verify Type System is Working\r\n\r\nThe type system will now provide full IntelliSense - and you will find that it's so easy to use vuex\r\n\r\n```ts\r\nstore.state.rootValue; // string\r\nstore.state.moduleA.valueA; // boolean\r\nstore.state.moduleA.moduleAA.valueAA; // number\r\nstore.state.moduleA.moduleAA.moduleAAA.valueAAA; // string\r\n\r\n// Namespaced access for isolated modules\r\nstore.getters[\"moduleA/getterA\"]; // string\r\nstore.getters[\"moduleA/getterAA\"]; // number (default module, no namespace)\r\nstore.getters[\"moduleA/moduleAAA/getterAAA\"]; // string\r\n\r\n// Actions with proper payload types\r\nstore.dispatch(\"rootAction\", { data: \"test\" });\r\nstore.dispatch(\"moduleA/actionA\", { id: \"123\" });\r\nstore.dispatch(\"moduleA/moduleAAA/actionAAA\", { data: \"test\" });\r\n```\r\n\r\n### How the Type System Works\r\n\r\n- **Module Definition**: Each module is typed with `_Module` generic\r\n- **Tree Building**: Child modules are included in parent's type definition\r\n- **Registration**: Root modules MUST be registered in `VuexStoreRootModules`\r\n- **Resolution**: The type system automatically resolves the entire tree\r\n- **IntelliSense**: Full autocomplete and type checking throughout your app\r\n\r\n### Common Mistakes to Avoid\r\n\r\n- ❌ Forgetting to register modules in `VuexStoreRootModules`\r\n- ❌ Module key mismatch between type and implementation\r\n- ❌ Wrong module name in \\_Module first parameter\r\n- ❌ Missing child module types in parent definition\r\n\r\n## Usage\r\n\r\n### Direct Store Access\r\n\r\nDirect store access provides fully typed access to state, getters, actions, and mutations throughout your application.\r\n\r\n**OPTIONS API**\r\n\r\nShort example for Options API usage\r\n\r\n```html\r\n<script lang=\"ts\">\r\n  import { defineComponent } from \"vue\";\r\n  import { mapState, mapActions, mapMutations } from \"vuex\";\r\n\r\n  export default defineComponent({\r\n    computed: {\r\n      moduleBVal: () => this.$store.state.moduleA.moduleB.value,\r\n    },\r\n    methods: {\r\n      increment(value: number) {\r\n        await this.$store.dispatch(\"moduleA/increment\", { value });\r\n      },\r\n      resetCount() {\r\n        this.$store.commit(\"moduleA/RESET_COUNT\");\r\n      },\r\n    },\r\n  });\r\n</script>\r\n\r\n<template>\r\n  <div>\r\n    <p>{{ $store.state.moduleA.count }}</p>\r\n    <p>{{ moduleBVal }}</p>\r\n    <p>{{ $store.getters['moduleA/doubleCount'] }}</p>\r\n    <button @click=\"increment(10)\">+</button>\r\n    <button @click=\"resetCount\">0</button>\r\n  </div>\r\n</template>\r\n```\r\n\r\n**COMPOSITION API**\r\n\r\nShort example for Composition API usage (recommended):\r\n\r\n```html\r\n<script setup lang=\"ts\">\r\n  import { computed } from \"vue\";\r\n  import { useStore } from \"vuex\";\r\n\r\n  const store = useStore();\r\n  const rootValue = computed(() => store.state.rootValue);\r\n  const doActionA = (p: any) => store.dispatch(\"moduleA/actionA\", p);\r\n</script>\r\n\r\n<template>\r\n  <div>{{ rootValue }}</div>\r\n</template>\r\n```\r\n\r\n**Type Safety in Both APIs**\r\n\r\n```ts\r\n// ✅ TypeScript provides full IntelliSense in both APIs\r\n\r\n// Options API\r\nthis.$store.state.moduleA.? // Autocomplete shows: valueA, moduleAA\r\nthis.$store.dispatch('?') // Autocomplete shows available actions\r\n\r\n// Composition API\r\nstore.state.moduleA.? // Autocomplete shows: valueA, moduleAA\r\nstore.dispatch('?') // Autocomplete shows available actions\r\n\r\n// ❌ TypeScript catches errors at compile time\r\n\r\n// Options API errors\r\nthis.$store.state.moduleA.wrongProperty; // Error: Property doesn't exist\r\nthis.$store.dispatch('wrongAction', {}); // Error: Action doesn't exist\r\n\r\n// Composition API errors\r\nstore.state.moduleA.wrongProperty; // Error: Property doesn't exist\r\nstore.dispatch('wrongAction', {}); // Error: Action doesn't exist\r\n```\r\n\r\n---\r\n\r\n### Using Mappers in Components\r\n\r\nMappers provide a clean way to bind store state, getters, actions, and mutations to component properties and methods.\r\n\r\n**OPTIONS API**\r\n\r\nThis concise Options API example demonstrates common mapper usages:\r\n\r\n```html\r\n<script lang=\"ts\">\r\n  import { defineComponent } from \"vue\";\r\n  import { mapState, mapActions, mapMutations } from \"vuex\";\r\n\r\n  export default defineComponent({\r\n    computed: {\r\n      ...mapState([\"rootValue\"]),\r\n      ...mapState(\"moduleA\", { aValue: \"valueA\" }),\r\n    },\r\n    methods: {\r\n      ...mapActions([\"rootAction\"]),\r\n      ...mapActions(\"moduleA\", [\"actionA\"]),\r\n      ...mapMutations([\"SET_ROOT\", \"moduleA/SET_A\"]),\r\n    },\r\n  });\r\n</script>\r\n\r\n<template>\r\n  <div>\r\n    <p>{{ rootValue }}</p>\r\n    <p>{{ aValue }}</p>\r\n    <button @click=\"rootAction({ data: 'ok' })\">Action</button>\r\n  </div>\r\n</template>\r\n```\r\n\r\n**COMPOSITION API**\r\n\r\nNo need to use mappers in Composition API\r\n\r\n```html\r\n<script setup lang=\"ts\">\r\n  import { computed } from \"vue\";\r\n  import { useStore } from \"vuex\";\r\n\r\n  const store = useStore();\r\n  const rootValue = computed(() => store.state.rootValue);\r\n  const doActionA = (p: any) => store.dispatch(\"moduleA/actionA\", p);\r\n</script>\r\n\r\n<template>\r\n  <div>{{ rootValue }}</div>\r\n</template>\r\n```\r\n\r\n---\r\n\r\n### Namespaced Helpers\r\n\r\nCreate typed helper functions for a specific namespaced module using `createNamespacedHelpers`. This is useful when you need to access the same module frequently in a component.\r\n\r\n**Basic Usage**\r\n\r\n```ts\r\nimport { createNamespacedHelpers } from \"vuex\";\r\n\r\n// Create helpers for a specific namespace\r\nconst { mapState, mapGetters, mapActions, mapMutations } =\r\n  createNamespacedHelpers(\"moduleA\");\r\n\r\nexport default {\r\n  computed: {\r\n    // All mappers are scoped to 'moduleA'\r\n    ...mapState([\"a\"]), // maps to moduleA state\r\n    ...mapGetters([\"getterA\"]), // maps to moduleA getters\r\n  },\r\n  methods: {\r\n    ...mapActions([\"actionA\"]), // maps to moduleA actions\r\n    ...mapMutations([\"mutationA\"]), // maps to moduleA mutations\r\n  },\r\n};\r\n```\r\n\r\n**With Nested Modules**\r\n\r\n```ts\r\n// For deeply nested modules, use the full path\r\nconst { mapState, mapActions } = createNamespacedHelpers(\"moduleA/moduleAA\");\r\n\r\nexport default {\r\n  computed: {\r\n    ...mapState([\"aa\"]), // moduleA/moduleAA state\r\n  },\r\n  methods: {\r\n    ...mapActions([\"actionAA\"]), // moduleA/moduleAA actions\r\n  },\r\n};\r\n```\r\n\r\n**Array and Object Syntax**\r\n\r\n```ts\r\nconst { mapState, mapActions } = createNamespacedHelpers(\"moduleA\");\r\n\r\nexport default {\r\n  computed: {\r\n    // Array syntax - uses same name\r\n    ...mapState([\"a\"]),\r\n\r\n    // Object syntax - rename properties\r\n    ...mapState({\r\n      moduleAValue: \"a\",\r\n      customName: (state) => state.a.toUpperCase(),\r\n    }),\r\n  },\r\n  methods: {\r\n    // Array syntax\r\n    ...mapActions([\"actionA\"]),\r\n\r\n    // Object syntax - rename or use custom functions\r\n    ...mapActions({\r\n      doActionA: \"actionA\",\r\n      customAction: (dispatch, payload) => {\r\n        return dispatch(\"actionA\", payload);\r\n      },\r\n    }),\r\n  },\r\n};\r\n```\r\n\r\n**Benefits**\r\n\r\n- **Less repetition**: No need to prefix every mapper with the namespace\r\n- **Full type safety**: All mappers are typed to the specific module\r\n- **Cleaner code**: Easier to read when working with a single module extensively\r\n\r\n---\r\n\r\n### Root Actions in Namespaced Modules\r\n\r\nRoot actions allow namespaced modules to expose actions globally, making them accessible without the namespace prefix.\r\n\r\n**Defining Root Actions**\r\n\r\n```ts\r\n// src/store/modules/moduleA/modules/moduleAA/modules/moduleAAA/types.ts\r\nimport type { _Module, StoreActionRecord } from \"strict-vuex\";\r\n\r\nexport type ModuleAAA = _Module<\r\n  \"moduleAAA\",\r\n  \"isolated\",\r\n  { valueAAA: string },\r\n  { getterAAA: string },\r\n  {\r\n    // Local action - requires namespace\r\n    localActionAAA: StoreActionRecord<{ data: string }, void>;\r\n\r\n    // Root action - accessible globally\r\n    globalActionAAA: StoreActionRecord<{ message: string }, boolean, true>; // true = root\r\n\r\n    // Another root action\r\n    notifyAllModules: StoreActionRecord<\r\n      { alert: string; level: \"info\" | \"error\" },\r\n      void,\r\n      true\r\n    >;\r\n  },\r\n  {\r\n    SET_AAA: { value: string };\r\n    NOTIFY: { message: string };\r\n  },\r\n  undefined\r\n>;\r\n```\r\n\r\n**Implementing Root Actions**\r\n\r\n```ts\r\n// src/store/modules/moduleA/modules/moduleAA/modules/moduleAAA/index.ts\r\nimport type { ModuleAAA } from \"./types\";\r\n\r\nconst moduleAAA: ModuleAAA = {\r\n  namespaced: true,\r\n\r\n  state: {\r\n    valueAAA: \"initial\",\r\n  },\r\n\r\n  getters: {\r\n    getterAAA: (state) => state.valueAAA,\r\n  },\r\n\r\n  actions: {\r\n    // Local action - simple function\r\n    localActionAAA: async ({ commit }, payload) => {\r\n      commit(\"SET_AAA\", { value: payload.data });\r\n    },\r\n\r\n    // Root action - MUST be an object with root: true\r\n    globalActionAAA: {\r\n      root: true, // Required for root actions\r\n      handler: async (\r\n        { commit, dispatch, rootState, rootGetters },\r\n        payload\r\n      ) => {\r\n        // Can access root state and getters directly\r\n        console.log(\"Root state:\", rootState.rootValue);\r\n        console.log(\"Root getter:\", rootGetters.rootGetter);\r\n\r\n        // Can dispatch other root actions without { root: true }\r\n        await dispatch(\"rootAction\", { data: \"from globalActionAAA\" });\r\n\r\n        // Can commit root mutations without { root: true }\r\n        commit(\"SET_ROOT\", { value: \"updated from moduleAAA\" });\r\n\r\n        // Can still commit local mutations\r\n        commit(\r\n          \"moduleA/moduleAAA/SET_AAA\",\r\n          { value: payload.message },\r\n          { root: true }\r\n        );\r\n\r\n        return true;\r\n      },\r\n    },\r\n\r\n    // Another root action\r\n    notifyAllModules: {\r\n      root: true,\r\n      handler: async ({ dispatch, commit }, payload) => {\r\n        // Notify all modules\r\n        await dispatch(\"moduleA/handleNotification\", payload, { root: true });\r\n        await dispatch(\"moduleB/handleNotification\", payload, { root: true });\r\n\r\n        // Update global notification state\r\n        commit(\"SET_GLOBAL_NOTIFICATION\", payload, { root: true });\r\n      },\r\n    },\r\n  },\r\n\r\n  mutations: {\r\n    SET_AAA(state, payload) {\r\n      state.valueAAA = payload.value;\r\n    },\r\n    NOTIFY(state, payload) {\r\n      console.log(\"Notification:\", payload.message);\r\n    },\r\n  },\r\n};\r\n\r\nexport default moduleAAA;\r\n```\r\n\r\n**Accessing Root Actions**\r\n\r\n```ts\r\n// Options API\r\nexport default {\r\n  methods: {\r\n    async handleActions() {\r\n      // Root action - no namespace needed\r\n      const result = await this.$store.dispatch(\"globalActionAAA\", {\r\n        message: \"Hello from anywhere\",\r\n      });\r\n\r\n      // Also accessible with full path + root option\r\n      await this.$store.dispatch(\r\n        \"moduleA/moduleAAA/globalActionAAA\",\r\n        { message: \"Hello\" },\r\n        { root: true }\r\n      );\r\n\r\n      // Local action - requires namespace\r\n      await this.$store.dispatch(\"moduleA/moduleAAA/localActionAAA\", {\r\n        data: \"test\",\r\n      });\r\n\r\n      // Another root action\r\n      await this.$store.dispatch(\"notifyAllModules\", {\r\n        alert: \"System update\",\r\n        level: \"info\",\r\n      });\r\n    },\r\n  },\r\n};\r\n\r\n// Composition API\r\nconst store = useStore();\r\n\r\n// Root action - no namespace\r\nawait store.dispatch(\"globalActionAAA\", { message: \"Hello\" });\r\n\r\n// Local action - with namespace\r\nawait store.dispatch(\"moduleA/moduleAAA/localActionAAA\", { data: \"test\" });\r\n\r\n// Root action from deeply nested module\r\nawait store.dispatch(\"notifyAllModules\", {\r\n  alert: \"Update\",\r\n  level: \"error\",\r\n});\r\n```\r\n\r\n**Root Actions with Mappers**\r\n\r\n```ts\r\n<script lang=\"ts\">\r\nimport { mapActions } from 'vuex';\r\n\r\nexport default {\r\n  methods: {\r\n    // Map root actions directly (no namespace)\r\n    ...mapActions([\r\n      'globalActionAAA',  // Root action from moduleAAA\r\n      'notifyAllModules', // Another root action\r\n      'rootAction'        // Root level action\r\n    ]),\r\n\r\n    // Map from namespace (for root actions, need special handling)\r\n    ...mapActions('moduleA/moduleAAA', [\r\n      'localActionAAA',   // Local action\r\n      'globalActionAAA'   // Root action (requires { root: true } when called)\r\n    ]),\r\n\r\n    async handleMappedActions() {\r\n      // Root actions mapped globally\r\n      await this.globalActionAAA({ message: 'test' });\r\n      await this.notifyAllModules({ alert: 'info', level: 'info' });\r\n\r\n      // Local action from namespace mapping\r\n      await this.localActionAAA({ data: 'test' });\r\n\r\n      // Root action from namespace mapping - needs { root: true }\r\n      await this.globalActionAAA(\r\n        { message: 'test' },\r\n        { root: true } // Required when mapped from namespace\r\n      );\r\n    }\r\n  }\r\n};\r\n</script>\r\n```\r\n\r\n**Root Actions in Action Context**\r\n\r\n```ts\r\n// In any module action\r\nconst someModule: Module = {\r\n  actions: {\r\n    someAction: async ({ dispatch }) => {\r\n      // Dispatch root action from moduleAAA\r\n      await dispatch(\"globalActionAAA\", { message: \"test\" }, { root: true });\r\n\r\n      // Or without root flag since it's a root action\r\n      await dispatch(\"globalActionAAA\", { message: \"test\" });\r\n\r\n      // Dispatch local action from another module\r\n      await dispatch(\r\n        \"moduleA/moduleAAA/localActionAAA\",\r\n        { data: \"test\" },\r\n        { root: true }\r\n      );\r\n    },\r\n  },\r\n};\r\n```\r\n\r\n**Important Rules for Root Actions**\r\n\r\n```ts\r\n// ✅ CORRECT: Root action as object\r\nglobalAction: {\r\n  root: true,\r\n  handler: async (context, payload) => {\r\n    // Implementation\r\n  }\r\n}\r\n\r\n// ❌ WRONG: Root action as function\r\nglobalAction: async (context, payload) => {\r\n  // This won't work as root action\r\n}\r\n\r\n// ✅ CORRECT: Type definition with root flag\r\nglobalAction: StoreActionRecord<PayloadType, ReturnType, true>\r\n\r\n// ❌ WRONG: Missing root flag in type\r\nglobalAction: StoreActionRecord<PayloadType, ReturnType> // defaults to false\r\n```\r\n\r\n---\r\n\r\n### Dynamic Module Registration\r\n\r\nThe type system provides full support for registering and unregistering modules at runtime with type-safe paths.\r\n\r\n**Module Registration Basics**\r\n\r\n```ts\r\n// Register top-level modules (depth 0)\r\nstore.registerModule(\"moduleC\", moduleCInstance);\r\nstore.registerModule([\"moduleC\"], moduleCInstance); // Array notation also works\r\n\r\n// Register nested modules (depth 1+)\r\nstore.registerModule([\"moduleA\", \"moduleAC\"], moduleACInstance);\r\nstore.registerModule([\"moduleB\", \"moduleBC\"], moduleBCInstance);\r\n\r\n// Register deeply nested modules\r\nstore.registerModule([\"moduleA\", \"moduleAA\", \"moduleAAC\"], moduleAACInstance);\r\nstore.registerModule([\"moduleB\", \"moduleBB\", \"moduleBBC\"], moduleBBCInstance);\r\n\r\n// ❌ Wrong: Can't use string for nested modules\r\nstore.registerModule(\"moduleA/moduleAC\", moduleACInstance); // Error\r\nstore.registerModule(\"moduleA.moduleAC\", moduleACInstance); // Error\r\n```\r\n\r\n**Dynamic Module Definition**\r\n\r\n```ts\r\n// Define a dynamic module type\r\nimport type { _Module, StoreActionRecord } from \"strict-vuex\";\r\n\r\nexport type DynamicModuleC = _Module<\r\n  \"moduleC\",\r\n  \"isolated\",\r\n  { valueC: string; dynamicData: any[] },\r\n  { getterC: string; dataCount: number },\r\n  {\r\n    loadDynamicData: StoreActionRecord<{ source: string }, any[]>;\r\n    clearData: StoreActionRecord<null, void>;\r\n  },\r\n  {\r\n    SET_C: { value: string };\r\n    SET_DYNAMIC_DATA: { data: any[] };\r\n  },\r\n  undefined // No children initially\r\n>;\r\n\r\nconst createDynamicModule = (initialValue: string): DynamicModuleC => ({\r\n  namespaced: true,\r\n  state: {\r\n    valueC: initialValue,\r\n    dynamicData: [],\r\n  },\r\n  getters: {\r\n    getterC: (state) => state.valueC,\r\n    dataCount: (state) => state.dynamicData.length,\r\n  },\r\n  actions: {\r\n    loadDynamicData: async ({ commit }, payload) => {\r\n      const data = await fetchData(payload.source);\r\n      commit(\"SET_DYNAMIC_DATA\", { data });\r\n      return data;\r\n    },\r\n    clearData: async ({ commit }) => {\r\n      commit(\"SET_DYNAMIC_DATA\", { data: [] });\r\n    },\r\n  },\r\n  mutations: {\r\n    SET_C(state, payload) {\r\n      state.valueC = payload.value;\r\n    },\r\n    SET_DYNAMIC_DATA(state, payload) {\r\n      state.dynamicData = payload.data;\r\n    },\r\n  },\r\n});\r\n```\r\n\r\n**Registering Modules at Runtime**\r\n\r\n```ts\r\n// Options API\r\nexport default {\r\n  methods: {\r\n    async loadFeatureModule() {\r\n      // Check if module exists\r\n      if (!this.$store.hasModule(\"moduleC\")) {\r\n        // Create and register module\r\n        const moduleC = createDynamicModule(\"initial\");\r\n        this.$store.registerModule(\"moduleC\", moduleC);\r\n\r\n        // Module is now accessible\r\n        await this.$store.dispatch(\"moduleC/loadDynamicData\", {\r\n          source: \"api\",\r\n        });\r\n        const value = this.$store.state.moduleC.valueC; // typed\r\n      }\r\n    },\r\n\r\n    async loadNestedModule() {\r\n      // Check nested module\r\n      if (!this.$store.hasModule([\"moduleA\", \"moduleAC\"])) {\r\n        const moduleAC = createNestedModule();\r\n        this.$store.registerModule([\"moduleA\", \"moduleAC\"], moduleAC);\r\n\r\n        // Access nested dynamic module\r\n        const state = this.$store.state.moduleA.moduleAC; // typed if defined\r\n      }\r\n    },\r\n\r\n    unloadModule() {\r\n      if (this.$store.hasModule(\"moduleC\")) {\r\n        // Save state if needed\r\n        const state = this.$store.state.moduleC;\r\n        localStorage.setItem(\"moduleC\", JSON.stringify(state));\r\n\r\n        // Unregister module\r\n        this.$store.unregisterModule(\"moduleC\");\r\n      }\r\n    },\r\n  },\r\n};\r\n\r\n// Composition API\r\nconst store = useStore();\r\n\r\nasync function loadDynamicModule() {\r\n  if (!store.hasModule(\"moduleC\")) {\r\n    const moduleC = createDynamicModule(\"init\");\r\n    store.registerModule(\"moduleC\", moduleC);\r\n  }\r\n}\r\n\r\nasync function loadNestedDynamic() {\r\n  // Register nested module in moduleB tree\r\n  if (!store.hasModule([\"moduleB\", \"moduleBC\"])) {\r\n    const moduleBC = await import(\"./modules/moduleBC\");\r\n    store.registerModule([\"moduleB\", \"moduleBC\"], moduleBC.default);\r\n  }\r\n}\r\n```\r\n\r\n**Module Registration Options**\r\n\r\n```ts\r\ninterface ModuleOptions {\r\n  preserveState?: boolean; // Preserve existing state\r\n}\r\n\r\n// Register with options\r\nstore.registerModule(\"moduleC\", moduleCInstance, {\r\n  preserveState: true, // Keep existing state if hot reloading\r\n});\r\n\r\n// For nested modules\r\nstore.registerModule([\"moduleA\", \"moduleAC\"], moduleACInstance, {\r\n  preserveState: localStorage.getItem(\"moduleAC\") !== null,\r\n});\r\n```\r\n\r\n**Checking Module Existence**\r\n\r\n```ts\r\n// Check top-level modules\r\nconst hasModuleA = store.hasModule(\"moduleA\"); // true\r\nconst hasModuleC = store.hasModule(\"moduleC\"); // false (not registered yet)\r\n\r\n// Check nested modules - MUST use array notation\r\nconst hasModuleAA = store.hasModule([\"moduleA\", \"moduleAA\"]); // true\r\nconst hasModuleAAA = store.hasModule([\"moduleA\", \"moduleAA\", \"moduleAAA\"]); // true\r\n\r\n// Check dynamic modules\r\nconst hasModuleAC = store.hasModule([\"moduleA\", \"moduleAC\"]); // false initially\r\n\r\n// ❌ Wrong: Can't use string path for nested modules\r\n// store.hasModule('moduleA/moduleAA'); // Always returns false\r\n// store.hasModule('moduleA.moduleAA'); // Always returns false\r\n\r\n// Helper function for safe access\r\nfunction safeModuleAccess<T>(\r\n  store: Store,\r\n  path: string | string[],\r\n  callback: () => T,\r\n  fallback: T\r\n): T {\r\n  if (store.hasModule(path)) {\r\n    return callback();\r\n  }\r\n  return fallback;\r\n}\r\n\r\n// Usage\r\nconst value = safeModuleAccess(\r\n  store,\r\n  \"moduleC\",\r\n  () => store.state.moduleC.valueC,\r\n  \"default value\"\r\n);\r\n```\r\n\r\n**Unregistering Modules**\r\n\r\n```ts\r\n// Unregister top-level module\r\nstore.unregisterModule(\"moduleC\");\r\n\r\n// Unregister nested module\r\nstore.unregisterModule([\"moduleA\", \"moduleAC\"]);\r\nstore.unregisterModule([\"moduleB\", \"moduleBB\", \"moduleBBC\"]);\r\n\r\n// Clean up before unregistering\r\nfunction cleanUnregister(path: string | string[]) {\r\n  if (store.hasModule(path)) {\r\n    // Dispatch cleanup action if exists\r\n    const modulePath = Array.isArray(path) ? path.join(\"/\") : path;\r\n    try {\r\n      store.dispatch(`${modulePath}/cleanup`, null);\r\n    } catch (e) {\r\n      // Cleanup action might not exist\r\n    }\r\n\r\n    // Unregister\r\n    store.unregisterModule(path);\r\n  }\r\n}\r\n\r\n// Unregister multiple modules\r\nfunction unregisterFeature(feature: string) {\r\n  const modulesToRemove = {\r\n    analytics: [\r\n      \"analytics\",\r\n      [\"analytics\", \"reports\"],\r\n      [\"analytics\", \"tracking\"],\r\n    ],\r\n    chat: [\r\n      [\"features\", \"chat\"],\r\n      [\"features\", \"chat\", \"messages\"],\r\n    ],\r\n  };\r\n\r\n  const paths = modulesToRemove[feature] || [];\r\n  paths.forEach((path) => cleanUnregister(path));\r\n}\r\n```\r\n\r\n**Hot Module Replacement**\r\n\r\n```ts\r\n// Hot reload for dynamic modules\r\nif (import.meta.hot) {\r\n  // Preserve state during development\r\n  import.meta.hot.accept([\"./modules/moduleC\"], () => {\r\n    const newModuleC = require(\"./modules/moduleC\").default;\r\n\r\n    // Update or register module\r\n    if (store.hasModule(\"moduleC\")) {\r\n      store.hotUpdate({\r\n        modules: {\r\n          moduleC: newModuleC,\r\n        },\r\n      });\r\n    } else {\r\n      store.registerModule(\"moduleC\", newModuleC, { preserveState: true });\r\n    }\r\n  });\r\n}\r\n```\r\n\r\n## Advanced Features\r\n\r\n### Module Modes\r\n\r\nVuex modules support two modes that affect how state, getters, actions, and mutations are accessed.\r\n\r\n#### Isolated Mode (namespaced: true)\r\n\r\nIsolated modules create a separate namespace, requiring the full path to access their members.\r\n\r\n```ts\r\ntype ModuleA = _Module\r\n  'moduleA',\r\n  'isolated',  // Creates namespace\r\n  { a: string },\r\n  { getterA: string },\r\n  { actionA: StoreActionRecord<{ val: string }, string> },\r\n  { mutationA: { val: string } }\r\n>;\r\n\r\nconst moduleA: ModuleA = {\r\n  namespaced: true,  // Must be true for 'isolated' mode\r\n  state: { a: 'value' },\r\n  getters: {\r\n    getterA(state) {\r\n      return state.a;\r\n    }\r\n  },\r\n  actions: {\r\n    actionA(ctx, payload) {\r\n      ctx.commit('mutationA', { val: 'new value' });\r\n      return payload?.val ?? 'A';\r\n    }\r\n  },\r\n  mutations: {\r\n    mutationA(state, payload) {\r\n      state.a = payload?.val ?? 'default';\r\n    }\r\n  }\r\n};\r\n```\r\n\r\n**Access Pattern:**\r\n\r\n```ts\r\n// In components\r\nstore.state.moduleA.a; // ✓\r\nstore.getters[\"moduleA/getterA\"]; // ✓\r\nstore.dispatch(\"moduleA/actionA\", { val: \"x\" }); // ✓\r\nstore.commit(\"moduleA/mutationA\", { val: \"x\" }); // ✓\r\n```\r\n\r\n#### Default Mode (namespaced: false)\r\n\r\nDefault modules merge their members into the parent scope (usually root).\r\n\r\n```ts\r\ntype ModuleB = _Module\r\n  'moduleB',\r\n  'default',  // No namespace\r\n  { b: string },\r\n  { getterB: string },\r\n  { actionB: StoreActionRecord<{ val: string }, string> },\r\n  { mutationB: { val: string } }\r\n>;\r\n\r\nconst moduleB: ModuleB = {\r\n  namespaced: false,  // Must be false for 'default' mode\r\n  state: { b: 'value' },\r\n  getters: {\r\n    getterB(state, getters, rootState, rootGetters) {\r\n      // Has access to all root getters\r\n      return state.b + rootGetters.someRootGetter;\r\n    }\r\n  },\r\n  actions: {\r\n    actionB(ctx, payload) {\r\n      // Can access root actions and mutations directly\r\n      ctx.dispatch('someRootAction', null);\r\n      ctx.commit('someRootMutation', null);\r\n      return payload?.val ?? 'B';\r\n    }\r\n  },\r\n  mutations: {\r\n    mutationB(state, payload) {\r\n      state.b = payload?.val ?? 'default';\r\n    }\r\n  }\r\n};\r\n```\r\n\r\n**Access Pattern:**\r\n\r\n```ts\r\n// In components\r\nstore.state.moduleB.b; // ✓ State still nested\r\nstore.getters.getterB; // ✓ Getters at root level\r\nstore.dispatch(\"actionB\", { val: \"x\" }); // ✓ Actions at root level\r\nstore.commit(\"mutationB\", { val: \"x\" }); // ✓ Mutations at root level\r\n```\r\n\r\n**Key Differences:**\r\n\r\n| Feature             | Isolated Mode                       | Default Mode                |\r\n| ------------------- | ----------------------------------- | --------------------------- |\r\n| State Access        | `store.state.moduleA.a`             | `store.state.moduleB.b`     |\r\n| Getters Access      | `store.getters['moduleA/getterA']`  | `store.getters.getterB`     |\r\n| Actions Access      | `store.dispatch('moduleA/actionA')` | `store.dispatch('actionB')` |\r\n| Mutations Access    | `store.commit('moduleA/mutationA')` | `store.commit('mutationB')` |\r\n| Root Access         | Limited                             | Full                        |\r\n| Namespace Pollution | None                                | Yes                         |\r\n\r\n**Recommendation:** Use `isolated` mode for better organization and type safety, especially in large applications.\r\n\r\n---\r\n\r\n### Logger Plugin\r\n\r\nThe `createLogger` plugin helps debug your Vuex store by logging mutations and actions with full type safety.\r\n\r\n#### Basic Usage\r\n\r\n```ts\r\nimport { createStore, createLogger } from \"vuex\";\r\n\r\nexport const store = createStore({\r\n  state: () => ({ count: 0 }),\r\n  mutations: {\r\n    INCREMENT: (state) => state.count++,\r\n  },\r\n  plugins: [createLogger()],\r\n});\r\n```\r\n\r\n#### Advanced Configuration\r\n\r\n```ts\r\nimport { createLogger } from \"vuex\";\r\n\r\nconst loggerPlugin = createLogger({\r\n  // Collapse log groups (default: true)\r\n  collapsed: false,\r\n\r\n  // Filter which mutations to log\r\n  filter(mutation, stateBefore, stateAfter) {\r\n    // Only log INCREMENT mutations\r\n    return mutation.type === \"INCREMENT\";\r\n  },\r\n\r\n  // Transform state before logging\r\n  transformer(state) {\r\n    // Hide sensitive data\r\n    return {\r\n      ...state,\r\n      password: \"***\",\r\n    };\r\n  },\r\n\r\n  // Transform mutation before logging\r\n  mutationTransformer(mutation) {\r\n    return {\r\n      type: mutation.type,\r\n      payload: mutation.payload,\r\n    };\r\n  },\r\n\r\n  // Log actions (default: true)\r\n  logActions: true,\r\n\r\n  // Filter which actions to log\r\n  actionFilter(action, state) {\r\n    // Exclude certain actions\r\n    return action.type !== \"fetchSensitiveData\";\r\n  },\r\n\r\n  // Transform action before logging\r\n  actionTransformer(action) {\r\n    return {\r\n      type: action.type,\r\n      payload: action.payload,\r\n    };\r\n  },\r\n\r\n  // Log mutations (default: true)\r\n  logMutations: true,\r\n\r\n  // Custom logger (default: console)\r\n  logger: {\r\n    log: (message, color, payload) => {\r\n      console.log(`%c ${message}`, `color: ${color}`, payload);\r\n    },\r\n    group: console.group,\r\n    groupCollapsed: console.groupCollapsed,\r\n    groupEnd: console.groupEnd,\r\n  },\r\n});\r\n\r\nexport const store = createStore({\r\n  // ... store options\r\n  plugins: [loggerPlugin],\r\n});\r\n```\r\n\r\n#### Type-Safe Filtering\r\n\r\n```ts\r\nconst loggerPlugin = createLogger<\r\n  StoreRootStateResolved,\r\n  StoreRootGettersResolved\r\n>({\r\n  filter(mutation, stateBefore, stateAfter) {\r\n    // Full intellisense for mutation types\r\n    if (mutation.type === \"UPDATE_NAME\") {\r\n      // mutation.payload is typed as { fname: string; lname: string }\r\n      console.log(\"Name updated to:\", mutation.payload.fname);\r\n      return true;\r\n    }\r\n    return false;\r\n  },\r\n\r\n  actionFilter(action, state) {\r\n    // Full intellisense for action types\r\n    if (action.type === \"updateAge\") {\r\n      // action.payload is typed as { value: number }\r\n      return action.payload.value > 18;\r\n    }\r\n    return true;\r\n  },\r\n});\r\n```\r\n\r\n**Console Output Example:**\r\n\r\n```\r\n▼ mutation UPDATE_NAME @ 10:30:15\r\n  ▶ prev state: { fname: 'John', lname: 'Doe', age: 25 }\r\n  ▶ mutation: { type: 'UPDATE_NAME', payload: { fname: 'Jane', lname: 'Smith' } }\r\n  ▶ next state: { fname: 'Jane', lname: 'Smith', age: 25 }\r\n```\r\n\r\n---\r\n\r\n### Action Context\r\n\r\nAction handlers receive a context object with full type safety based on the module's scope.\r\n\r\n#### Root Level Actions\r\n\r\n```ts\r\ninterface VuexStoreRootActions {\r\n  updateUser: StoreActionRecord<{ id: string; name: string }, User>;\r\n}\r\n\r\n// In store definition\r\nactions: {\r\n  async updateUser(ctx, payload) {\r\n    // ctx has access to everything at root level\r\n    ctx.state.fname;                    // ✓ Root state\r\n    ctx.getters.fullName;               // ✓ Root getters\r\n    ctx.commit('UPDATE_NAME', { ... }); // ✓ Root mutations\r\n    ctx.dispatch('updateAge', { ... }); // ✓ Root actions\r\n\r\n    ctx.rootState.fname;                // ✓ Same as ctx.state\r\n    ctx.rootGetters.fullName;           // ✓ Same as ctx.getters\r\n\r\n    return { id: payload.id, name: payload.name };\r\n  }\r\n}\r\n```\r\n\r\n#### Isolated Module Actions\r\n\r\n```ts\r\ntype ModuleA = _Module\r\n  'moduleA',\r\n  'isolated',\r\n  { a: string },\r\n  { getterA: string },\r\n  { actionA: StoreActionRecord<{ val: string }, string> },\r\n  { mutationA: { val: string } }\r\n>;\r\n\r\nconst moduleA: ModuleA = {\r\n  namespaced: true,\r\n  actions: {\r\n    actionA(ctx, payload) {\r\n      // Local scope access (no prefix needed)\r\n      ctx.state.a;                          // ✓ Module state\r\n      ctx.getters.getterA;                  // ✓ Module getters\r\n      ctx.commit('mutationA', { val: 'x' }); // ✓ Module mutations\r\n      ctx.dispatch('actionA', { val: 'y' }); // ✓ Module actions\r\n\r\n      // Root scope access\r\n      ctx.rootState.fname;                  // ✓ Root state\r\n      ctx.rootGetters.fullName;             // ✓ Root getters\r\n\r\n      // Access root mutations/actions (requires { root: true })\r\n      ctx.commit('UPDATE_NAME', { ... }, { root: true });\r\n      ctx.dispatch('updateAge', { ... }, { root: true });\r\n\r\n      return payload?.val ?? 'A';\r\n    }\r\n  }\r\n};\r\n```\r\n\r\n#### Default Module Actions\r\n\r\n```ts\r\ntype ModuleB = _Module\r\n  'moduleB',\r\n  'default',\r\n  { b: string },\r\n  { getterB: string },\r\n  { actionB: StoreActionRecord<{ val: string }, string> },\r\n  { mutationB: { val: string } }\r\n>;\r\n\r\nconst moduleB: ModuleB = {\r\n  namespaced: false,\r\n  actions: {\r\n    actionB(ctx, payload) {\r\n      // Module state (nested)\r\n      ctx.state.b;                          // ✓ Module state\r\n\r\n      // Everything else is at root level\r\n      ctx.getters.getterB;                  // ✓ Module + root getters merged\r\n      ctx.getters.fullName;                 // ✓ Root getters accessible\r\n\r\n      ctx.commit('mutationB', { val: 'x' }); // ✓ No prefix needed\r\n      ctx.commit('UPDATE_NAME', { ... });   // ✓ Root mutations accessible\r\n\r\n      ctx.dispatch('actionB', { val: 'y' }); // ✓ No prefix needed\r\n      ctx.dispatch('updateAge', { ... });   // ✓ Root actions accessible\r\n\r\n      return payload?.val ?? 'B';\r\n    }\r\n  }\r\n};\r\n```\r\n\r\n#### Context Properties\r\n\r\n| Property      | Type           | Description                                             |\r\n| ------------- | -------------- | ------------------------------------------------------- |\r\n| `state`       | Module State   | Current module's state (or root state for root actions) |\r\n| `getters`     | Module Getters | Available getters based on scope                        |\r\n| `rootState`   | Root State     | Always the complete root state tree                     |\r\n| `rootGetters` | Root Getters   | Always all root getters                                 |\r\n| `commit`      | Function       | Commit mutations (scoped based on module mode)          |\r\n| `dispatch`    | Function       | Dispatch actions (scoped based on module mode)          |\r\n\r\n---\r\n\r\n### Nested Module Access\r\n\r\nAccess state, getters, mutations, and actions from nested modules with full type safety.\r\n\r\n#### State Access\r\n\r\n```ts\r\n// Module hierarchy: root -> moduleA -> moduleAA -> moduleAAA\r\n\r\n// Access nested module state\r\nstore.state.moduleA.a; // ✓ ModuleA state\r\nstore.state.moduleA.moduleAA.aa; // ✓ ModuleAA state\r\nstore.state.moduleA.moduleAA.moduleAAA.aaa; // ✓ ModuleAAA state\r\n```\r\n\r\n#### Getters Access (Isolated Modules)\r\n\r\n```ts\r\n// All modules are isolated (namespaced: true)\r\nstore.getters[\"moduleA/getterA\"]; // ✓\r\nstore.getters[\"moduleA/moduleAA/getterAA\"]; // ✓\r\nstore.getters[\"moduleA/moduleAA/moduleAAA/getterAAA\"]; // ✓\r\n```\r\n\r\n#### Actions and Mutations (Isolated Modules)\r\n\r\n```ts\r\n// Dispatch nested actions\r\nstore.dispatch(\"moduleA/actionA\", { val: \"x\" });\r\nstore.dispatch(\"moduleA/moduleAA/actionAA\", { val: \"y\" });\r\nstore.dispatch(\"moduleA/moduleAA/moduleAAA/actionAAA\", { val: \"z\" });\r\n\r\n// Commit nested mutations\r\nstore.commit(\"moduleA/mutationA\", { val: \"x\" });\r\nstore.commit(\"moduleA/moduleAA/mutationAA\", { val: \"y\" });\r\nstore.commit(\"moduleA/moduleAA/moduleAAA/mutationAAA\", { val: \"z\" });\r\n```\r\n\r\n#### Cross-Module Communication\r\n\r\n```ts\r\n// In moduleAAA action\r\nactions: {\r\n  actionAAA(ctx, payload) {\r\n    // Access parent module (moduleAA)\r\n    ctx.state.aa;                              // ✓ Parent state\r\n    ctx.getters['moduleA/moduleAA/getterAA'];  // ✓ Parent getters\r\n    ctx.commit('moduleA/moduleAA/mutationAA', { ... }, { root: true });\r\n\r\n    // Access root\r\n    ctx.rootState.fname;                       // ✓ Root state\r\n    ctx.rootGetters.fullName;                  // ✓ Root getters\r\n    ctx.commit('UPDATE_NAME', { ... }, { root: true });\r\n\r\n    // Access sibling modules (if they exist)\r\n    ctx.dispatch('moduleA/moduleAB/actionAB', { ... }, { root: true });\r\n\r\n    return 'AAA';\r\n  }\r\n}\r\n```\r\n\r\n#### Type-Safe Module State Resolution\r\n\r\n```ts\r\n// Get complete state tree for a specific module by name\r\ntype ModuleAState = ResolveModuleStateByName<\"moduleA\">;\r\n// Result: { a: string, moduleAA: { aa: string, moduleAAA: { aaa: string } } }\r\n\r\ntype ModuleAAState = ResolveModuleStateByName<\"moduleAA\">;\r\n// Result: { aa: string, moduleAAA: { aaa: string } }\r\n\r\n// Usage in components or utilities\r\nfunction getModuleAState(store: _Store): ModuleAState {\r\n  return store.state.moduleA;\r\n}\r\n```\r\n\r\n#### Accessing Nested Modules in Context\r\n\r\n```ts\r\n// In moduleA action\r\nactions: {\r\n  actionA(ctx, payload) {\r\n    // Access child module state\r\n    ctx.state.moduleAA.aa;              // ✓ Child state\r\n    ctx.state.moduleAA.moduleAAA.aaa;   // ✓ Grandchild state\r\n\r\n    // Dispatch to child modules\r\n    ctx.dispatch('moduleAA/actionAA', { val: 'x' });\r\n    ctx.dispatch('moduleAA/moduleAAA/actionAAA', { val: 'y' });\r\n\r\n    // Commit to child modules\r\n    ctx.commit('moduleAA/mutationAA', { val: 'x' });\r\n\r\n    return 'A';\r\n  }\r\n}\r\n```\r\n\r\n#### Store Subscriptions\r\n\r\n```ts\r\n// Subscribe to mutations\r\nconst unsubscribeMutation = store.subscribe((mutation, state) => {\r\n  // Fully typed mutation payload\r\n  console.log(\"Mutation:\", mutation.type);\r\n  console.log(\"Payload:\", mutation.payload);\r\n  console.log(\"New State:\", state);\r\n\r\n  // Type narrowing\r\n  if (mutation.type === \"SET_USER\") {\r\n    console.log(\"User set to:\", mutation.payload.username);\r\n  }\r\n});\r\n\r\n// Subscribe to actions\r\nconst unsubscribeAction = store.subscribeAction({\r\n  before: (action, state) => {\r\n    console.log(\"Before action:\", action.type);\r\n    console.log(\"Payload:\", action.payload);\r\n  },\r\n  after: (action, state) => {\r\n    console.log(\"After action:\", action.type);\r\n  },\r\n  error: (action, state, error) => {\r\n    console.error(\"Action error:\", action.type, error);\r\n  },\r\n});\r\n\r\n// Simple action subscription (after only)\r\nconst unsubscribe = store.subscribeAction((action, state) => {\r\n  console.log(\"Action completed:\", action.type);\r\n});\r\n\r\n// Cleanup\r\nunsubscribeMutation();\r\nunsubscribeAction();\r\n```\r\n\r\n#### Watch API\r\n\r\n```ts\r\n// Watch specific state changes\r\nconst unwatch = store.watch(\r\n  (state, getters) => state.user, // Getter function\r\n  (newValue, oldValue) => {\r\n    // Callback\r\n    console.log(\"User changed from\", oldValue, \"to\", newValue);\r\n  },\r\n  {\r\n    deep: true, // Deep watch objects\r\n    immediate: true, // Call immediately with current value\r\n  }\r\n);\r\n\r\n// Watch computed values\r\nstore.watch(\r\n  (state, getters) => getters.userInfo,\r\n  (newValue, oldValue) => {\r\n    console.log(\"User info updated:\", newValue);\r\n  }\r\n);\r\n\r\n// Complex watched expressions\r\nstore.watch(\r\n  (state) => state.moduleA.count + state.moduleB.value,\r\n  (sum) => {\r\n    console.log(\"Combined value:\", sum);\r\n  }\r\n);\r\n\r\n// Cleanup\r\nunwatch();\r\n```\r\n\r\n## Type Definitions Reference\r\n\r\nThis section summarizes the key types and declaration points provided by the `strict-vuex` package so you know where to look when something doesn't type-check.\r\n\r\n- `VuexStoreRootState` / `VuexStoreRootGetters` / `VuexStoreRootActions` / `VuexStoreRootMutations`:\r\n\r\n  - Root-level shape placeholders — add your root-level types here when you need global state/getters/actions/mutations typed.\r\n\r\n- `VuexStoreRootModules`:\r\n\r\n  - The single most important interface to populate. Put only your _root_ module types here (e.g. `{ moduleA: ModuleA; moduleB: ModuleB }`). The file builds the entire tree from these root entries.\r\n\r\n- `_Module<ModuleName, Mode, State, Getters, Actions, Mutations, Modules>`:\r\n\r\n  - Use this generic to describe each module. `Mode` controls namespacing (`'isolated'` === `namespaced: true`, `'default'` === `namespaced: false`).\r\n\r\n- `StoreActionRecord<Payload, Return, RootLevel>`:\r\n\r\n  - Use to declare actions payload/return types and whether they are root-level (`RootLevel = true`).\r\n\r\n- `ResolveModuleStateByName<ModuleName>`:\r\n\r\n  - get a module's full resolved state including nested children.\r\n\r\n---\r\n\r\n**Some Examples:**\r\n\r\n### StoreActionRecord - interface\r\n\r\n```ts\r\ninterface StoreActionRecord<\r\n  Payload,\r\n  Return,\r\n  RootLevel extends boolean = false\r\n> {\r\n  payload: Payload;\r\n  return: Return;\r\n  root: RootLevel;\r\n}\r\n\r\n// Usage\r\ntype MyAction = StoreActionRecord<\r\n  { id: string; data: any }, // Payload type\r\n  Promise<boolean>, // Return type\r\n  false // Is root action\r\n>;\r\n```\r\n\r\n### \\_Module - interface\r\n\r\n```ts\r\ninterface _Module<\r\n  ModuleName extends ModuleNames,\r\n  Mode extends ModuleMode, // 'default' | 'isolated'\r\n  State extends StoreStateGeneric = {},\r\n  Getters extends StoreGettersGeneric = {},\r\n  Actions extends StoreActionsGeneric = {},\r\n  Mutations extends StoreMutationsGeneric = {},\r\n  Modules = undefined // Nested modules\r\n>\r\n\r\n// Full example\r\ntype CompleteModule = _Module<\r\n  'complete',\r\n  'isolated',\r\n  {\r\n    // State\r\n    counter: number;\r\n    data: string[];\r\n    settings: {\r\n      theme: 'light' | 'dark';\r\n      language: string;\r\n    };\r\n  },\r\n  {\r\n    // Getters\r\n    doubleCounter: number;\r\n    dataCount: number;\r\n    formattedData: string;\r\n  },\r\n  {\r\n    // Actions\r\n    increment: StoreActionRecord<{ amount: number }, void>;\r\n    fetchData: StoreActionRecord<null, string[]>;\r\n    updateSettings: StoreActionRecord<{ theme?: string; language?: string }, boolean>;\r\n  },\r\n  {\r\n    // Mutations\r\n    SET_COUNTER: { value: number };\r\n    ADD_DATA: { item: string };\r\n    UPDATE_SETTINGS: { theme?: string; language?: string };\r\n  },\r\n  {\r\n    // Nested modules\r\n    subModuleA: SubModuleA;\r\n    subModuleB: SubModuleB;\r\n  }\r\n>;\r\n```\r\n\r\n### ResolveModuleStateByName - type\r\n\r\n```ts\r\ntype StateB = ResolveModuleStateByName<\"moduleB\">;\r\n// Result: { b: string, moduleC: { c: string } }\r\n\r\n// Usage in components or actions:\r\nconst moduleState: ResolveModuleStateByName<\"moduleB\"> = // ...\r\n  console.log(moduleState.b); // string\r\nconsole.log(moduleState.moduleC.c); // string\r\n```\r\n\r\n## API Reference\r\n\r\n### Store Methods\r\n\r\n| Method           | Description                 | Type Signature                                |\r\n| ---------------- | --------------------------- | --------------------------------------------- |\r\n| state            | Access store state          | readonly RootState                            |\r\n| getters          | Access store getters        | readonly RootGetters                          |\r\n| dispatch         | Dispatch actions            | (type, payload?, options?) => Promise<Return> |\r\n| commit           | Commit mutations            | (type, payload?, options?) => void            |\r\n| subscribe        | Subscribe to mutations      | (fn, options?) => () => void                  |\r\n| subscribeAction  | Subscribe to actions        | (fn, options?) => () => void                  |\r\n| watch            | Watch reactive changes      | (getter, cb, options?) => () => void          |\r\n| registerModule   | Register module dynamically | (path, module, options?) => void              |\r\n| unregisterModule | Unregister module           | (path) => void                                |\r\n| hasModule        | Check module existence      | (path) => boolean                             |\r\n| hotUpdate        | Hot update modules          | (options) => void                             |\r\n| replaceState     | Replace entire state        | (state) => void                               |\r\n\r\n### Mapper Functions\r\n\r\n| Function                | Description                        | Usage                                |\r\n| ----------------------- | -----------------","readmeFilename":"README.md"}