{"_id":"typed-inject","_rev":"16-5c2a15537db4d67f0f09eecff6ec6953","name":"typed-inject","dist-tags":{"latest":"5.0.0"},"versions":{"0.0.0":{"name":"typed-inject","version":"0.0.0","keywords":["stryker","utils"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@0.0.0","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"}],"homepage":"https://github.com/stryker-mutator/stryker/tree/master/packages/typed-inject#readme","bugs":{"url":"https://github.com/stryker-mutator/stryker/issues"},"dist":{"shasum":"d6474fdbcd4a3eb802cddaa286020356172afcd9","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-0.0.0.tgz","fileCount":20,"integrity":"sha512-47MzpZCUqFO242/2OA136qD6aqGr4QqKBv7bs6Acwx7rHqQP5RWd1Dr+OvgmU8UoIF+IdT6eQwR0E8gJbRHNxA==","signatures":[{"sig":"MEUCIEHyMe8Diy7/e33lxTbP0fEasKX9FR2HchZaQpJPvzXqAiEAjC5yOlBjBQNQSWcSLCsuYM2dyCtVzZw9LGfIUEEwZ8I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26194,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcOQgcCRA9TVsSAnZWagAAtlIP/id/frMcGA9PUVBqjDxi\nwG/EABRm28suz6T83cX/TWJ67D+OEPG6WPgMXhKIBn7E3gN8Pv4YceCowXyN\noy175y74v3Qau1gP6wh5nJuiux92ZCZYWW/rkSieS2K+UhfgWRQfRJRvptn/\n5jv5fAsUfsc372Ge/M6TPhRmK1jZ6ScqdjgX5i9H+Zb4/lSqRooEYYL/TDOo\nRm+jdsaH8J8HN465ZUjeNQsSOD3UWYZeAos44mKp6xusUG9xuWzQ+C+Cx7b4\nVoLyv03JXj4POzgEpby+mdJQqb357If7QcTDG795OIzbpsX4Sep3IklY+3gJ\nt8ipn8CcDP9/g/SDJLDbYkp23hgTx3JCB6arUnrhvnFK1yU9gs18Sk2OZNav\n0kqD9MAqrDsJXoWDhu5+cggM7fY7uuQYJ5e+AIkmG7TsDEDce3JcjqGBGWvO\nZVx22TBxPrtkZUoCo5I+OBmfL8wcMivqe6cyZTWMzXab3hsJLmdV9YEp1CDl\nFU/wr3X77s8rA6QFwANbxybgMLPYZrud7+fqWtT8FpT2GmepQSLsdd+Sxujk\n1GJoQBMhVD5B6uAS8j67/NBFfHcPjkg1UJqHWaUXWTmVv3wH196m5BsHMxXx\nee6nox27mttxrYeMtPqYwYnfAxyWYkAdJ3f9CO/rkKx4srmc4AxE3nO4biMA\nezjl\r\n=dYXO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index.js","scripts":{"test":"nyc --check-coverage --reporter=html --report-dir=reports/coverage --lines 90 --functions 95 --branches 80 npm run mocha","mocha":"mocha \"test/helpers/**/*.js\" \"test/unit/**/*.js\" && mocha --timeout 20000 \"test/helpers/**/*.js\" \"test/integration/**/*.js\" "},"typings":"src/index.d.ts","_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/stryker-mutator/stryker.git","type":"git"},"_npmVersion":"6.4.1","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"10.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/typed-inject_0.0.0_1547241500284_0.7128891313030774","host":"s3://npm-registry-packages"}},"0.1.0":{"name":"typed-inject","version":"0.1.0","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@0.1.0","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"9eb47771971c57bd21b32eb97ea532474113ac33","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-0.1.0.tgz","fileCount":22,"integrity":"sha512-kmhH6i8VqGy0YkIF8MCcQj7yM/7mVI6+ZNLwtMdU0O42iUolHmYhAOpR1FsF/uI/KinyDJlpE/xHI2DLiBNb7A==","signatures":[{"sig":"MEQCIFi91enCYEdNI7KnjVQsQYrvsD54lu2sF24JWjnyZrAsAiBl2VzvUybZdmXNol3ghO+c+e0Fp3NN+1tNBCLHh8a+8g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcS2gICRA9TVsSAnZWagAAmRkP/RsPrlmScDFn2267pG6A\nWhZLTriMstreu3HtbLhuFlEgLkl/UHa19lfltJ8VphbwWP1EiAF1/p+GuERD\n/eYZsgPX7uAivw7hDQaUF+ImCvwVySjVD5XsAvVrA30ZhFb/Y1ZVi5ddV6qV\nXKhwLuJqaYnL3x76sr7c0ZUVjtZJMKcYwGTB2AI7KJVpykDc1Sua124xE4QA\nw+b7WYLAu1nw1gPeA/Eovu2Mplg1s2941cTd934eztNVVsoHyjYsBM9iNevH\nYRB/gg+O+YTrSR9NkmmlIk2zXWHeMf+4prYjnYWXXUGlLOKAbOWcWbIYOJ+m\noyIiEw+auKIu83d5OD2lmH3zE+58/oxLtkXXdRuk3mId4kQQc/c//fT162N6\nTp2uCQsSHFE8UOY/cgI47ZDmJcm3z6T9jmpfKCJUUMu4Tva/cSv8JQeBgrUy\nyziAe+gFyrLyowHhjt/fxhCSFLhE1owsCchjjr6b7AFEHuTXDi6DnahN9cez\nLvljbxeJAwpVGU101RGwGucG/65hWTnpjSyorNOTSS/dySeSj2TFxGIExS80\nTUMT8S1eVREMqEsVNfSvs5QbNkaCdlSKBhdMN+9P3cnfAADt7J2W0IgC18FE\nn3b9Q0Sdt8m35KN0q6TkQyX/4Pj22LEndUs39I4rxVP8QVJ2yBR2Njcdwolu\n05z0\r\n=Gr0p\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index.js","engines":{"node":">=6"},"gitHead":"1bb638f5813b9f35dba507962fe8fef415efdc7f","scripts":{"test":"npm run test:coverage","build":"tsc -b","mocha":"mocha \"test/helpers/**/*.js\" \"test/unit/**/*.js\" && mocha --timeout 20000 \"test/helpers/**/*.js\" \"test/integration/**/*.js\"","start":"tsc -b -w","pretest":"npm run build","version":"npm run generate-changelog","prebuild":"rimraf \"+(src|test)/**/*+(.map|.js|.d.ts)\"","postbuild":"tslint -p tsconfig.lint.json","preversion":"npm test","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","test:coverage":"nyc --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"typings":"src/index.d.ts","_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.5.0","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"11.8.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^13.1.0","chai":"^4.2.0","mocha":"^5.2.0","rimraf":"^2.6.3","tslint":"^5.12.1","stryker":"^0.34.0","typescript":"^3.2.4","@types/chai":"^4.1.7","@types/node":"^10.12.18","stryker-api":"^0.23.0","@types/mocha":"^5.2.5","source-map-support":"^0.5.10","stryker-typescript":"^0.17.0","stryker-mocha-runner":"^0.16.0","stryker-html-reporter":"^0.17.0","stryker-mocha-framework":"^0.14.0","conventional-changelog-cli":"^2.0.11"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_0.1.0_1548445703897_0.16715204546209783","host":"s3://npm-registry-packages"}},"0.1.1":{"name":"typed-inject","version":"0.1.1","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@0.1.1","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"6737b255e9d6c1b7859a37a0fa1a33e61ff02e8a","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-0.1.1.tgz","fileCount":22,"integrity":"sha512-sgOoYjDxn1Zm0fv0a142gWcWV0XLjm8NwJ1ZscSOEhg0md/Lnh70NC0lxPWC79UueUEX2cMaJK912tFuy8y/ZA==","signatures":[{"sig":"MEQCICkNOm93ppi8YWAqaZ+u/9vP0wA45Yx0KIMWuie9J8A5AiBgMeSYcPib1VWwIiSHtN0zYxzhd5sfRgIBiLlsOz8MNw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37371,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcTD9oCRA9TVsSAnZWagAAdEMP/0QrALDbTgrsEC9j9wkn\nLhpzxX0+PclR0jtxlv6HNzOc/oiwhyZ3LXWdNCEi7RpzO22B2xt69sr/VIwn\ni6FtzxUBJOikQrCl2/5P3PhrNFGnoBgO1QZofOcyyZNe7nisvvJjjRUXHPsQ\nYzf8OdpV5ZaP6ugya0U3oRlFSojZWVitjL6RbGIkG26H4z2THuf2G9N74WAZ\nSiZQSjuRhxfbBzQPF1SkmnFvQupOxF9nTgP5J97oaxN6BBNH4iKAmiPAkRg6\nao1/mJCNfPMkEz1TDSdpn4LL9ZshMP3wnr3ItTffazCI+eBpgvkVvksYkE5r\nwjGQhjOiI18Ym23CPsK/t+fSWm6MPa7UkcARP3wRxwJGQ6hpXD7/Of6FnwGN\nXrtsA6fdgF1XGZj9IWcKgeeW3x4qdvPt3p46FJln6F/sUmNbYo4DAWOtn9bj\nw9NcInIjSlzHPiTpcA262Qoa9c63GJI0wl3BTe/KXUKGzqgYSldcdfxkrqIQ\ngbiKalHAnVpLG0qBU4XqdZXXI7XBtlyuvvEX4Np3BPcp62eR/4wXYHdWdrET\npKy4mDDShBrPo74hPg+R0DmdFC982pW6zfmEvrVbw9oXk0XprMyqMuXjfjpM\noxSwgxlgeqpTUidFuK7RHtUdqjfGSpeycUoZM1Wz1Y/4ZHDAsN+gCVLIWJT0\nzO1S\r\n=xhLI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index.js","engines":{"node":">=6"},"gitHead":"d627f172fee43808d75e856130fb61dd2e05c9f8","scripts":{"test":"npm run test:coverage","build":"tsc -b","mocha":"mocha \"test/helpers/**/*.js\" \"test/unit/**/*.js\" && mocha --timeout 20000 \"test/helpers/**/*.js\" \"test/integration/**/*.js\"","start":"tsc -b -w","pretest":"npm run build","version":"npm run generate-changelog","prebuild":"rimraf \"+(src|test)/**/*+(.map|.js|.d.ts)\"","postbuild":"tslint -p tsconfig.lint.json","preversion":"npm test","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","test:coverage":"nyc --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"typings":"src/index.d.ts","_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.5.0","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"11.8.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^13.1.0","chai":"^4.2.0","mocha":"^5.2.0","rimraf":"^2.6.3","tslint":"^5.12.1","stryker":"^0.34.0","typescript":"^3.2.2","@types/chai":"^4.1.7","@types/node":"^10.12.18","stryker-api":"^0.23.0","@types/mocha":"^5.2.5","source-map-support":"^0.5.10","stryker-typescript":"^0.17.0","stryker-mocha-runner":"^0.16.0","stryker-html-reporter":"^0.17.0","stryker-mocha-framework":"^0.14.0","conventional-changelog-cli":"^2.0.11"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_0.1.1_1548500839268_0.6753682722208147","host":"s3://npm-registry-packages"}},"0.2.0":{"name":"typed-inject","version":"0.2.0","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@0.2.0","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"791b523e3a97a2ad2ec0332e290b5ecdc4f7741c","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-0.2.0.tgz","fileCount":22,"integrity":"sha512-8ZR5rvwfayGqoSVFk2r+bF8K/QVEZXtxwKcUgNy/wcN9vA7P/AgtSy/WrczsbOj0N4XnjqMQDgAMiesHRDWOnQ==","signatures":[{"sig":"MEUCIHVkdER3t5cW5QkgGkyoI+PeZBqNOMaTBpRFB2YSU0RKAiEAsLryZp8J1Z/dSlSlrs0CrmuaiLEVTDK5x5Jn3Pusj7Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37808,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWZumCRA9TVsSAnZWagAAv9UP/1OZYxqw8ChaARVdWZ8A\nD0czOj8SLKYN5h9mr6t9quSZ1uur5oMtNvHSssOVAyew6CUHzwN4IBnPgZcZ\nyMrULhVcSyz/1SIQVuxs1YwrF6nJOfG3XzxVSPUl2cDtY8RR/h5IGe13uKLf\nneOR4khX0pCMHq//2hJNp+briyu7OLiap4yA+sPd2pFHlEz4hsQe00GJVz/7\nHMCBNF/yEj5yNtvvfGUHNc6qPGSxRmggK/tehNJQ1w0U8rp+5HAoVUo7Q1uu\nHLF4HdDvZQtxb9eEfQiwA52D78z6QtPxTREhHl+EH2jhdchlzPDktHs0bzvA\nXRScnuHteHogmBuRkXJQ5K8ZsoHTRzyNKqlrkuNaZ7Cib03/dm8kqC5Z49cW\nn6N3dGEuW3c1fOEU/6hnJy8hUEBYGbFiAtvbu9SV6RQ/txjS3o+4G1dlUjfV\nqGQeIsTu+R8Wjr5lY3wUTTRzQ2dOG4fhbEXTxflH+ByX3aB+zlXnQv/i+58i\nTS5G9V1uNTUHkTepoCi1No95JNBnicx6aCDeDYAFzpEWtkIyi3vQlOC/1mVm\nhxHDHVj7gm8oNM8A+eXhDaFAXh9JWpCw7QFLuj/BMxvUPTmKm7YVIkaUnwKr\n4dZmcfgBUAtvFLZHvLBajastfm5KYRzGj/UZczdTAFjHavf9/6/5aZppG+OW\nuFZC\r\n=1qJe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index.js","engines":{"node":">=6"},"gitHead":"e94c965286ecb33c076688922d2a707da9f32675","scripts":{"test":"npm run test:coverage","build":"tsc -b","clean":"rimraf \"+(src|test)/**/*+(.map|.js|.d.ts)\"","mocha":"mocha \"test/helpers/**/*.js\" \"test/unit/**/*.js\" && mocha --timeout 20000 \"test/helpers/**/*.js\" \"test/integration/**/*.js\"","start":"tsc -b -w","pretest":"npm run build","version":"npm run generate-changelog","prebuild":"npm run clean","postbuild":"tslint -p tsconfig.lint.json","preversion":"npm test","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","test:coverage":"nyc --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"typings":"src/index.d.ts","_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.5.0","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"11.8.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^13.1.0","chai":"^4.2.0","mocha":"^5.2.0","rimraf":"^2.6.3","tslint":"^5.12.1","stryker":"^0.34.0","typescript":"^3.3.1","@types/chai":"^4.1.7","@types/node":"^10.12.18","stryker-api":"^0.23.0","@types/mocha":"^5.2.5","source-map-support":"^0.5.10","stryker-typescript":"^0.17.0","stryker-mocha-runner":"^0.16.0","stryker-html-reporter":"^0.17.0","stryker-mocha-framework":"^0.14.0","conventional-changelog-cli":"^2.0.11"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_0.2.0_1549376421693_0.8182544220673496","host":"s3://npm-registry-packages"}},"0.2.1":{"name":"typed-inject","version":"0.2.1","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@0.2.1","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"4627b4338d63f7df21ab7037160456082aa5d2d9","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-0.2.1.tgz","fileCount":24,"integrity":"sha512-Mn7uv5pVayk3RJmZ6vYU5SMPXiN6qS7mz/bgNDfUwTlGslWHVGaYOxJa6Z8tgHqna64WLm0S1kg41K3LyJHmTQ==","signatures":[{"sig":"MEQCIAwCoFty61qlU+MMbPsuIuCK9+fDQDIrgJlP3WbCdjeWAiAJd09mcQ0BkoOv4xkwsSGdvt3sHFbPayeYpoS5M8vB5w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYUaOCRA9TVsSAnZWagAAgcgP/2C2rXar1XKY0lF9TMhP\nOoo+7zVfV8eQ2+xY52L+KKu1A0+Lm6LDD5xh5yMGeC6WkfZ/76x4Gk40XYsi\nt6+94HUi4dpS0JzEe0xdVFjqy7MD21wb9s/WO6zlwAJOU2pbU3ndGwGNx5X2\nrL4Y92SJTVvz93FZ91UxY0uieZoSKs1fkkLSVZ+vspK7oZsu23sl1Lplr8iT\nQCROle4/eb4RQg41hpCOoGihqino8UZLnh//NwWOEGNuafv6lDshQqo4Y6Yn\n6brePm8gmg+rO74feYnt9sbfGtD2B4U5j6nb2r3bl3u56GfFGXoNLC7CMB3o\nYcX1sd6m/Ah9b8TqUTMjx0GxDuBaBOAoKnzRLAX1Tz4jR6qT+pVYc+V7Wu9O\neeir2BbJ5m/45j5Vf6VO+IY0sJEP6+Fu7f6z7GkeoGXMmT2bYf5r/htKxPFt\nu1AxY9Y+UDELLZXMCouBl+QY6p5Lpr1nJG81eF+jNvqju5Ad3Ch2Uw5LNyWT\n4wVaAomrNFcm52+rhjL1J5YyplRpl2ukyA8Z8HIBYWtO7RLkTlPj1qWbBNfu\nI2mJkOixGTewdvZ3D7mEjH5FRSpxmE5Pdp5RbRcLcLK8xjgGfZtrdVkEtdrs\nXtaq6+y4xefqvnsV4MxB8ggz09CkarcoycIfB5Q0ueIyQ+MfW7QYrr9Jbw2u\nahvd\r\n=6pYx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index.js","engines":{"node":">=6"},"gitHead":"b84425a65ba853d78537f39332694c7fd7a5e58b","scripts":{"test":"npm run test:coverage","build":"tsc -b","clean":"rimraf \"+(src|test)/**/*+(.map|.js|.d.ts)\"","mocha":"mocha \"test/helpers/**/*.js\" \"test/unit/**/*.js\" && mocha --timeout 20000 \"test/helpers/**/*.js\" \"test/integration/**/*.js\"","start":"tsc -b -w","pretest":"npm run build","version":"npm run generate-changelog","prebuild":"npm run clean","postbuild":"tslint -p tsconfig.lint.json","preversion":"npm test","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","test:coverage":"nyc --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"typings":"src/index.d.ts","_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.5.0","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"11.8.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^13.1.0","chai":"^4.2.0","mocha":"^5.2.0","sinon":"^7.2.3","rimraf":"^2.6.3","tslint":"^5.12.1","stryker":"^0.34.0","sinon-chai":"^3.3.0","typescript":"^3.3.1","@types/chai":"^4.1.7","@types/node":"^10.12.18","stryker-api":"^0.23.0","@types/mocha":"^5.2.5","@types/sinon":"^7.0.5","@types/sinon-chai":"^3.2.2","source-map-support":"^0.5.10","stryker-typescript":"^0.17.0","stryker-mocha-runner":"^0.16.0","stryker-html-reporter":"^0.17.0","stryker-mocha-framework":"^0.14.0","conventional-changelog-cli":"^2.0.11"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_0.2.1_1549878925628_0.895210248268318","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"typed-inject","version":"1.0.0","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@1.0.0","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"d3f70e238d154de4ec0ccf58d45079b446888c2a","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-1.0.0.tgz","fileCount":24,"integrity":"sha512-u1ZR7Zvu0NIIZjiLg8RSp4oOoSs8wUnsn8mQ3Pnl8fHmCNkA7Y/aOKTR/Stp4R9/bazwphSktuOEMP++DdlAKQ==","signatures":[{"sig":"MEQCIA59h4QAVPLwl/CRIWF5n77j0H8wehDOsKT3QH8K6mBcAiAbv0eDV+VmdsSkjlPoxAhyCpnp6pabQzbAZqktdYODrg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45665,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYq0KCRA9TVsSAnZWagAAABgP/RqL4M75x44lKgakGkoX\nQlJSXj3tpjBponwxgcHs5TksVRDL/lJRX4nBCcFRkQQa3StRbGvV51GvF1gN\nwe0vPpQFelHfpTfC3ArqkoOlikd1WvTQmODGflMy57Qel9k4uJImzxfGgSZo\ngPZh5rpxaVpsIB4ZHUrqrvvoqZpaFEeaTk7CAQ5YYHxDFqI2GM0ZFRSzx/2d\nkAi+Z2b8xp9xEioiS5oVARYc9NkfgW4jsZvcqbJSy3CcWYdokRPKIKNOD39v\n8jyeK08HypcCe9t1p84lpRQd/SRwIO5EjCf//PtQplN98SpqPzydbETE4R5S\nuwmNzvjtc6H3gPQ4CCMMKWrIlElNMSlztyQ4m3vGwW8VZbRsgmo45QKJ8MVN\nQSo0xX8jBg92GLmG7567qNQjdISRL8drv6yfPVr6r9br/q1lMdGPs4wCYfvA\neGv8Js1Dj99oY4jozBY7pj9lLxpK/ke9bPeeR2+Oi0SYoQivLQbP8Wml3sLA\nyJtriPDEPGpKMqTnVmCUsfX6BcrwFf5POeKdZ2no32AXfI4ZhttAFiEbLu00\n2u08wbit83ZNMAWVNUKSFOwZtEqLXzQRc18LONooKNr/zdqFkKiWoga1AHp0\n3BlDNr44oZ4syzyiC29WCOV6PSBKZD7GNHmk+fSaKcewv5o9ErFyu6k3DPyI\nUf+t\r\n=5GZd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index.js","engines":{"node":">=6"},"gitHead":"89458fb3e481e391de7969e88c3e7b58953c82c1","scripts":{"test":"npm run test:coverage","build":"tsc -b","clean":"rimraf \"+(src|test)/**/*+(.map|.js|.d.ts)\"","mocha":"mocha \"test/helpers/**/*.js\" \"test/unit/**/*.js\" && mocha --timeout 20000 \"test/helpers/**/*.js\" \"test/integration/**/*.js\"","start":"tsc -b -w","pretest":"npm run build","version":"npm run generate-changelog","prebuild":"npm run clean","postbuild":"tslint -p tsconfig.lint.json","preversion":"npm test","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","test:coverage":"nyc --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"typings":"src/index.d.ts","_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.5.0","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"11.8.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^13.2.0","chai":"^4.2.0","mocha":"^5.2.0","sinon":"^7.2.3","rimraf":"^2.6.3","tslint":"^5.12.1","stryker":"^0.35.0","sinon-chai":"^3.3.0","typescript":"^3.3.3","@types/chai":"^4.1.7","@types/node":"^11.9.0","stryker-api":"^0.24.0","@types/mocha":"^5.2.5","@types/sinon":"^7.0.5","@types/sinon-chai":"^3.2.2","source-map-support":"^0.5.10","stryker-typescript":"^0.18.0","stryker-mocha-runner":"^0.17.0","stryker-html-reporter":"^0.18.0","stryker-mocha-framework":"^0.15.0","conventional-changelog-cli":"^2.0.11"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_1.0.0_1549970696527_0.02077006825550365","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"typed-inject","version":"2.0.0","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@2.0.0","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"78fc8b3e27104fb2945c3242d7eff9bc1e5e6320","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-2.0.0.tgz","fileCount":26,"integrity":"sha512-x4gVaWZzGBZMR15rTMWdijKlMg/rBc7YkjTx9koW7Lp+9UYr+GQZLRMtpQm7MJv4J6r1AVhclwouZ0z+G6tYAw==","signatures":[{"sig":"MEQCIHiv5XP+Ss91evXS+sJ0Z84p6D2/LrSOGvAWqL6tIS3iAiAox4Ig8sJnKlYjFHtF3RSUzfxKPRgy6HpT04uzokmZvA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49058,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyo9aCRA9TVsSAnZWagAAWLMP/2cDF12+E7jZ5uDSqyKM\nGlIGNUhBi3ZCOY8Vbf9cvVp1FPY4JkYn6WpzuASB61wROdKLKqWC9cy+yAbq\nvOOdvCJMCYjSOnoV42AAu02ZQeyAv4Dnv13uVXl47jAc8bY/2ptWTYoqtVAL\n+kJtc2g1Fp0m9s6g2LH0ttgjVjPe2kdp3xO/Zqn/XM5jG8TSC5Ae9RBo8/AZ\n9WN3Rq6M122SIC67YWv1ItsdMmnRyDNjfdbpGvfJgS69bj4eTT6/H1UdH5kM\nlsYK+iHUlmpx7qb/tqRvQPcAxLevPEJz4P0O5APNlLSGCsPQnRi1qLX4eA3l\ntYhxNw6C/HHKw5goU3bl2VfSTXMPmBgvAtZn8zUmw39iOPCBcqGcYX5dcFkV\nZ2oh/SXz2rkoZxLojjGBfe4QD5kngbzOvMYe/XkpQ63DFxlvhYNVFuyPEA+H\nB4zNvFHNitZGaWapYdXO3ml65c4de0/goL9bYfnt+bEYw1AVr9JNkPKbVc4M\nNoWecshqUYjWt73kWVAh1lpYAC+1+DznKrlfUt5bRMRw7u/9O0WQOCLGSERT\ngDjZEWeNMADxjuvXS0ejfwvaeWyyK4PKmA0cJqBqp6UFjTPKDuwUchoYAB5s\nmGGlvQ65C4+5yvxwkAC9Z0s+b5ajV1beJDr676F1QPJVsFgD+qkTOgyUHO01\nQnst\r\n=fnCY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index.js","engines":{"node":">=8"},"gitHead":"3ad665639e2a471962e92520d0e30446ffdf77a8","scripts":{"all":"npm run clean && npm run lint && npm run build && npm run test && npm run stryker","lint":"tslint -p tsconfig.lint.json","test":"nyc --exclude-after-remap=false --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","build":"tsc -b","clean":"rimraf \"+(src|test)/**/*+(.map|.js|.d.ts)\" \"*.tsbuildinfo\"","mocha":"mocha \"test/helpers/**/*.js\" \"test/unit/**/*.js\" && mocha --timeout 20000 \"test/helpers/**/*.js\" \"test/integration/**/*.js\"","start":"tsc -b -w","stryker":"stryker run","version":"npm run generate-changelog","preversion":"npm run all","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"typings":"src/index.d.ts","_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.9.0","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"10.15.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^14.0.0","chai":"^4.2.0","mocha":"^6.1.4","sinon":"^7.3.2","rimraf":"^2.6.3","tslint":"^5.16.0","sinon-chai":"^3.3.0","typescript":"^3.4.5","@types/chai":"^4.1.7","@types/node":"^11.13.7","@types/mocha":"^5.2.6","@types/sinon":"^7.0.11","@types/sinon-chai":"^3.2.2","source-map-support":"^0.5.12","@stryker-mutator/core":"^1.3.0","conventional-changelog-cli":"^2.0.17","@stryker-mutator/typescript":"^1.3.0","@stryker-mutator/mocha-runner":"^1.3.0","@stryker-mutator/html-reporter":"^1.3.0","@stryker-mutator/mocha-framework":"^1.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_2.0.0_1556778842079_0.5250183229598031","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"typed-inject","version":"2.1.0","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@2.1.0","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"4fc1c3bceeee50592ce4150574001a91fa29b291","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-2.1.0.tgz","fileCount":28,"integrity":"sha512-Y6U8lpedClpT93i4Vdf4UzlXPKR0rG2BzYPjqtGN1IewNvvmb5gL/N9PGQuCwEvb162FL86H0VAuqZbp8mmqCQ==","signatures":[{"sig":"MEQCIHQ9dp37FA+0neEt2qUZ8bgNcyYTy3RwotCRShufEWerAiBMy01iFI+IUFu6nSJFEMzepjE6H9mG45B6+D2lqeXN9Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50970,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJczGmmCRA9TVsSAnZWagAAQA8P/i4HDo1GjiPpE1mYeJYS\ndc6prytNDZap/IBJ9kEtTBnfX/xaWZjbibD6AeBCCl/7TylegYXbJqDef8V0\nPUabJWdnB4dIEBk/sH9xMUwjem3jgdp60yCP+ALFXbVJJF75Y3hGR3z8TPgH\njo3IAWqmrGNQonJLEL8XMBPW77uT/lt/YKDF5CGuVhHcU+f/cIrSNvNytVcM\nR0ZM77hX11R80akXnKRR1NqmLp2EWhUZqdb0dOGueeKfkgGBlAUOernFq7l2\n5IFDuIk+bPblXTlwKk9Blf4IRJGzSP7cHrQ8fM/w12vt41EsFPANg2II9g2d\naQjaBEdd76iV0hl/x+Cg1tZXWInFeWoQ/UPopLByu4VrHJFKS1i78bwbk2vr\nFYlwMBPRv9zE5jqxaY+54OOoLGnMq7J4/Dfb1K/0vhyVVmTJ9f9G/8P4Ucv9\nwkCZzNuZaajS7S6Ui+SwQjRt+0xKFUIWvHjs7WH7FdOKMeSxS75a9dOeoysG\nUS3vQ2/xJOcgo2RutK9TT0PwSD98Y4F14XaeQ5AdpKlPB/vJWBz0TS3zwmvH\nrp86yoO0cmOL6HVmfR0hieWLT0wgrxNmYmYL4xrooKbJlzwKPr37PnJ2hhF7\nGrWFPte8DwAUh4aJV87SocWGe+KlZuaqiQFr9V99kbPEVTW76SL1kavq2IcA\nk2Ap\r\n=aMqn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index.js","engines":{"node":">=8"},"gitHead":"c2b6477ca9d373c99f658259675a01fe19ea4121","scripts":{"all":"npm run clean && npm run lint && npm run build && npm run test && npm run stryker","lint":"tslint -p tsconfig.lint.json","test":"nyc --exclude-after-remap=false --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","build":"tsc -b","clean":"rimraf \"+(src|test)/**/*+(.map|.js|.d.ts)\" \"*.tsbuildinfo\"","mocha":"mocha \"test/helpers/**/*.js\" \"test/unit/**/*.js\" && mocha --timeout 20000 \"test/helpers/**/*.js\" \"test/integration/**/*.js\"","start":"tsc -b -w","stryker":"stryker run","version":"npm run generate-changelog","preversion":"npm run all","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"typings":"src/index.d.ts","_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.9.0","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"10.15.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^14.0.0","chai":"^4.2.0","mocha":"^6.1.4","sinon":"^7.3.2","rimraf":"^2.6.3","tslint":"^5.16.0","sinon-chai":"^3.3.0","typescript":"^3.4.5","@types/chai":"^4.1.7","@types/node":"^11.13.7","@types/mocha":"^5.2.6","@types/sinon":"^7.0.11","@types/sinon-chai":"^3.2.2","source-map-support":"^0.5.12","@stryker-mutator/core":"^1.3.0","conventional-changelog-cli":"^2.0.17","@stryker-mutator/typescript":"^1.3.0","@stryker-mutator/mocha-runner":"^1.3.0","@stryker-mutator/html-reporter":"^1.3.0","@stryker-mutator/mocha-framework":"^1.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_2.1.0_1556900260863_0.4950077789886491","host":"s3://npm-registry-packages"}},"2.1.1":{"name":"typed-inject","version":"2.1.1","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@2.1.1","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"5e16c5d46961fd77f475295f0170627ac81ffd19","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-2.1.1.tgz","fileCount":28,"integrity":"sha512-TaQrNsYjGTMmgfEwKtjP9+qyZu//H1RJ0RYNvvQ/rcAnpQGZLxHajb+O6TnyFZGfLaK/9319VYaG4PFXGjImug==","signatures":[{"sig":"MEUCIFY2ccz0Tl0eVa2DOgw8xFqHFggPs1KjlQoFPd+eVTXJAiEA5kYE5msuAAjpcC5rYzHAe5kDlYR+e3V1SL4Sb/dx6oA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeqt7CRA9TVsSAnZWagAAn5cP/jI0ePHdWzif8mIyPxGU\n+u3KgWm9n+WNteSlfT8AaoN3YICHr5S8NSLIk3juGvg9r7PLiGAWw9mPmGn1\nbQmF8E7BGOOhxiP4ZuQggpga97aLGw4pDy2TyaoQRRNfl6l6h+Nb28j4mzUa\nf+uQ7Wm2MyRPQInekvENvJZZ2LVVPAIe9qhz9pPUexPKmNbC+SSkYo1OeTU1\nwsp6sIShYk3R4yts5MWXS1IKSWkYA5HzQauuomKJj29Pd00cEyvs8j/aesDK\nptzNeGry9FB+n7FiSbNZ15Tcp1x36iHgR7TC09lkPzNaOi3Y7rN3Fdf/PQRU\n4g6chq0ior5EkaDCfkuApWANaFQC0wNYmTMVF+zqlbC2u8w+MqGt9R5YC0j6\nPSIrzlqK7aiKVjeC6jQcCio17xGp0P/1bQbX3NDvGnTvuG/Pi1r/f8CbeekP\nDmwrVE4tAGpeWU3roO3p9+FwEyS3maI9YxV6FYOxdzl1ONAPjgGzZZFQQ9cv\nZGpYvzZEumbJOa5+53UQfmL4EaWhL7M8cGQbwDhlUmn7KtIX3vXajew0GdWc\ngd73w93F4FHACispQjBrkkG08E5kFADdHv9EdpmxXiTeILmHOJ76+0fB38os\nEZHh6yKURb/ngWEINomI70QTmLR+h/t/4GyxlU3XZDbB6QtZTmJPQ4zsuonj\nBjRD\r\n=nC1I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index.js","engines":{"node":">=8"},"gitHead":"3d95102812da29d03064f20cfb3048da15b99491","scripts":{"all":"npm run clean && npm run lint && npm run build && npm run test && npm run stryker","lint":"tslint -p tsconfig.lint.json","test":"nyc --exclude-after-remap=false --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","build":"tsc -b","clean":"rimraf \"+(src|test)/**/*+(.map|.js|.d.ts)\" \"*.tsbuildinfo\"","mocha":"mocha \"test/helpers/**/*.js\" \"test/unit/**/*.js\" && mocha --timeout 20000 \"test/helpers/**/*.js\" \"test/integration/**/*.js\"","start":"tsc -b -w","stryker":"stryker run","version":"npm run generate-changelog","preversion":"npm run all","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"typings":"src/index.d.ts","_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.9.0","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"12.9.1","dependencies":{"typescript":"^3.6.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^14.1.1","chai":"^4.2.0","mocha":"^6.2.0","sinon":"^7.4.2","rimraf":"^3.0.0","tslint":"^5.20.0","sinon-chai":"^3.3.0","@types/chai":"^4.2.2","@types/node":"^12.7.5","@types/mocha":"^5.2.7","@types/sinon":"^7.0.13","@types/sinon-chai":"^3.2.3","source-map-support":"^0.5.13","@stryker-mutator/core":"^2.1.0","conventional-changelog-cli":"^2.0.23","@stryker-mutator/typescript":"^2.1.0","@stryker-mutator/mocha-runner":"^2.1.0","@stryker-mutator/html-reporter":"^2.1.0","@stryker-mutator/mocha-framework":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_2.1.1_1568320378884_0.3477416702880971","host":"s3://npm-registry-packages"}},"2.2.0":{"name":"typed-inject","version":"2.2.0","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@2.2.0","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"0e7e4c3f0865dafad059ea1ee50b7f29f5f73692","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-2.2.0.tgz","fileCount":30,"integrity":"sha512-DEexQEy7a+ekKYg0HhtO2OpA4AkXK+igeDbeP9lgQgGR5KbcTDhKuFYKHanIxOopMR4SWUXPuQ/FeteluIyWcw==","signatures":[{"sig":"MEQCIC7lT/6ZL3KoEcHBoTpNzgLqXsY5wwC8P+GP+QgaUFpRAiADAVgQgfQlXaNYHSLXDg/U52gZRVGLJlE7rT84rRDkBg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedki6CRA9TVsSAnZWagAAztoP/RBEw8KQ577Gm6omqlOw\nvDt1S5u2+ul+SGzyk5DaAbPh+P1ZVgBAOSGUSv3YycC83nvoMD3G0YwkRiwY\n49xIjpQvD9LZeZ9n+73pZe//T/qoYPFMZTA2qZxXSLg7ARkOnyRqJygHTVRL\ndp+FXE1xueeV52bFxbQ3IuEAt527YdWLULLbxLdAgQYX1zSVtcpgiAvJy82F\ngejZD5G+D/hSFCbbZqHRbxSY4mBODMcZihf7XLEX9o6+2CNTnpjvqZLR7uHl\nGBpDPDa06WceML5vXJCYAZquzWJ6cS2K1hKEx5AYcl5EeZsQIeU6i/xYBMJ6\nuB7DyjfF5msKpfrGuXf4pfjA+eFPgJQCKJMlcEVxvCTpJCue1poRge21Lfb4\nR5Xt+VQ/zxOnuKHzTJJKPGMb4N0e/08ieSFhXr2Q4CJs1moOYe8UJrAM3qQy\nMdgk2BLCNJPrdC+xcgyyyIx8jXwvoPIfaJTw3iTu3ySiPQb8A00irKD0jc9A\nxJ7I3un3J3+RRvrcvp+Ss2yG+lBxlW/m1iqmRP+OxvAzR1X7kpk/nFuRNcox\nIFqTyQJ7RFWmlvB/slkUv8CTY0BAsigP58M0WQwHO9HEyUFESx4La+f/tSYz\n0dcIFUScZBjBV7XxhtRU+4Ro1mMrUjvz+ea1k8H244h+25MaN+oajDYpR+4R\nbwsw\r\n=vgbm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index.js","engines":{"node":">=8"},"gitHead":"85cb7f754d578c20034e372c0fb6f4a4d4eb8815","scripts":{"all":"npm run clean && npm run lint && npm run build && npm run test && npm run stryker","lint":"eslint . --ext .js,.ts --ignore-path .gitignore --ignore-pattern testResources/**/*.ts --ignore-pattern stryker.conf.js","test":"nyc --exclude-after-remap=false --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","build":"tsc -b","clean":"rimraf \"+(src|test)/**/*+(.map|.js|.d.ts)\" \"*.tsbuildinfo\"","mocha":"mocha \"test/helpers/**/*.js\" \"test/unit/**/*.js\" && mocha --timeout 20000 \"test/helpers/**/*.js\" \"test/integration/**/*.js\"","start":"tsc -b -w","stryker":"stryker run","version":"npm run generate-changelog","preversion":"npm run all","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"typings":"src/index.d.ts","_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.13.6","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"12.16.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.0.0","chai":"^4.2.0","mocha":"^7.0.0","sinon":"^8.0.4","eslint":"^6.8.0","rimraf":"^3.0.0","prettier":"^1.19.1","sinon-chai":"^3.4.0","typescript":"^3.7.4","@types/chai":"^4.2.7","@types/node":"^13.1.7","@types/mocha":"^5.2.7","@types/sinon":"^7.5.1","@types/sinon-chai":"^3.2.3","source-map-support":"^0.5.16","@stryker-mutator/core":"^2.5.0","eslint-config-prettier":"^6.10.0","eslint-plugin-prettier":"^3.1.2","@typescript-eslint/parser":"^2.23.0","conventional-changelog-cli":"^2.0.31","@stryker-mutator/typescript":"^2.5.0","@stryker-mutator/mocha-runner":"^2.5.0","@stryker-mutator/html-reporter":"^2.5.0","@stryker-mutator/mocha-framework":"^2.5.0","@typescript-eslint/eslint-plugin":"^2.23.0"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_2.2.0_1584810170210_0.05692258186184995","host":"s3://npm-registry-packages"}},"2.2.1":{"name":"typed-inject","version":"2.2.1","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@2.2.1","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"52d492f74e26862d53058fe181fd03e6d484f6ae","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-2.2.1.tgz","fileCount":70,"integrity":"sha512-+PFtxIKTfrfuqba42XYmTotRCoPC8U7/cIQSu9bHhRlHLDazrbagEDzJ8mjnVVUzgrAlseFx0qKwvf6ua5Yzmg==","signatures":[{"sig":"MEUCIDx2UIliyXWF97YwwS6HFVh8PcfWWjO4ViQuH4ZiRbKQAiEA5C1fUVRcApIKQZRgEyNqAFwovdCi+HnX9Pu7ta3Hhro=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJed36jCRA9TVsSAnZWagAA5pEP/2WObS8X3MBMw9SYLSIM\nh1yT+lVwP8gpbX+6/03g59ANP5poer47QZWtIr2T8WKY/Lom1x06q2GS3oOQ\nzitEBLbEdCt9YC+qsoU5ewx8jrii7BjNqlFjm7eaFXOzdv0XQ2p2+JaMkaR5\nujTQx+aNK6hwkSdMgpLhTwEEW25OY27wr2v5QdZjB609XoWW+wv6T1pWZGds\nkJLHQpt/nCjZBOoFkPO4d0neFRkk5ud2w0Mf1XuEayMjtLOlnG5fYTi6DPB3\nn5I8MBz38K2EuuhIqFlvIfNKzNsOGiMX7PiGt+WfFj39PCmcTUWIMeBfi//N\nVdSKZULWIUCB44jSL+VekOrXYGHbyOzYURrFmuGENFl6ZVPyB6eOg3B+dX2d\n2x6pXi6GrDOGPUu84Y3yNYlpoFhOPMjCb3Kfe/DW+Zbh+G63cgikQCX/ZZ5O\nM/8dB5cA4Fc73fNQfqnCE0Wo38Afz44Wm6zqCL+3g+YedpnbIF6QAFNB87Ok\nRtty/YcMatiUNxnunsPuE7AkfEDFZLbTXW8FHnJNALwjSBihI/LNk1nJkb0U\nOqq5FbIc7XOMzQKGQxUqwKdD9MeW47IPkc/YjjZHWhVAILVCGAU7otMfyo8l\nKye6/wOwuROVG/n4dDueGNN5oWXVGl2ME9JSUfmN0TeEfTKsjti7VgNngRRm\nuXGK\r\n=iimA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/src/index.js","engines":{"node":">=8"},"gitHead":"22dff17e73a08cce2880a8f90c67e0e4a7ac452e","scripts":{"all":"npm run clean && npm run lint && npm run build && npm run test && npm run stryker","lint":"eslint . --ext .js,.ts --ignore-path .gitignore --ignore-pattern testResources/**/*.ts --ignore-pattern stryker.conf.js","test":"nyc --exclude-after-remap=false \"--exclude=dist/test/**/*.js\" --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","build":"tsc -b","clean":"rimraf dist","mocha":"mocha \"dist/test/helpers/**/*.js\" \"dist/test/unit/**/*.js\" && mocha --timeout 20000 \"dist/test/helpers/**/*.js\" \"dist/test/integration/**/*.js\"","start":"tsc -b -w","stryker":"stryker run","version":"npm run generate-changelog","preversion":"npm run all","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.13.6","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"12.16.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.0.0","chai":"^4.2.0","mocha":"^7.0.0","sinon":"^8.0.4","eslint":"^6.8.0","rimraf":"^3.0.0","prettier":"^1.19.1","sinon-chai":"^3.4.0","typescript":"^3.7.4","@types/chai":"^4.2.7","@types/node":"^13.1.7","@types/mocha":"^5.2.7","@types/sinon":"^7.5.1","@types/sinon-chai":"^3.2.3","source-map-support":"^0.5.16","@stryker-mutator/core":"^2.5.0","eslint-config-prettier":"^6.10.0","eslint-plugin-prettier":"^3.1.2","@typescript-eslint/parser":"^2.23.0","conventional-changelog-cli":"^2.0.31","@stryker-mutator/typescript":"^2.5.0","@stryker-mutator/mocha-runner":"^2.5.0","@stryker-mutator/html-reporter":"^2.5.0","@stryker-mutator/mocha-framework":"^2.5.0","@typescript-eslint/eslint-plugin":"^2.23.0"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_2.2.1_1584889506702_0.1112129812305156","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"typed-inject","version":"3.0.0","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@3.0.0","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"c178d2c47151dd991d168343ee049320ef4dd0c0","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-3.0.0.tgz","fileCount":70,"integrity":"sha512-LDuyPsk6mO1R0qpe/rm/4u/6pPgT2Fob5T+u2D/wDlORxqlwtG9oWxruTaFZ6L61kzwWGzSp80soc3UUScHmaQ==","signatures":[{"sig":"MEYCIQDYBm3YOH6hVZcaC360Gqt2s1guKXwHnP8AAeGDWxtLlQIhAPYFvWFcMaYF8Lk5WiH39VdaDuhUTrIs68t0STqNnp5O","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":90434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNDWUCRA9TVsSAnZWagAAJnsQAJOdyH0ZjmYFDw6RDhGI\nJpLRTGce3HyLhCM8awbCB1uyV5xZJzSnJxoZyhYQuUC7R/y5hPP529gYpahJ\nNW8xy6e93RIG8rTGJgeE5dlRgNCgB5besV+06xkzD1JWREtQvh7tP34QnZJU\nBcQgtnv9U0q8n8833V/LN4R6ep7Om6Ij8hkcEqJ4e9Q5Z4cLdicTKag58sbE\nWmNTxTBa1yfO++pRSPeDhpP7GklUuZ3UncZuNXKWAoZu/j4N99iFtze3vEtE\niai4By7lyq2n3KJlz8JWwLaOh/JGFrLO6p2omd9SMbQ5sC7xPmLoTQhw/FK+\nPLPcMLxrmNMWgYvUtTeVKhE/vUKRu5XQD/93V+++dg7YFbFjcAIJu2KSYUuf\n3Tzj1jCLMRDqe3/1fvx9q/f4mbcFN3cpA6m0TgIZZjDxyBH/CRRKcgYFKuDQ\nugfvNpMMmxkXZKEy5oGwR/qJ5WI6vHDFihtYVyiYX0b3NiEb7i7KUxxWPx+P\nVJXuC6M4XQ6BLf9sNrYlvmfQ/SoyTaD4O1lc9YJUNperZbpUdKLoeUU5rnnH\nllIqeUn0CVCQAWF9B+/QYP2uVr56D5ZfwR+7IIOy1EVCUey1jfmxTcu5Nu5b\nzje1GFvVgBmZIDKB3HsE52P4Qi8BYx4DvI2K3rHhbT/pgjDFdSxPuzVRgtJk\niLjL\r\n=4jMJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/src/index.js","engines":{"node":">=10"},"gitHead":"f386b7466bfc29ebeca0f2cc581124ad49b72d48","scripts":{"all":"npm run clean && npm run lint && npm run build && npm run test && npm run stryker","lint":"eslint . --ext .js,.ts --ignore-path .gitignore --ignore-pattern testResources/**/*.ts --ignore-pattern stryker.conf.js --ignore-pattern .eslintrc.js","test":"nyc --exclude-after-remap=false \"--exclude=dist/test/**/*.js\" --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","build":"tsc -b","clean":"rimraf dist","mocha":"mocha \"dist/test/helpers/**/*.js\" \"dist/test/unit/**/*.js\" && mocha --timeout 20000 \"dist/test/helpers/**/*.js\" \"dist/test/integration/**/*.js\"","start":"tsc -b -w","stryker":"stryker run","version":"npm run generate-changelog","preversion":"npm run all","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.14.5","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"12.16.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.2.0","mocha":"^8.1.1","sinon":"^9.0.3","eslint":"^7.6.0","rimraf":"^3.0.2","prettier":"^2.0.5","sinon-chai":"^3.5.0","typescript":"^3.7.4","@types/chai":"^4.2.12","@types/node":"^14.0.27","@types/mocha":"^8.0.1","@types/sinon":"^9.0.4","@types/sinon-chai":"^3.2.4","source-map-support":"^0.5.19","@stryker-mutator/core":"^4.0.0-beta.2","eslint-config-prettier":"^6.11.0","eslint-plugin-prettier":"^3.1.4","@typescript-eslint/parser":"^3.9.0","conventional-changelog-cli":"^2.0.34","@stryker-mutator/mocha-runner":"^4.0.0-beta.2","@typescript-eslint/eslint-plugin":"^3.9.0","@stryker-mutator/typescript-checker":"^4.0.0-beta.2"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_3.0.0_1597257108360_0.6237565525614392","host":"s3://npm-registry-packages"}},"3.0.1":{"name":"typed-inject","version":"3.0.1","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@3.0.1","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"edd396d3e98ae27dd2f3a209bfee2ad2d447ac5f","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-3.0.1.tgz","fileCount":70,"integrity":"sha512-5yr8inrNos7uo/irp5PZ7WNwmYGfoa0w1NiDdCWW6hhIxYH2NCqYwX9BUOXpZgxk964rb1ElEfvBtftuvIPpvw==","signatures":[{"sig":"MEYCIQC/AxTo8WQCOEq1sATOjA7pKbIQFKANa1kYtI4pdnYAyQIhAOa3tTaxAg4Iw4ZKTkXnicllc6W17bowa8MlbfSSi5hl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":92384},"main":"dist/src/index.js","engines":{"node":">=10"},"gitHead":"bf2837703fd0c6ee0f392dedeace5de8a156c5be","scripts":{"all":"npm run clean && npm run lint && npm run build && npm run test && npm run stryker","lint":"eslint . --ext .js,.ts --ignore-path .gitignore --ignore-pattern testResources/**/*.ts --ignore-pattern stryker.conf.js --ignore-pattern .eslintrc.js","test":"nyc --exclude-after-remap=false \"--exclude=dist/test/**/*.js\" --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run mocha","build":"tsc -b","clean":"rimraf dist","mocha":"mocha \"dist/test/helpers/**/*.js\" \"dist/test/unit/**/*.js\" && mocha --timeout 20000 \"dist/test/helpers/**/*.js\" \"dist/test/integration/**/*.js\"","start":"tsc -b -w","stryker":"stryker run","version":"npm run generate-changelog","preversion":"npm run all","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"6.14.14","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"14.17.4","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.2","sinon":"^11.1.2","eslint":"^7.32.0","rimraf":"^3.0.2","prettier":"^2.4.1","sinon-chai":"^3.7.0","typescript":"4.4.3","@types/chai":"^4.2.22","@types/node":"^16.10.3","@types/mocha":"^9.0.0","@types/sinon":"^10.0.4","@types/sinon-chai":"^3.2.5","source-map-support":"^0.5.20","@stryker-mutator/core":"^5.4.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","@typescript-eslint/parser":"^4.33.0","conventional-changelog-cli":"^2.1.1","@stryker-mutator/mocha-runner":"^5.4.1","@typescript-eslint/eslint-plugin":"^4.33.0","@stryker-mutator/typescript-checker":"^5.4.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_3.0.1_1633942985948_0.8289626566566308","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"typed-inject","version":"4.0.0","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","_id":"typed-inject@4.0.0","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"homepage":"https://github.com/nicojs/typed-inject/#readme","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"dist":{"shasum":"133c00ad7ed9d129aeedf4e102fd07cc530d26cb","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-4.0.0.tgz","fileCount":70,"integrity":"sha512-OuBL3G8CJlS/kjbGV/cN8Ni32+ktyyi6ADDZpKvksbX0fYBV5WcukhRCYa7WqLce7dY/Br2dwtmJ9diiadLFpg==","signatures":[{"sig":"MEUCIGwhpaLJnmvbthNJJIUfYKAbX9w191DyizPBsdshl7VzAiEAiY+ii09/IaUFLdUPnmsEHga2DPl9smPe1T7MY7vUxOQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":92631},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=16"},"gitHead":"b865c8433c9ec101c1f51e16921519dd14cc7446","scripts":{"all":"npm run clean && npm run build && npm run lint && npm run test && npm run stryker","lint":"eslint . --ext .js,.ts --ignore-path .gitignore --ignore-pattern testResources/**/*.ts --ignore-pattern stryker.conf.js","test":"c8 --exclude-after-remap=false \"--exclude=dist/test/**/*.js\" --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run test:all","build":"tsc -b","clean":"rimraf dist","start":"tsc -b -w","stryker":"stryker run","version":"npm run generate-changelog","test:all":"npm run test:unit && npm run test:integration","test:unit":"mocha -r source-map-support/register \"dist/test/helpers/**/*.js\" \"dist/test/unit/**/*.js\"","preversion":"npm run all","postversion":"npm publish && git push && git push --tags","release:major":"npm version major -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:patch":"npm version patch -m \"chore(release): %s\"","test:integration":"mocha -r source-map-support/register --timeout 20000 \"dist/test/helpers/**/*.js\" \"dist/test/integration/**/*.js\"","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"repository":{"url":"git+https://github.com/nicojs/typed-inject.git","type":"git"},"_npmVersion":"8.19.2","description":"Type safe dependency injection framework for TypeScript","directories":{},"_nodeVersion":"18.12.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^7.13.0","chai":"^4.3.7","mocha":"^10.2.0","sinon":"^15.0.4","eslint":"^8.40.0","rimraf":"^5.0.0","prettier":"^2.8.8","sinon-chai":"^3.7.0","typescript":"~5.0.4","@types/chai":"^4.3.5","@types/node":"^20.1.0","@types/mocha":"^10.0.1","@types/sinon":"^10.0.14","@types/sinon-chai":"^3.2.9","source-map-support":"^0.5.21","@stryker-mutator/core":"^6.4.2","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","@typescript-eslint/parser":"^5.59.2","conventional-changelog-cli":"^2.2.2","@stryker-mutator/mocha-runner":"^6.4.2","@typescript-eslint/eslint-plugin":"^5.59.2","@stryker-mutator/typescript-checker":"^6.4.2"},"_npmOperationalInternal":{"tmp":"tmp/typed-inject_4.0.0_1683324219067_0.028518887654036318","host":"s3://npm-registry-packages"}},"5.0.0":{"name":"typed-inject","version":"5.0.0","description":"Type safe dependency injection framework for TypeScript","main":"dist/src/index.js","type":"module","scripts":{"all":"npm run clean && npm run build && npm run lint && npm run test && npm run stryker","start":"tsc -b -w","clean":"rimraf dist","lint":"eslint","build":"tsc -b","test":"c8 --exclude-after-remap=false \"--exclude=dist/test/**/*.js\" --check-coverage --reporter=html --report-dir=reports/coverage --lines 100 --functions 100 --branches 100 npm run test:all","test:all":"npm run test:unit && npm run test:integration","test:unit":"mocha -r source-map-support/register \"dist/test/helpers/**/*.js\" \"dist/test/unit/**/*.js\"","test:integration":"mocha -r source-map-support/register --timeout 20000 \"dist/test/helpers/**/*.js\" \"dist/test/integration/**/*.js\"","stryker":"stryker run","preversion":"npm run all","version":"npm run generate-changelog","postversion":"npm publish && git push && git push --tags","generate-changelog":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md","release:patch":"npm version patch -m \"chore(release): %s\"","release:minor":"npm version minor -m \"chore(release): %s\"","release:major":"npm version major -m \"chore(release): %s\""},"repository":{"type":"git","url":"git+https://github.com/nicojs/typed-inject.git"},"engines":{"node":">=18"},"keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"publishConfig":{"access":"public"},"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"homepage":"https://github.com/nicojs/typed-inject/#readme","devDependencies":{"@eslint/js":"^9.16.0","@stryker-mutator/core":"^8.7.1","@stryker-mutator/mocha-runner":"^8.7.1","@stryker-mutator/typescript-checker":"^8.7.1","@types/chai":"^5.0.1","@types/mocha":"^10.0.10","@types/node":"^22.10.2","@types/sinon":"^17.0.3","@types/sinon-chai":"^4.0.0","@typescript-eslint/eslint-plugin":"^8.18.0","@typescript-eslint/parser":"^8.18.0","c8":"^10.1.3","chai":"^5.1.2","conventional-changelog-cli":"^5.0.0","eslint-plugin-chai-friendly":"^1.0.1","eslint-plugin-prettier":"^5.2.1","mocha":"^11.0.1","prettier":"^3.4.2","rimraf":"^6.0.1","sinon":"^19.0.2","sinon-chai":"^4.0.0","source-map-support":"^0.5.21","typescript":"~5.7.2","typescript-eslint":"^8.18.0"},"_id":"typed-inject@5.0.0","gitHead":"5d3c0276e65ade1d683239346488708b7a11e443","types":"./dist/src/index.d.ts","_nodeVersion":"22.9.0","_npmVersion":"10.8.3","dist":{"integrity":"sha512-0Ql2ORqBORLMdAW89TQKZsb1PQkFGImFfVmncXWe7a+AA3+7dh7Se9exxZowH4kbnlvKEFkMxUYdHUpjYWFJaA==","shasum":"03e19e41188ec6a05496a5d37dc307d649aa7e87","tarball":"https://registry.npmjs.org/typed-inject/-/typed-inject-5.0.0.tgz","fileCount":70,"unpackedSize":102880,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAk+9hZ23pG/nHIecqCFxeS3MrBikUOW8vJjAKgkJ8pQAiAjiesShTCiBSR6ymU9ywA8onM2H7/BAGdPRnMMb+pTbA=="}]},"_npmUser":{"name":"nicojs","email":"jansennico@gmail.com"},"directories":{},"maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/typed-inject_5.0.0_1734127501077_0.1517064924930418"},"_hasShrinkwrap":false}},"time":{"created":"2019-01-11T21:18:20.055Z","modified":"2024-12-13T22:05:01.438Z","0.0.0":"2019-01-11T21:18:20.404Z","0.1.0":"2019-01-25T19:48:24.034Z","0.1.1":"2019-01-26T11:07:19.507Z","0.2.0":"2019-02-05T14:20:21.833Z","0.2.1":"2019-02-11T09:55:25.751Z","1.0.0":"2019-02-12T11:24:57.387Z","2.0.0":"2019-05-02T06:34:02.239Z","2.1.0":"2019-05-03T16:17:41.824Z","2.1.1":"2019-09-12T20:32:59.010Z","2.2.0":"2020-03-21T17:02:50.402Z","2.2.1":"2020-03-22T15:05:06.828Z","3.0.0":"2020-08-12T18:31:48.462Z","3.0.1":"2021-10-11T09:03:06.090Z","4.0.0":"2023-05-05T22:03:39.258Z","5.0.0":"2024-12-13T22:05:01.260Z"},"bugs":{"url":"https://github.com/nicojs/typed-inject/issues"},"author":{"name":"Nico Jansen","email":"jansennico@gmail.com"},"license":"Apache-2.0","homepage":"https://github.com/nicojs/typed-inject/#readme","keywords":["typescript","dependency-injection","IoC","di","inject","type-safe"],"repository":{"type":"git","url":"git+https://github.com/nicojs/typed-inject.git"},"description":"Type safe dependency injection framework for TypeScript","maintainers":[{"name":"nicojs","email":"jansennico@gmail.com"},{"name":"strykermutator-npa","email":"strykermutator.npa@gmail.com"}],"readme":"[![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fnicojs%2Ftyped-inject%2Fmaster)](https://dashboard.stryker-mutator.io/reports/github.com/nicojs/typed-inject/master)\n[![Build Status](https://travis-ci.org/nicojs/typed-inject.svg?branch=master)](https://travis-ci.org/nicojs/typed-inject)\n[![NPM](https://img.shields.io/npm/dm/typed-inject.svg)](https://www.npmjs.com/package/typed-inject)\n[![Node version](https://img.shields.io/node/v/typed-inject.svg)](https://img.shields.io/node/v/stryker-utils.svg)\n[![Gitter](https://badges.gitter.im/stryker-mutator/stryker.svg)](https://gitter.im/stryker-mutator/stryker?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)\n\n# Typed Inject\n\n> Typesafe dependency injection for TypeScript\n\nA tiny, 100% typesafe dependency injection framework for TypeScript. You can inject classes, interfaces, or primitives. If your project compiles, you know your dependencies are resolved at runtime and have their declared types.\n\n_If you are new to 'Dependency Injection'/'Inversion of control', please read up on it [in this blog article about it](https://medium.com/@samueleresca/inversion-of-control-and-dependency-injection-in-typescript-3040d568aabe)_\n\n_If you want to know more about how typed-inject works, please read [my blog article about it](https://medium.com/@jansennico/advanced-typescript-type-safe-dependency-injection-873426e2cc96)_\n\n- [🗺️ Installation](#installation)\n- [🎁 Usage](#usage)\n- [💭 Motivation](#motivation)\n- [🗝️ Typesafe? How?](#typesafe-how)\n- [👶 Child injectors](#child-injectors)\n- [🎄 Decorate your dependencies](#decorate-your-dependencies)\n- [♻ Lifecycle control](#lifecycle-control)\n- [🚮 Disposing provided stuff](#disposing-provided-stuff)\n- [✨ Magic tokens](#magic-tokens)\n- [😬 Error handling](#error-handling)\n- [📖 API reference](#api-reference)\n- [🤝 Commendation](#commendation)\n\n<a name=\"installation\"></a>\n\n## 🗺️ Installation\n\nInstall typed-inject locally within your project folder, like so:\n\n```shell\nnpm i typed-inject\n```\n\nOr with yarn:\n\n```shell\nyarn add typed-inject\n```\n\n_Note: this package uses advanced TypeScript features. Only TS 3.0 and above is supported!_\n\n_Note: due to a [bug in TypeScript >3.8 <4.5](https://github.com/microsoft/TypeScript/issues/37400) there is a small chance that the compiler [doesn't catch all errors](https://github.com/nicojs/typed-inject/issues/20) (as well as you might experience some performance issues)._\n\n_Note: projects must enable [`--strictFunctionTypes`](https://www.typescriptlang.org/tsconfig#strictFunctionTypes) (or `--strict`) in their Typescript config or some type errors may not be caught._\n\n<a name=\"usage\"></a>\n\n## 🎁 Usage\n\nAn example:\n\n```ts\nimport { createInjector } from 'typed-inject';\n\ninterface Logger {\n  info(message: string): void;\n}\n\nconst logger: Logger = {\n  info(message: string) {\n    console.log(message);\n  },\n};\n\nclass HttpClient {\n  constructor(private log: Logger) {}\n  public static inject = ['logger'] as const;\n}\n\nclass MyService {\n  constructor(\n    private http: HttpClient,\n    private log: Logger,\n  ) {}\n  public static inject = ['httpClient', 'logger'] as const;\n}\n\nconst appInjector = createInjector()\n  .provideValue('logger', logger)\n  .provideClass('httpClient', HttpClient);\n\nconst myService = appInjector.injectClass(MyService);\n// Dependencies for MyService validated and injected\n```\n\nIn this example:\n\n- The `logger` is injected into a new instance of `HttpClient` by value.\n- The instance of `HttpClient` and the `logger` are injected into a new instance of `MyService`.\n\nDependencies are resolved using the static `inject` property in their classes. They must match the names given to the dependencies when configuring the injector with `provideXXX` methods.\n\nExpect compiler errors when you mess up the order of tokens or forget it completely.\n\n```ts\nimport { createInjector } from 'typed-inject';\n\n// Same logger as before\n\nclass HttpClient {\n  constructor(private log: Logger) {}\n  // ERROR! Property 'inject' is missing in type 'typeof HttpClient' but required\n}\n\nclass MyService {\n  constructor(\n    private http: HttpClient,\n    private log: Logger,\n  ) {}\n  public static inject = ['logger', 'httpClient'] as const;\n  // ERROR! Types of parameters 'http' and 'args_0' are incompatible\n}\n\nconst appInjector = createInjector()\n  .provideValue('logger', logger)\n  .provideClass('httpClient', HttpClient);\n\nconst myService = appInjector.injectClass(MyService);\n```\n\nThe error messages are a bit cryptic at times, but it sure is better than running into them at runtime.\n\n<a name=\"motivation\"></a>\n\n## 💭 Motivation\n\nJavaScript and TypeScript development already has a great dependency injection solution with [InversifyJS](https://github.com/inversify/InversifyJS). However, InversifyJS comes with 2 caveats.\n\n### InversifyJS uses Reflect-metadata\n\nInversifyJS works with a nice API using decorators. Decorators are in Stage 2 of ecma script proposal at the moment of writing this, so they will most likely land in ESNext. However, it also is opinionated in that it requires you to use [reflect-metadata](https://rbuckton.github.io/reflect-metadata/), which [is supposed to be an ecma script proposal, but isn't yet (at the moment of writing this)](https://github.com/rbuckton/reflect-metadata/issues/96). It might take years for reflect-metadata to land in JavaScript, if it ever does.\n\n### InversifyJS is not typesafe\n\nInversifyJS is also _not_ typesafe. There is no check to see of the injected type is actually injectable or that the corresponding type adheres to the expected type.\n\n<a name=\"typesafe-how\"></a>\n\n## 🗝️ Typesafe? How?\n\nType safe dependency injection works by combining excellent TypeScript features. Some of those features are:\n\n- [Literal types](https://www.typescriptlang.org/docs/handbook/advanced-types.html#string-literal-types)\n- [Intersection types](https://www.typescriptlang.org/docs/handbook/advanced-types.html#intersection-types)\n- [Mapped types](https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types)\n- [Conditional types](https://www.typescriptlang.org/docs/handbook/advanced-types.html#conditional-types)\n- [Rest parameters with tuple types](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-0.html#rest-parameters-with-tuple-types)\n\nPlease read [my blog article on Medium](https://medium.com/@jansennico/advanced-typescript-type-safe-dependency-injection-873426e2cc96) if you want to know how this works.\n\n<a name=\"child-injectors\"></a>\n\n## 👶 Child injectors\n\nThe `Injector` interface is responsible for injecting classes or functions. You start off with an empty injector after calling `createInjector`. It can't provide any dependencies directly (except for [magic tokens](#-magic-tokens)).\n\nTo do anything useful with your injector, you'll need to create child injectors. This what you do with the `provideXXX` methods.\n\n```ts\nimport { createInjector } from 'typed-inject';\nfunction barFactory(foo: number) {\n  return foo + 1;\n}\nbarFactory.inject = ['foo'] as const;\nclass Baz {\n  constructor(bar: number) {\n    console.log(`bar is: ${bar}`);\n  }\n  static inject = ['bar'] as const;\n}\n\n// Create 3 child injectors here\nconst childInjector = createInjector()\n  .provideValue('foo', 42) // child injector can provide 'foo'\n  .provideFactory('bar', barFactory) // child injector can provide both 'bar' and 'foo'\n  .provideClass('baz', Baz); // child injector can provide 'baz', 'bar' and 'foo'\n\n// Now use it here\nfunction run(baz: Baz) {\n  // baz is created!\n}\nrun.inject = ['baz'] as const;\nchildInjector.injectFunction(run);\n```\n\nIn the example above, a child injector is created. It can provide values for the tokens `'foo'`, `'bar'` and `'baz'`. You can create as many child injectors as you want.\n\nInjectors keep track of their child injectors and values they've injected. This way it can provide functionality like [cache the injected value](#-control-lifecycle) or [keep track of stuff to dispose](#-disposing-provided-stuff).\n\n<a name=\"decorate-your-dependencies\"></a>\n\n## 🎄 Decorate your dependencies\n\nA common use case for dependency injection is the [decorator design pattern](https://en.wikipedia.org/wiki/Decorator_pattern). It is used to dynamically add functionality to existing dependencies. Typed inject supports decoration of existing dependencies using its `provideFactory` and `provideClass` methods.\n\n```ts\nimport { createInjector } from 'typed-inject';\n\nclass Foo {\n  public bar() {\n    console.log('bar!');\n  }\n}\n\nfunction fooDecorator(foo: Foo) {\n  return {\n    bar() {\n      console.log('before call');\n      foo.bar();\n      console.log('after call');\n    },\n  };\n}\nfooDecorator.inject = ['foo'] as const;\n\nconst fooProvider = createInjector()\n  .provideClass('foo', Foo)\n  .provideFactory('foo', fooDecorator);\nconst foo = fooProvider.resolve('foo');\n\nfoo.bar();\n// => \"before call\"\n// => \"bar!\"\n// => \"after call\"\n```\n\nIn this example above the `Foo` class is decorated by the `fooDecorator`.\n\n<a name=\"lifecycle-control\"></a>\n\n## ♻ Lifecycle control\n\nYou can determine the lifecycle of dependencies with the third `Scope` parameter of `provideFactory` and `provideClass` methods.\n\n```ts\nfunction loggerFactory(target: Function | null) {\n  return getLogger((target && target.name) || 'UNKNOWN');\n}\nloggerFactory.inject = ['target'] as const;\n\nclass Foo {\n  constructor(public log: Logger) {\n    log.info('Foo created');\n  }\n  static inject = ['log'] as const;\n}\n\nconst fooProvider = injector\n  .provideFactory('log', loggerFactory, Scope.Transient)\n  .provideClass('foo', Foo, Scope.Singleton);\nconst foo = fooProvider.resolve('foo');\nconst fooCopy = fooProvider.resolve('foo');\nconst log = fooProvider.resolve('log');\nconsole.log(foo === fooCopy); // => true\nconsole.log(log === foo.log); // => false\n```\n\nA scope has 2 possible values.\n\n- `Scope.Singleton` (default value)  \n  Use `Scope.Singleton` to enable caching. Every time the dependency needs to be provided by the injector, the same instance is returned. Other injectors will still create their own instances, so it's only a `Singleton` for the specific injector (and child injectors created from it). In other words,\n  the instance will be _scoped to the `Injector`_\n- `Scope.Transient`  \n  Use `Scope.Transient` to altogether disable cashing. You'll always get fresh instances.\n\n<a name=\"disposing-provided-stuff\"></a>\n\n## 🚮 Disposing provided stuff\n\nMemory in JavaScript is garbage collected, so, we usually don't care about cleaning up after ourselves. However, there might be a need to explicit cleanup. For example removing a temp folder, or killing a child process.\n\nAs `typed-inject` is responsible for creating (providing) your dependencies, it only makes sense it is also responsible for the disposing of them.\n\nAny `Injector` has a `dispose` method. Calling it will call `dispose` on any instance that was ever provided from it, as well as any child injectors that were created from it.\n\n```ts\nimport { createInjector } from 'typed-inject';\n\nclass Foo {\n  constructor() {\n    console.log('Foo created');\n  }\n  dispose() {\n    console.log('Foo disposed');\n  }\n}\nconst rootInjector = createInjector();\nconst fooProvider = rootInjector.provideClass('foo', Foo);\nfooProvider.resolve('foo'); // => \"Foo created\"\nawait rootInjector.dispose(); // => \"Foo disposed\"\nfooProvider.resolve('foo'); // Error: Injector already disposed\n```\n\n_Note: Always dispose from the top down! In this example, the `rootInjector` is disposed, which in turn disposes everything that was ever provided from one if it's child injectors._\n\nTo help you implementing the `dispose` method correctly, `typed-inject` exports the `Disposable` interface for convenience:\n\n```ts\nimport { Disposable } from 'typed-inject';\nclass Foo implements Disposable {\n  dispose() {}\n}\n```\n\nDispose methods are typically `async`. For example, you might need to clean up some files or get rid of a child process.\nIf you do so, your dependencies should return a promise from the `dispose` method. In turn, calling `dispose` on an `Injector` is always async.\nYou are responsible for the correct handling of the async behavior of the `dispose` method.\nThis means you should either `await` the result or attach `then`/`catch` handlers.\n\n```ts\nimport { createInjector, Disposable } from 'typed-inject';\nclass Foo implements Disposable {\n  dispose(): Promise<void> {\n    return Promise.resolve();\n  }\n}\nconst rootInjector = createInjector();\nconst fooProvider = rootInjector\n  .provideClass('foo', Foo);\nconst foo = fooProvider.resolve('foo');\nasync function disposeFoo() {\n  await fooProvider.dispose();\n}\ndisposeFoo()\n  .then(() => console.log('Foo disposed'))\n  .catch(err => console.error('Foo disposal resulted in an error', err);\n```\n\nUsing `dispose` on the rootInjector will automatically dispose it's child injectors as well:\n\n```ts\nimport { createInjector } from 'typed-inject';\nclass Foo {}\nclass Bar {}\nconst rootInjector = createInjector();\nconst fooProvider = rootInjector.provideClass('foo', Foo);\nconst barProvider = fooProvider.provideClass('bar', Bar);\nawait rootInjector.dispose(); // => fooProvider is also disposed!\nfooProvider.resolve('foo'); // => Error: Injector already disposed\n```\n\nDisposing of provided values is done in order of child first. So they are disposed in the opposite order of respective `providedXXX` calls (like a stack):\n\n```ts\nimport { createInjector } from 'typed-inject';\n\nclass Foo {\n  dispose() {\n    console.log('Foo disposed');\n  }\n}\nclass Bar {\n  dispose() {\n    console.log('Bar disposed');\n  }\n}\nclass Baz {\n  static inject = ['foo', 'bar'] as const;\n  constructor(\n    public foo: Foo,\n    public bar: Bar,\n  ) {}\n}\nconst rootInjector = createInjector();\nrootInjector.provideClass('foo', Foo).provideClass('bar', Bar).injectClass(Baz);\nawait fooProvider.dispose();\n// => \"Foo disposed\"\n// => \"Bar disposed\",\n```\n\nAny instance created with `injectClass` or `injectFactory` will _not_ be disposed when `dispose` is called. You were responsible for creating it, so you are also responsible for the disposing of it. In the same vain, anything provided as a value with `providedValue` will also _not_ be disposed when `dispose` is called on it's injector.\n\n<a name=\"magic-tokens\"></a>\n\n## ✨ Magic tokens\n\nAny `Injector` instance can always provide the following tokens:\n\n| Token name       | Token value   | Description                                                                                         |\n| ---------------- | ------------- | --------------------------------------------------------------------------------------------------- |\n| `INJECTOR_TOKEN` | `'$injector'` | Injects the current injector                                                                        |\n| `TARGET_TOKEN`   | `'$target'`   | The class or function in which the current values are injected, or `undefined` if resolved directly |\n\nAn example:\n\n```ts\nimport {\n  createInjector,\n  Injector,\n  TARGET_TOKEN,\n  INJECTOR_TOKEN,\n} from 'typed-inject';\n\nclass Foo {\n  constructor(injector: Injector<{}>, target: Function | undefined) {}\n  static inject = [INJECTOR_TOKEN, TARGET_TOKEN] as const;\n}\n\nconst foo = createInjector().inject(Foo);\n```\n\n<a name=\"error-handling\"></a>\n\n## 😬 Error handling\n\nWhen a runtime error occurs, typed inject will provide you with the exact path where the error occurred.\n\n```ts\nclass GrandChild {\n  public baz = 'baz';\n  constructor() {\n    throw expectedCause;\n  }\n}\nclass Child {\n  public bar = 'foo';\n  constructor(public grandchild: GrandChild) {}\n  public static inject = ['grandChild'] as const;\n}\nclass Parent {\n  constructor(public readonly child: Child) {}\n  public static inject = ['child'] as const;\n}\ncreateInjector()\n  .provideClass('grandChild', GrandChild)\n  .provideClass('child', Child)\n  .injectClass(Parent);\n// => Error: Could not inject [class Parent] -> [token \"child\"] -> [class Child] -> [token \"grandChild\"] -> [class GrandChild]. Cause: Expected error\n```\n\nWhen you handle the error, you will be able to capture the original `cause`.\n\n```ts\nimport { InjectionError } from 'typed-inject';\ntry {\n  createInjector()\n    .provideClass('grandChild', GrandChild)\n    .provideClass('child', Child)\n    .injectClass(Parent);\n} catch (err) {\n  if (err instanceof InjectionError) {\n    console.error(err.cause.stack);\n  }\n}\n```\n\n<a name=\"api-reference\"></a>\n\n## 📖 API reference\n\n_Note: some generic parameters are omitted for clarity._\n\n### `createInjector`\n\nCreate a new `Injector<{}>`. You generally want to create one per application/request. If you're using `typed-inject` also in your unit tests, you probably want to create a fresh one for each test, for example in global test setup.\n\n### `Injector<TContext>`\n\nThe `Injector<TContext>` is the core interface of typed-inject. It provides the ability to inject your class or function with `injectClass` and `injectFunction` respectively. You can create new _child injectors_ from it using the `provideXXX` methods.\n\nThe `TContext` generic argument is a [lookup type](https://blog.mariusschulz.com/2017/01/06/typescript-2-1-keyof-and-lookup-types). The keys in this type are the tokens that can be injected, the values are the exact types of those tokens. For example, if `TContext extends { foo: string, bar: number }`, you can let a token `'foo'` be injected of type `string`, and a token `'bar'` of type `number`.\n\nTyped inject comes with only one implementation. The `rootInjector`. It implements `Injector<{}>` interface, meaning that it does not provide any tokens (except for [magic tokens](#-magic-tokens)). Import it with `import { rootInjector } from 'typed-inject'`. From the `rootInjector`, you can create child injectors. See [creating child injectors](#-creating-child-injectors) for more information.\n\n#### `injector.injectClass(injectable: InjectableClass)`\n\nThis method creates a new instance of class `injectable` by populating its constructor arguments from the injector and returns it.\n\nBasically it is a shortcut for resolving values from the injector and creating a new instance with those values:\n\n```ts\nconst logger = appInjector.resolve('logger');\nconst httpClient = appInjector.resolve('httpClient');\nconst service = new MyService(httpClient, logger);\n```\n\nAny instance created with `injectClass` will not be disposed when `dispose` is called. It is the caller's responsiblity to dispose it.\n\nWhen there are any problems in the dependency graph, it gives a compiler error.\n\n```ts\nclass Foo {\n  constructor(bar: number) {}\n  static inject = ['bar'] as const;\n}\nconst foo /*: Foo*/ = injector.injectClass(Foo);\n```\n\n#### `injector.injectFunction(fn: InjectableFunction)`\n\nThis method injects the function with requested tokens from the injector, invokes it and returns the result.\n\nIt is a shortcut for calling the provided function with the values from the injector.\n\n```ts\nconst logger = appInjector.resolve('logger');\nconst httpClient = appInjector.resolve('httpClient');\nconst request = doRequest(httpClient, logger);\n```\n\nWhen there are any problems in the dependency graph, it gives a compiler error.\n\n```ts\nfunction foo(bar: number) {\n  return bar + 1;\n}\nfoo.inject = ['bar'] as const;\nconst baz /*: number*/ = injector.injectFunction(Foo);\n```\n\n#### `injector.resolve(token: Token): CorrespondingType<TContext, Token>`\n\nThe `resolve` method lets you resolve tokens by hand.\n\n```ts\nconst foo = injector.resolve('foo');\n// Equivalent to:\nfunction retrieveFoo(foo: number) {\n  return foo;\n}\nretrieveFoo.inject = ['foo'] as const;\nconst foo2 = injector.injectFunction(retrieveFoo);\n```\n\n#### `injector.provideValue(token: Token, value: R): Injector<ChildContext<TContext, Token, R>>`\n\nCreate a child injector that can provide value `value` for token `'token'`. The new child injector can resolve all tokens the parent injector can as well as `'token'`.\n\n```ts\nconst fooInjector = injector.provideValue('foo', 42);\n```\n\n#### `injector.provideFactory(token: Token, factory: InjectableFunction<TContext>, scope = Scope.Singleton): Injector<ChildContext<TContext, Token, R>>`\n\nCreate a child injector that can provide a value using `factory` for token `'token'`. The new child injector can resolve all tokens the parent injector can and the new `'token'`.\n\nWith `scope` you can decide whether the value must be cached after the factory is invoked once. Use `Scope.Singleton` to enable caching (default), or `Scope.Transient` to disable caching.\n\n```ts\nconst fooInjector = injector.provideFactory('foo', () => 42);\nfunction loggerFactory(target: Function | undefined) {\n  return new Logger((target && target.name) || '');\n}\nloggerFactory.inject = [TARGET_TOKEN] as const;\nconst fooBarInjector = fooInjector.provideFactory(\n  'logger',\n  loggerFactory,\n  Scope.Transient,\n);\n```\n\n#### `injector.provideClass(token: Token, Class: InjectableClass<TContext>, scope = Scope.Singleton): Injector<ChildContext<TContext, Token, R>>`\n\nCreate a child injector that can provide a value using instances of `Class` for token `'token'`. The new child injector can resolve all tokens the parent injector can, as well as the new `'token'`.\n\nScope is also supported here, for more info, see `provideFactory`.\n\n#### `injector.createChildInjector(): Injector<TContext>`\n\nCreate a child injector that can provide exactly the same as the parent injector. Contrary to its `provideXxx` counterparts,this will create a new disposable scope without providing additional injectable values.\n\n```ts\nconst parentInjector = createInjector().provideValue('foo', 'bar');\nfor (const task of tasks) {\n  try {\n    const scope = parentInjector.createChildInjector();\n    const foo = scope.provideClass('baz', DisposableBaz).injectClass(Foo);\n    foo.handle(task);\n  } finally {\n    await scope.dispose(); // Dispose the scope, including instances of DisposableBaz\n    // Next task gets a fresh scope\n  }\n}\n```\n\n#### `injector.dispose(): Promise<void>`\n\nUse `dispose` to explicitly dispose the `injector`. This will result in the following (in order):\n\n1. Call `dispose` on each child injector created from this injector.\n2. It will call `dispose` on any dependency created by the injector (if it exists) using `provideClass` or `provideFactory` (**not** `provideValue` or `injectXXX`).\n3. It will also await any promise that might have been returned by disposable dependencies.\n\n_Note: this behavior changed since v2. Before v2, the parent injector was always disposed before the child injector._\n_Note: this behavior changed again in v3, calling `dispose` on a child injector will **no longer** dispose it's parent injector and instead will dispose it's child injectors. The order of disposal is still child first._\n\nAfter an injector is disposed, you cannot use it anymore. Any attempt to do so will result in an `InjectorDisposedError` error.\n\nDisposing of your dependencies is always done asynchronously. You should take care to handle this appropriately. The best way to do that is to `await` the result of `myInjector.dispose()`.\n\n### `Scope`\n\nThe `Scope` enum indicates the scope of a provided injectable (class or factory). Possible values: `Scope.Transient` (new injection per resolve) or `Scope.Singleton` (inject once, and reuse values). It generally defaults to `Singleton`.\n\n### `tokens`\n\nThe `tokens` function is a simple helper method that makes sure that an `inject` array is filled with a [readonly tuple type filled with literal strings](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-0.html#rest-parameters-with-tuple-types). It is mostly there for backward compatibility reasons, since we can now use `as const`, but one might also simply prefer to use `tokens` instead.\n\n```ts\nconst inject = tokens('foo', 'bar');\n// Equivalent to:\nconst inject = ['foo', 'bar'] as const;\n```\n\n### `InjectableClass<TContext, R, Tokens extends InjectionToken<TContext>[]>`\n\nThe `InjectableClass` interface is used to identify the (static) interface of classes that can be injected. It is defined as follows:\n\n```ts\n{\n  new(...args: CorrespondingTypes<TContext, Tokens>): R;\n  readonly inject: Tokens;\n}\n```\n\nIn other words, it makes sure that the `inject` tokens is corresponding with the constructor types.\n\n### `InjectableFunction<TContext, R, Tokens extends InjectionToken<TContext>[]>`\n\nComparable to `InjectableClass`, but for (non-constructor) functions.\n\n### `Disposable`\n\nYou can implement the `Disposable` interface in your dependencies. It looks like this:\n\n```ts\ninterface Disposable {\n  dispose(): void;\n}\n```\n\nWith this, you can let the `Injector` call [your dispose method](#-disposing-provided-stuff).\n\n_Note:_ This is just a convenience interface. Due to TypeScripts structural typing system `typed-inject` calls your `dispose` method without you having to explicitly implement it.\n\n### `InjectionError`\n\nThe error class of which instances are thrown when an error occurs during injection or dependency resolving.\n\nAn example:\n\n```ts\nconst explosion = new Error('boom!');\nclass Boom {\n  constructor() {\n    throw explosion;\n  }\n}\nclass Prison {\n  constructor(public readonly child: Boom) {}\n  public static inject = ['boom'] as const;\n}\ntry {\n  rootInjector.provideClass('boom', Boom).injectClass(Prison);\n} catch (error) {\n  if (error instanceof InjectionError) {\n    error.path[0] === Prison;\n    error.path[1] === 'boom';\n    error.path[2] === Boom;\n    error.cause === explosion;\n  }\n}\n```\n\n#### `InjectionError.path`\n\nThis will contain the path that was taken to get to the error.\n\n#### `InjectionError.cause`\n\nThe original cause of the injection error.\n\n<a name=\"commendation\"></a>\n\n## 🤝 Commendation\n\nThis entire framework would not be possible without the awesome guys working on TypeScript. Guys like [Ryan](https://github.com/RyanCavanaugh), [Anders](https://github.com/ahejlsberg) and the rest of the team: a heartfelt thanks! 💖\n\nInspiration for the API with static `inject` method comes from years-long AngularJS development. Special thanks to the Angular team.\n","readmeFilename":"README.md"}