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.4 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _construct2=_interopRequireDefault(require("@babel/runtime/helpers/construct"));var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _Reference=_interopRequireDefault(require("./Reference"));var _TagReference=_interopRequireDefault(require("./TagReference"));var _PackageReference=_interopRequireDefault(require("./PackageReference"));var _PrivateServiceException=_interopRequireDefault(require("./Exception/PrivateServiceException"));var _ServiceNotFoundException=_interopRequireDefault(require("./Exception/ServiceNotFoundException"));var _NotAbstractServiceException=_interopRequireDefault(require("./Exception/NotAbstractServiceException"));var _MethodCallNotFoundException=_interopRequireDefault(require("./Exception/MethodCallNotFoundException"));var _AbstractServiceException=_interopRequireDefault(require("./Exception/AbstractServiceException"));var _UnableToGetInstanceFromId=_interopRequireDefault(require("./Exception/UnableToGetInstanceFromId"));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 InstanceManager=exports["default"]=function(){function InstanceManager(containerBuilder,definitions,alias){(0,_classCallCheck2["default"])(this,InstanceManager);this._containerBuilder=containerBuilder;this._definitions=definitions;this._alias=alias;}return(0,_createClass2["default"])(InstanceManager,[{key:"definitions",get:function get(){return this._definitions;}},{key:"_getInstanceFromStringId",value:function _getInstanceFromStringId(id,bypassPublic){id=this._alias.get(id)||id;if(id==='service_container'&&this._containerBuilder.containerReferenceAsService){return this._containerBuilder;}if(this._definitions.has(id)){this._containerBuilder.loggerHelper.debug("Resolving service: ".concat(id));return this._getInstanceFromId(id,bypassPublic);}this._containerBuilder.loggerHelper.warn("The service ".concat(id," is not registered"));throw new _ServiceNotFoundException["default"](id);}},{key:"_getInstanceFromFunction",value:function _getInstanceFromFunction(functionName,bypassPublic){var ids=this._containerBuilder.objectToId.get(functionName);if(ids&&ids.size>0){return this.getInstance(ids.values().next().value,bypassPublic);}this._containerBuilder.loggerHelper.warn("The service ".concat(functionName.name," is not registered"));throw new _ServiceNotFoundException["default"](functionName);}},{key:"getInstance",value:function getInstance(id){var bypassPublic=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(typeof id==='string'){return this._getInstanceFromStringId(id,bypassPublic);}if(typeof id==='function'){return this._getInstanceFromFunction(id,bypassPublic);}throw new _UnableToGetInstanceFromId["default"](id);}},{key:"_getInstanceFromId",value:function _getInstanceFromId(id){var bypassPublic=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var definition=this._definitions.get(id);this._ensureIsNotPrivate(definition,bypassPublic,id);this._ensureIsNotAbstract(definition,id);this._logDeprecations(definition);if(definition.Object||definition.factory||!definition.Object&&definition.synthetic){return this._getExistingInstanceFromId(id,bypassPublic);}this._containerBuilder.loggerHelper.warn("The service ".concat(id," is not registered"));throw new _ServiceNotFoundException["default"](id);}},{key:"_logDeprecations",value:function _logDeprecations(definition){if(definition.deprecated){this._containerBuilder.loggerHelper.warn('DEPRECATED',definition.deprecated);}}},{key:"_ensureIsNotAbstract",value:function _ensureIsNotAbstract(definition,id){if(definition["abstract"]){throw new _AbstractServiceException["default"](id);}}},{key:"_ensureIsNotPrivate",value:function _ensureIsNotPrivate(definition,bypassPublic,id){if(!definition["public"]&&!bypassPublic){throw new _PrivateServiceException["default"](id);}}},{key:"_getExistingInstanceFromId",value:function _getExistingInstanceFromId(id){var bypassPublic=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var definition=this._definitions.get(id);if(definition.shared===false){return this.getInstanceFromDefinition(definition);}if(this._containerBuilder.services.has(id)&&definition.isPublic(bypassPublic)){return this._containerBuilder.services.get(id);}var instance=this.getInstanceFromDefinition(definition);this._containerBuilder.services.set(id,instance);return instance;}},{key:"getInstanceFromDefinition",value:function getInstanceFromDefinition(definition){if(definition.factory){return this._getInstanceFromFactory(definition);}if(!definition.synthetic){return this._getNotSyntheticInstanceFromDefinition(definition);}}},{key:"_getNotSyntheticInstanceFromDefinition",value:function _getNotSyntheticInstanceFromDefinition(definition){var args=this._resolveArguments(definition.args);try{args=this._appendParentArgumentsFromDefinition(definition.parent,args);}catch(e){if(e instanceof _NotAbstractServiceException["default"]){throw e;}}var instance=(0,_construct2["default"])(definition.Object,(0,_toConsumableArray2["default"])(args));var _iterator=_createForOfIteratorHelper(definition.properties),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var _step$value=(0,_slicedToArray2["default"])(_step.value,2),key=_step$value[0],value=_step$value[1];instance[key]=this._resolveServices(value);}}catch(err){_iterator.e(err);}finally{_iterator.f();}var _iterator2=_createForOfIteratorHelper(definition.calls),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var call=_step2.value;this._callMethod(instance,call);}}catch(err){_iterator2.e(err);}finally{_iterator2.f();}return instance;}},{key:"_appendParentArgumentsFromDefinition",value:function _appendParentArgumentsFromDefinition(definitionParent){var args=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(definitionParent){var parentDefinition=this._definitions.get(definitionParent);if(!parentDefinition["abstract"]){throw new _NotAbstractServiceException["default"](definitionParent);}return args.concat(this._resolveArguments(parentDefinition.appendArgs));}return args;}},{key:"_getInstanceFromFactory",value:function _getInstanceFromFactory(definition){var _definition$factory$O;var args=this._resolveArguments(definition.args);if(definition.factory.Object instanceof _Reference["default"]){var _factoryService$const;var factoryService=this._containerBuilder.get(definition.factory.Object.id);return(_factoryService$const=factoryService.constructor)[definition.factory.method].apply(_factoryService$const,(0,_toConsumableArray2["default"])(args));}return(_definition$factory$O=definition.factory.Object)[definition.factory.method].apply(_definition$factory$O,(0,_toConsumableArray2["default"])(args));}},{key:"_resolveArguments",value:function _resolveArguments(){var args=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var resolvedArgument=[];var _iterator3=_createForOfIteratorHelper(args),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var argument=_step3.value;resolvedArgument.push(this._resolveServices(argument));}}catch(err){_iterator3.e(err);}finally{_iterator3.f();}return resolvedArgument;}},{key:"_resolveServices",value:function _resolveServices(value){if(value instanceof _PackageReference["default"]){return require(value.id);}if(value instanceof _TagReference["default"]){return this._findTaggedServices(value.name);}if(value instanceof _Reference["default"]&&!value.nullable||value instanceof _Reference["default"]&&value.nullable&&this._containerBuilder.hasDefinition(value.id)){return this.getInstance(value.id,true);}return this._getResolvedService(value);}},{key:"_getResolvedService",value:function _getResolvedService(value){return value instanceof _Reference["default"]&&value.nullable&&!this._containerBuilder.hasDefinition(value.id)?null:value;}},{key:"_findTaggedServices",value:function _findTaggedServices(tagName){var taggedServices=[];var _iterator4=_createForOfIteratorHelper(this._definitions),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var _step4$value=(0,_slicedToArray2["default"])(_step4.value,2),id=_step4$value[0],definition=_step4$value[1];if(definition.tags.some(function(tag){return tag.name===tagName;})){var serviceInstance=this.getInstance(id);taggedServices.push(serviceInstance);}}}catch(err){_iterator4.e(err);}finally{_iterator4.f();}return taggedServices;}},{key:"_callMethod",value:function _callMethod(service,call){if(typeof service[call.method]!=='function'){throw new _MethodCallNotFoundException["default"](call.method);}var args=this._resolveArguments(call.args);service[call.method].apply(service,(0,_toConsumableArray2["default"])(args));}},{key:"searchDefinitionsToOverrideArgs",value:function searchDefinitionsToOverrideArgs(){var result=new Map();var _iterator5=_createForOfIteratorHelper(this._definitions),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var _step5$value=(0,_slicedToArray2["default"])(_step5.value,2),key=_step5$value[0],definition=_step5$value[1];if(definition.overrideArgs.length>0){result.set(key,definition);}}}catch(err){_iterator5.e(err);}finally{_iterator5.f();}return result;}},{key:"searchNotOverrideDefinitionsByObject",value:function searchNotOverrideDefinitionsByObject(Object){var result=new Map();var _iterator6=_createForOfIteratorHelper(this._definitions),_step6;try{for(_iterator6.s();!(_step6=_iterator6.n()).done;){var _definition$Object;var _step6$value=(0,_slicedToArray2["default"])(_step6.value,2),key=_step6$value[0],definition=_step6$value[1];if(((_definition$Object=definition.Object)===null||_definition$Object===void 0?void 0:_definition$Object.name)===Object.name&&definition.overrideArgs.length===0){result.set(key,definition);}}}catch(err){_iterator6.e(err);}finally{_iterator6.f();}return result;}}]);}();