@envkit/nextjs
Version:
Environment variable management for Next.js applications
65 lines • 2.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createEnvSchema = createEnvSchema;
exports.validateEnv = validateEnv;
exports.getMissingEnvVars = getMissingEnvVars;
const valibot_1 = require("valibot");
/**
* Creates a validation schema for environment variables
* @param requiredVars Array of required environment variable names
* @param optionalVars Array of optional environment variable names
* @returns A Valibot schema for validating environment variables
*/
function createEnvSchema(requiredVars, optionalVars = []) {
// Create schema properties for required variables
const requiredProps = requiredVars.reduce((acc, key) => {
acc[key] = (0, valibot_1.string)();
return acc;
}, {});
// Create schema properties for optional variables
const optionalProps = optionalVars.reduce((acc, key) => {
acc[key] = (0, valibot_1.optional)((0, valibot_1.string)());
return acc;
}, {});
// Combine them into a single schema
return (0, valibot_1.object)({
...requiredProps,
...optionalProps,
});
}
/**
* Validates the environment variables against the schema
* @param schema The validation schema
* @param env The environment variables to validate
* @returns Result object with success flag, parsed values, and missing variables
*/
function validateEnv(schema, env) {
const result = (0, valibot_1.safeParse)(schema, env);
const missingVars = [];
if (!result.success && result.issues instanceof valibot_1.ValiError) {
// Extract the missing variable names from the validation error
result.issues.forEach(issue => {
if (issue.path && issue.path.length > 0) {
const path = issue.path[0];
if (typeof path.key === 'string') {
missingVars.push(path.key);
}
}
});
}
return {
success: result.success,
data: result.success ? result.output : null,
missingVars,
};
}
/**
* Gets missing environment variables based on required vars
* @param requiredVars Array of required environment variable names
* @param env The environment variables to check
* @returns Array of missing variable names
*/
function getMissingEnvVars(requiredVars, env) {
return requiredVars.filter(key => !env[key]);
}
//# sourceMappingURL=schema.js.map