@wrkspace-co/env 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugin.ts","../src/audit-command.ts","../src/dotenv.ts","../src/env.ts","../src/drift.ts","../src/schema-loader.ts","../src/migrations.ts","../src/generators.ts","../src/workspace-layout.ts","../src/check-command.ts","../src/deprecations-command.ts","../src/export-command.ts","../src/generate-command.ts","../src/migrate-command.ts","../src/provider-command.ts","../src/reconcile-command.ts","../src/cli.ts"],"sourcesContent":["import { Command } from \"commander\";\n\nimport { runAuditCommand } from \"./audit-command.js\";\nimport { runCheckCommand } from \"./check-command.js\";\nimport { runDeprecationsCommand } from \"./deprecations-command.js\";\nimport { runExportCommand } from \"./export-command.js\";\nimport { runGenerateCommand } from \"./generate-command.js\";\nimport {\n runMigrateCommand,\n runMigrateMakeCommand,\n runMigrateRollbackCommand,\n runMigrateStatusCommand,\n runSchemaBuildCommand\n} from \"./migrate-command.js\";\nimport type { EnvTarget } from \"./env.js\";\nimport {\n runDiffCommand,\n runDoctorCommand,\n runPullVercelCommand,\n runPushHerokuCommand\n} from \"./provider-command.js\";\nimport { runReconcileCommand } from \"./reconcile-command.js\";\n\nexport type ProgramLike = Pick<Command, \"command\">;\n\nexport interface GenerateCliOptions {\n writeLocal?: boolean;\n writeTargetFiles?: boolean;\n schema?: string;\n app?: string;\n}\n\nexport interface CheckCliOptions {\n target: EnvTarget;\n app?: string;\n allowUnknown?: boolean;\n json?: boolean;\n schema?: string;\n}\n\nexport interface DoctorCliOptions {\n schema?: string;\n}\n\nexport interface AuditCliOptions {\n schema?: string;\n json?: boolean;\n}\n\nexport interface PullVercelCliOptions {\n env: EnvTarget;\n}\n\nexport interface DiffVercelCliOptions {\n env: EnvTarget;\n schema?: string;\n json?: boolean;\n allowUnknown?: boolean;\n}\n\nexport interface DiffHerokuCliOptions {\n app: string;\n schema?: string;\n json?: boolean;\n allowUnknown?: boolean;\n}\n\nexport interface PushHerokuCliOptions {\n app: string;\n target: EnvTarget;\n from: string;\n schema?: string;\n}\n\nexport interface ExportCliOptions {\n schema?: string;\n withValues?: boolean;\n from?: string;\n}\n\nexport interface DeprecationsCliOptions {\n schema?: string;\n app?: string;\n json?: boolean;\n}\n\nexport interface MigrateMakeCliOptions {\n dir?: string;\n}\n\nexport interface MigrateCliOptions {\n dir?: string;\n state?: string;\n schemaFile?: string;\n}\n\nexport interface MigrateStatusCliOptions {\n dir?: string;\n state?: string;\n schemaFile?: string;\n json?: boolean;\n}\n\nexport interface MigrateRollbackCliOptions {\n dir?: string;\n state?: string;\n schemaFile?: string;\n steps: number;\n}\n\nexport interface SchemaBuildCliOptions {\n dir?: string;\n state?: string;\n schemaFile?: string;\n force?: boolean;\n}\n\nexport interface ReconcileCliOptions {\n schema?: string;\n app?: string;\n writeMigration?: boolean;\n dir?: string;\n}\n\nfunction parseTarget(value: string): EnvTarget {\n if (value === \"dev\" || value === \"preview\" || value === \"prod\") {\n return value;\n }\n\n throw new Error(`Invalid --target \"${value}\". Expected one of: dev, preview, prod.`);\n}\n\nfunction parsePositiveInteger(value: string): number {\n const parsed = Number.parseInt(value, 10);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(`Invalid positive integer \"${value}\".`);\n }\n return parsed;\n}\n\nexport async function handleGenerateCommand(options: GenerateCliOptions): Promise<void> {\n await runGenerateCommand({\n writeLocal: Boolean(options.writeLocal),\n writeTargetFiles: Boolean(options.writeTargetFiles),\n schema: options.schema,\n app: options.app\n });\n}\n\nexport async function handleCheckCommand(options: CheckCliOptions): Promise<number> {\n const result = await runCheckCommand({\n target: options.target,\n app: options.app,\n allowUnknown: Boolean(options.allowUnknown),\n json: Boolean(options.json),\n schema: options.schema\n });\n\n return result.exitCode;\n}\n\nexport async function handleDeprecationsCommand(\n options: DeprecationsCliOptions\n): Promise<number> {\n const result = await runDeprecationsCommand({\n schema: options.schema,\n app: options.app,\n json: Boolean(options.json)\n });\n return result.exitCode;\n}\n\nexport async function handleDoctorCommand(options: DoctorCliOptions): Promise<number> {\n const result = await runDoctorCommand({\n schema: options.schema\n });\n return result.exitCode;\n}\n\nexport async function handleAuditCommand(options: AuditCliOptions): Promise<number> {\n const result = await runAuditCommand({\n schema: options.schema,\n json: Boolean(options.json)\n });\n return result.exitCode;\n}\n\nexport async function handlePullVercelCommand(options: PullVercelCliOptions): Promise<number> {\n const result = await runPullVercelCommand({\n env: options.env\n });\n return result.exitCode;\n}\n\nexport async function handleDiffVercelCommand(options: DiffVercelCliOptions): Promise<number> {\n const result = await runDiffCommand({\n provider: \"vercel\",\n env: options.env,\n schema: options.schema,\n json: Boolean(options.json),\n allowUnknown: Boolean(options.allowUnknown)\n });\n return result.exitCode;\n}\n\nexport async function handleDiffHerokuCommand(options: DiffHerokuCliOptions): Promise<number> {\n const result = await runDiffCommand({\n provider: \"heroku\",\n app: options.app,\n schema: options.schema,\n json: Boolean(options.json),\n allowUnknown: Boolean(options.allowUnknown)\n });\n return result.exitCode;\n}\n\nexport async function handlePushHerokuCommand(options: PushHerokuCliOptions): Promise<number> {\n const result = await runPushHerokuCommand({\n app: options.app,\n target: options.target,\n from: options.from,\n schema: options.schema\n });\n return result.exitCode;\n}\n\nexport async function handleExportDockerComposeCommand(\n options: ExportCliOptions\n): Promise<number> {\n const result = await runExportCommand({\n format: \"docker-compose\",\n schema: options.schema,\n withValues: Boolean(options.withValues),\n from: options.from\n });\n return result.exitCode;\n}\n\nexport async function handleExportK8sCommand(options: ExportCliOptions): Promise<number> {\n const result = await runExportCommand({\n format: \"k8s\",\n schema: options.schema,\n withValues: Boolean(options.withValues),\n from: options.from\n });\n return result.exitCode;\n}\n\nexport async function handleExportGithubActionsCommand(\n options: ExportCliOptions\n): Promise<number> {\n const result = await runExportCommand({\n format: \"github-actions\",\n schema: options.schema,\n withValues: Boolean(options.withValues),\n from: options.from\n });\n return result.exitCode;\n}\n\nexport async function handleMigrateMakeCommand(\n name: string,\n options: MigrateMakeCliOptions\n): Promise<number> {\n const result = await runMigrateMakeCommand({\n name,\n migrationsDir: options.dir\n });\n return result.exitCode;\n}\n\nexport async function handleMigrateCommand(options: MigrateCliOptions): Promise<number> {\n const result = await runMigrateCommand({\n migrationsDir: options.dir,\n stateFile: options.state,\n generatedSchemaFile: options.schemaFile\n });\n return result.exitCode;\n}\n\nexport async function handleMigrateStatusCommand(\n options: MigrateStatusCliOptions\n): Promise<number> {\n const result = await runMigrateStatusCommand({\n migrationsDir: options.dir,\n stateFile: options.state,\n generatedSchemaFile: options.schemaFile,\n json: Boolean(options.json)\n });\n return result.exitCode;\n}\n\nexport async function handleMigrateRollbackCommand(\n options: MigrateRollbackCliOptions\n): Promise<number> {\n const result = await runMigrateRollbackCommand({\n steps: options.steps,\n migrationsDir: options.dir,\n stateFile: options.state,\n generatedSchemaFile: options.schemaFile\n });\n return result.exitCode;\n}\n\nexport async function handleSchemaBuildCommand(options: SchemaBuildCliOptions): Promise<number> {\n const result = await runSchemaBuildCommand({\n migrationsDir: options.dir,\n stateFile: options.state,\n generatedSchemaFile: options.schemaFile,\n force: Boolean(options.force)\n });\n return result.exitCode;\n}\n\nexport async function handleReconcileCommand(options: ReconcileCliOptions): Promise<number> {\n const result = await runReconcileCommand({\n schema: options.schema,\n app: options.app,\n writeMigration: Boolean(options.writeMigration),\n migrationsDir: options.dir\n });\n return result.exitCode;\n}\n\nfunction applyExitCode(exitCode: number): void {\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n\nfunction registerAirlockCommands(command: Command): void {\n command\n .command(\"doctor\")\n .description(\"Check schema and provider CLI setup\")\n .option(\"--schema <path>\", \"Path to schema module\")\n .action(async (options: DoctorCliOptions) => {\n applyExitCode(await handleDoctorCommand(options));\n });\n\n command\n .command(\"check\")\n .description(\"Validate environment variables against schema and policy\")\n .requiredOption(\"--target <target>\", \"Target environment (dev|preview|prod)\", parseTarget)\n .option(\"--app <name>\", \"Optional app name for composed schema selection\")\n .option(\"--allow-unknown\", \"Allow variables not defined in schema\")\n .option(\"--json\", \"Print stable JSON output\")\n .option(\"--schema <path>\", \"Path to schema module\")\n .action(async (options: CheckCliOptions) => {\n applyExitCode(await handleCheckCommand(options));\n });\n\n command\n .command(\"generate\")\n .description(\"Generate schema-driven env artifacts\")\n .option(\"--write-local\", \"Write .env.local with empty values for sensitive vars\")\n .option(\n \"--write-target-files\",\n \"Write .env.dev, .env.preview, and .env.prod with target-required keys\"\n )\n .option(\"--schema <path>\", \"Path to schema module\")\n .option(\"--app <name>\", \"Optional app name for composed schema selection\")\n .action(async (options: GenerateCliOptions) => {\n await handleGenerateCommand(options);\n });\n\n command\n .command(\"deprecations\")\n .description(\"Report deprecated environment keys and removal deadlines\")\n .option(\"--json\", \"Print stable JSON output\")\n .option(\"--schema <path>\", \"Path to schema module\")\n .option(\"--app <name>\", \"Optional app name for composed schema selection\")\n .action(async (options: DeprecationsCliOptions) => {\n applyExitCode(await handleDeprecationsCommand(options));\n });\n\n command\n .command(\"audit\")\n .description(\"Detect schema drift in local env snapshots\")\n .option(\"--json\", \"Print stable JSON output\")\n .option(\"--schema <path>\", \"Path to schema module\")\n .action(async (options: AuditCliOptions) => {\n applyExitCode(await handleAuditCommand(options));\n });\n\n const pullCommand = command\n .command(\"pull\")\n .description(\"Pull environment snapshots from provider CLIs\");\n\n pullCommand\n .command(\"vercel\")\n .description(\"Pull env snapshot from Vercel\")\n .requiredOption(\"--env <target>\", \"Target environment (dev|preview|prod)\", parseTarget)\n .action(async (options: PullVercelCliOptions) => {\n applyExitCode(await handlePullVercelCommand(options));\n });\n\n const diffCommand = command\n .command(\"diff\")\n .description(\"Diff provider snapshots against schema expectations\");\n\n diffCommand\n .command(\"vercel\")\n .description(\"Diff a Vercel snapshot against schema\")\n .requiredOption(\"--env <target>\", \"Target environment (dev|preview|prod)\", parseTarget)\n .option(\"--json\", \"Print stable JSON output\")\n .option(\"--allow-unknown\", \"Ignore unknown keys in snapshot\")\n .option(\"--schema <path>\", \"Path to schema module\")\n .action(async (options: DiffVercelCliOptions) => {\n applyExitCode(await handleDiffVercelCommand(options));\n });\n\n diffCommand\n .command(\"heroku\")\n .description(\"Diff a Heroku snapshot against schema\")\n .requiredOption(\"--app <name>\", \"Heroku app name\")\n .option(\"--json\", \"Print stable JSON output\")\n .option(\"--allow-unknown\", \"Ignore unknown keys in snapshot\")\n .option(\"--schema <path>\", \"Path to schema module\")\n .action(async (options: DiffHerokuCliOptions) => {\n applyExitCode(await handleDiffHerokuCommand(options));\n });\n\n const pushCommand = command\n .command(\"push\")\n .description(\"Push env values to provider CLIs with safety filters\");\n\n pushCommand\n .command(\"heroku\")\n .description(\"Push schema-approved values to Heroku\")\n .requiredOption(\"--app <name>\", \"Heroku app name\")\n .requiredOption(\"--target <target>\", \"Target environment (dev|preview|prod)\", parseTarget)\n .requiredOption(\"--from <file>\", \"Source dotenv file to read values from\")\n .option(\"--schema <path>\", \"Path to schema module\")\n .action(async (options: PushHerokuCliOptions) => {\n applyExitCode(await handlePushHerokuCommand(options));\n });\n\n const exportCommand = command\n .command(\"export\")\n .description(\"Export env schema to deployment formats with safe defaults\");\n\n exportCommand\n .command(\"docker-compose\")\n .description(\"Export docker-compose environment block\")\n .option(\"--with-values\", \"Include values from --from file\")\n .option(\"--from <file>\", \"Source dotenv file (required with --with-values)\")\n .option(\"--schema <path>\", \"Path to schema module\")\n .action(async (options: ExportCliOptions) => {\n applyExitCode(await handleExportDockerComposeCommand(options));\n });\n\n exportCommand\n .command(\"k8s\")\n .description(\"Export Kubernetes ConfigMap and Secret manifests\")\n .option(\"--with-values\", \"Include values from --from file\")\n .option(\"--from <file>\", \"Source dotenv file (required with --with-values)\")\n .option(\"--schema <path>\", \"Path to schema module\")\n .action(async (options: ExportCliOptions) => {\n applyExitCode(await handleExportK8sCommand(options));\n });\n\n exportCommand\n .command(\"github-actions\")\n .description(\"Export GitHub Actions env block\")\n .option(\"--with-values\", \"Include values from --from file\")\n .option(\"--from <file>\", \"Source dotenv file (required with --with-values)\")\n .option(\"--schema <path>\", \"Path to schema module\")\n .action(async (options: ExportCliOptions) => {\n applyExitCode(await handleExportGithubActionsCommand(options));\n });\n\n command\n .command(\"migrate:make\")\n .description(\"Create a new env migration file\")\n .argument(\"<name>\", \"Migration name\")\n .option(\"--dir <path>\", \"Migration directory (default: env/migrations)\")\n .action(async (name: string, options: MigrateMakeCliOptions) => {\n applyExitCode(await handleMigrateMakeCommand(name, options));\n });\n\n command\n .command(\"migrate\")\n .description(\"Apply pending env migrations\")\n .option(\"--dir <path>\", \"Migration directory (default: env/migrations)\")\n .option(\"--state <path>\", \"Migration state file (default: env/migrations.state.json)\")\n .option(\n \"--schema-file <path>\",\n \"Generated schema file (default: env/schema.generated.json)\"\n )\n .action(async (options: MigrateCliOptions) => {\n applyExitCode(await handleMigrateCommand(options));\n });\n\n command\n .command(\"migrate:status\")\n .description(\"Show env migration status\")\n .option(\"--json\", \"Print stable JSON output\")\n .option(\"--dir <path>\", \"Migration directory (default: env/migrations)\")\n .option(\"--state <path>\", \"Migration state file (default: env/migrations.state.json)\")\n .option(\n \"--schema-file <path>\",\n \"Generated schema file (default: env/schema.generated.json)\"\n )\n .action(async (options: MigrateStatusCliOptions) => {\n applyExitCode(await handleMigrateStatusCommand(options));\n });\n\n command\n .command(\"migrate:rollback\")\n .description(\"Rollback applied env migrations\")\n .requiredOption(\"--steps <count>\", \"Number of steps to rollback\", parsePositiveInteger)\n .option(\"--dir <path>\", \"Migration directory (default: env/migrations)\")\n .option(\"--state <path>\", \"Migration state file (default: env/migrations.state.json)\")\n .option(\n \"--schema-file <path>\",\n \"Generated schema file (default: env/schema.generated.json)\"\n )\n .action(async (options: MigrateRollbackCliOptions) => {\n applyExitCode(await handleMigrateRollbackCommand(options));\n });\n\n command\n .command(\"schema:build\")\n .description(\"Build migration-derived schema file\")\n .option(\"--dir <path>\", \"Migration directory (default: env/migrations)\")\n .option(\"--state <path>\", \"Migration state file (default: env/migrations.state.json)\")\n .option(\n \"--schema-file <path>\",\n \"Generated schema file (default: env/schema.generated.json)\"\n )\n .option(\"--force\", \"Force a full schema rebuild from applied migrations\")\n .action(async (options: SchemaBuildCliOptions) => {\n applyExitCode(await handleSchemaBuildCommand(options));\n });\n\n command\n .command(\"reconcile\")\n .description(\"Ensure env files include schema keys with minimal edits\")\n .option(\"--schema <path>\", \"Path to schema module\")\n .option(\"--app <name>\", \"Optional app name for composed schema selection\")\n .option(\"--write-migration\", \"Create a migration file with reconcile changes\")\n .option(\"--dir <path>\", \"Migration directory used by --write-migration\")\n .action(async (options: ReconcileCliOptions) => {\n applyExitCode(await handleReconcileCommand(options));\n });\n}\n\nexport function createAirlockProgram(): Command {\n const program = new Command().name(\"airlock\").description(\"Airlock environment commands\");\n registerAirlockCommands(program);\n return program;\n}\n\nexport function register(program: ProgramLike): void {\n const envCommand = program.command(\"env\").description(\"Airlock environment commands\");\n registerAirlockCommands(envCommand);\n}\n\nconst plugin = { register };\n\nexport default plugin;\n","import { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { dotenvToObject, parseDotenv } from \"./dotenv.js\";\nimport { formatValidationIssues, type EnvSchema, type EnvTarget } from \"./env.js\";\nimport { detectDrift, type DriftIssue } from \"./drift.js\";\nimport { loadSchema, resolveSchemaPath } from \"./schema-loader.js\";\n\ntype ExitCode = 0 | 1;\n\nconst TARGETS: readonly EnvTarget[] = [\"dev\", \"preview\", \"prod\"];\n\nconst AUDIT_FILES_BY_TARGET: Record<EnvTarget, readonly string[]> = {\n dev: [\".env.defaults\", \".env\", \".env.dev\", \".env.local\", \".env.dev.local\", \".env.vercel.dev\"],\n preview: [\n \".env.defaults\",\n \".env\",\n \".env.preview\",\n \".env.local\",\n \".env.preview.local\",\n \".env.vercel.preview\"\n ],\n prod: [\".env.defaults\", \".env\", \".env.prod\", \".env.local\", \".env.prod.local\", \".env.vercel.prod\"]\n};\n\nexport interface AuditTargetResult {\n target: EnvTarget;\n inspectedFiles: string[];\n summary: {\n total: number;\n errors: number;\n warnings: number;\n };\n issues: DriftIssue[];\n}\n\nexport interface AuditCommandResult {\n ok: boolean;\n exitCode: ExitCode;\n schemaPath: string;\n summary: {\n total: number;\n errors: number;\n warnings: number;\n };\n targets: AuditTargetResult[];\n issues: DriftIssue[];\n}\n\nexport interface AuditCommandOptions {\n schema?: string;\n json?: boolean;\n cwd?: string;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nasync function fileExists(filepath: string): Promise<boolean> {\n try {\n await access(filepath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function loadValuesForTarget(\n cwd: string,\n target: EnvTarget,\n schema: EnvSchema\n): Promise<{ values: Record<string, string | undefined>; inspectedFiles: string[] }> {\n const values: Record<string, string | undefined> = {};\n const inspectedFiles: string[] = [];\n\n for (const candidate of AUDIT_FILES_BY_TARGET[target]) {\n const filepath = path.resolve(cwd, candidate);\n if (!(await fileExists(filepath))) {\n continue;\n }\n\n const content = await readFile(filepath, \"utf8\");\n const parsed = parseDotenv(content);\n Object.assign(values, dotenvToObject(parsed));\n inspectedFiles.push(candidate);\n }\n\n for (const key of Object.keys(schema)) {\n if (process.env[key] !== undefined) {\n values[key] = process.env[key];\n }\n }\n\n return { values, inspectedFiles };\n}\n\nfunction aggregateSummary(targets: readonly AuditTargetResult[]): {\n total: number;\n errors: number;\n warnings: number;\n} {\n return targets.reduce(\n (accumulator, targetResult) => ({\n total: accumulator.total + targetResult.summary.total,\n errors: accumulator.errors + targetResult.summary.errors,\n warnings: accumulator.warnings + targetResult.summary.warnings\n }),\n { total: 0, errors: 0, warnings: 0 }\n );\n}\n\nfunction flattenIssues(targets: readonly AuditTargetResult[]): DriftIssue[] {\n return targets.flatMap((targetResult) => targetResult.issues);\n}\n\nexport async function runAuditCommand(options: AuditCommandOptions = {}): Promise<AuditCommandResult> {\n const cwd = options.cwd ?? process.cwd();\n const schemaPath = await resolveSchemaPath(options.schema, cwd);\n const loaded = await loadSchema(schemaPath);\n\n const targetResults: AuditTargetResult[] = [];\n for (const target of TARGETS) {\n const { values, inspectedFiles } = await loadValuesForTarget(cwd, target, loaded.schema);\n const drift = detectDrift(loaded.schema, {\n target,\n values,\n source: inspectedFiles.join(\", \")\n });\n\n targetResults.push({\n target,\n inspectedFiles,\n summary: drift.summary,\n issues: drift.issues\n });\n }\n\n const summary = aggregateSummary(targetResults);\n const issues = flattenIssues(targetResults);\n const result: AuditCommandResult = {\n ok: summary.errors === 0,\n exitCode: summary.errors === 0 ? 0 : 1,\n schemaPath,\n summary,\n targets: targetResults,\n issues\n };\n\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n if (options.json) {\n stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } else if (result.ok) {\n stdout.write(\"env audit passed. No drift detected across dev/preview/prod snapshots.\\n\");\n } else {\n stderr.write(`${formatValidationIssues(result.issues)}\\n`);\n }\n\n return result;\n}\n","export type DotenvQuoteStyle = \"none\" | \"single\" | \"double\";\n\nexport interface DotenvBlankLine {\n type: \"blank\";\n raw: string;\n}\n\nexport interface DotenvCommentLine {\n type: \"comment\";\n raw: string;\n}\n\nexport interface DotenvPairLine {\n type: \"pair\";\n raw: string;\n key: string;\n value: string;\n quote: DotenvQuoteStyle;\n exported: boolean;\n inlineComment?: string;\n}\n\nexport interface DotenvUnknownLine {\n type: \"unknown\";\n raw: string;\n}\n\nexport type DotenvLine = DotenvBlankLine | DotenvCommentLine | DotenvPairLine | DotenvUnknownLine;\n\nexport interface DotenvDocument {\n lines: DotenvLine[];\n newline: \"\\n\" | \"\\r\\n\";\n hasTrailingNewline: boolean;\n}\n\ninterface ParsedValue {\n value: string;\n quote: DotenvQuoteStyle;\n inlineComment?: string;\n}\n\nfunction detectNewline(content: string): \"\\n\" | \"\\r\\n\" {\n const match = content.match(/\\r\\n|\\n/);\n if (!match) {\n return \"\\n\";\n }\n\n return match[0] === \"\\r\\n\" ? \"\\r\\n\" : \"\\n\";\n}\n\nfunction decodeDoubleQuoted(input: string): string {\n return input.replace(/\\\\([nrt\"\\\\])/g, (_fullMatch, token: string) => {\n switch (token) {\n case \"n\":\n return \"\\n\";\n case \"r\":\n return \"\\r\";\n case \"t\":\n return \"\\t\";\n case '\"':\n return '\"';\n case \"\\\\\":\n return \"\\\\\";\n default:\n return token;\n }\n });\n}\n\nfunction encodeDoubleQuoted(input: string): string {\n return input\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\"/g, '\\\\\"');\n}\n\nfunction parseInlineComment(input: string): string | undefined {\n const trimmedStart = input.trimStart();\n if (!trimmedStart.startsWith(\"#\")) {\n return undefined;\n }\n return trimmedStart;\n}\n\nfunction parseUnquotedValue(input: string): ParsedValue {\n let splitIndex = input.length;\n for (let i = 0; i < input.length; i += 1) {\n if (input[i] !== \"#\") {\n continue;\n }\n\n if (i === 0 || /\\s/.test(input[i - 1])) {\n splitIndex = i;\n break;\n }\n }\n\n const rawValue = input.slice(0, splitIndex).trimEnd();\n const remainder = input.slice(splitIndex);\n\n return {\n value: rawValue.replace(/\\\\n/g, \"\\n\"),\n quote: \"none\",\n inlineComment: parseInlineComment(remainder)\n };\n}\n\nfunction parseQuotedValue(input: string, quote: \"'\" | '\"'): ParsedValue {\n const escaped = quote === '\"';\n let cursor = 1;\n let isEscaping = false;\n\n while (cursor < input.length) {\n const current = input[cursor];\n if (escaped && !isEscaping && current === \"\\\\\") {\n isEscaping = true;\n cursor += 1;\n continue;\n }\n\n if (!isEscaping && current === quote) {\n break;\n }\n\n isEscaping = false;\n cursor += 1;\n }\n\n if (cursor >= input.length || input[cursor] !== quote) {\n return {\n value: input,\n quote: \"none\"\n };\n }\n\n const innerValue = input.slice(1, cursor);\n const remainder = input.slice(cursor + 1);\n\n return {\n value: quote === '\"' ? decodeDoubleQuoted(innerValue) : innerValue,\n quote: quote === '\"' ? \"double\" : \"single\",\n inlineComment: parseInlineComment(remainder)\n };\n}\n\nfunction parseValueSegment(rawValueSegment: string): ParsedValue {\n const trimmed = rawValueSegment.trimStart();\n if (trimmed.startsWith('\"')) {\n return parseQuotedValue(trimmed, '\"');\n }\n if (trimmed.startsWith(\"'\")) {\n return parseQuotedValue(trimmed, \"'\");\n }\n return parseUnquotedValue(trimmed);\n}\n\nexport function parseDotenv(content: string): DotenvDocument {\n const newline = detectNewline(content);\n const hasTrailingNewline = content.endsWith(newline);\n const rawLines = content.length > 0 ? content.split(/\\r?\\n/) : [];\n\n if (hasTrailingNewline) {\n rawLines.pop();\n }\n\n const lines: DotenvLine[] = rawLines.map((rawLine) => {\n const trimmed = rawLine.trim();\n\n if (trimmed.length === 0) {\n return {\n type: \"blank\",\n raw: rawLine\n };\n }\n\n if (trimmed.startsWith(\"#\")) {\n return {\n type: \"comment\",\n raw: rawLine\n };\n }\n\n const pairMatch = rawLine.match(/^\\s*(export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=(.*)$/);\n if (!pairMatch) {\n return {\n type: \"unknown\",\n raw: rawLine\n };\n }\n\n const exported = Boolean(pairMatch[1]);\n const key = pairMatch[2];\n const parsed = parseValueSegment(pairMatch[3] ?? \"\");\n\n return {\n type: \"pair\",\n raw: rawLine,\n key,\n value: parsed.value,\n quote: parsed.quote,\n exported,\n inlineComment: parsed.inlineComment\n };\n });\n\n return {\n lines,\n newline,\n hasTrailingNewline\n };\n}\n\nfunction canUseUnquoted(value: string): boolean {\n return /^[A-Za-z0-9_./:@+-]*$/.test(value);\n}\n\nexport function formatDotenvValue(value: string, preferredQuote: DotenvQuoteStyle = \"none\"): string {\n if (value.length === 0) {\n return \"\";\n }\n\n if (preferredQuote === \"single\" && !value.includes(\"'\") && !value.includes(\"\\n\")) {\n return `'${value}'`;\n }\n\n if (preferredQuote === \"double\") {\n return `\"${encodeDoubleQuoted(value)}\"`;\n }\n\n if (preferredQuote === \"none\" && canUseUnquoted(value)) {\n return value;\n }\n\n return `\"${encodeDoubleQuoted(value)}\"`;\n}\n\nexport interface WriteDotenvOptions {\n updates?: Record<string, string | undefined>;\n sortNewKeys?: boolean;\n}\n\nexport function writeDotenv(document: DotenvDocument, options: WriteDotenvOptions = {}): string {\n const updates = options.updates ?? {};\n const seenKeys = new Set<string>();\n const renderedLines: string[] = [];\n\n for (const line of document.lines) {\n if (line.type !== \"pair\") {\n renderedLines.push(line.raw);\n continue;\n }\n\n if (!Object.hasOwn(updates, line.key)) {\n renderedLines.push(line.raw);\n continue;\n }\n\n seenKeys.add(line.key);\n const updatedValue = updates[line.key] ?? \"\";\n const renderedValue = formatDotenvValue(updatedValue, line.quote);\n const commentSuffix = line.inlineComment ? ` ${line.inlineComment}` : \"\";\n const exportPrefix = line.exported ? \"export \" : \"\";\n renderedLines.push(`${exportPrefix}${line.key}=${renderedValue}${commentSuffix}`);\n }\n\n let pendingKeys = Object.keys(updates).filter((key) => !seenKeys.has(key));\n if (options.sortNewKeys !== false) {\n pendingKeys = pendingKeys.sort();\n }\n\n if (pendingKeys.length > 0 && renderedLines.length > 0 && renderedLines.at(-1) !== \"\") {\n renderedLines.push(\"\");\n }\n\n for (const key of pendingKeys) {\n const value = updates[key] ?? \"\";\n renderedLines.push(`${key}=${formatDotenvValue(value)}`);\n }\n\n let output = renderedLines.join(document.newline);\n if (document.hasTrailingNewline || pendingKeys.length > 0) {\n output += document.newline;\n }\n\n return output;\n}\n\nexport function dotenvToObject(document: DotenvDocument): Record<string, string> {\n const output: Record<string, string> = {};\n for (const line of document.lines) {\n if (line.type === \"pair\") {\n output[line.key] = line.value;\n }\n }\n return output;\n}\n","export type EnvTarget = \"dev\" | \"preview\" | \"prod\";\nexport type EnvScope = \"server\" | \"client\";\nexport type EnvKind = \"string\" | \"url\" | \"number\" | \"boolean\" | \"enum\" | \"json\";\nexport type ValidationSeverity = \"error\" | \"warning\";\n\nexport interface DeprecatedMetadata {\n replacedBy?: string;\n removeAfter?: string;\n message?: string;\n}\n\nexport type ProviderMapping = {\n vercel?: string;\n heroku?: string;\n} & Record<string, string | undefined>;\n\nexport interface EnvVariableMetadata {\n description?: string;\n example?: string;\n sensitive?: boolean;\n owner?: string;\n rotationDays?: number;\n deprecated?: DeprecatedMetadata;\n provider?: ProviderMapping;\n tags?: string[];\n}\n\nexport interface EnvVariableConfig extends EnvVariableMetadata {\n scope?: EnvScope;\n requiredIn?: readonly EnvTarget[];\n defaultValue?: unknown;\n}\n\ninterface BaseVariableDefinition<TKind extends EnvKind> extends EnvVariableMetadata {\n kind: TKind;\n scope: EnvScope;\n requiredIn: readonly EnvTarget[];\n defaultValue?: unknown;\n}\n\nexport interface StringVariableDefinition extends BaseVariableDefinition<\"string\"> {}\n\nexport interface UrlVariableDefinition extends BaseVariableDefinition<\"url\"> {}\n\nexport interface NumberVariableDefinition extends BaseVariableDefinition<\"number\"> {}\n\nexport interface BooleanVariableDefinition extends BaseVariableDefinition<\"boolean\"> {}\n\nexport interface EnumVariableDefinition<TValue extends string = string>\n extends BaseVariableDefinition<\"enum\"> {\n values: readonly TValue[];\n}\n\nexport interface JsonVariableDefinition<TValue = unknown> extends BaseVariableDefinition<\"json\"> {\n // Compile-time type only.\n readonly __valueType?: TValue;\n}\n\nexport type EnvVariableDefinition =\n | StringVariableDefinition\n | UrlVariableDefinition\n | NumberVariableDefinition\n | BooleanVariableDefinition\n | EnumVariableDefinition\n | JsonVariableDefinition;\n\nexport type EnvSchema = Record<string, EnvVariableDefinition>;\n\nconst TARGETS: readonly EnvTarget[] = [\"dev\", \"preview\", \"prod\"];\n\nfunction normalizeTargets(requiredIn?: readonly EnvTarget[]): readonly EnvTarget[] {\n if (!requiredIn || requiredIn.length === 0) {\n return TARGETS;\n }\n\n const uniqueTargets = Array.from(new Set(requiredIn));\n for (const target of uniqueTargets) {\n if (!TARGETS.includes(target)) {\n throw new Error(`Unknown env target \"${target}\". Expected one of: ${TARGETS.join(\", \")}.`);\n }\n }\n return uniqueTargets;\n}\n\nfunction createBaseDefinition<TKind extends EnvKind>(\n kind: TKind,\n config: EnvVariableConfig = {}\n): BaseVariableDefinition<TKind> {\n return {\n kind,\n scope: config.scope ?? \"server\",\n requiredIn: normalizeTargets(config.requiredIn),\n description: config.description,\n example: config.example,\n sensitive: config.sensitive,\n owner: config.owner,\n rotationDays: config.rotationDays,\n deprecated: config.deprecated ? { ...config.deprecated } : undefined,\n provider: config.provider ? { ...config.provider } : undefined,\n tags: config.tags ? [...config.tags] : undefined,\n defaultValue: config.defaultValue\n };\n}\n\nexport function string(config: EnvVariableConfig = {}): StringVariableDefinition {\n return createBaseDefinition(\"string\", config);\n}\n\nexport function url(config: EnvVariableConfig = {}): UrlVariableDefinition {\n return createBaseDefinition(\"url\", config);\n}\n\nexport function number(config: EnvVariableConfig = {}): NumberVariableDefinition {\n return createBaseDefinition(\"number\", config);\n}\n\nexport function boolean(config: EnvVariableConfig = {}): BooleanVariableDefinition {\n return createBaseDefinition(\"boolean\", config);\n}\n\nfunction enumBuilder<const TValue extends readonly [string, ...string[]]>(\n values: TValue,\n config: EnvVariableConfig = {}\n): EnumVariableDefinition<TValue[number]> {\n return {\n ...createBaseDefinition(\"enum\", config),\n values: [...values]\n };\n}\n\nexport { enumBuilder as enum };\n\nexport function json<TValue = unknown>(config: EnvVariableConfig = {}): JsonVariableDefinition<TValue> {\n return createBaseDefinition(\"json\", config) as JsonVariableDefinition<TValue>;\n}\n\nexport const builders = {\n string,\n url,\n number,\n boolean,\n enum: enumBuilder,\n json\n};\n\nexport function defineSchema<TSchema extends EnvSchema>(schema: TSchema): TSchema {\n return schema;\n}\n\nexport interface EnvValidationIssue {\n key: string;\n target: EnvTarget;\n scope: EnvScope;\n severity: ValidationSeverity;\n code: string;\n message: string;\n fix?: string;\n}\n\nexport interface PrefixPolicyIssue {\n severity: ValidationSeverity;\n code: string;\n message: string;\n fix?: string;\n}\n\nexport interface PrefixPolicyContext {\n key: string;\n target: EnvTarget;\n scope: EnvScope;\n hasPublicPrefix: boolean;\n publicPrefixes: readonly string[];\n strict: boolean;\n}\n\nexport interface PrefixPolicy {\n name?: string;\n publicPrefixes: readonly string[];\n validate?(context: PrefixPolicyContext): PrefixPolicyIssue[] | void;\n}\n\nexport const prefixPolicies = {\n nextjs: {\n name: \"nextjs\",\n publicPrefixes: [\"NEXT_PUBLIC_\"]\n } as PrefixPolicy,\n vite: {\n name: \"vite\",\n publicPrefixes: [\"VITE_\"]\n } as PrefixPolicy\n};\n\nexport interface CreateEnvOptions {\n target: EnvTarget;\n values?: Record<string, string | undefined>;\n strict?: boolean;\n throwOnError?: boolean;\n prefixPolicy?: PrefixPolicy;\n now?: Date;\n onWarning?: (issue: EnvValidationIssue) => void;\n}\n\ntype InferVariableValue<TDefinition extends EnvVariableDefinition> =\n TDefinition extends StringVariableDefinition\n ? string\n : TDefinition extends UrlVariableDefinition\n ? URL\n : TDefinition extends NumberVariableDefinition\n ? number\n : TDefinition extends BooleanVariableDefinition\n ? boolean\n : TDefinition extends EnumVariableDefinition<infer TValue>\n ? TValue\n : TDefinition extends JsonVariableDefinition<infer TValue>\n ? TValue\n : never;\n\ntype EnvValueMap<TSchema extends EnvSchema> = {\n [TKey in keyof TSchema]: InferVariableValue<TSchema[TKey]> | undefined;\n};\n\ntype PickedEnvValueMap<TSchema extends EnvSchema, TKeys extends readonly (keyof TSchema)[]> = {\n [TKey in TKeys[number]]: InferVariableValue<TSchema[TKey]> | undefined;\n};\n\nfunction parseVariableValue(definition: EnvVariableDefinition, rawValue: string): unknown {\n switch (definition.kind) {\n case \"string\":\n return rawValue;\n case \"url\": {\n return new URL(rawValue);\n }\n case \"number\": {\n if (rawValue.trim().length === 0) {\n throw new Error(\"must be a finite number\");\n }\n const parsed = Number(rawValue);\n if (!Number.isFinite(parsed)) {\n throw new Error(\"must be a finite number\");\n }\n return parsed;\n }\n case \"boolean\": {\n const normalized = rawValue.trim().toLowerCase();\n if ([\"true\", \"1\", \"yes\", \"on\"].includes(normalized)) {\n return true;\n }\n if ([\"false\", \"0\", \"no\", \"off\"].includes(normalized)) {\n return false;\n }\n throw new Error('must be a boolean (\"true\" or \"false\")');\n }\n case \"enum\": {\n if (!definition.values.includes(rawValue)) {\n throw new Error(`must be one of: ${definition.values.join(\", \")}`);\n }\n return rawValue;\n }\n case \"json\": {\n return JSON.parse(rawValue);\n }\n default:\n throw new Error(`Unsupported variable kind \"${String((definition as { kind?: unknown }).kind)}\".`);\n }\n}\n\nfunction parseRemoveAfter(removeAfter: string): Date | undefined {\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(removeAfter)) {\n return new Date(`${removeAfter}T23:59:59.999Z`);\n }\n\n const parsed = new Date(removeAfter);\n if (Number.isNaN(parsed.getTime())) {\n return undefined;\n }\n\n return parsed;\n}\n\nfunction hasPublicPrefix(key: string, prefixes: readonly string[]): boolean {\n return prefixes.some((prefix) => key.startsWith(prefix));\n}\n\nfunction isUnsetRawValue(rawValue: string | undefined): boolean {\n return rawValue === undefined || rawValue.trim().length === 0;\n}\n\nfunction createScopeIssue(\n key: string,\n target: EnvTarget,\n scope: EnvScope,\n strict: boolean,\n code: string,\n message: string,\n fix: string\n): EnvValidationIssue {\n return {\n key,\n target,\n scope,\n code,\n message,\n fix,\n severity: strict ? \"error\" : \"warning\"\n };\n}\n\nfunction formatIssue(issue: EnvValidationIssue): string {\n if (!issue.fix) {\n return `- ${issue.key}: ${issue.message}`;\n }\n return `- ${issue.key}: ${issue.message} Fix: ${issue.fix}`;\n}\n\nexport function formatValidationIssues(issues: readonly EnvValidationIssue[]): string {\n if (issues.length === 0) {\n return \"Environment validation failed.\";\n }\n\n const grouped = new Map<string, EnvValidationIssue[]>();\n for (const issue of issues) {\n const groupKey = `${issue.target}|${issue.scope}`;\n const current = grouped.get(groupKey);\n if (current) {\n current.push(issue);\n } else {\n grouped.set(groupKey, [issue]);\n }\n }\n\n const lines: string[] = [\"Environment validation failed:\"];\n\n for (const [groupKey, groupIssues] of grouped) {\n const [target, scope] = groupKey.split(\"|\");\n lines.push(\"\");\n lines.push(`[target=${target} scope=${scope}]`);\n for (const issue of groupIssues) {\n lines.push(formatIssue(issue));\n }\n }\n\n lines.push(\"\");\n lines.push(\"Fix steps:\");\n lines.push(\"1) Add missing required values for the selected target environment.\");\n lines.push(\"2) Align variable names with your prefix policy and variable scope.\");\n\n return lines.join(\"\\n\");\n}\n\nexport class EnvValidationError extends Error {\n readonly issues: readonly EnvValidationIssue[];\n\n constructor(issues: readonly EnvValidationIssue[]) {\n super(formatValidationIssues(issues));\n this.name = \"EnvValidationError\";\n this.issues = [...issues];\n }\n}\n\nexport interface RuntimeEnv<TSchema extends EnvSchema> {\n get<TKey extends keyof TSchema>(key: TKey): InferVariableValue<TSchema[TKey]>;\n optional<TKey extends keyof TSchema>(key: TKey): InferVariableValue<TSchema[TKey]> | undefined;\n assert(): void;\n pick<const TKeys extends readonly (keyof TSchema)[]>(keys: TKeys): PickedEnvValueMap<TSchema, TKeys>;\n all(): EnvValueMap<TSchema>;\n meta<TKey extends keyof TSchema>(key: TKey): TSchema[TKey];\n meta(): TSchema;\n}\n\nexport function createEnv<TSchema extends EnvSchema>(\n schema: TSchema,\n options: CreateEnvOptions\n): RuntimeEnv<TSchema> {\n const strict = options.strict ?? true;\n const throwOnError = options.throwOnError ?? true;\n const envValues = options.values ?? process.env;\n const now = options.now ?? new Date();\n const issues: EnvValidationIssue[] = [];\n const values = {} as EnvValueMap<TSchema>;\n const rawValues: Record<string, string | undefined> = { ...envValues };\n const prefixes = options.prefixPolicy?.publicPrefixes ?? [];\n const warnedDeprecatedKeys = new Set<string>();\n\n for (const [key, definition] of Object.entries(schema) as [keyof TSchema, TSchema[keyof TSchema]][]) {\n const deprecated = definition.deprecated;\n const deprecatedRawValue = envValues[String(key)];\n\n if (!deprecated || isUnsetRawValue(deprecatedRawValue)) {\n continue;\n }\n\n const replacementKey = deprecated.replacedBy;\n const hasReplacementKey = Boolean(replacementKey && replacementKey in schema);\n const replacementRawValue = replacementKey ? rawValues[replacementKey] : undefined;\n\n if (hasReplacementKey && replacementKey && isUnsetRawValue(replacementRawValue)) {\n rawValues[replacementKey] = deprecatedRawValue;\n }\n\n const parsedDeadline = deprecated.removeAfter ? parseRemoveAfter(deprecated.removeAfter) : undefined;\n const isExpired = parsedDeadline ? now.getTime() > parsedDeadline.getTime() : false;\n if (isExpired) {\n issues.push({\n key: String(key),\n target: options.target,\n scope: definition.scope,\n severity: strict ? \"error\" : \"warning\",\n code: \"DEPRECATED_EXPIRED\",\n message: `Deprecated key is past removeAfter (${deprecated.removeAfter}).`,\n fix: replacementKey\n ? `Stop using \"${String(key)}\" and set \"${replacementKey}\" instead.`\n : `Remove \"${String(key)}\" from your environment.`\n });\n continue;\n }\n\n if (!strict && !warnedDeprecatedKeys.has(String(key))) {\n issues.push({\n key: String(key),\n target: options.target,\n scope: definition.scope,\n severity: \"warning\",\n code: \"DEPRECATED_KEY_USED\",\n message: replacementKey\n ? `Deprecated key is used. Prefer \"${replacementKey}\".`\n : \"Deprecated key is used.\",\n fix: replacementKey\n ? `Rename \"${String(key)}\" to \"${replacementKey}\".`\n : `Remove \"${String(key)}\" from your environment when possible.`\n });\n warnedDeprecatedKeys.add(String(key));\n }\n }\n\n for (const [key, definition] of Object.entries(schema) as [keyof TSchema, TSchema[keyof TSchema]][]) {\n const scope = definition.scope;\n const prefixed = hasPublicPrefix(String(key), prefixes);\n\n if (prefixes.length > 0) {\n if (scope === \"client\" && !prefixed) {\n issues.push(\n createScopeIssue(\n String(key),\n options.target,\n scope,\n strict,\n \"PREFIX_CLIENT_MISMATCH\",\n `Client variable must use one of prefixes: ${prefixes.join(\", \")}.`,\n `Rename \"${String(key)}\" with an approved public prefix or mark it as scope: \"server\".`\n )\n );\n } else if (scope === \"server\" && prefixed) {\n issues.push(\n createScopeIssue(\n String(key),\n options.target,\n scope,\n strict,\n \"PREFIX_SERVER_PUBLIC\",\n `Server variable is using a public prefix (${prefixes.join(\", \")}).`,\n `Rename \"${String(key)}\" to remove a public prefix or mark it as scope: \"client\".`\n )\n );\n }\n }\n\n if (options.prefixPolicy?.validate) {\n const additionalIssues = options.prefixPolicy.validate({\n key: String(key),\n target: options.target,\n scope,\n hasPublicPrefix: prefixed,\n publicPrefixes: prefixes,\n strict\n });\n\n if (additionalIssues) {\n for (const additionalIssue of additionalIssues) {\n issues.push({\n ...additionalIssue,\n key: String(key),\n scope,\n target: options.target\n });\n }\n }\n }\n\n const replacementKey = definition.deprecated?.replacedBy;\n const isDeprecatedAlias = Boolean(replacementKey && replacementKey in schema);\n const requiredForTarget = definition.requiredIn.includes(options.target) && !isDeprecatedAlias;\n const rawValue = rawValues[String(key)];\n\n if (isUnsetRawValue(rawValue)) {\n if (definition.defaultValue !== undefined) {\n values[key] = definition.defaultValue as EnvValueMap<TSchema>[typeof key];\n continue;\n }\n\n values[key] = undefined as EnvValueMap<TSchema>[typeof key];\n if (requiredForTarget) {\n issues.push({\n key: String(key),\n target: options.target,\n scope,\n severity: \"error\",\n code: \"MISSING_REQUIRED\",\n message: `Missing required variable for target \"${options.target}\".`,\n fix: `Set \"${String(key)}\" for ${options.target}.`\n });\n }\n continue;\n }\n\n const presentRawValue = rawValue as string;\n\n try {\n values[key] = parseVariableValue(definition, presentRawValue) as EnvValueMap<TSchema>[typeof key];\n } catch (error) {\n const reason = error instanceof Error ? error.message : \"invalid value\";\n issues.push({\n key: String(key),\n target: options.target,\n scope,\n severity: \"error\",\n code: \"INVALID_VALUE\",\n message: `Invalid value: ${reason}.`,\n fix: `Update \"${String(key)}\" to match type \"${definition.kind}\".`\n });\n values[key] = undefined as EnvValueMap<TSchema>[typeof key];\n }\n }\n\n const warnings = issues.filter((issue) => issue.severity === \"warning\");\n for (const warning of warnings) {\n options.onWarning?.(warning);\n }\n\n const hasErrors = issues.some((issue) => issue.severity === \"error\");\n\n function assert(): void {\n if (hasErrors) {\n throw new EnvValidationError(issues);\n }\n }\n\n if (throwOnError) {\n assert();\n }\n\n function get<TKey extends keyof TSchema>(key: TKey): InferVariableValue<TSchema[TKey]> {\n const value = values[key];\n if (value === undefined) {\n throw new Error(\n `Variable \"${String(key)}\" is undefined. Use optional(\"${String(\n key\n )}\") if this key is optional for target \"${options.target}\".`\n );\n }\n return value as InferVariableValue<TSchema[TKey]>;\n }\n\n function optional<TKey extends keyof TSchema>(\n key: TKey\n ): InferVariableValue<TSchema[TKey]> | undefined {\n return values[key] as InferVariableValue<TSchema[TKey]> | undefined;\n }\n\n function pick<const TKeys extends readonly (keyof TSchema)[]>(\n keys: TKeys\n ): PickedEnvValueMap<TSchema, TKeys> {\n const selected = {} as PickedEnvValueMap<TSchema, TKeys>;\n for (const key of keys) {\n selected[key] = values[key] as PickedEnvValueMap<TSchema, TKeys>[typeof key];\n }\n return selected;\n }\n\n function all(): EnvValueMap<TSchema> {\n return { ...values };\n }\n\n function meta<TKey extends keyof TSchema>(key?: TKey): TSchema[TKey] | TSchema {\n if (key !== undefined) {\n return { ...schema[key] };\n }\n\n const allMetadata = {} as TSchema;\n for (const [schemaKey, definition] of Object.entries(schema) as [\n keyof TSchema,\n TSchema[keyof TSchema]\n ][]) {\n allMetadata[schemaKey] = { ...definition };\n }\n return allMetadata;\n }\n\n return {\n get,\n optional,\n assert,\n pick,\n all,\n meta: meta as RuntimeEnv<TSchema>[\"meta\"]\n };\n}\n","import {\n EnvValidationError,\n createEnv,\n type EnvSchema,\n type EnvTarget,\n type EnvValidationIssue\n} from \"./env.js\";\n\nexport interface DriftIssue extends EnvValidationIssue {\n source?: string;\n}\n\nexport interface DriftSummary {\n total: number;\n errors: number;\n warnings: number;\n}\n\nexport interface DriftResult {\n target: EnvTarget;\n summary: DriftSummary;\n issues: DriftIssue[];\n}\n\nexport interface DriftOptions {\n target: EnvTarget;\n values: Record<string, string | undefined>;\n source?: string;\n allowUnknown?: boolean;\n}\n\nfunction sortIssues(issues: readonly DriftIssue[]): DriftIssue[] {\n const severityOrder: Record<DriftIssue[\"severity\"], number> = {\n error: 0,\n warning: 1\n };\n\n return [...issues].sort((left, right) => {\n return (\n severityOrder[left.severity] - severityOrder[right.severity] ||\n left.target.localeCompare(right.target) ||\n left.scope.localeCompare(right.scope) ||\n left.key.localeCompare(right.key) ||\n left.code.localeCompare(right.code)\n );\n });\n}\n\nfunction collectUnknownIssues(\n schema: EnvSchema,\n values: Record<string, string | undefined>,\n target: EnvTarget,\n source?: string\n): DriftIssue[] {\n const schemaKeys = new Set(Object.keys(schema));\n const issues: DriftIssue[] = [];\n\n for (const key of Object.keys(values)) {\n if (schemaKeys.has(key)) {\n continue;\n }\n\n issues.push({\n key,\n target,\n scope: \"server\",\n severity: \"error\",\n code: \"EXTRA_VARIABLE\",\n message: \"Variable is present in snapshot but not defined in schema.\",\n fix: `Remove \"${key}\" from snapshot or add it to schema.`,\n source\n });\n }\n\n return issues;\n}\n\nexport function detectDrift(schema: EnvSchema, options: DriftOptions): DriftResult {\n const issues: DriftIssue[] = [];\n\n const runtime = createEnv(schema, {\n target: options.target,\n values: options.values,\n strict: true,\n throwOnError: false\n });\n\n try {\n runtime.assert();\n } catch (error) {\n if (!(error instanceof EnvValidationError)) {\n throw error;\n }\n\n issues.push(\n ...error.issues.map((issue) => ({\n ...issue,\n source: options.source\n }))\n );\n }\n\n if (!options.allowUnknown) {\n issues.push(\n ...collectUnknownIssues(schema, options.values, options.target, options.source)\n );\n }\n\n const sortedIssues = sortIssues(issues);\n const errors = sortedIssues.filter((issue) => issue.severity === \"error\").length;\n const warnings = sortedIssues.filter((issue) => issue.severity === \"warning\").length;\n\n return {\n target: options.target,\n summary: {\n total: sortedIssues.length,\n errors,\n warnings\n },\n issues: sortedIssues\n };\n}\n","import { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport { prefixPolicies, type EnvSchema, type PrefixPolicy } from \"./env.js\";\nimport { DEFAULT_GENERATED_SCHEMA_FILE, loadOrBuildMigrationSchema } from \"./migrations.js\";\n\nexport const DEFAULT_SCHEMA_FILES = [\n \"env.schema.mjs\",\n \"env.schema.js\",\n \"env.schema.cjs\",\n \"env.schema.json\"\n] as const;\n\nexport interface LoadedSchema {\n schema: EnvSchema;\n prefixPolicy?: PrefixPolicy;\n schemaPath: string;\n app?: string;\n}\n\nexport interface LoadSchemaOptions {\n app?: string;\n}\n\nexport interface ResolveSchemaPathOptions {\n migrationsDir?: string;\n stateFile?: string;\n generatedSchemaFile?: string;\n forceRebuildMigrationSchema?: boolean;\n}\n\ninterface ParsedAppSchemaConfig {\n overrides: EnvSchema;\n only?: readonly string[];\n prefixPolicy?: PrefixPolicy;\n}\n\nasync function exists(filepath: string): Promise<boolean> {\n try {\n await access(filepath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function resolveSchemaPath(\n schemaPath: string | undefined,\n cwd: string,\n options: ResolveSchemaPathOptions = {}\n): Promise<string> {\n if (schemaPath) {\n const resolved = path.resolve(cwd, schemaPath);\n if (!(await exists(resolved))) {\n throw new Error(\n `Schema file not found at \"${resolved}\". Fix: provide a valid path via --schema <path>.`\n );\n }\n return resolved;\n }\n\n try {\n const derived = await loadOrBuildMigrationSchema({\n cwd,\n migrationsDir: options.migrationsDir,\n stateFile: options.stateFile,\n generatedSchemaFile: options.generatedSchemaFile,\n forceRebuild: Boolean(options.forceRebuildMigrationSchema),\n allowEmpty: false\n });\n return derived.schemaPath;\n } catch (error) {\n const generatedSchemaPath = path.resolve(\n cwd,\n options.generatedSchemaFile ?? DEFAULT_GENERATED_SCHEMA_FILE\n );\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Migration-first schema resolution failed in \"${cwd}\" for \"${generatedSchemaPath}\". Fix: run env migrations that define schema (for example via ctx.url(...)/ctx.string(...)), or pass --schema <path> for manual debug/view mode. Error: ${reason}`\n );\n }\n}\n\nfunction validateLoadedSchema(rawSchema: unknown, schemaPath: string): EnvSchema {\n if (!rawSchema || typeof rawSchema !== \"object\" || Array.isArray(rawSchema)) {\n throw new Error(\n `Invalid schema export from \"${schemaPath}\". Fix: export an object map of env keys to variable definitions.`\n );\n }\n\n const schema = rawSchema as Record<string, unknown>;\n for (const [key, candidate] of Object.entries(schema)) {\n if (!candidate || typeof candidate !== \"object\" || Array.isArray(candidate)) {\n throw new Error(\n `Invalid schema definition for key \"${key}\" in \"${schemaPath}\". Fix: each key must map to an object definition.`\n );\n }\n\n const definition = candidate as Record<string, unknown>;\n if (typeof definition.kind !== \"string\") {\n throw new Error(\n `Invalid schema definition for key \"${key}\" in \"${schemaPath}\". Fix: include a \"kind\" field (string/url/number/boolean/enum/json).`\n );\n }\n }\n\n return schema as EnvSchema;\n}\n\nfunction resolvePrefixPolicy(\n rawPolicy: unknown,\n schemaPath: string,\n fieldName = \"prefixPolicy\"\n): PrefixPolicy | undefined {\n if (!rawPolicy) {\n return undefined;\n }\n\n if (typeof rawPolicy === \"string\") {\n if (rawPolicy === \"nextjs\") {\n return prefixPolicies.nextjs;\n }\n if (rawPolicy === \"vite\") {\n return prefixPolicies.vite;\n }\n throw new Error(\n `Unsupported ${fieldName} \"${rawPolicy}\" in \"${schemaPath}\". Fix: use \"nextjs\", \"vite\", or a PrefixPolicy object.`\n );\n }\n\n if (typeof rawPolicy === \"object\" && !Array.isArray(rawPolicy)) {\n const candidate = rawPolicy as { publicPrefixes?: unknown };\n if (!Array.isArray(candidate.publicPrefixes)) {\n throw new Error(\n `Invalid ${fieldName} in \"${schemaPath}\". Fix: include publicPrefixes: string[].`\n );\n }\n return rawPolicy as PrefixPolicy;\n }\n\n throw new Error(\n `Invalid ${fieldName} in \"${schemaPath}\". Fix: use \"nextjs\", \"vite\", or a PrefixPolicy object.`\n );\n}\n\nfunction isRecord(candidate: unknown): candidate is Record<string, unknown> {\n return Boolean(candidate) && typeof candidate === \"object\" && !Array.isArray(candidate);\n}\n\nfunction parseAppSchemaConfig(\n appName: string,\n rawAppConfig: unknown,\n schemaPath: string\n): ParsedAppSchemaConfig {\n if (!isRecord(rawAppConfig)) {\n throw new Error(\n `Invalid app config for \"${appName}\" in \"${schemaPath}\". Fix: app configs must be objects.`\n );\n }\n\n const hasContainerShape = [\"schema\", \"overrides\", \"only\", \"prefixPolicy\"].some((field) =>\n Object.hasOwn(rawAppConfig, field)\n );\n const config = rawAppConfig as {\n schema?: unknown;\n overrides?: unknown;\n only?: unknown;\n prefixPolicy?: unknown;\n };\n\n const overridesCandidate = hasContainerShape ? config.schema ?? config.overrides ?? {} : rawAppConfig;\n const overrides = validateLoadedSchema(overridesCandidate, schemaPath);\n\n let only: readonly string[] | undefined;\n if (hasContainerShape && config.only !== undefined) {\n if (!Array.isArray(config.only) || config.only.some((value) => typeof value !== \"string\")) {\n throw new Error(\n `Invalid apps.${appName}.only in \"${schemaPath}\". Fix: provide a string[] of schema keys.`\n );\n }\n only = [...config.only];\n }\n\n const prefixPolicy = hasContainerShape\n ? resolvePrefixPolicy(config.prefixPolicy, schemaPath, `apps.${appName}.prefixPolicy`)\n : undefined;\n\n return {\n overrides,\n only,\n prefixPolicy\n };\n}\n\nfunction parseApps(\n rawApps: unknown,\n schemaPath: string\n): Record<string, ParsedAppSchemaConfig> {\n if (rawApps === undefined) {\n return {};\n }\n\n if (!isRecord(rawApps)) {\n throw new Error(\n `Invalid apps config in \"${schemaPath}\". Fix: export apps as an object map keyed by app name.`\n );\n }\n\n const parsed: Record<string, ParsedAppSchemaConfig> = {};\n for (const [appName, appConfig] of Object.entries(rawApps)) {\n parsed[appName] = parseAppSchemaConfig(appName, appConfig, schemaPath);\n }\n return parsed;\n}\n\nfunction selectSchemaForApp(\n baseSchema: EnvSchema,\n appName: string,\n appConfig: ParsedAppSchemaConfig,\n schemaPath: string\n): EnvSchema {\n const mergedSchema: EnvSchema = {\n ...baseSchema,\n ...appConfig.overrides\n };\n\n if (!appConfig.only) {\n return mergedSchema;\n }\n\n const subsetSchema: EnvSchema = {};\n for (const key of appConfig.only) {\n if (!(key in mergedSchema)) {\n throw new Error(\n `Unknown key \"${key}\" in apps.${appName}.only for \"${schemaPath}\". Fix: add this key to base/schema overrides or remove it from only.`\n );\n }\n subsetSchema[key] = mergedSchema[key];\n }\n return subsetSchema;\n}\n\nfunction normalizeLoadedSchema(\n rawSource: unknown,\n schemaPath: string,\n options: LoadSchemaOptions\n): LoadedSchema {\n const source = isRecord(rawSource) ? rawSource : {};\n const baseCandidate = source.baseSchema ?? source.default ?? source.schema ?? rawSource;\n const baseSchema = validateLoadedSchema(baseCandidate, schemaPath);\n const globalPrefixPolicy = resolvePrefixPolicy(source.prefixPolicy, schemaPath, \"prefixPolicy\");\n const apps = parseApps(source.apps ?? source.appSchemas, schemaPath);\n\n if (!options.app) {\n return {\n schema: baseSchema,\n prefixPolicy: globalPrefixPolicy,\n schemaPath\n };\n }\n\n const appConfig = apps[options.app];\n if (!appConfig) {\n const knownApps = Object.keys(apps);\n const knownAppsText = knownApps.length > 0 ? knownApps.join(\", \") : \"none\";\n throw new Error(\n `Unknown app \"${options.app}\" for \"${schemaPath}\". Fix: use one of: ${knownAppsText}.`\n );\n }\n\n return {\n schema: selectSchemaForApp(baseSchema, options.app, appConfig, schemaPath),\n prefixPolicy: appConfig.prefixPolicy ?? globalPrefixPolicy,\n schemaPath,\n app: options.app\n };\n}\n\nexport async function loadSchema(\n schemaPath: string,\n options: LoadSchemaOptions = {}\n): Promise<LoadedSchema> {\n if (schemaPath.endsWith(\".json\")) {\n const jsonContent = await readFile(schemaPath, \"utf8\");\n return normalizeLoadedSchema(JSON.parse(jsonContent), schemaPath, options);\n }\n\n const imported = await import(pathToFileURL(schemaPath).href);\n\n return normalizeLoadedSchema(imported, schemaPath, options);\n}\n","import { createHash } from \"node:crypto\";\nimport { access, mkdir, readFile, readdir, unlink, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n formatDotenvValue,\n parseDotenv,\n type DotenvCommentLine,\n type DotenvDocument,\n type DotenvPairLine\n} from \"./dotenv.js\";\nimport {\n type DeprecatedMetadata,\n prefixPolicies,\n type ProviderMapping,\n type EnvSchema,\n type EnvTarget,\n type EnvVariableDefinition,\n type PrefixPolicy\n} from \"./env.js\";\nimport { generateArtifacts } from \"./generators.js\";\nimport {\n DEFAULT_ENV_AUDIT_FILE,\n DEFAULT_ENV_DOC_FILE,\n DEFAULT_GENERATED_SCHEMA_FILE as DEFAULT_GENERATED_SCHEMA_FILE_LAYOUT,\n DEFAULT_MIGRATIONS_DIR as DEFAULT_MIGRATIONS_DIR_LAYOUT,\n DEFAULT_MIGRATION_STATE_FILE as DEFAULT_MIGRATION_STATE_FILE_LAYOUT,\n ensureWrkspaceEnvGitignore,\n toWrkspaceEnvIgnoreEntry\n} from \"./workspace-layout.js\";\n\nexport const DEFAULT_MIGRATIONS_DIR = DEFAULT_MIGRATIONS_DIR_LAYOUT;\nexport const DEFAULT_MIGRATION_STATE_FILE = DEFAULT_MIGRATION_STATE_FILE_LAYOUT;\nexport const DEFAULT_GENERATED_SCHEMA_FILE = DEFAULT_GENERATED_SCHEMA_FILE_LAYOUT;\nexport const DEFAULT_MIGRATION_TARGET_FILES = [\n \".env.local\",\n \".env\",\n \".env.example\",\n \".env.defaults\"\n] as const;\n\nexport type EnvMigrationTargetFile = (typeof DEFAULT_MIGRATION_TARGET_FILES)[number];\n\nconst ENV_KEY_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\nconst MIGRATION_FILE_PATTERN = /\\.(?:mjs|cjs|js|mts|cts|ts)$/;\n\ntype MigrationDirection = \"up\" | \"down\";\n\ninterface TypeScriptModule {\n transpileModule(\n input: string,\n transpileOptions: {\n fileName?: string;\n compilerOptions?: {\n target?: number;\n module?: number;\n };\n }\n ): { outputText: string };\n ModuleKind: {\n ESNext: number;\n };\n ScriptTarget: {\n ES2022: number;\n };\n}\n\nexport interface EnvMigrationTargetOptions {\n targets?: readonly EnvMigrationTargetFile[];\n}\n\nexport interface EnvMigrationUpdateVariableOptions extends EnvMigrationTargetOptions {\n overwrite?: boolean;\n createIfMissing?: boolean;\n comment?: string | readonly string[];\n}\n\nexport interface EnvMigrationRemoveVariableOptions extends EnvMigrationTargetOptions {}\n\nexport interface EnvMigrationRenameVariableOptions extends EnvMigrationTargetOptions {\n overwrite?: boolean;\n comment?: string | readonly string[];\n}\n\nexport interface EnvMigrationVariableChain {\n kind(kind: EnvVariableDefinition[\"kind\"]): EnvMigrationVariableChain;\n define(definition: EnvVariableDefinition): EnvMigrationVariableChain;\n string(): EnvMigrationVariableChain;\n url(): EnvMigrationVariableChain;\n number(): EnvMigrationVariableChain;\n boolean(): EnvMigrationVariableChain;\n enum(): EnvMigrationVariableChain;\n json(): EnvMigrationVariableChain;\n scope(scope: \"server\" | \"client\"): EnvMigrationVariableChain;\n requiredIn(targets: EnvTarget | readonly EnvTarget[]): EnvMigrationVariableChain;\n defaultValue(value: unknown): EnvMigrationVariableChain;\n sensitive(value?: boolean): EnvMigrationVariableChain;\n values(values: string | readonly string[]): EnvMigrationVariableChain;\n description(value: string | undefined): EnvMigrationVariableChain;\n example(value: string | undefined): EnvMigrationVariableChain;\n owner(value: string | undefined): EnvMigrationVariableChain;\n rotationDays(value: number | undefined): EnvMigrationVariableChain;\n deprecated(value: DeprecatedMetadata | undefined): EnvMigrationVariableChain;\n deprecate(\n replacedBy?: string,\n removeAfter?: string,\n message?: string\n ): EnvMigrationVariableChain;\n provider(value: ProviderMapping | undefined): EnvMigrationVariableChain;\n providerAlias(provider: string, key: string | undefined): EnvMigrationVariableChain;\n tags(values: string | readonly string[] | undefined): EnvMigrationVariableChain;\n tag(value: string): EnvMigrationVariableChain;\n value(value: string): EnvMigrationVariableChain;\n targets(targets: EnvMigrationTargetFile | readonly EnvMigrationTargetFile[]): EnvMigrationVariableChain;\n overwrite(value?: boolean): EnvMigrationVariableChain;\n createIfMissing(value?: boolean): EnvMigrationVariableChain;\n comment(comment: string | readonly string[] | undefined): EnvMigrationVariableChain;\n rename(toKey: string, options?: EnvMigrationRenameVariableOptions): EnvMigrationVariableChain;\n remove(options?: EnvMigrationRemoveVariableOptions): EnvMigrationVariableChain;\n}\n\nexport interface MigrationDerivedSchema {\n schemaPath: string;\n schema: EnvSchema;\n prefixPolicy?: PrefixPolicy;\n appliedMigrationIds: string[];\n}\n\nexport interface EnvMigrationOperation {\n kind: \"updateVariable\" | \"removeVariable\" | \"renameVariable\" | \"setPrefixPolicy\";\n key?: string;\n fromKey?: string;\n toKey?: string;\n targets: EnvMigrationTargetFile[];\n}\n\nexport interface EnvMigrationContext {\n key(key: string): EnvMigrationVariableChain;\n string(key: string): EnvMigrationVariableChain;\n url(key: string): EnvMigrationVariableChain;\n number(key: string): EnvMigrationVariableChain;\n boolean(key: string): EnvMigrationVariableChain;\n enum(key: string): EnvMigrationVariableChain;\n json(key: string): EnvMigrationVariableChain;\n setPrefixPolicy(policy: PrefixPolicy | \"nextjs\" | \"vite\" | undefined): void;\n}\n\nexport interface EnvMigrationModule {\n id: string;\n up(ctx: EnvMigrationContext): Promise<void> | void;\n down(ctx: EnvMigrationContext): Promise<void> | void;\n}\n\nexport interface LoadedEnvMigration extends EnvMigrationModule {\n filePath: string;\n checksum: string;\n}\n\nexport interface AppliedMigrationState {\n id: string;\n appliedAt: string;\n checksum: string;\n}\n\nexport interface EnvMigrationState {\n version: 1;\n applied: AppliedMigrationState[];\n}\n\nexport interface MigrationStateLoadResult {\n statePath: string;\n state: EnvMigrationState;\n}\n\nexport interface MigrationStatusEntry {\n id: string;\n status: \"applied\" | \"pending\" | \"changed\" | \"missing\";\n filePath?: string;\n appliedAt?: string;\n checksum?: string;\n currentChecksum?: string;\n}\n\nexport interface MigrationStatusResult {\n migrationsDir: string;\n statePath: string;\n entries: MigrationStatusEntry[];\n summary: {\n total: number;\n applied: number;\n pending: number;\n changed: number;\n missing: number;\n };\n}\n\nexport interface ApplyMigrationsOptions {\n cwd?: string;\n migrationsDir?: string;\n stateFile?: string;\n generatedSchemaFile?: string;\n now?: Date;\n}\n\nexport interface ApplyMigrationsResult {\n migrationsDir: string;\n statePath: string;\n applied: string[];\n changedFiles: string[];\n pendingCount: number;\n}\n\nexport interface RollbackMigrationsOptions extends ApplyMigrationsOptions {\n steps: number;\n}\n\nexport interface RollbackMigrationsResult {\n migrationsDir: string;\n statePath: string;\n rolledBack: string[];\n changedFiles: string[];\n remainingApplied: number;\n}\n\nexport interface CreateMigrationFileOptions {\n name: string;\n cwd?: string;\n migrationsDir?: string;\n now?: Date;\n template?: (id: string) => string;\n}\n\nexport interface CreateMigrationFileResult {\n id: string;\n filePath: string;\n migrationsDir: string;\n}\n\nexport interface LoadedEnvTargetDocument {\n target: EnvMigrationTargetFile;\n filePath: string;\n document: DotenvDocument;\n source: string;\n}\n\nexport type LoadedEnvTargetDocuments = Map<EnvMigrationTargetFile, LoadedEnvTargetDocument>;\n\ninterface InMemorySchemaState {\n schema: EnvSchema;\n prefixPolicy?: PrefixPolicy;\n}\n\ninterface PersistedGeneratedSchema {\n version: 1;\n mode: \"migration-first\";\n appliedMigrationIds: string[];\n schema: EnvSchema;\n prefixPolicy?: \"nextjs\" | \"vite\" | { name?: string; publicPrefixes: string[] };\n}\n\nasync function pathExists(filepath: string): Promise<boolean> {\n try {\n await access(filepath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction assertEnvKey(key: string): void {\n if (!ENV_KEY_PATTERN.test(key)) {\n throw new Error(\n `Invalid env key \"${key}\". Fix: use a key matching ${ENV_KEY_PATTERN.toString()}.`\n );\n }\n}\n\nfunction cloneSchemaDefinition(definition: EnvVariableDefinition): EnvVariableDefinition {\n const enumValues =\n definition.kind === \"enum\" && Array.isArray(definition.values) ? [...definition.values] : undefined;\n return {\n ...definition,\n requiredIn: [...definition.requiredIn],\n deprecated: definition.deprecated ? { ...definition.deprecated } : undefined,\n provider: definition.provider ? { ...definition.provider } : undefined,\n tags: definition.tags ? [...definition.tags] : undefined,\n values: enumValues\n } as EnvVariableDefinition;\n}\n\nfunction normalizeSchemaDefinition(key: string, definition: unknown): EnvVariableDefinition {\n if (!definition || typeof definition !== \"object\" || Array.isArray(definition)) {\n throw new Error(\n `Invalid schema definition for \"${key}\". Fix: provide an object with at least a \"kind\" field.`\n );\n }\n\n const normalized = cloneSchemaDefinition(definition as EnvVariableDefinition);\n const kind = normalized.kind;\n if (![\"string\", \"url\", \"number\", \"boolean\", \"enum\", \"json\"].includes(kind)) {\n throw new Error(\n `Invalid schema kind \"${String(kind)}\" for \"${key}\". Fix: use one of string|url|number|boolean|enum|json.`\n );\n }\n\n const scope = normalized.scope ?? \"server\";\n if (scope !== \"server\" && scope !== \"client\") {\n throw new Error(\n `Invalid schema scope \"${String(scope)}\" for \"${key}\". Fix: use \"server\" or \"client\".`\n );\n }\n normalized.scope = scope;\n\n const requiredIn = normalized.requiredIn ?? ([\"dev\", \"preview\", \"prod\"] as const);\n const uniqueTargets = Array.from(new Set(requiredIn));\n for (const target of uniqueTargets) {\n if (target !== \"dev\" && target !== \"preview\" && target !== \"prod\") {\n throw new Error(\n `Invalid requiredIn target \"${String(target)}\" for \"${key}\". Fix: use dev|preview|prod.`\n );\n }\n }\n normalized.requiredIn = uniqueTargets as readonly EnvTarget[];\n\n if (kind === \"enum\") {\n const enumValues = normalized.values;\n if (!Array.isArray(enumValues) || enumValues.length === 0) {\n throw new Error(\n `Invalid enum schema for \"${key}\". Fix: provide a non-empty values array.`\n );\n }\n if (enumValues.some((value) => typeof value !== \"string\")) {\n throw new Error(`Invalid enum schema for \"${key}\". Fix: all enum values must be strings.`);\n }\n normalized.values = [...enumValues];\n }\n\n return normalized;\n}\n\nfunction normalizePrefixPolicy(\n policy: PrefixPolicy | \"nextjs\" | \"vite\" | undefined\n): PrefixPolicy | undefined {\n if (!policy) {\n return undefined;\n }\n\n if (policy === \"nextjs\") {\n return prefixPolicies.nextjs;\n }\n if (policy === \"vite\") {\n return prefixPolicies.vite;\n }\n\n if (!Array.isArray(policy.publicPrefixes)) {\n throw new Error(\n 'Invalid prefix policy. Fix: provide \"nextjs\", \"vite\", or a PrefixPolicy with publicPrefixes.'\n );\n }\n if (policy.publicPrefixes.some((prefix) => typeof prefix !== \"string\")) {\n throw new Error(\n 'Invalid prefix policy. Fix: provide \"nextjs\", \"vite\", or a PrefixPolicy with publicPrefixes.'\n );\n }\n\n return {\n ...policy,\n publicPrefixes: [...policy.publicPrefixes]\n };\n}\n\nfunction serializePrefixPolicy(\n policy: PrefixPolicy | undefined\n): PersistedGeneratedSchema[\"prefixPolicy\"] {\n if (!policy) {\n return undefined;\n }\n\n if (policy === prefixPolicies.nextjs || policy.name === \"nextjs\") {\n return \"nextjs\";\n }\n if (policy === prefixPolicies.vite || policy.name === \"vite\") {\n return \"vite\";\n }\n\n return {\n name: policy.name,\n publicPrefixes: [...policy.publicPrefixes]\n };\n}\n\nfunction deserializePrefixPolicy(\n value: PersistedGeneratedSchema[\"prefixPolicy\"]\n): PrefixPolicy | undefined {\n if (!value) {\n return undefined;\n }\n\n if (value === \"nextjs\") {\n return prefixPolicies.nextjs;\n }\n\n if (value === \"vite\") {\n return prefixPolicies.vite;\n }\n\n if (!Array.isArray(value.publicPrefixes) || value.publicPrefixes.some((prefix) => typeof prefix !== \"string\")) {\n throw new Error(\n 'Invalid generated schema file prefix policy. Fix: delete the generated schema file and rebuild it from migrations.'\n );\n }\n\n return {\n name: value.name,\n publicPrefixes: [...value.publicPrefixes]\n };\n}\n\nfunction toEnvString(value: unknown, kind: EnvVariableDefinition[\"kind\"]): string {\n if (value === undefined || value === null) {\n return \"\";\n }\n\n if (kind === \"boolean\" && typeof value === \"boolean\") {\n return value ? \"true\" : \"false\";\n }\n\n if (kind === \"number\" && typeof value === \"number\") {\n return `${value}`;\n }\n\n if (kind === \"json\") {\n if (typeof value === \"string\") {\n return value;\n }\n return JSON.stringify(value);\n }\n\n return String(value);\n}\n\nfunction defaultEnvValueForDefinition(definition: EnvVariableDefinition): string {\n if (definition.sensitive) {\n return \"\";\n }\n\n if (definition.defaultValue === undefined) {\n return \"\";\n }\n\n return toEnvString(definition.defaultValue, definition.kind);\n}\n\nfunction normalizeTargets(targets: readonly EnvMigrationTargetFile[] | undefined): EnvMigrationTargetFile[] {\n if (!targets || targets.length === 0) {\n return [...DEFAULT_MIGRATION_TARGET_FILES];\n }\n\n const unique = Array.from(new Set(targets));\n for (const target of unique) {\n if (!DEFAULT_MIGRATION_TARGET_FILES.includes(target)) {\n throw new Error(\n `Unsupported migration target \"${target}\". Fix: use one of ${DEFAULT_MIGRATION_TARGET_FILES.join(\n \", \"\n )}.`\n );\n }\n }\n return unique;\n}\n\nfunction findPairIndexes(document: DotenvDocument, key: string): number[] {\n const indexes: number[] = [];\n for (let index = 0; index < document.lines.length; index += 1) {\n const line = document.lines[index];\n if (line.type === \"pair\" && line.key === key) {\n indexes.push(index);\n }\n }\n return indexes;\n}\n\nfunction findLastPairIndex(document: DotenvDocument, key: string): number {\n for (let index = document.lines.length - 1; index >= 0; index -= 1) {\n const line = document.lines[index];\n if (line.type === \"pair\" && line.key === key) {\n return index;\n }\n }\n return -1;\n}\n\nfunction renderPairLine(line: DotenvPairLine): string {\n const value = formatDotenvValue(line.value, line.quote);\n const exportPrefix = line.exported ? \"export \" : \"\";\n const inlineComment = line.inlineComment ? ` ${line.inlineComment}` : \"\";\n return `${exportPrefix}${line.key}=${value}${inlineComment}`;\n}\n\nfunction createPairLine(key: string, value: string): DotenvPairLine {\n return {\n type: \"pair\",\n raw: `${key}=${formatDotenvValue(value)}`,\n key,\n value,\n quote: \"none\",\n exported: false\n };\n}\n\nfunction normalizeCommentLines(comment: string | readonly string[] | undefined): DotenvCommentLine[] {\n if (comment === undefined) {\n return [];\n }\n\n const chunks = typeof comment === \"string\" ? comment.split(/\\r?\\n/) : [...comment];\n const output: DotenvCommentLine[] = [];\n\n for (const chunk of chunks) {\n const trimmed = chunk.trim();\n if (trimmed.length === 0) {\n continue;\n }\n\n const normalized = trimmed.startsWith(\"#\") ? trimmed : `# ${trimmed}`;\n output.push({\n type: \"comment\",\n raw: normalized\n });\n }\n\n return output;\n}\n\nfunction setCommentBlockForKey(\n document: DotenvDocument,\n key: string,\n comment: string | readonly string[] | undefined\n): void {\n const index = findLastPairIndex(document, key);\n if (index < 0) {\n return;\n }\n\n let start = index;\n while (start > 0 && document.lines[start - 1]?.type === \"comment\") {\n start -= 1;\n }\n\n const newComments = normalizeCommentLines(comment);\n document.lines.splice(start, index - start, ...newComments);\n}\n\nfunction upsertValue(\n document: DotenvDocument,\n key: string,\n value: string,\n options: {\n overwrite: boolean;\n createIfMissing: boolean;\n comment?: string | readonly string[];\n }\n): void {\n const existingIndex = findLastPairIndex(document, key);\n if (existingIndex >= 0) {\n if (options.overwrite) {\n const existingLine = document.lines[existingIndex];\n if (existingLine.type === \"pair\") {\n existingLine.value = value;\n existingLine.raw = renderPairLine(existingLine);\n }\n }\n\n if (options.comment !== undefined) {\n setCommentBlockForKey(document, key, options.comment);\n }\n return;\n }\n\n if (!options.createIfMissing) {\n return;\n }\n\n const commentLines = normalizeCommentLines(options.comment);\n document.lines.push(...commentLines, createPairLine(key, value));\n}\n\nfunction removeKey(document: DotenvDocument, key: string): void {\n for (let index = document.lines.length - 1; index >= 0; index -= 1) {\n const line = document.lines[index];\n if (line.type === \"pair\" && line.key === key) {\n document.lines.splice(index, 1);\n }\n }\n}\n\nfunction renameKey(\n document: DotenvDocument,\n fromKey: string,\n toKey: string,\n options: {\n overwrite: boolean;\n comment?: string | readonly string[];\n }\n): void {\n if (fromKey === toKey) {\n if (options.comment !== undefined) {\n setCommentBlockForKey(document, toKey, options.comment);\n }\n return;\n }\n\n const fromIndexes = findPairIndexes(document, fromKey);\n if (fromIndexes.length === 0) {\n return;\n }\n\n const toIndex = findLastPairIndex(document, toKey);\n if (toIndex >= 0) {\n if (!options.overwrite) {\n return;\n }\n\n const sourceLine = document.lines[fromIndexes[fromIndexes.length - 1]];\n const targetLine = document.lines[toIndex];\n if (sourceLine.type === \"pair\" && targetLine.type === \"pair\") {\n targetLine.value = sourceLine.value;\n targetLine.raw = renderPairLine(targetLine);\n }\n\n removeKey(document, fromKey);\n if (options.comment !== undefined) {\n setCommentBlockForKey(document, toKey, options.comment);\n }\n return;\n }\n\n for (const index of fromIndexes) {\n const line = document.lines[index];\n if (line.type !== \"pair\") {\n continue;\n }\n line.key = toKey;\n line.raw = renderPairLine(line);\n }\n\n if (options.comment !== undefined) {\n setCommentBlockForKey(document, toKey, options.comment);\n }\n}\n\nfunction renderDocument(document: DotenvDocument): string {\n if (document.lines.length === 0) {\n return \"\";\n }\n\n let output = document.lines.map((line) => line.raw).join(document.newline);\n if (document.hasTrailingNewline) {\n output += document.newline;\n }\n return output;\n}\n\nfunction newDocumentForMissingFile(): DotenvDocument {\n return {\n lines: [],\n newline: \"\\n\",\n hasTrailingNewline: true\n };\n}\n\nexport async function loadEnvTargetDocuments(\n options: {\n cwd?: string;\n targets?: readonly EnvMigrationTargetFile[];\n } = {}\n): Promise<LoadedEnvTargetDocuments> {\n const cwd = options.cwd ?? process.cwd();\n const targets = normalizeTargets(options.targets);\n const output: LoadedEnvTargetDocuments = new Map();\n\n for (const target of targets) {\n const filePath = path.resolve(cwd, target);\n const exists = await pathExists(filePath);\n if (!exists) {\n output.set(target, {\n target,\n filePath,\n document: newDocumentForMissingFile(),\n source: \"\"\n });\n continue;\n }\n\n const source = await readFile(filePath, \"utf8\");\n output.set(target, {\n target,\n filePath,\n document: parseDotenv(source),\n source\n });\n }\n\n return output;\n}\n\nfunction createNoopTargetDocuments(): LoadedEnvTargetDocuments {\n const documents: LoadedEnvTargetDocuments = new Map();\n\n for (const target of DEFAULT_MIGRATION_TARGET_FILES) {\n documents.set(target, {\n target,\n filePath: target,\n source: \"\",\n document: newDocumentForMissingFile()\n });\n }\n\n return documents;\n}\n\nexport function hasKeyInTargetDocuments(\n documents: LoadedEnvTargetDocuments,\n target: EnvMigrationTargetFile,\n key: string\n): boolean {\n const document = documents.get(target)?.document;\n if (!document) {\n return false;\n }\n\n return findLastPairIndex(document, key) >= 0;\n}\n\nconst finalizeFluentDefinitionsSymbol = Symbol(\"@wrkspace-co/env/finalizeFluentDefinitions\");\n\ninterface InternalEnvMigrationContext extends EnvMigrationContext {\n [finalizeFluentDefinitionsSymbol]: () => void;\n}\n\nfunction createInitialFluentDefinition(kind: EnvVariableDefinition[\"kind\"]): EnvVariableDefinition {\n const base = {\n kind,\n scope: \"server\" as const,\n requiredIn: [\"dev\", \"preview\", \"prod\"] as const\n };\n\n if (kind === \"enum\") {\n return {\n ...base,\n kind: \"enum\",\n values: []\n };\n }\n\n return base as EnvVariableDefinition;\n}\n\nfunction normalizeRequiredInInput(\n requiredIn: EnvTarget | readonly EnvTarget[]\n): readonly EnvTarget[] {\n if (Array.isArray(requiredIn)) {\n return [...requiredIn];\n }\n return [requiredIn as EnvTarget];\n}\n\nexport function finalizeFluentDefinitions(context: EnvMigrationContext): void {\n const maybeContext = context as Partial<InternalEnvMigrationContext>;\n if (typeof maybeContext[finalizeFluentDefinitionsSymbol] === \"function\") {\n maybeContext[finalizeFluentDefinitionsSymbol]();\n }\n}\n\nexport function createEnvMigrationContext(\n documents: LoadedEnvTargetDocuments,\n operationLog: EnvMigrationOperation[] = [],\n schemaState?: InMemorySchemaState\n): EnvMigrationContext {\n interface VariableChainState {\n key: string;\n definition?: EnvVariableDefinition;\n explicitValue?: string;\n options: EnvMigrationUpdateVariableOptions;\n pendingUpdate: boolean;\n }\n\n const variableChains: VariableChainState[] = [];\n let context!: InternalEnvMigrationContext;\n\n const resolveTargets = (\n options?:\n | EnvMigrationTargetOptions\n | EnvMigrationUpdateVariableOptions\n | EnvMigrationRenameVariableOptions\n | EnvMigrationRemoveVariableOptions\n ): EnvMigrationTargetFile[] => normalizeTargets(options?.targets);\n\n const forTargetFiles = (targetFiles: readonly EnvMigrationTargetFile[]): Array<LoadedEnvTargetDocument> =>\n targetFiles.map((target) => {\n const targetDocument = documents.get(target);\n if (!targetDocument) {\n throw new Error(`Missing in-memory target \"${target}\".`);\n }\n return targetDocument;\n });\n\n const setSchemaDefinition = (key: string, definition: EnvVariableDefinition): EnvVariableDefinition => {\n const normalizedDefinition = normalizeSchemaDefinition(key, definition);\n if (schemaState) {\n schemaState.schema[key] = normalizedDefinition;\n }\n return normalizedDefinition;\n };\n\n const removeSchemaDefinition = (key: string): void => {\n if (!schemaState) {\n return;\n }\n delete schemaState.schema[key];\n };\n\n const renameSchemaDefinition = (\n fromKey: string,\n toKey: string,\n options?: EnvMigrationRenameVariableOptions\n ): void => {\n if (!schemaState || fromKey === toKey) {\n return;\n }\n\n if (!(fromKey in schemaState.schema)) {\n return;\n }\n\n if (toKey in schemaState.schema && !options?.overwrite) {\n return;\n }\n\n const current = schemaState.schema[fromKey];\n schemaState.schema[toKey] = normalizeSchemaDefinition(toKey, current);\n delete schemaState.schema[fromKey];\n };\n\n const upsertKeyInTargets = (\n key: string,\n value: string,\n options?: EnvMigrationUpdateVariableOptions\n ): EnvMigrationTargetFile[] => {\n const targetFiles = resolveTargets(options);\n\n for (const targetDocument of forTargetFiles(targetFiles)) {\n upsertValue(targetDocument.document, key, value, {\n overwrite: options?.overwrite !== false,\n createIfMissing: options?.createIfMissing !== false,\n comment: options?.comment\n });\n }\n\n return targetFiles;\n };\n\n const removeKeyInTargets = (\n key: string,\n options?: EnvMigrationRemoveVariableOptions\n ): EnvMigrationTargetFile[] => {\n const targetFiles = resolveTargets(options);\n for (const targetDocument of forTargetFiles(targetFiles)) {\n removeKey(targetDocument.document, key);\n }\n return targetFiles;\n };\n\n const renameKeyInTargets = (\n fromKey: string,\n toKey: string,\n options?: EnvMigrationRenameVariableOptions\n ): EnvMigrationTargetFile[] => {\n const targetFiles = resolveTargets(options);\n for (const targetDocument of forTargetFiles(targetFiles)) {\n renameKey(targetDocument.document, fromKey, toKey, {\n overwrite: Boolean(options?.overwrite),\n comment: options?.comment\n });\n }\n return targetFiles;\n };\n\n const applyUpdateVariable = (\n key: string,\n definition: EnvVariableDefinition,\n value?: string,\n options?: EnvMigrationUpdateVariableOptions\n ): void => {\n assertEnvKey(key);\n const normalizedDefinition = setSchemaDefinition(key, definition);\n const targetFiles = upsertKeyInTargets(\n key,\n value ?? defaultEnvValueForDefinition(normalizedDefinition),\n options\n );\n\n operationLog.push({\n kind: \"updateVariable\",\n key,\n targets: targetFiles\n });\n };\n\n const applyRemoveVariable = (key: string, options?: EnvMigrationRemoveVariableOptions): void => {\n assertEnvKey(key);\n removeSchemaDefinition(key);\n const targetFiles = removeKeyInTargets(key, options);\n operationLog.push({\n kind: \"removeVariable\",\n key,\n targets: targetFiles\n });\n };\n\n const applyRenameVariable = (\n fromKey: string,\n toKey: string,\n options?: EnvMigrationRenameVariableOptions\n ): void => {\n assertEnvKey(fromKey);\n assertEnvKey(toKey);\n renameSchemaDefinition(fromKey, toKey, options);\n const targetFiles = renameKeyInTargets(fromKey, toKey, options);\n operationLog.push({\n kind: \"renameVariable\",\n fromKey,\n toKey,\n targets: targetFiles\n });\n };\n\n const existingSchemaDefinitionForKey = (key: string): EnvVariableDefinition | undefined => {\n if (!schemaState) {\n return undefined;\n }\n const existing = schemaState.schema[key];\n if (!existing) {\n return undefined;\n }\n return cloneSchemaDefinition(existing);\n };\n\n const ensureChainDefinition = (\n state: VariableChainState,\n methodName: string\n ): EnvVariableDefinition => {\n const definition = state.definition ?? existingSchemaDefinitionForKey(state.key);\n if (!definition) {\n throw new Error(\n `Cannot call .${methodName}(...) for \"${state.key}\" before setting its kind. Fix: call .kind(...), .define(...), or start with ctx.string(...)/ctx.url(...)/ctx.number(...)/ctx.boolean(...)/ctx.enum(...)/ctx.json(...).`\n );\n }\n state.definition = definition;\n return definition;\n };\n\n const markPendingUpdate = (state: VariableChainState): void => {\n state.pendingUpdate = true;\n };\n\n const flushChain = (state: VariableChainState): void => {\n if (!state.pendingUpdate) {\n return;\n }\n\n if (!state.definition) {\n throw new Error(\n `Incomplete fluent schema definition for \"${state.key}\". Fix: call .kind(...) or .define(...) before applying variable metadata/value.`\n );\n }\n\n if (state.definition.kind === \"enum\" && state.definition.values.length === 0) {\n throw new Error(\n `Incomplete fluent schema definition for \"${state.key}\". Fix: enum keys require .values(...).`\n );\n }\n\n applyUpdateVariable(\n state.key,\n state.definition,\n state.explicitValue ?? defaultEnvValueForDefinition(state.definition),\n state.options\n );\n state.pendingUpdate = false;\n };\n\n const mergeRenameOptions = (\n state: VariableChainState,\n options: EnvMigrationRenameVariableOptions | undefined\n ): EnvMigrationRenameVariableOptions | undefined => {\n const merged: EnvMigrationRenameVariableOptions = {};\n if (options?.targets !== undefined) {\n merged.targets = options.targets;\n } else if (state.options.targets !== undefined) {\n merged.targets = state.options.targets;\n }\n if (options?.overwrite !== undefined) {\n merged.overwrite = options.overwrite;\n } else if (state.options.overwrite !== undefined) {\n merged.overwrite = state.options.overwrite;\n }\n if (options?.comment !== undefined) {\n merged.comment = options.comment;\n } else if (state.options.comment !== undefined) {\n merged.comment = state.options.comment;\n }\n\n if (\n merged.targets === undefined &&\n merged.overwrite === undefined &&\n merged.comment === undefined\n ) {\n return undefined;\n }\n return merged;\n };\n\n const mergeRemoveOptions = (\n state: VariableChainState,\n options: EnvMigrationRemoveVariableOptions | undefined\n ): EnvMigrationRemoveVariableOptions | undefined => {\n const merged: EnvMigrationRemoveVariableOptions = {};\n if (options?.targets !== undefined) {\n merged.targets = options.targets;\n } else if (state.options.targets !== undefined) {\n merged.targets = state.options.targets;\n }\n\n if (merged.targets === undefined) {\n return undefined;\n }\n return merged;\n };\n\n const createVariableChain = (\n key: string,\n initialKind?: EnvVariableDefinition[\"kind\"]\n ): EnvMigrationVariableChain => {\n assertEnvKey(key);\n\n const existingDefinition = existingSchemaDefinitionForKey(key);\n const state: VariableChainState = {\n key,\n definition: initialKind ? createInitialFluentDefinition(initialKind) : existingDefinition,\n options: {},\n pendingUpdate: Boolean(initialKind)\n };\n variableChains.push(state);\n\n const chain: EnvMigrationVariableChain = {\n kind(kind) {\n state.definition = createInitialFluentDefinition(kind);\n markPendingUpdate(state);\n return chain;\n },\n define(definition) {\n state.definition = normalizeSchemaDefinition(state.key, definition);\n markPendingUpdate(state);\n return chain;\n },\n string() {\n return chain.kind(\"string\");\n },\n url() {\n return chain.kind(\"url\");\n },\n number() {\n return chain.kind(\"number\");\n },\n boolean() {\n return chain.kind(\"boolean\");\n },\n enum() {\n return chain.kind(\"enum\");\n },\n json() {\n return chain.kind(\"json\");\n },\n scope(scope) {\n const definition = ensureChainDefinition(state, \"scope\");\n state.definition = {\n ...definition,\n scope\n };\n markPendingUpdate(state);\n return chain;\n },\n requiredIn(requiredIn) {\n const definition = ensureChainDefinition(state, \"requiredIn\");\n state.definition = {\n ...definition,\n requiredIn: normalizeRequiredInInput(requiredIn)\n };\n markPendingUpdate(state);\n return chain;\n },\n defaultValue(value) {\n const definition = ensureChainDefinition(state, \"defaultValue\");\n state.definition = {\n ...definition,\n defaultValue: value\n };\n markPendingUpdate(state);\n return chain;\n },\n sensitive(value = true) {\n const definition = ensureChainDefinition(state, \"sensitive\");\n state.definition = {\n ...definition,\n sensitive: value\n };\n markPendingUpdate(state);\n return chain;\n },\n values(values) {\n const definition = ensureChainDefinition(state, \"values\");\n if (definition.kind !== \"enum\") {\n throw new Error(\n `Cannot call .values(...) for \"${state.key}\" because it is \"${definition.kind}\". Fix: use .enum() or ctx.enum(\"${state.key}\") before .values(...).`\n );\n }\n\n const normalizedValues = Array.isArray(values) ? [...values] : [values];\n state.definition = {\n ...definition,\n values: normalizedValues\n };\n markPendingUpdate(state);\n return chain;\n },\n description(value) {\n const definition = ensureChainDefinition(state, \"description\");\n state.definition = {\n ...definition,\n description: value\n };\n markPendingUpdate(state);\n return chain;\n },\n example(value) {\n const definition = ensureChainDefinition(state, \"example\");\n state.definition = {\n ...definition,\n example: value\n };\n markPendingUpdate(state);\n return chain;\n },\n owner(value) {\n const definition = ensureChainDefinition(state, \"owner\");\n state.definition = {\n ...definition,\n owner: value\n };\n markPendingUpdate(state);\n return chain;\n },\n rotationDays(value) {\n const definition = ensureChainDefinition(state, \"rotationDays\");\n state.definition = {\n ...definition,\n rotationDays: value\n };\n markPendingUpdate(state);\n return chain;\n },\n deprecated(value) {\n const definition = ensureChainDefinition(state, \"deprecated\");\n state.definition = {\n ...definition,\n deprecated: value ? { ...value } : undefined\n };\n markPendingUpdate(state);\n return chain;\n },\n deprecate(replacedBy, removeAfter, message) {\n return chain.deprecated({\n replacedBy,\n removeAfter,\n message\n });\n },\n provider(value) {\n const definition = ensureChainDefinition(state, \"provider\");\n state.definition = {\n ...definition,\n provider: value ? { ...value } : undefined\n };\n markPendingUpdate(state);\n return chain;\n },\n providerAlias(provider, key) {\n const definition = ensureChainDefinition(state, \"providerAlias\");\n const nextProvider: ProviderMapping = {\n ...(definition.provider ?? {})\n };\n if (key === undefined) {\n delete nextProvider[provider];\n } else {\n nextProvider[provider] = key;\n }\n\n state.definition = {\n ...definition,\n provider: Object.keys(nextProvider).length > 0 ? nextProvider : undefined\n };\n markPendingUpdate(state);\n return chain;\n },\n tags(values) {\n const definition = ensureChainDefinition(state, \"tags\");\n const normalized =\n values === undefined ? undefined : Array.isArray(values) ? [...values] : [values];\n state.definition = {\n ...definition,\n tags: normalized\n };\n markPendingUpdate(state);\n return chain;\n },\n tag(value) {\n const definition = ensureChainDefinition(state, \"tag\");\n const nextTags = new Set(definition.tags ?? []);\n nextTags.add(value);\n state.definition = {\n ...definition,\n tags: [...nextTags]\n };\n markPendingUpdate(state);\n return chain;\n },\n value(value) {\n ensureChainDefinition(state, \"value\");\n state.explicitValue = value;\n markPendingUpdate(state);\n return chain;\n },\n targets(targets) {\n state.options.targets = normalizeTargets(\n Array.isArray(targets) ? targets : [targets]\n );\n return chain;\n },\n overwrite(value = true) {\n state.options.overwrite = value;\n return chain;\n },\n createIfMissing(value = true) {\n state.options.createIfMissing = value;\n return chain;\n },\n comment(comment) {\n state.options.comment = comment;\n return chain;\n },\n rename(toKey, options) {\n flushChain(state);\n const fromKey = state.key;\n const mergedOptions = mergeRenameOptions(state, options);\n applyRenameVariable(fromKey, toKey, mergedOptions);\n state.key = toKey;\n return chain;\n },\n remove(options) {\n flushChain(state);\n const mergedOptions = mergeRemoveOptions(state, options);\n applyRemoveVariable(state.key, mergedOptions);\n state.definition = undefined;\n state.explicitValue = undefined;\n state.pendingUpdate = false;\n return chain;\n }\n };\n\n return chain;\n };\n\n context = {\n key(key) {\n return createVariableChain(key);\n },\n string(key) {\n return createVariableChain(key, \"string\");\n },\n url(key) {\n return createVariableChain(key, \"url\");\n },\n number(key) {\n return createVariableChain(key, \"number\");\n },\n boolean(key) {\n return createVariableChain(key, \"boolean\");\n },\n enum(key) {\n return createVariableChain(key, \"enum\");\n },\n json(key) {\n return createVariableChain(key, \"json\");\n },\n setPrefixPolicy(policy) {\n operationLog.push({\n kind: \"setPrefixPolicy\",\n targets: [...DEFAULT_MIGRATION_TARGET_FILES]\n });\n\n if (!schemaState) {\n return;\n }\n\n schemaState.prefixPolicy = normalizePrefixPolicy(policy);\n },\n [finalizeFluentDefinitionsSymbol]() {\n for (const state of variableChains) {\n flushChain(state);\n }\n }\n };\n\n return context;\n}\n\nexport async function writeEnvTargetDocuments(\n documents: LoadedEnvTargetDocuments\n): Promise<string[]> {\n const changedFiles: string[] = [];\n const sorted = [...documents.values()].sort((left, right) => left.filePath.localeCompare(right.filePath));\n\n for (const targetDocument of sorted) {\n const rendered = renderDocument(targetDocument.document);\n if (rendered === targetDocument.source) {\n continue;\n }\n\n await mkdir(path.dirname(targetDocument.filePath), { recursive: true });\n await writeFile(targetDocument.filePath, rendered, \"utf8\");\n targetDocument.source = rendered;\n changedFiles.push(targetDocument.target);\n }\n\n return changedFiles;\n}\n\nfunction resolveMigrationsDir(cwd: string, migrationsDir?: string): string {\n return path.resolve(cwd, migrationsDir ?? DEFAULT_MIGRATIONS_DIR);\n}\n\nfunction resolveStatePath(cwd: string, stateFile?: string): string {\n return path.resolve(cwd, stateFile ?? DEFAULT_MIGRATION_STATE_FILE);\n}\n\nfunction resolveGeneratedSchemaPath(cwd: string, generatedSchemaFile?: string): string {\n return path.resolve(cwd, generatedSchemaFile ?? DEFAULT_GENERATED_SCHEMA_FILE);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport async function loadMigrationState(\n options: {\n cwd?: string;\n stateFile?: string;\n } = {}\n): Promise<MigrationStateLoadResult> {\n const cwd = options.cwd ?? process.cwd();\n const statePath = resolveStatePath(cwd, options.stateFile);\n\n if (!(await pathExists(statePath))) {\n return {\n statePath,\n state: {\n version: 1,\n applied: []\n }\n };\n }\n\n const raw = await readFile(statePath, \"utf8\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw new Error(\n `Invalid migration state file at \"${statePath}\". Fix: ensure it contains valid JSON.`\n );\n }\n\n if (!isRecord(parsed)) {\n throw new Error(\n `Invalid migration state file at \"${statePath}\". Fix: expected an object with an \"applied\" array.`\n );\n }\n\n if (!Array.isArray(parsed.applied)) {\n throw new Error(\n `Invalid migration state file at \"${statePath}\". Fix: \"applied\" must be an array.`\n );\n }\n\n const applied: AppliedMigrationState[] = [];\n for (const item of parsed.applied) {\n if (!isRecord(item)) {\n throw new Error(\n `Invalid migration state file at \"${statePath}\". Fix: each applied entry must be an object.`\n );\n }\n\n const id = item.id;\n const appliedAt = item.appliedAt;\n const checksum = item.checksum;\n if (typeof id !== \"string\" || id.length === 0) {\n throw new Error(\n `Invalid migration state file at \"${statePath}\". Fix: each applied entry must include a non-empty \"id\".`\n );\n }\n if (typeof appliedAt !== \"string\" || appliedAt.length === 0) {\n throw new Error(\n `Invalid migration state file at \"${statePath}\". Fix: each applied entry must include \"appliedAt\".`\n );\n }\n if (typeof checksum !== \"string\" || checksum.length === 0) {\n throw new Error(\n `Invalid migration state file at \"${statePath}\". Fix: each applied entry must include \"checksum\".`\n );\n }\n\n applied.push({\n id,\n appliedAt,\n checksum\n });\n }\n\n return {\n statePath,\n state: {\n version: 1,\n applied\n }\n };\n}\n\nexport async function saveMigrationState(\n cwd: string,\n statePath: string,\n state: EnvMigrationState\n): Promise<void> {\n await mkdir(path.dirname(statePath), { recursive: true });\n const ignoreEntry = toWrkspaceEnvIgnoreEntry(cwd, statePath);\n await ensureWrkspaceEnvGitignore(cwd, ignoreEntry ? [ignoreEntry] : []);\n await writeFile(statePath, `${JSON.stringify(state, null, 2)}\\n`, \"utf8\");\n}\n\nasync function loadPersistedGeneratedSchema(schemaPath: string): Promise<PersistedGeneratedSchema | undefined> {\n if (!(await pathExists(schemaPath))) {\n return undefined;\n }\n\n const raw = await readFile(schemaPath, \"utf8\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw new Error(\n `Invalid generated schema file at \"${schemaPath}\". Fix: delete it and re-run migrations, or write valid JSON.`\n );\n }\n\n if (!isRecord(parsed)) {\n throw new Error(\n `Invalid generated schema file at \"${schemaPath}\". Fix: expected an object with schema metadata.`\n );\n }\n\n const version = parsed.version;\n const mode = parsed.mode;\n const schema = parsed.schema;\n const appliedMigrationIds = parsed.appliedMigrationIds;\n if (version !== 1 || mode !== \"migration-first\") {\n throw new Error(\n `Unsupported generated schema version at \"${schemaPath}\". Fix: delete it and rebuild from migrations.`\n );\n }\n if (!Array.isArray(appliedMigrationIds) || appliedMigrationIds.some((item) => typeof item !== \"string\")) {\n throw new Error(\n `Invalid generated schema file at \"${schemaPath}\". Fix: \"appliedMigrationIds\" must be a string array.`\n );\n }\n if (!isRecord(schema)) {\n throw new Error(\n `Invalid generated schema file at \"${schemaPath}\". Fix: \"schema\" must be an object map.`\n );\n }\n\n const normalizedSchema: EnvSchema = {};\n for (const [key, definition] of Object.entries(schema)) {\n normalizedSchema[key] = normalizeSchemaDefinition(key, definition as EnvVariableDefinition);\n }\n\n const parsedPrefixPolicy = parsed.prefixPolicy as PersistedGeneratedSchema[\"prefixPolicy\"];\n\n return {\n version: 1,\n mode: \"migration-first\",\n appliedMigrationIds: [...appliedMigrationIds],\n schema: normalizedSchema,\n prefixPolicy: parsedPrefixPolicy\n };\n}\n\nasync function savePersistedGeneratedSchema(\n cwd: string,\n schemaPath: string,\n state: InMemorySchemaState,\n appliedMigrationIds: readonly string[]\n): Promise<void> {\n const payload: PersistedGeneratedSchema = {\n version: 1,\n mode: \"migration-first\",\n appliedMigrationIds: [...appliedMigrationIds],\n schema: Object.fromEntries(\n Object.entries(state.schema).map(([key, definition]) => [key, cloneSchemaDefinition(definition)])\n ),\n prefixPolicy: serializePrefixPolicy(state.prefixPolicy)\n };\n\n await mkdir(path.dirname(schemaPath), { recursive: true });\n const ignoreEntry = toWrkspaceEnvIgnoreEntry(cwd, schemaPath);\n await ensureWrkspaceEnvGitignore(cwd, ignoreEntry ? [ignoreEntry] : []);\n await writeFile(schemaPath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n}\n\nasync function writeEnvDocsFromSchema(cwd: string, schema: EnvSchema): Promise<void> {\n const artifacts = generateArtifacts(schema);\n const envDocPath = path.resolve(cwd, DEFAULT_ENV_DOC_FILE);\n const envAuditPath = path.resolve(cwd, DEFAULT_ENV_AUDIT_FILE);\n await Promise.all([\n mkdir(path.dirname(envDocPath), { recursive: true }),\n mkdir(path.dirname(envAuditPath), { recursive: true })\n ]);\n\n await ensureWrkspaceEnvGitignore(cwd, [\n toWrkspaceEnvIgnoreEntry(cwd, envDocPath) ?? \"\",\n toWrkspaceEnvIgnoreEntry(cwd, envAuditPath) ?? \"\"\n ]);\n\n await Promise.all([\n writeFile(envDocPath, artifacts.envMarkdown, \"utf8\"),\n writeFile(envAuditPath, artifacts.envAuditJson, \"utf8\")\n ]);\n}\n\nfunction createEmptyInMemorySchemaState(): InMemorySchemaState {\n return {\n schema: {}\n };\n}\n\nfunction createInMemorySchemaStateFromPersisted(\n persisted: PersistedGeneratedSchema | undefined\n): InMemorySchemaState {\n if (!persisted) {\n return createEmptyInMemorySchemaState();\n }\n\n return {\n schema: Object.fromEntries(\n Object.entries(persisted.schema).map(([key, definition]) => [\n key,\n normalizeSchemaDefinition(key, definition as EnvVariableDefinition)\n ])\n ),\n prefixPolicy: deserializePrefixPolicy(persisted.prefixPolicy)\n };\n}\n\nfunction computeChecksum(content: string): string {\n return createHash(\"sha256\").update(content, \"utf8\").digest(\"hex\");\n}\n\nlet cachedTypeScriptModule: Promise<TypeScriptModule> | undefined;\n\nfunction resolveTypeScriptModule(source: unknown): TypeScriptModule | undefined {\n if (!isRecord(source)) {\n return undefined;\n }\n\n const transpileModule = source.transpileModule;\n const moduleKind = source.ModuleKind;\n const scriptTarget = source.ScriptTarget;\n if (\n typeof transpileModule !== \"function\" ||\n !isRecord(moduleKind) ||\n typeof moduleKind.ESNext !== \"number\" ||\n !isRecord(scriptTarget) ||\n typeof scriptTarget.ES2022 !== \"number\"\n ) {\n return undefined;\n }\n\n return {\n transpileModule: transpileModule as TypeScriptModule[\"transpileModule\"],\n ModuleKind: {\n ESNext: moduleKind.ESNext\n },\n ScriptTarget: {\n ES2022: scriptTarget.ES2022\n }\n };\n}\n\nasync function loadTypeScriptModule(): Promise<TypeScriptModule> {\n if (!cachedTypeScriptModule) {\n cachedTypeScriptModule = (async () => {\n let imported: unknown;\n try {\n imported = await import(\"typescript\");\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Cannot load \"typescript\" required for .ts env migrations. Fix: install it in your app (pnpm add -D typescript) or use .mjs migrations. Error: ${reason}`\n );\n }\n\n const direct = resolveTypeScriptModule(imported);\n if (direct) {\n return direct;\n }\n\n const fallbackDefault = isRecord(imported) ? resolveTypeScriptModule(imported.default) : undefined;\n if (fallbackDefault) {\n return fallbackDefault;\n }\n\n throw new Error(\n 'Loaded \"typescript\" but module shape is unsupported. Fix: use a current TypeScript version that exports transpileModule/ModuleKind/ScriptTarget.'\n );\n })();\n }\n\n return await cachedTypeScriptModule;\n}\n\nasync function importModuleFromFile(filePath: string): Promise<unknown> {\n const extension = path.extname(filePath).toLowerCase();\n if (extension === \".ts\" || extension === \".mts\" || extension === \".cts\") {\n const source = await readFile(filePath, \"utf8\");\n const typescript = await loadTypeScriptModule();\n const transpiled = typescript.transpileModule(source, {\n fileName: filePath,\n compilerOptions: {\n target: typescript.ScriptTarget.ES2022,\n module: typescript.ModuleKind.ESNext\n }\n }).outputText;\n\n const transientFilePath = path.join(\n path.dirname(filePath),\n `.__wrkspace_env_migration_${path.basename(filePath)}_${process.pid}_${Date.now()}.mjs`\n );\n\n await writeFile(transientFilePath, transpiled, \"utf8\");\n try {\n return await import(`${pathToFileURL(transientFilePath).href}?v=${Date.now()}`);\n } finally {\n await unlink(transientFilePath).catch(() => undefined);\n }\n }\n\n return await import(`${pathToFileURL(filePath).href}?v=${Date.now()}`);\n}\n\nfunction normalizeMigrationExports(imported: unknown): Record<string, unknown> {\n const output: Record<string, unknown> = {};\n\n if (isRecord(imported)) {\n Object.assign(output, imported);\n const defaultExport = imported.default;\n if (isRecord(defaultExport)) {\n Object.assign(output, defaultExport);\n }\n }\n\n return output;\n}\n\nasync function loadMigrationFromFile(filePath: string): Promise<LoadedEnvMigration> {\n const source = await readFile(filePath, \"utf8\");\n const checksum = computeChecksum(source);\n const imported = await importModuleFromFile(filePath);\n const normalized = normalizeMigrationExports(imported);\n\n const exportedId = normalized.id;\n const derivedId = path.basename(filePath, path.extname(filePath));\n const up = normalized.up;\n const down = normalized.down;\n\n if (exportedId !== undefined && (typeof exportedId !== \"string\" || exportedId.trim().length === 0)) {\n throw new Error(\n `Invalid migration \"${filePath}\". Fix: if you export \"id\", it must be a non-empty string matching the filename stem \"${derivedId}\".`\n );\n }\n if (typeof exportedId === \"string\" && exportedId !== derivedId) {\n throw new Error(\n `Invalid migration \"${filePath}\". Fix: migration id is derived from filename (\"${derivedId}\"). Remove exported id or rename it to match.`\n );\n }\n if (typeof up !== \"function\") {\n throw new Error(\n `Invalid migration \"${filePath}\". Fix: export an \"up(ctx)\" function.`\n );\n }\n if (typeof down !== \"function\") {\n throw new Error(\n `Invalid migration \"${filePath}\". Fix: export a \"down(ctx)\" function.`\n );\n }\n\n return {\n id: derivedId,\n up: up as EnvMigrationModule[\"up\"],\n down: down as EnvMigrationModule[\"down\"],\n filePath,\n checksum\n };\n}\n\nexport async function discoverMigrations(\n options: {\n cwd?: string;\n migrationsDir?: string;\n } = {}\n): Promise<{\n migrationsDir: string;\n migrations: LoadedEnvMigration[];\n}> {\n const cwd = options.cwd ?? process.cwd();\n const migrationsDir = resolveMigrationsDir(cwd, options.migrationsDir);\n\n if (!(await pathExists(migrationsDir))) {\n return {\n migrationsDir,\n migrations: []\n };\n }\n\n const directoryEntries = await readdir(migrationsDir, {\n withFileTypes: true\n });\n\n const migrationPaths = directoryEntries\n .filter((entry) => entry.isFile())\n .map((entry) => entry.name)\n .filter((filename) => MIGRATION_FILE_PATTERN.test(filename) && !filename.endsWith(\".d.ts\"))\n .sort((left, right) => left.localeCompare(right))\n .map((filename) => path.resolve(migrationsDir, filename));\n\n const migrations: LoadedEnvMigration[] = [];\n const seenIds = new Set<string>();\n for (const migrationPath of migrationPaths) {\n const migration = await loadMigrationFromFile(migrationPath);\n if (seenIds.has(migration.id)) {\n throw new Error(\n `Duplicate migration id \"${migration.id}\" in \"${migrationsDir}\". Fix: ensure migration filenames produce unique ids.`\n );\n }\n seenIds.add(migration.id);\n migrations.push(migration);\n }\n\n migrations.sort((left, right) => left.id.localeCompare(right.id) || left.filePath.localeCompare(right.filePath));\n\n return {\n migrationsDir,\n migrations\n };\n}\n\nfunction migrationStatusFromRuntime(\n migrationsDir: string,\n statePath: string,\n migrations: readonly LoadedEnvMigration[],\n state: EnvMigrationState\n): MigrationStatusResult {\n const stateById = new Map<string, AppliedMigrationState>();\n for (const applied of state.applied) {\n stateById.set(applied.id, applied);\n }\n\n const migrationById = new Map<string, LoadedEnvMigration>();\n for (const migration of migrations) {\n migrationById.set(migration.id, migration);\n }\n\n const entries: MigrationStatusEntry[] = [];\n for (const migration of migrations) {\n const applied = stateById.get(migration.id);\n if (!applied) {\n entries.push({\n id: migration.id,\n status: \"pending\",\n filePath: migration.filePath,\n checksum: migration.checksum\n });\n continue;\n }\n\n const changed = applied.checksum !== migration.checksum;\n entries.push({\n id: migration.id,\n status: changed ? \"changed\" : \"applied\",\n filePath: migration.filePath,\n appliedAt: applied.appliedAt,\n checksum: applied.checksum,\n currentChecksum: migration.checksum\n });\n }\n\n for (const applied of state.applied) {\n if (migrationById.has(applied.id)) {\n continue;\n }\n entries.push({\n id: applied.id,\n status: \"missing\",\n appliedAt: applied.appliedAt,\n checksum: applied.checksum\n });\n }\n\n const summary = {\n total: entries.length,\n applied: entries.filter((entry) => entry.status === \"applied\").length,\n pending: entries.filter((entry) => entry.status === \"pending\").length,\n changed: entries.filter((entry) => entry.status === \"changed\").length,\n missing: entries.filter((entry) => entry.status === \"missing\").length\n };\n\n return {\n migrationsDir,\n statePath,\n entries,\n summary\n };\n}\n\nexport async function getMigrationStatus(\n options: {\n cwd?: string;\n migrationsDir?: string;\n stateFile?: string;\n } = {}\n): Promise<MigrationStatusResult> {\n const cwd = options.cwd ?? process.cwd();\n const [{ migrationsDir, migrations }, { statePath, state }] = await Promise.all([\n discoverMigrations({\n cwd,\n migrationsDir: options.migrationsDir\n }),\n loadMigrationState({\n cwd,\n stateFile: options.stateFile\n })\n ]);\n\n return migrationStatusFromRuntime(migrationsDir, statePath, migrations, state);\n}\n\nasync function rebuildGeneratedSchemaFromState(options: {\n cwd: string;\n generatedSchemaPath: string;\n migrations: readonly LoadedEnvMigration[];\n state: EnvMigrationState;\n}): Promise<MigrationDerivedSchema> {\n const migrationById = new Map(options.migrations.map((migration) => [migration.id, migration]));\n const schemaState = createEmptyInMemorySchemaState();\n\n for (const applied of options.state.applied) {\n const migration = migrationById.get(applied.id);\n if (!migration) {\n throw new Error(\n `Cannot rebuild generated schema because migration \"${applied.id}\" is missing. Fix: restore migration files and rerun.`\n );\n }\n\n const context = createEnvMigrationContext(createNoopTargetDocuments(), [], schemaState);\n try {\n await migration.up(context);\n finalizeFluentDefinitions(context);\n } catch (error) {\n throw formatMigrationExecutionError(migration, \"up\", error);\n }\n }\n\n const appliedMigrationIds = options.state.applied.map((entry) => entry.id);\n await savePersistedGeneratedSchema(\n options.cwd,\n options.generatedSchemaPath,\n schemaState,\n appliedMigrationIds\n );\n\n return {\n schemaPath: options.generatedSchemaPath,\n schema: schemaState.schema,\n prefixPolicy: schemaState.prefixPolicy,\n appliedMigrationIds\n };\n}\n\nexport async function loadOrBuildMigrationSchema(options: {\n cwd?: string;\n migrationsDir?: string;\n stateFile?: string;\n generatedSchemaFile?: string;\n forceRebuild?: boolean;\n allowEmpty?: boolean;\n} = {}): Promise<MigrationDerivedSchema> {\n const cwd = options.cwd ?? process.cwd();\n const generatedSchemaPath = resolveGeneratedSchemaPath(cwd, options.generatedSchemaFile);\n const [{ migrationsDir, migrations }, { statePath, state }, persistedSchema] = await Promise.all([\n discoverMigrations({\n cwd,\n migrationsDir: options.migrationsDir\n }),\n loadMigrationState({\n cwd,\n stateFile: options.stateFile\n }),\n loadPersistedGeneratedSchema(generatedSchemaPath)\n ]);\n\n const status = migrationStatusFromRuntime(migrationsDir, statePath, migrations, state);\n assertMigrationIntegrity(status);\n\n if (state.applied.length === 0 && !persistedSchema) {\n if (options.allowEmpty) {\n const emptyState = createEmptyInMemorySchemaState();\n await savePersistedGeneratedSchema(cwd, generatedSchemaPath, emptyState, []);\n return {\n schemaPath: generatedSchemaPath,\n schema: {},\n appliedMigrationIds: []\n };\n }\n throw new Error(\n `No schema file found and no applied migrations to derive one in \"${cwd}\". Fix: apply migrations that define schema (for example via ctx.url(...)/ctx.string(...)) or provide --schema <path>.`\n );\n }\n\n const appliedMigrationIds = state.applied.map((entry) => entry.id);\n if (\n !options.forceRebuild &&\n persistedSchema &&\n persistedSchema.appliedMigrationIds.length === appliedMigrationIds.length &&\n persistedSchema.appliedMigrationIds.every((id, index) => id === appliedMigrationIds[index])\n ) {\n const normalized = createInMemorySchemaStateFromPersisted(persistedSchema);\n return {\n schemaPath: generatedSchemaPath,\n schema: normalized.schema,\n prefixPolicy: normalized.prefixPolicy,\n appliedMigrationIds\n };\n }\n\n return await rebuildGeneratedSchemaFromState({\n cwd,\n generatedSchemaPath,\n migrations,\n state\n });\n}\n\nfunction formatMigrationExecutionError(\n migration: LoadedEnvMigration,\n direction: MigrationDirection,\n error: unknown\n): Error {\n const reason = error instanceof Error ? error.message : String(error);\n return new Error(\n `Migration \"${migration.id}\" failed during ${direction}() at \"${migration.filePath}\". Fix: check migration logic and retry. Error: ${reason}`\n );\n}\n\nfunction assertMigrationIntegrity(status: MigrationStatusResult): void {\n if (status.summary.changed === 0 && status.summary.missing === 0) {\n return;\n }\n\n const changedIds = status.entries\n .filter((entry) => entry.status === \"changed\")\n .map((entry) => entry.id);\n const missingIds = status.entries\n .filter((entry) => entry.status === \"missing\")\n .map((entry) => entry.id);\n\n const details: string[] = [];\n if (changedIds.length > 0) {\n details.push(`changed: ${changedIds.join(\", \")}`);\n }\n if (missingIds.length > 0) {\n details.push(`missing: ${missingIds.join(\", \")}`);\n }\n\n throw new Error(\n `Migration integrity check failed (${details.join(\" | \")}). Fix: restore migration files/checksums to match ${status.statePath}.`\n );\n}\n\nfunction formatIsoTimestamp(date: Date): string {\n return date.toISOString();\n}\n\nfunction formatMigrationIdTimestamp(date: Date): string {\n const year = date.getUTCFullYear();\n const month = `${date.getUTCMonth() + 1}`.padStart(2, \"0\");\n const day = `${date.getUTCDate()}`.padStart(2, \"0\");\n const hour = `${date.getUTCHours()}`.padStart(2, \"0\");\n const minute = `${date.getUTCMinutes()}`.padStart(2, \"0\");\n const second = `${date.getUTCSeconds()}`.padStart(2, \"0\");\n return `${year}${month}${day}${hour}${minute}${second}`;\n}\n\nfunction slugify(input: string): string {\n const slug = input\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n return slug.length > 0 ? slug : \"migration\";\n}\n\nfunction renderDefaultMigrationTemplate(id: string): string {\n const _migrationId = id;\n return [\n 'import type { EnvMigrationContext } from \"@wrkspace-co/env\";',\n \"\",\n `// Migration id is derived from this filename: ${_migrationId}.ts`,\n \"\",\n \"export async function up(ctx: EnvMigrationContext) {\",\n \" // Fluent schema + env definition:\",\n ' // ctx.url(\"DATABASE_URL\").scope(\"server\").requiredIn(\"prod\");',\n ' // ctx.enum(\"LOG_LEVEL\").values([\"debug\", \"info\", \"warn\", \"error\"]).defaultValue(\"info\");',\n \"}\",\n \"\",\n \"export async function down(ctx: EnvMigrationContext) {\",\n ' // ctx.key(\"DATABASE_URL\").remove();',\n ' // ctx.key(\"LOG_LEVEL\").remove();',\n \"}\",\n \"\"\n ].join(\"\\n\");\n}\n\nexport async function createMigrationFile(\n options: CreateMigrationFileOptions\n): Promise<CreateMigrationFileResult> {\n const cwd = options.cwd ?? process.cwd();\n const migrationsDir = resolveMigrationsDir(cwd, options.migrationsDir);\n const now = options.now ?? new Date();\n const id = `${formatMigrationIdTimestamp(now)}_${slugify(options.name)}`;\n const filename = `${id}.ts`;\n const filePath = path.resolve(migrationsDir, filename);\n\n await mkdir(migrationsDir, { recursive: true });\n if (await pathExists(filePath)) {\n throw new Error(\n `Migration file already exists at \"${filePath}\". Fix: choose a different migration name or timestamp.`\n );\n }\n\n const content = options.template ? options.template(id) : renderDefaultMigrationTemplate(id);\n await writeFile(filePath, content, \"utf8\");\n\n return {\n id,\n filePath,\n migrationsDir\n };\n}\n\nexport async function applyPendingMigrations(\n options: ApplyMigrationsOptions = {}\n): Promise<ApplyMigrationsResult> {\n const cwd = options.cwd ?? process.cwd();\n const now = options.now ?? new Date();\n const generatedSchemaPath = resolveGeneratedSchemaPath(cwd, options.generatedSchemaFile);\n const [{ migrationsDir, migrations }, { statePath, state }] = await Promise.all([\n discoverMigrations({\n cwd,\n migrationsDir: options.migrationsDir\n }),\n loadMigrationState({\n cwd,\n stateFile: options.stateFile\n })\n ]);\n\n const status = migrationStatusFromRuntime(migrationsDir, statePath, migrations, state);\n assertMigrationIntegrity(status);\n\n const appliedIds = new Set(state.applied.map((item) => item.id));\n const pending = migrations.filter((migration) => !appliedIds.has(migration.id));\n if (pending.length === 0) {\n const derivedSchema = await loadOrBuildMigrationSchema({\n cwd,\n migrationsDir: options.migrationsDir,\n stateFile: options.stateFile,\n generatedSchemaFile: options.generatedSchemaFile,\n allowEmpty: true\n });\n await writeEnvDocsFromSchema(cwd, derivedSchema.schema);\n\n return {\n migrationsDir,\n statePath,\n applied: [],\n changedFiles: [],\n pendingCount: 0\n };\n }\n\n const targetDocuments = await loadEnvTargetDocuments({ cwd });\n const derivedSchema = await loadOrBuildMigrationSchema({\n cwd,\n migrationsDir: options.migrationsDir,\n stateFile: options.stateFile,\n generatedSchemaFile: options.generatedSchemaFile,\n allowEmpty: true\n });\n const schemaState: InMemorySchemaState = {\n schema: Object.fromEntries(\n Object.entries(derivedSchema.schema).map(([key, definition]) => [\n key,\n normalizeSchemaDefinition(key, definition)\n ])\n ),\n prefixPolicy: derivedSchema.prefixPolicy\n };\n const changedFiles = new Set<string>();\n const applied: string[] = [];\n\n for (const migration of pending) {\n const context = createEnvMigrationContext(targetDocuments, [], schemaState);\n try {\n await migration.up(context);\n finalizeFluentDefinitions(context);\n } catch (error) {\n throw formatMigrationExecutionError(migration, \"up\", error);\n }\n\n const changedFromMigration = await writeEnvTargetDocuments(targetDocuments);\n for (const changedFile of changedFromMigration) {\n changedFiles.add(changedFile);\n }\n\n state.applied.push({\n id: migration.id,\n appliedAt: formatIsoTimestamp(now),\n checksum: migration.checksum\n });\n await Promise.all([\n saveMigrationState(cwd, statePath, state),\n savePersistedGeneratedSchema(\n cwd,\n generatedSchemaPath,\n schemaState,\n state.applied.map((entry) => entry.id)\n )\n ]);\n applied.push(migration.id);\n }\n await writeEnvDocsFromSchema(cwd, schemaState.schema);\n\n return {\n migrationsDir,\n statePath,\n applied,\n changedFiles: [...changedFiles].sort((left, right) => left.localeCompare(right)),\n pendingCount: 0\n };\n}\n\nexport async function rollbackMigrations(\n options: RollbackMigrationsOptions\n): Promise<RollbackMigrationsResult> {\n const cwd = options.cwd ?? process.cwd();\n const generatedSchemaPath = resolveGeneratedSchemaPath(cwd, options.generatedSchemaFile);\n if (!Number.isInteger(options.steps) || options.steps <= 0) {\n throw new Error(`Invalid rollback steps \"${options.steps}\". Fix: pass a positive integer.`);\n }\n\n const [{ migrationsDir, migrations }, { statePath, state }] = await Promise.all([\n discoverMigrations({\n cwd,\n migrationsDir: options.migrationsDir\n }),\n loadMigrationState({\n cwd,\n stateFile: options.stateFile\n })\n ]);\n\n const status = migrationStatusFromRuntime(migrationsDir, statePath, migrations, state);\n assertMigrationIntegrity(status);\n\n if (state.applied.length === 0) {\n return {\n migrationsDir,\n statePath,\n rolledBack: [],\n changedFiles: [],\n remainingApplied: 0\n };\n }\n\n if (options.steps > state.applied.length) {\n throw new Error(\n `Cannot rollback ${options.steps} step(s): only ${state.applied.length} migration(s) are applied. Fix: lower --steps.`\n );\n }\n\n const migrationById = new Map<string, LoadedEnvMigration>();\n for (const migration of migrations) {\n migrationById.set(migration.id, migration);\n }\n\n const selected = state.applied.slice(-options.steps).reverse();\n const targetDocuments = await loadEnvTargetDocuments({ cwd });\n const derivedSchema = await loadOrBuildMigrationSchema({\n cwd,\n migrationsDir: options.migrationsDir,\n stateFile: options.stateFile,\n generatedSchemaFile: options.generatedSchemaFile,\n allowEmpty: true\n });\n const schemaState: InMemorySchemaState = {\n schema: Object.fromEntries(\n Object.entries(derivedSchema.schema).map(([key, definition]) => [\n key,\n normalizeSchemaDefinition(key, definition)\n ])\n ),\n prefixPolicy: derivedSchema.prefixPolicy\n };\n const changedFiles = new Set<string>();\n const rolledBack: string[] = [];\n\n for (const applied of selected) {\n const migration = migrationById.get(applied.id);\n if (!migration) {\n throw new Error(\n `Cannot rollback migration \"${applied.id}\" because its file is missing. Fix: restore the migration file in ${migrationsDir}.`\n );\n }\n\n const context = createEnvMigrationContext(targetDocuments, [], schemaState);\n try {\n await migration.down(context);\n finalizeFluentDefinitions(context);\n } catch (error) {\n throw formatMigrationExecutionError(migration, \"down\", error);\n }\n\n const changedFromMigration = await writeEnvTargetDocuments(targetDocuments);\n for (const changedFile of changedFromMigration) {\n changedFiles.add(changedFile);\n }\n\n state.applied = state.applied.filter((entry) => entry.id !== applied.id);\n await Promise.all([\n saveMigrationState(cwd, statePath, state),\n savePersistedGeneratedSchema(\n cwd,\n generatedSchemaPath,\n schemaState,\n state.applied.map((entry) => entry.id)\n )\n ]);\n rolledBack.push(applied.id);\n }\n await writeEnvDocsFromSchema(cwd, schemaState.schema);\n\n return {\n migrationsDir,\n statePath,\n rolledBack,\n changedFiles: [...changedFiles].sort((left, right) => left.localeCompare(right)),\n remainingApplied: state.applied.length\n };\n}\n","import { formatDotenvValue } from \"./dotenv.js\";\nimport type { EnvSchema, EnvTarget, EnvVariableDefinition } from \"./env.js\";\n\nexport interface GenerateArtifactsOptions {\n app?: string;\n}\n\nexport interface GeneratedArtifacts {\n envExample: string;\n envDefaults: string;\n envMarkdown: string;\n envAuditJson: string;\n envLocal: string;\n}\n\ntype SchemaEntry = [string, EnvVariableDefinition];\nconst DOC_TARGETS: readonly EnvTarget[] = [\"dev\", \"preview\", \"prod\"];\nconst AIRLOCK_GENERATED_BY = \"# Generated by airlock\";\nconst AIRLOCK_GENERATE = `${AIRLOCK_GENERATED_BY} generate`;\n\nfunction schemaEntries(schema: EnvSchema): SchemaEntry[] {\n return Object.entries(schema) as SchemaEntry[];\n}\n\nfunction toEnvString(value: unknown, kind: EnvVariableDefinition[\"kind\"]): string {\n if (value === undefined || value === null) {\n return \"\";\n }\n\n if (kind === \"boolean\" && typeof value === \"boolean\") {\n return value ? \"true\" : \"false\";\n }\n\n if (kind === \"number\" && typeof value === \"number\") {\n return `${value}`;\n }\n\n if (kind === \"json\") {\n if (typeof value === \"string\") {\n return value;\n }\n return JSON.stringify(value);\n }\n\n return String(value);\n}\n\nfunction placeholderForKey(key: string, definition: EnvVariableDefinition): string {\n if (definition.sensitive) {\n return \"\";\n }\n\n if (definition.defaultValue !== undefined) {\n return toEnvString(definition.defaultValue, definition.kind);\n }\n\n switch (definition.kind) {\n case \"url\":\n return \"https://example.com\";\n case \"number\":\n return \"0\";\n case \"boolean\":\n return \"false\";\n case \"enum\":\n return definition.values[0] ?? \"\";\n case \"json\":\n return \"{}\";\n case \"string\":\n default:\n return `example_${key.toLowerCase()}`;\n }\n}\n\nfunction renderMetadataComment(key: string, definition: EnvVariableDefinition): string[] {\n const description = definition.description ?? \"No description\";\n const required = definition.requiredIn.join(\",\");\n const sensitivity = definition.sensitive ? \"yes\" : \"no\";\n return [\n `# ${key}: ${description}`,\n `# type=${definition.kind} scope=${definition.scope} requiredIn=${required} sensitive=${sensitivity}`\n ];\n}\n\nfunction renderEnvExample(entries: SchemaEntry[], app?: string): string {\n const lines: string[] = [AIRLOCK_GENERATE];\n if (app) {\n lines.push(`# app=${app}`);\n }\n\n for (const [key, definition] of entries) {\n lines.push(\"\");\n lines.push(...renderMetadataComment(key, definition));\n lines.push(`${key}=${formatDotenvValue(placeholderForKey(key, definition))}`);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction renderEnvDefaults(entries: SchemaEntry[], app?: string): string {\n const lines: string[] = [AIRLOCK_GENERATE];\n if (app) {\n lines.push(`# app=${app}`);\n }\n lines.push(\"# Non-sensitive defaults only\");\n\n for (const [key, definition] of entries) {\n if (definition.sensitive || definition.defaultValue === undefined) {\n continue;\n }\n lines.push(`${key}=${formatDotenvValue(toEnvString(definition.defaultValue, definition.kind))}`);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction escapeMarkdownCell(value: string): string {\n if (value.length === 0) {\n return \"-\";\n }\n return value.replace(/\\|/g, \"\\\\|\");\n}\n\nfunction renderProviderMapping(definition: EnvVariableDefinition): string {\n if (!definition.provider) {\n return \"\";\n }\n\n return Object.entries(definition.provider)\n .filter(([, providerKey]) => providerKey)\n .map(([provider, providerKey]) => `${provider}=${providerKey}`)\n .join(\", \");\n}\n\nfunction renderDeprecated(definition: EnvVariableDefinition): string {\n if (!definition.deprecated) {\n return \"\";\n }\n\n const parts: string[] = [];\n if (definition.deprecated.replacedBy) {\n parts.push(`replacedBy=${definition.deprecated.replacedBy}`);\n }\n if (definition.deprecated.removeAfter) {\n parts.push(`removeAfter=${definition.deprecated.removeAfter}`);\n }\n if (definition.deprecated.message) {\n parts.push(definition.deprecated.message);\n }\n return parts.join(\"; \");\n}\n\nfunction renderDefaultValue(definition: EnvVariableDefinition): string {\n if (definition.sensitive || definition.defaultValue === undefined) {\n return \"\";\n }\n\n return toEnvString(definition.defaultValue, definition.kind);\n}\n\nfunction renderMarkdownTable(\n entries: readonly SchemaEntry[],\n options: {\n includeRequiredIn: boolean;\n }\n): string[] {\n const lines: string[] = [];\n const columns = options.includeRequiredIn\n ? [\n \"Key\",\n \"Type\",\n \"Scope\",\n \"Required In\",\n \"Sensitive\",\n \"Default\",\n \"Description\",\n \"Owner\",\n \"Rotation Days\",\n \"Provider\",\n \"Deprecated\",\n \"Tags\"\n ]\n : [\n \"Key\",\n \"Type\",\n \"Scope\",\n \"Sensitive\",\n \"Default\",\n \"Description\",\n \"Owner\",\n \"Rotation Days\",\n \"Provider\",\n \"Deprecated\",\n \"Tags\"\n ];\n\n lines.push(`| ${columns.join(\" | \")} |`);\n lines.push(`| ${columns.map(() => \"---\").join(\" | \")} |`);\n\n for (const [key, definition] of entries) {\n const tags = definition.tags?.join(\", \") ?? \"\";\n const commonCells = [\n escapeMarkdownCell(key),\n escapeMarkdownCell(definition.kind),\n escapeMarkdownCell(definition.scope),\n escapeMarkdownCell(definition.sensitive ? \"yes\" : \"no\"),\n escapeMarkdownCell(renderDefaultValue(definition)),\n escapeMarkdownCell(definition.description ?? \"\"),\n escapeMarkdownCell(definition.owner ?? \"\"),\n escapeMarkdownCell(definition.rotationDays === undefined ? \"\" : `${definition.rotationDays}`),\n escapeMarkdownCell(renderProviderMapping(definition)),\n escapeMarkdownCell(renderDeprecated(definition)),\n escapeMarkdownCell(tags)\n ];\n\n if (options.includeRequiredIn) {\n const [keyCell, typeCell, scopeCell, sensitiveCell, ...restCells] = commonCells;\n lines.push(\n `| ${keyCell} | ${typeCell} | ${scopeCell} | ${escapeMarkdownCell(\n definition.requiredIn.join(\", \")\n )} | ${sensitiveCell} | ${restCells.join(\" | \")} |`\n );\n continue;\n }\n\n lines.push(`| ${commonCells.join(\" | \")} |`);\n }\n\n return lines;\n}\n\nfunction renderEnvMarkdown(entries: SchemaEntry[], app?: string): string {\n const lines: string[] = [\"# ENV\", \"\"];\n if (app) {\n lines.push(`App: \\`${escapeMarkdownCell(app)}\\``);\n lines.push(\"\");\n }\n lines.push(\"## Catalog\", \"\");\n lines.push(...renderMarkdownTable(entries, { includeRequiredIn: true }));\n lines.push(\"\");\n\n for (const target of DOC_TARGETS) {\n const targetEntries = entries.filter(([, definition]) => definition.requiredIn.includes(target));\n lines.push(`## Environment: ${target}`, \"\");\n if (targetEntries.length === 0) {\n lines.push(\"No variables are required in this environment.\", \"\");\n continue;\n }\n\n lines.push(...renderMarkdownTable(targetEntries, { includeRequiredIn: false }));\n lines.push(\"\");\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction renderAuditJson(entries: SchemaEntry[], app?: string): string {\n const sensitiveCount = entries.filter(([, definition]) => definition.sensitive).length;\n const deprecatedCount = entries.filter(([, definition]) => Boolean(definition.deprecated)).length;\n const defaultsCount = entries.filter(\n ([, definition]) => definition.defaultValue !== undefined && !definition.sensitive\n ).length;\n\n const payload = {\n app: app ?? null,\n totals: {\n variables: entries.length,\n sensitive: sensitiveCount,\n deprecated: deprecatedCount,\n defaults: defaultsCount\n },\n variables: entries.map(([key, definition]) => ({\n key,\n type: definition.kind,\n scope: definition.scope,\n requiredIn: [...definition.requiredIn],\n sensitive: Boolean(definition.sensitive),\n owner: definition.owner ?? null,\n rotationDays: definition.rotationDays ?? null,\n tags: definition.tags ?? [],\n provider: definition.provider ?? {},\n deprecated: definition.deprecated ?? null,\n hasDefault: definition.defaultValue !== undefined\n }))\n };\n\n return `${JSON.stringify(payload, null, 2)}\\n`;\n}\n\nfunction renderEnvLocal(entries: SchemaEntry[], app?: string): string {\n const lines: string[] = [`${AIRLOCK_GENERATE} --write-local`];\n if (app) {\n lines.push(`# app=${app}`);\n }\n\n for (const [key, definition] of entries) {\n const value = definition.sensitive\n ? \"\"\n : definition.defaultValue !== undefined\n ? toEnvString(definition.defaultValue, definition.kind)\n : \"\";\n lines.push(`${key}=${formatDotenvValue(value)}`);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function generateArtifacts(\n schema: EnvSchema,\n options: GenerateArtifactsOptions = {}\n): GeneratedArtifacts {\n const entries = schemaEntries(schema);\n return {\n envExample: renderEnvExample(entries, options.app),\n envDefaults: renderEnvDefaults(entries, options.app),\n envMarkdown: renderEnvMarkdown(entries, options.app),\n envAuditJson: renderAuditJson(entries, options.app),\n envLocal: renderEnvLocal(entries, options.app)\n };\n}\n\nexport function generateTargetEnvFile(\n schema: EnvSchema,\n target: EnvTarget,\n options: GenerateArtifactsOptions = {}\n): string {\n const entries = schemaEntries(schema);\n const lines: string[] = [`${AIRLOCK_GENERATE} --write-target-files`, `# target=${target}`];\n if (options.app) {\n lines.push(`# app=${options.app}`);\n }\n\n for (const [key, definition] of entries) {\n if (!definition.requiredIn.includes(target)) {\n continue;\n }\n\n const value = definition.sensitive\n ? \"\"\n : definition.defaultValue !== undefined\n ? toEnvString(definition.defaultValue, definition.kind)\n : \"\";\n lines.push(`${key}=${formatDotenvValue(value)}`);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n","import { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport const WRKSPACE_ENV_DIR = \"env\";\nexport const DEFAULT_MIGRATIONS_DIR = `${WRKSPACE_ENV_DIR}/migrations`;\nexport const DEFAULT_MIGRATION_STATE_FILE = `${WRKSPACE_ENV_DIR}/migrations.state.json`;\nexport const DEFAULT_GENERATED_SCHEMA_FILE = `${WRKSPACE_ENV_DIR}/schema.generated.json`;\nexport const DEFAULT_ENV_DOC_FILE = `${WRKSPACE_ENV_DIR}/ENV.md`;\nexport const DEFAULT_ENV_AUDIT_FILE = `${WRKSPACE_ENV_DIR}/env.audit.json`;\nexport const DEFAULT_WRKSPACE_ENV_GITIGNORE_FILE = `${WRKSPACE_ENV_DIR}/.gitignore`;\n\nexport const DEFAULT_WRKSPACE_ENV_GITIGNORE_ENTRIES = [\n \"schema.generated.json\",\n \"migrations.state.json\",\n \"ENV.md\",\n \"env.audit.json\"\n] as const;\n\nasync function fileExists(filepath: string): Promise<boolean> {\n try {\n await access(filepath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction normalizeLine(line: string): string {\n return line.trim();\n}\n\nfunction uniqueNormalized(lines: readonly string[]): Set<string> {\n return new Set(lines.map((line) => normalizeLine(line)).filter((line) => line.length > 0));\n}\n\nexport function resolveWrkspaceEnvDir(cwd: string): string {\n return path.resolve(cwd, WRKSPACE_ENV_DIR);\n}\n\nexport function toWrkspaceEnvIgnoreEntry(cwd: string, absolutePath: string): string | undefined {\n const wrkspaceDir = resolveWrkspaceEnvDir(cwd);\n const relativePath = path.relative(wrkspaceDir, absolutePath);\n if (\n relativePath.length === 0 ||\n relativePath.startsWith(\"..\") ||\n path.isAbsolute(relativePath)\n ) {\n return undefined;\n }\n\n return relativePath.split(path.sep).join(\"/\");\n}\n\nexport async function ensureWrkspaceEnvGitignore(\n cwd: string,\n additionalEntries: readonly string[] = []\n): Promise<string> {\n const gitignorePath = path.resolve(cwd, DEFAULT_WRKSPACE_ENV_GITIGNORE_FILE);\n const wrkspaceDir = path.dirname(gitignorePath);\n await mkdir(wrkspaceDir, { recursive: true });\n\n const existingLines = (await fileExists(gitignorePath))\n ? (await readFile(gitignorePath, \"utf8\")).split(/\\r?\\n/)\n : [\"# Generated by airlock\"];\n const requiredEntries = [\n ...DEFAULT_WRKSPACE_ENV_GITIGNORE_ENTRIES,\n ...additionalEntries.filter((entry) => entry.trim().length > 0)\n ];\n const seenLines = uniqueNormalized(existingLines);\n\n const mergedLines = [...existingLines];\n for (const entry of requiredEntries) {\n if (seenLines.has(entry)) {\n continue;\n }\n mergedLines.push(entry);\n seenLines.add(entry);\n }\n\n const content = `${mergedLines.filter((line) => line.length > 0).join(\"\\n\")}\\n`;\n const existingContent = (await fileExists(gitignorePath)) ? await readFile(gitignorePath, \"utf8\") : \"\";\n if (content !== existingContent) {\n await writeFile(gitignorePath, content, \"utf8\");\n }\n\n return gitignorePath;\n}\n","import { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { dotenvToObject, parseDotenv } from \"./dotenv.js\";\nimport {\n EnvValidationError,\n createEnv,\n formatValidationIssues,\n type EnvSchema,\n type EnvTarget,\n type EnvValidationIssue,\n type PrefixPolicy\n} from \"./env.js\";\nimport { loadSchema, resolveSchemaPath } from \"./schema-loader.js\";\n\nconst CHECK_ENV_FILES_BY_TARGET: Record<EnvTarget, readonly string[]> = {\n dev: [\".env.defaults\", \".env\", \".env.dev\", \".env.local\", \".env.dev.local\"],\n preview: [\".env.defaults\", \".env\", \".env.preview\", \".env.local\", \".env.preview.local\"],\n prod: [\".env.defaults\", \".env\", \".env.prod\", \".env.local\", \".env.prod.local\"]\n};\n\ntype ExitCode = 0 | 1;\n\nexport interface CheckCommandOptions {\n target: EnvTarget;\n schema?: string;\n app?: string;\n allowUnknown?: boolean;\n json?: boolean;\n strict?: boolean;\n cwd?: string;\n values?: Record<string, string | undefined>;\n prefixPolicy?: PrefixPolicy;\n now?: Date;\n stdout?: {\n write: (message: string) => unknown;\n };\n stderr?: {\n write: (message: string) => unknown;\n };\n}\n\nexport interface CheckCommandResult {\n ok: boolean;\n exitCode: ExitCode;\n target: EnvTarget;\n allowUnknown: boolean;\n strict: boolean;\n schemaPath: string;\n summary: {\n total: number;\n errors: number;\n warnings: number;\n };\n issues: EnvValidationIssue[];\n}\n\nfunction assertTarget(target: EnvTarget): void {\n if (target === \"dev\" || target === \"preview\" || target === \"prod\") {\n return;\n }\n\n throw new Error(`Invalid target \"${String(target)}\". Expected one of: dev, preview, prod.`);\n}\n\nfunction sortIssues(issues: readonly EnvValidationIssue[]): EnvValidationIssue[] {\n const severityOrder: Record<EnvValidationIssue[\"severity\"], number> = {\n error: 0,\n warning: 1\n };\n\n return [...issues].sort((left, right) => {\n return (\n severityOrder[left.severity] - severityOrder[right.severity] ||\n left.target.localeCompare(right.target) ||\n left.scope.localeCompare(right.scope) ||\n left.key.localeCompare(right.key) ||\n left.code.localeCompare(right.code)\n );\n });\n}\n\nfunction collectUnknownIssues(\n schema: EnvSchema,\n values: Record<string, string | undefined>,\n target: EnvTarget\n): EnvValidationIssue[] {\n const schemaKeys = new Set(Object.keys(schema));\n const issues: EnvValidationIssue[] = [];\n\n for (const key of Object.keys(values)) {\n if (schemaKeys.has(key)) {\n continue;\n }\n\n issues.push({\n key,\n target,\n scope: \"server\",\n severity: \"error\",\n code: \"UNKNOWN_VARIABLE\",\n message: 'Variable is not defined in schema and `--allow-unknown` was not set.',\n fix: `Add \"${key}\" to your schema or re-run check with --allow-unknown.`\n });\n }\n\n return issues;\n}\n\nasync function fileExists(filepath: string): Promise<boolean> {\n try {\n await access(filepath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function loadValuesFromFiles(\n cwd: string,\n target: EnvTarget,\n schema: EnvSchema\n): Promise<Record<string, string | undefined>> {\n const merged: Record<string, string | undefined> = {};\n const fileOrder = CHECK_ENV_FILES_BY_TARGET[target];\n\n for (const filename of fileOrder) {\n const absolutePath = path.resolve(cwd, filename);\n if (!(await fileExists(absolutePath))) {\n continue;\n }\n\n const fileContent = await readFile(absolutePath, \"utf8\");\n const parsed = parseDotenv(fileContent);\n Object.assign(merged, dotenvToObject(parsed));\n }\n\n for (const key of Object.keys(schema)) {\n if (process.env[key] !== undefined) {\n merged[key] = process.env[key];\n }\n }\n\n return merged;\n}\n\nexport async function runCheckCommand(\n options: CheckCommandOptions\n): Promise<CheckCommandResult> {\n assertTarget(options.target);\n\n const cwd = options.cwd ?? process.cwd();\n const strict = options.strict ?? true;\n const allowUnknown = options.allowUnknown ?? false;\n const schemaPath = await resolveSchemaPath(options.schema, cwd);\n const loaded = await loadSchema(schemaPath, { app: options.app });\n const schema = loaded.schema;\n const prefixPolicy = options.prefixPolicy ?? loaded.prefixPolicy;\n const values = options.values ?? (await loadValuesFromFiles(cwd, options.target, schema));\n const issues: EnvValidationIssue[] = [];\n\n const runtime = createEnv(schema, {\n target: options.target,\n values,\n strict,\n throwOnError: false,\n prefixPolicy,\n now: options.now\n });\n\n try {\n runtime.assert();\n } catch (error) {\n if (!(error instanceof EnvValidationError)) {\n throw error;\n }\n issues.push(...error.issues);\n }\n\n if (!allowUnknown) {\n issues.push(...collectUnknownIssues(schema, values, options.target));\n }\n\n const sortedIssues = sortIssues(issues);\n const errors = sortedIssues.filter((issue) => issue.severity === \"error\").length;\n const warnings = sortedIssues.filter((issue) => issue.severity === \"warning\").length;\n const ok = errors === 0;\n\n const result: CheckCommandResult = {\n ok,\n exitCode: ok ? 0 : 1,\n target: options.target,\n allowUnknown,\n strict,\n schemaPath,\n summary: {\n total: sortedIssues.length,\n errors,\n warnings\n },\n issues: sortedIssues\n };\n\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n if (options.json) {\n stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } else if (!result.ok) {\n stderr.write(`${formatValidationIssues(sortedIssues)}\\n`);\n } else {\n stdout.write(\n `env check passed for target \"${options.target}\" with ${Object.keys(schema).length} schema variable(s).\\n`\n );\n }\n\n return result;\n}\n","import { loadSchema, resolveSchemaPath } from \"./schema-loader.js\";\nimport type { EnvScope } from \"./env.js\";\n\ntype ExitCode = 0;\ntype DeprecationStatus = \"active\" | \"expired\" | \"no-deadline\";\n\nexport interface DeprecationItem {\n key: string;\n scope: EnvScope;\n replacedBy?: string;\n removeAfter?: string;\n message?: string;\n status: DeprecationStatus;\n}\n\nexport interface DeprecationsCommandOptions {\n schema?: string;\n app?: string;\n json?: boolean;\n now?: Date;\n cwd?: string;\n stdout?: { write: (message: string) => unknown };\n}\n\nexport interface DeprecationsCommandResult {\n ok: true;\n exitCode: ExitCode;\n schemaPath: string;\n app?: string;\n count: number;\n items: DeprecationItem[];\n}\n\nfunction parseRemoveAfter(removeAfter: string): Date | undefined {\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(removeAfter)) {\n return new Date(`${removeAfter}T23:59:59.999Z`);\n }\n\n const parsed = new Date(removeAfter);\n if (Number.isNaN(parsed.getTime())) {\n return undefined;\n }\n\n return parsed;\n}\n\nfunction getStatus(removeAfter: string | undefined, now: Date): DeprecationStatus {\n if (!removeAfter) {\n return \"no-deadline\";\n }\n\n const parsedDeadline = parseRemoveAfter(removeAfter);\n if (!parsedDeadline) {\n return \"no-deadline\";\n }\n\n if (now.getTime() > parsedDeadline.getTime()) {\n return \"expired\";\n }\n\n return \"active\";\n}\n\nfunction formatItem(item: DeprecationItem): string {\n const parts = [`- ${item.key}`, `scope=${item.scope}`, `status=${item.status}`];\n if (item.replacedBy) {\n parts.push(`replacedBy=${item.replacedBy}`);\n }\n if (item.removeAfter) {\n parts.push(`removeAfter=${item.removeAfter}`);\n }\n if (item.message) {\n parts.push(`message=${item.message}`);\n }\n return parts.join(\" \");\n}\n\nexport async function runDeprecationsCommand(\n options: DeprecationsCommandOptions = {}\n): Promise<DeprecationsCommandResult> {\n const cwd = options.cwd ?? process.cwd();\n const now = options.now ?? new Date();\n const schemaPath = await resolveSchemaPath(options.schema, cwd);\n const loaded = await loadSchema(schemaPath, { app: options.app });\n const stdout = options.stdout ?? process.stdout;\n\n const items: DeprecationItem[] = Object.entries(loaded.schema)\n .filter(([, definition]) => Boolean(definition.deprecated))\n .map(([key, definition]) => ({\n key,\n scope: definition.scope,\n replacedBy: definition.deprecated?.replacedBy,\n removeAfter: definition.deprecated?.removeAfter,\n message: definition.deprecated?.message,\n status: getStatus(definition.deprecated?.removeAfter, now)\n }))\n .sort((left, right) => left.key.localeCompare(right.key));\n\n const result: DeprecationsCommandResult = {\n ok: true,\n exitCode: 0,\n schemaPath,\n app: options.app,\n count: items.length,\n items\n };\n\n if (options.json) {\n stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return result;\n }\n\n if (items.length === 0) {\n stdout.write(\"No deprecated variables found in schema.\\n\");\n return result;\n }\n\n stdout.write(\"Deprecated variables:\\n\");\n for (const item of items) {\n stdout.write(`${formatItem(item)}\\n`);\n }\n return result;\n}\n","import { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { dotenvToObject, parseDotenv } from \"./dotenv.js\";\nimport type { EnvSchema, EnvScope, EnvVariableDefinition } from \"./env.js\";\nimport { loadSchema, resolveSchemaPath } from \"./schema-loader.js\";\n\nexport type ExportFormat = \"docker-compose\" | \"k8s\" | \"github-actions\";\ntype ExitCode = 0 | 1;\n\nexport interface ExportCommandOptions {\n format: ExportFormat;\n schema?: string;\n withValues?: boolean;\n from?: string;\n cwd?: string;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nexport interface ExportCommandResult {\n ok: boolean;\n exitCode: ExitCode;\n format: ExportFormat;\n schemaPath?: string;\n sourcePath?: string;\n output?: string;\n}\n\ninterface ExportEntry {\n key: string;\n scope: EnvScope;\n sensitive: boolean;\n value: string;\n}\n\ninterface BuildExportOptions {\n withValues: boolean;\n sourceValues: Record<string, string | undefined>;\n}\n\nfunction yamlString(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction includeEntryForFormat(format: ExportFormat, definition: EnvVariableDefinition): boolean {\n if (format === \"github-actions\") {\n return true;\n }\n\n return definition.scope === \"server\";\n}\n\nfunction buildEntries(\n schema: EnvSchema,\n format: ExportFormat,\n options: BuildExportOptions\n): ExportEntry[] {\n return Object.entries(schema)\n .sort(([left], [right]) => left.localeCompare(right))\n .filter(([, definition]) => includeEntryForFormat(format, definition))\n .map(([key, definition]) => ({\n key,\n scope: definition.scope,\n sensitive: Boolean(definition.sensitive),\n value: options.withValues ? options.sourceValues[key] ?? \"\" : \"\"\n }));\n}\n\nfunction renderDockerCompose(entries: readonly ExportEntry[]): string {\n const lines: string[] = ['version: \"3.9\"', \"services:\", \" app:\", \" environment:\"];\n\n if (entries.length === 0) {\n lines.push(\" {}\");\n return `${lines.join(\"\\n\")}\\n`;\n }\n\n for (const entry of entries) {\n lines.push(` ${entry.key}: ${yamlString(entry.value)}`);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction renderK8s(entries: readonly ExportEntry[]): string {\n const configEntries = entries.filter((entry) => !entry.sensitive);\n const secretEntries = entries.filter((entry) => entry.sensitive);\n const lines: string[] = [\"apiVersion: v1\", \"kind: ConfigMap\", \"metadata:\", \" name: wrkspace-env-config\"];\n\n if (configEntries.length === 0) {\n lines.push(\"data: {}\");\n } else {\n lines.push(\"data:\");\n for (const entry of configEntries) {\n lines.push(` ${entry.key}: ${yamlString(entry.value)}`);\n }\n }\n\n lines.push(\"---\");\n lines.push(\"apiVersion: v1\");\n lines.push(\"kind: Secret\");\n lines.push(\"metadata:\");\n lines.push(\" name: wrkspace-env-secret\");\n lines.push(\"type: Opaque\");\n\n if (secretEntries.length === 0) {\n lines.push(\"stringData: {}\");\n } else {\n lines.push(\"stringData:\");\n for (const entry of secretEntries) {\n lines.push(` ${entry.key}: ${yamlString(entry.value)}`);\n }\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction renderGithubActions(entries: readonly ExportEntry[]): string {\n const serverEntries = entries.filter((entry) => entry.scope === \"server\");\n const clientEntries = entries.filter((entry) => entry.scope === \"client\");\n const lines: string[] = [\"env:\"];\n\n if (serverEntries.length === 0 && clientEntries.length === 0) {\n lines.push(\" {}\");\n return `${lines.join(\"\\n\")}\\n`;\n }\n\n if (serverEntries.length > 0) {\n lines.push(\" # server\");\n for (const entry of serverEntries) {\n lines.push(` ${entry.key}: ${yamlString(entry.value)}`);\n }\n }\n\n if (clientEntries.length > 0) {\n lines.push(\" # client\");\n for (const entry of clientEntries) {\n lines.push(` ${entry.key}: ${yamlString(entry.value)}`);\n }\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function renderExport(\n schema: EnvSchema,\n format: ExportFormat,\n options: BuildExportOptions\n): string {\n const entries = buildEntries(schema, format, options);\n\n if (format === \"docker-compose\") {\n return renderDockerCompose(entries);\n }\n\n if (format === \"k8s\") {\n return renderK8s(entries);\n }\n\n return renderGithubActions(entries);\n}\n\nasync function fileExists(filepath: string): Promise<boolean> {\n try {\n await access(filepath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function readValuesFromFile(filepath: string): Promise<Record<string, string | undefined>> {\n const content = await readFile(filepath, \"utf8\");\n const parsed = parseDotenv(content);\n const values = dotenvToObject(parsed);\n return Object.fromEntries(Object.entries(values).map(([key, value]) => [key, value]));\n}\n\nexport async function runExportCommand(\n options: ExportCommandOptions\n): Promise<ExportCommandResult> {\n const cwd = options.cwd ?? process.cwd();\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n const withValues = Boolean(options.withValues);\n const schemaPath = await resolveSchemaPath(options.schema, cwd);\n const loaded = await loadSchema(schemaPath);\n\n if (withValues && !options.from) {\n stderr.write(\n 'Cannot export with values because \"--from <file>\" was not provided. Fix: pass both --with-values and --from <file>.\\n'\n );\n return {\n ok: false,\n exitCode: 1,\n format: options.format,\n schemaPath\n };\n }\n\n let sourcePath: string | undefined;\n let sourceValues: Record<string, string | undefined> = {};\n if (withValues && options.from) {\n sourcePath = path.resolve(cwd, options.from);\n if (!(await fileExists(sourcePath))) {\n stderr.write(\n `Source file not found at \"${sourcePath}\". Fix: pass a valid --from <file> path.\\n`\n );\n return {\n ok: false,\n exitCode: 1,\n format: options.format,\n schemaPath,\n sourcePath\n };\n }\n\n sourceValues = await readValuesFromFile(sourcePath);\n }\n\n const output = renderExport(loaded.schema, options.format, {\n withValues,\n sourceValues\n });\n\n stdout.write(output);\n return {\n ok: true,\n exitCode: 0,\n format: options.format,\n schemaPath,\n sourcePath,\n output\n };\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { generateArtifacts, generateTargetEnvFile, type GeneratedArtifacts } from \"./generators.js\";\nimport { loadSchema, resolveSchemaPath } from \"./schema-loader.js\";\nimport {\n DEFAULT_ENV_AUDIT_FILE,\n DEFAULT_ENV_DOC_FILE,\n ensureWrkspaceEnvGitignore,\n toWrkspaceEnvIgnoreEntry\n} from \"./workspace-layout.js\";\n\nexport interface GenerateCommandOptions {\n schema?: string;\n app?: string;\n writeLocal?: boolean;\n writeTargetFiles?: boolean;\n cwd?: string;\n stdout?: {\n write: (message: string) => unknown;\n };\n}\n\nexport interface GenerateCommandResult {\n schemaPath: string;\n writtenFiles: string[];\n artifacts: GeneratedArtifacts;\n}\n\nexport async function runGenerateCommand(\n options: GenerateCommandOptions = {}\n): Promise<GenerateCommandResult> {\n const cwd = options.cwd ?? process.cwd();\n const schemaPath = await resolveSchemaPath(options.schema, cwd);\n const loaded = await loadSchema(schemaPath, { app: options.app });\n const schema = loaded.schema;\n const artifacts = generateArtifacts(schema, { app: options.app });\n\n const filesToWrite: [string, string][] = [\n [\".env.example\", artifacts.envExample],\n [\".env.defaults\", artifacts.envDefaults],\n [DEFAULT_ENV_DOC_FILE, artifacts.envMarkdown],\n [DEFAULT_ENV_AUDIT_FILE, artifacts.envAuditJson]\n ];\n\n if (options.writeLocal) {\n filesToWrite.push([\".env.local\", artifacts.envLocal]);\n }\n\n if (options.writeTargetFiles) {\n filesToWrite.push(\n [\".env.dev\", generateTargetEnvFile(schema, \"dev\", { app: options.app })],\n [\".env.preview\", generateTargetEnvFile(schema, \"preview\", { app: options.app })],\n [\".env.prod\", generateTargetEnvFile(schema, \"prod\", { app: options.app })]\n );\n }\n\n const autoGeneratedIgnoreEntries = filesToWrite\n .map(([relativePath]) => toWrkspaceEnvIgnoreEntry(cwd, path.resolve(cwd, relativePath)))\n .filter((entry): entry is string => Boolean(entry));\n await ensureWrkspaceEnvGitignore(cwd, autoGeneratedIgnoreEntries);\n\n for (const [relativePath, content] of filesToWrite) {\n const absolutePath = path.resolve(cwd, relativePath);\n await mkdir(path.dirname(absolutePath), { recursive: true });\n await writeFile(absolutePath, content, \"utf8\");\n }\n\n const output = options.stdout ?? process.stdout;\n output.write(`Generated ${filesToWrite.length} env artifact(s) from ${path.basename(schemaPath)}.\\n`);\n\n return {\n schemaPath,\n writtenFiles: filesToWrite.map(([relativePath]) => relativePath),\n artifacts\n };\n}\n","import {\n applyPendingMigrations,\n createMigrationFile,\n getMigrationStatus,\n loadOrBuildMigrationSchema,\n rollbackMigrations\n} from \"./migrations.js\";\n\ntype ExitCode = 0 | 1;\n\nexport interface MigrateMakeCommandOptions {\n name: string;\n cwd?: string;\n migrationsDir?: string;\n now?: Date;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nexport interface MigrateMakeCommandResult {\n ok: boolean;\n exitCode: ExitCode;\n id?: string;\n filePath?: string;\n migrationsDir?: string;\n}\n\nexport interface MigrateCommandOptions {\n cwd?: string;\n migrationsDir?: string;\n stateFile?: string;\n generatedSchemaFile?: string;\n now?: Date;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nexport interface MigrateCommandResult {\n ok: boolean;\n exitCode: ExitCode;\n migrationsDir?: string;\n statePath?: string;\n applied: string[];\n changedFiles: string[];\n}\n\nexport interface MigrateStatusCommandOptions {\n cwd?: string;\n migrationsDir?: string;\n stateFile?: string;\n generatedSchemaFile?: string;\n json?: boolean;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nexport interface MigrateStatusCommandResult {\n ok: boolean;\n exitCode: ExitCode;\n migrationsDir: string;\n statePath: string;\n schemaPath?: string;\n error?: string;\n summary: {\n total: number;\n applied: number;\n pending: number;\n changed: number;\n missing: number;\n };\n entries: Array<{\n id: string;\n status: \"applied\" | \"pending\" | \"changed\" | \"missing\";\n filePath?: string;\n appliedAt?: string;\n checksum?: string;\n currentChecksum?: string;\n }>;\n}\n\nexport interface MigrateRollbackCommandOptions {\n steps: number;\n cwd?: string;\n migrationsDir?: string;\n stateFile?: string;\n generatedSchemaFile?: string;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nexport interface SchemaBuildCommandOptions {\n cwd?: string;\n migrationsDir?: string;\n stateFile?: string;\n generatedSchemaFile?: string;\n force?: boolean;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nexport interface MigrateRollbackCommandResult {\n ok: boolean;\n exitCode: ExitCode;\n migrationsDir?: string;\n statePath?: string;\n rolledBack: string[];\n changedFiles: string[];\n remainingApplied?: number;\n}\n\nexport interface SchemaBuildCommandResult {\n ok: boolean;\n exitCode: ExitCode;\n schemaPath?: string;\n appliedMigrationIds?: string[];\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nexport async function runMigrateMakeCommand(\n options: MigrateMakeCommandOptions\n): Promise<MigrateMakeCommandResult> {\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n try {\n const created = await createMigrationFile({\n name: options.name,\n cwd: options.cwd,\n migrationsDir: options.migrationsDir,\n now: options.now\n });\n\n stdout.write(`Created migration \"${created.id}\" at ${created.filePath}.\\n`);\n return {\n ok: true,\n exitCode: 0,\n id: created.id,\n filePath: created.filePath,\n migrationsDir: created.migrationsDir\n };\n } catch (error) {\n stderr.write(`${toErrorMessage(error)}\\n`);\n return {\n ok: false,\n exitCode: 1\n };\n }\n}\n\nexport async function runMigrateCommand(\n options: MigrateCommandOptions = {}\n): Promise<MigrateCommandResult> {\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n try {\n const result = await applyPendingMigrations({\n cwd: options.cwd,\n migrationsDir: options.migrationsDir,\n stateFile: options.stateFile,\n generatedSchemaFile: options.generatedSchemaFile,\n now: options.now\n });\n\n if (result.applied.length === 0) {\n stdout.write(\"No pending env migrations.\\n\");\n } else {\n stdout.write(`Applied ${result.applied.length} env migration(s): ${result.applied.join(\", \")}.\\n`);\n if (result.changedFiles.length > 0) {\n stdout.write(`Updated files: ${result.changedFiles.join(\", \")}.\\n`);\n }\n stdout.write(`State updated at ${result.statePath}.\\n`);\n }\n\n return {\n ok: true,\n exitCode: 0,\n migrationsDir: result.migrationsDir,\n statePath: result.statePath,\n applied: result.applied,\n changedFiles: result.changedFiles\n };\n } catch (error) {\n stderr.write(`${toErrorMessage(error)}\\n`);\n return {\n ok: false,\n exitCode: 1,\n applied: [],\n changedFiles: []\n };\n }\n}\n\nexport async function runMigrateStatusCommand(\n options: MigrateStatusCommandOptions = {}\n): Promise<MigrateStatusCommandResult> {\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n try {\n const status = await getMigrationStatus({\n cwd: options.cwd,\n migrationsDir: options.migrationsDir,\n stateFile: options.stateFile\n });\n let schemaPath: string | undefined;\n\n if (status.summary.changed === 0 && status.summary.missing === 0) {\n const derivedSchema = await loadOrBuildMigrationSchema({\n cwd: options.cwd,\n migrationsDir: options.migrationsDir,\n stateFile: options.stateFile,\n generatedSchemaFile: options.generatedSchemaFile,\n allowEmpty: true\n });\n schemaPath = derivedSchema.schemaPath;\n }\n\n const ok = status.summary.changed === 0 && status.summary.missing === 0;\n const resultBase: MigrateStatusCommandResult = {\n ok,\n exitCode: ok ? 0 : 1,\n migrationsDir: status.migrationsDir,\n statePath: status.statePath,\n summary: status.summary,\n entries: status.entries\n };\n const result = schemaPath ? { ...resultBase, schemaPath } : resultBase;\n\n if (options.json) {\n stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return result;\n }\n\n stdout.write(`Migrations dir: ${status.migrationsDir}\\n`);\n stdout.write(`State file: ${status.statePath}\\n`);\n if (result.schemaPath) {\n stdout.write(`Schema file: ${result.schemaPath}\\n`);\n }\n stdout.write(\n `Summary: applied=${status.summary.applied} pending=${status.summary.pending} changed=${status.summary.changed} missing=${status.summary.missing}\\n`\n );\n\n for (const entry of status.entries) {\n const appliedAt = entry.appliedAt ? ` appliedAt=${entry.appliedAt}` : \"\";\n stdout.write(`- [${entry.status}] ${entry.id}${appliedAt}\\n`);\n }\n\n if (!ok) {\n stderr.write(\n \"Migration integrity issues detected. Fix: resolve changed/missing migrations before apply or rollback.\\n\"\n );\n }\n\n return result;\n } catch (error) {\n const errorMessage = toErrorMessage(error);\n const failureResult: MigrateStatusCommandResult = {\n ok: false,\n exitCode: 1,\n migrationsDir: \"\",\n statePath: \"\",\n error: errorMessage,\n summary: {\n total: 0,\n applied: 0,\n pending: 0,\n changed: 0,\n missing: 0\n },\n entries: []\n };\n\n if (options.json) {\n stdout.write(`${JSON.stringify(failureResult, null, 2)}\\n`);\n return failureResult;\n }\n\n stderr.write(`${errorMessage}\\n`);\n return failureResult;\n }\n}\n\nexport async function runMigrateRollbackCommand(\n options: MigrateRollbackCommandOptions\n): Promise<MigrateRollbackCommandResult> {\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n try {\n const rolledBack = await rollbackMigrations({\n steps: options.steps,\n cwd: options.cwd,\n migrationsDir: options.migrationsDir,\n stateFile: options.stateFile,\n generatedSchemaFile: options.generatedSchemaFile\n });\n\n if (rolledBack.rolledBack.length === 0) {\n stdout.write(\"No applied env migrations to rollback.\\n\");\n } else {\n stdout.write(\n `Rolled back ${rolledBack.rolledBack.length} env migration(s): ${rolledBack.rolledBack.join(\", \")}.\\n`\n );\n if (rolledBack.changedFiles.length > 0) {\n stdout.write(`Updated files: ${rolledBack.changedFiles.join(\", \")}.\\n`);\n }\n stdout.write(`State updated at ${rolledBack.statePath}.\\n`);\n }\n\n return {\n ok: true,\n exitCode: 0,\n migrationsDir: rolledBack.migrationsDir,\n statePath: rolledBack.statePath,\n rolledBack: rolledBack.rolledBack,\n changedFiles: rolledBack.changedFiles,\n remainingApplied: rolledBack.remainingApplied\n };\n } catch (error) {\n stderr.write(`${toErrorMessage(error)}\\n`);\n return {\n ok: false,\n exitCode: 1,\n rolledBack: [],\n changedFiles: []\n };\n }\n}\n\nexport async function runSchemaBuildCommand(\n options: SchemaBuildCommandOptions = {}\n): Promise<SchemaBuildCommandResult> {\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n try {\n const result = await loadOrBuildMigrationSchema({\n cwd: options.cwd,\n migrationsDir: options.migrationsDir,\n stateFile: options.stateFile,\n generatedSchemaFile: options.generatedSchemaFile,\n forceRebuild: Boolean(options.force),\n allowEmpty: true\n });\n\n stdout.write(\n `Built migration-derived schema at ${result.schemaPath} from ${result.appliedMigrationIds.length} applied migration(s).\\n`\n );\n\n return {\n ok: true,\n exitCode: 0,\n schemaPath: result.schemaPath,\n appliedMigrationIds: result.appliedMigrationIds\n };\n } catch (error) {\n stderr.write(`${toErrorMessage(error)}\\n`);\n return {\n ok: false,\n exitCode: 1\n };\n }\n}\n","import { spawn } from \"node:child_process\";\nimport { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { dotenvToObject, parseDotenv } from \"./dotenv.js\";\nimport { formatValidationIssues, type EnvTarget } from \"./env.js\";\nimport { detectDrift, type DriftIssue } from \"./drift.js\";\nimport { loadSchema, resolveSchemaPath } from \"./schema-loader.js\";\n\nexport type ProviderName = \"vercel\" | \"heroku\";\ntype ExitCode = 0 | 1;\n\nexport interface CommandRunnerOptions {\n cwd?: string;\n}\n\nexport interface CommandRunnerResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n missingBinary: boolean;\n}\n\nexport type CommandRunner = (\n command: string,\n args: readonly string[],\n options?: CommandRunnerOptions\n) => Promise<CommandRunnerResult>;\n\nexport async function runExternalCommand(\n command: string,\n args: readonly string[],\n options: CommandRunnerOptions = {}\n): Promise<CommandRunnerResult> {\n return await new Promise((resolve) => {\n const subprocess = spawn(command, [...args], {\n cwd: options.cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"]\n });\n\n let stdout = \"\";\n let stderr = \"\";\n let missingBinary = false;\n\n subprocess.stdout?.on(\"data\", (chunk: Buffer | string) => {\n stdout += chunk.toString();\n });\n\n subprocess.stderr?.on(\"data\", (chunk: Buffer | string) => {\n stderr += chunk.toString();\n });\n\n subprocess.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\") {\n missingBinary = true;\n resolve({\n exitCode: 127,\n stdout,\n stderr: `Command not found: ${command}`,\n missingBinary: true\n });\n return;\n }\n\n resolve({\n exitCode: 1,\n stdout,\n stderr: error.message,\n missingBinary: false\n });\n });\n\n subprocess.on(\"close\", (code) => {\n if (missingBinary) {\n return;\n }\n\n resolve({\n exitCode: code ?? 1,\n stdout,\n stderr,\n missingBinary: false\n });\n });\n });\n}\n\nfunction parseTarget(value: string): EnvTarget {\n if (value === \"dev\" || value === \"preview\" || value === \"prod\") {\n return value;\n }\n\n throw new Error(`Invalid target \"${value}\". Expected one of: dev, preview, prod.`);\n}\n\nasync function pathExists(filepath: string): Promise<boolean> {\n try {\n await access(filepath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction mergeValuesFromSnapshot(snapshotContent: string): Record<string, string | undefined> {\n const parsed = parseDotenv(snapshotContent);\n const values = dotenvToObject(parsed);\n return Object.fromEntries(Object.entries(values).map(([key, value]) => [key, value]));\n}\n\nfunction formatDiffIssues(issues: readonly DriftIssue[]): string {\n if (issues.length === 0) {\n return \"No schema drift detected.\";\n }\n\n return formatValidationIssues(\n issues.map((issue) => ({\n key: issue.key,\n target: issue.target,\n scope: issue.scope,\n severity: issue.severity,\n code: issue.code,\n message: issue.message,\n fix: issue.fix\n }))\n );\n}\n\nexport interface DoctorCheck {\n name: string;\n ok: boolean;\n message: string;\n fix?: string;\n}\n\nexport interface DoctorResult {\n ok: boolean;\n exitCode: ExitCode;\n schemaPath?: string;\n checks: DoctorCheck[];\n}\n\nexport interface DoctorCommandOptions {\n schema?: string;\n cwd?: string;\n runner?: CommandRunner;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nconst PROVIDER_INSTALL_GUIDE: Record<ProviderName, string> = {\n vercel: \"Install Vercel CLI: npm install -g vercel\",\n heroku: \"Install Heroku CLI: https://devcenter.heroku.com/articles/heroku-cli\"\n};\n\nexport async function runDoctorCommand(options: DoctorCommandOptions = {}): Promise<DoctorResult> {\n const cwd = options.cwd ?? process.cwd();\n const runner = options.runner ?? runExternalCommand;\n const checks: DoctorCheck[] = [];\n let schemaPath: string | undefined;\n\n try {\n schemaPath = await resolveSchemaPath(options.schema, cwd);\n checks.push({\n name: \"schema\",\n ok: true,\n message: `Schema found at ${schemaPath}.`\n });\n } catch (error) {\n checks.push({\n name: \"schema\",\n ok: false,\n message: error instanceof Error ? error.message : \"Schema file not found.\",\n fix: \"Add env.schema.mjs (or pass --schema <path>).\"\n });\n }\n\n for (const provider of [\"vercel\", \"heroku\"] as const) {\n const result = await runner(provider, [\"--version\"], { cwd });\n if (result.missingBinary) {\n checks.push({\n name: `${provider}-cli`,\n ok: false,\n message: `${provider} CLI is not installed.`,\n fix: PROVIDER_INSTALL_GUIDE[provider]\n });\n continue;\n }\n\n if (result.exitCode !== 0) {\n checks.push({\n name: `${provider}-cli`,\n ok: false,\n message: `${provider} CLI returned non-zero exit code (${result.exitCode}).`,\n fix: `Run \"${provider} --version\" manually and fix local setup.`\n });\n continue;\n }\n\n checks.push({\n name: `${provider}-cli`,\n ok: true,\n message: `${provider} CLI is available.`\n });\n }\n\n const ok = checks.every((check) => check.ok);\n const result: DoctorResult = {\n ok,\n exitCode: ok ? 0 : 1,\n schemaPath,\n checks\n };\n\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n if (ok) {\n stdout.write(\"env doctor passed.\\n\");\n return result;\n }\n\n stderr.write(\"env doctor found setup issues:\\n\");\n for (const check of checks.filter((item) => !item.ok)) {\n stderr.write(`- ${check.name}: ${check.message}\\n`);\n if (check.fix) {\n stderr.write(` Fix: ${check.fix}\\n`);\n }\n }\n\n return result;\n}\n\nexport interface PullVercelOptions {\n env: EnvTarget;\n cwd?: string;\n runner?: CommandRunner;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nexport interface PullVercelResult {\n ok: boolean;\n exitCode: ExitCode;\n outputPath: string;\n}\n\nexport async function runPullVercelCommand(options: PullVercelOptions): Promise<PullVercelResult> {\n const cwd = options.cwd ?? process.cwd();\n const runner = options.runner ?? runExternalCommand;\n const outputPath = path.resolve(cwd, `.env.vercel.${options.env}`);\n const result = await runner(\"vercel\", [\"env\", \"pull\", outputPath, options.env], { cwd });\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n if (result.missingBinary) {\n stderr.write(\n `vercel CLI is not installed. Fix: ${PROVIDER_INSTALL_GUIDE.vercel}.\\n`\n );\n return { ok: false, exitCode: 1, outputPath };\n }\n\n if (result.exitCode !== 0) {\n stderr.write(\n `vercel env pull failed for target \"${options.env}\". ${result.stderr || \"No stderr output.\"}\\n`\n );\n return { ok: false, exitCode: 1, outputPath };\n }\n\n stdout.write(`Pulled Vercel env snapshot to ${outputPath}.\\n`);\n return { ok: true, exitCode: 0, outputPath };\n}\n\nexport interface DiffCommandOptions {\n provider: ProviderName;\n env?: EnvTarget;\n app?: string;\n target?: EnvTarget;\n schema?: string;\n snapshot?: string;\n allowUnknown?: boolean;\n json?: boolean;\n cwd?: string;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nexport interface DiffCommandResult {\n provider: ProviderName;\n ok: boolean;\n exitCode: ExitCode;\n schemaPath: string;\n snapshotPath: string;\n target: EnvTarget;\n summary: {\n total: number;\n errors: number;\n warnings: number;\n };\n issues: DriftIssue[];\n}\n\nfunction getSnapshotPath(options: DiffCommandOptions, cwd: string): string {\n if (options.snapshot) {\n return path.resolve(cwd, options.snapshot);\n }\n\n if (options.provider === \"vercel\") {\n const envTarget = options.env;\n if (!envTarget) {\n throw new Error('Missing required option \"--env <target>\" for vercel diff.');\n }\n return path.resolve(cwd, `.env.vercel.${envTarget}`);\n }\n\n const app = options.app;\n if (!app) {\n throw new Error('Missing required option \"--app <name>\" for heroku diff.');\n }\n\n return path.resolve(cwd, `.env.heroku.${app}`);\n}\n\nfunction resolveDiffTarget(options: DiffCommandOptions): EnvTarget {\n if (options.provider === \"vercel\") {\n if (!options.env) {\n throw new Error('Missing required option \"--env <target>\" for vercel diff.');\n }\n return parseTarget(options.env);\n }\n\n return options.target ?? \"prod\";\n}\n\nexport async function runDiffCommand(options: DiffCommandOptions): Promise<DiffCommandResult> {\n const cwd = options.cwd ?? process.cwd();\n const schemaPath = await resolveSchemaPath(options.schema, cwd);\n const loaded = await loadSchema(schemaPath);\n const target = resolveDiffTarget(options);\n const snapshotPath = getSnapshotPath(options, cwd);\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n if (!(await pathExists(snapshotPath))) {\n const message = `Snapshot file not found at \"${snapshotPath}\". Fix: pull provider env first, then retry diff.`;\n if (options.json) {\n stdout.write(\n `${JSON.stringify(\n {\n provider: options.provider,\n ok: false,\n exitCode: 1,\n schemaPath,\n snapshotPath,\n target,\n summary: { total: 1, errors: 1, warnings: 0 },\n issues: [\n {\n key: \"__snapshot__\",\n target,\n scope: \"server\",\n severity: \"error\",\n code: \"SNAPSHOT_MISSING\",\n message,\n fix: \"Create the snapshot file and re-run diff.\",\n source: snapshotPath\n }\n ]\n },\n null,\n 2\n )}\\n`\n );\n } else {\n stderr.write(`${message}\\n`);\n }\n\n return {\n provider: options.provider,\n ok: false,\n exitCode: 1,\n schemaPath,\n snapshotPath,\n target,\n summary: {\n total: 1,\n errors: 1,\n warnings: 0\n },\n issues: [\n {\n key: \"__snapshot__\",\n target,\n scope: \"server\",\n severity: \"error\",\n code: \"SNAPSHOT_MISSING\",\n message,\n fix: \"Create the snapshot file and re-run diff.\",\n source: snapshotPath\n }\n ]\n };\n }\n\n const snapshotContent = await readFile(snapshotPath, \"utf8\");\n const snapshotValues = mergeValuesFromSnapshot(snapshotContent);\n const drift = detectDrift(loaded.schema, {\n target,\n values: snapshotValues,\n source: snapshotPath,\n allowUnknown: options.allowUnknown ?? false\n });\n\n const ok = drift.summary.errors === 0;\n const result: DiffCommandResult = {\n provider: options.provider,\n ok,\n exitCode: ok ? 0 : 1,\n schemaPath,\n snapshotPath,\n target,\n summary: drift.summary,\n issues: drift.issues\n };\n\n if (options.json) {\n stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } else if (ok) {\n stdout.write(`No drift detected for ${options.provider} snapshot (${path.basename(snapshotPath)}).\\n`);\n } else {\n stderr.write(`${formatDiffIssues(result.issues)}\\n`);\n }\n\n return result;\n}\n\nfunction isGeneratedPlaceholder(key: string, value: string): boolean {\n const normalized = value.trim();\n if (normalized.length === 0) {\n return true;\n }\n\n const lowercase = normalized.toLowerCase();\n if (lowercase === `example_${key.toLowerCase()}`) {\n return true;\n }\n\n return (\n normalized === \"https://example.com\" ||\n normalized === \"{}\" ||\n lowercase.startsWith(\"example_\")\n );\n}\n\nexport interface PushHerokuOptions {\n app: string;\n target: EnvTarget;\n from: string;\n schema?: string;\n cwd?: string;\n runner?: CommandRunner;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nexport interface PushHerokuResult {\n ok: boolean;\n exitCode: ExitCode;\n pushedKeys: string[];\n skippedKeys: string[];\n}\n\nexport async function runPushHerokuCommand(options: PushHerokuOptions): Promise<PushHerokuResult> {\n const cwd = options.cwd ?? process.cwd();\n const runner = options.runner ?? runExternalCommand;\n const schemaPath = await resolveSchemaPath(options.schema, cwd);\n const loaded = await loadSchema(schemaPath);\n const inputFile = path.resolve(cwd, options.from);\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n if (!(await pathExists(inputFile))) {\n stderr.write(`Source file not found at \"${inputFile}\". Fix: pass a valid --from <file> path.\\n`);\n return { ok: false, exitCode: 1, pushedKeys: [], skippedKeys: [] };\n }\n\n const content = await readFile(inputFile, \"utf8\");\n const values = mergeValuesFromSnapshot(content);\n const pushedEntries: [string, string][] = [];\n const skippedKeys: string[] = [];\n\n for (const [key, value] of Object.entries(values)) {\n if (!(key in loaded.schema)) {\n skippedKeys.push(key);\n continue;\n }\n\n if (value === undefined || isGeneratedPlaceholder(key, value)) {\n skippedKeys.push(key);\n continue;\n }\n\n pushedEntries.push([key, value]);\n }\n\n if (pushedEntries.length === 0) {\n stdout.write(\n \"No eligible variables to push. Only schema-approved non-placeholder values are pushed to Heroku.\\n\"\n );\n return { ok: true, exitCode: 0, pushedKeys: [], skippedKeys };\n }\n\n const assignmentArgs = pushedEntries.map(([key, value]) => `${key}=${value}`);\n const result = await runner(\"heroku\", [\"config:set\", ...assignmentArgs, \"--app\", options.app], { cwd });\n\n if (result.missingBinary) {\n stderr.write(\n `heroku CLI is not installed. Fix: ${PROVIDER_INSTALL_GUIDE.heroku}.\\n`\n );\n return { ok: false, exitCode: 1, pushedKeys: [], skippedKeys };\n }\n\n if (result.exitCode !== 0) {\n stderr.write(\n `heroku config:set failed for app \"${options.app}\". ${result.stderr || \"No stderr output.\"}\\n`\n );\n return { ok: false, exitCode: 1, pushedKeys: [], skippedKeys };\n }\n\n stdout.write(\n `Pushed ${pushedEntries.length} variable(s) to Heroku app \"${options.app}\" for target \"${options.target}\".\\n`\n );\n return {\n ok: true,\n exitCode: 0,\n pushedKeys: pushedEntries.map(([key]) => key),\n skippedKeys\n };\n}\n","import type { EnvVariableDefinition } from \"./env.js\";\nimport {\n DEFAULT_MIGRATION_TARGET_FILES,\n createEnvMigrationContext,\n createMigrationFile,\n finalizeFluentDefinitions,\n hasKeyInTargetDocuments,\n loadEnvTargetDocuments,\n type EnvMigrationTargetFile,\n writeEnvTargetDocuments\n} from \"./migrations.js\";\nimport { loadSchema, resolveSchemaPath } from \"./schema-loader.js\";\n\ntype ExitCode = 0 | 1;\n\nexport interface ReconcileCommandOptions {\n schema?: string;\n app?: string;\n cwd?: string;\n writeMigration?: boolean;\n migrationsDir?: string;\n now?: Date;\n stdout?: { write: (message: string) => unknown };\n stderr?: { write: (message: string) => unknown };\n}\n\nexport interface ReconcileAddedKey {\n key: string;\n definition: EnvVariableDefinition;\n value: string;\n targets: EnvMigrationTargetFile[];\n}\n\nexport interface ReconcileCommandResult {\n ok: boolean;\n exitCode: ExitCode;\n schemaPath?: string;\n changedFiles: string[];\n added: ReconcileAddedKey[];\n migrationId?: string;\n migrationPath?: string;\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction envValueFromDefault(definition: EnvVariableDefinition): string {\n if (definition.sensitive) {\n return \"\";\n }\n\n if (definition.defaultValue === undefined || definition.defaultValue === null) {\n return \"\";\n }\n\n if (definition.kind === \"number\" && typeof definition.defaultValue === \"number\") {\n return `${definition.defaultValue}`;\n }\n\n if (definition.kind === \"boolean\" && typeof definition.defaultValue === \"boolean\") {\n return definition.defaultValue ? \"true\" : \"false\";\n }\n\n if (definition.kind === \"json\") {\n if (typeof definition.defaultValue === \"string\") {\n return definition.defaultValue;\n }\n return JSON.stringify(definition.defaultValue);\n }\n\n return String(definition.defaultValue);\n}\n\nfunction renderTargets(targets: readonly EnvMigrationTargetFile[]): string {\n return `[${targets.map((target) => JSON.stringify(target)).join(\", \")}]`;\n}\n\nfunction renderDefinition(definition: EnvVariableDefinition): string[] {\n const sanitizedDefinition: EnvVariableDefinition =\n definition.sensitive && definition.defaultValue !== undefined\n ? {\n ...definition,\n defaultValue: undefined\n }\n : definition;\n\n return JSON.stringify(sanitizedDefinition, null, 2).split(\"\\n\");\n}\n\nfunction renderReconcileMigrationTemplate(id: string, additions: readonly ReconcileAddedKey[]): string {\n const lines: string[] = [\n 'import type { EnvMigrationContext } from \"@wrkspace-co/env\";',\n \"\",\n `// Migration id is derived from this filename: ${id}.ts`,\n \"\",\n \"export async function up(ctx: EnvMigrationContext) {\"\n ];\n\n for (const addition of additions) {\n const hasAllTargets = addition.targets.length === DEFAULT_MIGRATION_TARGET_FILES.length;\n lines.push(` ctx.key(${JSON.stringify(addition.key)})`);\n lines.push(\" .define(\");\n const definitionLines = renderDefinition(addition.definition);\n for (let index = 0; index < definitionLines.length; index += 1) {\n lines.push(` ${definitionLines[index]}`);\n }\n lines.push(\" )\");\n lines.push(` .value(${JSON.stringify(addition.value)})`);\n if (!hasAllTargets) {\n lines.push(` .targets(${renderTargets(addition.targets)})`);\n }\n lines.push(\" .overwrite(false)\");\n lines.push(\" .createIfMissing(true);\");\n }\n\n lines.push(\"}\");\n lines.push(\"\");\n lines.push(\"export async function down(ctx: EnvMigrationContext) {\");\n\n for (const addition of additions) {\n const hasAllTargets = addition.targets.length === DEFAULT_MIGRATION_TARGET_FILES.length;\n if (hasAllTargets) {\n lines.push(` ctx.key(${JSON.stringify(addition.key)}).remove();`);\n } else {\n lines.push(\n ` ctx.key(${JSON.stringify(addition.key)}).targets(${renderTargets(addition.targets)}).remove();`\n );\n }\n }\n\n lines.push(\"}\");\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n\nexport async function runReconcileCommand(\n options: ReconcileCommandOptions = {}\n): Promise<ReconcileCommandResult> {\n const cwd = options.cwd ?? process.cwd();\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n try {\n const schemaPath = await resolveSchemaPath(options.schema, cwd);\n const loaded = await loadSchema(schemaPath, { app: options.app });\n const documents = await loadEnvTargetDocuments({ cwd });\n const context = createEnvMigrationContext(documents);\n const additions: ReconcileAddedKey[] = [];\n\n for (const [key, definition] of Object.entries(loaded.schema)) {\n const missingTargets = DEFAULT_MIGRATION_TARGET_FILES.filter(\n (target) => !hasKeyInTargetDocuments(documents, target, key)\n );\n if (missingTargets.length === 0) {\n continue;\n }\n\n const value = envValueFromDefault(definition);\n const chain = context.key(key).define(definition).value(value).overwrite(false).createIfMissing(true);\n if (missingTargets.length !== DEFAULT_MIGRATION_TARGET_FILES.length) {\n chain.targets(missingTargets);\n }\n additions.push({\n key,\n definition,\n value,\n targets: missingTargets\n });\n }\n\n finalizeFluentDefinitions(context);\n const changedFiles = await writeEnvTargetDocuments(documents);\n let migrationId: string | undefined;\n let migrationPath: string | undefined;\n\n if (options.writeMigration && additions.length > 0) {\n const created = await createMigrationFile({\n name: \"reconcile\",\n cwd,\n migrationsDir: options.migrationsDir,\n now: options.now,\n template: (id) => renderReconcileMigrationTemplate(id, additions)\n });\n\n migrationId = created.id;\n migrationPath = created.filePath;\n }\n\n if (additions.length === 0) {\n stdout.write(\"env reconcile: all schema keys already exist in target env files.\\n\");\n } else {\n stdout.write(\n `env reconcile added ${additions.length} schema key(s) across ${changedFiles.length} file(s).\\n`\n );\n stdout.write(`Updated files: ${changedFiles.join(\", \")}.\\n`);\n if (migrationPath) {\n stdout.write(`Created reconcile migration \"${migrationId}\" at ${migrationPath}.\\n`);\n }\n }\n\n return {\n ok: true,\n exitCode: 0,\n schemaPath,\n changedFiles,\n added: additions,\n migrationId,\n migrationPath\n };\n } catch (error) {\n stderr.write(`${toErrorMessage(error)}\\n`);\n return {\n ok: false,\n exitCode: 1,\n changedFiles: [],\n added: []\n };\n }\n}\n","import { createAirlockProgram } from \"./plugin.js\";\n\nasync function main(): Promise<void> {\n await createAirlockProgram().parseAsync(process.argv);\n}\n\nvoid main().catch((error: unknown) => {\n process.exitCode = 1;\n\n if (error instanceof Error) {\n console.error(error.message);\n return;\n }\n\n console.error(String(error));\n});\n"],"mappings":"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","names":["access","readFile","path","access","readFile","path","pathToFileURL","access","mkdir","readFile","writeFile","path","DEFAULT_MIGRATIONS_DIR","DEFAULT_MIGRATION_STATE_FILE","DEFAULT_GENERATED_SCHEMA_FILE","access","toEnvString","path","exists","readFile","key","mkdir","writeFile","derivedSchema","access","path","DEFAULT_GENERATED_SCHEMA_FILE","isRecord","readFile","pathToFileURL","fileExists","access","path","readFile","access","readFile","path","sortIssues","collectUnknownIssues","fileExists","access","path","readFile","parseRemoveAfter","access","readFile","path","fileExists","access","readFile","path","mkdir","writeFile","path","path","mkdir","writeFile","access","readFile","path","pathExists","access","result","path","readFile","toErrorMessage","parseTarget"]}