70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
|
import ms from "ms";
|
||
|
|
||
|
export abstract class TypeConverter<T> {
|
||
|
abstract fromString(value: string): T;
|
||
|
abstract toString(value: T): string;
|
||
|
abstract validate(value: string): boolean;
|
||
|
}
|
||
|
|
||
|
export abstract class StringTypeConverter extends TypeConverter<string> {
|
||
|
fromString(value: string): string {
|
||
|
return value;
|
||
|
}
|
||
|
toString(value: string): string {
|
||
|
return value;
|
||
|
}
|
||
|
validate(value: string): boolean {
|
||
|
return typeof value === "string";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export abstract class NumberTypeConverter extends TypeConverter<number> {
|
||
|
fromString(value: string): number {
|
||
|
return Number(value);
|
||
|
}
|
||
|
toString(value: number): string {
|
||
|
return String(value);
|
||
|
}
|
||
|
validate(value: string): boolean {
|
||
|
const num = Number(value);
|
||
|
return !isNaN(num);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export abstract class BooleanTypeConverter extends TypeConverter<boolean> {
|
||
|
fromString(value: string): boolean {
|
||
|
return value === "true";
|
||
|
}
|
||
|
toString(value: boolean): string {
|
||
|
return value ? "true" : "false";
|
||
|
}
|
||
|
validate(value: string): boolean {
|
||
|
return value === "true" || value === "false";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export abstract class MsTypeConverter extends TypeConverter<ms.StringValue> {
|
||
|
fromString(value: string): ms.StringValue {
|
||
|
return value as ms.StringValue;
|
||
|
}
|
||
|
toString(value: ms.StringValue): string {
|
||
|
return String(value);
|
||
|
}
|
||
|
validate(value: string): boolean {
|
||
|
try {
|
||
|
const result = ms(value as ms.StringValue);
|
||
|
return result !== undefined;
|
||
|
} catch (e) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Konkrete Implementierungen der Converter
|
||
|
export class StringConverter extends StringTypeConverter {}
|
||
|
export class LongStringConverter extends StringTypeConverter {}
|
||
|
export class UrlConverter extends StringTypeConverter {}
|
||
|
export class NumberConverter extends NumberTypeConverter {}
|
||
|
export class BooleanConverter extends BooleanTypeConverter {}
|
||
|
export class MsConverter extends MsTypeConverter {}
|