You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: es/exceptions/exception-layout-strategy.mdx
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -96,7 +96,7 @@ Usa el decorator cuando la propia clase de exception debería llevar un layout p
96
96
97
97
## Cuando mapear en configuración
98
98
99
-
Mapea en *spraxium.config.ts* cuando la política de layout esta orientada por decisiones de producto como branding, tono de lenguaje o estrategia específica por entorno. Este es generalmente el mejor default para gobernanza a nivel de aplicación porque centraliza toda la lógica de presentación de error en un lugar, facilitando la gestión de cambios ya que puedes intercambiar la política de layout sin modificar ninguna clase de exception de dominio.
99
+
Mapea en *spraxium.config.ts* cuando la política de layout esta orientada por decisiones de producto como branding, tono de lenguaje o estrategia específica por entorno. Este es generalmente el mejor default para gobernanza a nivel de aplicación porque centraliza toda la lógica de presentación de error en un lugar, facilitando la gestión de cambios ya que puedes intercambiar la política de layout sin modificar ninguna clase de exception de dominio.
100
100
101
101
<Tablevariant="striped">
102
102
<TableHead>
@@ -122,7 +122,7 @@ Mapea en *spraxium.config.ts* cuando la política de layout esta orientada por d
122
122
123
123
## Cuando usar override por instancia
124
124
125
-
Usa el override por instancia solo para casos contextuales donde la misma clase de exception necesita renderizar de forma diferente dependiendo de condiciones de runtime. Ejemplos típicos incluyen comunicación temporal de incidentes, migraciones activas o experimentos de feature-flag donde la respuesta de error necesita cambiar sin modificar definiciones de clase o archivos de configuración. Como este nivel tiene la mayor prioridad en la cadena de resolución, tratalo como un camino de excepción intencional y documenta por que existe para evitar crear comportamiento implícito que es dificil de rastrear al depurar.
125
+
Usa el override por instancia solo para casos contextuales donde la misma clase de exception necesita renderizar de forma diferente dependiendo de condiciones de runtime. Ejemplos típicos incluyen comunicación temporal de incidentes, migraciones activas o experimentos de feature-flag donde la respuesta de error necesita cambiar sin modificar definiciones de clase o archivos de configuración. Como este nivel tiene la mayor prioridad en la cadena de resolución, tratalo como un camino de excepción intencional y documenta por que existe para evitar crear comportamiento implícito que es dificil de rastrear al depurar.
Copy file name to clipboardExpand all lines: es/exceptions/exceptions-best-practices.mdx
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -28,11 +28,11 @@ export class InsufficientBalanceException extends SpraxiumException {
28
28
}
29
29
```
30
30
31
-
La interfaz *props* tipada es importante porque le da a los layouts y al logging acceso a datos estructurados en vez de un string opaco. Cualquier clave en el objeto *props* puede ser interpolada en el *message* usando sintaxis de llaves dobles, y los layouts reciben el objeto *props* completo para que puedan construir embeds ricos, formatear números o mostrar orientación contextual al usuario.
31
+
La interfaz *props* tipada es importante porque le da a los layouts y al logging acceso a datos estructurados en vez de un string opaco. Cualquier clave en el objeto *props* puede ser interpolada en el *message* usando sintaxis de llaves dobles, y los layouts reciben el objeto *props* completo para que puedan construir embeds ricos, formatear números o mostrar orientación contextual al usuario.
32
32
33
33
### Lanzando la exception personalizada
34
34
35
-
Usa la exception personalizada dentro de services, guards o handlers exactamente como cualquier exception built-in. El pipeline resuelve el layout, registra si está configurado y envía la respuesta automáticamente sin ningun código extra en el punto de lanzamiento.
35
+
Usa la exception personalizada dentro de services, guards o handlers exactamente como cualquier exception built-in. El pipeline resuelve el layout, registra si está configurado y envía la respuesta automáticamente sin ningun código extra en el punto de lanzamiento.
@@ -45,7 +45,7 @@ if (user.balance < item.price) {
45
45
46
46
### Vinculando un layout con @WithLayout
47
47
48
-
Si la exception debe venir con una presentación visual por defecto, vincula un layout usando el decorator `@WithLayout` de *@spraxium/common*. El layout recibe la instancia de la exception con acceso completo a las *props* y el contexto de ejecución, y retorna un payload de respuesta de Discord con embeds, componentes y flags ephemeral.
48
+
Si la exception debe venir con una presentación visual por defecto, vincula un layout usando el decorator `@WithLayout` de *@spraxium/common*. El layout recibe la instancia de la exception con acceso completo a las *props* y el contexto de ejecución, y retorna un payload de respuesta de Discord con embeds, componentes y flags ephemeral.
@@ -73,7 +73,7 @@ export class InsufficientBalanceException extends SpraxiumException {
73
73
74
74
### Controlando respuesta y comportamiento de logging
75
75
76
-
Cada exception personalizada puede sobreescribir si el pipeline envía una respuesta en Discord y si registra el error en logs. La flag *shouldReply* por defecto es true, lo cual es correcto para fallas orientadas al usuario, y *shouldLog* por defecto es false porque la mayorÃa de las exceptions de dominio son comportamiento esperado en vez de incidentes. Sobreescribe esos valores por defecto cuando la exception represente una operación silenciosa o un error interno que debería aparecer en los logs operacionales.
76
+
Cada exception personalizada puede sobreescribir si el pipeline envía una respuesta en Discord y si registra el error en logs. La flag *shouldReply* por defecto es true, lo cual es correcto para fallas orientadas al usuario, y *shouldLog* por defecto es false porque la mayoría de las exceptions de dominio son comportamiento esperado en vez de incidentes. Sobreescribe esos valores por defecto cuando la exception represente una operación silenciosa o un error interno que debería aparecer en los logs operacionales.
@@ -130,7 +130,7 @@ Lanzar exceptions genéricas para cada escenario puede parecer más rápido al p
130
130
131
131
<Steps>
132
132
<Steptitle="Modelar clases por política de negocio">
133
-
Crea clases de exception alineadas con reglas reales de producto y escenarios orientados al usuario en lugar de layout de archivos o detalles temporales de implementación. Cada clase debería representar una categoría de falla significativa que el equipo pueda referenciar consistentemente en code reviews, dashboards de monitoreo e informes de incidentes.
133
+
Crea clases de exception alineadas con reglas reales de producto y escenarios orientados al usuario en lugar de layout de archivos o detalles temporales de implementación. Cada clase debería representar una categoría de falla significativa que el equipo pueda referenciar consistentemente en code reviews, dashboards de monitoreo e informes de incidentes.
134
134
</Step>
135
135
<Steptitle="Mapear layouts en el config central">
136
136
Manten el comportamiento orientado al usuario estable para cualquier command o listener que pueda emitir la misma familia de falla. Centralizar mapeos de layout en *spraxium.config.ts* asegura que la misma clase de exception siempre renderice de la misma forma, sin importar que modulo la lance.
Copy file name to clipboardExpand all lines: es/exceptions/exceptions-configuration.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -27,7 +27,7 @@ export default defineConfig({
27
27
28
28
## Donde encajan los layouts
29
29
30
-
Los layouts pertenecen a la política de presentación de errores, y esta página se enfoca en configuración central, comportamiento de fallback y gobernanza a traves de mapas de config en lugar de detalles de implementación de layout. Para la estrategia completa de layouts cubriendo que son, como crearlos, la precedencia entre decorators y mapeos, y cuando usar overrides por instancia, consulta [Estrategia de Layout](/guide/exception-layout-strategy).
30
+
Los layouts pertenecen a la política de presentación de errores, y esta página se enfoca en configuración central, comportamiento de fallback y gobernanza a traves de mapas de config en lugar de detalles de implementación de layout. Para la estrategia completa de layouts cubriendo que son, como crearlos, la precedencia entre decorators y mapeos, y cuando usar overrides por instancia, consulta [Estrategia de Layout](/guide/exception-layout-strategy).
Copy file name to clipboardExpand all lines: es/exceptions/exceptions-overview.mdx
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,7 @@ category: Exceptions
11
11
12
12
En Spraxium, las exceptions no sirven solo para interrumpir el flujo de control cuando algo sale mal. Son el mecanismo que transforma tanto fallas técnicas como de dominio en comportamiento predecible para el usuario y señales operacionales utiles que ayudan a tu equipo a entender que paso y por que. Sin una capa de exceptions estructurada, cada handler termina inventando su propio estilo de respuesta de error, lo que lleva a UX inconsistente, logs ruidosos y resolución de incidentes más lenta en toda la aplicación.
13
13
14
-
A medida que el bot crece, las fallas dejan de ser casos extremos y pasan a ser parte de la experiencia normal del producto. Los usuarios encontraran negaciones de permisos, lÃmites de cooldown, argumentos inválidos y recursos no disponibles de forma regular. Una capa dedicada de exceptions asegura que todos estos escenarios produzcan respuestas consistentes, significativas y fáciles de mantener conforme el bot evoluciona con el tiempo.
14
+
A medida que el bot crece, las fallas dejan de ser casos extremos y pasan a ser parte de la experiencia normal del producto. Los usuarios encontraran negaciones de permisos, límites de cooldown, argumentos inválidos y recursos no disponibles de forma regular. Una capa dedicada de exceptions asegura que todos estos escenarios produzcan respuestas consistentes, significativas y fáciles de mantener conforme el bot evoluciona con el tiempo.
15
15
16
16
## La clase base SpraxiumException
17
17
@@ -94,7 +94,7 @@ El framework incluye quince clases de exception que cubren los escenarios más c
Reporta un argumento inválido con los valores esperado versus recibido. Esta exception se lanza por el pipeline de parseo de argumentos cuando un argumento de comando falla en la coerción de tipo o validación de restricción. El objeto *props* acepta campos *expected* y *received* para interpolación de placeholders.
97
+
Reporta un argumento inválido con los valores esperado versus recibido. Esta exception se lanza por el pipeline de parseo de argumentos cuando un argumento de comando falla en la coerción de tipo o validación de restricción. El objeto *props* acepta campos *expected* y *received* para interpolación de placeholders.
Señala que un guard bloqueó la ejecución del comando con una razón opcional. Esta es la exception genérica de negación usada cuando un guard retorna `false` y ninguna exception más específica aplica. El objeto *props* acepta un campo *reason* describiendo por que se denegó el acceso.
117
+
Señala que un guard bloqueó la ejecución del comando con una razón opcional. Esta es la exception genérica de negación usada cuando un guard retorna `false` y ninguna exception más específica aplica. El objeto *props* acepta un campo *reason* describiendo por que se denegó el acceso.
118
118
</Dropdown>
119
119
120
120
<Dropdowntitle="GuildOnlyException: GUILD_ONLY">
@@ -150,13 +150,13 @@ El framework incluye quince clases de exception que cubren los escenarios más c
150
150
</Dropdown>
151
151
152
152
<Dropdowntitle="ValidationException: VALIDATION">
153
-
Reporta un valor de campo inválido con el nombre del campo y un mensaje de razón. Usa esta exception para fallas de validación de dominio que ocurren fuera del pipeline de parseo de argumentos. El objeto *props* acepta campos *field* y *reason* para reporte preciso de errores.
153
+
Reporta un valor de campo inválido con el nombre del campo y un mensaje de razón. Usa esta exception para fallas de validación de dominio que ocurren fuera del pipeline de parseo de argumentos. El objeto *props* acepta campos *field* y *reason* para reporte preciso de errores.
154
154
</Dropdown>
155
155
</DropdownGroup>
156
156
157
157
### Usando exceptions built-in
158
158
159
-
Las exceptions built-in se importan desde *@spraxium/core* y se lanzan con un objeto de props opcional que adjunta contexto al error. El pipeline resuelve el layout basado en el mapeo de configuración, renderiza la respuesta al usuario y registra la falla si la política de logging lo requiere, todo automáticamente y sin código adicional en el punto de lanzamiento.
159
+
Las exceptions built-in se importan desde *@spraxium/core* y se lanzan con un objeto de props opcional que adjunta contexto al error. El pipeline resuelve el layout basado en el mapeo de configuración, renderiza la respuesta al usuario y registra la falla si la política de logging lo requiere, todo automáticamente y sin código adicional en el punto de lanzamiento.
160
160
161
161
```typescript filename="shop.command.ts"
162
162
import {
@@ -177,7 +177,7 @@ throw new MaintenanceException({
177
177
178
178
## Error como contrato, no como accidente
179
179
180
-
Tratar una exception como contrato significa que cada falla relevante tiene intención explícita detras de ella, en lugar de ser una solución improvisada o una respuesta genérica. En vez de retornar mensajes de error vagos, defines clases de exception y layouts que representan escenarios concretos como permisos insuficientes, violaciones de cooldown, argumentos inválidos o recursos no disponibles. Este enfoque crea un vocabulario estable en todo el equipo donde los ingenieros pueden leer código e inmediatamente entender que falló, por que falló y como el usuario debería ser informado.
180
+
Tratar una exception como contrato significa que cada falla relevante tiene intención explícita detras de ella, en lugar de ser una solución improvisada o una respuesta genérica. En vez de retornar mensajes de error vagos, defines clases de exception y layouts que representan escenarios concretos como permisos insuficientes, violaciones de cooldown, argumentos inválidos o recursos no disponibles. Este enfoque crea un vocabulario estable en todo el equipo donde los ingenieros pueden leer código e inmediatamente entender que falló, por que falló y como el usuario debería ser informado.
181
181
182
182
El objetivo práctico es predictibilidad en todo tu bot. El mismo tipo de falla siempre debería producir la misma clase de exception, el mismo formato de respuesta y la misma señal operacional sin importar donde en el código se origina el error. Cuando ese contrato se mantiene de forma consistente, la depuración se vuelve más rápida, la experiencia del usuario permanece coherente y el equipo puede razonar sobre fallas sin leer cada handler individualmente para entender el comportamiento de error.
0 commit comments