@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.
- package/README.md +14 -14
- package/content/best-practices/api-usage-examples.md +39 -19
- package/content/best-practices/architectural-patterns.md +24 -13
- 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 +27 -3
- 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 +8 -4
- 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 +247 -153
- 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 +109 -323
- package/content/extensions/components/authentication/api.md +489 -602
- package/content/extensions/components/authentication/errors.md +135 -498
- package/content/extensions/components/authentication/index.md +89 -801
- package/content/extensions/components/authentication/usage.md +231 -955
- package/content/extensions/components/authorization/api.md +991 -644
- package/content/extensions/components/authorization/errors.md +204 -208
- package/content/extensions/components/authorization/getting-started.md +227 -0
- package/content/extensions/components/authorization/index.md +88 -795
- package/content/extensions/components/authorization/usage.md +219 -528
- package/content/extensions/components/health-check.md +77 -243
- package/content/extensions/components/index.md +24 -90
- package/content/extensions/components/mail/api.md +553 -285
- package/content/extensions/components/mail/errors.md +76 -62
- package/content/extensions/components/mail/index.md +111 -463
- package/content/extensions/components/mail/usage.md +139 -173
- package/content/extensions/components/request-tracker.md +70 -173
- package/content/extensions/components/socket-io/api.md +462 -785
- package/content/extensions/components/socket-io/errors.md +49 -51
- package/content/extensions/components/socket-io/index.md +69 -372
- package/content/extensions/components/socket-io/usage.md +212 -105
- package/content/extensions/components/static-asset/api.md +461 -141
- package/content/extensions/components/static-asset/errors.md +121 -53
- package/content/extensions/components/static-asset/index.md +84 -606
- package/content/extensions/components/static-asset/usage.md +184 -299
- package/content/extensions/components/template/index.md +3 -3
- package/content/extensions/components/websocket/api.md +311 -404
- package/content/extensions/components/websocket/errors.md +47 -56
- package/content/extensions/components/websocket/index.md +75 -407
- package/content/extensions/components/websocket/usage.md +120 -338
- package/content/extensions/helpers/cron/index.md +52 -160
- package/content/extensions/helpers/crypto/index.md +67 -480
- package/content/extensions/helpers/crypto/reference.md +528 -0
- package/content/extensions/helpers/env/index.md +64 -178
- package/content/extensions/helpers/error/index.md +286 -196
- package/content/extensions/helpers/index.md +61 -47
- package/content/extensions/helpers/inversion/index.md +76 -550
- package/content/extensions/helpers/inversion/reference.md +530 -0
- package/content/extensions/helpers/kafka/admin.md +23 -3
- package/content/extensions/helpers/kafka/compile-binary.md +83 -52
- package/content/extensions/helpers/kafka/consumer.md +65 -28
- package/content/extensions/helpers/kafka/examples.md +46 -253
- package/content/extensions/helpers/kafka/index.md +55 -617
- package/content/extensions/helpers/kafka/producer.md +156 -22
- package/content/extensions/helpers/kafka/schema-registry.md +59 -79
- package/content/extensions/helpers/logger/hf-logger.md +220 -0
- package/content/extensions/helpers/logger/index.md +78 -552
- package/content/extensions/helpers/logger/pino.md +105 -0
- package/content/extensions/helpers/logger/reference.md +937 -0
- package/content/extensions/helpers/network/api.md +276 -195
- package/content/extensions/helpers/network/index.md +87 -524
- package/content/extensions/helpers/queue/index.md +80 -897
- package/content/extensions/helpers/queue/reference.md +494 -0
- package/content/extensions/helpers/redis/index.md +86 -640
- package/content/extensions/helpers/redis/reference.md +784 -0
- package/content/extensions/helpers/secrets/index.md +136 -0
- package/content/extensions/helpers/socket-io/api.md +325 -204
- package/content/extensions/helpers/socket-io/index.md +79 -429
- package/content/extensions/helpers/storage/api.md +584 -464
- package/content/extensions/helpers/storage/index.md +80 -573
- package/content/extensions/helpers/types/index.md +75 -495
- package/content/extensions/helpers/types/reference.md +689 -0
- package/content/extensions/helpers/uid/index.md +176 -189
- package/content/extensions/helpers/websocket/api.md +366 -214
- package/content/extensions/helpers/websocket/index.md +68 -503
- package/content/extensions/helpers/worker-thread/index.md +62 -396
- package/content/extensions/helpers/worker-thread/reference.md +428 -0
- package/content/extensions/index.md +38 -39
- package/content/extensions/src-details/mcp-server.md +96 -548
- package/content/guides/core-concepts/persistent/datasources.md +2 -2
- package/content/guides/core-concepts/persistent/index.md +5 -1
- package/content/guides/core-concepts/persistent/models.md +1 -1
- package/content/guides/core-concepts/persistent/pglite.md +218 -0
- package/content/guides/core-concepts/persistent/postgres-drivers.md +21 -15
- package/content/guides/core-concepts/persistent/search-meilisearch.md +22 -12
- package/content/guides/core-concepts/persistent/search-typesense.md +28 -16
- package/content/guides/core-concepts/persistent/sqlite.md +296 -0
- package/content/guides/core-concepts/persistent/transactions.md +12 -11
- package/content/guides/core-concepts/secrets-vault.md +177 -0
- package/content/guides/core-concepts/services.md +1 -1
- package/content/guides/get-started/5-minute-quickstart.md +59 -206
- package/content/guides/get-started/philosophy.md +135 -670
- package/content/guides/get-started/setup.md +53 -74
- package/content/guides/migrations/redis-helpers-migration.md +5 -4
- package/content/guides/migrations/scoped-rbac-migration.md +5 -5
- package/content/guides/migrations/unified-connectors-migration.md +8 -7
- package/content/guides/tutorials/ecommerce-api.md +3 -8
- package/content/guides/tutorials/realtime-chat.md +1 -1
- package/content/references/base/application.md +64 -22
- package/content/references/base/components.md +3 -3
- package/content/references/base/connectors.md +79 -136
- package/content/references/base/controllers.md +12 -12
- package/content/references/base/datasources-reference.md +600 -0
- package/content/references/base/datasources.md +84 -444
- package/content/references/base/dependency-injection.md +25 -46
- package/content/references/base/filter-system/application-usage.md +95 -123
- package/content/references/base/filter-system/array-operators.md +33 -43
- package/content/references/base/filter-system/comparison-operators.md +55 -63
- package/content/references/base/filter-system/default-filter.md +144 -350
- package/content/references/base/filter-system/fields-order-pagination.md +116 -148
- package/content/references/base/filter-system/index.md +114 -253
- package/content/references/base/filter-system/json-filtering.md +52 -181
- package/content/references/base/filter-system/list-operators.md +28 -44
- package/content/references/base/filter-system/logical-operators.md +69 -114
- package/content/references/base/filter-system/null-operators.md +41 -98
- package/content/references/base/filter-system/pattern-matching.md +48 -51
- package/content/references/base/filter-system/quick-reference.md +93 -196
- package/content/references/base/filter-system/range-operators.md +22 -38
- package/content/references/base/filter-system/tips.md +70 -133
- package/content/references/base/filter-system/use-cases.md +173 -232
- package/content/references/base/grpc-controllers.md +53 -17
- package/content/references/base/index.md +5 -3
- package/content/references/base/middlewares.md +43 -28
- package/content/references/base/models-reference.md +886 -0
- package/content/references/base/models.md +81 -1452
- package/content/references/base/providers.md +8 -8
- package/content/references/base/repositories/advanced.md +281 -419
- package/content/references/base/repositories/index.md +84 -644
- package/content/references/base/repositories/mixins.md +25 -21
- package/content/references/base/repositories/relations.md +194 -375
- package/content/references/base/repositories/soft-deletable.md +67 -55
- package/content/references/base/secrets.md +267 -0
- package/content/references/base/services.md +8 -6
- package/content/references/configuration/environment-variables.md +73 -21
- package/content/references/configuration/index.md +51 -31
- package/content/references/index.md +1 -1
- 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/duration.md +85 -0
- package/content/references/utilities/index.md +6 -2
- package/content/references/utilities/jsx-reference.md +298 -0
- package/content/references/utilities/jsx.md +82 -525
- package/content/references/utilities/module.md +81 -61
- 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 +58 -218
- package/content/references/utilities/retry.md +139 -0
- 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/dist/mcp-server/index.js +0 -0
- package/dist/mcp-server/tools/github/list-project-files.tool.d.ts +1 -1
- package/dist/mcp-server/tools/github/list-project-files.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/github/list-project-files.tool.js +3 -3
- package/dist/mcp-server/tools/github/search-code.tool.js +1 -1
- package/dist/mcp-server/tools/github/verify-dependencies.tool.js +1 -1
- package/dist/mcp-server/tools/github/view-source-file.tool.js +1 -1
- package/package.json +24 -23
|
@@ -1,233 +1,119 @@
|
|
|
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. 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
|
-
|
|
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 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
|
-
|
|
51
|
-
import { ApplicationEnvironment } from '@venizia/ignis-helpers';
|
|
33
|
+
**Deployment stages** (`Environment.*`)
|
|
52
34
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
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
|
-
|
|
50
|
+
## Common tasks
|
|
62
51
|
|
|
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`) |
|
|
52
|
+
### Read a variable with a default
|
|
67
53
|
|
|
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.
|
|
54
|
+
`defaultValue` goes inside the options object, not as a second positional argument.
|
|
75
55
|
|
|
76
56
|
```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');
|
|
57
|
+
const port = applicationEnvironment.get<string>('APP_ENV_SERVER_PORT', { defaultValue: '3000' });
|
|
93
58
|
```
|
|
94
59
|
|
|
95
|
-
###
|
|
60
|
+
### Convert a value while reading it
|
|
96
61
|
|
|
97
|
-
|
|
62
|
+
Pass `transform` to parse instead of casting.
|
|
98
63
|
|
|
99
64
|
```typescript
|
|
100
|
-
const
|
|
101
|
-
|
|
65
|
+
const timeout = applicationEnvironment.get<number>('APP_ENV_TIMEOUT', {
|
|
66
|
+
transform: value => Number(value),
|
|
67
|
+
defaultValue: 5000,
|
|
68
|
+
});
|
|
102
69
|
```
|
|
103
70
|
|
|
104
|
-
###
|
|
71
|
+
### Set or merge variables at runtime
|
|
105
72
|
|
|
106
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
76
|
+
applicationEnvironment.set('APP_ENV_FEATURE_FLAG', 'enabled');
|
|
77
|
+
applicationEnvironment.merge({ envs: { APP_ENV_REGION: 'ap-southeast-1' } });
|
|
112
78
|
```
|
|
113
79
|
|
|
114
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
229
|
-
- [Application](/guides/core-concepts/application/) -- Environment validation during startup
|
|
116
|
+
**Files:**
|
|
230
117
|
|
|
231
|
-
-
|
|
232
|
-
|
|
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
|