@venizia/ignis-docs 0.2.0 → 0.2.1-1

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 (174) 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 +24 -13
  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 +27 -3
  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 +8 -4
  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 +247 -153
  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 +109 -323
  26. package/content/extensions/components/authentication/api.md +489 -602
  27. package/content/extensions/components/authentication/errors.md +135 -498
  28. package/content/extensions/components/authentication/index.md +89 -801
  29. package/content/extensions/components/authentication/usage.md +231 -955
  30. package/content/extensions/components/authorization/api.md +991 -644
  31. package/content/extensions/components/authorization/errors.md +204 -208
  32. package/content/extensions/components/authorization/getting-started.md +227 -0
  33. package/content/extensions/components/authorization/index.md +88 -795
  34. package/content/extensions/components/authorization/usage.md +219 -528
  35. package/content/extensions/components/health-check.md +77 -243
  36. package/content/extensions/components/index.md +24 -90
  37. package/content/extensions/components/mail/api.md +553 -285
  38. package/content/extensions/components/mail/errors.md +76 -62
  39. package/content/extensions/components/mail/index.md +111 -463
  40. package/content/extensions/components/mail/usage.md +139 -173
  41. package/content/extensions/components/request-tracker.md +70 -173
  42. package/content/extensions/components/socket-io/api.md +462 -785
  43. package/content/extensions/components/socket-io/errors.md +49 -51
  44. package/content/extensions/components/socket-io/index.md +69 -372
  45. package/content/extensions/components/socket-io/usage.md +212 -105
  46. package/content/extensions/components/static-asset/api.md +461 -141
  47. package/content/extensions/components/static-asset/errors.md +121 -53
  48. package/content/extensions/components/static-asset/index.md +84 -606
  49. package/content/extensions/components/static-asset/usage.md +184 -299
  50. package/content/extensions/components/template/index.md +3 -3
  51. package/content/extensions/components/websocket/api.md +311 -404
  52. package/content/extensions/components/websocket/errors.md +47 -56
  53. package/content/extensions/components/websocket/index.md +75 -407
  54. package/content/extensions/components/websocket/usage.md +120 -338
  55. package/content/extensions/helpers/cron/index.md +52 -160
  56. package/content/extensions/helpers/crypto/index.md +67 -480
  57. package/content/extensions/helpers/crypto/reference.md +528 -0
  58. package/content/extensions/helpers/env/index.md +64 -178
  59. package/content/extensions/helpers/error/index.md +286 -196
  60. package/content/extensions/helpers/index.md +61 -47
  61. package/content/extensions/helpers/inversion/index.md +76 -550
  62. package/content/extensions/helpers/inversion/reference.md +530 -0
  63. package/content/extensions/helpers/kafka/admin.md +23 -3
  64. package/content/extensions/helpers/kafka/compile-binary.md +83 -52
  65. package/content/extensions/helpers/kafka/consumer.md +65 -28
  66. package/content/extensions/helpers/kafka/examples.md +46 -253
  67. package/content/extensions/helpers/kafka/index.md +55 -617
  68. package/content/extensions/helpers/kafka/producer.md +156 -22
  69. package/content/extensions/helpers/kafka/schema-registry.md +59 -79
  70. package/content/extensions/helpers/logger/hf-logger.md +220 -0
  71. package/content/extensions/helpers/logger/index.md +78 -552
  72. package/content/extensions/helpers/logger/pino.md +105 -0
  73. package/content/extensions/helpers/logger/reference.md +937 -0
  74. package/content/extensions/helpers/network/api.md +276 -195
  75. package/content/extensions/helpers/network/index.md +87 -524
  76. package/content/extensions/helpers/queue/index.md +80 -897
  77. package/content/extensions/helpers/queue/reference.md +494 -0
  78. package/content/extensions/helpers/redis/index.md +86 -640
  79. package/content/extensions/helpers/redis/reference.md +784 -0
  80. package/content/extensions/helpers/secrets/index.md +136 -0
  81. package/content/extensions/helpers/socket-io/api.md +325 -204
  82. package/content/extensions/helpers/socket-io/index.md +79 -429
  83. package/content/extensions/helpers/storage/api.md +584 -464
  84. package/content/extensions/helpers/storage/index.md +80 -573
  85. package/content/extensions/helpers/types/index.md +75 -495
  86. package/content/extensions/helpers/types/reference.md +689 -0
  87. package/content/extensions/helpers/uid/index.md +176 -189
  88. package/content/extensions/helpers/websocket/api.md +366 -214
  89. package/content/extensions/helpers/websocket/index.md +68 -503
  90. package/content/extensions/helpers/worker-thread/index.md +62 -396
  91. package/content/extensions/helpers/worker-thread/reference.md +428 -0
  92. package/content/extensions/index.md +38 -39
  93. package/content/extensions/src-details/mcp-server.md +96 -548
  94. package/content/guides/core-concepts/persistent/datasources.md +2 -2
  95. package/content/guides/core-concepts/persistent/index.md +5 -1
  96. package/content/guides/core-concepts/persistent/models.md +1 -1
  97. package/content/guides/core-concepts/persistent/pglite.md +218 -0
  98. package/content/guides/core-concepts/persistent/postgres-drivers.md +21 -15
  99. package/content/guides/core-concepts/persistent/search-meilisearch.md +22 -12
  100. package/content/guides/core-concepts/persistent/search-typesense.md +28 -16
  101. package/content/guides/core-concepts/persistent/sqlite.md +296 -0
  102. package/content/guides/core-concepts/persistent/transactions.md +12 -11
  103. package/content/guides/core-concepts/secrets-vault.md +177 -0
  104. package/content/guides/core-concepts/services.md +1 -1
  105. package/content/guides/get-started/5-minute-quickstart.md +59 -206
  106. package/content/guides/get-started/philosophy.md +135 -670
  107. package/content/guides/get-started/setup.md +53 -74
  108. package/content/guides/migrations/redis-helpers-migration.md +5 -4
  109. package/content/guides/migrations/scoped-rbac-migration.md +5 -5
  110. package/content/guides/migrations/unified-connectors-migration.md +8 -7
  111. package/content/guides/tutorials/ecommerce-api.md +3 -8
  112. package/content/guides/tutorials/realtime-chat.md +1 -1
  113. package/content/references/base/application.md +64 -22
  114. package/content/references/base/components.md +3 -3
  115. package/content/references/base/connectors.md +79 -136
  116. package/content/references/base/controllers.md +12 -12
  117. package/content/references/base/datasources-reference.md +600 -0
  118. package/content/references/base/datasources.md +84 -444
  119. package/content/references/base/dependency-injection.md +25 -46
  120. package/content/references/base/filter-system/application-usage.md +95 -123
  121. package/content/references/base/filter-system/array-operators.md +33 -43
  122. package/content/references/base/filter-system/comparison-operators.md +55 -63
  123. package/content/references/base/filter-system/default-filter.md +144 -350
  124. package/content/references/base/filter-system/fields-order-pagination.md +116 -148
  125. package/content/references/base/filter-system/index.md +114 -253
  126. package/content/references/base/filter-system/json-filtering.md +52 -181
  127. package/content/references/base/filter-system/list-operators.md +28 -44
  128. package/content/references/base/filter-system/logical-operators.md +69 -114
  129. package/content/references/base/filter-system/null-operators.md +41 -98
  130. package/content/references/base/filter-system/pattern-matching.md +48 -51
  131. package/content/references/base/filter-system/quick-reference.md +93 -196
  132. package/content/references/base/filter-system/range-operators.md +22 -38
  133. package/content/references/base/filter-system/tips.md +70 -133
  134. package/content/references/base/filter-system/use-cases.md +173 -232
  135. package/content/references/base/grpc-controllers.md +53 -17
  136. package/content/references/base/index.md +5 -3
  137. package/content/references/base/middlewares.md +43 -28
  138. package/content/references/base/models-reference.md +886 -0
  139. package/content/references/base/models.md +81 -1452
  140. package/content/references/base/providers.md +8 -8
  141. package/content/references/base/repositories/advanced.md +281 -419
  142. package/content/references/base/repositories/index.md +84 -644
  143. package/content/references/base/repositories/mixins.md +25 -21
  144. package/content/references/base/repositories/relations.md +194 -375
  145. package/content/references/base/repositories/soft-deletable.md +67 -55
  146. package/content/references/base/secrets.md +267 -0
  147. package/content/references/base/services.md +8 -6
  148. package/content/references/configuration/environment-variables.md +73 -21
  149. package/content/references/configuration/index.md +51 -31
  150. package/content/references/index.md +1 -1
  151. package/content/references/quick-reference.md +3 -16
  152. package/content/references/utilities/crypto.md +35 -76
  153. package/content/references/utilities/date.md +33 -73
  154. package/content/references/utilities/duration.md +85 -0
  155. package/content/references/utilities/index.md +6 -2
  156. package/content/references/utilities/jsx-reference.md +298 -0
  157. package/content/references/utilities/jsx.md +82 -525
  158. package/content/references/utilities/module.md +81 -61
  159. package/content/references/utilities/parse.md +34 -64
  160. package/content/references/utilities/performance.md +33 -58
  161. package/content/references/utilities/promise.md +28 -62
  162. package/content/references/utilities/request.md +58 -218
  163. package/content/references/utilities/retry.md +139 -0
  164. package/content/references/utilities/schema.md +43 -137
  165. package/content/references/utilities/statuses-reference.md +361 -0
  166. package/content/references/utilities/statuses.md +63 -667
  167. package/dist/mcp-server/index.js +0 -0
  168. package/dist/mcp-server/tools/github/list-project-files.tool.d.ts +1 -1
  169. package/dist/mcp-server/tools/github/list-project-files.tool.d.ts.map +1 -1
  170. package/dist/mcp-server/tools/github/list-project-files.tool.js +3 -3
  171. package/dist/mcp-server/tools/github/search-code.tool.js +1 -1
  172. package/dist/mcp-server/tools/github/verify-dependencies.tool.js +1 -1
  173. package/dist/mcp-server/tools/github/view-source-file.tool.js +1 -1
  174. package/package.json +24 -23
@@ -1,233 +1,119 @@
1
- # Environment
2
-
3
- Structured access to application environment variables with prefix filtering, type-safe retrieval, and stage detection.
4
-
5
- ## Quick Reference
6
-
7
- | Item | Value |
8
- |------|-------|
9
- | **Package** | `@venizia/ignis-helpers` |
10
- | **Classes** | `ApplicationEnvironment`, `Environment` |
11
- | **Implements** | `IApplicationEnvironment` (interface) |
12
- | **Singleton** | `applicationEnvironment` (alias `Envs`) -- auto-initialized at module load |
13
- | **Runtimes** | Both |
14
-
15
- #### Import Paths
16
-
17
- ```typescript
18
- // Singleton instance (recommended)
19
- import { applicationEnvironment, Envs } from '@venizia/ignis-helpers';
20
-
21
- // Classes
22
- import { ApplicationEnvironment, Environment } from '@venizia/ignis-helpers';
23
-
24
- // Interface
25
- import type { IApplicationEnvironment } from '@venizia/ignis-helpers';
26
- ```
1
+ ---
2
+ title: Environment
3
+ description: Prefix-filtered, type-safe access to environment variables plus deployment-stage detection
4
+ difficulty: beginner
5
+ ---
27
6
 
28
- ## Creating an Instance
7
+ # Environment
29
8
 
30
- ### Singleton (Recommended)
9
+ `applicationEnvironment` is a singleton that filters `process.env` down to your app's prefix, and gives typed access to it. `Environment` reads the current deployment stage from `NODE_ENV`.
31
10
 
32
- A pre-configured `applicationEnvironment` singleton is auto-initialized at module load time. It reads `process.env` and filters keys matching the configured prefix (default: `APP_ENV`). An alias `Envs` is also exported for convenience.
11
+ ## In one example
33
12
 
34
13
  ```typescript
35
14
  import { applicationEnvironment } from '@venizia/ignis-helpers';
36
- // or
37
- import { Envs } from '@venizia/ignis-helpers';
38
15
 
39
16
  const jwtSecret = applicationEnvironment.get<string>('APP_ENV_JWT_SECRET');
40
- const jwtSecret2 = Envs.get<string>('APP_ENV_JWT_SECRET');
17
+ const timeout = applicationEnvironment.get<number>('APP_ENV_TIMEOUT', { defaultValue: 5000 });
41
18
  ```
42
19
 
43
- > [!TIP]
44
- > For most applications, the singleton is all you need. It is created once at module load and shares the same filtered environment across your entire app.
20
+ The singleton is created once at module load. It reads only keys that start with `APP_ENV` (the default prefix) from `process.env`. `Envs` is an exported alias for the same instance.
45
21
 
46
- ### Custom Instance
22
+ ## How it works
47
23
 
48
- If you need a different prefix or a custom set of environment variables, construct your own instance.
24
+ - **Construction filters by prefix.** `new ApplicationEnvironment({ prefix, envs })` copies only the keys of `envs` that start with `prefix` into an internal map. Everything else stays invisible to `get()`. The default singleton uses `process.env.APPLICATION_ENV_PREFIX ?? 'APP_ENV'` and `process.env`.
25
+ - **`get()` takes an options object, not a positional default.** The signature is `get<ReturnType, BeforeTransformType = unknown>(key, opts?: { defaultValue?, transform? })`.
26
+ - **Without `transform`,** `get()` returns the raw value - still a `string` - or `defaultValue` when the key is missing.
27
+ - **With `transform`,** `get()` calls `transform(rawValue)`. It falls back to `defaultValue` only if that call returns `undefined` or `null`.
28
+ - **`get<T>()` is a type cast, not a runtime conversion, unless you pass `transform`.** Every `process.env` value is a `string`. Asking for `get<number>('APP_ENV_PORT')` still returns a string at runtime, unless you also pass `transform: Number`.
29
+ - **Stage detection is separate from the singleton.** `Environment.current` reads `process.env.NODE_ENV` directly. It falls back to `'development'` when `NODE_ENV` is unset.
30
+ - **`Environment.is({ name })` compares a name against `Environment.current`.**
31
+ - **`ApplicationEnvironment.isDevelopment()` is narrower.** It checks `NODE_ENV === 'development'` exactly. The `'dev'` alias fails that check, even though `dev` counts as a development stage everywhere else in IGNIS.
49
32
 
50
- ```typescript
51
- import { ApplicationEnvironment } from '@venizia/ignis-helpers';
33
+ **Deployment stages** (`Environment.*`)
52
34
 
53
- const customEnv = new ApplicationEnvironment({
54
- prefix: 'MY_APP_ENV',
55
- envs: process.env,
56
- });
35
+ | Constant | Value | In `DEVELOPMENT_ENVS` |
36
+ |----------|-------|------------------------|
37
+ | `LOCAL` | `'local'` | yes |
38
+ | `DEBUG` | `'debug'` | yes |
39
+ | `DEVELOPMENT` | `'development'` | yes |
40
+ | `DEV` | `'dev'` | yes - short spelling of `development` |
41
+ | `SIT` | `'sit'` | yes |
42
+ | `UAT` | `'uat'` | no |
43
+ | `ALPHA` | `'alpha'` | no |
44
+ | `BETA` | `'beta'` | no |
45
+ | `STAGING` | `'staging'` | no |
46
+ | `PRODUCTION` | `'production'` | no |
57
47
 
58
- const host = customEnv.get<string>('MY_APP_ENV_SERVER_HOST');
59
- ```
48
+ All ten stages are in `Environment.COMMON_ENVS`, which the Logger uses to decide whether `DEBUG=true` is honored. The five marked above are `Environment.DEVELOPMENT_ENVS`. IGNIS's error handler consults this set to decide whether a response may carry a stack trace or a raw driver message. The rule is fail-closed: `alpha`, `beta`, `uat`, `staging`, a typo'd name, and an unset `NODE_ENV` are all sanitized as production.
60
49
 
61
- #### Constructor Options
50
+ ## Common tasks
62
51
 
63
- | Option | Type | Default | Description |
64
- |--------|------|---------|-------------|
65
- | `prefix` | `string` | -- (required) | Only keys starting with this prefix are included |
66
- | `envs` | `Record<string, string \| number \| undefined>` | -- (required) | The environment object to filter (typically `process.env`) |
52
+ ### Read a variable with a default
67
53
 
68
- The default singleton uses `process.env.APPLICATION_ENV_PREFIX ?? 'APP_ENV'` as the prefix and `process.env` as the environment source.
69
-
70
- ## Usage
71
-
72
- ### Reading Variables
73
-
74
- Use `get<ReturnType>(key, defaultValue?)` to retrieve a typed environment variable. Only keys matching the configured prefix are available. An optional `defaultValue` is returned when the key is not found.
54
+ `defaultValue` goes inside the options object, not as a second positional argument.
75
55
 
76
56
  ```typescript
77
- import { applicationEnvironment } from '@venizia/ignis-helpers';
78
-
79
- const jwtSecret = applicationEnvironment.get<string>('APP_ENV_JWT_SECRET');
80
- const serverPort = applicationEnvironment.get<string>('APP_ENV_SERVER_PORT');
81
- const timeout = applicationEnvironment.get<number>('APP_ENV_TIMEOUT', 5000);
82
- ```
83
-
84
- > [!WARNING]
85
- > `get<T>()` performs a TypeScript type cast, not a runtime conversion. All `process.env` values are strings. If the raw value is `"3000"`, `get<number>()` still returns the string at runtime. Parse it yourself if needed.
86
-
87
- ### Setting Variables
88
-
89
- Use `set<ValueType>(key, value)` to add or override a variable at runtime.
90
-
91
- ```typescript
92
- applicationEnvironment.set('APP_ENV_FEATURE_FLAG', 'enabled');
57
+ const port = applicationEnvironment.get<string>('APP_ENV_SERVER_PORT', { defaultValue: '3000' });
93
58
  ```
94
59
 
95
- ### Listing Keys
60
+ ### Convert a value while reading it
96
61
 
97
- Use `keys()` to retrieve all filtered environment variable keys.
62
+ Pass `transform` to parse instead of casting.
98
63
 
99
64
  ```typescript
100
- const allKeys = applicationEnvironment.keys();
101
- // e.g. ['APP_ENV_SERVER_HOST', 'APP_ENV_SERVER_PORT', 'APP_ENV_JWT_SECRET']
65
+ const timeout = applicationEnvironment.get<number>('APP_ENV_TIMEOUT', {
66
+ transform: value => Number(value),
67
+ defaultValue: 5000,
68
+ });
102
69
  ```
103
70
 
104
- ### Checking Development Mode
71
+ ### Set or merge variables at runtime
105
72
 
106
- Use `isDevelopment()` to check if `process.env.NODE_ENV` is `'development'`.
73
+ `set()` writes a single key. `merge()` overwrites several keys at once. Both bypass the prefix filter - they write directly, with no `startsWith` check.
107
74
 
108
75
  ```typescript
109
- if (applicationEnvironment.isDevelopment()) {
110
- // Enable verbose logging, seed data, etc.
111
- }
76
+ applicationEnvironment.set('APP_ENV_FEATURE_FLAG', 'enabled');
77
+ applicationEnvironment.merge({ envs: { APP_ENV_REGION: 'ap-southeast-1' } });
112
78
  ```
113
79
 
114
- ### Environment Stage Detection
115
-
116
- The `Environment` class provides static helpers for checking the current `NODE_ENV`.
80
+ ### Branch on the deployment stage
117
81
 
118
82
  ```typescript
119
83
  import { Environment } from '@venizia/ignis-helpers';
120
84
 
121
- // Read the current stage (falls back to 'development' if NODE_ENV is unset)
122
- console.log(Environment.current);
123
-
124
- // Check a specific stage
125
- if (Environment.is({ name: 'staging' })) {
85
+ if (Environment.is({ name: Environment.STAGING })) {
126
86
  // Staging-only behavior
127
87
  }
128
88
  ```
129
89
 
130
- #### Available Stages
131
-
132
- | Constant | Value | Development stage |
133
- |----------|-------|-------------------|
134
- | `Environment.LOCAL` | `'local'` | yes |
135
- | `Environment.DEBUG` | `'debug'` | yes |
136
- | `Environment.DEVELOPMENT` | `'development'` | yes |
137
- | `Environment.DEV` | `'dev'` | yes - the short spelling of `development` |
138
- | `Environment.SIT` | `'sit'` | yes |
139
- | `Environment.UAT` | `'uat'` | no |
140
- | `Environment.ALPHA` | `'alpha'` | no |
141
- | `Environment.BETA` | `'beta'` | no |
142
- | `Environment.STAGING` | `'staging'` | no |
143
- | `Environment.PRODUCTION` | `'production'` | no |
144
-
145
- All stages are collected in `Environment.COMMON_ENVS` (a `Set<string>`), which is used internally by the Logger to determine whether debug logging should be active. A `NODE_ENV` outside this set silences `DEBUG=true` entirely.
90
+ ### Use a custom prefix
146
91
 
147
- #### `Environment.DEVELOPMENT_ENVS` - the error-detail boundary
148
-
149
- The stages marked "development stage" above form `Environment.DEVELOPMENT_ENVS`. IGNIS's error handler consults this set to decide whether an error response may carry internal detail - a stack trace, a SQL constraint name, a raw driver message.
150
-
151
- The rule is fail-closed. A leak is opt-in by an explicit development name, so **anything else is sanitized as production**, including:
152
-
153
- - `alpha`, `beta`, `uat`, `staging` - real users reach these
154
- - an unrecognized name (a typo, a stage nobody added to the set)
155
- - `NODE_ENV` left unset
156
-
157
- Running a local service under `NODE_ENV=alpha` therefore gives you the same stripped-down error responses your users see. If you want the details while developing, set `NODE_ENV` to `development`, `dev`, or `local`.
158
-
159
- ### Configuring the Prefix
160
-
161
- The default singleton reads `APPLICATION_ENV_PREFIX` from `process.env` to determine its prefix. Set this variable **before** any import of `@venizia/ignis-helpers`.
92
+ Set `APPLICATION_ENV_PREFIX` before the first import of `@venizia/ignis-helpers`. The singleton is constructed at module load, so a later change has no effect on it.
162
93
 
163
94
  ```
164
95
  APPLICATION_ENV_PREFIX=MY_APP_ENV
165
-
166
96
  MY_APP_ENV_SERVER_HOST=0.0.0.0
167
- MY_APP_ENV_SERVER_PORT=3000
168
- ```
169
-
170
- ### Integration with BaseApplication
171
-
172
- The `applicationEnvironment` singleton is used by the framework's `BaseApplication` during startup to validate that all prefixed environment variables have non-empty values. If any key has an empty value, the application throws an error unless `ALLOW_EMPTY_ENV_VALUE` is set to a truthy value.
173
-
174
- ```typescript
175
- // This validation runs automatically during application initialization.
176
- // To allow empty values, set in your environment:
177
- ALLOW_EMPTY_ENV_VALUE=true
178
- ```
179
-
180
- ## Troubleshooting
181
-
182
- ### `get()` returns `undefined`
183
-
184
- **Cause:** The key does not start with the configured prefix, so it was filtered out during construction.
185
-
186
- **Fix:** Ensure your `.env` keys use the correct prefix:
187
-
188
97
  ```
189
- # Wrong -- missing prefix
190
- SERVER_PORT=3000
191
98
 
192
- # Correct -- matches default prefix
193
- APP_ENV_SERVER_PORT=3000
194
- ```
195
-
196
- ### Custom prefix not taking effect
197
-
198
- **Cause:** `APPLICATION_ENV_PREFIX` must be set **before** the module loads. If it is set after import, the singleton is already constructed with the default `APP_ENV`.
199
-
200
- **Fix:** Set the prefix in your `.env` file or at process start, before any import of `@venizia/ignis-helpers`:
201
-
202
- ```
203
- APPLICATION_ENV_PREFIX=MY_APP_ENV
204
- ```
205
-
206
- ### `get<number>()` returns a string
207
-
208
- **Cause:** `get<T>()` performs a TypeScript type cast, not a runtime conversion. All `process.env` values are strings.
209
-
210
- **Fix:** Parse the value explicitly:
99
+ ### List every filtered key
211
100
 
212
101
  ```typescript
213
- const port = Number(applicationEnvironment.get<string>('APP_ENV_SERVER_PORT'));
102
+ const allKeys = applicationEnvironment.keys();
103
+ // e.g. ['APP_ENV_SERVER_HOST', 'APP_ENV_SERVER_PORT', 'APP_ENV_JWT_SECRET']
214
104
  ```
215
105
 
216
- ### `[validateEnvs] Invalid Application Environment! Key: {key} | Value: {value}`
217
-
218
- **Cause:** During application startup, `BaseApplication.validateEnvs()` found a prefixed environment key with an empty or undefined value.
219
-
220
- **Fix:** Either provide a value for the key in your `.env` file, or allow empty values by setting:
106
+ > [!TIP]
107
+ > `BaseApplication` validates every prefixed key at startup and throws on an empty value, unless `ALLOW_EMPTY_ENV_VALUE` is truthy - see [Application](/guides/core-concepts/application/).
221
108
 
222
- ```
223
- ALLOW_EMPTY_ENV_VALUE=true
224
- ```
109
+ ## See also
225
110
 
226
- ## See Also
111
+ - [Application](/guides/core-concepts/application/) - environment validation during startup
112
+ - [Helpers Overview](/extensions/helpers/) - all available helpers
113
+ - [Logger](/extensions/helpers/logger/) - uses `Environment.COMMON_ENVS` for debug log filtering
114
+ - [Error](/extensions/helpers/error/) - uses `Environment.DEVELOPMENT_ENVS` to gate error detail
227
115
 
228
- - **Guides:**
229
- - [Application](/guides/core-concepts/application/) -- Environment validation during startup
116
+ **Files:**
230
117
 
231
- - **Other Helpers:**
232
- - [Helpers Index](../index) -- All available helpers
233
- - [Logger](/extensions/helpers/logger/) -- Uses `Environment.COMMON_ENVS` for debug log filtering
118
+ - [`packages/helpers/src/modules/env/app-env.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/env/app-env.ts) - `Environment`, `ApplicationEnvironment`, the `applicationEnvironment` singleton
119
+ - [`packages/helpers/src/modules/env/types.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/env/types.ts) - `IApplicationEnvironment` interface