UNPKG

envase

Version:

Type-safe environment variable validation with Standard Schema compliance

64 lines 2.83 kB
#!/usr/bin/env node import { readFile, writeFile } from 'node:fs/promises'; import { resolve } from 'node:path'; import { cac } from 'cac'; import { extractEnvvars } from "./extract-envvars.js"; import { generateMarkdown } from "./generate-markdown.js"; import { loadSchema } from "./load-schema.js"; import { validateMarkdown } from "./validate-markdown.js"; const cli = cac('envase'); cli .command('generate <schemaPath>', 'Generate markdown documentation from environment schema') .option('-o, --output <file>', 'Output markdown file path', { default: './env-docs.md', }) .example('envase generate ./config.js -o docs/environment.md') .action(async (schemaPath, options) => { try { console.log('Loading schema from:', schemaPath); const schema = await loadSchema(schemaPath); const extractedEnvvars = extractEnvvars(schema); console.log('Generating markdown documentation...'); const markdown = await generateMarkdown(extractedEnvvars); const outputPath = resolve(process.cwd(), options.output); await writeFile(outputPath, markdown, 'utf-8'); console.log(`✓ Documentation generated: ${outputPath}`); } catch (error) { console.error('Error:', error instanceof Error ? error.message : String(error)); process.exit(1); } }); cli .command('validate <schemaPath> <markdownPath>', 'Validate if markdown file matches the schema definition') .example('envase validate ./config.js ./docs/env.md') .action(async (schemaPath, markdownPath) => { try { console.log('Loading schema from:', schemaPath); const schema = await loadSchema(schemaPath); const extractedEnvvars = extractEnvvars(schema); console.log('Generating expected markdown...'); const expectedMarkdown = await generateMarkdown(extractedEnvvars); console.log('Reading actual markdown from:', markdownPath); const markdownFilePath = resolve(process.cwd(), markdownPath); const actualMarkdown = await readFile(markdownFilePath, 'utf-8'); console.log('Validating...'); const result = validateMarkdown(actualMarkdown, expectedMarkdown); if (result.isValid) { console.log('Validation passed! The markdown file matches the schema.'); process.exit(0); } console.error('Validation failed! Found differences:\n'); console.error(result.differences); console.error('\nTo regenerate documentation:'); console.error(` envase generate ${schemaPath} -o ${markdownPath}`); process.exit(1); } catch (error) { console.error('Error:', error instanceof Error ? error.message : String(error)); process.exit(1); } }); cli.help(); cli.parse(); //# sourceMappingURL=main.js.map