@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
@@ -1,233 +1,115 @@
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, reading 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 is 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? })`. Without `transform`, it returns the raw value (still a `string`) or `defaultValue` when the key is missing. With `transform`, it calls `transform(rawValue)` and falls back to `defaultValue` if that returns `undefined` or `null`.
26
+ - **`get<T>()` is a type cast without `transform`, not a runtime conversion.** Every `process.env` value is a `string`; asking for `get<number>('APP_ENV_PORT')` still returns a string at runtime unless you pass `transform: Number`.
27
+ - **Stage detection is separate from the singleton.** `Environment.current` reads `process.env.NODE_ENV` directly (falling back to `'development'` when unset); `Environment.is({ name })` compares against it. `ApplicationEnvironment.isDevelopment()` is narrower - it checks `NODE_ENV === 'development'` exactly, so the `'dev'` alias returns `false` there even though it counts as a development stage everywhere else.
49
28
 
50
- ```typescript
51
- import { ApplicationEnvironment } from '@venizia/ignis-helpers';
29
+ **Deployment stages** (`Environment.*`)
52
30
 
53
- const customEnv = new ApplicationEnvironment({
54
- prefix: 'MY_APP_ENV',
55
- envs: process.env,
56
- });
31
+ | Constant | Value | In `DEVELOPMENT_ENVS` |
32
+ |----------|-------|------------------------|
33
+ | `LOCAL` | `'local'` | yes |
34
+ | `DEBUG` | `'debug'` | yes |
35
+ | `DEVELOPMENT` | `'development'` | yes |
36
+ | `DEV` | `'dev'` | yes - short spelling of `development` |
37
+ | `SIT` | `'sit'` | yes |
38
+ | `UAT` | `'uat'` | no |
39
+ | `ALPHA` | `'alpha'` | no |
40
+ | `BETA` | `'beta'` | no |
41
+ | `STAGING` | `'staging'` | no |
42
+ | `PRODUCTION` | `'production'` | no |
57
43
 
58
- const host = customEnv.get<string>('MY_APP_ENV_SERVER_HOST');
59
- ```
44
+ 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` - the set IGNIS's error handler consults 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
45
 
61
- #### Constructor Options
46
+ ## Common tasks
62
47
 
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`) |
48
+ ### Read a variable with a default
67
49
 
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.
50
+ `defaultValue` goes inside the options object, not as a second positional argument.
75
51
 
76
52
  ```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');
53
+ const port = applicationEnvironment.get<string>('APP_ENV_SERVER_PORT', { defaultValue: '3000' });
93
54
  ```
94
55
 
95
- ### Listing Keys
56
+ ### Convert a value while reading it
96
57
 
97
- Use `keys()` to retrieve all filtered environment variable keys.
58
+ Pass `transform` to parse instead of casting.
98
59
 
99
60
  ```typescript
100
- const allKeys = applicationEnvironment.keys();
101
- // e.g. ['APP_ENV_SERVER_HOST', 'APP_ENV_SERVER_PORT', 'APP_ENV_JWT_SECRET']
61
+ const timeout = applicationEnvironment.get<number>('APP_ENV_TIMEOUT', {
62
+ transform: value => Number(value),
63
+ defaultValue: 5000,
64
+ });
102
65
  ```
103
66
 
104
- ### Checking Development Mode
67
+ ### Set or merge variables at runtime
105
68
 
106
- Use `isDevelopment()` to check if `process.env.NODE_ENV` is `'development'`.
69
+ `set()` writes a single key; `merge()` overwrites several at once - both bypass the prefix filter (they write directly, no `startsWith` check).
107
70
 
108
71
  ```typescript
109
- if (applicationEnvironment.isDevelopment()) {
110
- // Enable verbose logging, seed data, etc.
111
- }
72
+ applicationEnvironment.set('APP_ENV_FEATURE_FLAG', 'enabled');
73
+ applicationEnvironment.merge({ envs: { APP_ENV_REGION: 'ap-southeast-1' } });
112
74
  ```
113
75
 
114
- ### Environment Stage Detection
115
-
116
- The `Environment` class provides static helpers for checking the current `NODE_ENV`.
76
+ ### Branch on the deployment stage
117
77
 
118
78
  ```typescript
119
79
  import { Environment } from '@venizia/ignis-helpers';
120
80
 
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' })) {
81
+ if (Environment.is({ name: Environment.STAGING })) {
126
82
  // Staging-only behavior
127
83
  }
128
84
  ```
129
85
 
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.
86
+ ### Use a custom prefix
146
87
 
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`.
88
+ 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
89
 
163
90
  ```
164
91
  APPLICATION_ENV_PREFIX=MY_APP_ENV
165
-
166
92
  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
93
  ```
189
- # Wrong -- missing prefix
190
- SERVER_PORT=3000
191
94
 
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:
95
+ ### List every filtered key
211
96
 
212
97
  ```typescript
213
- const port = Number(applicationEnvironment.get<string>('APP_ENV_SERVER_PORT'));
98
+ const allKeys = applicationEnvironment.keys();
99
+ // e.g. ['APP_ENV_SERVER_HOST', 'APP_ENV_SERVER_PORT', 'APP_ENV_JWT_SECRET']
214
100
  ```
215
101
 
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:
102
+ > [!TIP]
103
+ > `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
104
 
222
- ```
223
- ALLOW_EMPTY_ENV_VALUE=true
224
- ```
105
+ ## See also
225
106
 
226
- ## See Also
107
+ - [Application](/guides/core-concepts/application/) - environment validation during startup
108
+ - [Helpers Overview](/extensions/helpers/) - all available helpers
109
+ - [Logger](/extensions/helpers/logger/) - uses `Environment.COMMON_ENVS` for debug log filtering
110
+ - [Error](/extensions/helpers/error/) - uses `Environment.DEVELOPMENT_ENVS` to gate error detail
227
111
 
228
- - **Guides:**
229
- - [Application](/guides/core-concepts/application/) -- Environment validation during startup
112
+ **Files:**
230
113
 
231
- - **Other Helpers:**
232
- - [Helpers Index](../index) -- All available helpers
233
- - [Logger](/extensions/helpers/logger/) -- Uses `Environment.COMMON_ENVS` for debug log filtering
114
+ - [`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
115
+ - [`packages/helpers/src/modules/env/types.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/env/types.ts) - `IApplicationEnvironment` interface