36 lines
716 B
TypeScript
36 lines
716 B
TypeScript
import { z } from "zod";
|
|
|
|
const TrackNameSchema = z
|
|
.string()
|
|
.trim()
|
|
.min(1, "Track name cannot be empty")
|
|
.max(100, "Track name must be 100 characters or less");
|
|
|
|
export class TrackName {
|
|
private readonly _value: string;
|
|
|
|
private constructor(value: string) {
|
|
this._value = value;
|
|
}
|
|
|
|
static create(value: string): TrackName {
|
|
const validated = TrackNameSchema.parse(value);
|
|
return new TrackName(validated);
|
|
}
|
|
|
|
static fromString(value: string): TrackName {
|
|
return new TrackName(value);
|
|
}
|
|
|
|
get value(): string {
|
|
return this._value;
|
|
}
|
|
|
|
equals(other: TrackName): boolean {
|
|
return this._value === other._value;
|
|
}
|
|
|
|
toString(): string {
|
|
return this._value;
|
|
}
|
|
} |