{"_id":"@aantonov/dep-injector","_rev":"9-b0b4ae50773ff019e77529a9f1b9c75b","name":"@aantonov/dep-injector","dist-tags":{"latest":"0.1.3"},"versions":{"0.0.1":{"name":"@aantonov/dep-injector","version":"0.0.1","description":"","main":"index.js","scripts":{"test":"node_modules/mocha/bin/mocha --recursive tests/"},"author":{"name":"Artem Antonov","email":"aantonov.develop@gmail.com"},"license":"MIT","dependencies":{"mongoose":"^4.9.4","redis":"^2.7.1","then-redis":"^2.0.1"},"devDependencies":{"mocha":"^3.2.0"},"gitHead":"decda27e23b699f83884fffc36922ae433d723de","_id":"@aantonov/dep-injector@0.0.1","_shasum":"915953aaf961cb92105743789aa6cbfe538c15c1","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.8.0","_npmUser":{"name":"aantonov","email":"aantonov.develop@gmail.com"},"dist":{"shasum":"915953aaf961cb92105743789aa6cbfe538c15c1","tarball":"https://registry.npmjs.org/@aantonov/dep-injector/-/dep-injector-0.0.1.tgz","integrity":"sha512-/LoiTGDgXK1zEnGhArie77nSAXJ2kGe4GUjuBkGU/AkAxxfgMf04Ri12sd2GiPuPv6A2O1BTwxzWZEJsA8WCbQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDX86qVMF4v3VY3rZI0JW2sdEUJcmwEhsi5loWvEfnBMQIhAPhu3169lkNMdlLCUwEjQXv887Zw5djD3E67oZtwkkSu"}]},"maintainers":[{"name":"aantonov","email":"aantonov.develop@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/dep-injector-0.0.1.tgz_1493192994494_0.7975982727948576"}},"0.0.2":{"name":"@aantonov/dep-injector","version":"0.0.2","description":"```bash npm install @aantonov/dep-injector ``` ## Usage ```javascript const injector = require('dep-injector'); const app = require('express')();","main":"index.js","scripts":{"test":"node_modules/mocha/bin/mocha --recursive tests/"},"author":{"name":"Artem Antonov","email":"aantonov.develop@gmail.com"},"license":"MIT","dependencies":{"mongoose":"^4.9.4","redis":"^2.7.1","then-redis":"^2.0.1"},"devDependencies":{"mocha":"^3.2.0"},"gitHead":"7773f6c867008c053f0a1c7d7849b09a6d194fbc","_id":"@aantonov/dep-injector@0.0.2","_shasum":"2036515bee49c90bbf72f6747dc51af52bab6d01","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.8.0","_npmUser":{"name":"aantonov","email":"aantonov.develop@gmail.com"},"dist":{"shasum":"2036515bee49c90bbf72f6747dc51af52bab6d01","tarball":"https://registry.npmjs.org/@aantonov/dep-injector/-/dep-injector-0.0.2.tgz","integrity":"sha512-Of1l7hNOGgzmNEtvXfryZiXZ743ZCvrrEemnpyJaskkPJRBRsfL973IpB+XC6wvkqdayO40SO0b2EJHncb1AUg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGabIMDJQMXMKDcdvdCuvTSh/k3UGYG71Eg5yMLhz+I0AiEAmNYeni1WQ48sQcb425dFGc0dL0NMwgX1qeaqekHZhRY="}]},"maintainers":[{"name":"aantonov","email":"aantonov.develop@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/dep-injector-0.0.2.tgz_1493193786112_0.1535287876613438"}},"0.0.3":{"name":"@aantonov/dep-injector","version":"0.0.3","description":"```bash npm install @aantonov/dep-injector ``` ## Usage ```javascript const injector = require('dep-injector'); const app = require('express')();","main":"index.js","scripts":{"test":"node_modules/mocha/bin/mocha --recursive tests/"},"author":{"name":"Artem Antonov","email":"aantonov.develop@gmail.com"},"license":"MIT","dependencies":{"mongoose":"^4.9.4","redis":"^2.7.1","then-redis":"^2.0.1"},"devDependencies":{"mocha":"^3.2.0"},"repository":{"type":"git","url":"git+https://github.com/aantonovdevelop/dependency-injection.git"},"gitHead":"4ca52fb00d615591d518c11fbe8e53050cbcb589","bugs":{"url":"https://github.com/aantonovdevelop/dependency-injection/issues"},"homepage":"https://github.com/aantonovdevelop/dependency-injection#readme","_id":"@aantonov/dep-injector@0.0.3","_shasum":"81967ffc833a4f8c163fd94b7fb66cb387eaa40e","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.8.0","_npmUser":{"name":"aantonov","email":"aantonov.develop@gmail.com"},"dist":{"shasum":"81967ffc833a4f8c163fd94b7fb66cb387eaa40e","tarball":"https://registry.npmjs.org/@aantonov/dep-injector/-/dep-injector-0.0.3.tgz","integrity":"sha512-XR9o0ZE7UMft8LV0mxydgP+PN8eDJLHzpTjAzTlZGXtd/P/F7HdmHzVDLEur+K3cURfdeaxMIjDbeiXiO4RD9A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2ZszM4roBGkEl4k2sGVsQvzEWGXgIATymnQJDGAYFJQIhAMMdvxNcKBK5/BxkvXGCkIw16KK3Llv1DmnXlrLk8vzy"}]},"maintainers":[{"name":"aantonov","email":"aantonov.develop@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/dep-injector-0.0.3.tgz_1493194089127_0.791870151180774"}},"0.1.0":{"name":"@aantonov/dep-injector","version":"0.1.0","description":"```bash npm install @aantonov/dep-injector ``` ## Usage ```javascript const app = require('express')();","main":"index.js","scripts":{"test":"node_modules/mocha/bin/mocha --recursive tests/","flow":"flow","prepublish":"babel src/ -d build/"},"author":{"name":"Artem Antonov","email":"aantonov.develop@gmail.com"},"license":"MIT","dependencies":{"mongoose":"^4.9.4","redis":"^2.7.1","then-redis":"^2.0.1"},"devDependencies":{"babel-cli":"^6.24.1","babel-preset-flow":"^6.23.0","flow-bin":"^0.46.0","mocha":"^3.2.0"},"repository":{"type":"git","url":"git+https://github.com/aantonovdevelop/dependency-injection.git"},"gitHead":"99d6d7b2fb208c8509a0164559d28d334fb24aac","bugs":{"url":"https://github.com/aantonovdevelop/dependency-injection/issues"},"homepage":"https://github.com/aantonovdevelop/dependency-injection#readme","_id":"@aantonov/dep-injector@0.1.0","_shasum":"fca2582ce48eb50dcedc701a05b470fbfec1bc62","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.8.0","_npmUser":{"name":"aantonov","email":"aantonov.develop@gmail.com"},"dist":{"shasum":"fca2582ce48eb50dcedc701a05b470fbfec1bc62","tarball":"https://registry.npmjs.org/@aantonov/dep-injector/-/dep-injector-0.1.0.tgz","integrity":"sha512-hG41AOCgiqPW4CJibK86m55Iw//JLlgSLOj5r9TJiVISJBDwAcYHNaF4fU9X4gTURadyP09XaJWDePehrFlfzQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDfozpYV6tAyP9mQ8FT43tT9IXRmElVCttSCKC2vz7U6AiEAlaA3OqJF9N+j1raO/IArYpP9wZG8QiFTsZoNFHJccFY="}]},"maintainers":[{"name":"aantonov","email":"aantonov.develop@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/dep-injector-0.1.0.tgz_1494890310958_0.9175653178244829"}},"0.1.1":{"name":"@aantonov/dep-injector","version":"0.1.1","description":"```bash npm install @aantonov/dep-injector ``` ## Usage ```javascript const app = require('express')();","main":"index.js","scripts":{"test":"node_modules/mocha/bin/mocha --recursive tests/","flow":"flow","prepublish":"babel src/ -d build/"},"author":{"name":"Artem Antonov","email":"aantonov.develop@gmail.com"},"license":"MIT","dependencies":{"mongoose":"^4.9.4","redis":"^2.7.1","then-redis":"^2.0.1"},"devDependencies":{"babel-cli":"^6.24.1","babel-preset-flow":"^6.23.0","flow-bin":"^0.46.0","mocha":"^3.2.0"},"repository":{"type":"git","url":"git+https://github.com/aantonovdevelop/dependency-injection.git"},"gitHead":"6fdc6b686202c63ee911f09051e7fa9dbe99c8b0","bugs":{"url":"https://github.com/aantonovdevelop/dependency-injection/issues"},"homepage":"https://github.com/aantonovdevelop/dependency-injection#readme","_id":"@aantonov/dep-injector@0.1.1","_shasum":"44f59cbb25837abd719cb215cbf2e4f3bb97ae28","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.8.0","_npmUser":{"name":"aantonov","email":"aantonov.develop@gmail.com"},"dist":{"shasum":"44f59cbb25837abd719cb215cbf2e4f3bb97ae28","tarball":"https://registry.npmjs.org/@aantonov/dep-injector/-/dep-injector-0.1.1.tgz","integrity":"sha512-vN9aTH9TBRSE4ReeDE1wZvgsoD0flfHs+Zqp4zPO2D5O1djDtx5hV/bjRsdO9/xYDIAMyCk25lLyP3j96n/K9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjETIDV2OxrObfvITLOWeFQ++Glae5ek1V5LMnixWZlAIhAORaGAN/+LZmxEmWqewG1wFvA7nljlXW67rKMdu62JeS"}]},"maintainers":[{"name":"aantonov","email":"aantonov.develop@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/dep-injector-0.1.1.tgz_1494890623756_0.6204648271668702"}},"0.1.2":{"name":"@aantonov/dep-injector","version":"0.1.2","description":"```bash npm install @aantonov/dep-injector ``` ## Usage ```javascript const app = require('express')();","main":"index.js","scripts":{"test":"node_modules/mocha/bin/mocha --recursive tests/","flow":"flow","prepublish":"babel src/ -d build/"},"author":{"name":"Artem Antonov","email":"aantonov.develop@gmail.com"},"license":"MIT","dependencies":{"mongoose":"^4.9.4","redis":"^2.7.1","then-redis":"^2.0.1"},"devDependencies":{"babel-cli":"^6.24.1","babel-preset-flow":"^6.23.0","flow-bin":"^0.46.0","mocha":"^3.2.0"},"repository":{"type":"git","url":"git+https://github.com/aantonovdevelop/dependency-injection.git"},"gitHead":"5fa9b99241ad759da4e0371ac2bb53a4dd7d25d9","bugs":{"url":"https://github.com/aantonovdevelop/dependency-injection/issues"},"homepage":"https://github.com/aantonovdevelop/dependency-injection#readme","_id":"@aantonov/dep-injector@0.1.2","_npmVersion":"5.0.3","_nodeVersion":"8.0.0","_npmUser":{"name":"aantonov","email":"aantonov.develop@gmail.com"},"dist":{"integrity":"sha512-vrNNt87mILKvYfL8uuTgD/1XNM0HcXvzFve/X+ulDD/Rjg0wKlGI4dIN6sENbOGAk5x94ZB7IEb6Yudoh3osnA==","shasum":"bf7331069681cde90891ae5f5b7ba7954760ea0e","tarball":"https://registry.npmjs.org/@aantonov/dep-injector/-/dep-injector-0.1.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGnRVvb4lsfiVMv4HooHqpfif2fnxouP+rF8DurBXi8LAiEAyHwBhM40ukoFKabfIn1jvbuYLpbMyHuQp0ULcPXKpvc="}]},"maintainers":[{"name":"aantonov","email":"aantonov.develop@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dep-injector-0.1.2.tgz_1497178829806_0.5108138585928828"}},"0.1.3":{"name":"@aantonov/dep-injector","version":"0.1.3","description":"```bash npm install @aantonov/dep-injector ``` ## Usage ```javascript const app = require('express')();","main":"index.js","scripts":{"test":"node_modules/mocha/bin/mocha --recursive tests/","flow":"flow","prepublish":"node_modules/babel-cli/bin/babel.js src/ -d build/"},"author":{"name":"Artem Antonov","email":"aantonov.develop@gmail.com"},"license":"MIT","dependencies":{"mongoose":"^4.9.4","redis":"^2.7.1","then-redis":"^2.0.1"},"devDependencies":{"babel-cli":"^6.24.1","babel-preset-flow":"^6.23.0","flow-bin":"^0.46.0","mocha":"^3.2.0"},"repository":{"type":"git","url":"git+https://github.com/aantonovdevelop/dependency-injection.git"},"gitHead":"403a3f8897a09355f62f06edea80f5510c6fcde2","bugs":{"url":"https://github.com/aantonovdevelop/dependency-injection/issues"},"homepage":"https://github.com/aantonovdevelop/dependency-injection#readme","_id":"@aantonov/dep-injector@0.1.3","_npmVersion":"5.0.3","_nodeVersion":"8.0.0","_npmUser":{"name":"aantonov","email":"aantonov.develop@gmail.com"},"dist":{"integrity":"sha512-etM9qCfneIVxUCJVDMIekR0tChmvs++Rq4RjTEU+FOuuuExT5WUgInTJ/6Ab7o6ONV10EueP68wgBEmkVGm7fw==","shasum":"68f3991b5aaebd9416bad71071fb43df941810d1","tarball":"https://registry.npmjs.org/@aantonov/dep-injector/-/dep-injector-0.1.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGs9pd7C1C7ZgkTv+Bd3fovNA7R2Fckian0Ql7wlB/8gAiAsRWNicuaAFhpnpZhl9AxW5QmMhO5vBgMLDABbzA7weg=="}]},"maintainers":[{"name":"aantonov","email":"aantonov.develop@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dep-injector-0.1.3.tgz_1497180990337_0.5143768275156617"}}},"readme":"## Installation\n\n```bash\nnpm install @aantonov/dep-injector\n```\n## Usage\n```javascript\nconst app = require('express')();\n\nconst Factory = require('dep-injector');\n\nconst factory = new Factory(app);\n\nconst options = {\n    //Определяем путь к установленным npm пакетам\n    packagesPath: `${__dirname}/node_modules/`,\n\n    //Указываем типы классов которые будут использоваться в приложении\n    types: {\n        managers: {\n            //Указываем путь к конфигу инстанцирования классов. Конфиг инстанцирования подтягивается из app/managers/index.js\n            path: `${__dirname}/app/managers`\n        },\n\n        services: {\n            path: `${__dirname}/app/services`\n        },\n\n        controllers: {\n            path: `${__dirname}/app/controllers`,\n\n            //Если определена переменная config, то конфиги инстанцирования подтягиваютс из неё, а app/controllers/index.js игнорируется\n            blueprints: [{\n                //Имя модуля. Будет инстанцирован как testController\n                name: 'test-controller',\n\n                //См. ниже\n                deployType: 'constructor',\n                injectType: 'body',\n                \n                packages: [{\n                    name: 'assert',\n\n                    //Указываем, если модуль нативный\n                    native: true\n                }, {\n                    name: 'then-redis',\n\n                    //Указываем, если необходимо изменить имя инстанса. Иначе инстанцируется как thenRedis\n                    instanceName: 'redis',\n\n                    //Указываем, если после экспорта модуля необходимо вызвать функцию какую то из его функций\n                    callFunction: {\n                        name: 'createClient',\n                        arguments: []\n                    }\n                }],\n\n                //Определяем зависимости\n                dependencies: {\n\n                    services: [{\n                        name: 'test-service',\n\n                        //Если у зависимости определено поле `mock`, то этот объект будет заменять реальную зависимость\n                        mock: {\n                            getSomeNumber: function () {return 10}\n                        }\n                    }]\n                }\n\n            }]\n        }\n    },\n\n    //Привязываем роуты к функциям контроллера\n    routes: [{\n        //Тип запроса\n        method: 'post',\n\n        //URL запроса\n        url: '/some',\n\n        //Метод контроллера который будет привязан к роуту\n        func: 'controllers.test-controller.someFunction'\n    }]\n}\n\n//Инстанцируем классы и зависимости\nfactory.create(options)\n\n```\n### Controller example\n\nЕсли `deployType: 'constructor' && injectType: 'object'`\n\n```javascript\nclass TestController {\n    constructor(options) {\n        this._assert = options.assert;\n        this._testService = options.testService;\n    }\n\n    someFunction(req, res) {\n        this._assert.equal(this._testService.getSomeValue(), 10); //ok\n\n        res.send(200);\n    }\n}\n```\n\nЕсли `deployType: 'constructor' && injectType: 'body'`\n\n```ecmascript 6\nclass TestController {\n    _assert: TAssert;\n    _testService: TestService;\n    \n    someFunction(req, res) {\n        this._assert.equal(this._testService.getSomeValue(), 10); //ok\n\n        res.send(200);\n    }\n}\n```\n\n### Mocks\n\n```ecmascript 6\nconst Factory = require('./build/factory');\nconst factory = new Factory();\n\nconst config = {\n    types: {\n        controller: {\n            blueprints: [{\n                name: 'test-controller',\n                // deployType & injectType игнорируются. Зависимости ижектятся в тело мока\n                mock: {\n                    sign: async function (req, res) {\n                        const response = await this.testService.get();\n\n                        res.send(response);\n                    }\n                },\n\n                dependencies: [{\n                    name: 'test-service',\n                    type: 'service'\n                }]\n            }]\n        },\n\n        service: {\n            blueprints: [{\n                name: 'test-service',\n                deployType: 'constructor',\n                injectType: 'object',\n\n                //Инстанцирует класс исходя из конструктора\n                $constructor: class {\n                    constructor({redis}) {\n                        this.redis = redis;\n                    }\n\n                    async get() {\n                        return this.redis.get('key');\n                    }\n                },\n\n                packages: [{\n                    name: 'redis',\n                    mock: {\n                        get: function () {\n                            return Promise.resolve('Hello World!')\n                        }\n                    }\n                }]\n            }]\n        }\n    }\n};\n\nconst instances = factory.create(config);\n\nconst res = {send: function (value) {\n    console.log(value); // Print 'Hello World!'\n}};\n\n/**\n* {string} Name name of component\n* {string} Type type of component\n*/\ninstances.get('test-controller', 'controller').sign({}, res);\n```","maintainers":[{"name":"aantonov","email":"aantonov.develop@gmail.com"}],"time":{"modified":"2022-06-12T14:13:30.471Z","created":"2017-04-26T07:49:56.472Z","0.0.1":"2017-04-26T07:49:56.472Z","0.0.2":"2017-04-26T08:03:07.119Z","0.0.3":"2017-04-26T08:08:10.861Z","0.1.0":"2017-05-15T23:18:32.112Z","0.1.1":"2017-05-15T23:23:45.573Z","0.1.2":"2017-06-11T11:00:30.684Z","0.1.3":"2017-06-11T11:36:31.444Z"},"author":{"name":"Artem Antonov","email":"aantonov.develop@gmail.com"},"license":"MIT","readmeFilename":"README.md","description":"```bash npm install @aantonov/dep-injector ``` ## Usage ```javascript const app = require('express')();","homepage":"https://github.com/aantonovdevelop/dependency-injection#readme","repository":{"type":"git","url":"git+https://github.com/aantonovdevelop/dependency-injection.git"},"bugs":{"url":"https://github.com/aantonovdevelop/dependency-injection/issues"}}