| import { registerErrorDomain, type ErrorDomain } from '#/_base/errors/codes'; |
| import { Error2, type Error2Options } from '#/_base/errors/errors'; |
|
|
| export const StateErrors = { |
| codes: { |
| STATE_DUPLICATE_FOLD: 'state.duplicate_fold', |
| STATE_DURABILITY_MISMATCH: 'state.durability_mismatch', |
| STATE_CYCLE: 'state.cycle', |
| }, |
| info: { |
| 'state.duplicate_fold': { |
| title: 'Duplicate state fold', |
| retryable: false, |
| public: true, |
| action: 'A state registered two folds for the same event; merge them.', |
| }, |
| 'state.durability_mismatch': { |
| title: 'Transient state folds durable event', |
| retryable: false, |
| public: true, |
| action: 'A non-durable state cannot fold a durable event; mark the state durable.', |
| }, |
| 'state.cycle': { |
| title: 'Event dispatch cycle', |
| retryable: false, |
| public: true, |
| action: 'A subscriber re-dispatches endlessly; break the event cycle.', |
| }, |
| }, |
| } as const satisfies ErrorDomain; |
|
|
| registerErrorDomain(StateErrors); |
|
|
| export type StateErrorCode = (typeof StateErrors.codes)[keyof typeof StateErrors.codes]; |
|
|
| export class StateError extends Error2 { |
| constructor(code: StateErrorCode, message: string, options?: Error2Options) { |
| super(code, message, options); |
| this.name = 'StateError'; |
| } |
| } |
|
|