43 lines
1003 B
JavaScript
43 lines
1003 B
JavaScript
"use strict";
|
|
|
|
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; |