This commit allows for parameters that does not require any arguments to be provided in function calls. It changes collection syntax where parameters are list of objects instead of primitive strings. A parameter has now 'name' and 'optional' properties. 'name' is required and used in same way as older strings as parameter definitions. 'Optional' property is optional, 'false' is the default behavior if undefined. It also adds additional validation to restrict parameter names to alphanumeric strings to have a clear syntax in expressions.
27 lines
963 B
TypeScript
27 lines
963 B
TypeScript
import { IFunctionParameterCollection } from './IFunctionParameterCollection';
|
|
import { IFunctionParameter } from './IFunctionParameter';
|
|
|
|
export class FunctionParameterCollection implements IFunctionParameterCollection {
|
|
private parameters = new Array<IFunctionParameter>();
|
|
|
|
public get all(): readonly IFunctionParameter[] {
|
|
return this.parameters;
|
|
}
|
|
public addParameter(parameter: IFunctionParameter) {
|
|
this.ensureValidParameter(parameter);
|
|
this.parameters.push(parameter);
|
|
}
|
|
|
|
private includesName(name: string) {
|
|
return this.parameters.find((existingParameter) => existingParameter.name === name);
|
|
}
|
|
private ensureValidParameter(parameter: IFunctionParameter) {
|
|
if (!parameter) {
|
|
throw new Error('undefined parameter');
|
|
}
|
|
if (this.includesName(parameter.name)) {
|
|
throw new Error(`duplicate parameter name: "${parameter.name}"`);
|
|
}
|
|
}
|
|
}
|