UNPKG

node-dependency-injection

Version:

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

1 lines 12.1 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 _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _typeof2=_interopRequireDefault(require("@babel/runtime/helpers/typeof"));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 _Reference=_interopRequireDefault(require("./../Reference"));var _Definition=_interopRequireDefault(require("./../Definition"));var _validateNpmPackageName=_interopRequireDefault(require("validate-npm-package-name"));var _Autowire=_interopRequireDefault(require("../Autowire"));var _Argument=_interopRequireDefault(require("./Argument"));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 FileLoader=function(){function FileLoader(container){(0,_classCallCheck2["default"])(this,FileLoader);this._container=container;}return(0,_createClass2["default"])(FileLoader,[{key:"container",get:function get(){return this._container;}},{key:"filePath",get:function get(){return this._filePath;},set:function set(value){this._filePath=value;}},{key:"_parseDefinitions",value:(function(){var _parseDefinitions2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(){var services,id,_args=arguments;return _regenerator["default"].wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:services=_args.length>0&&_args[0]!==undefined?_args[0]:[];_context.t0=_regenerator["default"].keys(services);case 2:if((_context.t1=_context.t0()).done){_context.next=14;break;}id=_context.t1.value;if(!(id==='_defaults')){_context.next=9;break;}_context.next=7;return this._parseDefaults(services._defaults);case 7:_context.next=12;break;case 9:this._container.loggerHelper.debug("Parsing service definition: ".concat(id));_context.next=12;return this._parseDefinition(services,id);case 12:_context.next=2;break;case 14:case"end":return _context.stop();}},_callee,this);}));function _parseDefinitions(){return _parseDefinitions2.apply(this,arguments);}return _parseDefinitions;}())},{key:"_parseDefinition",value:(function(){var _parseDefinition2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2(services,id){var service;return _regenerator["default"].wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:service=services[id];if(typeof service==='string'){this.container.setAlias(id,service.slice(1));}else if(service.factory){this.container.setDefinition(id,this._getFactoryDefinition(service));}else{this.container.setDefinition(id,this._getDefinition(service));}case 2:case"end":return _context2.stop();}},_callee2,this);}));function _parseDefinition(_x,_x2){return _parseDefinition2.apply(this,arguments);}return _parseDefinition;}())},{key:"_getFactoryDefinition",value:function _getFactoryDefinition(service){var object=null;if(service.factory["class"].includes('@',0)){object=new _Reference["default"](service.factory["class"].slice(1));}else{object=this._requireClassNameFromPath(service.factory["class"],service.factory.main);}var definition=new _Definition["default"]();definition.shared=service.shared;definition.setFactory(object,service.factory.method);definition.args=this._getParsedArguments(service.arguments);return definition;}},{key:"_getDefinition",value:function _getDefinition(service){var definition;if(!service.synthetic){var object=this._requireClassNameFromPath(service["class"],service.main);definition=new _Definition["default"](object);definition.lazy=service.lazy||false;definition["public"]=service["public"]!==false;definition["abstract"]=service["abstract"]||false;definition.parent=service.parent;definition.decoratedService=service.decorates;definition.decorationPriority=service.decoration_priority;definition.deprecated=service.deprecated;definition.shared=service.shared;this._parseArguments(definition,service.arguments);this._parseOverrideArguments(definition,service.override_arguments);this._parseProperties(definition,service.properties);this._parseCalls(definition,service.calls);this._parseTags(definition,service.tags);}else{definition=new _Definition["default"]();definition.synthetic=true;}return definition;}},{key:"_parseCalls",value:function _parseCalls(definition){var _this=this;var calls=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];calls.forEach(function(call){definition.addMethodCall(call.method,_this._getParsedArguments(call.arguments));});}},{key:"_parseTags",value:function _parseTags(definition){var tags=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];tags.forEach(function(tag){definition.addTag(tag.name,FileLoader._parseTagAttributes(tag.attributes));});}},{key:"_getParsedArguments",value:function _getParsedArguments(){var args=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var parsedArguments=[];var _iterator=_createForOfIteratorHelper(args),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var argument=_step.value;parsedArguments.push(new _Argument["default"](this.container).parse(argument));}}catch(err){_iterator.e(err);}finally{_iterator.f();}return parsedArguments;}},{key:"_parseDefaults",value:function(){var _parseDefaults2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3(){var defaults,filePathParsed,_i,_Object$entries,_Object$entries$_i,name,value,autowire,_args3=arguments;return _regenerator["default"].wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:defaults=_args3.length>0&&_args3[0]!==undefined?_args3[0]:{};if(!(!defaults||!defaults.autowire)){_context3.next=3;break;}return _context3.abrupt("return");case 3:if(!_path["default"].isAbsolute(defaults.rootDir)){filePathParsed=_path["default"].parse(this.filePath);this._container.defaultDir=_path["default"].join(filePathParsed.dir,defaults.rootDir);}else{this._container.defaultDir=defaults.rootDir;}if(defaults.bind&&(0,_typeof2["default"])(defaults.bind)==='object'){for(_i=0,_Object$entries=Object.entries(defaults.bind);_i<_Object$entries.length;_i++){_Object$entries$_i=(0,_slicedToArray2["default"])(_Object$entries[_i],2),name=_Object$entries$_i[0],value=_Object$entries$_i[1];this._container.addBind(name,new _Argument["default"](this._container).parse(value));}}autowire=new _Autowire["default"](this._container);if(defaults.exclude&&Array.isArray(defaults.exclude)){defaults.exclude.forEach(function(exclude){autowire.addExclude(exclude);});}_context3.next=9;return autowire.process();case 9:case"end":return _context3.stop();}},_callee3,this);}));function _parseDefaults(){return _parseDefaults2.apply(this,arguments);}return _parseDefaults;}()},{key:"_parseProperties",value:function _parseProperties(definition){var properties=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};for(var propertyKey in properties){definition.addProperty(propertyKey,new _Argument["default"](this.container).parse(properties[propertyKey]));}}},{key:"_parseImports",value:(function(){var _parseImports2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee4(){var imports,_iterator2,_step2,file,workingPath,importPath,_args4=arguments;return _regenerator["default"].wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:imports=_args4.length>0&&_args4[0]!==undefined?_args4[0]:[];_iterator2=_createForOfIteratorHelper(imports);_context4.prev=2;_iterator2.s();case 4:if((_step2=_iterator2.n()).done){_context4.next=14;break;}file=_step2.value;workingPath=this.filePath;importPath=_path["default"].join(_path["default"].dirname(this.filePath),file.resource);this._container.loggerHelper.debug("Importing file: ".concat(importPath));_context4.next=11;return this.load(importPath);case 11:this.filePath=workingPath;case 12:_context4.next=4;break;case 14:_context4.next=19;break;case 16:_context4.prev=16;_context4.t0=_context4["catch"](2);_iterator2.e(_context4.t0);case 19:_context4.prev=19;_iterator2.f();return _context4.finish(19);case 22:case"end":return _context4.stop();}},_callee4,this,[[2,16,19,22]]);}));function _parseImports(){return _parseImports2.apply(this,arguments);}return _parseImports;}())},{key:"_parseParameters",value:(function(){var _parseParameters2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee5(){var parameters,key,_args5=arguments;return _regenerator["default"].wrap(function _callee5$(_context5){while(1)switch(_context5.prev=_context5.next){case 0:parameters=_args5.length>0&&_args5[0]!==undefined?_args5[0]:{};for(key in parameters){this._container.setParameter(key,parameters[key]);}case 2:case"end":return _context5.stop();}},_callee5,this);}));function _parseParameters(){return _parseParameters2.apply(this,arguments);}return _parseParameters;}())},{key:"_parseArguments",value:function _parseArguments(definition){var args=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];var argument=definition["abstract"]?'appendArgs':'args';definition[argument]=this._getParsedArguments(args);}},{key:"_parseOverrideArguments",value:function _parseOverrideArguments(definition){var args=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];definition.overrideArgs=this._getParsedArguments(args);}},{key:"_requireClassNameFromPath",value:function _requireClassNameFromPath(classObject,mainClassName){var fromDirectory=this._getFromDirectoryByClassObject(classObject);var exportedModule=this._getExportedModule(fromDirectory,classObject);var mainClass=exportedModule[mainClassName];var defaultClass=exportedModule["default"];var fileNameClass=exportedModule[_path["default"].basename(classObject)];return mainClass||defaultClass||fileNameClass||exportedModule;}},{key:"_getExportedModule",value:function _getExportedModule(fromDirectory,classObject){try{return require(_path["default"].join(fromDirectory,classObject));}catch(error){if(error.code==='MODULE_NOT_FOUND'&&(0,_validateNpmPackageName["default"])(classObject)){return require(classObject);}throw error;}}},{key:"_getFromDirectoryByClassObject",value:function _getFromDirectoryByClassObject(classObject){var fromDirectory=!_path["default"].isAbsolute(classObject)?_path["default"].dirname(this.filePath):'/';return this.container.defaultDir||fromDirectory;}}],[{key:"_parseTagAttributes",value:function _parseTagAttributes(attributes){var map=new Map();if(attributes){for(var _i2=0,_Object$keys=Object.keys(attributes);_i2<_Object$keys.length;_i2++){var key=_Object$keys[_i2];map.set(key,attributes[key]);}}return map;}}]);}();var _default=exports["default"]=FileLoader;