private Task generateNumericValue(NumericValueTemplate numericValueTemplate) { var tsFile = new TypeScriptFile($"{numericValueTemplate.DataType.Name}.ts", createStream); var className = numericValueTemplate.DataType.Name; tsFile.AddLine("import { NumericValue } from '@jasonbenfield/sharedwebapp/NumericValue';"); tsFile.AddLine("import { NumericValues } from '@jasonbenfield/sharedwebapp/NumericValues';"); tsFile.AddLine(); tsFile.AddLine($"export class {className}s extends NumericValues<{className}> {{"); tsFile.Indent(); tsFile.AddLine("constructor("); tsFile.Indent(); var valueNames = numericValueTemplate.Values.Select(v => whitespaceRegex.Replace(v.DisplayText, "")); var lastValueName = valueNames.Last(); foreach (var valueName in valueNames) { tsFile.AddLine($"public readonly {valueName}: {className}"); if (valueName != lastValueName) { tsFile.Append(","); } } tsFile.Outdent(); tsFile.AddLine(") {"); tsFile.Indent(); var joinedValueNames = string.Join(",", valueNames); tsFile.AddLine($"super([{joinedValueNames}]);"); tsFile.Outdent(); tsFile.AddLine("}"); tsFile.Outdent(); tsFile.AddLine("}"); tsFile.AddLine(); tsFile.AddLine($"export class {className} extends NumericValue implements I{className} {{"); tsFile.Indent(); tsFile.AddLine($"public static readonly values = new {className}s("); tsFile.Indent(); var lastValue = numericValueTemplate.Values.Last(); foreach (var numericValue in numericValueTemplate.Values) { tsFile.AddLine($"new {className}({numericValue.Value}, '{numericValue.DisplayText.Replace("'", "\'")}')"); if (numericValue != lastValue) { tsFile.Append(","); } } tsFile.Outdent(); tsFile.AddLine(");"); tsFile.AddLine(); tsFile.AddLine("private constructor(Value: number, DisplayText: string) {"); tsFile.Indent(); tsFile.AddLine("super(Value, DisplayText);"); tsFile.Outdent(); tsFile.AddLine("}"); tsFile.Outdent(); tsFile.AddLine("}"); return(tsFile.Output()); }
public NumericValueClass(string ns, Func <string, Stream> createStream, NumericValueTemplate template) { this.ns = ns; this.createStream = createStream; this.template = template; }