envilder 0.5.4 → 0.5.6
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 +140 -178
- package/lib/Cli.d.ts.map +1 -1
- package/lib/Cli.js +6 -3
- package/lib/Cli.js.map +1 -1
- package/lib/cli/application/EnvilderHandler.d.ts +3 -1
- package/lib/cli/application/EnvilderHandler.d.ts.map +1 -1
- package/lib/cli/application/EnvilderHandler.js +11 -10
- package/lib/cli/application/EnvilderHandler.js.map +1 -1
- package/lib/cli/application/builders/EnvilderBuilder.d.ts +18 -0
- package/lib/cli/application/builders/EnvilderBuilder.d.ts.map +1 -0
- package/lib/cli/{domain → application/builders}/EnvilderBuilder.js +17 -5
- package/lib/cli/application/builders/EnvilderBuilder.js.map +1 -0
- package/lib/cli/domain/ports/ILogger.d.ts +6 -0
- package/lib/cli/domain/ports/ILogger.d.ts.map +1 -0
- package/lib/cli/domain/ports/ILogger.js +2 -0
- package/lib/cli/domain/ports/ILogger.js.map +1 -0
- package/lib/cli/infrastructure/ConsoleLogger.d.ts +7 -0
- package/lib/cli/infrastructure/ConsoleLogger.d.ts.map +1 -0
- package/lib/cli/infrastructure/ConsoleLogger.js +12 -0
- package/lib/cli/infrastructure/ConsoleLogger.js.map +1 -0
- package/lib/cli/infrastructure/EnvFileManager.d.ts +3 -0
- package/lib/cli/infrastructure/EnvFileManager.d.ts.map +1 -1
- package/lib/cli/infrastructure/EnvFileManager.js +8 -2
- package/lib/cli/infrastructure/EnvFileManager.js.map +1 -1
- package/lib/cli/infrastructure/PackageJsonFinder.js +3 -3
- package/lib/cli/infrastructure/PackageJsonFinder.js.map +1 -1
- package/package.json +5 -5
- package/lib/cli/domain/EnvilderBuilder.d.ts +0 -14
- package/lib/cli/domain/EnvilderBuilder.d.ts.map +0 -1
- package/lib/cli/domain/EnvilderBuilder.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
# Envilder
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
3
4
|
<img src="https://github.com/user-attachments/assets/96bf1efa-7d21-440a-a414-3a20e7f9a1f1" alt="Envilder">
|
|
4
|
-
</
|
|
5
|
+
</p>
|
|
5
6
|
|
|
6
|
-
<
|
|
7
|
+
<p align="center">
|
|
8
|
+
<b>✨ A CLI that securely centralizes your environment variables from AWS SSM as a single source of truth ✨</b>
|
|
9
|
+
</p>
|
|
7
10
|
|
|
8
11
|
<p align="center">
|
|
9
12
|
<a href="https://www.npmjs.com/package/envilder">
|
|
@@ -17,141 +20,136 @@
|
|
|
17
20
|
</a>
|
|
18
21
|
</p>
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
---
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
- **📊 Full audit trail** - All parameter access is logged in CloudTrail for compliance requirements
|
|
24
|
-
- **🧩 Single source of truth** - No more copying .env files from Notion or emails - SSM is your only source
|
|
25
|
-
- **🔁 Idempotent operations** - Overwrites values in your `.env` file *only* for variables defined in your mapping
|
|
26
|
-
file, using the latest from SSM. Variables not in the mapping file are preserved. Safe for automation.
|
|
27
|
-
- **⚙️ Environment-aware** - Use templates like `/project/${ENV}/DB_PASSWORD` to dynamically fetch the right secrets
|
|
28
|
-
- **🧱 No extra infrastructure** - Uses AWS SSM's existing reliability instead of additional secret managers
|
|
25
|
+
## Video Demonstration 🎥
|
|
29
26
|
|
|
30
|
-
|
|
27
|
+
Check out this video to learn how to use Envilder:
|
|
31
28
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
<video width="640" height="360" controls>
|
|
30
|
+
<source src="https://github.com/user-attachments/assets/3c4985e6-49e9-4f29-bf1c-130747df0ca6" type="video/mp4">
|
|
31
|
+
Your browser does not support the video tag.
|
|
32
|
+
</video>
|
|
35
33
|
|
|
36
|
-
|
|
37
|
-
echo '{"DB_PASSWORD": "/my-app/db/password"}' > param-map.json
|
|
34
|
+
---
|
|
38
35
|
|
|
39
|
-
|
|
40
|
-
envilder --map=param-map.json --envfile=.env
|
|
41
|
-
```
|
|
36
|
+
## Table of contents
|
|
42
37
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
- CI/CD secrets management pain
|
|
59
|
-
```
|
|
38
|
+
- [Envilder](#envilder)
|
|
39
|
+
- [Video Demonstration 🎥](#video-demonstration-)
|
|
40
|
+
- [Table of contents](#table-of-contents)
|
|
41
|
+
- [Features](#features)
|
|
42
|
+
- [Feature status](#feature-status)
|
|
43
|
+
- [Quick start 🚀](#quick-start-)
|
|
44
|
+
- [How it works 🛠️](#how-it-works-️)
|
|
45
|
+
- [Installation 💾](#installation-)
|
|
46
|
+
- [Usage](#usage)
|
|
47
|
+
- [Example](#example)
|
|
48
|
+
- [Working with multiple AWS profiles](#working-with-multiple-aws-profiles)
|
|
49
|
+
- [Sample output 📄](#sample-output-)
|
|
50
|
+
- [Roadmap 🗺️](#roadmap-️)
|
|
51
|
+
- [Contributing 🤝](#contributing-)
|
|
52
|
+
- [License 📄](#license-)
|
|
60
53
|
|
|
61
|
-
|
|
62
|
-
<td>
|
|
54
|
+
---
|
|
63
55
|
|
|
64
|
-
|
|
65
|
-
- Secrets stored securely in AWS SSM
|
|
66
|
-
- Automated .env file generation
|
|
67
|
-
- Consistent environments
|
|
68
|
-
- No need to share raw credentials
|
|
69
|
-
- Simple CI/CD integration
|
|
70
|
-
```
|
|
56
|
+
## Features
|
|
71
57
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
58
|
+
- **🔒 Strict access control** — AWS IAM policies control who accesses which secrets (dev vs prod)
|
|
59
|
+
- **📊 Full audit trail** — All parameter access is logged in CloudTrail for compliance
|
|
60
|
+
- **🧩 Single source of truth** — No more copying .env files from Notion or emails
|
|
61
|
+
- **🔁 Idempotent operations** — Only variables in your mapping file are overwritten; others are preserved
|
|
62
|
+
- **🧱 No extra infrastructure** — Uses AWS SSM's reliability, no new services needed
|
|
75
63
|
|
|
76
|
-
|
|
64
|
+
### Feature status
|
|
77
65
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
66
|
+
| Feature | Status | Notes |
|
|
67
|
+
|--------------------------------|---------------|-------|
|
|
68
|
+
| Mapping-based secret resolution| ✅ Implemented | |
|
|
69
|
+
| .env file generation | ✅ Implemented | |
|
|
70
|
+
| AWS profile support | ✅ Implemented | |
|
|
71
|
+
| Auto-discovery mode (`--auto`) | ❌ Not implemented | Planned |
|
|
72
|
+
| Check/sync mode (`--check`) | ❌ Not implemented | Planned |
|
|
73
|
+
| Import/push mode (`--import`) | ❌ Not implemented | Planned |
|
|
74
|
+
| Webhook/Slack notification | ❌ Not implemented | Planned |
|
|
75
|
+
| Hierarchical mapping | ❌ Not implemented | Only flat JSON mapping supported |
|
|
76
|
+
| Plugin system | ❌ Not implemented | Only AWS SSM supported |
|
|
83
77
|
|
|
84
|
-
|
|
78
|
+
---
|
|
85
79
|
|
|
86
|
-
|
|
80
|
+
## Quick start 🚀
|
|
87
81
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
- ⚙️ **Run CI/CD pipelines** - Automatically generate environment files during deployments
|
|
91
|
-
- ☁️ **Use AWS already** - Leverage your existing AWS infrastructure more effectively
|
|
92
|
-
- 🌐 **Manage multiple environments** - Switch easily between dev, staging, and production
|
|
82
|
+
```bash
|
|
83
|
+
npm install -g envilder
|
|
93
84
|
|
|
94
|
-
|
|
85
|
+
# Watch the video demonstration for detailed guidance
|
|
86
|
+
# https://github.com/user-attachments/assets/3c4985e6-49e9-4f29-bf1c-130747df0ca6
|
|
87
|
+
|
|
88
|
+
echo '{"DB_PASSWORD": "/my-app/db/password"}' > param-map.json
|
|
89
|
+
|
|
90
|
+
envilder --map=param-map.json --envfile=.env
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## How it works 🛠️
|
|
95
96
|
|
|
96
97
|
```mermaid
|
|
98
|
+
|
|
97
99
|
graph LR
|
|
98
100
|
A[Mapping File] --> B[Envilder]
|
|
99
101
|
C[AWS Credentials] --> B
|
|
100
102
|
B --> D[.env File]
|
|
101
103
|
E[SSM Parameters] --> B
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
1. 📖 **Define your mapping** - Simple JSON mapping env vars to SSM paths
|
|
105
|
-
2. 🚀 **Run Envilder** - One command with your mapping file
|
|
106
|
-
3. 🔄 **Auto-fetch from AWS** - Retrieves values using your AWS credentials
|
|
107
|
-
4. 💾 **Get your .env file** - Ready to use in your project
|
|
108
|
-
|
|
109
|
-
## ⚙️ Prerequisites
|
|
110
|
-
|
|
111
|
-
You'll need:
|
|
112
104
|
|
|
113
|
-
|
|
114
|
-
- ✅ **Node.js** - Version 20.0.0 or higher (as specified in `package.json`)
|
|
115
|
-
|
|
116
|
-
### AWS CLI setup
|
|
117
|
-
|
|
118
|
-
1. Install the AWS CLI by following the [official instructions](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
|
|
119
|
-
2. After installation, configure the AWS CLI:
|
|
105
|
+
```
|
|
120
106
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
107
|
+
1. **Define your mapping** — Simple JSON mapping env vars to SSM paths
|
|
108
|
+
2. **Run Envilder** — One command with your mapping file
|
|
109
|
+
3. **Auto-fetch from AWS** — Retrieves values using your AWS credentials
|
|
110
|
+
4. **Get your .env file** — Ready to use in your project
|
|
124
111
|
|
|
125
|
-
|
|
126
|
-
- AWS Access Key ID
|
|
127
|
-
- AWS Secret Access Key
|
|
128
|
-
- Default region name (e.g., `us-east-1`)
|
|
129
|
-
- Default output format (e.g., `json`)
|
|
112
|
+
---
|
|
130
113
|
|
|
131
|
-
|
|
114
|
+
## Installation 💾
|
|
132
115
|
|
|
133
|
-
|
|
116
|
+
**Requires:** Node.js >= 20.0.0, AWS CLI configured with SSM access
|
|
134
117
|
|
|
135
118
|
```bash
|
|
136
|
-
# Using npm
|
|
137
119
|
npm install -g envilder
|
|
138
120
|
```
|
|
139
121
|
|
|
140
|
-
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Usage
|
|
141
125
|
|
|
142
126
|
```bash
|
|
143
127
|
envilder --map=<mapping-file> --envfile=<output-file> [--profile=<aws-profile>]
|
|
144
128
|
```
|
|
145
129
|
|
|
146
|
-
| Option
|
|
147
|
-
|
|
148
|
-
| `--map`
|
|
149
|
-
| `--envfile` | Path to output .env file (required)
|
|
150
|
-
| `--profile` | AWS CLI profile to use (optional)
|
|
130
|
+
| Option | Description |
|
|
131
|
+
|-------------|---------------------------------------------|
|
|
132
|
+
| `--map` | Path to JSON mapping file (required) |
|
|
133
|
+
| `--envfile` | Path to output .env file (required) |
|
|
134
|
+
| `--profile` | AWS CLI profile to use (optional) |
|
|
135
|
+
|
|
136
|
+
### Example
|
|
151
137
|
|
|
152
|
-
|
|
138
|
+
1. **Create a parameter in AWS SSM Parameter Store using AWS CLI:**
|
|
153
139
|
|
|
154
|
-
|
|
140
|
+
```bash
|
|
141
|
+
aws ssm put-parameter --name "/path/to/ssm/token" --value "my-secret-token-value" --type "SecureString"
|
|
142
|
+
aws ssm put-parameter --name "/path/to/ssm/password" --value "my-secret-password-value" --type "SecureString"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
You can also create the parameter in a specific profile (for example, `dev-account`):
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
aws ssm put-parameter --name "/path/to/ssm/token" --value "my-secret-token-value" --type "SecureString" --profile dev-account
|
|
149
|
+
aws ssm put-parameter --name "/path/to/ssm/password" --value "my-secret-password-value" --type "SecureString" --profile dev-account
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
2. Create a mapping file `param-map.json`:
|
|
155
153
|
|
|
156
154
|
```json
|
|
157
155
|
{
|
|
@@ -160,117 +158,81 @@ envilder --map=<mapping-file> --envfile=<output-file> [--profile=<aws-profile>]
|
|
|
160
158
|
}
|
|
161
159
|
```
|
|
162
160
|
|
|
163
|
-
|
|
161
|
+
3. Generate your `.env` file:
|
|
164
162
|
|
|
165
163
|
```bash
|
|
166
164
|
envilder --map=param-map.json --envfile=.env
|
|
167
165
|
```
|
|
168
166
|
|
|
169
|
-
|
|
167
|
+
4. Watch the video demonstration for detailed guidance:
|
|
170
168
|
|
|
171
|
-
```
|
|
172
|
-
|
|
169
|
+
```plaintext
|
|
170
|
+
https://github.com/user-attachments/assets/3c4985e6-49e9-4f29-bf1c-130747df0ca6
|
|
173
171
|
```
|
|
174
172
|
|
|
175
|
-
|
|
173
|
+
---
|
|
176
174
|
|
|
177
|
-
|
|
175
|
+
## Working with multiple AWS profiles
|
|
178
176
|
|
|
179
|
-
|
|
180
|
-
or `%USERPROFILE%\.aws\credentials` on Windows):
|
|
177
|
+
Configure different profiles in your AWS credentials file (usually at `~/.aws/credentials` or `%USERPROFILE%\.aws\credentials`):
|
|
181
178
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
[dev-account]
|
|
188
|
-
aws_access_key_id=YOUR_DEV_ACCESS_KEY
|
|
189
|
-
aws_secret_access_key=YOUR_DEV_SECRET_KEY
|
|
190
|
-
|
|
191
|
-
[prod-account]
|
|
192
|
-
aws_access_key_id=YOUR_PROD_ACCESS_KEY
|
|
193
|
-
aws_secret_access_key=YOUR_PROD_SECRET_KEY
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
2. Specify which profile to use:
|
|
197
|
-
|
|
198
|
-
```bash
|
|
199
|
-
# Development environment
|
|
200
|
-
envilder --map=param-map.json --envfile=.env.development --profile=dev-account
|
|
201
|
-
|
|
202
|
-
# Production environment
|
|
203
|
-
envilder --map=param-map.json --envfile=.env.production --profile=prod-account
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
## 🛠️ Advanced usage: environment-specific parameters
|
|
179
|
+
```ini
|
|
180
|
+
[default]
|
|
181
|
+
aws_access_key_id=YOUR_DEFAULT_ACCESS_KEY
|
|
182
|
+
aws_secret_access_key=YOUR_DEFAULT_SECRET_KEY
|
|
207
183
|
|
|
208
|
-
|
|
184
|
+
[dev-account]
|
|
185
|
+
aws_access_key_id=YOUR_DEV_ACCESS_KEY
|
|
186
|
+
aws_secret_access_key=YOUR_DEV_SECRET_KEY
|
|
209
187
|
|
|
210
|
-
|
|
188
|
+
[prod-account]
|
|
189
|
+
aws_access_key_id=YOUR_PROD_ACCESS_KEY
|
|
190
|
+
aws_secret_access_key=YOUR_PROD_SECRET_KEY
|
|
191
|
+
```
|
|
211
192
|
|
|
212
|
-
|
|
213
|
-
/project/dev/DB_PASSWORD
|
|
214
|
-
/project/stage/DB_PASSWORD
|
|
215
|
-
/project/prod/DB_PASSWORD
|
|
216
|
-
```
|
|
193
|
+
Specify which profile to use:
|
|
217
194
|
|
|
218
|
-
|
|
195
|
+
```bash
|
|
196
|
+
# Development
|
|
219
197
|
|
|
220
|
-
|
|
221
|
-
{
|
|
222
|
-
"DB_PASSWORD": "/project/${ENV}/DB_PASSWORD"
|
|
223
|
-
}
|
|
224
|
-
```
|
|
198
|
+
envilder --map=param-map.json --envfile=.env.development --profile=dev-account
|
|
225
199
|
|
|
226
|
-
|
|
200
|
+
# Production
|
|
227
201
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
$env:ENV = "dev"
|
|
231
|
-
envilder --map=env-map.json --envfile=.env.dev
|
|
202
|
+
envilder --map=param-map.json --envfile=.env.production --profile=prod-account
|
|
203
|
+
```
|
|
232
204
|
|
|
233
|
-
|
|
234
|
-
$env:ENV = "stage"
|
|
235
|
-
envilder --map=env-map.json --envfile=.env.stage
|
|
236
|
-
|
|
237
|
-
# Production
|
|
238
|
-
$env:ENV = "prod"
|
|
239
|
-
envilder --map=env-map.json --envfile=.env.prod --profile=prod-account
|
|
240
|
-
```
|
|
205
|
+
---
|
|
241
206
|
|
|
242
|
-
|
|
207
|
+
## Sample output 📄
|
|
243
208
|
|
|
244
|
-
|
|
209
|
+
Example `.env` file generated:
|
|
245
210
|
|
|
246
211
|
```ini
|
|
247
212
|
SECRET_TOKEN=mockedEmail@example.com
|
|
248
213
|
SECRET_KEY=mockedPassword
|
|
249
214
|
```
|
|
250
215
|
|
|
251
|
-
|
|
216
|
+
---
|
|
252
217
|
|
|
253
|
-
|
|
218
|
+
## Roadmap 🗺️
|
|
254
219
|
|
|
255
|
-
|
|
256
|
-
- **🔄 Always fresh credentials** - Update a secret in SSM and everyone gets it automatically on next run
|
|
257
|
-
- **🛡️ Access control built-in** - Developers only see dev secrets, CI/CD systems see what they need
|
|
258
|
-
- **🧠 Zero mental overhead** - No need to remember which variables are needed - the mapping defines everything
|
|
259
|
-
- **🚫 No more sharing secrets** - Stop pasting credentials in Slack, email, or Notion documents
|
|
260
|
-
- **📋 Compliance ready** - All accesses are logged in AWS CloudTrail for auditing
|
|
220
|
+
See [ROADMAP.md](./ROADMAP.md) for planned features and ideas.
|
|
261
221
|
|
|
262
|
-
|
|
222
|
+
---
|
|
263
223
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
224
|
+
## Contributing 🤝
|
|
225
|
+
|
|
226
|
+
Contributions are welcome! Please see the [contributing guidelines](https://github.com/macalbert/envilder/blob/main/.github/pull_request_template.md).
|
|
227
|
+
|
|
228
|
+
Feel free to open issues or pull requests.
|
|
267
229
|
|
|
268
|
-
|
|
230
|
+
---
|
|
269
231
|
|
|
270
|
-
##
|
|
232
|
+
## License 📄
|
|
271
233
|
|
|
272
|
-
|
|
234
|
+
MIT © [Marçal Albert](https://github.com/macalbert).
|
|
273
235
|
|
|
274
|
-
|
|
236
|
+
See [LICENSE](./LICENSE) for details.
|
|
275
237
|
|
|
276
|
-
|
|
238
|
+
---
|
package/lib/Cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":";AAQA;;;;;;GAMG;AACH,wBAAsB,IAAI,kBA6BzB"}
|
package/lib/Cli.js
CHANGED
|
@@ -11,7 +11,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
import { dirname, join } from 'node:path';
|
|
12
12
|
import { fileURLToPath } from 'node:url';
|
|
13
13
|
import { Command } from 'commander';
|
|
14
|
-
import { EnvilderBuilder } from './cli/
|
|
14
|
+
import { EnvilderBuilder } from './cli/application/builders/EnvilderBuilder.js';
|
|
15
|
+
import { ConsoleLogger } from './cli/infrastructure/ConsoleLogger.js';
|
|
15
16
|
import { PackageJsonFinder } from './cli/infrastructure/PackageJsonFinder.js';
|
|
16
17
|
/**
|
|
17
18
|
* Parses CLI arguments and runs the environment file generator.
|
|
@@ -37,6 +38,7 @@ export function main() {
|
|
|
37
38
|
throw new Error('Missing required arguments: --map and --envfile');
|
|
38
39
|
}
|
|
39
40
|
const envilder = EnvilderBuilder.build()
|
|
41
|
+
.withConsoleLogger()
|
|
40
42
|
.withDefaultFileManager()
|
|
41
43
|
.withAwsProvider(options.profile)
|
|
42
44
|
.create();
|
|
@@ -49,7 +51,8 @@ function getVersion() {
|
|
|
49
51
|
return new PackageJsonFinder().readPackageJsonVersion(join(__dirname, '../package.json'));
|
|
50
52
|
}
|
|
51
53
|
main().catch((error) => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
const logger = new ConsoleLogger();
|
|
55
|
+
logger.error('🚨 Uh-oh! Looks like Mario fell into the wrong pipe! 🍄💥');
|
|
56
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
54
57
|
});
|
|
55
58
|
//# sourceMappingURL=Cli.js.map
|
package/lib/Cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cli.js","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":";;;;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Cli.js","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":";;;;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,UAAgB,IAAI;;QACxB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QAEnC,OAAO;aACJ,IAAI,CAAC,UAAU,CAAC;aAChB,WAAW,CAAC,2DAA2D,CAAC;aACxE,OAAO,CAAC,OAAO,CAAC;aAChB,cAAc,CACb,cAAc,EACd,yDAAyD,CAC1D;aACA,cAAc,CAAC,kBAAkB,EAAE,uCAAuC,CAAC;aAC3E,MAAM,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC;QAExD,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE/B,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE;aACrC,iBAAiB,EAAE;aACnB,sBAAsB,EAAE;aACxB,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC;aAChC,MAAM,EAAE,CAAC;QAEZ,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;CAAA;AAED,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEtC,OAAO,IAAI,iBAAiB,EAAE,CAAC,sBAAsB,CACnD,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CACnC,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { IEnvFileManager } from '../domain/ports/IEnvFileManager';
|
|
2
|
+
import type { ILogger } from '../domain/ports/ILogger';
|
|
2
3
|
import type { ISecretProvider } from '../domain/ports/ISecretProvider';
|
|
3
4
|
export declare class Envilder {
|
|
4
5
|
private keyVault;
|
|
5
6
|
private envFileManager;
|
|
6
|
-
|
|
7
|
+
private logger;
|
|
8
|
+
constructor(keyVault: ISecretProvider, envFileManager: IEnvFileManager, logger: ILogger);
|
|
7
9
|
/**
|
|
8
10
|
* Orchestrates the process of fetching environment variable values from a key vault and writing them to a local environment file.
|
|
9
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvilderHandler.d.ts","sourceRoot":"","sources":["../../../src/cli/application/EnvilderHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,cAAc,CAAkB;
|
|
1
|
+
{"version":3,"file":"EnvilderHandler.d.ts","sourceRoot":"","sources":["../../../src/cli/application/EnvilderHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,MAAM,CAAU;gBAGtB,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,eAAe,EAC/B,MAAM,EAAE,OAAO;IAOjB;;;;;;;OAOG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;YAmBhC,MAAM;YAuBN,aAAa;CAqB5B"}
|
|
@@ -8,9 +8,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
export class Envilder {
|
|
11
|
-
constructor(keyVault, envFileManager) {
|
|
11
|
+
constructor(keyVault, envFileManager, logger) {
|
|
12
12
|
this.keyVault = keyVault;
|
|
13
13
|
this.envFileManager = envFileManager;
|
|
14
|
+
this.logger = logger;
|
|
14
15
|
}
|
|
15
16
|
/**
|
|
16
17
|
* Orchestrates the process of fetching environment variable values from a key vault and writing them to a local environment file.
|
|
@@ -27,12 +28,12 @@ export class Envilder {
|
|
|
27
28
|
const currentVariables = yield this.envFileManager.loadEnvFile(envFilePath);
|
|
28
29
|
const envilded = yield this.envild(requestVariables, currentVariables);
|
|
29
30
|
yield this.envFileManager.saveEnvFile(envFilePath, envilded);
|
|
30
|
-
|
|
31
|
+
this.logger.info(`Environment File generated at '${envFilePath}'`);
|
|
31
32
|
}
|
|
32
|
-
catch (
|
|
33
|
-
const errorMessage =
|
|
34
|
-
|
|
35
|
-
throw
|
|
33
|
+
catch (_error) {
|
|
34
|
+
const errorMessage = _error instanceof Error ? _error.message : String(_error);
|
|
35
|
+
this.logger.error(`Failed to generate environment file: ${errorMessage}`);
|
|
36
|
+
throw _error;
|
|
36
37
|
}
|
|
37
38
|
});
|
|
38
39
|
}
|
|
@@ -56,15 +57,15 @@ export class Envilder {
|
|
|
56
57
|
try {
|
|
57
58
|
const value = yield this.keyVault.getSecret(secretName);
|
|
58
59
|
if (!value) {
|
|
59
|
-
|
|
60
|
+
this.logger.warn(`Warning: No value found for: '${secretName}'`);
|
|
60
61
|
return null;
|
|
61
62
|
}
|
|
62
63
|
existingEnvVariables[envVar] = value;
|
|
63
|
-
|
|
64
|
+
this.logger.info(`${envVar}=${value.length > 10 ? '*'.repeat(value.length - 3) + value.slice(-3) : '*'.repeat(value.length)}`);
|
|
64
65
|
return null;
|
|
65
66
|
}
|
|
66
|
-
catch (
|
|
67
|
-
|
|
67
|
+
catch (_error) {
|
|
68
|
+
this.logger.error(`Error fetching parameter: '${secretName}'`);
|
|
68
69
|
return `ParameterNotFound: ${secretName}`;
|
|
69
70
|
}
|
|
70
71
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvilderHandler.js","sourceRoot":"","sources":["../../../src/cli/application/EnvilderHandler.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"EnvilderHandler.js","sourceRoot":"","sources":["../../../src/cli/application/EnvilderHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { IEnvFileManager } from '../../domain/ports/IEnvFileManager.js';
|
|
2
|
+
import type { ILogger } from '../../domain/ports/ILogger';
|
|
3
|
+
import type { ISecretProvider } from '../../domain/ports/ISecretProvider.js';
|
|
4
|
+
import { Envilder } from '../EnvilderHandler.js';
|
|
5
|
+
export declare class EnvilderBuilder {
|
|
6
|
+
private provider?;
|
|
7
|
+
private fileManager?;
|
|
8
|
+
private logger?;
|
|
9
|
+
static build(): EnvilderBuilder;
|
|
10
|
+
withDefaultFileManager(): this;
|
|
11
|
+
withEnvFileManager(fileManager: IEnvFileManager): this;
|
|
12
|
+
withProvider(provider: ISecretProvider): this;
|
|
13
|
+
withLogger(logger: ILogger): this;
|
|
14
|
+
withConsoleLogger(): this;
|
|
15
|
+
withAwsProvider(profile?: string): this;
|
|
16
|
+
create(): Envilder;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=EnvilderBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvilderBuilder.d.ts","sourceRoot":"","sources":["../../../../src/cli/application/builders/EnvilderBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAI7E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAkB;IACnC,OAAO,CAAC,WAAW,CAAC,CAAkB;IACtC,OAAO,CAAC,MAAM,CAAC,CAAU;IAEzB,MAAM,CAAC,KAAK,IAAI,eAAe;IAI/B,sBAAsB,IAAI,IAAI;IAK9B,kBAAkB,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAKtD,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAK7C,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAKjC,iBAAiB,IAAI,IAAI;IAKzB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAWvC,MAAM,IAAI,QAAQ;CAenB"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { SSM } from '@aws-sdk/client-ssm';
|
|
2
2
|
import { fromIni } from '@aws-sdk/credential-providers';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { EnvFileManager } from '
|
|
3
|
+
import { AwsSsmSecretProvider } from '../../infrastructure/AwsSsmSecretProvider.js';
|
|
4
|
+
import { ConsoleLogger } from '../../infrastructure/ConsoleLogger.js';
|
|
5
|
+
import { EnvFileManager } from '../../infrastructure/EnvFileManager.js';
|
|
6
|
+
import { Envilder } from '../EnvilderHandler.js';
|
|
6
7
|
export class EnvilderBuilder {
|
|
7
8
|
static build() {
|
|
8
9
|
return new EnvilderBuilder();
|
|
9
10
|
}
|
|
10
11
|
withDefaultFileManager() {
|
|
11
|
-
this.fileManager = new EnvFileManager();
|
|
12
|
+
this.fileManager = new EnvFileManager(this.logger);
|
|
12
13
|
return this;
|
|
13
14
|
}
|
|
14
15
|
withEnvFileManager(fileManager) {
|
|
@@ -19,6 +20,14 @@ export class EnvilderBuilder {
|
|
|
19
20
|
this.provider = provider;
|
|
20
21
|
return this;
|
|
21
22
|
}
|
|
23
|
+
withLogger(logger) {
|
|
24
|
+
this.logger = logger;
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
withConsoleLogger() {
|
|
28
|
+
this.logger = new ConsoleLogger();
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
22
31
|
withAwsProvider(profile) {
|
|
23
32
|
const ssm = profile == null
|
|
24
33
|
? new SSM()
|
|
@@ -35,7 +44,10 @@ export class EnvilderBuilder {
|
|
|
35
44
|
if (!this.fileManager) {
|
|
36
45
|
throw new Error('Env file manager must be specified');
|
|
37
46
|
}
|
|
38
|
-
|
|
47
|
+
if (!this.logger) {
|
|
48
|
+
throw new Error('Logger must be specified');
|
|
49
|
+
}
|
|
50
|
+
return new Envilder(this.provider, this.fileManager, this.logger);
|
|
39
51
|
}
|
|
40
52
|
}
|
|
41
53
|
//# sourceMappingURL=EnvilderBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvilderBuilder.js","sourceRoot":"","sources":["../../../../src/cli/application/builders/EnvilderBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAIxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,OAAO,eAAe;IAK1B,MAAM,CAAC,KAAK;QACV,OAAO,IAAI,eAAe,EAAE,CAAC;IAC/B,CAAC;IAED,sBAAsB;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,MAAiB,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB,CAAC,WAA4B;QAC7C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,QAAyB;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,MAAe;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe,CAAC,OAAgB;QAC9B,MAAM,GAAG,GACP,OAAO,IAAI,IAAI;YACb,CAAC,CAAC,IAAI,GAAG,EAAE;YACX,CAAC,CAAC,IAAI,GAAG,CAAC;gBACN,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;aACxB,CAAC,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ILogger.d.ts","sourceRoot":"","sources":["../../../../src/cli/domain/ports/ILogger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ILogger.js","sourceRoot":"","sources":["../../../../src/cli/domain/ports/ILogger.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleLogger.d.ts","sourceRoot":"","sources":["../../../src/cli/infrastructure/ConsoleLogger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,qBAAa,aAAc,YAAW,OAAO;IAC3C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleLogger.js","sourceRoot":"","sources":["../../../src/cli/infrastructure/ConsoleLogger.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACxB,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { IEnvFileManager } from '../domain/ports/IEnvFileManager';
|
|
2
|
+
import type { ILogger } from '../domain/ports/ILogger';
|
|
2
3
|
export declare class EnvFileManager implements IEnvFileManager {
|
|
4
|
+
private logger;
|
|
5
|
+
constructor(logger: ILogger);
|
|
3
6
|
loadMapFile(mapPath: string): Promise<Record<string, string>>;
|
|
4
7
|
loadEnvFile(envFilePath: string): Promise<Record<string, string>>;
|
|
5
8
|
saveEnvFile(envFilePath: string, envVariables: Record<string, string>): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvFileManager.d.ts","sourceRoot":"","sources":["../../../src/cli/infrastructure/EnvFileManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"EnvFileManager.d.ts","sourceRoot":"","sources":["../../../src/cli/infrastructure/EnvFileManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,MAAM,CAAU;gBACZ,MAAM,EAAE,OAAO;IAOrB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAU7D,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAajE,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC;IAOhB,OAAO,CAAC,cAAc;CAGvB"}
|
|
@@ -10,14 +10,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import * as fs from 'node:fs/promises';
|
|
11
11
|
import * as dotenv from 'dotenv';
|
|
12
12
|
export class EnvFileManager {
|
|
13
|
+
constructor(logger) {
|
|
14
|
+
if (!logger) {
|
|
15
|
+
throw new Error('Logger must be specified');
|
|
16
|
+
}
|
|
17
|
+
this.logger = logger;
|
|
18
|
+
}
|
|
13
19
|
loadMapFile(mapPath) {
|
|
14
20
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15
21
|
const content = yield fs.readFile(mapPath, 'utf-8');
|
|
16
22
|
try {
|
|
17
23
|
return JSON.parse(content);
|
|
18
24
|
}
|
|
19
|
-
catch (
|
|
20
|
-
|
|
25
|
+
catch (_err) {
|
|
26
|
+
this.logger.error(`Error parsing JSON from ${mapPath}`);
|
|
21
27
|
throw new Error(`Invalid JSON in parameter map file: ${mapPath}`);
|
|
22
28
|
}
|
|
23
29
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvFileManager.js","sourceRoot":"","sources":["../../../src/cli/infrastructure/EnvFileManager.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"EnvFileManager.js","sourceRoot":"","sources":["../../../src/cli/infrastructure/EnvFileManager.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAIjC,MAAM,OAAO,cAAc;IAEzB,YAAY,MAAe;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEK,WAAW,CAAC,OAAe;;YAC/B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,IAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;KAAA;IAEK,WAAW,CAAC,WAAmB;;YACnC,MAAM,YAAY,GAA2B,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC/B,CAAC;YAAC,WAAM,CAAC;gBACP,OAAO,YAAY,CAAC;YACtB,CAAC;YACD,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACnE,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YACvC,OAAO,YAAY,CAAC;QACtB,CAAC;KAAA;IAEK,WAAW,CACf,WAAmB,EACnB,YAAoC;;YAEpC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;iBAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;iBAC7D,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;KAAA;IAEO,cAAc,CAAC,KAAa;QAClC,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;CACF"}
|
|
@@ -20,11 +20,11 @@ export class PackageJsonFinder {
|
|
|
20
20
|
}
|
|
21
21
|
return pkg.version;
|
|
22
22
|
}
|
|
23
|
-
catch (
|
|
24
|
-
if (this.isEnoentError(
|
|
23
|
+
catch (_err) {
|
|
24
|
+
if (this.isEnoentError(_err)) {
|
|
25
25
|
throw new Error('package.json not found');
|
|
26
26
|
}
|
|
27
|
-
throw new Error(`Failed to read or parse package.json: ${
|
|
27
|
+
throw new Error(`Failed to read or parse package.json: ${_err instanceof Error ? _err.message : String(_err)}`);
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackageJsonFinder.js","sourceRoot":"","sources":["../../../src/cli/infrastructure/PackageJsonFinder.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,OAAO,iBAAiB;IACtB,sBAAsB,CAAC,eAAuB;;YAClD,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBAC3D,MAAM,GAAG,GAA0B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEvD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAC7D,CAAC;gBAED,OAAO,GAAG,CAAC,OAAO,CAAC;YACrB,CAAC;YAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"PackageJsonFinder.js","sourceRoot":"","sources":["../../../src/cli/infrastructure/PackageJsonFinder.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,OAAO,iBAAiB;IACtB,sBAAsB,CAAC,eAAuB;;YAClD,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBAC3D,MAAM,GAAG,GAA0B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEvD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAC7D,CAAC;gBAED,OAAO,GAAG,CAAC,OAAO,CAAC;YACrB,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;gBACd,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAC5C,CAAC;gBAED,MAAM,IAAI,KAAK,CACb,yCAAyC,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAC/F,CAAC;YACJ,CAAC;QACH,CAAC;KAAA;IAEO,aAAa,CAAC,GAAY;QAChC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,MAAM,IAAI,GAAG,IAAK,GAAyB,CAAC,IAAI,KAAK,QAAQ,CAAC;IACvE,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "envilder",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.6",
|
|
4
4
|
"description": "A CLI that securely centralizes your environment variables from AWS SSM as a single source of truth",
|
|
5
5
|
"main": "./lib/Cli.js",
|
|
6
6
|
"bin": {
|
|
@@ -67,13 +67,13 @@
|
|
|
67
67
|
"picocolors": "^1.1.0"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@biomejs/biome": "^
|
|
71
|
-
"@secretlint/secretlint-rule-preset-recommend": "^
|
|
70
|
+
"@biomejs/biome": "^2.0.6",
|
|
71
|
+
"@secretlint/secretlint-rule-preset-recommend": "^10.1.1",
|
|
72
72
|
"@testcontainers/localstack": "^11.0.1",
|
|
73
73
|
"@types/glob": "^8.1.0",
|
|
74
74
|
"@vitest/coverage-v8": "^3.1.1",
|
|
75
75
|
"glob": "^11.0.2",
|
|
76
|
-
"secretlint": "^
|
|
76
|
+
"secretlint": "^10.1.1",
|
|
77
77
|
"testcontainers": "^11.0.1",
|
|
78
78
|
"ts-node": "^10.9.2",
|
|
79
79
|
"typescript": "^5.6.2",
|
|
@@ -82,4 +82,4 @@
|
|
|
82
82
|
"engines": {
|
|
83
83
|
"node": ">=20.0.0"
|
|
84
84
|
}
|
|
85
|
-
}
|
|
85
|
+
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Envilder } from '../application/EnvilderHandler.js';
|
|
2
|
-
import type { IEnvFileManager } from './ports/IEnvFileManager.js';
|
|
3
|
-
import type { ISecretProvider } from './ports/ISecretProvider.js';
|
|
4
|
-
export declare class EnvilderBuilder {
|
|
5
|
-
private provider?;
|
|
6
|
-
private fileManager?;
|
|
7
|
-
static build(): EnvilderBuilder;
|
|
8
|
-
withDefaultFileManager(): this;
|
|
9
|
-
withEnvFileManager(fileManager: IEnvFileManager): this;
|
|
10
|
-
withProvider(provider: ISecretProvider): this;
|
|
11
|
-
withAwsProvider(profile?: string): this;
|
|
12
|
-
create(): Envilder;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=EnvilderBuilder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EnvilderBuilder.d.ts","sourceRoot":"","sources":["../../../src/cli/domain/EnvilderBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAG7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAkB;IACnC,OAAO,CAAC,WAAW,CAAC,CAAkB;IAEtC,MAAM,CAAC,KAAK,IAAI,eAAe;IAI/B,sBAAsB,IAAI,IAAI;IAK9B,kBAAkB,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAKtD,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAK7C,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAYvC,MAAM,IAAI,QAAQ;CAWnB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EnvilderBuilder.js","sourceRoot":"","sources":["../../../src/cli/domain/EnvilderBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAIrE,MAAM,OAAO,eAAe;IAI1B,MAAM,CAAC,KAAK;QACV,OAAO,IAAI,eAAe,EAAE,CAAC;IAC/B,CAAC;IAED,sBAAsB;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB,CAAC,WAA4B;QAC7C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,QAAyB;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe,CAAC,OAAgB;QAC9B,MAAM,GAAG,GACP,OAAO,IAAI,IAAI;YACb,CAAC,CAAC,IAAI,GAAG,EAAE;YACX,CAAC,CAAC,IAAI,GAAG,CAAC;gBACN,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;aACxB,CAAC,CAAC;QAE5B,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;CACF"}
|