UNPKG

node-dependency-injection

Version:

The NodeDependencyInjection component allows you to standardize and centralize the way objects are constructed in your application.

1 lines 11.7 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _typeof2=_interopRequireDefault(require("@babel/runtime/helpers/typeof"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _path=_interopRequireDefault(require("path"));var _fs=_interopRequireDefault(require("fs"));var _Definition=_interopRequireDefault(require("./Definition"));var _PassConfig=_interopRequireDefault(require("./PassConfig"));var _Compiler=_interopRequireDefault(require("./Compiler"));var _CompilerPass=_interopRequireDefault(require("./CompilerPass"));var _InstanceManager=_interopRequireDefault(require("./InstanceManager"));var _DefinitionNotFoundException=_interopRequireDefault(require("./Exception/DefinitionNotFoundException"));var _LoadMethodNotFoundException=_interopRequireDefault(require("./Exception/LoadMethodNotFoundException"));var _LoggerWarnMethodNotFoundException=_interopRequireDefault(require("./Exception/LoggerWarnMethodNotFoundException"));var _WrongDefinitionException=_interopRequireDefault(require("./Exception/WrongDefinitionException"));var _FrozenContainerException=_interopRequireDefault(require("./Exception/FrozenContainerException"));var _RootDirectoryNotFound=_interopRequireDefault(require("./Exception/RootDirectoryNotFound"));var _RootDirectoryMustBeAbsolute=_interopRequireDefault(require("./Exception/RootDirectoryMustBeAbsolute"));var _ServiceFile=_interopRequireDefault(require("./ServiceFile"));var _LoggerHelper=_interopRequireDefault(require("./LoggerHelper"));function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]};},e:function e(r){throw r;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var o,a=!0,u=!1;return{s:function s(){t=t.call(r);},n:function n(){var r=t.next();return a=r.done,r;},e:function e(r){u=!0,o=r;},f:function f(){try{a||null==t["return"]||t["return"]();}finally{if(u)throw o;}}};}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}var ContainerBuilder=function(){function ContainerBuilder(){var containerReferenceAsService=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;var defaultDir=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;(0,_classCallCheck2["default"])(this,ContainerBuilder);this.ensureIsAbsolute(defaultDir);this.ensureDirectoryExists(defaultDir);this._definitions=new Map();this._parameters=new Map();this._alias=new Map();this._container=new Map();this._objectToId=new Map();this._frozen=false;this._compilerPass=new _CompilerPass["default"](this);this._extensions=[];this._logger=console;this._verbosity='warn';this._loggerHelper=new _LoggerHelper["default"](this._logger,this._verbosity);this._instanceManager=undefined;this._containerReferenceAsService=containerReferenceAsService;this._defaultDir=defaultDir;this._autowire=null;this._binds=new Map();}return(0,_createClass2["default"])(ContainerBuilder,[{key:"autowire",get:function get(){return this._autowire;},set:function set(autowire){this._autowire=autowire;}},{key:"binds",get:function get(){return this._binds;}},{key:"addBind",value:function addBind(name,value){this._binds.set(name,value);}},{key:"ensureDirectoryExists",value:function ensureDirectoryExists(directory){if(directory&&_fs["default"].existsSync(directory)===false){throw new _RootDirectoryNotFound["default"]();}}},{key:"ensureIsAbsolute",value:function ensureIsAbsolute(directory){if(directory&&_path["default"].isAbsolute(directory)===false){throw new _RootDirectoryMustBeAbsolute["default"]();}}},{key:"defaultDir",get:function get(){return this._defaultDir;},set:function set(value){this.ensureIsAbsolute(value);this.ensureDirectoryExists(value);this._defaultDir=value;}},{key:"containerReferenceAsService",get:function get(){return this._containerReferenceAsService;}},{key:"definitions",get:function get(){return this._definitions;}},{key:"objectToId",get:function get(){return this._objectToId;}},{key:"frozen",get:function get(){return this._frozen;},set:function set(value){this._frozen=value;}},{key:"instanceManager",get:function get(){if(!this._instanceManager){this._instanceManager=new _InstanceManager["default"](this,this._definitions,this._alias);}return this._instanceManager;}},{key:"extensions",get:function get(){return this._extensions;}},{key:"logger",get:function get(){return this._logger;},set:function set(value){if(typeof value.warn!=='function'){throw new _LoggerWarnMethodNotFoundException["default"]();}this._logger=value;this._loggerHelper=new _LoggerHelper["default"](this._logger,this._verbosity);}},{key:"verbosity",get:function get(){return this._verbosity;},set:function set(value){this._verbosity=value;this._loggerHelper=new _LoggerHelper["default"](this._logger,this._verbosity);}},{key:"loggerHelper",get:function get(){return this._loggerHelper;}},{key:"services",get:function get(){return this._container;}},{key:"register",value:function register(id){var object=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var args=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];if(!this.frozen){var definition=new _Definition["default"]();definition.Object=object;definition.args=args;if(!object){definition.synthetic=true;}return this.setDefinition(id,definition);}throw new _FrozenContainerException["default"]();}},{key:"get",value:function get(id){return this.instanceManager.getInstance(id);}},{key:"compile",value:function(){var _compile=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(){var _this$_autowire;return _regenerator["default"].wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:_context.next=2;return new _Compiler["default"](this).run();case 2:if(!(((_this$_autowire=this._autowire)===null||_this$_autowire===void 0?void 0:_this$_autowire.serviceFile)instanceof _ServiceFile["default"])){_context.next=5;break;}_context.next=5;return this._autowire.serviceFile.generateFromContainer(this);case 5:case"end":return _context.stop();}},_callee,this);}));function compile(){return _compile.apply(this,arguments);}return compile;}()},{key:"addCompilerPass",value:function addCompilerPass(compilerPass){var type=arguments.length>1&&arguments[1]!==undefined?arguments[1]:_PassConfig["default"].TYPE_BEFORE_OPTIMIZATION;var priority=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;this._compilerPass.register(compilerPass,type,priority);}},{key:"setAlias",value:function setAlias(alias,id){this._alias.set(alias,id);}},{key:"hasAlias",value:function hasAlias(alias){return this._alias.has(alias);}},{key:"setDefinition",value:function setDefinition(id,definition){if(definition instanceof _Definition["default"]){this._definitions.set(id,definition);if(definition.Object){if(!this._objectToId.has(definition.Object)){this._objectToId.set(definition.Object,new Set());}this._objectToId.get(definition.Object).add(id);}return definition;}throw new _WrongDefinitionException["default"]();}},{key:"findTaggedServiceIds",value:_regenerator["default"].mark(function findTaggedServiceIds(name){var _iterator,_step,_step$value,id,definition;return _regenerator["default"].wrap(function findTaggedServiceIds$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_iterator=_createForOfIteratorHelper(this._definitions);_context2.prev=1;_iterator.s();case 3:if((_step=_iterator.n()).done){_context2.next=10;break;}_step$value=(0,_slicedToArray2["default"])(_step.value,2),id=_step$value[0],definition=_step$value[1];if(!definition.tags.some(function(tag){return tag.name===name;})){_context2.next=8;break;}_context2.next=8;return{id:id,definition:definition};case 8:_context2.next=3;break;case 10:_context2.next=15;break;case 12:_context2.prev=12;_context2.t0=_context2["catch"](1);_iterator.e(_context2.t0);case 15:_context2.prev=15;_iterator.f();return _context2.finish(15);case 18:case"end":return _context2.stop();}},findTaggedServiceIds,this,[[1,12,15,18]]);})},{key:"setParameter",value:function setParameter(key,value){if(typeof value!=='string'&&!Array.isArray(value)&&typeof value!=='boolean'&&(0,_typeof2["default"])(value)!=='object'){throw new TypeError('The expected value is not a flat string, an array, a boolean or an object');}this._parameters.set(key,value);}},{key:"getParameter",value:function getParameter(key){return this._parameters.get(key);}},{key:"hasParameter",value:function hasParameter(key){return this._parameters.has(key);}},{key:"hasDefinition",value:function hasDefinition(key){return this._definitions.has(key);}},{key:"has",value:function has(key){return this._definitions.has(key)||this._parameters.has(key)||this._alias.has(key);}},{key:"_definition",value:function _definition(method,key){if(this._definitions.has(key)){return this._definitions[method](key);}throw new _DefinitionNotFoundException["default"](key);}},{key:"getDefinition",value:function getDefinition(key){return this._definition('get',key);}},{key:"removeDefinition",value:function removeDefinition(key){if(this._definitions.has(key)){var definition=this._definitions.get(key);if(definition.Object){var ids=this._objectToId.get(definition.Object);if(ids){ids["delete"](key);if(ids.size===0){this._objectToId["delete"](definition.Object);}}}return this._definitions["delete"](key);}throw new _DefinitionNotFoundException["default"](key);}},{key:"findDefinition",value:(function(){var _findDefinition=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2(key){return _regenerator["default"].wrap(function _callee2$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:key=this._alias.get(key)||key;if(!this._definitions.has(key)){_context3.next=3;break;}return _context3.abrupt("return",this._definitions.get(key));case 3:throw new _DefinitionNotFoundException["default"](key);case 4:case"end":return _context3.stop();}},_callee2,this);}));function findDefinition(_x){return _findDefinition.apply(this,arguments);}return findDefinition;}())},{key:"registerExtension",value:function registerExtension(extension){if(typeof extension.load!=='function'){throw new _LoadMethodNotFoundException["default"](extension.constructor.name);}this._extensions.push(extension);}},{key:"set",value:function set(id,instance){this._container.set(id,instance);}},{key:"remove",value:function remove(id){this._container["delete"](id);}},{key:"isSet",value:function isSet(id){return this._container.has(id);}}]);}();var _default=exports["default"]=ContainerBuilder;