40 lines
860 B
TypeScript
40 lines
860 B
TypeScript
export class StepId {
|
|
private readonly _value: number;
|
|
|
|
private constructor(value: number) {
|
|
this._value = value;
|
|
}
|
|
|
|
static create(value: number): StepId {
|
|
if (!Number.isInteger(value)) {
|
|
throw new Error('StepId must be an integer');
|
|
}
|
|
if (value < 1 || value > 17) {
|
|
throw new Error('StepId must be between 1 and 17');
|
|
}
|
|
return new StepId(value);
|
|
}
|
|
|
|
get value(): number {
|
|
return this._value;
|
|
}
|
|
|
|
equals(other: StepId): boolean {
|
|
return this._value === other._value;
|
|
}
|
|
|
|
isModalStep(): boolean {
|
|
return this._value === 6 || this._value === 9 || this._value === 12;
|
|
}
|
|
|
|
isFinalStep(): boolean {
|
|
return this._value === 17;
|
|
}
|
|
|
|
next(): StepId {
|
|
if (this.isFinalStep()) {
|
|
throw new Error('Cannot advance beyond final step');
|
|
}
|
|
return StepId.create(this._value + 1);
|
|
}
|
|
} |