All files generated_expression.js

100% Statements 14/14
100% Branches 4/4
100% Functions 7/7
100% Lines 14/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 451x       286x 286x       40x   73x                   12x 12x 15x               2x         15x 15x 15x   15x     1x  
const util = require('util')
 
class GeneratedExpression {
  constructor(expressionTemplate, parameterTypes) {
    this._expressionTemplate = expressionTemplate
    this._parameterTypes = parameterTypes
  }
 
  get source() {
    return util.format(
      this._expressionTemplate,
      ...this._parameterTypes.map(t => t.name)
    )
  }
 
  /**
   * Returns an array of parameter names to use in generated function/method signatures
   *
   * @returns {Array.<String>}
   */
  get parameterNames() {
    const usageByTypeName = {}
    return this._parameterTypes.map(t =>
      getParameterName(t.name, usageByTypeName)
    )
  }
 
  /**
   * @returns {Array.<ParameterType>}
   */
  get parameterTypes() {
    return this._parameterTypes
  }
}
 
function getParameterName(typeName, usageByTypeName) {
  let count = usageByTypeName[typeName]
  count = count ? count + 1 : 1
  usageByTypeName[typeName] = count
 
  return count === 1 ? typeName : `${typeName}${count}`
}
 
module.exports = GeneratedExpression