{"_id":"@hemjs/needle","_rev":"44-50e8f080fa09a4eb864f8572989ff5bf","name":"@hemjs/needle","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@hemjs/needle","version":"1.0.0","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.0.0","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"605353cce1bba114a73dac495425ddee2b78860e","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.0.0.tgz","fileCount":14,"integrity":"sha512-wzld4cWllMewDinNx0IUOuDf1W7O4BES+67ipVV5JalufMNNK7aTNMy99uxejAN+cHH7P/qGttRwnQtWxn82bg==","signatures":[{"sig":"MEUCIQCmuMTftqMGLRLkfTWjJZEGzswdLgx11Wf9QEGLiqw6fAIgEpN/VmY4jT7te8btyC/8gYhSnWY5UUqAnK1gpviy/Fc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36009},"types":"./index.d.ts","gitHead":"e4fd567e1b15b4f7e04725cd81fffa07bd28c9b8","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"9.6.7","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"18.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.10","eslint":"8.56.0","rimraf":"5.0.5","ts-jest":"29.1.2","prettier":"3.2.5","release-it":"17.0.3","typescript":"5.3.3","@types/jest":"29.5.12","@types/node":"20.11.16","lint-staged":"15.2.2","@armscye/core":"0.2.0","@commitlint/cli":"18.6.0","@armscye/container":"0.3.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"6.21.0","@commitlint/config-conventional":"18.6.0","@typescript-eslint/eslint-plugin":"6.21.0","eslint-plugin-simple-import-sort":"10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.0.0_1707213513402_0.8347598089442114","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@hemjs/needle","version":"1.0.1","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.0.1","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"377f75c70b76f9a195917792d3c6fed35b7dbe6a","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.0.1.tgz","fileCount":14,"integrity":"sha512-dBBfkoYTtu1wN8TBcZntPhRaFMBaGv0b1fRFSe0qd3BFT910dPGDkW+yTDfIukcTjfwMWLYd8xtMIkucTzgiXw==","signatures":[{"sig":"MEYCIQDijKXp0opiCT1RLE9ulisEWoEIKUlVyvSzkZy/ijHCoQIhAIbQ14XN7PcJ+WFJt+CXFyUMuES6aCto+uGQbWcAg3Os","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36009},"types":"./index.d.ts","gitHead":"4114228f4b18124426fa64f9b27d30f895eeb8b2","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"9.6.7","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"18.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.10","eslint":"8.56.0","rimraf":"5.0.5","ts-jest":"29.1.2","prettier":"3.2.5","release-it":"17.0.3","typescript":"5.3.3","@types/jest":"29.5.12","@types/node":"20.11.17","lint-staged":"15.2.2","@armscye/core":"0.2.0","@commitlint/cli":"18.6.0","@armscye/container":"0.3.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"6.21.0","@commitlint/config-conventional":"18.6.0","@typescript-eslint/eslint-plugin":"6.21.0","eslint-plugin-simple-import-sort":"11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.0.1_1707480211036_0.14980498182079272","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@hemjs/needle","version":"1.0.2","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.0.2","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"6a9dcf92e8544a1d389c7c95762a677e4f76e86f","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.0.2.tgz","fileCount":14,"integrity":"sha512-OJ3oH43Oxtb2H4Y4POtdiJt7dFy4fjGkv927v86h1QQy7nM9zQ5MY794Y1lWSUozls18fKqC1zkMNZzhga/HpA==","signatures":[{"sig":"MEYCIQD3bnfIf2ZbJaGrwkwVV+LFmaeOyPzrqigFtTGYyDmekgIhALlQ0B2vINMALj0XERZEf1BKnlH21wamTum0aeCE1VXR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36048},"types":"./index.d.ts","gitHead":"9c8dd3062c1382bd78c2b5796ec6d8771632a027","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"9.6.7","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"18.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.11","eslint":"8.56.0","rimraf":"5.0.5","ts-jest":"29.1.2","prettier":"3.2.5","release-it":"17.1.1","typescript":"5.3.3","@types/jest":"29.5.12","@types/node":"20.11.20","lint-staged":"15.2.2","@armscye/core":"0.4.0","@commitlint/cli":"18.6.1","@armscye/container":"0.5.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"7.0.2","@commitlint/config-conventional":"18.6.2","@typescript-eslint/eslint-plugin":"7.0.2","eslint-plugin-simple-import-sort":"12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.0.2_1708678459648_0.44731575481738695","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@hemjs/needle","version":"1.0.3","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.0.3","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"f98c28b462220f4c2c41c754aa1c4a8cbc41f616","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.0.3.tgz","fileCount":13,"integrity":"sha512-17CMgJsCdNEWJ817uSrfs8eJgY057eQonS87rt6nDHDBkmuquZSMLw5nfmZoNNdhYFBMzvqxPo3hS7Ep+zVNPQ==","signatures":[{"sig":"MEYCIQCz+HvPI/rIRl3xNGGTw0ShgngbDetfnONaF+ma5bCeoQIhAINkTk+Yyp8deUfTBmJq0lvRphljaRSiqgkZRx6SdHEJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36012},"types":"./index.d.ts","gitHead":"f89b3748f59f72e5544e775412d12143364e86df","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.2.4","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.11","eslint":"8.57.0","rimraf":"5.0.5","ts-jest":"29.1.2","prettier":"3.2.5","release-it":"17.1.1","typescript":"5.3.3","@types/jest":"29.5.12","@types/node":"20.11.20","lint-staged":"15.2.2","@armscye/core":"0.4.0","@commitlint/cli":"18.6.1","@armscye/container":"0.5.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"7.0.2","@commitlint/config-conventional":"18.6.2","@typescript-eslint/eslint-plugin":"7.0.2","eslint-plugin-simple-import-sort":"12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.0.3_1708875255772_0.05609243324370339","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@hemjs/needle","version":"1.0.4","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.0.4","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"98446a07f3da251631e27c1692f7bb25a263856a","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.0.4.tgz","fileCount":13,"integrity":"sha512-9ZR/E/4rFifQsccZaImn7p00jSrz9xLeM2XwowOCLtFlLp9+fgSpY/Z/JKPPQuWHyeSoKp02A8NPW5AOa4P3FA==","signatures":[{"sig":"MEQCIF+WvDCP9TonqxJLuXYc55zGy5EDAivYmMQRyjmbO/vrAiBbp/tNJq/3Wt5jj88bF1jnG5BbjXPtWKxjAX7Qqqz4aw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36012},"types":"./index.d.ts","gitHead":"61d01d81c5fb0b34e2d8efc05787f3b096838ffb","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.2.4","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.11","eslint":"8.57.0","rimraf":"5.0.5","ts-jest":"29.1.2","prettier":"3.2.5","release-it":"17.1.1","typescript":"5.4.2","@types/jest":"29.5.12","@types/node":"20.11.30","lint-staged":"15.2.2","@armscye/core":"0.4.0","@commitlint/cli":"19.2.1","@armscye/container":"0.5.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"7.3.1","@commitlint/config-conventional":"19.1.0","@typescript-eslint/eslint-plugin":"7.3.1","eslint-plugin-simple-import-sort":"12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.0.4_1710905549356_0.5408895337235573","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@hemjs/needle","version":"1.0.5","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.0.5","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"b22237342f7f7edc97a306105bb75e69b14115b2","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.0.5.tgz","fileCount":13,"integrity":"sha512-uvqRmbQ7s4HSOxytahEaLThDqNTlAUtlN7784GImfr43jq0vfNdK6q/FmOQHPHq+aoGWrheGRGBnbY1+EI8PRg==","signatures":[{"sig":"MEQCIFS/xW1SvEu11jiqj66kyYAwXbmfDKoHSVcqZHufRJExAiA12M5Vzgx24cwm+rMeazVc9Vq4tkg4ahr8MYdlbFMv/A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36012},"types":"./index.d.ts","gitHead":"c635e56e2253ed674b7a6e98fc53d20dc72c4c1d","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.2.4","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"18.19.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.11","eslint":"8.57.0","rimraf":"5.0.5","ts-jest":"29.1.2","prettier":"3.2.5","release-it":"17.1.1","typescript":"5.4.3","@types/jest":"29.5.12","@types/node":"20.11.30","lint-staged":"15.2.2","@armscye/core":"0.4.0","@commitlint/cli":"19.2.1","@armscye/container":"0.5.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"7.4.0","@commitlint/config-conventional":"19.1.0","@typescript-eslint/eslint-plugin":"7.4.0","eslint-plugin-simple-import-sort":"12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.0.5_1711625742284_0.023559027530946963","host":"s3://npm-registry-packages"}},"1.0.6":{"name":"@hemjs/needle","version":"1.0.6","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.0.6","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"45accd18a754440544455e968a9b22bb474ca1df","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.0.6.tgz","fileCount":13,"integrity":"sha512-ZqHo75+drOHYGSNk/yTLLjqcbKAJC/Vl80Ti3S1jIgNdlLzIH4+dduRTyQpp3OyqQMO+Vjqy5xtUxTkVSkZ2iA==","signatures":[{"sig":"MEUCIB2RJjunn0i19dAPUqpqdxVu2TIjC9/QBCwcY+ti2+VxAiEAu4l/xOyCzIrKEMWMuInSSHBXbUlgqnzR7pcV/FaiSXg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36011},"types":"./index.d.ts","gitHead":"41dfe72c9d3639810bba0e3d1b7fd5e64cf551cc","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.2.4","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"18.19.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.11","eslint":"8.57.0","rimraf":"5.0.5","ts-jest":"29.1.2","prettier":"3.2.5","release-it":"17.2.1","typescript":"5.4.5","@types/jest":"29.5.12","@types/node":"20.12.8","lint-staged":"15.2.2","@armscye/core":"0.4.0","@commitlint/cli":"19.3.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"7.8.0","@commitlint/config-conventional":"19.2.2","@typescript-eslint/eslint-plugin":"7.8.0","eslint-plugin-simple-import-sort":"12.1.0"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.0.6_1714727112800_0.12769018577306368","host":"s3://npm-registry-packages"}},"1.0.7":{"name":"@hemjs/needle","version":"1.0.7","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.0.7","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"901b54ade58c9ac7431e0ed0172763f1040ccbe2","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.0.7.tgz","fileCount":13,"integrity":"sha512-zSfhkwFrIWDTbSuww1ZYkV8HQNpl5zDVBCEIlLsm+LvrxHYVaWXmYCO5PatzMBVq2HSr3gUpi+wiEjFBeP66eA==","signatures":[{"sig":"MEYCIQC6Y+lH887PEruuAjz8rhGFlc3Tm8ixK2RuUeYJs88N5gIhAP4I8Hj5sLOSLRYDJ9b4NF00IxxEzcWrDc+hq6XL5sZ1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36014},"types":"./index.d.ts","gitHead":"f71a558c90983621d6bb24e42372350bef1c30b3","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.2.4","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"18.19.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.11","eslint":"8.57.0","rimraf":"5.0.7","ts-jest":"29.1.4","prettier":"3.2.5","release-it":"17.3.0","typescript":"5.4.5","@types/jest":"29.5.12","@types/node":"20.12.13","lint-staged":"15.2.5","@armscye/core":"0.4.0","@commitlint/cli":"19.3.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"7.11.0","@commitlint/config-conventional":"19.2.2","@typescript-eslint/eslint-plugin":"7.11.0","eslint-plugin-simple-import-sort":"12.1.0"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.0.7_1717136766173_0.2503646700640556","host":"s3://npm-registry-packages"}},"1.0.8":{"name":"@hemjs/needle","version":"1.0.8","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.0.8","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"42a37f0107d43c3122a16dd615e37b151d5f131d","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.0.8.tgz","fileCount":13,"integrity":"sha512-km/qahq5gYcvKG0EdIDu5rYNu5s9rhNkpljshEX6BChokhw1ZpoffNmqeKgMXn6/VDmAJlgSXCqfIU8oQwIj0w==","signatures":[{"sig":"MEUCIGFIGDa5fUd5NC18oTybUHkVRyPhPq6I0vMRhyAkpEV0AiEA0691ctvpQF3rz6PEvXR13w/z6jM/i7IjNuIa1dXf2pw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35917},"types":"./index.d.ts","gitHead":"c0591fc7f3f15317f6a627e6f840a2ced030e980","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.7.0","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.1.4","eslint":"8.57.0","rimraf":"6.0.1","ts-jest":"29.2.4","prettier":"3.3.3","release-it":"17.6.0","typescript":"5.5.4","@types/jest":"29.5.12","@types/node":"20.14.14","lint-staged":"15.2.8","@armscye/core":"0.4.0","@commitlint/cli":"19.3.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"8.0.0","@commitlint/config-conventional":"19.2.2","@typescript-eslint/eslint-plugin":"8.0.0","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.0.8_1722843073500_0.41532690587010923","host":"s3://npm-registry-packages"}},"1.0.9":{"name":"@hemjs/needle","version":"1.0.9","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.0.9","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"4f2bc01c49911c970054d770124edb4c05247a09","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.0.9.tgz","fileCount":13,"integrity":"sha512-IvJB6528sMHkYy5jEBZEmJmMMtAN2w7XKB1f5k9o5dKCmO5dlYH7UZV7c30nJYgVl2GBqDcpTVh6XI/SWJA4Yg==","signatures":[{"sig":"MEUCIQDWbpiY/LFoXch0SieP+XlftOpRMxMivK5w+7EFP1Vq3gIgInvEAEkXWthabWbkSLiaIybobNDiVpjFHV7hRk6Sv28=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35917},"types":"./index.d.ts","gitHead":"62bbc35a7a7ab8622097a875abf31cf492ab3568","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.8.2","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.1.6","eslint":"8.57.0","rimraf":"6.0.1","ts-jest":"29.2.5","prettier":"3.3.3","release-it":"17.6.0","typescript":"5.6.2","@types/jest":"29.5.13","@types/node":"20.16.5","lint-staged":"15.2.10","@armscye/core":"0.4.0","@commitlint/cli":"19.5.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.30.0","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"8.5.0","@commitlint/config-conventional":"19.5.0","@typescript-eslint/eslint-plugin":"8.5.0","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.0.9_1726488939520_0.5778746647519495","host":"s3://npm-registry-packages"}},"1.0.10":{"name":"@hemjs/needle","version":"1.0.10","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.0.10","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"b6b188c7d045c58defbfae75302b1955c739c459","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.0.10.tgz","fileCount":13,"integrity":"sha512-PE4C5cjRbshOIJbSFiX7j5/IrBog4bGkPNQzb9mRbbhNe8IZSbyCskW17YMzG1/eQAODGz6ryAMVkJ1XTOoKfA==","signatures":[{"sig":"MEUCIQCdBqNy8p4MZbV0/WUHOyVUd/q5PfG8bQZQYdLqBL6jwgIgI8qr/ywgGhmhtXV0SZ65/rRuJk8KhP9yRhJbBu1ul3A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35919},"types":"./index.d.ts","gitHead":"7be66ec59cfb6821de0dafb8a49269a43c01a8a7","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.8.2","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.1.6","eslint":"9.11.1","rimraf":"6.0.1","ts-jest":"29.2.5","prettier":"3.3.3","release-it":"17.7.0","typescript":"5.6.2","@types/jest":"29.5.13","@types/node":"20.16.10","lint-staged":"15.2.10","@armscye/core":"0.4.0","@commitlint/cli":"19.5.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.31.0","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"8.8.0","@commitlint/config-conventional":"19.5.0","@typescript-eslint/eslint-plugin":"8.8.0","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.0.10_1728046754097_0.6218747047210114","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@hemjs/needle","version":"1.1.0","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.1.0","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"07ad9c5e5165c2abcb017e3a1eed09d4ba32a297","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.1.0.tgz","fileCount":13,"integrity":"sha512-5snu2X6Ly0/s1fVkBVzusWY1inT+ElND1dIXKvZe1VFumk2LJfHUu5CJPeMPPcNcgSgNLCMho0JcHvhftnE0hw==","signatures":[{"sig":"MEUCIFEIN2zn8aMTz8oTWtMo5Io5smpLLXLQV0HagzSe58u+AiEA+aGm3T167ikWtFLmkInQ01vJGdK4J+/N5zREz7TN9h4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35921},"types":"./index.d.ts","gitHead":"9ce3499080f89e3e2ba2e58e777d2732fc25ca8e","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.8.2","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.1.6","eslint":"9.13.0","rimraf":"6.0.1","ts-jest":"29.2.5","prettier":"3.3.3","release-it":"17.10.0","typescript":"5.6.3","@types/jest":"29.5.13","@types/node":"20.16.13","lint-staged":"15.2.10","@armscye/core":"0.4.0","@commitlint/cli":"19.5.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.31.0","eslint-config-prettier":"9.1.0","@typescript-eslint/parser":"8.10.0","@commitlint/config-conventional":"19.5.0","@typescript-eslint/eslint-plugin":"8.10.0","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.1.0_1729498592921_0.8067193133331934","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@hemjs/needle","version":"1.2.0","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.2.0","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"6477d47af71437b4dbe90f6dbac8a879f031fd6f","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.2.0.tgz","fileCount":14,"integrity":"sha512-QhYWq9G4ymt70fpvQ1Jh3djYDOkzyNCyouiTPqWA3DtuIjZfn/oyhuR6KsxmZAIvPthabxp87dnx+9fuDT6Dmw==","signatures":[{"sig":"MEUCIEngaE5E9CJFjm8t/TR/QwhVvA7GPAyf7nWO56LlzuJhAiEAidjEjwaoRP6JvMBoDKzJqnFi8TyOwYEw3QcWL5dB/nk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37396},"types":"./index.d.ts","gitHead":"912eec43842bf2da844cffd7bda1c3d06fc9f98a","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","prepare":"husky","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.8.2","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.1.6","eslint":"9.13.0","rimraf":"6.0.1","ts-jest":"29.2.5","prettier":"3.3.3","@eslint/js":"^9.13.0","release-it":"17.10.0","typescript":"5.6.3","@types/jest":"29.5.14","@types/node":"20.16.15","lint-staged":"15.2.10","@armscye/core":"0.4.0","@commitlint/cli":"19.5.0","typescript-eslint":"^8.11.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.31.0","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"8.11.0","@commitlint/config-conventional":"19.5.0","@typescript-eslint/eslint-plugin":"8.11.0","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.2.0_1729670395566_0.9640551013954235","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"@hemjs/needle","version":"1.2.1","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.2.1","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"cd74b34af3154c3bb0e5e34654f48d67a7307156","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.2.1.tgz","fileCount":14,"integrity":"sha512-107ZkBI8S06UIdYsJv1bv5ijOBYOPFY6GIbK4Lzn2F0t0pONjXezmhM1f3rdYV/7bBg1OVJuBMJhI5KD2nx5vw==","signatures":[{"sig":"MEUCIE98VBANaaA7BJozk0g41UnGNfFq8jNeIVVIoXfsif9xAiEApjZbZnxbwKFWlLCcPzAsbjSwYyXeaA3TUVNSV1JlrrI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37346},"types":"./index.d.ts","gitHead":"1838a06508095b9b91c88fee30f80c7fa57366d2","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","prepare":"husky","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.8.2","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.1.6","eslint":"9.13.0","rimraf":"6.0.1","ts-jest":"29.2.5","prettier":"3.3.3","@eslint/js":"^9.13.0","release-it":"17.10.0","typescript":"5.6.3","@types/jest":"29.5.14","@types/node":"20.16.15","lint-staged":"15.2.10","@armscye/core":"0.4.0","@commitlint/cli":"19.5.0","typescript-eslint":"^8.11.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.31.0","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"8.11.0","@commitlint/config-conventional":"19.5.0","@typescript-eslint/eslint-plugin":"8.11.0","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.2.1_1729673459162_0.2777439053717168","host":"s3://npm-registry-packages"}},"1.2.2":{"name":"@hemjs/needle","version":"1.2.2","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.2.2","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"f58f1faee81890c1dc2d58b471a95286b559f5a5","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.2.2.tgz","fileCount":14,"integrity":"sha512-SWJ2Jn/XYPFGJwFM/AUS8r1B0mOFyajvye4VuFBVZ9HYR/MsSWk8g6AMRNHIDGodH1OKU9xerbitKmlj4RkOnA==","signatures":[{"sig":"MEUCIF5d/O3Lbc9QyOWdM3oGqmkcRV4kH0S4vjZoJw3BZuNzAiEA067k8/fUcluY2lKM1SrJDqur6CDU6+bGk8KD2WmqEDA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37345},"types":"./index.d.ts","gitHead":"1612173744ba7b0ab8d1baf7040445b8d7cb0cd5","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","prepare":"husky","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.8.2","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.1.7","eslint":"9.16.0","rimraf":"6.0.1","ts-jest":"29.2.5","prettier":"3.4.2","@eslint/js":"^9.13.0","release-it":"17.10.0","typescript":"5.7.2","@types/jest":"29.5.14","@types/node":"22.10.1","lint-staged":"15.2.11","@armscye/core":"0.4.0","@commitlint/cli":"19.6.0","typescript-eslint":"^8.11.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.31.0","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"8.18.0","@commitlint/config-conventional":"19.6.0","@typescript-eslint/eslint-plugin":"8.18.0","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.2.2_1733902152289_0.19615609567516445","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@hemjs/needle","version":"1.2.3","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.2.3","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"a81e97e2adacdd9ad4a0bd5d1977f91a7c9ace40","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.2.3.tgz","fileCount":14,"integrity":"sha512-jQEuZgm5QVe9v93hhrcFYS7yp8k2di5vpcZWIiANdjeey5p2LN9FfseqEiVxT3j5E6exrhPa2yGDX2fCcZd/cQ==","signatures":[{"sig":"MEYCIQDGKaTYCTlSmrdjWvhQuFq2P0i3IxTtbCUAifBZDe/jegIhANvBjTpfe2fAy9Izt696/7rnwTFuBcJIYOx6AnYHkbvj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37344},"types":"./index.d.ts","gitHead":"95154d8aa9985b2b3832133893a5d73d1b44e9b6","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","prepare":"husky","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.8.2","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.18.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.1.7","eslint":"9.18.0","rimraf":"6.0.1","ts-jest":"29.2.5","prettier":"3.4.2","@eslint/js":"^9.13.0","release-it":"18.1.1","typescript":"5.7.3","@types/jest":"29.5.14","@types/node":"22.10.7","lint-staged":"15.4.1","@armscye/core":"0.4.0","@commitlint/cli":"19.6.1","typescript-eslint":"^8.11.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.31.0","eslint-config-prettier":"10.0.1","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"8.20.0","@commitlint/config-conventional":"19.6.0","@typescript-eslint/eslint-plugin":"8.20.0","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.2.3_1737091509856_0.10570383001191419","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@hemjs/needle","version":"1.2.4","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.2.4","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"eede497a95c86bc0318f72b67638e539fab3cd88","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.2.4.tgz","fileCount":14,"integrity":"sha512-3dONPTNDyr/67dHnS77ZXstsTCB/4EMIy7Xf59OI1EAuFSRkPldnJrgiADReHfRy2q/AqYiDZ568G4CLNOVgpg==","signatures":[{"sig":"MEUCIQCToZU5q7+ndr6yilmG/Fz/ojeeMIz3uwP5Jfx0gWEPxAIgWWFF5fUz1crFut3oNpN8sTnsjkaApXep8KSiRTZ6JFU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37344},"types":"./index.d.ts","gitHead":"0b25bb38e066e32c352622ecc735668dc02fc82e","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","prepare":"husky","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.8.2","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.18.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.1.7","eslint":"9.19.0","rimraf":"6.0.1","ts-jest":"29.2.5","prettier":"3.4.2","@eslint/js":"^9.13.0","release-it":"18.1.2","typescript":"5.7.3","@types/jest":"29.5.14","@types/node":"22.13.0","lint-staged":"15.4.3","@armscye/core":"0.4.0","@commitlint/cli":"19.7.1","typescript-eslint":"^8.11.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.31.0","eslint-config-prettier":"10.0.1","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"8.22.0","@commitlint/config-conventional":"19.7.1","@typescript-eslint/eslint-plugin":"8.22.0","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.2.4_1738571981186_0.47433261935040205","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@hemjs/needle","version":"1.2.5","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.2.5","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"3a061710f69b112316ad249f5f47b43328a668ae","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.2.5.tgz","fileCount":14,"integrity":"sha512-hBANSOAGrmsY7NtoyhGWGVDKNjpvNsUPzntFWyhSpPvKzzE0uEA75K5phljSSqPS5kT3AAOxpSudKD6K03JqLw==","signatures":[{"sig":"MEQCIHJkPeEOEGJfkYLwZHS8TCN06eQ4Zwlkd7m9PrFomrTCAiAa4tWVHm9uySy7txoKq+N577gx2kL236S+e9ELjnY4TQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37344},"types":"./index.d.ts","gitHead":"7bb66057aa5d282fe87f416aea4643fde8ebd2dc","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","prepare":"husky","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.8.2","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.18.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.1.7","eslint":"9.20.1","rimraf":"6.0.1","ts-jest":"29.2.5","prettier":"3.5.0","@eslint/js":"^9.13.0","release-it":"18.1.2","typescript":"5.7.3","@types/jest":"29.5.14","@types/node":"22.13.1","lint-staged":"15.4.3","@armscye/core":"0.4.0","@commitlint/cli":"19.7.1","typescript-eslint":"^8.11.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.31.0","eslint-config-prettier":"10.0.1","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"8.24.0","@commitlint/config-conventional":"19.7.1","@typescript-eslint/eslint-plugin":"8.24.0","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.2.5_1739354436018_0.4497632315220954","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"@hemjs/needle","version":"1.2.6","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.2.6","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"ea9848e481144b6146245e3dff951ab0a4c1bcef","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.2.6.tgz","fileCount":14,"integrity":"sha512-nPakfZE0MjlDQNNhIVdZN+l8Hks+Ti9+uTu+QdjDk6+ZC1k5KxaBp6ti4Tu9MSEk02uXbsze3PX+ZJuV3wzt4g==","signatures":[{"sig":"MEUCIDY0dJB2riTGTtz5AaEfBzIgzkP/YJvqu/weKOVrsFSoAiEAzV4Zl+LQSijg0W9m/KNmGOA9sOvDQk+Lenn7XFZaekc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37345},"types":"./index.d.ts","gitHead":"f7a88bcff6b49a9003befb1abe0f9fe2dc8fe6e4","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","prepare":"husky","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.8.2","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"20.18.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.1.7","eslint":"9.22.0","rimraf":"6.0.1","ts-jest":"29.2.6","prettier":"3.5.3","@eslint/js":"^9.13.0","release-it":"18.1.2","typescript":"5.8.2","@types/jest":"29.5.14","@types/node":"22.13.10","lint-staged":"15.5.0","@armscye/core":"0.4.0","@commitlint/cli":"19.8.0","typescript-eslint":"^8.11.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.31.0","eslint-config-prettier":"10.1.1","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"8.26.1","@commitlint/config-conventional":"19.8.0","@typescript-eslint/eslint-plugin":"8.26.1","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.2.6_1742211822597_0.29626996112593407","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"@hemjs/needle","version":"1.2.7","keywords":["hemjs","needle","container","dependency-injection"],"author":{"name":"Augustus Kamau"},"license":"MIT","_id":"@hemjs/needle@1.2.7","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"dist":{"shasum":"b26d7d4376eb65fb8558d0998a269bb2986344fb","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.2.7.tgz","fileCount":14,"integrity":"sha512-owctVTcvaVBu96GjZXBfWBJEOTvzgvUGjl6WmWY3F/l7Q9+PA/1Cwb7Z/WUb9PJUg/IL65IpVUggxwaTel6r6g==","signatures":[{"sig":"MEUCIGi6g7q+mmkFEfafnCrM2wMLSyAIkUKgJdWM2y2yrSLiAiEAuA48A54U+zuxP14wyLAUSGz9/aBqh9NIREm20Qzr/n4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37343},"types":"./index.d.ts","gitHead":"3011ffd82795d7acae4e138d79d7d79c43f53d9a","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","prepare":"husky","release":"release-it","prebuild":"rimraf dist","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build"},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"repository":{"url":"git+https://github.com/hemjs/needle.git","type":"git"},"_npmVersion":"10.9.2","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","directories":{},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.0.5","husky":"9.1.7","eslint":"9.32.0","rimraf":"6.0.1","ts-jest":"29.4.1","prettier":"3.6.2","@eslint/js":"^9.13.0","release-it":"19.0.4","typescript":"5.9.2","@types/jest":"30.0.0","@types/node":"22.17.0","lint-staged":"16.1.4","@armscye/core":"0.4.0","@commitlint/cli":"19.8.1","typescript-eslint":"^8.11.0","@armscye/container":"0.5.0","eslint-plugin-import":"2.32.0","eslint-config-prettier":"10.1.8","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"8.39.0","@commitlint/config-conventional":"19.8.1","@typescript-eslint/eslint-plugin":"8.39.0","eslint-plugin-simple-import-sort":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/needle_1.2.7_1754464456336_0.8573183535895237","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@hemjs/needle","version":"1.3.0","description":"A fast and intuitive dependency injection container for JavaScript and Node.js","author":{"name":"Augustus Kamau"},"license":"MIT","keywords":["hemjs","needle","container","dependency-injection"],"scripts":{"prebuild":"rimraf dist","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","test:cov":"jest --coverage","prerelease":"npm run prebuild && npm run build","release":"release-it","prepare":"husky"},"devDependencies":{"@armscye/container":"0.7.0","@armscye/core":"0.4.3","@commitlint/cli":"21.2.2","@commitlint/config-conventional":"21.2.2","@eslint/js":"10.0.1","@types/jest":"30.0.0","@types/node":"24.13.3","eslint":"10.9.1","eslint-config-prettier":"10.1.8","globals":"17.12.0","husky":"9.1.7","jest":"30.5.1","lint-staged":"17.4.1","prettier":"3.9.6","release-it":"21.0.2","rimraf":"6.1.3","ts-jest":"29.4.12","typescript":"6.0.3","typescript-eslint":"8.69.0"},"homepage":"https://github.com/hemjs/needle#readme","bugs":{"url":"https://github.com/hemjs/needle/issues"},"repository":{"type":"git","url":"git+https://github.com/hemjs/needle.git"},"publishConfig":{"access":"public"},"lint-staged":{"*.ts":["prettier --write","eslint --fix"]},"_id":"@hemjs/needle@1.3.0","gitHead":"960b23f8aac365ccc07bf29be2ee2589f2144cf7","types":"./index.d.ts","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-TADIvpk0TsHO3SdO0yozsHpFaWlr7rPZ2O+bud6HHnny7chMn3bNLx+eOCbgYsqcO6CT2u/t5zczibkrPlxn7w==","shasum":"139d322cd256f2a6a2f407a669e36ec250042827","tarball":"https://registry.npmjs.org/@hemjs/needle/-/needle-1.3.0.tgz","fileCount":14,"unpackedSize":40145,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICk8ZjcReo6UeiefXFrZ6P1Gf4ztCGnrcWEByFA/nMm1AiAThwkab4f5FFlU+RjLR/kgxX8Zl9d8n+Gs1DBFYjhyHw=="}]},"_npmUser":{"name":"augusito","email":"kaugustus15@gmail.com"},"directories":{},"maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/needle_1.3.0_1788344764901_0.9584142021976352"},"_hasShrinkwrap":false}},"time":{"created":"2024-02-06T09:58:33.339Z","modified":"2026-09-02T10:26:05.224Z","0.1.0":"2023-02-05T09:28:27.542Z","0.2.0":"2023-02-13T11:44:39.481Z","0.2.1":"2023-03-15T18:03:22.997Z","0.2.2":"2023-03-26T18:50:04.739Z","0.2.3":"2023-04-26T16:50:38.787Z","0.2.4":"2023-05-21T09:53:11.630Z","0.2.5":"2023-05-21T09:55:12.715Z","0.3.0":"2023-06-29T19:13:06.468Z","0.4.0":"2023-07-30T06:06:25.985Z","0.4.1":"2023-08-01T17:13:09.567Z","0.4.2":"2023-08-02T15:23:16.573Z","0.4.3":"2023-09-09T18:40:09.546Z","0.4.4":"2023-10-17T13:21:15.166Z","0.4.5":"2023-11-05T12:33:38.807Z","0.4.6":"2023-11-26T12:15:15.914Z","0.4.7":"2023-12-04T11:52:35.745Z","0.4.8":"2023-12-21T02:31:17.511Z","0.5.0":"2024-02-05T11:32:07.943Z","0.5.1":"2024-02-06T09:26:42.170Z","0.5.2":"2024-02-06T09:33:15.642Z","1.0.0":"2024-02-06T09:58:33.570Z","1.0.1":"2024-02-09T12:03:31.230Z","1.0.2":"2024-02-23T08:54:19.788Z","1.0.3":"2024-02-25T15:34:16.011Z","1.0.4":"2024-03-20T03:32:29.559Z","1.0.5":"2024-03-28T11:35:42.439Z","1.0.6":"2024-05-03T09:05:12.953Z","1.0.7":"2024-05-31T06:26:06.328Z","1.0.8":"2024-08-05T07:31:13.700Z","1.0.9":"2024-09-16T12:15:39.752Z","1.0.10":"2024-10-04T12:59:14.286Z","1.1.0":"2024-10-21T08:16:33.123Z","1.2.0":"2024-10-23T07:59:55.824Z","1.2.1":"2024-10-23T08:50:59.351Z","1.2.2":"2024-12-11T07:29:12.497Z","1.2.3":"2025-01-17T05:25:10.039Z","1.2.4":"2025-02-03T08:39:41.385Z","1.2.5":"2025-02-12T10:00:36.293Z","1.2.6":"2025-03-17T11:43:42.820Z","1.2.7":"2025-08-06T07:14:16.514Z","1.3.0":"2026-09-02T10:26:05.040Z"},"bugs":{"url":"https://github.com/hemjs/needle/issues"},"author":{"name":"Augustus Kamau"},"license":"MIT","homepage":"https://github.com/hemjs/needle#readme","keywords":["hemjs","needle","container","dependency-injection"],"repository":{"type":"git","url":"git+https://github.com/hemjs/needle.git"},"description":"A fast and intuitive dependency injection container for JavaScript and Node.js","maintainers":[{"name":"augusito","email":"kaugustus15@gmail.com"}],"readme":"# @hemjs/needle\n\n> A fast and intuitive dependency injection container for JavaScript and Node.js.\n\n## Table of contents\n\n- [Installation](#installation)\n- [Quick start](#quick-start)\n- [Introduction](#introduction)\n- [Features](#features)\n- [Container](#container)\n- [Lifetime](#lifetime)\n- [Providers](#providers)\n- [Best practices](#best-practices)\n- [License](#license)\n\n## Installation\n\nInstall with npm:\n\n```sh\nnpm install --save @hemjs/needle\n```\n\nInstall with yarn:\n\n```sh\nyarn add @hemjs/needle\n```\n\n## Quick start\n\n```tsx\nimport { Needle } from '@hemjs/needle';\n\n// Placeholder for a class that interacts with user data storage (implementation not shown).\nclass UserRepository {}\n\n// Service for managing user-related operations. It depends on UserRepository to access user data.\nclass UserService {\n  userRepository: UserRepository;\n\n  constructor(userRepository: UserRepository) {\n    this.userRepository = userRepository;\n  }\n\n  // Example method using UserRepository to retrieve a user by ID\n  async getUserById(userId: number): Promise {\n    return this.userRepository.getUserById(userId);\n  }\n}\n\n// Define providers for Needle to create and manage services and their dependencies\nconst providers = [\n  {\n    // Register UserRepository as a provider, using the class itself as the implementation\n    provide: UserRepository.name,\n    useClass: UserRepository,\n  },\n\n  {\n    // Register UserService as a provider, using a factory function to create it with its dependency\n    provide: UserService.name,\n    useFactory: (container: Container) =>\n      new UserService(container.get<UserRepository>(UserRepository.name)),\n  },\n  {\n    // Provide application configuration object\n    provide: 'config',\n    useValue: { name: 'My App', version: '1.0.0' },\n  },\n];\n\n// Create a Needle container with the defined providers\nconst container = new Needle(providers);\n\n// Usage:\nconst userService = container.get<UserService>(UserService.name);\nconst user = await userService.getUserById(123); // Fetch a user with ID 123\nconsole.log(user);\n\nconst config = container.get<any>('config'); // Access the configuration object\nconsole.log(config.name); // Output: \"My App\"\n```\n\n## Introduction\n\nNeedle streamlines dependency management in your JavaScript and TypeScript applications, empowering you to:\n\n- **Write cleaner, more organized code:** Achieve clear separation of concerns and eliminate repetitive code for better readability and maintainability.\n- **Test with confidence:** Effortlessly inject test doubles for isolated, reliable tests that ensure code quality.\n- **Focus on your logic, not managing dependencies:** Needle handles the dependency graph for you, freeing you to write efficient and maintainable code.\n\nWhether you're building small web apps or complex enterprise applications, Needle simplifies dependency management and boosts your development experience (e.g., increased speed, improved maintainability).\n\n```tsx\nclass Engine {\n  start() {\n    console.log('Engine started!');\n  }\n}\n\nclass Car {\n  private engine: Engine = new Engine();\n\n  start() {\n    this.engine.start();\n  }\n}\n\n(() => {\n  const car = new Car();\n  car.start();\n})();\n```\n\nHere, while the `Car` class depends on an `Engine` instance to function, the current implementation tightly couples the two. This means the `Car` class is directly responsible for acquiring its own `Engine` dependency, leading to potential drawbacks:\n\n- **Limited flexibility:** The `Car` is restricted to using a single `Engine` implementation. If you need variations (e.g., `Gasoline` or `Electric` engines), you would have to create separate `Car` classes, increasing code duplication and maintenance overhead.\n- **Testing challenges:** The hard dependency on `Engine` makes it difficult to isolate and test `Car` independently. You're unable to easily substitute `Engine` with mock or test doubles for different test scenarios.\n\nDependency injection to the rescue!\n\n```tsx\nclass Engine {\n  start() {\n    console.log('Engine started!');\n  }\n}\n\nclass Car {\n  constructor(private engine: Engine) {}\n\n  start() {\n    this.engine.start();\n  }\n}\n\n(() => {\n  const engine = new Engine();\n  const car = new Car(engine);\n  car.start();\n})();\n```\n\nBy shifting the `Engine` creation outside of `Car` and accepting it as a constructor argument, we achieve loose coupling. This means `Car` no longer depends on a specific `Engine` implementation, making it more adaptable. This DI approach offers:\n\n- **Enhanced reusability:** You can pass in different `Engine` implementations (e.g., `ElectricEngine`, `HydrogenEngine`) without code changes in `Car` itself, promoting code flexibility and reusability.\n- **Simplified testing:** You can inject mock or test doubles of `Engine` (e.g., `FakeEngine`) during testing, enabling precise control over `Car`'s behavior in various test scenarios, leading to more reliable and comprehensive tests.\n\nDependency injection is simple: providing specific objects your code needs. Needle streamlines this process, making it easier to manage the creation and delivery of these objects (services) within your code, promoting loose coupling and testability. A service, in this context, is any value, function, or feature an application needs.\n\n## Features\n\n### Configuration clarity\n\nNeedle embraces programmatic configuration with intuitive provider objects. Each object is defined in a concise structure, making understanding and maintaining them effortless. Whether you're using `ValueProvider` for constants, `ClassProvider` for constructor-less classes, `FactoryProvider` for dynamic logic, or `ExistingProvider` for aliases, Needle offers the flexibility to perfectly match your needs.\n\n### Dependency resolution\n\nNeedle tackles even the most intricate dependency graphs with ease. It resolves circular and transitive services seamlessly, saving you the headache of manual management.\n\n### Error handling\n\nNeedle gracefully handles configuration and service creation failures, providing informative messages and exceptions to guide you. Debugging becomes a breeze.\n\n## Container\n\nNeedle's container manages and delivers the building blocks your application needs, ensuring efficient service creation and access.\n\n### Instantiating a container\n\nCreate a new Needle instance using the new Needle() constructor. Optionally, pass an array of provider definitions:\n\n```tsx\nconst container = new Needle([\n  { provide: LoggerService.name, useClass: LoggerService },\n]);\n```\n\n### Adding providers dynamically\n\nRegister providers with the container after its creation using the `addProvider` method:\n\n```tsx\ncontainer.addProvider({ provide: 'LOGGER', useExisting: LoggerService.name });\n```\n\n### Using the container\n\nOnce providers are registered, retrieve instances using the `get` method and their corresponding token:\n\n```tsx\nconst loggerService = container.get<LoggerService>(LoggerService.name);\nconst loggerService = container.get<LoggerService>('LOGGER');\n```\n\n### Shared\n\n> **Deprecated:** The `shared` option is deprecated. Use [`lifetime`](#lifetime) instead.\n\nNeedle container shares instances by default. This means that calling the `get` method multiple times for a given service will return the same instance. This promotes efficiency by conserving memory and potentially enhancing performance:\n\n```tsx\nconst container = new Needle([\n  { provide: LoggerService.name, useClass: LoggerService },\n]);\n\nconst obj1 = container.get<LoggerService>(LoggerService.name);\nconst obj2 = container.get<LoggerService>(LoggerService.name);\n\nconsole.log(obj1 === obj2); // Output: true\n```\n\nHowever, occasionally you may want to create distinct instances for each request. To achieve this, you can use the `shared: false` option within a provider definition:\n\n```tsx\nconst container = new Needle([\n  { provide: LoggerService.name, useClass: LoggerService, shared: false },\n]);\n\nconst obj1 = container.get<LoggerService>(LoggerService.name);\nconst obj2 = container.get<LoggerService>(LoggerService.name);\n\nconsole.log(obj1 === obj2); // Output: false\n```\n\nTo disable sharing for all instances by default, set the `shared: false` option at the class level:\n\n```tsx\nconst container = new Needle([\n  { provide: LoggerService.name, useClass: LoggerService },\n  { shared: false },\n]);\n\nconst obj1 = container.get<LoggerService>(LoggerService.name);\nconst obj2 = container.get<LoggerService>(LoggerService.name);\n\nconsole.log(obj1 === obj2); // Output: false\n```\n\nThis approach can be helpful in specific scenarios where you want to ensure each instance is unique. To override this default for a specific provider, use the `shared: true` option within its definition:\n\n```tsx\nconst container = new Needle([\n  { provide: LoggerService.name, useClass: LoggerService, shared: true },\n  { shared: false },\n]);\n\nconst obj1 = container.get<LoggerService>(LoggerService.name);\nconst obj2 = container.get<LoggerService>(LoggerService.name);\n\nconsole.log(obj1 === obj2); // Output: true\n```\n\n### Lifetime\n\nThe `lifetime` option controls whether a service instance is reused across resolutions or a new instance is created each time. It accepts two values:\n\n| Value       | Description                                                                    |\n| ----------- | ------------------------------------------------------------------------------ |\n| `singleton` | The instance is resolved once, cached, and reused for all subsequent requests. |\n| `transient` | A new instance is created for every resolution request.                        |\n\nBy default, Needle uses `singleton` lifetime, meaning that calling `get` multiple times for the same token returns the same instance:\n\n```tsx\nconst container = new Needle([\n  { provide: LoggerService.name, useClass: LoggerService },\n]);\n\nconst obj1 = container.get<LoggerService>(LoggerService.name);\nconst obj2 = container.get<LoggerService>(LoggerService.name);\n\nconsole.log(obj1 === obj2); // Output: true\n```\n\nTo create a new instance on every resolution, set `lifetime: 'transient'` on the provider:\n\n```tsx\nconst container = new Needle([\n  {\n    provide: LoggerService.name,\n    useClass: LoggerService,\n    lifetime: 'transient',\n  },\n]);\n\nconst obj1 = container.get<LoggerService>(LoggerService.name);\nconst obj2 = container.get<LoggerService>(LoggerService.name);\n\nconsole.log(obj1 === obj2); // Output: false\n```\n\nTo change the default lifetime for all providers, pass the `lifetime` option to the constructor:\n\n```tsx\nconst container = new Needle(\n  [{ provide: LoggerService.name, useClass: LoggerService }],\n  { lifetime: 'transient' },\n);\n\nconst obj1 = container.get<LoggerService>(LoggerService.name);\nconst obj2 = container.get<LoggerService>(LoggerService.name);\n\nconsole.log(obj1 === obj2); // Output: false\n```\n\nA provider-level `lifetime` always overrides the global option:\n\n```tsx\nconst container = new Needle(\n  [\n    {\n      provide: LoggerService.name,\n      useClass: LoggerService,\n      lifetime: 'singleton',\n    },\n  ],\n  { lifetime: 'transient' },\n);\n\nconst obj1 = container.get<LoggerService>(LoggerService.name);\nconst obj2 = container.get<LoggerService>(LoggerService.name);\n\nconsole.log(obj1 === obj2); // Output: true\n```\n\n### Dependency resolution\n\nThe container performs service dependency resolution as follows:\n\n- For each service, Needle analyzes its constructor arguments to identify dependencies, which can be either actual values or references to other registered services.\n- This information is then used to construct a dependency graph where each service is a node and the connections between nodes represent their required dependencies.\n- When a service is requested, Needle efficiently navigates the dependency graph, starting from the requesting service and following the connections to identify all its required dependencies.\n- Notably, Needle avoids creating services until they are actually needed, optimizing memory usage and performance.\n- Based on the defined providers and configuration, Needle selects the appropriate implementation for each service.\n- Needle then creates the necessary dependent objects and injects them into the requesting service, fulfilling its needs and completing the dependency chain.\n- Optionally, Needle stores instances of shared services for faster retrieval in the future.\n\n### Error handling\n\nNeedle prioritizes error handling throughout the dependency resolution process, proactively catching potential issues early and providing informative messages to streamline debugging efforts. The Needle container thoroughly validates provider configurations during creation. If it detects issues like circular dependencies, incorrect provider types, or missing information, it throws an error pinpointing the problematic configuration:\n\n- If a request is made for an unregistered service, the container immediately throws an error clearly identifying the missing provider.\n- If a service's constructor throws an error during object creation, Needle propagates the error along with context that identifies the service involved and the reason for the failure.\n- If a circular dependency is detected, it throws an error pinpointing the involved services and the circular path.\n\n## Providers\n\nA Needle container manages one or more providers. These providers tell the container how to create and manage the services your application needs to function.They are created based on provider definitions supplied to the container.\n\nA provider definition is essentially a blueprint for constructing the services your application needs. When instructed to provide a specific service (identified by its token), the Needle container consults the corresponding blueprint and uses its instructions to either create a new instance or retrieve an existing one.\n\n### Provider configuration\n\nProvider configurations define how services are created and accessed within the Needle container. Different provider types offer flexibility on how services are created (static values, classes, factories, aliases). Use the appropriate provider type based on the service's complexity and requirements.\n\nEach provider configuration is represented by an object with two key properties:\n\n- The `provide` property holds a unique token (usually a string or symbol) that serves as the key for both locating a service instance and configuring the container.\n- The provider definition object property tells the container how to create the service instance. The provider-definition key can be one of the following:\n  - `useValue`: Provides a fixed, static value to be used as the service, often used for configuration constants or mock data.\n  - `useClass`: Instructs the container to create a new instance of the specified class when the service is injected.\n  - `useFactory`: Defines a function that takes responsibility for constructing the service, enabling dynamic creation logic.\n  - `useExisting`: Creates an alias for an existing token, allowing multiple access paths to the same service instance.\n\n**Token naming conventions**\n\nNaming tokens in Needle typically follows these conventions:\n\n- **For classes**: Use the name of the class associated with the service, suffixed with `.name`. For example, `UserRepository.name`, `UserService.name`, `UserHandler.name`, `Logger.name`, etc.\n- **For other cases**: Any string constant or symbol is acceptable. For example, `'config'`, `API_URL`, etc.\n\nNaming tokens consistently makes your configuration easier to read and understand.\n\n### Value providers: useValue\n\nThe `useValue` key lets you register fixed values directly with the container, making them easily accessible for injection into other parts of your application. This is ideal for registering application configuration constants. You can also use a value provider in a unit test to provide mock data in place of a production data service.\n\nThe following example registers application configurations identified by a unique string token (`'config'`).\n\n```tsx\nconst container = new Needle([\n  { provide: 'config', useValue: { name: 'My App', version: '1.0.0' } },\n]);\n\nconst config = container.get('config');\n```\n\n### Class providers: useClass\n\nThe `useClass` provider key lets you create and return a new instance of a class with a default (no-argument) constructor.\n\nIn the following example, `UserService` class must have a default constructor. Otherwise, an appropriate error is thrown to prevent unexpected behavior.\n\n```tsx\nconst container = new Needle([\n  { provide: UserService.name, useClass: UserService },\n]);\n\nconst userService = container.get<UserService>(UserService.name);\n```\n\n### Factory providers: useFactory\n\nThe `useFactory` provider key lets you create a service instance by calling a factory function. The factory function provides an advanced configuration mechanism capable of managing services that require complex initialization steps, conditional logic, or late binding of dependencies.\n\n**Using factory provider**\n\n- Write a function that receives the Needle container instance as an argument and returns the desired service instance.\n- Specify the token for your service and provide the factory function.\n- Add the factory provider to your Needle container.\n\n```tsx\nconst userServiceFactory = (container: Container) => {\n  const userRepository = container.get<UserRepository>(UserRepository.name);\n  return new UserService(userRepository);\n};\n\nconst container = new Needle([\n  { provide: UserService.name, useFactory: userServiceFactory },\n]);\n\nconst userService = container.get<UserService>(UserService.name);\n```\n\n**Tips**\n\n- Factory functions should avoid side effects and focus solely on creating the service instance.\n- Leverage container access to inject other services within the factory for dependency management.\n\n### Alias providers: useExisting\n\nThe `useExisting` provider key lets you map one token to another. In effect, the first token is an alias for the service associated with the second token, creating two ways to access the same service instance. An alias can also be mapped to another alias (it will be resolved recursively).\n\nIn the following example, retrievals using either the `ErrorHandler.name` token or the `'ERROR_HANDLER'` token provide access to the same ErrorHandler instance.\n\n```tsx\nconst container = new Needle([\n  { provide: ErrorHandler.name, useClass: ErrorHandler },\n  { provide: 'ERROR_HANDLER', useExisting: ErrorHandler.name },\n]);\n\nconst errorHandler1 = container.get<ErrorHandler>(ErrorHandler.name);\nconst errorHandler2 = container.get<ErrorHandler>('ERROR_HANDLER');\n```\n\nAliases can be particularly valuable in several situations, such as when:\n\n- Different components need a specific access point for a shared service. Each component can use an alias token tailored to its context, improving code clarity and isolation.\n- Renaming internal service identifiers without impacting dependent components. Aliases allow smooth refactoring by creating new references while maintaining existing connections.\n- Providing descriptive or context-specific names for services. You can tailor aliases to better reflect the service's usage within a specific component or integration scenario.\n\n## Best practices\n\n- Choose the right provider type (value, class, factory, alias) based on your service's complexity and creation requirements.\n- Choose clear and meaningful names for service tokens, as they act as documentation and entry points for your dependencies.\n- Use the shared nature of service instances strategically to improve performance and memory usage, especially for singletons or frequently accessed services.\n- Use logging responsibly to monitor container activity and troubleshoot issues without sacrificing performance.\n- Before deployment, test your provider configurations and dependencies to prevent potential issues.\n- Verify provider configurations during container creation to catch issues early.\n\n## License\n\nThis project is licensed under the **MIT license**.\n\nSee [LICENSE](LICENSE) for more information.\n","readmeFilename":"README.md"}