ff-admin-server/src/helpers/convertHelper.ts

106 lines
2.8 KiB
TypeScript
Raw Normal View History

2025-04-20 15:32:57 +02:00
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;
}
}
}
2025-04-25 12:13:26 +02:00
export abstract class EmailTypeConverter extends TypeConverter<string> {
fromString(value: string): string {
return value;
}
toString(value: string): string {
return value;
}
validate(value: string): boolean {
var tester =
/^[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;
if (!value) return false;
var emailParts = value.split("@");
if (emailParts.length !== 2) return false;
var account = emailParts[0];
var address = emailParts[1];
if (account.length > 64) return false;
else if (address.length > 255) return false;
var domainParts = address.split(".");
if (
domainParts.some(function (part) {
return part.length > 63;
})
)
return false;
return tester.test(value);
}
}
2025-04-20 15:32:57 +02:00
// 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 {}
2025-04-25 12:13:26 +02:00
export class EmailConverter extends EmailTypeConverter {}