forest-express
Version:
Official package for all Forest Express Lianas
82 lines (76 loc) • 3.19 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var _ = require('lodash');
var AuthenticationService = require('../services/authentication');
var logger = require('../services/logger');
var pathService = require('../services/path');
var errorMessages = require('./error-messages');
/**
* @typedef {{
* errorMessages: import('./error-messages');
* }} Utils
* @typedef {{
* logger: import('../services/logger');
* pathService: import('../services/path');
* authenticationService: import('../services/authentication');
* }} Services
* @typedef {Utils & Services} Injections
*/
/**
* @template TInjections
* @template TInstance
* @param {TInjections} injections
* @param {function(new:TInstance, TInjections)} Dependency
* @returns { TInjections & {[name]: TInstance}}
*/
function addFromClass(injections, Dependency) {
return _objectSpread(_objectSpread({}, injections), {}, (0, _defineProperty2["default"])({}, _.lowerFirst(Dependency.getClassName()), new Dependency(injections)));
}
/**
* @template TInjections
* @template TInstance
* @param {TInjections} injections
* @param {string} name
* @param {TInstance} instance
* @returns { TInjections & {[name]: TInstance}}
*/
function addInstance(injections, name, instance) {
return _objectSpread(_objectSpread({}, injections), {}, (0, _defineProperty2["default"])({}, name, instance));
}
/**
* @function
* @template T
* @param {T} injections
* @returns {T & Utils}
*/
function buildUtils(injections) {
/** @type {*} */
var result = injections;
result = addInstance(result, 'errorMessages', errorMessages);
return result;
}
/**
* @template T
* @param {T & Utils} injections
* @returns {T & Utils & Services}
*/
function buildServices(injections) {
/** @type {*} */
var result = injections;
result = addInstance(result, 'logger', logger);
result = addInstance(result, 'pathService', pathService);
result = addFromClass(result, AuthenticationService);
return result;
}
/**
* @returns { Injections }
*/
function init() {
return [buildUtils, buildServices].reduce(function (injections, builder) {
return builder(injections);
}, {});
}
module.exports = init;