@dotenvx/dotenvx 0.6.3 → 0.6.5

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 CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  *a better dotenv*–from the creator of [`dotenv`](https://github.com/motdotla/dotenv).
4
4
 
5
- * [run anywhere](#run-anywhere) (cross-platform)
6
- * [multi-environment](#multiple-environments)
7
- * [encrypted envs](#encryption)
5
+ * run anywhere (cross-platform)
6
+ * multi-environment
7
+ * encrypted envs
8
8
 
9
9
   
10
10
 
@@ -62,6 +62,16 @@ More examples
62
62
  Hello World
63
63
  ```
64
64
 
65
+ </details>
66
+ * <details><summary>Go 🐹</summary><br>
67
+
68
+ ```sh
69
+ $ echo "HELLO=World" > .env && echo 'package main; import ("fmt"; "os"); func main() { fmt.Printf("Hello %s\n", os.Getenv("HELLO")) }' > main.go
70
+
71
+ $ dotenvx run -- go run main.go
72
+ Hello World
73
+ ```
74
+
65
75
  </details>
66
76
  * <details><summary>Rust 🦀</summary><br>
67
77
 
@@ -169,7 +179,7 @@ More examples
169
179
  > start
170
180
  > ./node_modules/.bin/dotenvx run -- node index.js
171
181
 
172
- [dotenvx][INFO] injecting 1 environment variable from .env
182
+ [dotenvx][info] loading env (1) from .env
173
183
  Hello World
174
184
  ```
175
185
 
@@ -192,9 +202,11 @@ More examples
192
202
 
193
203
  > Create a `.env.production` file and use `--env-file` to load it. It's straightforward, yet flexible.
194
204
  ```sh
195
- $ echo "HELLO=production" > .env.production && echo "console.log('Hello ' + process.env.HELLO)" > index.js
205
+ $ echo "HELLO=production" > .env.production
206
+ $ echo "console.log('Hello ' + process.env.HELLO)" > index.js
196
207
 
197
208
  $ dotenvx run --env-file=.env.production -- node index.js
209
+ [dotenvx][info] loading env (1) from .env.production
198
210
  Hello production
199
211
  > ^^
200
212
  ```
@@ -209,6 +221,7 @@ More examples
209
221
  $ echo "HELLO=World" > .env
210
222
 
211
223
  $ dotenvx run --env-file=.env.local --env-file=.env -- node index.js
224
+ [dotenvx][info] loading env (1) from .env.local,.env
212
225
  Hello local
213
226
  ```
214
227
 
@@ -222,6 +235,7 @@ More examples
222
235
  $ echo "HELLO=World" > .env
223
236
 
224
237
  $ dotenvx run --env-file=.env.local --env-file=.env --overload -- node index.js
238
+ [dotenvx][info] loading env (1) from .env.local,.env
225
239
  Hello World
226
240
  ```
227
241
 
@@ -231,9 +245,9 @@ More examples
231
245
  $ echo "HELLO=production" > .env.production
232
246
 
233
247
  $ dotenvx run --env-file=.env.production --verbose -- node index.js
234
- [dotenvx][VERBOSE] injecting env from /path/to/.env.production
235
- [dotenvx][VERBOSE] HELLO set
236
- [dotenvx][INFO] injecting 1 environment variable from .env.production
248
+ [dotenvx][verbose] injecting env from /path/to/.env.production
249
+ [dotenvx][verbose] HELLO set
250
+ [dotenvx][info] loading env (1) from .env.production
237
251
  Hello production
238
252
  ```
239
253
 
@@ -243,16 +257,16 @@ More examples
243
257
  $ echo "HELLO=production" > .env.production
244
258
 
245
259
  $ dotenvx run --env-file=.env.production --debug -- node index.js
246
- [dotenvx][DEBUG] configuring options
247
- [dotenvx][DEBUG] {"envFile":[".env.production"]}
248
- [dotenvx][VERBOSE] injecting env from /path/to/.env.production
249
- [dotenvx][DEBUG] reading env from /path/to/.env.production
250
- [dotenvx][DEBUG] parsing env from /path/to/.env.production
251
- [dotenvx][DEBUG] {"HELLO":"production"}
252
- [dotenvx][DEBUG] writing env from /path/to/.env.production
253
- [dotenvx][VERBOSE] HELLO set
254
- [dotenvx][DEBUG] HELLO set to production
255
- [dotenvx][INFO] injecting 1 environment variable from .env.production
260
+ [dotenvx][debug] configuring options
261
+ [dotenvx][debug] {"envFile":[".env.production"]}
262
+ [dotenvx][verbose] injecting env from /path/to/.env.production
263
+ [dotenvx][debug] reading env from /path/to/.env.production
264
+ [dotenvx][debug] parsing env from /path/to/.env.production
265
+ [dotenvx][debug] {"HELLO":"production"}
266
+ [dotenvx][debug] writing env from /path/to/.env.production
267
+ [dotenvx][verbose] HELLO set
268
+ [dotenvx][debug] HELLO set to production
269
+ [dotenvx][info] loading env (1) from .env.production
256
270
  Hello production
257
271
  ```
258
272
 
@@ -269,24 +283,8 @@ $ echo "HELLO=World" > .env && echo "console.log('Hello ' + process.env.HELLO)"
269
283
  $ echo "HELLO=production" > .env.production
270
284
 
271
285
  $ dotenvx encrypt
272
- [dotenvx][INFO] encrypted .env,.env.production to .env.vault
273
- [dotenvx][INFO]
274
- [dotenvx][INFO] try it out:
275
- [dotenvx][INFO]
276
- [dotenvx][INFO] DOTENV_KEY='<DOTENV_KEY_ENVIRONMENT>' dotenvx run -- node index.js
277
- [dotenvx][INFO]
278
- [dotenvx][INFO] next:
279
- [dotenvx][INFO]
280
- [dotenvx][INFO] 1. commit .env.vault safely to code
281
- [dotenvx][INFO] 2. set DOTENV_KEY on server (or ci)
282
- [dotenvx][INFO] 3. push your code
283
- [dotenvx][INFO]
284
- [dotenvx][INFO] tips:
285
- [dotenvx][INFO]
286
- [dotenvx][INFO] * .env.keys file holds your decryption DOTENV_KEYs
287
- [dotenvx][INFO] * DO NOT commit .env.keys to code
288
- [dotenvx][INFO] * share .env.keys file over secure channels only
289
- > :-]
286
+ [dotenvx][info] encrypted to .env.vault (.env,.env.production)
287
+ [dotenvx][info] key added to .env.keys (DOTENV_KEY_PRODUCTION)
290
288
  ```
291
289
 
292
290
  &nbsp;
@@ -294,11 +292,10 @@ $ dotenvx encrypt
294
292
  > Then load env from encrypted `.env.vault` file
295
293
 
296
294
  ```sh
297
- $ DOTENV_KEY='dotenv://:key_abc123@dotenvx.com/vault/.env.vault?environment=production' dotenvx run -- node index.js
298
- [dotenvx][INFO] injecting 1 environment variable from encrypted .env.vault
295
+ $ DOTENV_KEY='<dotenv_key_production>' dotenvx run -- node index.js
296
+ [dotenvx][info] loading env (1) from encrypted .env.vault
299
297
  Hello production
300
-
301
- > :-]
298
+ ^ :-]
302
299
  ```
303
300
 
304
301
  More examples
@@ -402,81 +399,10 @@ More examples
402
399
 
403
400
  &nbsp;
404
401
 
405
- ---
406
-
407
- ## Usage
408
-
409
- ### Guide
410
-
411
- Begin by creating a simple 'hello world' program.
412
-
413
- ```js
414
- // index.js
415
- console.log(`Hello ${process.env.HELLO}`)
416
- ```
417
-
418
- Run it.
419
-
420
- ```js
421
- $ node index.js
422
- Hello undefined
423
- ```
424
-
425
- Run it with `dotenvx`.
426
-
427
- ```sh
428
- $ dotenvx run -- node index.js
429
- [dotenvx][WARN] ENOENT: no such file or directory, open '/../../.env'
430
- Hello undefined
431
- ```
432
-
433
- It warns you when there is no `.env` file (pass the `--quiet` flag to suppress these warnings).
402
+ ## Guides
434
403
 
435
- Create the `.env` file.
436
-
437
- ```ini
438
- # env
439
- JELLO="World"
440
- ```
441
-
442
- Run it again.
443
-
444
- ```sh
445
- $ dotenvx run -- node index.js
446
- [dotenvx][INFO] injecting 0 environment variables from .env
447
- Hello undefined
448
- ```
449
-
450
- Hrm, still undefined. Pass the `--debug` flag to debug the issue. I'll give you a hint: 🍮
451
-
452
- ```sh
453
- $ dotenvx run --debug -- node index.js
454
- [dotenvx][VERBOSE] Loading env from /../../.env
455
- [dotenvx][DEBUG] Reading env from /../../.env
456
- [dotenvx][DEBUG] Parsing env from /../../.env
457
- [dotenvx][DEBUG] {"JELLO":"World"}
458
-
459
- # Oops, HELLO not JELLO ^^
460
- ```
461
-
462
- Fix your `.env` file.
463
-
464
- ```ini
465
- # .env
466
- HELLO="World"
467
- ```
468
-
469
- One last time. [Le tired](https://youtu.be/kCpjgl2baLs?t=45).
470
-
471
- ```sh
472
- $ dotenvx run -- node index.js
473
- [dotenvx][INFO] injecting 1 environment variable from .env
474
- Hello World
475
- ```
476
-
477
- 🎉 It worked!
478
-
479
- &nbsp;
404
+ * [dotenvx/docs](https://dotenvx.com/docs)
405
+ * [quickstart guide](https://dotenvx.com/docs/quickstart)
480
406
 
481
407
  ## Contributing
482
408
 
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.6.3",
2
+ "version": "0.6.5",
3
3
  "name": "@dotenvx/dotenvx",
4
4
  "description": "a better dotenv–from the creator of `dotenv`",
5
5
  "author": "@motdotla",
@@ -53,7 +53,7 @@ program
53
53
 
54
54
  // dotenvx run -- node index.js
55
55
  program.command('run')
56
- .description('inject env variables into your application process')
56
+ .description('load env into your application process')
57
57
  .option('-f, --env-file <paths...>', 'path(s) to your env file(s)', '.env')
58
58
  .option('-o, --overload', 'override existing env variables')
59
59
  .action(function () {
@@ -68,7 +68,7 @@ program.command('run')
68
68
  if (!fs.existsSync(filepath)) {
69
69
  logger.error(`you set DOTENV_KEY but your .env.vault file is missing: ${filepath}`)
70
70
  } else {
71
- logger.verbose(`injecting encrypted env from ${filepath}`)
71
+ logger.verbose(`loading env from encrypted ${filepath}`)
72
72
 
73
73
  try {
74
74
  logger.debug(`reading encrypted env from ${filepath}`)
@@ -112,7 +112,7 @@ program.command('run')
112
112
  logger.debug(`writing decrypted env from ${filepath}`)
113
113
  const result = main.write(process.env, parsed, options.overload)
114
114
 
115
- logger.info(`injecting ${result.written.size} environment ${helpers.pluralize('variable', result.written.size)} from encrypted .env.vault`)
115
+ logger.info(`loading env (${result.written.size}) from encrypted .env.vault`)
116
116
  } catch (e) {
117
117
  logger.error(e)
118
118
  }
@@ -130,7 +130,7 @@ program.command('run')
130
130
  for (const envFilepath of optionEnvFile) {
131
131
  const filepath = helpers.resolvePath(envFilepath)
132
132
 
133
- logger.verbose(`injecting env from ${filepath}`)
133
+ logger.verbose(`loading env from ${filepath}`)
134
134
 
135
135
  try {
136
136
  logger.debug(`reading env from ${filepath}`)
@@ -150,7 +150,7 @@ program.command('run')
150
150
  }
151
151
 
152
152
  if (readableFilepaths.size > 0) {
153
- logger.info(`injecting ${written.size} environment ${helpers.pluralize('variable', written.size)} from ${[...readableFilepaths]}`)
153
+ logger.info(`loading env (${written.size}) from ${[...readableFilepaths]}`)
154
154
  }
155
155
  }
156
156
 
@@ -180,6 +180,8 @@ program.command('encrypt')
180
180
  optionEnvFile = [optionEnvFile]
181
181
  }
182
182
 
183
+ const addedKeys = new Set()
184
+
183
185
  try {
184
186
  logger.verbose(`generating .env.keys from ${optionEnvFile}`)
185
187
 
@@ -203,6 +205,8 @@ program.command('encrypt')
203
205
  logger.debug(`generating ${key} as ${value}`)
204
206
 
205
207
  dotenvKeys[key] = value
208
+
209
+ addedKeys.add(key) // for info logging to user
206
210
  } else {
207
211
  logger.verbose(`existing ${key}`)
208
212
  logger.debug(`existing ${key} as ${value}`)
@@ -269,23 +273,26 @@ program.command('encrypt')
269
273
  process.exit(1)
270
274
  }
271
275
 
272
- logger.info(`encrypted ${optionEnvFile} to .env.vault`)
273
- logger.info('')
274
- logger.info('try it out:')
275
- logger.info('')
276
- logger.info(' DOTENV_KEY=\'<DOTENV_KEY_ENVIRONMENT>\' dotenvx run -- node index.js')
277
- logger.info('')
278
- logger.info('next:')
279
- logger.info('')
280
- logger.info(' 1. commit .env.vault safely to code')
281
- logger.info(' 2. set DOTENV_KEY on server (or ci)')
282
- logger.info(' 3. push your code')
283
- logger.info('')
284
- logger.info('tips:')
285
- logger.info('')
286
- logger.info(' * .env.keys file holds your decryption DOTENV_KEYs')
287
- logger.info(' * DO NOT commit .env.keys to code')
288
- logger.info(' * share .env.keys file over secure channels only')
276
+ logger.info(`encrypted to .env.vault (${optionEnvFile})`)
277
+ if (addedKeys.size > 0) {
278
+ logger.info(`${helpers.pluralize('key', addedKeys.size)} added to .env.keys (${[...addedKeys]})`)
279
+ }
280
+ logger.verbose('')
281
+ logger.verbose('try it out:')
282
+ logger.verbose('')
283
+ logger.verbose(' DOTENV_KEY=\'<DOTENV_KEY_ENVIRONMENT>\' dotenvx run -- node index.js')
284
+ logger.verbose('')
285
+ logger.verbose('next:')
286
+ logger.verbose('')
287
+ logger.verbose(' 1. commit .env.vault safely to code')
288
+ logger.verbose(' 2. set DOTENV_KEY on server (or ci)')
289
+ logger.verbose(' 3. push your code')
290
+ logger.verbose('')
291
+ logger.verbose('tips:')
292
+ logger.verbose('')
293
+ logger.verbose(' * .env.keys file holds your decryption DOTENV_KEYs')
294
+ logger.verbose(' * DO NOT commit .env.keys to code')
295
+ logger.verbose(' * share .env.keys file over secure channels only')
289
296
  })
290
297
 
291
298
  program.parse(process.argv)
@@ -10,7 +10,7 @@ const packageJson = require('./packageJson')
10
10
  const dotenvxFormat = printf(({ level, message, label, timestamp }) => {
11
11
  const formattedMessage = typeof message === 'object' ? JSON.stringify(message) : message
12
12
 
13
- return `[dotenvx@${packageJson.version}][${level.toUpperCase()}] ${formattedMessage}`
13
+ return `[dotenvx@${packageJson.version}][${level.toLowerCase()}] ${formattedMessage}`
14
14
  })
15
15
 
16
16
  const logger = createLogger({