@efebia/one-env 1.0.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/LICENSE +21 -0
- package/README.md +296 -0
- package/bin/one-env +2 -0
- package/lib/cli/commands/generate.d.ts +11 -0
- package/lib/cli/commands/generate.d.ts.map +1 -0
- package/lib/cli/commands/generate.js +57 -0
- package/lib/cli/commands/generate.js.map +1 -0
- package/lib/cli/commands/validate-aws.d.ts +11 -0
- package/lib/cli/commands/validate-aws.d.ts.map +1 -0
- package/lib/cli/commands/validate-aws.js +64 -0
- package/lib/cli/commands/validate-aws.js.map +1 -0
- package/lib/cli/commands/validate.d.ts +7 -0
- package/lib/cli/commands/validate.d.ts.map +1 -0
- package/lib/cli/commands/validate.js +60 -0
- package/lib/cli/commands/validate.js.map +1 -0
- package/lib/cli/env-tool.d.ts +11 -0
- package/lib/cli/env-tool.d.ts.map +1 -0
- package/lib/cli/env-tool.js +60 -0
- package/lib/cli/env-tool.js.map +1 -0
- package/lib/cli/types.d.ts +70 -0
- package/lib/cli/types.d.ts.map +1 -0
- package/lib/cli/types.js +5 -0
- package/lib/cli/types.js.map +1 -0
- package/lib/cli/utils/aws.d.ts +20 -0
- package/lib/cli/utils/aws.d.ts.map +1 -0
- package/lib/cli/utils/aws.js +50 -0
- package/lib/cli/utils/aws.js.map +1 -0
- package/lib/cli/utils/file.d.ts +35 -0
- package/lib/cli/utils/file.d.ts.map +1 -0
- package/lib/cli/utils/file.js +72 -0
- package/lib/cli/utils/file.js.map +1 -0
- package/lib/cli/utils/formatting.d.ts +50 -0
- package/lib/cli/utils/formatting.d.ts.map +1 -0
- package/lib/cli/utils/formatting.js +136 -0
- package/lib/cli/utils/formatting.js.map +1 -0
- package/lib/cli/utils/schema-loader.d.ts +40 -0
- package/lib/cli/utils/schema-loader.d.ts.map +1 -0
- package/lib/cli/utils/schema-loader.js +119 -0
- package/lib/cli/utils/schema-loader.js.map +1 -0
- package/lib/cli/utils/validation.d.ts +40 -0
- package/lib/cli/utils/validation.d.ts.map +1 -0
- package/lib/cli/utils/validation.js +116 -0
- package/lib/cli/utils/validation.js.map +1 -0
- package/lib/env-loader.d.ts +97 -0
- package/lib/env-loader.d.ts.map +1 -0
- package/lib/env-loader.js +199 -0
- package/lib/env-loader.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core validation utilities for the environment CLI tool
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod/v4';
|
|
5
|
+
import { ValidationResult, ValidationStatistics, FormattedIssue } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Validates environment data against the schema
|
|
8
|
+
* @param envData - Environment data to validate
|
|
9
|
+
* @param schema - Zod schema to validate against
|
|
10
|
+
* @param source - Source identifier (filename or secret name)
|
|
11
|
+
* @param location - Optional location (e.g., AWS region)
|
|
12
|
+
* @returns Validation result with statistics
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateEnvData(envData: any, schema: z.ZodSchema<any>, source: string, location?: string): ValidationResult;
|
|
15
|
+
/**
|
|
16
|
+
* Calculates validation statistics
|
|
17
|
+
* @param envData - Environment data being validated
|
|
18
|
+
* @param schema - Zod schema being used
|
|
19
|
+
* @param validationResult - Result from Zod validation
|
|
20
|
+
* @returns Validation statistics
|
|
21
|
+
*/
|
|
22
|
+
export declare function calculateValidationStatistics(envData: any, schema: z.ZodSchema<any>, validationResult: {
|
|
23
|
+
success: boolean;
|
|
24
|
+
error?: z.ZodError;
|
|
25
|
+
}): ValidationStatistics;
|
|
26
|
+
/**
|
|
27
|
+
* Formats Zod validation errors
|
|
28
|
+
* @param zodError - Zod error object
|
|
29
|
+
* @param envData - Original environment data
|
|
30
|
+
* @returns Formatted issues array
|
|
31
|
+
*/
|
|
32
|
+
export declare function formatZodError(zodError: z.ZodError, envData: any): FormattedIssue[];
|
|
33
|
+
/**
|
|
34
|
+
* Formats a value for display, with sensitive field masking
|
|
35
|
+
* @param path - Field path
|
|
36
|
+
* @param value - Value to format
|
|
37
|
+
* @returns Formatted string
|
|
38
|
+
*/
|
|
39
|
+
export declare function formatValue(value: any): string;
|
|
40
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAErF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC3B,OAAO,EAAE,GAAG,EACZ,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EACxB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAClB,gBAAgB,CAiBlB;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CACzC,OAAO,EAAE,GAAG,EACZ,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EACxB,gBAAgB,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAA;CAAE,GAC3D,oBAAoB,CAmCtB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,cAAc,EAAE,CAanF;AAYD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAU9C"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core validation utilities for the environment CLI tool
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Validates environment data against the schema
|
|
6
|
+
* @param envData - Environment data to validate
|
|
7
|
+
* @param schema - Zod schema to validate against
|
|
8
|
+
* @param source - Source identifier (filename or secret name)
|
|
9
|
+
* @param location - Optional location (e.g., AWS region)
|
|
10
|
+
* @returns Validation result with statistics
|
|
11
|
+
*/
|
|
12
|
+
export function validateEnvData(envData, schema, source, location) {
|
|
13
|
+
const validationResult = schema.safeParse(envData);
|
|
14
|
+
const statistics = calculateValidationStatistics(envData, schema, validationResult);
|
|
15
|
+
return {
|
|
16
|
+
success: validationResult.success,
|
|
17
|
+
source,
|
|
18
|
+
location,
|
|
19
|
+
validFields: statistics.validFields,
|
|
20
|
+
invalidFields: statistics.invalidFields,
|
|
21
|
+
missingFields: statistics.missingFields,
|
|
22
|
+
allMissingFields: statistics.allMissingFields,
|
|
23
|
+
data: validationResult.success ? validationResult.data : null,
|
|
24
|
+
error: validationResult.success ? undefined : {
|
|
25
|
+
formattedIssues: formatZodError(validationResult.error, envData)
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Calculates validation statistics
|
|
31
|
+
* @param envData - Environment data being validated
|
|
32
|
+
* @param schema - Zod schema being used
|
|
33
|
+
* @param validationResult - Result from Zod validation
|
|
34
|
+
* @returns Validation statistics
|
|
35
|
+
*/
|
|
36
|
+
export function calculateValidationStatistics(envData, schema, validationResult) {
|
|
37
|
+
const schemaShape = schema.shape;
|
|
38
|
+
const totalFields = Object.keys(schemaShape).length;
|
|
39
|
+
const providedFields = Object.keys(envData || {}).length;
|
|
40
|
+
// Find all missing REQUIRED fields (not provided at all)
|
|
41
|
+
const requiredFields = Object.keys(schemaShape).filter(fieldName => {
|
|
42
|
+
const fieldSchema = schemaShape[fieldName];
|
|
43
|
+
const def = fieldSchema?._def;
|
|
44
|
+
// Check if field is optional, nullable, or has a default value
|
|
45
|
+
const isOptional = def?.typeName === 'ZodOptional' || def?.typeName === 'ZodNullable';
|
|
46
|
+
const hasDefault = def?.defaultValue !== undefined;
|
|
47
|
+
return !(isOptional || hasDefault);
|
|
48
|
+
});
|
|
49
|
+
const providedFieldNames = Object.keys(envData || {});
|
|
50
|
+
const allMissingFields = requiredFields.filter(field => !providedFieldNames.includes(field));
|
|
51
|
+
const missingFields = allMissingFields.length;
|
|
52
|
+
// Count validation errors that are NOT due to missing fields
|
|
53
|
+
const invalidButPresentFields = validationResult.success || !validationResult.error ? 0 :
|
|
54
|
+
validationResult.error.issues.filter((issue) => {
|
|
55
|
+
const fieldName = issue.path[0];
|
|
56
|
+
return fieldName && providedFieldNames.includes(String(fieldName));
|
|
57
|
+
}).length;
|
|
58
|
+
const validFieldsCount = validationResult.success ? totalFields : providedFields - invalidButPresentFields;
|
|
59
|
+
return {
|
|
60
|
+
totalFields,
|
|
61
|
+
providedFields,
|
|
62
|
+
validFields: validFieldsCount,
|
|
63
|
+
invalidFields: invalidButPresentFields,
|
|
64
|
+
missingFields,
|
|
65
|
+
allMissingFields,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Formats Zod validation errors
|
|
70
|
+
* @param zodError - Zod error object
|
|
71
|
+
* @param envData - Original environment data
|
|
72
|
+
* @returns Formatted issues array
|
|
73
|
+
*/
|
|
74
|
+
export function formatZodError(zodError, envData) {
|
|
75
|
+
return zodError.issues.map((issue) => {
|
|
76
|
+
const field = issue.path.join('.');
|
|
77
|
+
const actualValue = field && envData ? getNestedValue(envData, field) : undefined;
|
|
78
|
+
return {
|
|
79
|
+
path: field || 'root',
|
|
80
|
+
message: issue.message,
|
|
81
|
+
code: issue.code,
|
|
82
|
+
actualValue: actualValue !== undefined ? formatValue(actualValue) : undefined,
|
|
83
|
+
expectedType: issue.expected,
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Gets a nested value from an object using dot notation
|
|
89
|
+
* @param obj - Object to get value from
|
|
90
|
+
* @param path - Dot-separated path
|
|
91
|
+
* @returns Value at path or undefined
|
|
92
|
+
*/
|
|
93
|
+
function getNestedValue(obj, path) {
|
|
94
|
+
return path.split('.').reduce((current, key) => current?.[key], obj);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Formats a value for display, with sensitive field masking
|
|
98
|
+
* @param path - Field path
|
|
99
|
+
* @param value - Value to format
|
|
100
|
+
* @returns Formatted string
|
|
101
|
+
*/
|
|
102
|
+
export function formatValue(value) {
|
|
103
|
+
// Format different value types
|
|
104
|
+
if (value === null)
|
|
105
|
+
return 'null';
|
|
106
|
+
if (value === undefined)
|
|
107
|
+
return 'undefined';
|
|
108
|
+
if (typeof value === 'string')
|
|
109
|
+
return `"${value}"`;
|
|
110
|
+
if (typeof value === 'number')
|
|
111
|
+
return value.toString();
|
|
112
|
+
if (typeof value === 'boolean')
|
|
113
|
+
return value.toString();
|
|
114
|
+
return String(value);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/cli/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC3B,OAAY,EACZ,MAAwB,EACxB,MAAc,EACd,QAAiB;IAEjB,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAEpF,OAAO;QACH,OAAO,EAAE,gBAAgB,CAAC,OAAO;QACjC,MAAM;QACN,QAAQ;QACR,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;QAC7C,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAC7D,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1C,eAAe,EAAE,cAAc,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC;SACnE;KACJ,CAAC;AACN,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CACzC,OAAY,EACZ,MAAwB,EACxB,gBAA0D;IAE1D,MAAM,WAAW,GAAI,MAAc,CAAC,KAAK,CAAC;IAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAEzD,yDAAyD;IACzD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;QAC/D,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,WAAW,EAAE,IAAI,CAAC;QAC9B,+DAA+D;QAC/D,MAAM,UAAU,GAAG,GAAG,EAAE,QAAQ,KAAK,aAAa,IAAI,GAAG,EAAE,QAAQ,KAAK,aAAa,CAAC;QACtF,MAAM,UAAU,GAAG,GAAG,EAAE,YAAY,KAAK,SAAS,CAAC;QACnD,OAAO,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7F,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAE9C,6DAA6D;IAC7D,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE;YAChD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO,SAAS,IAAI,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC,MAAM,CAAC;IAEd,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,GAAG,uBAAuB,CAAC;IAE3G,OAAO;QACH,WAAW;QACX,cAAc;QACd,WAAW,EAAE,gBAAgB;QAC7B,aAAa,EAAE,uBAAuB;QACtC,aAAa;QACb,gBAAgB;KACnB,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAAoB,EAAE,OAAY;IAC7D,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAiB,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAElF,OAAO;YACH,IAAI,EAAE,KAAK,IAAI,MAAM;YACrB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;YAC7E,YAAY,EAAG,KAAa,CAAC,QAAQ;SACxC,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,GAAQ,EAAE,IAAY;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACzE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAU;IAGlC,+BAA+B;IAC/B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,KAAK,GAAG,CAAC;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IACxD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
/**
|
|
3
|
+
* Modern Environment Loader with fluent API and full type safety
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* ```typescript
|
|
7
|
+
* import { createEnv } from '@root/libs/env';
|
|
8
|
+
* import MySchema from './schema';
|
|
9
|
+
*
|
|
10
|
+
* // Create typed env instance
|
|
11
|
+
* const env = createEnv({ schema: MySchema, file: "env.local.yml" });
|
|
12
|
+
*
|
|
13
|
+
* // OR with JSON from process.env
|
|
14
|
+
* const env = createEnv({ schema: MySchema, env: "envs" });
|
|
15
|
+
*
|
|
16
|
+
* // Use with full type safety and autocomplete
|
|
17
|
+
* const port = env.get("port"); // Typed!
|
|
18
|
+
* const { optional_key } = env.getOptional("optional_key");
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class EnvLoader<TSchema extends z.ZodSchema<any>> {
|
|
22
|
+
private envData;
|
|
23
|
+
private schema;
|
|
24
|
+
private validatedEnv;
|
|
25
|
+
private initialized;
|
|
26
|
+
/**
|
|
27
|
+
* Initialize the environment loader
|
|
28
|
+
* @param options Either { schema, file } for YAML or { schema, env } for JSON
|
|
29
|
+
*/
|
|
30
|
+
init(options: {
|
|
31
|
+
schema: TSchema;
|
|
32
|
+
file: string;
|
|
33
|
+
} | {
|
|
34
|
+
schema: TSchema;
|
|
35
|
+
env: string;
|
|
36
|
+
}): void;
|
|
37
|
+
/**
|
|
38
|
+
* Load environment data from file or process.env
|
|
39
|
+
*/
|
|
40
|
+
private loadEnvironmentData;
|
|
41
|
+
/**
|
|
42
|
+
* Validate environment variables against the schema
|
|
43
|
+
*/
|
|
44
|
+
private validateEnvironment;
|
|
45
|
+
/**
|
|
46
|
+
* Get required environment variable(s) with type safety
|
|
47
|
+
*/
|
|
48
|
+
get<K extends keyof z.infer<TSchema>>(key: K): z.infer<TSchema>[K];
|
|
49
|
+
get<K extends keyof z.infer<TSchema>>(...keys: K[]): Pick<z.infer<TSchema>, K>;
|
|
50
|
+
/**
|
|
51
|
+
* Get optional environment variable(s) with type safety
|
|
52
|
+
*/
|
|
53
|
+
getOptional<K extends keyof z.infer<TSchema>>(key: K): z.infer<TSchema>[K] | undefined;
|
|
54
|
+
getOptional<K extends keyof z.infer<TSchema>>(...keys: K[]): {
|
|
55
|
+
[P in K]: z.infer<TSchema>[P] | undefined;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Get all validated environment variables
|
|
59
|
+
*/
|
|
60
|
+
getAll(): z.infer<TSchema>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Creates a typed environment loader instance
|
|
64
|
+
* @param options Configuration options with schema and file/env source
|
|
65
|
+
* @returns Typed EnvLoader instance with full type safety and autocomplete
|
|
66
|
+
*/
|
|
67
|
+
export declare function createEnv<TSchema extends z.ZodSchema<any>>(options: {
|
|
68
|
+
schema: TSchema;
|
|
69
|
+
file: string;
|
|
70
|
+
} | {
|
|
71
|
+
schema: TSchema;
|
|
72
|
+
env: string;
|
|
73
|
+
}): EnvLoader<TSchema>;
|
|
74
|
+
/**
|
|
75
|
+
* Interface for the enhanced env object with init method
|
|
76
|
+
*/
|
|
77
|
+
export interface EnvWithInit<TSchema extends z.ZodSchema<any>> {
|
|
78
|
+
init(options: {
|
|
79
|
+
file: string;
|
|
80
|
+
} | {
|
|
81
|
+
env: string;
|
|
82
|
+
}): void;
|
|
83
|
+
get<K extends keyof z.infer<TSchema>>(key: K): z.infer<TSchema>[K];
|
|
84
|
+
get<K extends keyof z.infer<TSchema>>(...keys: K[]): Pick<z.infer<TSchema>, K>;
|
|
85
|
+
getOptional<K extends keyof z.infer<TSchema>>(key: K): z.infer<TSchema>[K] | undefined;
|
|
86
|
+
getOptional<K extends keyof z.infer<TSchema>>(...keys: K[]): Partial<Pick<z.infer<TSchema>, K>>;
|
|
87
|
+
getAll(): z.infer<TSchema>;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Creates an enhanced environment loader with init() method
|
|
91
|
+
* This provides a cleaner API: env.init({ file: './env.yml' }) followed by env.get('key')
|
|
92
|
+
*
|
|
93
|
+
* @param schema The Zod schema for environment validation
|
|
94
|
+
* @returns Enhanced env object with init, get, getOptional, and getAll methods
|
|
95
|
+
*/
|
|
96
|
+
export declare function createEnvWithInit<TSchema extends z.ZodSchema<any>>(schema: TSchema): EnvWithInit<TSchema>;
|
|
97
|
+
//# sourceMappingURL=env-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-loader.d.ts","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import yaml from 'js-yaml';
|
|
5
|
+
/**
|
|
6
|
+
* Modern Environment Loader with fluent API and full type safety
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { createEnv } from '@root/libs/env';
|
|
11
|
+
* import MySchema from './schema';
|
|
12
|
+
*
|
|
13
|
+
* // Create typed env instance
|
|
14
|
+
* const env = createEnv({ schema: MySchema, file: "env.local.yml" });
|
|
15
|
+
*
|
|
16
|
+
* // OR with JSON from process.env
|
|
17
|
+
* const env = createEnv({ schema: MySchema, env: "envs" });
|
|
18
|
+
*
|
|
19
|
+
* // Use with full type safety and autocomplete
|
|
20
|
+
* const port = env.get("port"); // Typed!
|
|
21
|
+
* const { optional_key } = env.getOptional("optional_key");
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export class EnvLoader {
|
|
25
|
+
envData = {};
|
|
26
|
+
schema = null;
|
|
27
|
+
validatedEnv = null;
|
|
28
|
+
initialized = false;
|
|
29
|
+
/**
|
|
30
|
+
* Initialize the environment loader
|
|
31
|
+
* @param options Either { schema, file } for YAML or { schema, env } for JSON
|
|
32
|
+
*/
|
|
33
|
+
init(options) {
|
|
34
|
+
if (this.initialized) {
|
|
35
|
+
// Already initialized, skip re-initialization
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
this.schema = options.schema;
|
|
39
|
+
// Load environment data based on options
|
|
40
|
+
this.loadEnvironmentData(options);
|
|
41
|
+
// Validate immediately
|
|
42
|
+
this.validateEnvironment();
|
|
43
|
+
this.initialized = true;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Load environment data from file or process.env
|
|
47
|
+
*/
|
|
48
|
+
loadEnvironmentData(options) {
|
|
49
|
+
if ('file' in options) {
|
|
50
|
+
// For file mode, read YAML directly and parse
|
|
51
|
+
try {
|
|
52
|
+
const envContent = readFileSync(options.file, { encoding: 'utf-8' });
|
|
53
|
+
this.envData = yaml.load(envContent);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
const absolutePath = resolve(options.file);
|
|
57
|
+
const errorMessage = [
|
|
58
|
+
'Failed to read environment file:',
|
|
59
|
+
` Provided path: '${options.file}'`,
|
|
60
|
+
` Resolved to: '${absolutePath}'`,
|
|
61
|
+
` Current directory: '${process.cwd()}'`,
|
|
62
|
+
` Error: ${error}`
|
|
63
|
+
].join('\n');
|
|
64
|
+
throw new Error(errorMessage);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// For env mode, read from process.env with JSON parsing
|
|
69
|
+
const envVar = process.env[options.env];
|
|
70
|
+
if (envVar) {
|
|
71
|
+
try {
|
|
72
|
+
this.envData = JSON.parse(envVar);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
throw new Error(`Failed to parse environment JSON from '${options.env}': ${error}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
throw new Error(`Environment variable '${options.env}' not found`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validate environment variables against the schema
|
|
85
|
+
*/
|
|
86
|
+
validateEnvironment() {
|
|
87
|
+
if (!this.schema) {
|
|
88
|
+
throw new Error('Environment not initialized. Call env.init() first.');
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
// Validate against schema
|
|
92
|
+
this.validatedEnv = this.schema.parse(this.envData);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (error instanceof z.ZodError) {
|
|
96
|
+
console.error('Environment validation failed:');
|
|
97
|
+
error.issues.forEach((err) => {
|
|
98
|
+
console.error(` - ${err.path.join('.')}: ${err.message}`);
|
|
99
|
+
});
|
|
100
|
+
throw new Error('Invalid environment configuration. See errors above.');
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
get(...keys) {
|
|
106
|
+
if (!this.initialized || !this.validatedEnv) {
|
|
107
|
+
throw new Error('Environment not initialized. Call env.init() first.');
|
|
108
|
+
}
|
|
109
|
+
// Single key case
|
|
110
|
+
if (keys.length === 1) {
|
|
111
|
+
return this.validatedEnv[keys[0]];
|
|
112
|
+
}
|
|
113
|
+
// Multiple keys case - return object
|
|
114
|
+
const result = {};
|
|
115
|
+
for (const key of keys) {
|
|
116
|
+
result[key] = this.validatedEnv[key];
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
getOptional(...keys) {
|
|
121
|
+
if (!this.initialized || !this.validatedEnv) {
|
|
122
|
+
throw new Error('Environment not initialized. Call env.init() first.');
|
|
123
|
+
}
|
|
124
|
+
// Single key case
|
|
125
|
+
if (keys.length === 1) {
|
|
126
|
+
return this.validatedEnv[keys[0]];
|
|
127
|
+
}
|
|
128
|
+
// Multiple keys case - return object
|
|
129
|
+
const result = {};
|
|
130
|
+
for (const key of keys) {
|
|
131
|
+
result[key] = this.validatedEnv[key];
|
|
132
|
+
}
|
|
133
|
+
return result;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get all validated environment variables
|
|
137
|
+
*/
|
|
138
|
+
getAll() {
|
|
139
|
+
if (!this.validatedEnv) {
|
|
140
|
+
throw new Error('Environment not initialized. Call env.init() first.');
|
|
141
|
+
}
|
|
142
|
+
return this.validatedEnv;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Global instance storage for singleton behavior
|
|
146
|
+
let globalInstance = null;
|
|
147
|
+
/**
|
|
148
|
+
* Creates a typed environment loader instance
|
|
149
|
+
* @param options Configuration options with schema and file/env source
|
|
150
|
+
* @returns Typed EnvLoader instance with full type safety and autocomplete
|
|
151
|
+
*/
|
|
152
|
+
export function createEnv(options) {
|
|
153
|
+
// Use existing instance if available (singleton pattern)
|
|
154
|
+
if (globalInstance) {
|
|
155
|
+
return globalInstance;
|
|
156
|
+
}
|
|
157
|
+
// Create new instance
|
|
158
|
+
const loader = new EnvLoader();
|
|
159
|
+
loader.init(options);
|
|
160
|
+
// Store as global singleton
|
|
161
|
+
globalInstance = loader;
|
|
162
|
+
return loader;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Creates an enhanced environment loader with init() method
|
|
166
|
+
* This provides a cleaner API: env.init({ file: './env.yml' }) followed by env.get('key')
|
|
167
|
+
*
|
|
168
|
+
* @param schema The Zod schema for environment validation
|
|
169
|
+
* @returns Enhanced env object with init, get, getOptional, and getAll methods
|
|
170
|
+
*/
|
|
171
|
+
export function createEnvWithInit(schema) {
|
|
172
|
+
let instance = null;
|
|
173
|
+
return {
|
|
174
|
+
init(options) {
|
|
175
|
+
if (!instance) {
|
|
176
|
+
instance = createEnv({ schema, ...options });
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
get(...keys) {
|
|
180
|
+
if (!instance) {
|
|
181
|
+
throw new Error('Environment not initialized. Call env.init() first.');
|
|
182
|
+
}
|
|
183
|
+
return instance.get(...keys);
|
|
184
|
+
},
|
|
185
|
+
getOptional(...keys) {
|
|
186
|
+
if (!instance) {
|
|
187
|
+
throw new Error('Environment not initialized. Call env.init() first.');
|
|
188
|
+
}
|
|
189
|
+
return instance.getOptional(...keys);
|
|
190
|
+
},
|
|
191
|
+
getAll() {
|
|
192
|
+
if (!instance) {
|
|
193
|
+
throw new Error('Environment not initialized. Call env.init() first.');
|
|
194
|
+
}
|
|
195
|
+
return instance.getAll();
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=env-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-loader.js","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@efebia/one-env",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Type-safe environment configuration with validation and CLI tools",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"env",
|
|
7
|
+
"environment",
|
|
8
|
+
"config",
|
|
9
|
+
"validation",
|
|
10
|
+
"zod",
|
|
11
|
+
"cli",
|
|
12
|
+
"typescript"
|
|
13
|
+
],
|
|
14
|
+
"author": {
|
|
15
|
+
"name": "Calogero Mandracchia",
|
|
16
|
+
"email": "calogero@efebia.com",
|
|
17
|
+
"url": "https://github.com/CalogeroMandracchia"
|
|
18
|
+
},
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"type": "module",
|
|
21
|
+
"main": "lib/index.js",
|
|
22
|
+
"types": "lib/index.d.ts",
|
|
23
|
+
"bin": "bin/one-env",
|
|
24
|
+
"files": [
|
|
25
|
+
"lib",
|
|
26
|
+
"bin"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc",
|
|
30
|
+
"prepublishOnly": "yarn build"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@aws-sdk/client-secrets-manager": "^3.812.0",
|
|
34
|
+
"chalk": "^5.3.0",
|
|
35
|
+
"commander": "^12.1.0",
|
|
36
|
+
"js-yaml": "^4.1.0"
|
|
37
|
+
},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"zod": "^4.0.5"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/js-yaml": "^4.0.9",
|
|
43
|
+
"@types/node": "^20.0.0",
|
|
44
|
+
"typescript": "^5.8.3",
|
|
45
|
+
"zod": "^4.0.5"
|
|
46
|
+
},
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=18.0.0"
|
|
49
|
+
},
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "git+https://github.com/efebia/be-libs.git",
|
|
53
|
+
"directory": "packages/one-env"
|
|
54
|
+
}
|
|
55
|
+
}
|