@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.
Files changed (142) hide show
  1. package/README.md +14 -14
  2. package/content/best-practices/api-usage-examples.md +39 -19
  3. package/content/best-practices/architectural-patterns.md +22 -11
  4. package/content/best-practices/architecture-decisions.md +29 -16
  5. package/content/best-practices/code-style-standards/advanced-patterns.md +43 -31
  6. package/content/best-practices/code-style-standards/constants-configuration.md +19 -4
  7. package/content/best-practices/code-style-standards/control-flow.md +33 -1
  8. package/content/best-practices/code-style-standards/documentation.md +28 -8
  9. package/content/best-practices/code-style-standards/function-patterns.md +15 -4
  10. package/content/best-practices/code-style-standards/index.md +7 -2
  11. package/content/best-practices/code-style-standards/naming-conventions.md +26 -2
  12. package/content/best-practices/code-style-standards/route-definitions.md +9 -5
  13. package/content/best-practices/code-style-standards/tooling.md +14 -1
  14. package/content/best-practices/code-style-standards/type-safety.md +39 -6
  15. package/content/best-practices/common-pitfalls.md +59 -35
  16. package/content/best-practices/contribution-workflow.md +6 -2
  17. package/content/best-practices/data-modeling.md +78 -62
  18. package/content/best-practices/deployment-strategies.md +56 -19
  19. package/content/best-practices/error-handling.md +182 -93
  20. package/content/best-practices/index.md +6 -0
  21. package/content/best-practices/performance-optimization.md +26 -13
  22. package/content/best-practices/security-guidelines.md +35 -9
  23. package/content/best-practices/testing-strategies.md +7 -2
  24. package/content/best-practices/troubleshooting-tips.md +27 -17
  25. package/content/extensions/components/api-reference.md +107 -322
  26. package/content/extensions/components/authentication/api.md +454 -603
  27. package/content/extensions/components/authentication/errors.md +121 -498
  28. package/content/extensions/components/authentication/index.md +88 -801
  29. package/content/extensions/components/authentication/usage.md +207 -956
  30. package/content/extensions/components/authorization/api.md +736 -656
  31. package/content/extensions/components/authorization/errors.md +168 -206
  32. package/content/extensions/components/authorization/index.md +82 -797
  33. package/content/extensions/components/authorization/usage.md +194 -527
  34. package/content/extensions/components/health-check.md +71 -243
  35. package/content/extensions/components/mail/api.md +504 -287
  36. package/content/extensions/components/mail/errors.md +73 -61
  37. package/content/extensions/components/mail/index.md +96 -467
  38. package/content/extensions/components/mail/usage.md +130 -172
  39. package/content/extensions/components/request-tracker.md +66 -173
  40. package/content/extensions/components/socket-io/api.md +195 -13
  41. package/content/extensions/components/socket-io/errors.md +3 -3
  42. package/content/extensions/components/socket-io/index.md +50 -337
  43. package/content/extensions/components/socket-io/usage.md +143 -26
  44. package/content/extensions/components/static-asset/api.md +410 -142
  45. package/content/extensions/components/static-asset/errors.md +110 -53
  46. package/content/extensions/components/static-asset/index.md +79 -608
  47. package/content/extensions/components/static-asset/usage.md +180 -300
  48. package/content/extensions/components/websocket/api.md +275 -399
  49. package/content/extensions/components/websocket/errors.md +47 -56
  50. package/content/extensions/components/websocket/index.md +74 -407
  51. package/content/extensions/components/websocket/usage.md +110 -341
  52. package/content/extensions/helpers/cron/index.md +51 -160
  53. package/content/extensions/helpers/crypto/index.md +62 -483
  54. package/content/extensions/helpers/crypto/reference.md +456 -0
  55. package/content/extensions/helpers/env/index.md +60 -178
  56. package/content/extensions/helpers/error/index.md +221 -207
  57. package/content/extensions/helpers/inversion/index.md +65 -556
  58. package/content/extensions/helpers/inversion/reference.md +522 -0
  59. package/content/extensions/helpers/kafka/admin.md +20 -1
  60. package/content/extensions/helpers/kafka/compile-binary.md +41 -35
  61. package/content/extensions/helpers/kafka/consumer.md +54 -20
  62. package/content/extensions/helpers/kafka/examples.md +21 -16
  63. package/content/extensions/helpers/kafka/index.md +80 -610
  64. package/content/extensions/helpers/kafka/producer.md +134 -5
  65. package/content/extensions/helpers/kafka/schema-registry.md +45 -70
  66. package/content/extensions/helpers/logger/hf-logger.md +193 -0
  67. package/content/extensions/helpers/logger/index.md +64 -563
  68. package/content/extensions/helpers/logger/pino.md +85 -0
  69. package/content/extensions/helpers/logger/reference.md +746 -0
  70. package/content/extensions/helpers/network/api.md +241 -195
  71. package/content/extensions/helpers/network/index.md +72 -530
  72. package/content/extensions/helpers/queue/index.md +72 -900
  73. package/content/extensions/helpers/queue/reference.md +467 -0
  74. package/content/extensions/helpers/redis/index.md +73 -645
  75. package/content/extensions/helpers/redis/reference.md +727 -0
  76. package/content/extensions/helpers/secrets/index.md +66 -0
  77. package/content/extensions/helpers/socket-io/api.md +305 -203
  78. package/content/extensions/helpers/socket-io/index.md +66 -432
  79. package/content/extensions/helpers/storage/api.md +564 -462
  80. package/content/extensions/helpers/storage/index.md +77 -573
  81. package/content/extensions/helpers/types/index.md +66 -499
  82. package/content/extensions/helpers/types/reference.md +650 -0
  83. package/content/extensions/helpers/uid/index.md +58 -227
  84. package/content/extensions/helpers/websocket/api.md +329 -216
  85. package/content/extensions/helpers/websocket/index.md +65 -503
  86. package/content/extensions/helpers/worker-thread/index.md +58 -396
  87. package/content/extensions/helpers/worker-thread/reference.md +428 -0
  88. package/content/guides/core-concepts/persistent/models.md +1 -1
  89. package/content/guides/core-concepts/persistent/search-typesense.md +3 -3
  90. package/content/guides/core-concepts/persistent/transactions.md +1 -1
  91. package/content/guides/core-concepts/secrets-vault.md +177 -0
  92. package/content/guides/core-concepts/services.md +1 -1
  93. package/content/guides/migrations/redis-helpers-migration.md +1 -1
  94. package/content/guides/migrations/unified-connectors-migration.md +2 -2
  95. package/content/guides/tutorials/ecommerce-api.md +3 -8
  96. package/content/references/base/application.md +1 -1
  97. package/content/references/base/connectors.md +79 -136
  98. package/content/references/base/datasources-reference.md +599 -0
  99. package/content/references/base/datasources.md +84 -444
  100. package/content/references/base/dependency-injection.md +17 -39
  101. package/content/references/base/filter-system/application-usage.md +69 -121
  102. package/content/references/base/filter-system/array-operators.md +12 -0
  103. package/content/references/base/filter-system/comparison-operators.md +12 -0
  104. package/content/references/base/filter-system/default-filter.md +136 -348
  105. package/content/references/base/filter-system/fields-order-pagination.md +38 -16
  106. package/content/references/base/filter-system/index.md +106 -257
  107. package/content/references/base/filter-system/json-filtering.md +12 -2
  108. package/content/references/base/filter-system/list-operators.md +16 -2
  109. package/content/references/base/filter-system/logical-operators.md +13 -0
  110. package/content/references/base/filter-system/null-operators.md +13 -0
  111. package/content/references/base/filter-system/pattern-matching.md +12 -0
  112. package/content/references/base/filter-system/quick-reference.md +11 -2
  113. package/content/references/base/filter-system/range-operators.md +12 -0
  114. package/content/references/base/filter-system/tips.md +70 -133
  115. package/content/references/base/filter-system/use-cases.md +156 -233
  116. package/content/references/base/middlewares.md +35 -21
  117. package/content/references/base/models-reference.md +886 -0
  118. package/content/references/base/models.md +80 -1452
  119. package/content/references/base/repositories/advanced.md +156 -192
  120. package/content/references/base/repositories/index.md +77 -650
  121. package/content/references/base/repositories/mixins.md +22 -18
  122. package/content/references/base/repositories/relations.md +123 -171
  123. package/content/references/base/repositories/soft-deletable.md +58 -56
  124. package/content/references/base/secrets.md +263 -0
  125. package/content/references/base/services.md +2 -2
  126. package/content/references/configuration/environment-variables.md +48 -4
  127. package/content/references/configuration/index.md +49 -31
  128. package/content/references/quick-reference.md +3 -16
  129. package/content/references/utilities/crypto.md +35 -76
  130. package/content/references/utilities/date.md +33 -73
  131. package/content/references/utilities/index.md +1 -1
  132. package/content/references/utilities/jsx-reference.md +298 -0
  133. package/content/references/utilities/jsx.md +82 -525
  134. package/content/references/utilities/module.md +29 -62
  135. package/content/references/utilities/parse.md +34 -64
  136. package/content/references/utilities/performance.md +33 -58
  137. package/content/references/utilities/promise.md +28 -62
  138. package/content/references/utilities/request.md +57 -218
  139. package/content/references/utilities/schema.md +43 -137
  140. package/content/references/utilities/statuses-reference.md +361 -0
  141. package/content/references/utilities/statuses.md +63 -667
  142. 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
- | `appErrorHandler` | `ErrorHandler` | Global error handler (Zod, DB constraints, generic) |
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(appErrorHandler({ logger, rootKey }));
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
- ## appErrorHandler
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
- **Not exported from `@venizia/ignis`** - registered automatically by `BaseApplication`.
67
+ Registered automatically by `BaseApplication`.
68
68
 
69
69
  ### Signature
70
70
 
71
71
  ```typescript
72
- function appErrorHandler(opts: {
73
- logger: Logger;
74
- rootKey?: string;
75
- }): ErrorHandler
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` | `Logger` | Logger instance for error logging |
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
- Top-level `message`/`messageCode` come from the first failing issue - its `params.code` if the schema set one, otherwise its raw Zod code. The full per-field list stays under `details.cause`.
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 `messageCode`, attach `params.code` to a custom check:
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 "messageCode": "user.email.invalid"
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 `messageCode` exists - the response still carries one, resolved to `MessageCode.DEFAULT` (`"core.system_error"`) via `MessageCode.resolve(undefined)`. No error response from this middleware is ever missing `messageCode`.
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 `messageCode: "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.
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?: Logger;
232
+ logger?: ILogger;
219
233
  }): NotFoundHandler
220
234
  ```
221
235
 
222
236
  | Parameter | Type | Description |
223
237
  |-----------|------|-------------|
224
- | `logger` | `Logger \| undefined` | Logger instance (defaults to `console`) |
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 appErrorHandler
380
+ error?: { rootKey: string }; // Root key wrapper for AppErrorMiddleware
367
381
  asyncContext?: { enable: boolean }; // Enable Hono contextStorage() middleware
368
382
  // ...
369
383
  }