@venizia/ignis-docs 0.2.0 → 0.2.1-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -14
- package/content/best-practices/api-usage-examples.md +39 -19
- package/content/best-practices/architectural-patterns.md +22 -11
- package/content/best-practices/architecture-decisions.md +29 -16
- package/content/best-practices/code-style-standards/advanced-patterns.md +43 -31
- package/content/best-practices/code-style-standards/constants-configuration.md +19 -4
- package/content/best-practices/code-style-standards/control-flow.md +33 -1
- package/content/best-practices/code-style-standards/documentation.md +28 -8
- package/content/best-practices/code-style-standards/function-patterns.md +15 -4
- package/content/best-practices/code-style-standards/index.md +7 -2
- package/content/best-practices/code-style-standards/naming-conventions.md +26 -2
- package/content/best-practices/code-style-standards/route-definitions.md +9 -5
- package/content/best-practices/code-style-standards/tooling.md +14 -1
- package/content/best-practices/code-style-standards/type-safety.md +39 -6
- package/content/best-practices/common-pitfalls.md +59 -35
- package/content/best-practices/contribution-workflow.md +6 -2
- package/content/best-practices/data-modeling.md +78 -62
- package/content/best-practices/deployment-strategies.md +56 -19
- package/content/best-practices/error-handling.md +182 -93
- package/content/best-practices/index.md +6 -0
- package/content/best-practices/performance-optimization.md +26 -13
- package/content/best-practices/security-guidelines.md +35 -9
- package/content/best-practices/testing-strategies.md +7 -2
- package/content/best-practices/troubleshooting-tips.md +27 -17
- package/content/extensions/components/api-reference.md +107 -322
- package/content/extensions/components/authentication/api.md +454 -603
- package/content/extensions/components/authentication/errors.md +121 -498
- package/content/extensions/components/authentication/index.md +88 -801
- package/content/extensions/components/authentication/usage.md +207 -956
- package/content/extensions/components/authorization/api.md +736 -656
- package/content/extensions/components/authorization/errors.md +168 -206
- package/content/extensions/components/authorization/index.md +82 -797
- package/content/extensions/components/authorization/usage.md +194 -527
- package/content/extensions/components/health-check.md +71 -243
- package/content/extensions/components/mail/api.md +504 -287
- package/content/extensions/components/mail/errors.md +73 -61
- package/content/extensions/components/mail/index.md +96 -467
- package/content/extensions/components/mail/usage.md +130 -172
- package/content/extensions/components/request-tracker.md +66 -173
- package/content/extensions/components/socket-io/api.md +195 -13
- package/content/extensions/components/socket-io/errors.md +3 -3
- package/content/extensions/components/socket-io/index.md +50 -337
- package/content/extensions/components/socket-io/usage.md +143 -26
- package/content/extensions/components/static-asset/api.md +410 -142
- package/content/extensions/components/static-asset/errors.md +110 -53
- package/content/extensions/components/static-asset/index.md +79 -608
- package/content/extensions/components/static-asset/usage.md +180 -300
- package/content/extensions/components/websocket/api.md +275 -399
- package/content/extensions/components/websocket/errors.md +47 -56
- package/content/extensions/components/websocket/index.md +74 -407
- package/content/extensions/components/websocket/usage.md +110 -341
- package/content/extensions/helpers/cron/index.md +51 -160
- package/content/extensions/helpers/crypto/index.md +62 -483
- package/content/extensions/helpers/crypto/reference.md +456 -0
- package/content/extensions/helpers/env/index.md +60 -178
- package/content/extensions/helpers/error/index.md +221 -207
- package/content/extensions/helpers/inversion/index.md +65 -556
- package/content/extensions/helpers/inversion/reference.md +522 -0
- package/content/extensions/helpers/kafka/admin.md +20 -1
- package/content/extensions/helpers/kafka/compile-binary.md +41 -35
- package/content/extensions/helpers/kafka/consumer.md +54 -20
- package/content/extensions/helpers/kafka/examples.md +21 -16
- package/content/extensions/helpers/kafka/index.md +80 -610
- package/content/extensions/helpers/kafka/producer.md +134 -5
- package/content/extensions/helpers/kafka/schema-registry.md +45 -70
- package/content/extensions/helpers/logger/hf-logger.md +193 -0
- package/content/extensions/helpers/logger/index.md +64 -563
- package/content/extensions/helpers/logger/pino.md +85 -0
- package/content/extensions/helpers/logger/reference.md +746 -0
- package/content/extensions/helpers/network/api.md +241 -195
- package/content/extensions/helpers/network/index.md +72 -530
- package/content/extensions/helpers/queue/index.md +72 -900
- package/content/extensions/helpers/queue/reference.md +467 -0
- package/content/extensions/helpers/redis/index.md +73 -645
- package/content/extensions/helpers/redis/reference.md +727 -0
- package/content/extensions/helpers/secrets/index.md +66 -0
- package/content/extensions/helpers/socket-io/api.md +305 -203
- package/content/extensions/helpers/socket-io/index.md +66 -432
- package/content/extensions/helpers/storage/api.md +564 -462
- package/content/extensions/helpers/storage/index.md +77 -573
- package/content/extensions/helpers/types/index.md +66 -499
- package/content/extensions/helpers/types/reference.md +650 -0
- package/content/extensions/helpers/uid/index.md +58 -227
- package/content/extensions/helpers/websocket/api.md +329 -216
- package/content/extensions/helpers/websocket/index.md +65 -503
- package/content/extensions/helpers/worker-thread/index.md +58 -396
- package/content/extensions/helpers/worker-thread/reference.md +428 -0
- package/content/guides/core-concepts/persistent/models.md +1 -1
- package/content/guides/core-concepts/persistent/search-typesense.md +3 -3
- package/content/guides/core-concepts/persistent/transactions.md +1 -1
- package/content/guides/core-concepts/secrets-vault.md +177 -0
- package/content/guides/core-concepts/services.md +1 -1
- package/content/guides/migrations/redis-helpers-migration.md +1 -1
- package/content/guides/migrations/unified-connectors-migration.md +2 -2
- package/content/guides/tutorials/ecommerce-api.md +3 -8
- package/content/references/base/application.md +1 -1
- package/content/references/base/connectors.md +79 -136
- package/content/references/base/datasources-reference.md +599 -0
- package/content/references/base/datasources.md +84 -444
- package/content/references/base/dependency-injection.md +17 -39
- package/content/references/base/filter-system/application-usage.md +69 -121
- package/content/references/base/filter-system/array-operators.md +12 -0
- package/content/references/base/filter-system/comparison-operators.md +12 -0
- package/content/references/base/filter-system/default-filter.md +136 -348
- package/content/references/base/filter-system/fields-order-pagination.md +38 -16
- package/content/references/base/filter-system/index.md +106 -257
- package/content/references/base/filter-system/json-filtering.md +12 -2
- package/content/references/base/filter-system/list-operators.md +16 -2
- package/content/references/base/filter-system/logical-operators.md +13 -0
- package/content/references/base/filter-system/null-operators.md +13 -0
- package/content/references/base/filter-system/pattern-matching.md +12 -0
- package/content/references/base/filter-system/quick-reference.md +11 -2
- package/content/references/base/filter-system/range-operators.md +12 -0
- package/content/references/base/filter-system/tips.md +70 -133
- package/content/references/base/filter-system/use-cases.md +156 -233
- package/content/references/base/middlewares.md +35 -21
- package/content/references/base/models-reference.md +886 -0
- package/content/references/base/models.md +80 -1452
- package/content/references/base/repositories/advanced.md +156 -192
- package/content/references/base/repositories/index.md +77 -650
- package/content/references/base/repositories/mixins.md +22 -18
- package/content/references/base/repositories/relations.md +123 -171
- package/content/references/base/repositories/soft-deletable.md +58 -56
- package/content/references/base/secrets.md +263 -0
- package/content/references/base/services.md +2 -2
- package/content/references/configuration/environment-variables.md +48 -4
- package/content/references/configuration/index.md +49 -31
- package/content/references/quick-reference.md +3 -16
- package/content/references/utilities/crypto.md +35 -76
- package/content/references/utilities/date.md +33 -73
- package/content/references/utilities/index.md +1 -1
- package/content/references/utilities/jsx-reference.md +298 -0
- package/content/references/utilities/jsx.md +82 -525
- package/content/references/utilities/module.md +29 -62
- package/content/references/utilities/parse.md +34 -64
- package/content/references/utilities/performance.md +33 -58
- package/content/references/utilities/promise.md +28 -62
- package/content/references/utilities/request.md +57 -218
- package/content/references/utilities/schema.md +43 -137
- package/content/references/utilities/statuses-reference.md +361 -0
- package/content/references/utilities/statuses.md +63 -667
- package/package.json +8 -8
|
@@ -26,7 +26,7 @@ Before reading this document, you should understand:
|
|
|
26
26
|
|
|
27
27
|
| Middleware | Type | Purpose |
|
|
28
28
|
|-----------|------|---------|
|
|
29
|
-
| `
|
|
29
|
+
| `AppErrorMiddleware` | `IProvider<ErrorHandler>` | Global error handler (Zod, DB constraints, generic) |
|
|
30
30
|
| `notFoundHandler` | `NotFoundHandler` | JSON 404 response for unknown routes |
|
|
31
31
|
| `RequestSpyMiddleware` | `IProvider<MiddlewareHandler>` | Request/response logging with timing |
|
|
32
32
|
| `emojiFavicon` | `MiddlewareHandler` | Serves an emoji as SVG favicon |
|
|
@@ -40,7 +40,7 @@ protected async registerDefaultMiddlewares() {
|
|
|
40
40
|
const server = this.getServer();
|
|
41
41
|
|
|
42
42
|
// 1. Global error handler
|
|
43
|
-
server.onError(
|
|
43
|
+
server.onError(new AppErrorMiddleware({ logger, rootKey }).value());
|
|
44
44
|
|
|
45
45
|
// 2. Async context storage (if enabled)
|
|
46
46
|
if (this.configs.asyncContext?.enable) {
|
|
@@ -60,24 +60,24 @@ protected async registerDefaultMiddlewares() {
|
|
|
60
60
|
|
|
61
61
|
After `registerDefaultMiddlewares()`, the application calls user-defined `staticConfigure()`, `preConfigure()`, and so on. The user's `setupMiddlewares()` hook runs after `initialize()` but before the server starts.
|
|
62
62
|
|
|
63
|
-
##
|
|
63
|
+
## AppErrorMiddleware
|
|
64
64
|
|
|
65
|
-
Global error handler registered via `server.onError()`. Handles ZodError validation errors, PostgreSQL constraint violations, and generic errors.
|
|
65
|
+
Global error handler registered via `server.onError()`. Handles ZodError validation errors, PostgreSQL constraint violations, and generic errors. Like `RequestSpyMiddleware`, it is an `IProvider` - build it, then call `value()` for the handler.
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
Registered automatically by `BaseApplication`.
|
|
68
68
|
|
|
69
69
|
### Signature
|
|
70
70
|
|
|
71
71
|
```typescript
|
|
72
|
-
|
|
73
|
-
logger
|
|
74
|
-
|
|
75
|
-
}
|
|
72
|
+
class AppErrorMiddleware extends BaseHelper implements IProvider<ErrorHandler> {
|
|
73
|
+
constructor(opts?: { logger?: ILogger; rootKey?: string });
|
|
74
|
+
value(): ErrorHandler;
|
|
75
|
+
}
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
| Parameter | Type | Description |
|
|
79
79
|
|-----------|------|-------------|
|
|
80
|
-
| `logger` | `
|
|
80
|
+
| `logger` | `ILogger \| undefined` | Overrides the middleware's own scoped logger - `BaseApplication` passes its own so error lines stay in its scope |
|
|
81
81
|
| `rootKey` | `string \| undefined` | Optional root key to wrap the error response object |
|
|
82
82
|
|
|
83
83
|
### Error Handling Logic
|
|
@@ -86,13 +86,17 @@ function appErrorHandler(opts: {
|
|
|
86
86
|
|
|
87
87
|
When `error.name === 'ZodError'`, returns HTTP `422 Unprocessable Entity`.
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
`message` and `normalized.code` come from the first failing issue - `message` is that issue's message, `normalized.code` is its `params.code` if the schema set one, otherwise its raw Zod code. The full per-field list stays under `details.cause`. `normalized.args` is always `{}` - a Zod issue carries no interpolation values.
|
|
90
90
|
|
|
91
91
|
```json
|
|
92
92
|
{
|
|
93
93
|
"message": "Invalid email address",
|
|
94
|
-
"messageCode": "user.email.invalid",
|
|
95
94
|
"statusCode": 422,
|
|
95
|
+
"normalized": {
|
|
96
|
+
"text": "Invalid email address",
|
|
97
|
+
"code": "user.email.invalid",
|
|
98
|
+
"args": {}
|
|
99
|
+
},
|
|
96
100
|
"requestId": "abc-123",
|
|
97
101
|
"details": {
|
|
98
102
|
"url": "http://localhost:3000/users",
|
|
@@ -111,18 +115,18 @@ Top-level `message`/`messageCode` come from the first failing issue - its `param
|
|
|
111
115
|
}
|
|
112
116
|
```
|
|
113
117
|
|
|
114
|
-
To emit a stable, domain-specific `
|
|
118
|
+
To emit a stable, domain-specific `normalized.code`, attach `params.code` to a custom check:
|
|
115
119
|
|
|
116
120
|
```typescript
|
|
117
121
|
z.string().refine(isEmail, {
|
|
118
122
|
message: 'Invalid email address',
|
|
119
123
|
params: { code: 'user.email.invalid' }
|
|
120
124
|
});
|
|
121
|
-
// produces "
|
|
125
|
+
// produces "normalized": { "code": "user.email.invalid", ... }
|
|
122
126
|
```
|
|
123
127
|
|
|
124
128
|
> [!NOTE]
|
|
125
|
-
> When `error.message` cannot be parsed as the expected Zod issue array (a malformed or unrecognized `ZodError`), no issue-derived
|
|
129
|
+
> When `error.message` cannot be parsed as the expected Zod issue array (a malformed or unrecognized `ZodError`), no issue-derived code exists - `normalized.code` still resolves to `MessageCode.DEFAULT` (`"core.system_error"`) via `MessageCode.resolve(undefined)`. No error response from this middleware is ever missing `normalized.code`.
|
|
126
130
|
|
|
127
131
|
#### 2. PostgreSQL Constraint Violations
|
|
128
132
|
|
|
@@ -135,7 +139,7 @@ Database errors in SQLSTATE class `22` (data exception), `23` (integrity constra
|
|
|
135
139
|
| `44` View check | `44000` WITH CHECK OPTION violation |
|
|
136
140
|
|
|
137
141
|
:::tip Transient conflicts return 409, not 400/500
|
|
138
|
-
Class `40` (`40001` serialization failure, `40P01` deadlock) is transient/retryable and returns **409 Conflict** with `
|
|
142
|
+
Class `40` (`40001` serialization failure, `40P01` deadlock) is transient/retryable and returns **409 Conflict** with `normalized.code: "database.conflict"` and a safe "please retry" message - the client can safely retry the same request. Programming/infra classes (`42` syntax, `53` resources, `0A`, `25`, `28`) remain 500.
|
|
139
143
|
:::
|
|
140
144
|
|
|
141
145
|
:::warning Production sanitizes database internals
|
|
@@ -151,8 +155,12 @@ All other errors use the `statusCode` property from the error if present, otherw
|
|
|
151
155
|
```json
|
|
152
156
|
{
|
|
153
157
|
"message": "Error message",
|
|
154
|
-
"messageCode": "core.system_error",
|
|
155
158
|
"statusCode": 500,
|
|
159
|
+
"normalized": {
|
|
160
|
+
"text": "Error message",
|
|
161
|
+
"code": "core.system_error",
|
|
162
|
+
"args": {}
|
|
163
|
+
},
|
|
156
164
|
"requestId": "abc-123",
|
|
157
165
|
"details": {
|
|
158
166
|
"url": "http://localhost:3000/users",
|
|
@@ -163,14 +171,20 @@ All other errors use the `statusCode` property from the error if present, otherw
|
|
|
163
171
|
}
|
|
164
172
|
```
|
|
165
173
|
|
|
174
|
+
An intentional `getError(...)` throw also carries `extra` when the throw site attached context of its own; every other branch never does. There is no top-level `messageCode` - the code always lives at `normalized.code`.
|
|
175
|
+
|
|
166
176
|
When `rootKey` is provided (e.g., `rootKey: 'error'`), the response is wrapped:
|
|
167
177
|
|
|
168
178
|
```json
|
|
169
179
|
{
|
|
170
180
|
"error": {
|
|
171
181
|
"message": "Error message",
|
|
172
|
-
"messageCode": "core.system_error",
|
|
173
182
|
"statusCode": 500,
|
|
183
|
+
"normalized": {
|
|
184
|
+
"text": "Error message",
|
|
185
|
+
"code": "core.system_error",
|
|
186
|
+
"args": {}
|
|
187
|
+
},
|
|
174
188
|
"requestId": "abc-123",
|
|
175
189
|
"details": { ... }
|
|
176
190
|
}
|
|
@@ -215,13 +229,13 @@ Returns a JSON 404 response when no route matches. Registered via `server.notFou
|
|
|
215
229
|
|
|
216
230
|
```typescript
|
|
217
231
|
function notFoundHandler(opts: {
|
|
218
|
-
logger?:
|
|
232
|
+
logger?: ILogger;
|
|
219
233
|
}): NotFoundHandler
|
|
220
234
|
```
|
|
221
235
|
|
|
222
236
|
| Parameter | Type | Description |
|
|
223
237
|
|-----------|------|-------------|
|
|
224
|
-
| `logger` | `
|
|
238
|
+
| `logger` | `ILogger \| undefined` | Logger instance (defaults to `console`) |
|
|
225
239
|
|
|
226
240
|
### Response Format
|
|
227
241
|
|
|
@@ -363,7 +377,7 @@ Several middleware behaviors are configured through `IApplicationConfigs`:
|
|
|
363
377
|
```typescript
|
|
364
378
|
interface IApplicationConfigs {
|
|
365
379
|
favicon?: string; // Emoji for emojiFavicon (default: '🔥')
|
|
366
|
-
error?: { rootKey: string }; // Root key wrapper for
|
|
380
|
+
error?: { rootKey: string }; // Root key wrapper for AppErrorMiddleware
|
|
367
381
|
asyncContext?: { enable: boolean }; // Enable Hono contextStorage() middleware
|
|
368
382
|
// ...
|
|
369
383
|
}
|