@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
|
@@ -1,233 +1,115 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
7
|
+
# Environment
|
|
29
8
|
|
|
30
|
-
|
|
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
|
-
|
|
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
|
|
17
|
+
const timeout = applicationEnvironment.get<number>('APP_ENV_TIMEOUT', { defaultValue: 5000 });
|
|
41
18
|
```
|
|
42
19
|
|
|
43
|
-
|
|
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
|
-
|
|
22
|
+
## How it works
|
|
47
23
|
|
|
48
|
-
|
|
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
|
-
|
|
51
|
-
import { ApplicationEnvironment } from '@venizia/ignis-helpers';
|
|
29
|
+
**Deployment stages** (`Environment.*`)
|
|
52
30
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
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
|
-
|
|
46
|
+
## Common tasks
|
|
62
47
|
|
|
63
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
56
|
+
### Convert a value while reading it
|
|
96
57
|
|
|
97
|
-
|
|
58
|
+
Pass `transform` to parse instead of casting.
|
|
98
59
|
|
|
99
60
|
```typescript
|
|
100
|
-
const
|
|
101
|
-
|
|
61
|
+
const timeout = applicationEnvironment.get<number>('APP_ENV_TIMEOUT', {
|
|
62
|
+
transform: value => Number(value),
|
|
63
|
+
defaultValue: 5000,
|
|
64
|
+
});
|
|
102
65
|
```
|
|
103
66
|
|
|
104
|
-
###
|
|
67
|
+
### Set or merge variables at runtime
|
|
105
68
|
|
|
106
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
72
|
+
applicationEnvironment.set('APP_ENV_FEATURE_FLAG', 'enabled');
|
|
73
|
+
applicationEnvironment.merge({ envs: { APP_ENV_REGION: 'ap-southeast-1' } });
|
|
112
74
|
```
|
|
113
75
|
|
|
114
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
229
|
-
- [Application](/guides/core-concepts/application/) -- Environment validation during startup
|
|
112
|
+
**Files:**
|
|
230
113
|
|
|
231
|
-
-
|
|
232
|
-
|
|
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
|