{"_id":"@davidcromianski-dev/ant-di","_rev":"9-3a600b8c1950577c2ba5403cd3626898","name":"@davidcromianski-dev/ant-di","dist-tags":{"latest":"2.0.1"},"versions":{"1.0.0":{"name":"@davidcromianski-dev/ant-di","version":"1.0.0","keywords":["dependency-injection","di","container","typescript","javascript","auto-wiring","service-provider","singleton","factory","pimple"],"author":{"url":"https://github.com/davidcromianski-dev","name":"David Cromianski","email":"davidcromianski.dev@gmail.com"},"license":"MIT","_id":"@davidcromianski-dev/ant-di@1.0.0","maintainers":[{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"}],"homepage":"https://github.com/davidcromianski-dev/ant-di#readme","bugs":{"url":"https://github.com/davidcromianski-dev/ant-di/issues"},"dist":{"shasum":"8c270563605697a5f97e479b9f03266e00b66aa3","tarball":"https://registry.npmjs.org/@davidcromianski-dev/ant-di/-/ant-di-1.0.0.tgz","fileCount":13,"integrity":"sha512-/ac7WtV1wpa6Vfi7Al2kPRKE4ng+be9a+TYCHqBstMZxhkaJYm8Edb6VpZxwCNL1YbPMdxgbaFT6LLZAIQXbiQ==","signatures":[{"sig":"MEYCIQCCoQ/TZAUSTl9lmDoFVnVtcYwu6Y1oGIGiyqj0vDzfhQIhALBLCQ/RQadgGRFTMCqyMO4zIbvw3yOrXyxccNo+fIxw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44120},"main":"dist/index.cjs.js","types":"dist/types/index.d.ts","module":"dist/index.es.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"gitHead":"1af14b0c40ab3159b423a2bb07f65b184bbc6ecf","scripts":{"test":"poku","build":"vite build","examples":"npx ts-node examples/examples.ts","prepublish":"pnpm build && pnpm test","publish:npm":"npm publish","prepublishOnly":"pnpm build","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"},"repository":{"url":"git+https://github.com/davidcromianski-dev/ant-di.git","type":"git"},"_npmVersion":"11.0.0","description":"Simple JavaScript Dependency Injection Container inspired by PHP Pimple with advanced features like auto-wiring and service providers","directories":{},"_nodeVersion":"22.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","poku":"^3.0.2","vite":"^6.3.5","ts-node":"^10.9.2","typescript":"^5.9.2","@types/node":"^24.3.0","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/ant-di_1.0.0_1758548475538_0.5146268465056438","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@davidcromianski-dev/ant-di","version":"1.0.1","keywords":["dependency-injection","di","container","typescript","javascript","auto-wiring","service-provider","singleton","factory","pimple"],"author":{"url":"https://github.com/davidcromianski-dev","name":"David Cromianski","email":"davidcromianski.dev@gmail.com"},"license":"MIT","_id":"@davidcromianski-dev/ant-di@1.0.1","maintainers":[{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"}],"homepage":"https://github.com/davidcromianski-dev/ant-di#readme","bugs":{"url":"https://github.com/davidcromianski-dev/ant-di/issues"},"dist":{"shasum":"cff7b097f6006f81926dd509ee95005ad6bc42da","tarball":"https://registry.npmjs.org/@davidcromianski-dev/ant-di/-/ant-di-1.0.1.tgz","fileCount":13,"integrity":"sha512-sAESb+5MxRiTuo+BAnD6XgYGjNZwWlEB6PV0GXQYwPsMRb7C/2qwqwLgcThESDikMAoxNejyuoCHwDGoTChF6w==","signatures":[{"sig":"MEUCIH0dD6FXGVBX4cujnIMPwpy/5LOf4otcbywO9qbyA+5iAiEA3/iGFROeeffYwag6LMZ1Vg/XX0zHZibouHLIK8zIqbg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43928},"main":"dist/index.cjs.js","types":"dist/types/index.d.ts","module":"dist/index.es.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"gitHead":"94b8e2633cb152b99a924742d9374f08c25fab2c","scripts":{"test":"poku","build":"vite build","examples":"npx ts-node examples/examples.ts","prepublish":"pnpm build && pnpm test","publish:npm":"npm publish","prepublishOnly":"pnpm build","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"},"repository":{"url":"git+https://github.com/davidcromianski-dev/ant-di.git","type":"git"},"_npmVersion":"11.0.0","description":"Simple JavaScript Dependency Injection Container inspired by PHP Pimple with advanced features like auto-wiring and service providers","directories":{},"_nodeVersion":"22.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","poku":"^3.0.2","vite":"^6.3.5","ts-node":"^10.9.2","typescript":"^5.9.2","@types/node":"^24.3.0","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/ant-di_1.0.1_1758548744908_0.6660570248161382","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@davidcromianski-dev/ant-di","version":"1.0.2","keywords":["dependency-injection","di","container","typescript","javascript","auto-wiring","service-provider","singleton","factory","pimple"],"author":{"url":"https://github.com/davidcromianski-dev","name":"David Cromianski","email":"davidcromianski.dev@gmail.com"},"license":"MIT","_id":"@davidcromianski-dev/ant-di@1.0.2","maintainers":[{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"}],"homepage":"https://davidcromianski-dev.github.io/ant-di/","bugs":{"url":"https://github.com/davidcromianski-dev/ant-di/issues"},"dist":{"shasum":"b3229013beb2259060af4937d76a3ca2c2c2e580","tarball":"https://registry.npmjs.org/@davidcromianski-dev/ant-di/-/ant-di-1.0.2.tgz","fileCount":13,"integrity":"sha512-uvxUec4GuYT1y89+39jgb1Q2Y08SemmsuHZFDGguF0mzwxIUeRbX0QXLlduMfzLx5Rh9U4g8gdQQd8MA6hmoyg==","signatures":[{"sig":"MEYCIQC1hs6SFg/OuPzVi52I7kJOBNTJyKuQPuDF0KNF59qsiQIhAIqJbBz6fWA1iQRHv1jOFfU0lHkaetWHVlT/9gW+gVQr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43921},"main":"dist/index.cjs.js","types":"dist/types/index.d.ts","module":"dist/index.es.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"gitHead":"abd1de1878c25ffa1c9d022172f21dfbf14fe543","scripts":{"test":"poku","build":"vite build","examples":"npx ts-node examples/examples.ts","prepublish":"pnpm build && pnpm test","publish:npm":"npm publish","prepublishOnly":"pnpm build","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"},"repository":{"url":"git+https://github.com/davidcromianski-dev/ant-di.git","type":"git"},"_npmVersion":"11.0.0","description":"Simple JavaScript Dependency Injection Container inspired by PHP Pimple with advanced features like auto-wiring and service providers","directories":{},"_nodeVersion":"22.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","poku":"^3.0.2","vite":"^6.3.5","ts-node":"^10.9.2","typescript":"^5.9.2","@types/node":"^24.3.0","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/ant-di_1.0.2_1758548861189_0.9451397880553862","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@davidcromianski-dev/ant-di","version":"1.0.3","keywords":["dependency-injection","di","container","typescript","javascript","auto-wiring","service-provider","singleton","factory","pimple"],"author":{"url":"https://github.com/davidcromianski-dev","name":"David Cromianski","email":"davidcromianski.dev@gmail.com"},"license":"MIT","_id":"@davidcromianski-dev/ant-di@1.0.3","maintainers":[{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"}],"homepage":"https://davidcromianski-dev.github.io/ant-di/","bugs":{"url":"https://github.com/davidcromianski-dev/ant-di/issues"},"dist":{"shasum":"62cd26d92297631be62a91b43907120d0096a239","tarball":"https://registry.npmjs.org/@davidcromianski-dev/ant-di/-/ant-di-1.0.3.tgz","fileCount":13,"integrity":"sha512-swwkA6pTr75OgFXgG+QDcl4weMd27TQITATssGTA3vcJk496eHEZj4B3t1Ok6I5jgIm0q/RBhP24EeM3jugTeg==","signatures":[{"sig":"MEYCIQDPzEaTh9ulKz5K+rlwsq1t5RfcxLpsgKqcQiCTbuSoBgIhALfwPuMJueoxw42g/A/aHb7myh/8g0ZAlBfgKxGXL3ZW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44694},"main":"dist/index.cjs.js","types":"dist/types/index.d.ts","module":"dist/index.es.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"gitHead":"829d06f5d2c87bde0ad55b2323d932286d470c29","scripts":{"test":"poku","build":"vite build","examples":"npx ts-node examples/examples.ts","prepublish":"pnpm build && pnpm test","publish:npm":"npm publish","prepublishOnly":"pnpm build","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"},"repository":{"url":"git+https://github.com/davidcromianski-dev/ant-di.git","type":"git"},"_npmVersion":"11.0.0","description":"Simple JavaScript Dependency Injection Container inspired by PHP Pimple with advanced features like auto-wiring and service providers","directories":{},"_nodeVersion":"22.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","poku":"^3.0.2","vite":"^6.3.5","ts-node":"^10.9.2","typescript":"^5.9.2","@types/node":"^24.3.0","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/ant-di_1.0.3_1758549255312_0.21934630404772104","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@davidcromianski-dev/ant-di","version":"1.0.4","keywords":["dependency-injection","di","container","typescript","javascript","auto-wiring","service-provider","singleton","factory","pimple"],"author":{"url":"https://github.com/davidcromianski-dev","name":"David Cromianski","email":"davidcromianski.dev@gmail.com"},"license":"MIT","_id":"@davidcromianski-dev/ant-di@1.0.4","maintainers":[{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"}],"homepage":"https://davidcromianski-dev.github.io/ant-di/","bugs":{"url":"https://github.com/davidcromianski-dev/ant-di/issues"},"dist":{"shasum":"276214628f88a87af9b9bd4a7736f03a88d4e390","tarball":"https://registry.npmjs.org/@davidcromianski-dev/ant-di/-/ant-di-1.0.4.tgz","fileCount":13,"integrity":"sha512-iD1gIKYUbQkOj4Yvljg1a8UjYXl05nX+aqTRZjCkgzk+KZPbRhLCzrFbArKLR6V66kFLGfe2SQPBMvTLgSlhHw==","signatures":[{"sig":"MEUCIQDuuKkfu/GSL0ONlHI/DomhoPNDG1ET9Xelv0/S1/yJ6AIgYV8mwL4G6YYMp35PSyVl2LRBq1AKBDeSw3vzxXBjlqg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44929},"main":"dist/index.cjs.js","_from":"file:davidcromianski-dev-ant-di-1.0.4.tgz","types":"dist/types/index.d.ts","module":"dist/index.es.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"scripts":{"test":"poku","build":"vite build","examples":"npx ts-node examples/examples.ts","prepublish":"pnpm build && pnpm test","publish:npm":"npm publish","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"},"_resolved":"/tmp/e1559cede18e5c9b23544c935c947dae/davidcromianski-dev-ant-di-1.0.4.tgz","_integrity":"sha512-iD1gIKYUbQkOj4Yvljg1a8UjYXl05nX+aqTRZjCkgzk+KZPbRhLCzrFbArKLR6V66kFLGfe2SQPBMvTLgSlhHw==","repository":{"url":"git+https://github.com/davidcromianski-dev/ant-di.git","type":"git"},"_npmVersion":"11.0.0","description":"Simple JavaScript Dependency Injection Container inspired by PHP Pimple with advanced features like auto-wiring and service providers","directories":{},"_nodeVersion":"22.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","poku":"^3.0.2","vite":"^6.3.5","ts-node":"^10.9.2","typescript":"^5.9.2","@types/node":"^24.3.0","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/ant-di_1.0.4_1760134015815_0.7835685658557499","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@davidcromianski-dev/ant-di","version":"1.0.5","keywords":["dependency-injection","di","container","typescript","javascript","auto-wiring","service-provider","singleton","factory","pimple"],"author":{"url":"https://github.com/davidcromianski-dev","name":"David Cromianski","email":"davidcromianski.dev@gmail.com"},"license":"MIT","_id":"@davidcromianski-dev/ant-di@1.0.5","maintainers":[{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"}],"homepage":"https://davidcromianski-dev.github.io/ant-di/","bugs":{"url":"https://github.com/davidcromianski-dev/ant-di/issues"},"dist":{"shasum":"653516d9efda88dfd7ec96c3f127fd6bec06227c","tarball":"https://registry.npmjs.org/@davidcromianski-dev/ant-di/-/ant-di-1.0.5.tgz","fileCount":13,"integrity":"sha512-eMDiP0LEBfYfdKjmvd/ZBq7KsNl2P8XTQDzGC9xmN9EzBM5evcYGJltSf8r6jb3LgPyaPnS+zN/Qz6D1ptXsvg==","signatures":[{"sig":"MEUCIGT1Qg/sTycgUQXgi5J/bDNOJOgstyTU8EmE7c21DmD/AiEAzoMz9GgpyY0yyBldrZqT3M67jvr98FRgCTFKyiovqok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45183},"main":"dist/index.cjs.js","_from":"file:davidcromianski-dev-ant-di-1.0.5.tgz","types":"dist/types/index.d.ts","module":"dist/index.es.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"scripts":{"test":"poku","build":"vite build","examples":"npx ts-node examples/examples.ts","prepublish":"pnpm build && pnpm test","publish:npm":"npm publish","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"},"_resolved":"/tmp/02d85248e35fd1689029b7dcea709fe1/davidcromianski-dev-ant-di-1.0.5.tgz","_integrity":"sha512-eMDiP0LEBfYfdKjmvd/ZBq7KsNl2P8XTQDzGC9xmN9EzBM5evcYGJltSf8r6jb3LgPyaPnS+zN/Qz6D1ptXsvg==","repository":{"url":"git+https://github.com/davidcromianski-dev/ant-di.git","type":"git"},"_npmVersion":"11.0.0","description":"Simple JavaScript Dependency Injection Container inspired by PHP Pimple with advanced features like auto-wiring and service providers","directories":{},"_nodeVersion":"22.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","poku":"^3.0.2","vite":"^6.3.5","ts-node":"^10.9.2","typescript":"^5.9.2","@types/node":"^24.3.0","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/ant-di_1.0.5_1760188919099_0.5402795744922775","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@davidcromianski-dev/ant-di","version":"1.0.6","keywords":["dependency-injection","di","container","typescript","javascript","auto-wiring","service-provider","singleton","factory","pimple"],"author":{"url":"https://github.com/davidcromianski-dev","name":"David Cromianski","email":"davidcromianski.dev@gmail.com"},"license":"MIT","_id":"@davidcromianski-dev/ant-di@1.0.6","maintainers":[{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"}],"homepage":"https://davidcromianski-dev.github.io/ant-di/","bugs":{"url":"https://github.com/davidcromianski-dev/ant-di/issues"},"dist":{"shasum":"cc13685c5af36cf3a9068f133561afac421da56b","tarball":"https://registry.npmjs.org/@davidcromianski-dev/ant-di/-/ant-di-1.0.6.tgz","fileCount":13,"integrity":"sha512-wioyw6WtHlWmhhNZ/CfhggqEU2woSvNeYmW+aFLM9tPDQUaTKykCy/lC/wFC/6Wghr/nA53WWYrWY+xtij6+ug==","signatures":[{"sig":"MEQCICSYAJW728cF82nGoQgNAzCtLqp2vzcNQwLWufjf74UwAiAMnXIj6F3B9UD5VqX6lZRNcMcseX/4lA0XEUbZhq5zXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45203},"main":"dist/index.cjs.js","type":"module","_from":"file:davidcromianski-dev-ant-di-1.0.6.tgz","types":"dist/types/index.d.ts","module":"dist/index.es.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"scripts":{"test":"poku","build":"vite build","examples":"npx ts-node examples/examples.ts","prepublish":"pnpm build && pnpm test","publish:npm":"npm publish","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"},"_resolved":"/tmp/1dcbec0e1021545e8435669a2a2d1aec/davidcromianski-dev-ant-di-1.0.6.tgz","_integrity":"sha512-wioyw6WtHlWmhhNZ/CfhggqEU2woSvNeYmW+aFLM9tPDQUaTKykCy/lC/wFC/6Wghr/nA53WWYrWY+xtij6+ug==","repository":{"url":"git+https://github.com/davidcromianski-dev/ant-di.git","type":"git"},"_npmVersion":"11.0.0","description":"Simple JavaScript Dependency Injection Container inspired by PHP Pimple with advanced features like auto-wiring and service providers","directories":{},"_nodeVersion":"22.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","poku":"^3.0.2","vite":"^6.3.5","ts-node":"^10.9.2","typescript":"^5.9.2","@types/node":"^24.3.0","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/ant-di_1.0.6_1760190655350_0.18313089171678776","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@davidcromianski-dev/ant-di","version":"2.0.0","keywords":["dependency-injection","di","container","typescript","javascript","auto-wiring","service-provider","singleton","factory","pimple"],"author":{"url":"https://github.com/davidcromianski-dev","name":"David Cromianski","email":"davidcromianski.dev@gmail.com"},"license":"MIT","_id":"@davidcromianski-dev/ant-di@2.0.0","maintainers":[{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"}],"homepage":"https://davidcromianski-dev.github.io/ant-di/","bugs":{"url":"https://github.com/davidcromianski-dev/ant-di/issues"},"dist":{"shasum":"4e94561220c013771703f9cc3f189332a2e9624e","tarball":"https://registry.npmjs.org/@davidcromianski-dev/ant-di/-/ant-di-2.0.0.tgz","fileCount":39,"integrity":"sha512-92pHDCQJKQUZgDtPWqfe3stdJlPubnql29xkAaWj9xvNPnDW+3+HKwbfpHKe8YBNGioDf/rpWQj6Sj6UWeTh9A==","signatures":[{"sig":"MEQCIA57y8r78zemsW45rtb2UwLIicTP0he2ZZm6/8ph/0FpAiAwBqBPuM8plhUCMUkiO7vnvRxWyZ4WllUf0Yds0Wy16A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68111},"main":"dist/index.cjs.js","type":"module","_from":"file:davidcromianski-dev-ant-di-2.0.0.tgz","types":"dist/types/index.d.ts","module":"dist/index.es.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"scripts":{"lint":"eslint . --ext .ts,.tsx,.js,.jsx","test":"poku","build":"vite build","clean":"rm -rf dist coverage docs/api","format":"prettier --write .","prepush":"pnpm test && pnpm type-check","examples":"npx ts-node examples/examples.ts","lint:fix":"eslint . --ext .ts,.tsx,.js,.jsx --fix","precommit":"lint-staged","api:update":"api-extractor run --local --update","deps:check":"depcheck","docs:serve":"typedoc --serve","prepublish":"pnpm build && pnpm test","test:watch":"poku --watch","type-check":"tsc --noEmit","api:extract":"api-extractor run --local","publish:npm":"npm publish","format:check":"prettier --check .","deps:outdated":"pnpm outdated","docs:generate":"typedoc","security:snyk":"snyk test","test:coverage":"c8 poku","analyze:bundle":"webpack-bundle-analyzer dist/index.es.js","security:audit":"audit-ci --config .audit-ci.json","publish:dry-run":"npm publish --dry-run","security:snyk:monitor":"snyk monitor"},"_npmUser":{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"},"_resolved":"/tmp/4405b8179537a4a1b658d37f0998caf2/davidcromianski-dev-ant-di-2.0.0.tgz","_integrity":"sha512-92pHDCQJKQUZgDtPWqfe3stdJlPubnql29xkAaWj9xvNPnDW+3+HKwbfpHKe8YBNGioDf/rpWQj6Sj6UWeTh9A==","repository":{"url":"git+https://github.com/davidcromianski-dev/ant-di.git","type":"git"},"_npmVersion":"11.0.0","description":"Simple JavaScript Dependency Injection Container inspired by PHP Pimple with advanced features like auto-wiring and service providers","directories":{},"_nodeVersion":"22.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","tsx":"^4.20.5","poku":"^3.0.2","snyk":"^1.1300.0","vite":"^6.3.5","husky":"^9.1.7","eslint":"^9.37.0","ts-node":"^10.9.2","typedoc":"^0.28.14","audit-ci":"^7.1.0","depcheck":"^1.4.7","prettier":"^3.6.2","@eslint/js":"^9.37.0","typescript":"^5.9.2","@types/node":"^24.3.0","lint-staged":"^16.2.4","vite-plugin-dts":"^4.5.4","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","webpack-bundle-analyzer":"^4.10.2","@microsoft/api-extractor":"^7.53.1","@typescript-eslint/parser":"^8.46.0","@typescript-eslint/eslint-plugin":"^8.46.0"},"_npmOperationalInternal":{"tmp":"tmp/ant-di_2.0.0_1760365752134_0.08708318397098114","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@davidcromianski-dev/ant-di","version":"2.0.1","description":"Simple JavaScript Dependency Injection Container inspired by PHP Pimple with advanced features like auto-wiring and service providers","keywords":["dependency-injection","di","container","typescript","javascript","auto-wiring","service-provider","singleton","factory","pimple"],"author":{"name":"David Cromianski","email":"davidcromianski.dev@gmail.com","url":"https://github.com/davidcromianski-dev"},"license":"MIT","type":"module","homepage":"https://davidcromianski-dev.github.io/ant-di/","bugs":{"url":"https://github.com/davidcromianski-dev/ant-di/issues"},"main":"dist/index.cjs.js","module":"dist/index.es.js","types":"dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"repository":{"type":"git","url":"git+https://github.com/davidcromianski-dev/ant-di.git"},"publishConfig":{"access":"public"},"devDependencies":{"@eslint/js":"^9.37.0","@microsoft/api-extractor":"^7.53.1","@types/node":"^24.3.0","@typescript-eslint/eslint-plugin":"^8.46.0","@typescript-eslint/parser":"^8.46.0","audit-ci":"^7.1.0","c8":"^10.1.3","depcheck":"^1.4.7","eslint":"^9.37.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","husky":"^9.1.7","lint-staged":"^16.2.4","poku":"^3.0.2","prettier":"^3.6.2","snyk":"^1.1300.0","ts-node":"^10.9.2","tsx":"^4.20.5","typedoc":"^0.28.14","typescript":"^5.9.2","vite":"^6.3.5","vite-plugin-dts":"^4.5.4","webpack-bundle-analyzer":"^4.10.2"},"scripts":{"build":"vite build","test":"poku","test:coverage":"c8 poku","test:watch":"poku --watch","examples":"npx ts-node examples/examples.ts","prepublish":"pnpm build && pnpm test","publish:npm":"npm publish","publish:dry-run":"npm publish --dry-run","lint":"eslint . --ext .ts,.tsx,.js,.jsx","lint:fix":"eslint . --ext .ts,.tsx,.js,.jsx --fix","format":"prettier --write .","format:check":"prettier --check .","type-check":"tsc --noEmit","docs:generate":"typedoc","docs:serve":"typedoc --serve","api:extract":"api-extractor run --local","api:update":"api-extractor run --local --update","security:audit":"audit-ci --config .audit-ci.json","security:snyk":"snyk test","security:snyk:monitor":"snyk monitor","deps:check":"depcheck","deps:outdated":"pnpm outdated","analyze:bundle":"webpack-bundle-analyzer dist/index.es.js","clean":"rm -rf dist coverage docs/api","precommit":"lint-staged","prepush":"pnpm test && pnpm type-check"},"_id":"@davidcromianski-dev/ant-di@2.0.1","_integrity":"sha512-FSb7L1mH3EhRQ6k3+cKgZ7Mp4Ff1LGYJYBd2CxjPc8Km9TqXx9cEEwmVurXC+KeLy4ypUrjE1GQDilXZwhMHNA==","_resolved":"/tmp/3a3165411fc52426182bc4d08ad343d2/davidcromianski-dev-ant-di-2.0.1.tgz","_from":"file:davidcromianski-dev-ant-di-2.0.1.tgz","_nodeVersion":"22.11.0","_npmVersion":"11.0.0","dist":{"integrity":"sha512-FSb7L1mH3EhRQ6k3+cKgZ7Mp4Ff1LGYJYBd2CxjPc8Km9TqXx9cEEwmVurXC+KeLy4ypUrjE1GQDilXZwhMHNA==","shasum":"03c09b9af03be4325242b55b7bca7dd6b02cb8d7","tarball":"https://registry.npmjs.org/@davidcromianski-dev/ant-di/-/ant-di-2.0.1.tgz","fileCount":41,"unpackedSize":68636,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDtmQZEo18xU+/xU44kyj0DwzeZAaUFBWTX32hxcXBW7gIgI14ZFNyLCAJAp0SvdM7lVh/OVTShrwMj3BZb3QaasDk="}]},"_npmUser":{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"},"directories":{},"maintainers":[{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ant-di_2.0.1_1760474003363_0.09924410846906206"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-22T13:41:15.442Z","modified":"2025-10-14T20:33:24.059Z","1.0.0":"2025-09-22T13:41:15.709Z","1.0.1":"2025-09-22T13:45:45.113Z","1.0.2":"2025-09-22T13:47:41.362Z","1.0.3":"2025-09-22T13:54:15.493Z","1.0.4":"2025-10-10T22:06:56.035Z","1.0.5":"2025-10-11T13:21:59.287Z","1.0.6":"2025-10-11T13:50:55.545Z","2.0.0":"2025-10-13T14:29:12.307Z","2.0.1":"2025-10-14T20:33:23.559Z"},"bugs":{"url":"https://github.com/davidcromianski-dev/ant-di/issues"},"author":{"name":"David Cromianski","email":"davidcromianski.dev@gmail.com","url":"https://github.com/davidcromianski-dev"},"license":"MIT","homepage":"https://davidcromianski-dev.github.io/ant-di/","keywords":["dependency-injection","di","container","typescript","javascript","auto-wiring","service-provider","singleton","factory","pimple"],"repository":{"type":"git","url":"git+https://github.com/davidcromianski-dev/ant-di.git"},"description":"Simple JavaScript Dependency Injection Container inspired by PHP Pimple with advanced features like auto-wiring and service providers","maintainers":[{"name":"davidcromianski-dev","email":"davidcromianski.dev@gmail.com"}],"readme":"# Ant DI\n\n[![npm version](https://img.shields.io/npm/v/@davidcromianski-dev/ant-di.svg?style=flat-square)](https://www.npmjs.com/package/@davidcromianski-dev/ant-di)\n[![npm downloads](https://img.shields.io/npm/dm/@davidcromianski-dev/ant-di.svg?style=flat-square)](https://www.npmjs.com/package/@davidcromianski-dev/ant-di)\n[![npm bundle size](https://img.shields.io/bundlephobia/minzip/@davidcromianski-dev/ant-di?style=flat-square)](https://www.npmjs.com/package/@davidcromianski-dev/ant-di)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue?style=flat-square&logo=typescript)](https://www.npmjs.com/package/@davidcromianski-dev/ant-di)\n\n## Simple JavaScript Dependency Injection Package\n\nThis package is a simple dependency injection container for JavaScript and\nTypeScript. It is inspired by the PHP Pimple package and provides advanced\nfeatures like wiring and service providers.\n\n![ant-di](https://github.com/user-attachments/assets/ed38e310-6c24-4b7e-a90f-fc524c811393)\n\n## Features\n\n- **Simple and lightweight** - Easy to use dependency injection container\n- **Auto-wiring** - Manual dependency resolution for TypeScript classes with\n  automatic singleton caching\n- **Singleton behavior** - Automatic instance caching ensures classes return the\n  same instance\n- **Factory support** - Create new instances on each request\n- **Protected callables** - Store functions without executing them\n- **Frozen keys** - Prevent modification after first resolution\n- **Service providers** - Modular service registration\n- **ValueObject management** - Isolated dependency management with advanced\n  features\n- **Circular dependency detection** - Built-in prevention of circular\n  dependencies\n- **Comprehensive error handling** - Detailed error classes for better debugging\n- **Comprehensive testing** - Full test coverage with Poku\n- **Rich examples** - Multiple usage patterns and real-world scenarios\n\n## Installation\n\n```bash\n# NPM\nnpm install @davidcromianski-dev/ant-di\n# PNPM\npnpm add @davidcromianski-dev/ant-di\n```\n\n## Dependencies\n\n### Runtime Dependencies\n\nThis package has **zero runtime dependencies**, making it lightweight and\navoiding dependency conflicts.\n\n### Development Dependencies\n\nThe following dependencies are used for development, testing, and building:\n\n- **[poku](https://github.com/antfu/poku)** - Fast test runner for Node.js\n- **[ts-node](https://github.com/TypeStrong/ts-node)** - TypeScript execution\n  engine for Node.js\n- **[tsx](https://github.com/esbuild-kit/tsx)** - TypeScript execution engine\n  with esbuild\n- **[typescript](https://github.com/microsoft/TypeScript)** - TypeScript\n  compiler\n- **[vite](https://github.com/vitejs/vite)** - Build tool and dev server\n- **[vite-plugin-dts](https://github.com/qmhc/vite-plugin-dts)** - TypeScript\n  declaration file generation for Vite\n\n## Jest Compatibility\n\nThis package is fully compatible with Jest and other CommonJS-based testing\nframeworks. The build process generates both ESM and CommonJS outputs:\n\n- **ESM**: `dist/index.es.js` - For modern bundlers and ES modules\n- **CommonJS**: `dist/index.cjs.js` - For Jest, Node.js, and CommonJS\n  environments\n\n### Using with Jest\n\nTo use this package with Jest, simply import from the CommonJS build:\n\n```typescript\n// Jest test file\nconst { Container } = require('@davidcromianski-dev/ant-di');\n\ndescribe('Container Tests', () => {\n  it('should create a container instance', () => {\n    const container = new Container();\n    expect(container).toBeInstanceOf(Container);\n  });\n});\n```\n\n## Quick Start\n\n```typescript\nimport { Container } from '@davidcromianski-dev/ant-di';\n\n// Create container\nconst container = new Container();\n\n// Register a service\ncontainer.set('database', () => new DatabaseConnection());\n\n// Get the service\nconst db = container.get('database');\n\n// Auto-wiring example\nclass UserService {\n  constructor(private db: DatabaseConnection) {}\n}\n\ncontainer.bind(UserService, [DatabaseConnection]);\nconst userService = container.get(UserService);\n```\n\n## Container\n\nThe container is the main class of the package. It is used to store the services\nand parameters of the application.\n\n### Creating a Container\n\n```typescript\nimport { Container } from '@davidcromianski-dev/ant-di';\n\n// Empty container\nconst container = new Container();\n\n// Container with initial values\nconst container = new Container({\n  'app.name': 'My Application',\n  'app.version': '1.0.0',\n});\n```\n\n### Basic Operations\n\n#### Registering Services\n\nTo register services in the container, you can use either the `set` method\n(recommended) or `offsetSet` method:\n\n```typescript\n// Simple value\ncontainer.set('app.name', 'My Application');\n\n// Factory function (traditional method)\ncontainer.set('database', () => new DatabaseConnection());\n\n// Factory function (direct method)\ncontainer.set('database', () => new DatabaseConnection(), true);\n\n// Class constructor\ncontainer.set('logger', Logger);\n\n// Legacy method (still supported)\ncontainer.offsetSet('app.name', 'My Application');\n```\n\n> [!NOTE] The `set` method is the recommended way to register services. The\n> `offsetSet` method is maintained for backward compatibility.\n>\n> The third parameter `factory` (default: false) allows you to directly register\n> a function as a factory without calling `container.factory()` first. When\n> `factory=true`, the function will be executed each time the service is\n> requested.\n\n#### Getting Services\n\nTo get services from the container, you can use the `get` method:\n\n```typescript\n// Get by string key\nconst appName = container.get('app.name');\n\n// Get by class constructor (auto-wiring)\nconst logger = container.get(Logger);\n```\n\n### Container Management\n\nThe container provides methods for managing its lifecycle:\n\n```typescript\n// Clear all registered services\ncontainer.clear();\n\n// Dispose of the container (calls clear internally)\ncontainer.dispose();\n```\n\n> [!TIP] Use `clear()` when you want to reset the container to its initial\n> state, and `dispose()` when you're completely done with the container\n> instance.\n\n> [!NOTE] If the service is a factory, it will be executed every time it is\n> requested.\n\n### Version Compatibility\n\n#### Version 3.0.0+ (Current)\n\nThe following methods are the **recommended** way to interact with the\ncontainer:\n\n```typescript\n// Service registration\ncontainer.set('key', value);\ncontainer.set('key', factory, true);\n\n// Service retrieval\ncontainer.get('key');\ncontainer.get(Constructor);\n\n// Service management\ncontainer.has('key');\ncontainer.unset('key');\n```\n\n#### Version < 3.0.0 (Legacy)\n\nThe following methods are **deprecated** but still supported for backward\ncompatibility:\n\n```typescript\n// Deprecated methods (still work, but not recommended)\ncontainer.offsetSet('key', value);\ncontainer.offsetGet('key');\ncontainer.offsetExists('key');\ncontainer.offsetUnset('key');\n```\n\n> [!IMPORTANT] **Migration Guide**: All deprecated methods now internally call\n> their modern equivalents:\n>\n> - `offsetSet()` → `set()`\n> - `offsetGet()` → `get()`\n> - `offsetExists()` → `has()`\n> - `offsetUnset()` → `unset()`\n>\n> Your existing code will continue to work, but consider migrating to the new\n> methods for better maintainability.\n\n> [!CAUTION] If the service is not in the container, an exception will be\n> thrown.\n\n#### Checking Service Existence\n\nTo check if a service is registered in the container, you can use the `has`\nmethod:\n\n```typescript\nconst exists = container.has('service');\n```\n\n#### Removing Services\n\nTo remove services from the container, you can use the `unset` method:\n\n```typescript\ncontainer.unset('service');\n```\n\n### Auto-wiring\n\nAnt DI supports manual dependency injection for TypeScript classes. You can\nregister dependencies manually.\n\n#### Manual Dependency Registration\n\n```typescript\nclass UserService {\n  constructor(\n    private db: DatabaseConnection,\n    private logger: Logger,\n  ) {}\n}\n\n// Register dependencies manually\ncontainer.bind(UserService, [DatabaseConnection, Logger]);\n\n// Get instance with auto-wired dependencies\nconst userService = container.get(UserService);\n```\n\n#### Dependency Binding by Name\n\nFor cases where you need to bind dependencies using class names as strings\n(useful for dynamic registration or avoiding circular import issues):\n\n```typescript\n// Alternative binding method using class name\ncontainer.bind('UserService', [DatabaseConnection, Logger]);\n\n// Both binding methods achieve the same result\nconst userService = container.get(UserService);\n```\n\n> [!TIP] The `bind()` method accepts both constructor functions and class name\n> strings, making it flexible for various use cases including dynamic class\n> loading or avoiding potential circular import issues in complex applications.\n\n#### Circular Dependency Detection\n\n```typescript\nclass ServiceA {\n  constructor(public serviceB: ServiceB) {}\n}\n\nclass ServiceB {\n  constructor(public serviceA: ServiceA) {}\n}\n\n// This will throw a circular dependency error\ncontainer.bind(ServiceA, [ServiceB]);\ncontainer.bind(ServiceB, [ServiceA]);\n```\n\n### Factory and Protection\n\n#### Registering Factories\n\nTo register factories in the container, you can use multiple methods:\n\n**Method 1: Using the `factory` method (traditional)**\n\n```typescript\nconst factory = (c: Container) => new Service();\ncontainer.factory(factory);\ncontainer.set('service', factory);\n```\n\n**Method 2: Using `set` with factory parameter (recommended)**\n\n```typescript\nconst factory = (c: Container) => new Service();\ncontainer.set('service', factory, true); // true = register as factory\n```\n\n> [!TIP] All three methods are equivalent. The `set` method with `factory=true`\n> is the recommended approach as it provides a more direct way to register\n> factories without needing to call `factory()` first.\n\n> [!TIP] Useful for services that need to be created every time they are\n> requested.\n\n#### Protecting Services\n\nTo protect services in the container, you can use the `protect` method:\n\n```typescript\nconst callable = (c: Container) => new Service();\ncontainer.protect(callable);\ncontainer.set('service', callable);\n```\n\n> [!TIP] By default, Ant DI assumes that any callable added to the container is\n> a factory for a service, and it will invoke it when the key is accessed. The\n> `protect()` method overrides this behavior, allowing you to store the callable\n> itself.\n\n#### Frozen Keys\n\nKeys become frozen after first resolution of implicit factories:\n\n```typescript\n// This creates an implicit factory\ncontainer.set('service', (c: Container) => new Service());\n\n// First access - works fine\nconst service = container.get('service');\n\n// Second access - throws error (key is frozen)\ncontainer.set('service', 'new value'); // Error!\n```\n\n### Getting Raw Values\n\nTo get raw values from the container, you can use the `raw` method:\n\n```typescript\nconst rawValue = container.raw('service');\n```\n\n> [!TIP] Useful when you need access to the underlying value (such as a closure\n> or callable) itself, rather than the result of its execution.\n\n### Getting All Keys\n\nTo get all keys registered in the container, you can use the `keys` method:\n\n```typescript\nconst keys = container.keys();\n```\n\n### Service Providers\n\nService providers allow you to organize the registration of services in the\ncontainer.\n\n```typescript\nimport { Container, IServiceProvider } from '@davidcromianski-dev/ant-di';\n\nclass DatabaseServiceProvider implements IServiceProvider {\n  register(container: Container) {\n    container.set('db.host', 'localhost');\n    container.set('db.port', 5432);\n\n    const connectionFactory = (c: Container) => ({\n      host: c.get('db.host'),\n      port: c.get('db.port'),\n      connect: () => `Connected to ${c.get('db.host')}:${c.get('db.port')}`,\n    });\n\n    container.factory(connectionFactory);\n    container.set('db.connection', connectionFactory);\n  }\n}\n\n// Register the service provider\ncontainer.register(new DatabaseServiceProvider());\n\n// Use the services\nconst connection = container.get('db.connection');\nconsole.log(connection.connect());\n```\n\n### Singleton Behavior & Instance Caching\n\nAnt DI automatically caches class instances to ensure singleton behavior:\n\n```typescript\nclass DatabaseService {\n  constructor() {\n    console.log('DatabaseService created');\n  }\n}\n\n// Register the class\ncontainer.bind(DatabaseService, []);\n\n// First access - creates instance\nconst db1 = container.get(DatabaseService); // \"DatabaseService created\"\n\n// Second access - returns cached instance\nconst db2 = container.get(DatabaseService); // No log (cached)\n\nconsole.log(db1 === db2); // true - same instance\n```\n\n> [!TIP] Class instances are cached by their constructor function, ensuring that\n> the same class always returns the same instance across the application.\n\n### ValueObject Management\n\nAnt DI provides advanced ValueObject management for isolated dependency\nhandling:\n\n```typescript\nimport { Container, ValueObject } from '@davidcromianski-dev/ant-di';\n\nclass DatabaseService {\n  constructor(public config: any) {}\n}\n\nclass UserService {\n  constructor(public db: DatabaseService) {}\n}\n\nconst container = new Container();\n\n// Create ValueObject with dependencies\nconst dbValueObject = new ValueObject(\n  container,\n  'DatabaseService',\n  DatabaseService,\n);\ndbValueObject.addDependency('dbConfig');\n\n// Register configuration\ncontainer.set('dbConfig', { host: 'localhost', port: 5432 });\n\n// Register service with ValueObject\ncontainer.set('DatabaseService', DatabaseService, false, ['dbConfig']);\n\n// Get ValueObject from container\nconst valueObject = container.getValueObject('DatabaseService');\n\n// ValueObject management methods\nconsole.log('Has dependency:', valueObject?.hasDependency('dbConfig'));\nconsole.log('Dependencies:', valueObject?.getDependencyKeys());\nconsole.log('Is resolvable:', valueObject?.isResolvable());\n\n// Create instance with dependency injection\nconst dbInstance = valueObject?.getValue();\nconsole.log('Database instance:', dbInstance instanceof DatabaseService);\n```\n\n#### ValueObject Features\n\n- **Dependency Management**: Add, remove, and validate dependencies\n- **Circular Dependency Detection**: Automatic detection and prevention\n- **Instance Creation**: Singleton and factory patterns\n- **Cloning**: Create copies of ValueObjects\n- **Validation**: Check if dependencies are resolvable\n\n```typescript\n// Advanced ValueObject usage\nconst valueObject = new ValueObject(container, 'UserService', UserService);\n\n// Add multiple dependencies\nvalueObject\n  .addDependency('DatabaseService')\n  .addDependency('Logger')\n  .asSingleton();\n\n// Validate dependencies\nif (valueObject.isResolvable()) {\n  const instance = valueObject.getValue();\n  console.log('Service created:', instance);\n}\n\n// Clone ValueObject\nconst cloned = valueObject.clone();\nconsole.log('Cloned dependencies:', cloned.getDependencyKeys());\n\n// Clear all dependencies\nvalueObject.clearDependencies();\nconsole.log(\n  'Dependencies cleared:',\n  valueObject.getDependencyKeys().length === 0,\n);\n```\n\n### Proxy Access\n\nThe container supports proxy access for convenient property-style access:\n\n```typescript\n// Set value\ncontainer.appName = 'My App';\n\n// Get value\nconsole.log(container.appName); // \"My App\"\n```\n\n## Testing\n\nThe project uses [Poku](https://github.com/antfu/poku) for testing. All tests\nare located in the `tests/` directory.\n\n### Running Tests\n\n```bash\n# Run all tests\nnpm test\n\n# Run tests in watch mode\nnpm run test:watch\n\n# Run tests with coverage\nnpm run test:coverage\n```\n\n### Test Structure\n\nTests are organized into logical groups:\n\n- **Basic Operations** - Core container functionality\n- **Factory Operations** - Factory and protection features\n- **Auto-wiring** - Dependency injection and resolution\n- **Frozen Keys** - Key freezing behavior\n- **Proxy Access** - Proxy functionality\n- **Constructor Initialization** - Container initialization\n- **Service Providers** - Service provider registration\n\n### Example Test\n\n```typescript\nimport { describe, it, assert } from 'poku';\nimport { Container } from '../src';\n\ndescribe('Container', () => {\n  describe('Basic Operations', () => {\n    it('should set and get a value', () => {\n      const container = new Container();\n      container.set('key', 'value');\n      const value = container.get('key');\n      assert.equal(value, 'value');\n    });\n  });\n});\n```\n\n## Examples\n\nComprehensive examples are available in the `examples/` directory:\n\n### Basic Usage\n\n```bash\nnpx ts-node examples/basic-usage.ts\n```\n\nDemonstrates simple value storage, factory functions, and basic container\noperations.\n\n### Dependency Injection\n\n```bash\nnpx ts-node examples/dependency-injection.ts\n```\n\nShows auto-wiring, manual dependency registration, and circular dependency\ndetection.\n\n### Factories and Protection\n\n```bash\nnpx ts-node examples/factories-and-protection.ts\n```\n\nExplains factory functions, protected callables, and frozen key behavior.\n\n### Service Providers\n\n```bash\nnpx ts-node examples/service-providers.ts\n```\n\nDemonstrates modular service registration using service providers.\n\n### Advanced Patterns\n\n```bash\nnpx ts-node examples/advanced-patterns.ts\n```\n\nReal-world scenarios including event systems and complex dependency graphs.\n\n### Run All Examples\n\n```bash\nnpx ts-node examples/index.ts\n```\n\n## API Reference\n\n### Container Class\n\n#### Constructor\n\n```typescript\nnew Container(values?: Record<string, ValueOrFactoryOrCallable<any>>)\n```\n\n#### Methods\n\n##### Core Container Operations\n\n- `set<T>(key: string, value: ValueOrFactoryOrCallable<T>, factory?: boolean): void` -\n  **Recommended method** to register a value, factory, or callable in the\n  container. The optional `factory` parameter (default: false) allows direct\n  factory registration when set to true.\n- `get<T>(key: string | Constructor<T>): T` - **Recommended method** to retrieve\n  a service by key or class constructor with auto-wiring\n- `has(key: string): boolean` - **Recommended method** to check if a key exists\n  in the container\n- `unset(key: string): void` - **Recommended method** to remove a key from the\n  container\n\n##### Legacy Methods (Deprecated since 3.0.0)\n\n- `offsetSet<T>(key: string, value: ValueOrFactoryOrCallable<T>, factory?: boolean): void` -\n  **Deprecated**. Use `set()` instead.\n- `offsetGet<T>(key: string | Constructor<T>): T` - **Deprecated**. Use `get()`\n  instead.\n- `offsetExists(key: string): boolean` - **Deprecated**. Use `has()` instead.\n- `offsetUnset(key: string): void` - **Deprecated**. Use `unset()` instead.\n\n##### Factory and Protection\n\n- `factory<T>(factory: Factory<T>): Factory<T>` - Mark a factory to always\n  create new instances (prevents singleton caching)\n- `protect(callable: Callable): Callable` - Protect a callable from being\n  treated as a factory\n\n##### Utility Methods\n\n- `raw<T>(key: string): T` - Get the raw value without executing factories or\n  callables\n- `keys(): string[]` - Get all registered keys in the container\n- `clear(): void` - Clear all registered services and reset the container to its\n  initial state\n- `dispose(): void` - Dispose of the container and clean up resources\n\n##### Service Providers\n\n- `register(provider: IServiceProvider, values?: Record<string, ValueOrFactoryOrCallable<any>>): Container` -\n  Register a service provider with optional additional values\n\n##### Dependency Injection\n\n- `bind(target: Function | string, dependencies: any[]): void` - Bind\n  dependencies for a class constructor or class name string\n- `getValueObject(key: string): ValueObjectInterface | undefined` - Get a\n  ValueObject for a given key if it exists\n\n##### ValueObject Management\n\n- `addDependency(dependency: DependencyKey): this` - Add a dependency to the\n  ValueObject\n- `removeDependency(dependency: DependencyKey): this` - Remove a specific\n  dependency\n- `hasDependency(dependency: DependencyKey): boolean` - Check if a dependency\n  exists\n- `validateDependencies(): boolean` - Validate all dependencies are available\n- `resolveDependencies(): any[]` - Resolve all dependencies with circular\n  dependency detection\n- `isResolvable(): boolean` - Check if the ValueObject can be resolved\n- `getDependencyKeys(): DependencyKey[]` - Get all dependency keys\n- `clearDependencies(): this` - Clear all dependencies\n- `clone(): ValueObjectInterface` - Create a copy of the ValueObject\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests for new functionality\n5. Run the test suite\n6. Submit a pull request\n\n## License\n\nThis project is licensed under the MIT License. For more details, see the\nLICENSE file.\n","readmeFilename":"README.md"}