UNPKG

envx-cli

Version:

Environment file encryption and management tool

173 lines 6.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateCopyOptions = exports.validateInteractiveOptions = exports.validateCreateOptions = exports.validateDecryptOptions = exports.validateEncryptOptions = exports.validateOptions = exports.validateSchema = exports.commandResultSchema = exports.fileOperationSchema = exports.envrcConfigSchema = exports.stageSecretSchema = exports.copySchema = exports.interactiveSchema = exports.createSchema = exports.decryptSchema = exports.encryptSchema = exports.baseOptionsSchema = void 0; const zod_1 = require("zod"); exports.baseOptionsSchema = zod_1.z.object({ cwd: zod_1.z.string().optional(), environment: zod_1.z.string().optional(), passphrase: zod_1.z.string().optional(), secret: zod_1.z.string().optional(), interactive: zod_1.z.boolean().optional(), generate: zod_1.z.boolean().optional(), stage: zod_1.z.string().optional(), }); exports.encryptSchema = zod_1.z .object({ environment: zod_1.z.string().min(1, 'Environment is required'), passphrase: zod_1.z.string().min(1, 'Passphrase is required'), cwd: zod_1.z.string().optional(), secret: zod_1.z.string().optional(), all: zod_1.z.boolean().optional(), overwrite: zod_1.z.boolean().optional(), }) .refine(data => { if (data.all && data.environment) { return false; } if (!data.all && !data.environment) { return false; } return true; }, { message: 'Cannot use --all with --environment flag', path: ['all'], }); exports.decryptSchema = zod_1.z .object({ environment: zod_1.z.string().min(1, 'Environment is required'), passphrase: zod_1.z.string().min(1, 'Passphrase is required'), cwd: zod_1.z.string().optional(), secret: zod_1.z.string().optional(), all: zod_1.z.boolean().optional(), overwrite: zod_1.z.boolean().optional(), }) .refine(data => { if (data.all && data.environment) { return false; } if (!data.all && !data.environment) { return false; } return true; }, { message: 'Cannot use --all with --environment flag', path: ['all'], }); exports.createSchema = zod_1.z.object({ environment: zod_1.z.string().min(1, 'Environment is required'), template: zod_1.z.string().optional(), cwd: zod_1.z.string().optional(), }); exports.interactiveSchema = zod_1.z.object({ overwrite: zod_1.z.boolean().optional(), cwd: zod_1.z.string().optional(), }); exports.copySchema = zod_1.z .object({ environment: zod_1.z.string().optional(), passphrase: zod_1.z.string().optional(), secret: zod_1.z.string().optional(), cwd: zod_1.z.string().optional(), overwrite: zod_1.z.boolean().optional(), all: zod_1.z.boolean().optional(), }) .refine(data => { if (data.all && !data.environment) { return false; } if (!data.all && !data.environment) { return false; } return true; }, { message: 'Environment is required, especially when using --all flag', path: ['environment'], }); exports.stageSecretSchema = zod_1.z.object({ stage: zod_1.z.string().min(1, 'Stage is required'), secret: zod_1.z.string().min(1, 'Secret is required'), variableName: zod_1.z.string().min(1, 'Variable name is required'), }); exports.envrcConfigSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.string()); exports.fileOperationSchema = zod_1.z.object({ success: zod_1.z.boolean(), message: zod_1.z.string(), filePath: zod_1.z.string().optional(), error: zod_1.z.instanceof(Error).optional(), }); exports.commandResultSchema = zod_1.z.object({ success: zod_1.z.boolean(), message: zod_1.z.string(), data: zod_1.z.any().optional(), errors: zod_1.z.array(zod_1.z.string()).optional(), }); const validateSchema = (schema, data) => { try { return schema.parse(data); } catch (error) { if (error instanceof zod_1.z.ZodError) { const errorMessages = error.issues.map((err) => `${err.path.join('.')}: ${err.message}`); throw new Error(`Validation failed:\n${errorMessages.join('\n')}`); } throw error; } }; exports.validateSchema = validateSchema; const validateOptions = (data) => (0, exports.validateSchema)(exports.baseOptionsSchema, data); exports.validateOptions = validateOptions; const validateEncryptOptions = (data) => { const processedData = data; if (processedData?.all) { const schemaForAll = zod_1.z .object({ passphrase: zod_1.z.string().min(1, 'Passphrase is required'), cwd: zod_1.z.string().optional(), secret: zod_1.z.string().optional(), all: zod_1.z.boolean().optional(), overwrite: zod_1.z.boolean().optional(), environment: zod_1.z.string().optional(), }) .refine(data => !data.environment, { message: 'Cannot use --all with --environment flag', path: ['environment'], }); return (0, exports.validateSchema)(schemaForAll, data); } return (0, exports.validateSchema)(exports.encryptSchema, data); }; exports.validateEncryptOptions = validateEncryptOptions; const validateDecryptOptions = (data) => { const processedData = data; if (processedData?.all) { const schemaForAll = zod_1.z .object({ passphrase: zod_1.z.string().min(1, 'Passphrase is required'), cwd: zod_1.z.string().optional(), secret: zod_1.z.string().optional(), all: zod_1.z.boolean().optional(), overwrite: zod_1.z.boolean().optional(), environment: zod_1.z.string().optional(), }) .refine(data => !data.environment, { message: 'Cannot use --all with --environment flag', path: ['environment'], }); return (0, exports.validateSchema)(schemaForAll, data); } return (0, exports.validateSchema)(exports.decryptSchema, data); }; exports.validateDecryptOptions = validateDecryptOptions; const validateCreateOptions = (data) => (0, exports.validateSchema)(exports.createSchema, data); exports.validateCreateOptions = validateCreateOptions; const validateInteractiveOptions = (data) => (0, exports.validateSchema)(exports.interactiveSchema, data); exports.validateInteractiveOptions = validateInteractiveOptions; const validateCopyOptions = (data) => { const processedData = data; if (processedData?.all && !processedData?.environment) { throw new Error('The --all flag requires an environment to be specified with -e/--environment'); } return (0, exports.validateSchema)(exports.copySchema, data); }; exports.validateCopyOptions = validateCopyOptions; //# sourceMappingURL=index.js.map