UNPKG

forest-express

Version:

Official package for all Forest Express Lianas

82 lines (76 loc) 3.19 kB
"use strict"; 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;