+7
-2
@@ -57,5 +57,10 @@ "use strict"; | ||
| try { | ||
| // If no value was given and default/devDefault were provided, return the appropriate default | ||
| // value without passing it through validation | ||
| // If no value was given and default/devDefault/testDefault were provided, return the | ||
| // appropriate default value without passing it through validation | ||
| if (rawValue === undefined) { | ||
| // Use testDefault only when NODE_ENV is 'test'. Takes priority over devDefault and default. | ||
| if (rawNodeEnv === 'test' && Object.hasOwn(spec, 'testDefault')) { | ||
| cleanedEnv[k] = spec.testDefault; | ||
| continue; | ||
| } | ||
| // Use devDefault values only if NODE_ENV was explicitly set, and isn't 'production' | ||
@@ -62,0 +67,0 @@ var usingDevDefault = rawNodeEnv && rawNodeEnv !== 'production' && Object.hasOwn(spec, 'devDefault'); |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"} |
+55
-1
@@ -28,2 +28,8 @@ export interface Spec<T> { | ||
| /** | ||
| * A fallback value to use only when NODE_ENV is 'test'. Takes priority over `devDefault` and `default`. | ||
| * Unlike the `testOnly()` helper (which wraps a `devDefault` value), `testDefault` can be combined | ||
| * with both `default` and `devDefault` to specify distinct values for production, development, and test. | ||
| */ | ||
| testDefault?: NonNullable<T> | undefined; | ||
| /** | ||
| * A function (env -> boolean) that allows an env var to be required only when certain | ||
@@ -39,10 +45,46 @@ * conditions are met with the rest of the env object. Use With default: undefined. | ||
| } | { | ||
| testDefault: undefined; | ||
| } | { | ||
| default: undefined; | ||
| devDefault: undefined; | ||
| } | { | ||
| default: undefined; | ||
| testDefault: undefined; | ||
| } | { | ||
| devDefault: undefined; | ||
| testDefault: undefined; | ||
| } | { | ||
| default: undefined; | ||
| devDefault: undefined; | ||
| testDefault: undefined; | ||
| } | { | ||
| default: NonNullable<T>; | ||
| devDefault: undefined; | ||
| } | { | ||
| default: NonNullable<T>; | ||
| testDefault: undefined; | ||
| } | { | ||
| devDefault: NonNullable<T>; | ||
| testDefault: undefined; | ||
| } | { | ||
| default: undefined; | ||
| devDefault: NonNullable<T>; | ||
| } | { | ||
| default: undefined; | ||
| testDefault: NonNullable<T>; | ||
| } | { | ||
| devDefault: undefined; | ||
| testDefault: NonNullable<T>; | ||
| } | { | ||
| default: NonNullable<T>; | ||
| devDefault: NonNullable<T>; | ||
| testDefault: undefined; | ||
| } | { | ||
| default: NonNullable<T>; | ||
| devDefault: undefined; | ||
| testDefault: NonNullable<T>; | ||
| } | { | ||
| default: undefined; | ||
| devDefault: NonNullable<T>; | ||
| testDefault: NonNullable<T>; | ||
| }; | ||
@@ -54,6 +96,18 @@ type RequiredAttrs<T> = { | ||
| } | { | ||
| testDefault: NonNullable<T>; | ||
| } | { | ||
| devDefault: NonNullable<T>; | ||
| default: NonNullable<T>; | ||
| } | { | ||
| testDefault: NonNullable<T>; | ||
| default: NonNullable<T>; | ||
| } | { | ||
| testDefault: NonNullable<T>; | ||
| devDefault: NonNullable<T>; | ||
| } | { | ||
| testDefault: NonNullable<T>; | ||
| devDefault: NonNullable<T>; | ||
| default: NonNullable<T>; | ||
| } | {}; | ||
| type DefaultKeys = 'default' | 'devDefault'; | ||
| type DefaultKeys = 'default' | 'devDefault' | 'testDefault'; | ||
| type OptionalSpec<T> = Spec<T> & OptionalAttrs<T>; | ||
@@ -60,0 +114,0 @@ type OptionalTypelessSpec = Omit<OptionalSpec<unknown>, 'choices'>; |
+8
-8
| { | ||
| "name": "envalid", | ||
| "version": "8.1.1", | ||
| "version": "8.2.0", | ||
| "description": "Validation for your environment variables", | ||
@@ -44,9 +44,9 @@ "main": "dist/index.js", | ||
| "@arethetypeswrong/cli": "0.18.2", | ||
| "@biomejs/biome": "2.0.6", | ||
| "@types/node": "24.0.13", | ||
| "@vitest/coverage-v8": "3.2.4", | ||
| "expect-type": "1.2.2", | ||
| "@biomejs/biome": "2.4.4", | ||
| "@types/node": "25.3.2", | ||
| "@vitest/coverage-v8": "4.0.18", | ||
| "expect-type": "1.3.0", | ||
| "husky": "9.1.7", | ||
| "typescript": "5.2.2", | ||
| "vitest": "3.2.4" | ||
| "vitest": "4.0.18" | ||
| }, | ||
@@ -57,6 +57,6 @@ "author": "Aaron Franks", | ||
| "hooks": { | ||
| "pre-commit": "yarn lint && yarn tsc", | ||
| "pre-push": "yarn test" | ||
| "pre-commit": "npm run lint && npm run tsc", | ||
| "pre-push": "npm run test" | ||
| } | ||
| } | ||
| } |
+18
-1
@@ -108,2 +108,7 @@ <p align="center"> | ||
| for development and testing. | ||
| - `testDefault` - A fallback value to use _only_ when `NODE_ENV=test`. When provided, it takes | ||
| priority over both `devDefault` and `default` in test environments. Unlike the `testOnly()` | ||
| helper (which is wrapped around a `devDefault` and therefore can't coexist with a separate | ||
| dev value), `testDefault` can be combined with `default` and `devDefault` to provide | ||
| distinct values for production, development, and test. | ||
| - `desc` - A string that describes the env var. | ||
@@ -224,3 +229,3 @@ - `example` - An example value for the env var. | ||
| The `testOnly` helper function is available for setting a default value for an env var only when `NODE_ENV=test`. It is recommended to use this function along with `devDefault`. For example: | ||
| The `testOnly` helper function is available for setting a default value for an env var only when `NODE_ENV=test`. It is used by wrapping a `devDefault` value: | ||
@@ -233,2 +238,14 @@ ```js | ||
| Because `testOnly` is applied via `devDefault`, you cannot use it to express both a development default _and_ a separate test default. For that, prefer the `testDefault` spec attribute, which can be combined freely with `default` and `devDefault`: | ||
| ```js | ||
| const env = cleanEnv(process.env, { | ||
| SOME_VAR: envalid.str({ | ||
| default: 'productionValue', | ||
| devDefault: 'devValue', | ||
| testDefault: 'myTestValue', | ||
| }), | ||
| }) | ||
| ``` | ||
| For more context see [this issue](https://github.com/af/envalid/issues/32). | ||
@@ -235,0 +252,0 @@ |
+8
-2
@@ -70,5 +70,11 @@ import { EnvError, EnvMissingError } from './errors' | ||
| try { | ||
| // If no value was given and default/devDefault were provided, return the appropriate default | ||
| // value without passing it through validation | ||
| // If no value was given and default/devDefault/testDefault were provided, return the | ||
| // appropriate default value without passing it through validation | ||
| if (rawValue === undefined) { | ||
| // Use testDefault only when NODE_ENV is 'test'. Takes priority over devDefault and default. | ||
| if (rawNodeEnv === 'test' && Object.hasOwn(spec, 'testDefault')) { | ||
| cleanedEnv[k] = spec.testDefault | ||
| continue | ||
| } | ||
| // Use devDefault values only if NODE_ENV was explicitly set, and isn't 'production' | ||
@@ -75,0 +81,0 @@ const usingDevDefault = |
+22
-1
@@ -27,2 +27,8 @@ export interface Spec<T> { | ||
| devDefault?: NonNullable<T> | undefined | ||
| /** | ||
| * A fallback value to use only when NODE_ENV is 'test'. Takes priority over `devDefault` and `default`. | ||
| * Unlike the `testOnly()` helper (which wraps a `devDefault` value), `testDefault` can be combined | ||
| * with both `default` and `devDefault` to specify distinct values for production, development, and test. | ||
| */ | ||
| testDefault?: NonNullable<T> | undefined | ||
@@ -39,12 +45,27 @@ /** | ||
| | { devDefault: undefined } | ||
| | { testDefault: undefined } | ||
| | { default: undefined; devDefault: undefined } | ||
| | { default: undefined; testDefault: undefined } | ||
| | { devDefault: undefined; testDefault: undefined } | ||
| | { default: undefined; devDefault: undefined; testDefault: undefined } | ||
| | { default: NonNullable<T>; devDefault: undefined } | ||
| | { default: NonNullable<T>; testDefault: undefined } | ||
| | { devDefault: NonNullable<T>; testDefault: undefined } | ||
| | { default: undefined; devDefault: NonNullable<T> } | ||
| | { default: undefined; testDefault: NonNullable<T> } | ||
| | { devDefault: undefined; testDefault: NonNullable<T> } | ||
| | { default: NonNullable<T>; devDefault: NonNullable<T>; testDefault: undefined } | ||
| | { default: NonNullable<T>; devDefault: undefined; testDefault: NonNullable<T> } | ||
| | { default: undefined; devDefault: NonNullable<T>; testDefault: NonNullable<T> } | ||
| type RequiredAttrs<T> = | ||
| | { default: NonNullable<T> } | ||
| | { devDefault: NonNullable<T> } | ||
| | { testDefault: NonNullable<T> } | ||
| | { devDefault: NonNullable<T>; default: NonNullable<T> } | ||
| | { testDefault: NonNullable<T>; default: NonNullable<T> } | ||
| | { testDefault: NonNullable<T>; devDefault: NonNullable<T> } | ||
| | { testDefault: NonNullable<T>; devDefault: NonNullable<T>; default: NonNullable<T> } | ||
| | {} | ||
| type DefaultKeys = 'default' | 'devDefault' | ||
| type DefaultKeys = 'default' | 'devDefault' | 'testDefault' | ||
@@ -51,0 +72,0 @@ type OptionalSpec<T> = Spec<T> & OptionalAttrs<T> |
88757
5.15%1514
5.95%273
6.64%