dsl-toolkit/dsl-toolkit

View on GitHub
packages/demeter-di/src/container-methods/compose.js

Summary

Maintainability
A
2 hrs
Test Coverage
const { parseScript } = require('esprima')
const arrayDsl = require('array-dsl')

module.exports = (parameters, infoList, results, requireModuleInstance, proxy) => {
  const composes = parameters.arguments('compose', 'allEntries', [])

  composes.length &&
  (() => {
    composes.map(composeDetails => {

      const composed = {}
      const service = composeDetails[1]

      const parameterNames = composeDetails[2] ? arrayDsl(composeDetails[2]).arrify()
      : parseScript(service.toString()).body[0].expression.params.map(e => e.name)

      composed[composeDetails[0]] = () =>
        service(...parameterNames.map(dependecyName => proxy[dependecyName]))

      return composed}).
        forEach(composed => Object.assign(results, composed))})()

  return require('./lib/get-keys')(composes, 'service')}