@ayronforge/envil 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -761,7 +761,6 @@ var requiredString = Schema2.String.pipe(Schema2.minLength(1)).annotations({
761
761
  [SCHEMA_KIND_ANNOTATION]: "requiredString",
762
762
  [PLACEHOLDER_ANNOTATION]: "CHANGE_ME"
763
763
  });
764
- var optionalString = Schema2.UndefinedOr(Schema2.String);
765
764
  var boolean = Schema2.transform(Schema2.String.pipe(Schema2.filter((s) => ["true", "false", "1", "0"].includes(s.toLowerCase()), {
766
765
  identifier: "BooleanString",
767
766
  message: () => "Expected 'true', 'false', '1', or '0'"
@@ -902,7 +901,15 @@ function examineSchema(schema) {
902
901
  const kind = getAnn(ast, SCHEMA_KIND_ANNOTATION);
903
902
  const placeholder = getAnn(ast, PLACEHOLDER_ANNOTATION);
904
903
  const stringEnumValues = kind === "stringEnum" ? getAnn(ast, STRING_ENUM_VALUES_ANNOTATION) : undefined;
905
- return { kind, placeholder, optional: isOptional, hasDefault, defaultValue, redacted: isRedacted, stringEnumValues };
904
+ return {
905
+ kind,
906
+ placeholder,
907
+ optional: isOptional,
908
+ hasDefault,
909
+ defaultValue,
910
+ redacted: isRedacted,
911
+ stringEnumValues
912
+ };
906
913
  }
907
914
  function buildEnvExample(definition) {
908
915
  const prefix = {
@@ -1218,5 +1225,5 @@ export {
1218
1225
  runCli
1219
1226
  };
1220
1227
 
1221
- //# debugId=D32DCC7ECD9FDB2E64756E2164756E21
1228
+ //# debugId=2598B6F54188F97964756E2164756E21
1222
1229
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -3,16 +3,16 @@
3
3
  "sources": ["../src/cli/fs-utils.ts", "../src/cli/dotenv-codec.ts", "../src/cli/literals.ts", "../src/cli/types.ts", "../src/cli/generate-env-ts.ts", "../src/cli/infer.ts", "../src/introspect.ts", "../src/schemas.ts", "../src/cli.ts"],
4
4
  "sourcesContent": [
5
5
  "import { access, mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport async function pathExists(filePath: string): Promise<boolean> {\n try {\n await access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function resolveFromCwd(cwd: string, filePath: string): string {\n return path.isAbsolute(filePath) ? filePath : path.resolve(cwd, filePath);\n}\n\nexport async function getDefaultEnvOutputPath(cwd: string): Promise<string> {\n const srcDir = path.join(cwd, \"src\");\n if (await pathExists(srcDir)) {\n return path.join(srcDir, \"env.ts\");\n }\n return path.join(cwd, \"env.ts\");\n}\n\nexport async function getDefaultExampleInputPath(cwd: string): Promise<string> {\n const rootEnv = path.join(cwd, \"env.ts\");\n const srcEnv = path.join(cwd, \"src\", \"env.ts\");\n\n if (await pathExists(rootEnv)) return rootEnv;\n if (await pathExists(srcEnv)) return srcEnv;\n\n const srcDir = path.join(cwd, \"src\");\n if (await pathExists(srcDir)) {\n return srcEnv;\n }\n\n return rootEnv;\n}\n\nexport async function ensureWritableTarget(targetPath: string, force: boolean): Promise<void> {\n if (!force && (await pathExists(targetPath))) {\n throw new Error(`Target file \"${targetPath}\" already exists. Use --force to overwrite.`);\n }\n}\n\nexport async function readTextFileOrThrow(filePath: string, label: string): Promise<string> {\n try {\n return await readFile(filePath, \"utf8\");\n } catch (error) {\n throw new Error(`Unable to read ${label} at \"${filePath}\": ${String(error)}`);\n }\n}\n\nexport async function writeFileAtomic(targetPath: string, contents: string): Promise<void> {\n const directory = path.dirname(targetPath);\n await mkdir(directory, { recursive: true });\n\n const tempPath = path.join(\n directory,\n `.envil-tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`,\n );\n\n await writeFile(tempPath, contents, \"utf8\");\n await rename(tempPath, targetPath);\n}\n",
6
- "import { Schema } from \"effect\";\n\nimport {\n parseBooleanDirective,\n toEnvValueLiteral,\n} from \"./literals.ts\";\nimport {\n BUCKETS,\n SCHEMA_KINDS,\n type Bucket,\n type DotenvDocument,\n type SchemaKind,\n} from \"./types.ts\";\n\ntype MutableDirectives = {\n type?: SchemaKind;\n optional?: boolean;\n hasDefault?: boolean;\n redacted?: boolean;\n bucket?: Bucket;\n stringEnumValues?: readonly string[];\n};\n\nconst SENTINEL_DIRECTIVE_PREFIX = \"@\";\nconst KEY_ASSIGNMENT_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s*=(.*)$/;\n\nconst DotenvCodec = Schema.transform(Schema.String, Schema.Unknown, {\n decode: (text) => parseDotenvText(String(text)),\n encode: (value) => stringifyDotenvDocument(value as DotenvDocument),\n});\n\nexport function decodeDotenvText(text: string): DotenvDocument {\n return Schema.decodeUnknownSync(DotenvCodec)(text) as DotenvDocument;\n}\n\nexport function encodeDotenvText(document: DotenvDocument): string {\n return Schema.encodeSync(DotenvCodec)(document) as string;\n}\n\nfunction parseDotenvText(text: string): DotenvDocument {\n const lines = text.split(/\\r?\\n/);\n const entries: Array<DotenvDocument[\"entries\"][number]> = [];\n const prefix: Partial<Record<Bucket, string>> = {};\n let activeBucket: Bucket | undefined;\n let pendingDirectives: MutableDirectives = {};\n\n for (const [index, line] of lines.entries()) {\n const lineNumber = index + 1;\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n\n if (trimmed.startsWith(\"#\")) {\n const comment = trimmed.slice(1).trim();\n if (comment.startsWith(SENTINEL_DIRECTIVE_PREFIX)) {\n const directiveResult = parseDirectiveGroup(comment, lineNumber, pendingDirectives);\n if (directiveResult.sectionBucket) {\n activeBucket = directiveResult.sectionBucket;\n if (directiveResult.sectionPrefix) {\n prefix[directiveResult.sectionBucket] = directiveResult.sectionPrefix;\n }\n pendingDirectives = {};\n } else {\n pendingDirectives = directiveResult.directives;\n }\n }\n continue;\n }\n\n const assignmentMatch = KEY_ASSIGNMENT_PATTERN.exec(trimmed);\n if (!assignmentMatch) {\n throw new Error(`Malformed assignment at line ${lineNumber}: \"${line}\"`);\n }\n\n const key = assignmentMatch[1];\n const rightHandSide = assignmentMatch[2];\n const split = splitValueAndInlineComment(rightHandSide);\n const value = normalizeAssignedValue(split.value.trim());\n\n let directives = { ...pendingDirectives };\n if (split.comment) {\n const inlineComment = split.comment.trim();\n if (inlineComment.startsWith(SENTINEL_DIRECTIVE_PREFIX)) {\n const parsedInline = parseDirectiveGroup(inlineComment, lineNumber, directives);\n if (parsedInline.sectionBucket) {\n throw new Error(`Section directives are not allowed inline at line ${lineNumber}`);\n }\n directives = parsedInline.directives;\n }\n }\n\n entries.push({\n key,\n value,\n line: lineNumber,\n sectionBucket: activeBucket,\n directives,\n });\n pendingDirectives = {};\n }\n\n const hasPrefix = Object.values(prefix).some((v) => v && v.length > 0);\n return { entries, ...(hasPrefix ? { prefix } : {}) };\n}\n\nfunction stringifyDotenvDocument(document: DotenvDocument): string {\n if (!document || !Array.isArray(document.entries)) {\n throw new Error(\"Invalid dotenv document: expected an entries array\");\n }\n\n const grouped = {\n server: [] as Array<DotenvDocument[\"entries\"][number]>,\n client: [] as Array<DotenvDocument[\"entries\"][number]>,\n shared: [] as Array<DotenvDocument[\"entries\"][number]>,\n };\n\n const sortedEntries = [...document.entries].sort((left, right) => {\n if (left.line !== right.line) return left.line - right.line;\n return left.key.localeCompare(right.key);\n });\n\n for (const entry of sortedEntries) {\n const bucket: Bucket = entry.directives.bucket ?? entry.sectionBucket ?? \"server\";\n grouped[bucket].push(entry);\n }\n\n const lines: string[] = [];\n\n for (const bucket of BUCKETS) {\n const pfx = document.prefix?.[bucket];\n lines.push(pfx && pfx.length > 0 ? `# @${bucket} ${pfx}` : `# @${bucket}`);\n lines.push(\"\");\n\n for (const entry of grouped[bucket]) {\n const optional = entry.directives.optional ?? false;\n const redacted = entry.directives.redacted ?? false;\n const noDefault = entry.directives.hasDefault === false;\n\n if (entry.directives.type === \"stringEnum\" && entry.directives.stringEnumValues) {\n lines.push(`# @type enum ${entry.directives.stringEnumValues.join(\",\")}`);\n }\n if (optional) lines.push(\"# @optional\");\n if (noDefault) lines.push(\"# @no-default\");\n if (redacted) lines.push(\"# @redacted\");\n lines.push(`${entry.key}=${serializeEnvValue(entry.value)}`);\n lines.push(\"\");\n }\n }\n\n while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction splitValueAndInlineComment(value: string): { value: string; comment?: string } {\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let escaped = false;\n\n for (let index = 0; index < value.length; index += 1) {\n const char = value[index];\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n\n if (char === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n continue;\n }\n\n if (char === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n continue;\n }\n\n if (!inSingleQuote && !inDoubleQuote && char === \"#\") {\n return {\n value: value.slice(0, index).trimEnd(),\n comment: value.slice(index + 1),\n };\n }\n }\n\n return { value };\n}\n\nfunction parseDirectiveGroup(\n directiveText: string,\n lineNumber: number,\n base: MutableDirectives,\n): { directives: MutableDirectives; sectionBucket?: Bucket; sectionPrefix?: string } {\n const directives = { ...base };\n const tokens = directiveText\n .split(/\\s+(?=@)/g)\n .map((token) => token.trim())\n .filter(Boolean);\n\n let sectionBucket: Bucket | undefined;\n let sectionPrefix: string | undefined;\n for (const token of tokens) {\n const parsed = parseDirectiveToken(token, lineNumber);\n if (\"type\" in parsed) directives.type = parsed.type;\n if (\"optional\" in parsed) directives.optional = parsed.optional;\n if (\"hasDefault\" in parsed) directives.hasDefault = parsed.hasDefault;\n if (\"redacted\" in parsed) directives.redacted = parsed.redacted;\n if (\"bucket\" in parsed) directives.bucket = parsed.bucket;\n if (\"stringEnumValues\" in parsed) directives.stringEnumValues = parsed.stringEnumValues;\n if (\"sectionBucket\" in parsed) sectionBucket = parsed.sectionBucket;\n if (\"sectionPrefix\" in parsed) sectionPrefix = parsed.sectionPrefix;\n }\n\n return { directives, sectionBucket, sectionPrefix };\n}\n\nfunction parseDirectiveToken(\n token: string,\n lineNumber: number,\n): MutableDirectives & { sectionBucket?: Bucket; sectionPrefix?: string } {\n if (!token.startsWith(\"@\")) {\n throw new Error(`Malformed directive at line ${lineNumber}: \"${token}\"`);\n }\n\n const spaceIndex = token.indexOf(\" \");\n const name = (spaceIndex === -1 ? token.slice(1) : token.slice(1, spaceIndex)).trim();\n const value = (spaceIndex === -1 ? \"\" : token.slice(spaceIndex + 1)).trim();\n\n if (name === \"server\" || name === \"client\" || name === \"shared\") {\n return value.length > 0\n ? { sectionBucket: name, sectionPrefix: value }\n : { sectionBucket: name };\n }\n\n if (name === \"type\") {\n if (value.length === 0) {\n throw new Error(`Directive \"@type\" requires a value at line ${lineNumber}`);\n }\n if (value === \"enum\" || value.startsWith(\"enum \")) {\n const raw = value.slice(4).trim();\n if (raw.length === 0) {\n throw new Error(`Directive \"@type enum\" requires comma-separated values at line ${lineNumber}`);\n }\n const stringEnumValues = raw.split(\",\").map((v) => v.trim()).filter(Boolean);\n if (stringEnumValues.length === 0) {\n throw new Error(`Directive \"@type enum\" requires at least one value at line ${lineNumber}`);\n }\n return { type: \"stringEnum\", stringEnumValues };\n }\n return { type: parseSchemaKind(value, lineNumber) };\n }\n\n if (name === \"optional\") {\n return { optional: parseBooleanDirective(value || undefined, true) };\n }\n\n if (name === \"no-default\") {\n return { hasDefault: false };\n }\n\n if (name === \"redacted\") {\n return { redacted: parseBooleanDirective(value || undefined, true) };\n }\n\n if (name === \"bucket\") {\n if (value.length === 0) {\n throw new Error(`Directive \"@bucket\" requires a value at line ${lineNumber}`);\n }\n if (!isBucket(value)) {\n throw new Error(`Invalid bucket \"${value}\" at line ${lineNumber}`);\n }\n return { bucket: value };\n }\n\n throw new Error(`Unknown directive \"@${name}\" at line ${lineNumber}`);\n}\n\nfunction parseSchemaKind(rawValue: string, lineNumber: number): SchemaKind {\n const normalized = rawValue.trim().toLowerCase();\n const aliasMap: Record<string, SchemaKind> = {\n string: \"requiredString\",\n requiredstring: \"requiredString\",\n bool: \"boolean\",\n boolean: \"boolean\",\n int: \"integer\",\n integer: \"integer\",\n number: \"number\",\n port: \"port\",\n url: \"url\",\n postgresurl: \"postgresUrl\",\n redisurl: \"redisUrl\",\n mongourl: \"mongoUrl\",\n mysqlurl: \"mysqlUrl\",\n commaseparated: \"commaSeparated\",\n commaseparatednumbers: \"commaSeparatedNumbers\",\n commaseparatedurls: \"commaSeparatedUrls\",\n json: \"json\",\n \"json(schema.unknown)\": \"json\",\n };\n\n const resolved = aliasMap[normalized];\n if (!resolved || !SCHEMA_KINDS.includes(resolved)) {\n throw new Error(`Invalid @type value \"${rawValue}\" at line ${lineNumber}`);\n }\n\n return resolved;\n}\n\nfunction normalizeAssignedValue(value: string): string {\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n return value.slice(1, -1);\n }\n return value;\n}\n\nfunction serializeEnvValue(value: string): string {\n const literal = toEnvValueLiteral(value);\n if (literal.length === 0) return \"\";\n\n if (/[\\s#]/.test(literal)) {\n return JSON.stringify(literal);\n }\n\n return literal;\n}\n\nfunction isBucket(value: string): value is Bucket {\n return BUCKETS.includes(value as Bucket);\n}\n",
6
+ "import { Schema } from \"effect\";\n\nimport { parseBooleanDirective, toEnvValueLiteral } from \"./literals.ts\";\nimport {\n BUCKETS,\n SCHEMA_KINDS,\n type Bucket,\n type DotenvDocument,\n type SchemaKind,\n} from \"./types.ts\";\n\ntype MutableDirectives = {\n type?: SchemaKind;\n optional?: boolean;\n hasDefault?: boolean;\n redacted?: boolean;\n bucket?: Bucket;\n stringEnumValues?: readonly string[];\n};\n\nconst SENTINEL_DIRECTIVE_PREFIX = \"@\";\nconst KEY_ASSIGNMENT_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s*=(.*)$/;\n\nconst DotenvCodec = Schema.transform(Schema.String, Schema.Unknown, {\n decode: (text) => parseDotenvText(String(text)),\n encode: (value) => stringifyDotenvDocument(value as DotenvDocument),\n});\n\nexport function decodeDotenvText(text: string): DotenvDocument {\n return Schema.decodeUnknownSync(DotenvCodec)(text) as DotenvDocument;\n}\n\nexport function encodeDotenvText(document: DotenvDocument): string {\n return Schema.encodeSync(DotenvCodec)(document) as string;\n}\n\nfunction parseDotenvText(text: string): DotenvDocument {\n const lines = text.split(/\\r?\\n/);\n const entries: Array<DotenvDocument[\"entries\"][number]> = [];\n const prefix: Partial<Record<Bucket, string>> = {};\n let activeBucket: Bucket | undefined;\n let pendingDirectives: MutableDirectives = {};\n\n for (const [index, line] of lines.entries()) {\n const lineNumber = index + 1;\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n\n if (trimmed.startsWith(\"#\")) {\n const comment = trimmed.slice(1).trim();\n if (comment.startsWith(SENTINEL_DIRECTIVE_PREFIX)) {\n const directiveResult = parseDirectiveGroup(comment, lineNumber, pendingDirectives);\n if (directiveResult.sectionBucket) {\n activeBucket = directiveResult.sectionBucket;\n if (directiveResult.sectionPrefix) {\n prefix[directiveResult.sectionBucket] = directiveResult.sectionPrefix;\n }\n pendingDirectives = {};\n } else {\n pendingDirectives = directiveResult.directives;\n }\n }\n continue;\n }\n\n const assignmentMatch = KEY_ASSIGNMENT_PATTERN.exec(trimmed);\n if (!assignmentMatch) {\n throw new Error(`Malformed assignment at line ${lineNumber}: \"${line}\"`);\n }\n\n const key = assignmentMatch[1];\n const rightHandSide = assignmentMatch[2];\n const split = splitValueAndInlineComment(rightHandSide);\n const value = normalizeAssignedValue(split.value.trim());\n\n let directives = { ...pendingDirectives };\n if (split.comment) {\n const inlineComment = split.comment.trim();\n if (inlineComment.startsWith(SENTINEL_DIRECTIVE_PREFIX)) {\n const parsedInline = parseDirectiveGroup(inlineComment, lineNumber, directives);\n if (parsedInline.sectionBucket) {\n throw new Error(`Section directives are not allowed inline at line ${lineNumber}`);\n }\n directives = parsedInline.directives;\n }\n }\n\n entries.push({\n key,\n value,\n line: lineNumber,\n sectionBucket: activeBucket,\n directives,\n });\n pendingDirectives = {};\n }\n\n const hasPrefix = Object.values(prefix).some((v) => v && v.length > 0);\n return { entries, ...(hasPrefix ? { prefix } : {}) };\n}\n\nfunction stringifyDotenvDocument(document: DotenvDocument): string {\n if (!document || !Array.isArray(document.entries)) {\n throw new Error(\"Invalid dotenv document: expected an entries array\");\n }\n\n const grouped = {\n server: [] as Array<DotenvDocument[\"entries\"][number]>,\n client: [] as Array<DotenvDocument[\"entries\"][number]>,\n shared: [] as Array<DotenvDocument[\"entries\"][number]>,\n };\n\n const sortedEntries = [...document.entries].sort((left, right) => {\n if (left.line !== right.line) return left.line - right.line;\n return left.key.localeCompare(right.key);\n });\n\n for (const entry of sortedEntries) {\n const bucket: Bucket = entry.directives.bucket ?? entry.sectionBucket ?? \"server\";\n grouped[bucket].push(entry);\n }\n\n const lines: string[] = [];\n\n for (const bucket of BUCKETS) {\n const pfx = document.prefix?.[bucket];\n lines.push(pfx && pfx.length > 0 ? `# @${bucket} ${pfx}` : `# @${bucket}`);\n lines.push(\"\");\n\n for (const entry of grouped[bucket]) {\n const optional = entry.directives.optional ?? false;\n const redacted = entry.directives.redacted ?? false;\n const noDefault = entry.directives.hasDefault === false;\n\n if (entry.directives.type === \"stringEnum\" && entry.directives.stringEnumValues) {\n lines.push(`# @type enum ${entry.directives.stringEnumValues.join(\",\")}`);\n }\n if (optional) lines.push(\"# @optional\");\n if (noDefault) lines.push(\"# @no-default\");\n if (redacted) lines.push(\"# @redacted\");\n lines.push(`${entry.key}=${serializeEnvValue(entry.value)}`);\n lines.push(\"\");\n }\n }\n\n while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction splitValueAndInlineComment(value: string): { value: string; comment?: string } {\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let escaped = false;\n\n for (let index = 0; index < value.length; index += 1) {\n const char = value[index];\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n\n if (char === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n continue;\n }\n\n if (char === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n continue;\n }\n\n if (!inSingleQuote && !inDoubleQuote && char === \"#\") {\n return {\n value: value.slice(0, index).trimEnd(),\n comment: value.slice(index + 1),\n };\n }\n }\n\n return { value };\n}\n\nfunction parseDirectiveGroup(\n directiveText: string,\n lineNumber: number,\n base: MutableDirectives,\n): { directives: MutableDirectives; sectionBucket?: Bucket; sectionPrefix?: string } {\n const directives = { ...base };\n const tokens = directiveText\n .split(/\\s+(?=@)/g)\n .map((token) => token.trim())\n .filter(Boolean);\n\n let sectionBucket: Bucket | undefined;\n let sectionPrefix: string | undefined;\n for (const token of tokens) {\n const parsed = parseDirectiveToken(token, lineNumber);\n if (\"type\" in parsed) directives.type = parsed.type;\n if (\"optional\" in parsed) directives.optional = parsed.optional;\n if (\"hasDefault\" in parsed) directives.hasDefault = parsed.hasDefault;\n if (\"redacted\" in parsed) directives.redacted = parsed.redacted;\n if (\"bucket\" in parsed) directives.bucket = parsed.bucket;\n if (\"stringEnumValues\" in parsed) directives.stringEnumValues = parsed.stringEnumValues;\n if (\"sectionBucket\" in parsed) sectionBucket = parsed.sectionBucket;\n if (\"sectionPrefix\" in parsed) sectionPrefix = parsed.sectionPrefix;\n }\n\n return { directives, sectionBucket, sectionPrefix };\n}\n\nfunction parseDirectiveToken(\n token: string,\n lineNumber: number,\n): MutableDirectives & { sectionBucket?: Bucket; sectionPrefix?: string } {\n if (!token.startsWith(\"@\")) {\n throw new Error(`Malformed directive at line ${lineNumber}: \"${token}\"`);\n }\n\n const spaceIndex = token.indexOf(\" \");\n const name = (spaceIndex === -1 ? token.slice(1) : token.slice(1, spaceIndex)).trim();\n const value = (spaceIndex === -1 ? \"\" : token.slice(spaceIndex + 1)).trim();\n\n if (name === \"server\" || name === \"client\" || name === \"shared\") {\n return value.length > 0\n ? { sectionBucket: name, sectionPrefix: value }\n : { sectionBucket: name };\n }\n\n if (name === \"type\") {\n if (value.length === 0) {\n throw new Error(`Directive \"@type\" requires a value at line ${lineNumber}`);\n }\n if (value === \"enum\" || value.startsWith(\"enum \")) {\n const raw = value.slice(4).trim();\n if (raw.length === 0) {\n throw new Error(\n `Directive \"@type enum\" requires comma-separated values at line ${lineNumber}`,\n );\n }\n const stringEnumValues = raw\n .split(\",\")\n .map((v) => v.trim())\n .filter(Boolean);\n if (stringEnumValues.length === 0) {\n throw new Error(`Directive \"@type enum\" requires at least one value at line ${lineNumber}`);\n }\n return { type: \"stringEnum\", stringEnumValues };\n }\n return { type: parseSchemaKind(value, lineNumber) };\n }\n\n if (name === \"optional\") {\n return { optional: parseBooleanDirective(value || undefined, true) };\n }\n\n if (name === \"no-default\") {\n return { hasDefault: false };\n }\n\n if (name === \"redacted\") {\n return { redacted: parseBooleanDirective(value || undefined, true) };\n }\n\n if (name === \"bucket\") {\n if (value.length === 0) {\n throw new Error(`Directive \"@bucket\" requires a value at line ${lineNumber}`);\n }\n if (!isBucket(value)) {\n throw new Error(`Invalid bucket \"${value}\" at line ${lineNumber}`);\n }\n return { bucket: value };\n }\n\n throw new Error(`Unknown directive \"@${name}\" at line ${lineNumber}`);\n}\n\nfunction parseSchemaKind(rawValue: string, lineNumber: number): SchemaKind {\n const normalized = rawValue.trim().toLowerCase();\n const aliasMap: Record<string, SchemaKind> = {\n string: \"requiredString\",\n requiredstring: \"requiredString\",\n bool: \"boolean\",\n boolean: \"boolean\",\n int: \"integer\",\n integer: \"integer\",\n number: \"number\",\n port: \"port\",\n url: \"url\",\n postgresurl: \"postgresUrl\",\n redisurl: \"redisUrl\",\n mongourl: \"mongoUrl\",\n mysqlurl: \"mysqlUrl\",\n commaseparated: \"commaSeparated\",\n commaseparatednumbers: \"commaSeparatedNumbers\",\n commaseparatedurls: \"commaSeparatedUrls\",\n json: \"json\",\n \"json(schema.unknown)\": \"json\",\n };\n\n const resolved = aliasMap[normalized];\n if (!resolved || !SCHEMA_KINDS.includes(resolved)) {\n throw new Error(`Invalid @type value \"${rawValue}\" at line ${lineNumber}`);\n }\n\n return resolved;\n}\n\nfunction normalizeAssignedValue(value: string): string {\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n return value.slice(1, -1);\n }\n return value;\n}\n\nfunction serializeEnvValue(value: string): string {\n const literal = toEnvValueLiteral(value);\n if (literal.length === 0) return \"\";\n\n if (/[\\s#]/.test(literal)) {\n return JSON.stringify(literal);\n }\n\n return literal;\n}\n\nfunction isBucket(value: string): value is Bucket {\n return BUCKETS.includes(value as Bucket);\n}\n",
7
7
  "export function parseLiteral(input: string): unknown {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return \"\";\n }\n\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ) {\n try {\n return JSON.parse(trimmed.replace(/^'/, '\"').replace(/'$/, '\"'));\n } catch {\n return trimmed.slice(1, -1);\n }\n }\n\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n if (trimmed === \"null\") return null;\n\n if (/^[+-]?\\d+(?:\\.\\d+)?$/.test(trimmed)) {\n const value = Number(trimmed);\n if (!Number.isNaN(value)) {\n return value;\n }\n }\n\n if (\n (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n ) {\n try {\n return JSON.parse(trimmed);\n } catch {\n return trimmed;\n }\n }\n\n return trimmed;\n}\n\nexport function toCodeLiteral(value: unknown): string {\n if (typeof value === \"string\") return JSON.stringify(value);\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n return JSON.stringify(value);\n}\n\nexport function toDirectiveLiteral(value: unknown): string {\n if (value === undefined) return \"\";\n return toCodeLiteral(value);\n}\n\nexport function toEnvValueLiteral(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === null || value === undefined) return \"\";\n return JSON.stringify(value);\n}\n\nexport function parseBooleanDirective(value: string | undefined, defaultValue: boolean): boolean {\n if (value === undefined || value.length === 0) {\n return defaultValue;\n }\n\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") return true;\n if (normalized === \"false\") return false;\n throw new Error(`Invalid boolean directive value \"${value}\"`);\n}\n",
8
- "export const BUCKETS = [\"server\", \"client\", \"shared\"] as const;\nexport type Bucket = (typeof BUCKETS)[number];\n\nexport const SCHEMA_KINDS = [\n \"requiredString\",\n \"boolean\",\n \"integer\",\n \"number\",\n \"port\",\n \"url\",\n \"postgresUrl\",\n \"redisUrl\",\n \"mongoUrl\",\n \"mysqlUrl\",\n \"commaSeparated\",\n \"commaSeparatedNumbers\",\n \"commaSeparatedUrls\",\n \"json\",\n \"stringEnum\",\n] as const;\nexport type SchemaKind = (typeof SCHEMA_KINDS)[number];\n\nexport const FRAMEWORKS = [\"nextjs\", \"vite\", \"expo\", \"nuxt\", \"sveltekit\", \"astro\"] as const;\nexport type Framework = (typeof FRAMEWORKS)[number];\n\nexport interface PrefixConfig {\n readonly server: string;\n readonly client: string;\n readonly shared: string;\n}\n\nexport interface ParsedDirectives {\n readonly type?: SchemaKind;\n readonly optional?: boolean;\n readonly hasDefault?: boolean;\n readonly redacted?: boolean;\n readonly bucket?: Bucket;\n readonly stringEnumValues?: readonly string[];\n}\n\nexport interface DotenvAssignment {\n readonly key: string;\n readonly value: string;\n readonly line: number;\n readonly sectionBucket?: Bucket;\n readonly directives: ParsedDirectives;\n}\n\nexport interface DotenvDocument {\n readonly entries: ReadonlyArray<DotenvAssignment>;\n readonly prefix?: Partial<PrefixConfig>;\n}\n\nexport interface InferredVariable {\n readonly schemaKey: string;\n readonly runtimeKey: string;\n readonly bucket: Bucket;\n readonly kind: SchemaKind;\n readonly optional: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue?: unknown;\n readonly redacted: boolean;\n readonly sourceLine: number;\n readonly stringEnumValues?: readonly string[];\n}\n\nexport interface InferredModel {\n readonly prefix: PrefixConfig;\n readonly variables: ReadonlyArray<InferredVariable>;\n readonly runtimeEnv: Readonly<Record<string, string | undefined>>;\n}\n\n",
9
- "import { toCodeLiteral } from \"./literals.ts\";\nimport type { InferredModel, SchemaKind } from \"./types.ts\";\n\nconst BUCKET_ORDER = [\"server\", \"client\", \"shared\"] as const;\n\ntype Bucket = (typeof BUCKET_ORDER)[number];\n\ninterface RenderedVariable {\n readonly key: string;\n readonly expression: string;\n}\n\nexport function generateEnvTs(model: InferredModel): string {\n const sortedVariables = [...model.variables].sort((left, right) => {\n if (left.bucket !== right.bucket) return left.bucket.localeCompare(right.bucket);\n return left.schemaKey.localeCompare(right.schemaKey);\n });\n\n const grouped: Record<Bucket, RenderedVariable[]> = {\n server: [],\n client: [],\n shared: [],\n };\n\n const helperImports = new Set<string>([\"createEnv\"]);\n let needsSchemaImport = false;\n\n for (const variable of sortedVariables) {\n const rendered = renderSchemaExpression(variable.kind, {\n optional: variable.optional,\n hasDefault: variable.hasDefault,\n defaultValue: variable.defaultValue,\n redacted: variable.redacted,\n stringEnumValues: variable.stringEnumValues,\n });\n for (const helper of rendered.helpers) {\n helperImports.add(helper);\n }\n needsSchemaImport ||= rendered.needsSchemaImport;\n\n grouped[variable.bucket].push({\n key: quoteObjectKey(variable.schemaKey),\n expression: rendered.expression,\n });\n }\n\n const importLine = `import { ${[...helperImports].sort().join(\", \")} } from \"@ayronforge/envil\";`;\n const schemaImportLine = needsSchemaImport ? `import { Schema } from \"effect\";` : \"\";\n\n const sourceLines = [\n importLine,\n schemaImportLine,\n \"\",\n \"export const envDefinition = {\",\n \" prefix: {\",\n ` server: ${JSON.stringify(model.prefix.server)},`,\n ` client: ${JSON.stringify(model.prefix.client)},`,\n ` shared: ${JSON.stringify(model.prefix.shared)},`,\n \" },\",\n \" server: {\",\n ...renderBucketEntries(grouped.server),\n \" },\",\n \" client: {\",\n ...renderBucketEntries(grouped.client),\n \" },\",\n \" shared: {\",\n ...renderBucketEntries(grouped.shared),\n \" },\",\n \"} as const;\",\n \"\",\n \"export const env = createEnv(envDefinition);\",\n \"\",\n ];\n\n return sourceLines.filter((line, index, all) => line !== \"\" || all[index - 1] !== \"\").join(\"\\n\");\n}\n\nfunction renderBucketEntries(entries: ReadonlyArray<RenderedVariable>): string[] {\n if (entries.length === 0) {\n return [];\n }\n\n return entries.map((entry) => ` ${entry.key}: ${entry.expression},`);\n}\n\nfunction renderSchemaExpression(\n kind: SchemaKind,\n wrappers: {\n optional: boolean;\n hasDefault: boolean;\n defaultValue: unknown;\n redacted: boolean;\n stringEnumValues?: readonly string[];\n },\n): { expression: string; helpers: Set<string>; needsSchemaImport: boolean } {\n let expression = kind === \"stringEnum\" && wrappers.stringEnumValues\n ? `stringEnum([${wrappers.stringEnumValues.map((v) => JSON.stringify(v)).join(\", \")}])`\n : (SPECIAL_EXPRESSIONS[kind] ?? kind);\n const helpers = new Set<string>([kind]);\n const needsSchemaImport = kind === \"json\";\n\n if (wrappers.optional && !wrappers.hasDefault) {\n expression = `optional(${expression})`;\n helpers.add(\"optional\");\n }\n\n if (wrappers.hasDefault) {\n expression = `withDefault(${expression}, ${toCodeLiteral(wrappers.defaultValue)})`;\n helpers.add(\"withDefault\");\n }\n\n if (wrappers.redacted) {\n expression = `redacted(${expression})`;\n helpers.add(\"redacted\");\n }\n\n return { expression, helpers, needsSchemaImport };\n}\n\nconst SPECIAL_EXPRESSIONS: Partial<Record<SchemaKind, string>> = {\n json: \"json(Schema.Unknown)\",\n stringEnum: \"stringEnum([])\",\n};\n\nfunction quoteObjectKey(value: string): string {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(value) ? value : JSON.stringify(value);\n}\n",
8
+ "export const BUCKETS = [\"server\", \"client\", \"shared\"] as const;\nexport type Bucket = (typeof BUCKETS)[number];\n\nexport const SCHEMA_KINDS = [\n \"requiredString\",\n \"boolean\",\n \"integer\",\n \"number\",\n \"port\",\n \"url\",\n \"postgresUrl\",\n \"redisUrl\",\n \"mongoUrl\",\n \"mysqlUrl\",\n \"commaSeparated\",\n \"commaSeparatedNumbers\",\n \"commaSeparatedUrls\",\n \"json\",\n \"stringEnum\",\n] as const;\nexport type SchemaKind = (typeof SCHEMA_KINDS)[number];\n\nexport const FRAMEWORKS = [\"nextjs\", \"vite\", \"expo\", \"nuxt\", \"sveltekit\", \"astro\"] as const;\nexport type Framework = (typeof FRAMEWORKS)[number];\n\nexport interface PrefixConfig {\n readonly server: string;\n readonly client: string;\n readonly shared: string;\n}\n\nexport interface ParsedDirectives {\n readonly type?: SchemaKind;\n readonly optional?: boolean;\n readonly hasDefault?: boolean;\n readonly redacted?: boolean;\n readonly bucket?: Bucket;\n readonly stringEnumValues?: readonly string[];\n}\n\nexport interface DotenvAssignment {\n readonly key: string;\n readonly value: string;\n readonly line: number;\n readonly sectionBucket?: Bucket;\n readonly directives: ParsedDirectives;\n}\n\nexport interface DotenvDocument {\n readonly entries: ReadonlyArray<DotenvAssignment>;\n readonly prefix?: Partial<PrefixConfig>;\n}\n\nexport interface InferredVariable {\n readonly schemaKey: string;\n readonly runtimeKey: string;\n readonly bucket: Bucket;\n readonly kind: SchemaKind;\n readonly optional: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue?: unknown;\n readonly redacted: boolean;\n readonly sourceLine: number;\n readonly stringEnumValues?: readonly string[];\n}\n\nexport interface InferredModel {\n readonly prefix: PrefixConfig;\n readonly variables: ReadonlyArray<InferredVariable>;\n readonly runtimeEnv: Readonly<Record<string, string | undefined>>;\n}\n",
9
+ "import { toCodeLiteral } from \"./literals.ts\";\nimport type { InferredModel, SchemaKind } from \"./types.ts\";\n\nconst BUCKET_ORDER = [\"server\", \"client\", \"shared\"] as const;\n\ntype Bucket = (typeof BUCKET_ORDER)[number];\n\ninterface RenderedVariable {\n readonly key: string;\n readonly expression: string;\n}\n\nexport function generateEnvTs(model: InferredModel): string {\n const sortedVariables = [...model.variables].sort((left, right) => {\n if (left.bucket !== right.bucket) return left.bucket.localeCompare(right.bucket);\n return left.schemaKey.localeCompare(right.schemaKey);\n });\n\n const grouped: Record<Bucket, RenderedVariable[]> = {\n server: [],\n client: [],\n shared: [],\n };\n\n const helperImports = new Set<string>([\"createEnv\"]);\n let needsSchemaImport = false;\n\n for (const variable of sortedVariables) {\n const rendered = renderSchemaExpression(variable.kind, {\n optional: variable.optional,\n hasDefault: variable.hasDefault,\n defaultValue: variable.defaultValue,\n redacted: variable.redacted,\n stringEnumValues: variable.stringEnumValues,\n });\n for (const helper of rendered.helpers) {\n helperImports.add(helper);\n }\n needsSchemaImport ||= rendered.needsSchemaImport;\n\n grouped[variable.bucket].push({\n key: quoteObjectKey(variable.schemaKey),\n expression: rendered.expression,\n });\n }\n\n const importLine = `import { ${[...helperImports].sort().join(\", \")} } from \"@ayronforge/envil\";`;\n const schemaImportLine = needsSchemaImport ? `import { Schema } from \"effect\";` : \"\";\n\n const sourceLines = [\n importLine,\n schemaImportLine,\n \"\",\n \"export const envDefinition = {\",\n \" prefix: {\",\n ` server: ${JSON.stringify(model.prefix.server)},`,\n ` client: ${JSON.stringify(model.prefix.client)},`,\n ` shared: ${JSON.stringify(model.prefix.shared)},`,\n \" },\",\n \" server: {\",\n ...renderBucketEntries(grouped.server),\n \" },\",\n \" client: {\",\n ...renderBucketEntries(grouped.client),\n \" },\",\n \" shared: {\",\n ...renderBucketEntries(grouped.shared),\n \" },\",\n \"} as const;\",\n \"\",\n \"export const env = createEnv(envDefinition);\",\n \"\",\n ];\n\n return sourceLines.filter((line, index, all) => line !== \"\" || all[index - 1] !== \"\").join(\"\\n\");\n}\n\nfunction renderBucketEntries(entries: ReadonlyArray<RenderedVariable>): string[] {\n if (entries.length === 0) {\n return [];\n }\n\n return entries.map((entry) => ` ${entry.key}: ${entry.expression},`);\n}\n\nfunction renderSchemaExpression(\n kind: SchemaKind,\n wrappers: {\n optional: boolean;\n hasDefault: boolean;\n defaultValue: unknown;\n redacted: boolean;\n stringEnumValues?: readonly string[];\n },\n): { expression: string; helpers: Set<string>; needsSchemaImport: boolean } {\n let expression =\n kind === \"stringEnum\" && wrappers.stringEnumValues\n ? `stringEnum([${wrappers.stringEnumValues.map((v) => JSON.stringify(v)).join(\", \")}])`\n : (SPECIAL_EXPRESSIONS[kind] ?? kind);\n const helpers = new Set<string>([kind]);\n const needsSchemaImport = kind === \"json\";\n\n if (wrappers.optional && !wrappers.hasDefault) {\n expression = `optional(${expression})`;\n helpers.add(\"optional\");\n }\n\n if (wrappers.hasDefault) {\n expression = `withDefault(${expression}, ${toCodeLiteral(wrappers.defaultValue)})`;\n helpers.add(\"withDefault\");\n }\n\n if (wrappers.redacted) {\n expression = `redacted(${expression})`;\n helpers.add(\"redacted\");\n }\n\n return { expression, helpers, needsSchemaImport };\n}\n\nconst SPECIAL_EXPRESSIONS: Partial<Record<SchemaKind, string>> = {\n json: \"json(Schema.Unknown)\",\n stringEnum: \"stringEnum([])\",\n};\n\nfunction quoteObjectKey(value: string): string {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(value) ? value : JSON.stringify(value);\n}\n",
10
10
  "import type {\n DotenvDocument,\n InferredModel,\n InferredVariable,\n PrefixConfig,\n SchemaKind,\n} from \"./types.ts\";\n\ninterface InferOptions {\n readonly prefix: PrefixConfig;\n}\n\nconst STRING_KINDS = new Set<SchemaKind>([\n \"requiredString\",\n \"url\",\n \"postgresUrl\",\n \"redisUrl\",\n \"mongoUrl\",\n \"mysqlUrl\",\n]);\n\nconst BUCKET_ORDER: Record<InferredVariable[\"bucket\"], number> = {\n server: 0,\n client: 1,\n shared: 2,\n};\n\nexport function inferModel(document: DotenvDocument, options: InferOptions): InferredModel {\n const runtimeEnv: Record<string, string | undefined> = {};\n const inferredVariables: InferredVariable[] = [];\n\n for (const entry of document.entries) {\n runtimeEnv[entry.key] = entry.value;\n const { bucket, schemaKey } = resolveBucketAndSchemaKey(entry.key, options.prefix, {\n explicitBucket: entry.directives.bucket,\n sectionBucket: entry.sectionBucket,\n });\n\n const resolvedKind = entry.directives.type ?? inferSchemaKind(entry.key, entry.value);\n const hasValue = entry.value.trim().length > 0;\n const hasDefault = entry.directives.hasDefault === false ? false : hasValue;\n const defaultValue = hasDefault ? normalizeDefaultValue(resolvedKind, entry.value) : undefined;\n const optionalFlag = entry.directives.optional ?? false;\n const redactedFlag = entry.directives.redacted ?? false;\n\n const duplicate = inferredVariables.find(\n (candidate) => candidate.bucket === bucket && candidate.schemaKey === schemaKey,\n );\n if (duplicate) {\n throw new Error(\n `Duplicate schema key \"${schemaKey}\" in bucket \"${bucket}\" at line ${entry.line}.`,\n );\n }\n\n inferredVariables.push({\n schemaKey,\n runtimeKey: entry.key,\n bucket,\n kind: resolvedKind,\n optional: optionalFlag,\n hasDefault,\n defaultValue,\n redacted: redactedFlag,\n sourceLine: entry.line,\n stringEnumValues: entry.directives.stringEnumValues,\n });\n }\n\n inferredVariables.sort((left, right) => {\n const bucketOrder = BUCKET_ORDER[left.bucket] - BUCKET_ORDER[right.bucket];\n if (bucketOrder !== 0) return bucketOrder;\n return left.schemaKey.localeCompare(right.schemaKey);\n });\n\n return {\n prefix: options.prefix,\n variables: inferredVariables,\n runtimeEnv,\n };\n}\n\nfunction resolveBucketAndSchemaKey(\n runtimeKey: string,\n prefix: PrefixConfig,\n options: {\n explicitBucket?: InferredVariable[\"bucket\"];\n sectionBucket?: InferredVariable[\"bucket\"];\n },\n): { bucket: InferredVariable[\"bucket\"]; schemaKey: string } {\n const explicitBucket = options.explicitBucket ?? options.sectionBucket;\n if (explicitBucket) {\n return {\n bucket: explicitBucket,\n schemaKey: stripPrefix(runtimeKey, prefix[explicitBucket]),\n };\n }\n\n const inferredFromPrefix = inferBucketFromPrefix(runtimeKey, prefix);\n if (inferredFromPrefix) {\n return inferredFromPrefix;\n }\n\n return {\n bucket: \"server\",\n schemaKey: runtimeKey,\n };\n}\n\nfunction inferBucketFromPrefix(\n runtimeKey: string,\n prefix: PrefixConfig,\n): { bucket: InferredVariable[\"bucket\"]; schemaKey: string } | undefined {\n const candidates = [\n { bucket: \"client\", prefix: prefix.client },\n { bucket: \"server\", prefix: prefix.server },\n { bucket: \"shared\", prefix: prefix.shared },\n ]\n .filter((candidate) => candidate.prefix.length > 0 && runtimeKey.startsWith(candidate.prefix))\n .sort((left, right) => right.prefix.length - left.prefix.length) as Array<{\n bucket: InferredVariable[\"bucket\"];\n prefix: string;\n }>;\n\n const best = candidates[0];\n if (!best) return undefined;\n\n return {\n bucket: best.bucket,\n schemaKey: stripPrefix(runtimeKey, best.prefix),\n };\n}\n\nfunction stripPrefix(key: string, prefix: string): string {\n if (!prefix || !key.startsWith(prefix)) {\n return key;\n }\n\n const stripped = key.slice(prefix.length);\n return stripped.length > 0 ? stripped : key;\n}\n\nfunction inferSchemaKind(key: string, rawValue: string): SchemaKind {\n const value = rawValue.trim();\n const lowerValue = value.toLowerCase();\n const upperKey = key.toUpperCase();\n\n if (isJsonCandidate(value)) {\n return \"json\";\n }\n\n if (lowerValue.startsWith(\"postgres://\") || lowerValue.startsWith(\"postgresql://\")) {\n return \"postgresUrl\";\n }\n if (lowerValue.startsWith(\"redis://\") || lowerValue.startsWith(\"rediss://\")) {\n return \"redisUrl\";\n }\n if (lowerValue.startsWith(\"mongodb://\") || lowerValue.startsWith(\"mongodb+srv://\")) {\n return \"mongoUrl\";\n }\n if (lowerValue.startsWith(\"mysql://\") || lowerValue.startsWith(\"mysqls://\")) {\n return \"mysqlUrl\";\n }\n\n if (isCommaSeparatedCandidate(value)) {\n const parts = splitCommaValues(value);\n if (parts.length > 0 && parts.every((part) => isIntegerString(part) || isNumberString(part))) {\n return \"commaSeparatedNumbers\";\n }\n if (parts.length > 0 && parts.every((part) => isHttpUrl(part))) {\n return \"commaSeparatedUrls\";\n }\n return \"commaSeparated\";\n }\n\n if (isHttpUrl(value)) {\n return \"url\";\n }\n\n if (isBooleanString(lowerValue)) {\n return \"boolean\";\n }\n\n if (isIntegerString(value)) {\n const numberValue = Number(value);\n if (upperKey.includes(\"PORT\") && numberValue >= 1 && numberValue <= 65535) {\n return \"port\";\n }\n return \"integer\";\n }\n\n if (isNumberString(value)) {\n return \"number\";\n }\n\n return \"requiredString\";\n}\n\nfunction isBooleanString(value: string): boolean {\n return value === \"true\" || value === \"false\" || value === \"1\" || value === \"0\";\n}\n\nfunction isIntegerString(value: string): boolean {\n return /^[+-]?\\d+$/.test(value);\n}\n\nfunction isNumberString(value: string): boolean {\n return /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)$/.test(value);\n}\n\nfunction isHttpUrl(value: string): boolean {\n try {\n const parsed = new URL(value);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\nfunction isCommaSeparatedCandidate(value: string): boolean {\n return value.includes(\",\") && !value.startsWith(\"{\") && !value.startsWith(\"[\");\n}\n\nfunction splitCommaValues(value: string): string[] {\n return value\n .split(\",\")\n .map((part) => part.trim())\n .filter((part) => part.length > 0);\n}\n\nfunction isJsonCandidate(value: string): boolean {\n const trimmed = value.trim();\n if (\n !(\n (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n )\n ) {\n return false;\n }\n\n try {\n JSON.parse(trimmed);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction normalizeDefaultValue(kind: SchemaKind, value: unknown): unknown {\n if (kind === \"boolean\") {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\") {\n const normalized = value.toLowerCase();\n return normalized === \"true\" || normalized === \"1\";\n }\n return Boolean(value);\n }\n\n if (kind === \"integer\") {\n const numeric = Number(value);\n if (!Number.isFinite(numeric)) return 0;\n return Math.trunc(numeric);\n }\n\n if (kind === \"number\") {\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : 0;\n }\n\n if (kind === \"port\") {\n const numeric = Math.trunc(Number(value));\n if (Number.isFinite(numeric) && numeric >= 1 && numeric <= 65535) {\n return numeric;\n }\n return 3000;\n }\n\n if (kind === \"commaSeparated\") {\n if (Array.isArray(value)) {\n return value.map((item) => String(item));\n }\n if (typeof value === \"string\") {\n return splitCommaValues(value);\n }\n return [String(value ?? \"\")];\n }\n\n if (kind === \"commaSeparatedNumbers\") {\n if (Array.isArray(value)) {\n return value.map((item) => Number(item)).filter((item) => Number.isFinite(item));\n }\n if (typeof value === \"string\") {\n return splitCommaValues(value)\n .map((item) => Number(item))\n .filter((item) => Number.isFinite(item));\n }\n const numeric = Number(value);\n return Number.isFinite(numeric) ? [numeric] : [0];\n }\n\n if (kind === \"commaSeparatedUrls\") {\n if (Array.isArray(value)) {\n return value.map((item) => String(item));\n }\n if (typeof value === \"string\") {\n return splitCommaValues(value);\n }\n return [String(value ?? \"https://example.com\")];\n }\n\n if (kind === \"json\") {\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch {\n return {};\n }\n }\n return value ?? {};\n }\n\n if (kind === \"stringEnum\") {\n return String(value ?? \"\");\n }\n\n if (STRING_KINDS.has(kind)) {\n const stringValue = String(value ?? \"\");\n return stringValue.length > 0 ? stringValue : \"value\";\n }\n\n return value;\n}\n",
11
- "import { Option, Redacted, Schema, SchemaAST } from \"effect\";\n\nimport { encodeDotenvText } from \"./cli/dotenv-codec.ts\";\nimport type { Bucket, SchemaKind } from \"./cli/types.ts\";\nimport {\n DEFAULT_VALUE_ANNOTATION,\n OPTIONAL_ANNOTATION,\n PLACEHOLDER_ANNOTATION,\n REDACTED_ANNOTATION,\n SCHEMA_KIND_ANNOTATION,\n STRING_ENUM_VALUES_ANNOTATION,\n} from \"./schemas.ts\";\nimport type { SchemaDict } from \"./types.ts\";\n\nconst BUCKETS = [\"server\", \"client\", \"shared\"] as const;\n\ninterface EnvDefinition {\n prefix?: { server?: string; client?: string; shared?: string };\n server?: SchemaDict;\n client?: SchemaDict;\n shared?: SchemaDict;\n}\n\nexport interface ExaminedSchema {\n readonly kind: SchemaKind | undefined;\n readonly placeholder: string | undefined;\n readonly optional: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue: unknown;\n readonly redacted: boolean;\n readonly stringEnumValues?: readonly string[];\n}\n\nfunction getAnn<T>(ast: SchemaAST.Annotated, key: symbol): T | undefined {\n return Option.getOrUndefined(SchemaAST.getAnnotation<T>(ast, key));\n}\n\nexport function examineSchema(schema: Schema.Schema.Any): ExaminedSchema {\n let ast: SchemaAST.AST = schema.ast;\n let isRedacted = false;\n let isOptional = false;\n let hasDefault = false;\n let defaultValue: unknown = undefined;\n\n // Peel redacted layer (outermost Transformation with REDACTED_ANNOTATION)\n if (SchemaAST.isTransformation(ast) && getAnn<boolean>(ast, REDACTED_ANNOTATION)) {\n isRedacted = true;\n ast = ast.from;\n }\n\n // Peel withDefault layer (Transformation with DEFAULT_VALUE_ANNOTATION)\n if (SchemaAST.isTransformation(ast) && getAnn(ast, DEFAULT_VALUE_ANNOTATION) !== undefined) {\n hasDefault = true;\n defaultValue = getAnn(ast, DEFAULT_VALUE_ANNOTATION);\n // withDefault wraps UndefinedOr(schema) -> schema, `from` is the Union\n const fromAst = ast.from;\n if (SchemaAST.isUnion(fromAst)) {\n const nonUndefined = fromAst.types.find((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined) ast = nonUndefined;\n }\n }\n\n // Peel optional layer (Union with OPTIONAL_ANNOTATION)\n if (SchemaAST.isUnion(ast) && getAnn<boolean>(ast, OPTIONAL_ANNOTATION)) {\n isOptional = true;\n const nonUndefined = ast.types.find((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined) ast = nonUndefined;\n }\n\n const kind = getAnn<SchemaKind>(ast, SCHEMA_KIND_ANNOTATION);\n const placeholder = getAnn<string>(ast, PLACEHOLDER_ANNOTATION);\n const stringEnumValues = kind === \"stringEnum\"\n ? getAnn<readonly string[]>(ast, STRING_ENUM_VALUES_ANNOTATION)\n : undefined;\n\n return { kind, placeholder, optional: isOptional, hasDefault, defaultValue, redacted: isRedacted, stringEnumValues };\n}\n\nexport function buildEnvExample(definition: EnvDefinition): string {\n const prefix = {\n server: definition.prefix?.server ?? \"\",\n client: definition.prefix?.client ?? \"\",\n shared: definition.prefix?.shared ?? \"\",\n };\n\n const entries = [];\n let line = 1;\n\n for (const bucket of BUCKETS) {\n const schemas = definition[bucket] ?? {};\n const keys = Object.keys(schemas).sort();\n\n for (const key of keys) {\n const schema = schemas[key];\n const examined = examineSchema(schema);\n const runtimeKey = `${prefix[bucket]}${key}`;\n\n let value: string;\n if (examined.hasDefault) {\n value = encodeDefault(schema, examined);\n } else {\n value = examined.placeholder ?? \"CHANGE_ME\";\n }\n\n entries.push({\n key: runtimeKey,\n value,\n line,\n sectionBucket: bucket as Bucket,\n directives: {\n type: examined.kind,\n bucket: bucket as Bucket,\n optional: examined.optional,\n hasDefault: examined.hasDefault,\n redacted: examined.redacted,\n stringEnumValues: examined.stringEnumValues,\n },\n });\n line += 1;\n }\n }\n\n const hasPrefix = Object.values(prefix).some((v) => v.length > 0);\n return encodeDotenvText({ entries, ...(hasPrefix ? { prefix } : {}) });\n}\n\nfunction encodeDefault(schema: Schema.Schema.Any, examined: ExaminedSchema): string {\n // Encode the default value back to its string representation using the\n // schema's encode direction. For redacted schemas we wrap in Redacted first.\n try {\n let valueToEncode = examined.defaultValue;\n if (examined.redacted) {\n valueToEncode = Redacted.make(valueToEncode);\n }\n const encoded = Schema.encodeSync(schema as Schema.Schema<unknown, unknown, never>)(valueToEncode);\n return String(encoded ?? \"\");\n } catch {\n return stringifyDefault(examined);\n }\n}\n\nfunction stringifyDefault(examined: ExaminedSchema): string {\n const val = examined.defaultValue;\n if (val === undefined || val === null) return \"\";\n if (Array.isArray(val)) return val.map(String).join(\",\");\n if (typeof val === \"object\") return JSON.stringify(val);\n return String(val);\n}\n",
12
- "import { Function, Schema } from \"effect\";\n\nexport const DEFAULT_VALUE_ANNOTATION = Symbol.for(\"@ayronforge/envil/default-value\");\nexport const SCHEMA_KIND_ANNOTATION = Symbol.for(\"@ayronforge/envil/schema-kind\");\nexport const PLACEHOLDER_ANNOTATION = Symbol.for(\"@ayronforge/envil/placeholder\");\nexport const OPTIONAL_ANNOTATION = Symbol.for(\"@ayronforge/envil/optional\");\nexport const REDACTED_ANNOTATION = Symbol.for(\"@ayronforge/envil/redacted\");\nexport const STRING_ENUM_VALUES_ANNOTATION = Symbol.for(\"@ayronforge/envil/string-enum-values\");\n\nexport const withDefault: {\n <S extends Schema.Schema.Any>(\n defaultValue: NonNullable<Schema.Schema.Type<S>>,\n ): (\n schema: S,\n ) => Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n <S extends Schema.Schema.Any>(\n schema: S,\n defaultValue: NonNullable<Schema.Schema.Type<S>>,\n ): Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n} = Function.dual(\n 2,\n <S extends Schema.Schema.Any>(schema: S, defaultValue: NonNullable<Schema.Schema.Type<S>>) => {\n const withDefaultSchema = Schema.transform(\n Schema.UndefinedOr(schema),\n Schema.typeSchema(schema),\n {\n decode: (value) => value ?? defaultValue,\n encode: (value) => value,\n },\n ) as Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n\n return withDefaultSchema.annotations({\n [DEFAULT_VALUE_ANNOTATION]: defaultValue,\n } as Record<PropertyKey, unknown>);\n },\n);\n\nexport const optional = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.UndefinedOr(schema).annotations({\n [OPTIONAL_ANNOTATION]: true,\n } as Record<PropertyKey, unknown>);\n\nexport const redacted = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.Redacted(schema).annotations({\n [REDACTED_ANNOTATION]: true,\n } as Record<PropertyKey, unknown>);\n\nexport const requiredString = Schema.String.pipe(Schema.minLength(1)).annotations({\n identifier: \"RequiredString\",\n [SCHEMA_KIND_ANNOTATION]: \"requiredString\",\n [PLACEHOLDER_ANNOTATION]: \"CHANGE_ME\",\n} as Record<PropertyKey, unknown>);\n\nexport const optionalString = Schema.UndefinedOr(Schema.String);\n\nexport const boolean = Schema.transform(\n Schema.String.pipe(\n Schema.filter((s) => [\"true\", \"false\", \"1\", \"0\"].includes(s.toLowerCase()), {\n identifier: \"BooleanString\",\n message: () => \"Expected 'true', 'false', '1', or '0'\",\n }),\n ),\n Schema.Boolean,\n {\n decode: (s) => s.toLowerCase() === \"true\" || s === \"1\",\n encode: (b) => (b ? \"true\" : \"false\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"boolean\",\n [PLACEHOLDER_ANNOTATION]: \"true\",\n} as Record<PropertyKey, unknown>);\n\nexport const integer = Schema.NumberFromString.pipe(Schema.int()).annotations({\n identifier: \"Integer\",\n [SCHEMA_KIND_ANNOTATION]: \"integer\",\n [PLACEHOLDER_ANNOTATION]: \"123\",\n} as Record<PropertyKey, unknown>);\n\nexport const number = Schema.NumberFromString.annotations({\n identifier: \"Number\",\n [SCHEMA_KIND_ANNOTATION]: \"number\",\n [PLACEHOLDER_ANNOTATION]: \"3.14\",\n} as Record<PropertyKey, unknown>);\n\nexport const positiveNumber = Schema.NumberFromString.pipe(Schema.positive()).annotations({\n identifier: \"PositiveNumber\",\n});\n\nexport const nonNegativeNumber = Schema.NumberFromString.pipe(Schema.nonNegative()).annotations({\n identifier: \"NonNegativeNumber\",\n});\n\nexport const port = Schema.NumberFromString.pipe(\n Schema.int(),\n Schema.between(1, 65535),\n).annotations({\n identifier: \"Port\",\n [SCHEMA_KIND_ANNOTATION]: \"port\",\n [PLACEHOLDER_ANNOTATION]: \"3000\",\n} as Record<PropertyKey, unknown>);\n\nexport const url = Schema.String.pipe(\n Schema.filter(\n (s) => {\n try {\n new URL(s);\n return s.startsWith(\"http://\") || s.startsWith(\"https://\");\n } catch {\n return false;\n }\n },\n { identifier: \"Url\", message: () => \"Expected a valid HTTP or HTTPS URL\" },\n ),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"url\",\n [PLACEHOLDER_ANNOTATION]: \"https://example.com\",\n} as Record<PropertyKey, unknown>);\nexport type Url = Schema.Schema.Type<typeof url>;\n\nexport const postgresUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"postgres://\") || s.startsWith(\"postgresql://\"), {\n identifier: \"PostgresUrl\",\n message: () => \"Expected a valid PostgreSQL connection URL\",\n }),\n Schema.pattern(/^(postgres|postgresql):\\/\\/[^:]+:[^@]+@[^:]+:\\d+\\/.+$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"postgresUrl\",\n [PLACEHOLDER_ANNOTATION]: \"postgres://user:pass@localhost:5432/app\",\n} as Record<PropertyKey, unknown>);\nexport type PostgresUrl = Schema.Schema.Type<typeof postgresUrl>;\n\nexport const redisUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"redis://\") || s.startsWith(\"rediss://\"), {\n identifier: \"RedisUrl\",\n message: () => \"Expected a valid Redis connection URL\",\n }),\n Schema.pattern(/^rediss?:\\/\\/(?:[^:]+:[^@]+@)?[^:]+(?::\\d+)?(?:\\/\\d+)?$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"redisUrl\",\n [PLACEHOLDER_ANNOTATION]: \"redis://localhost:6379\",\n} as Record<PropertyKey, unknown>);\nexport type RedisUrl = Schema.Schema.Type<typeof redisUrl>;\n\nexport const mongoUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"mongodb://\") || s.startsWith(\"mongodb+srv://\"), {\n identifier: \"MongoUrl\",\n message: () => \"Expected a valid MongoDB connection URL\",\n }),\n Schema.pattern(/^mongodb(\\+srv)?:\\/\\/(?:[^:]+:[^@]+@)?[^/]+(?:\\/[^?]*)?(?:\\?.*)?$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"mongoUrl\",\n [PLACEHOLDER_ANNOTATION]: \"mongodb://localhost:27017/app\",\n} as Record<PropertyKey, unknown>);\nexport type MongoUrl = Schema.Schema.Type<typeof mongoUrl>;\n\nexport const mysqlUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"mysql://\") || s.startsWith(\"mysqls://\"), {\n identifier: \"MysqlUrl\",\n message: () => \"Expected a valid MySQL connection URL\",\n }),\n Schema.pattern(/^mysqls?:\\/\\/[^:]+:[^@]+@[^:]+:\\d+\\/.+$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"mysqlUrl\",\n [PLACEHOLDER_ANNOTATION]: \"mysql://user:pass@localhost:3306/app\",\n} as Record<PropertyKey, unknown>);\nexport type MysqlUrl = Schema.Schema.Type<typeof mysqlUrl>;\n\nexport const commaSeparated = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(Schema.String)),\n {\n decode: (s) => s.split(\",\").map((x) => x.trim()),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparated\",\n [PLACEHOLDER_ANNOTATION]: \"alpha,beta,gamma\",\n} as Record<PropertyKey, unknown>);\n\nexport const commaSeparatedNumbers = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(Schema.Number)),\n {\n decode: (s) =>\n s.split(\",\").map((x) => {\n const n = Number(x.trim());\n if (Number.isNaN(n)) throw new Error(`\"${x.trim()}\" is not a valid number`);\n return n;\n }),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparatedNumbers\",\n [PLACEHOLDER_ANNOTATION]: \"1,2,3\",\n} as Record<PropertyKey, unknown>);\n\nexport const commaSeparatedUrls = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(url)),\n {\n decode: (s) => s.split(\",\").map((x) => Schema.decodeUnknownSync(url)(x.trim())),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparatedUrls\",\n [PLACEHOLDER_ANNOTATION]: \"https://one.example.com,https://two.example.com\",\n} as Record<PropertyKey, unknown>);\n\nexport const stringEnum = <T extends readonly [string, ...string[]]>(values: T) =>\n Schema.Literal(...values).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"stringEnum\",\n [STRING_ENUM_VALUES_ANNOTATION]: values,\n [PLACEHOLDER_ANNOTATION]: values[0],\n } as Record<PropertyKey, unknown>);\n\nexport const json = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.parseJson(schema).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"json\",\n [PLACEHOLDER_ANNOTATION]: '{\"key\":\"value\"}',\n } as Record<PropertyKey, unknown>);\n",
13
- "#!/usr/bin/env node\n\nimport { ensureWritableTarget, readTextFileOrThrow, writeFileAtomic } from \"./cli/fs-utils.ts\";\nimport {\n decodeDotenvText,\n generateEnvTs,\n getDefaultEnvOutputPath,\n getDefaultExampleInputPath,\n inferModel,\n resolveFromCwd,\n} from \"./cli/index.ts\";\nimport { FRAMEWORKS, type Framework, type PrefixConfig } from \"./cli/types.ts\";\nimport { buildEnvExample } from \"./introspect.ts\";\n\ninterface CliIO {\n cwd: () => string;\n stdout: (message: string) => void;\n stderr: (message: string) => void;\n}\n\ninterface AddEnvOptions {\n input?: string;\n output?: string;\n framework?: Framework;\n clientPrefix?: string;\n serverPrefix?: string;\n sharedPrefix?: string;\n force: boolean;\n help: boolean;\n}\n\ninterface AddExampleOptions {\n input?: string;\n output?: string;\n force: boolean;\n help: boolean;\n}\n\nconst DEFAULT_IO: CliIO = {\n cwd: () => process.cwd(),\n stdout: (message) => process.stdout.write(message),\n stderr: (message) => process.stderr.write(message),\n};\n\nconst FRAMEWORK_PREFIXES: Record<Framework, PrefixConfig> = {\n nextjs: { server: \"\", client: \"NEXT_PUBLIC_\", shared: \"\" },\n vite: { server: \"\", client: \"VITE_\", shared: \"\" },\n expo: { server: \"\", client: \"EXPO_PUBLIC_\", shared: \"\" },\n nuxt: { server: \"\", client: \"NUXT_PUBLIC_\", shared: \"\" },\n sveltekit: { server: \"\", client: \"PUBLIC_\", shared: \"\" },\n astro: { server: \"\", client: \"PUBLIC_\", shared: \"\" },\n};\n\nexport async function runCli(argv: string[], io: Partial<CliIO> = {}): Promise<number> {\n const runtimeIO: CliIO = {\n cwd: io.cwd ?? DEFAULT_IO.cwd,\n stdout: io.stdout ?? DEFAULT_IO.stdout,\n stderr: io.stderr ?? DEFAULT_IO.stderr,\n };\n\n try {\n if (argv.length === 0 || argv[0] === \"--help\" || argv[0] === \"-h\") {\n runtimeIO.stdout(getRootHelpText());\n return 0;\n }\n\n if (argv[0] !== \"add\") {\n throw new Error(`Unknown command \"${argv[0]}\".\\n${getRootHelpText()}`);\n }\n\n const subcommand = argv[1];\n if (!subcommand || subcommand === \"--help\") {\n runtimeIO.stdout(getAddHelpText());\n return 0;\n }\n\n if (subcommand === \"env\") {\n const options = parseAddEnvOptions(argv.slice(2));\n if (options.help) {\n runtimeIO.stdout(getAddEnvHelpText());\n return 0;\n }\n\n await runAddEnv(options, runtimeIO);\n return 0;\n }\n\n if (subcommand === \"example\") {\n const options = parseAddExampleOptions(argv.slice(2));\n if (options.help) {\n runtimeIO.stdout(getAddExampleHelpText());\n return 0;\n }\n\n await runAddExample(options, runtimeIO);\n return 0;\n }\n\n throw new Error(`Unknown subcommand \"add ${subcommand}\".\\n${getAddHelpText()}`);\n } catch (error) {\n runtimeIO.stderr(`${formatErrorMessage(error)}\\n`);\n return 1;\n }\n}\n\nasync function runAddEnv(options: AddEnvOptions, io: CliIO): Promise<void> {\n const cwd = io.cwd();\n const inputPath = resolveFromCwd(cwd, options.input ?? \".env.example\");\n const outputPath = resolveFromCwd(cwd, options.output ?? (await getDefaultEnvOutputPath(cwd)));\n\n const source = await readTextFileOrThrow(inputPath, \"input file\");\n const dotenv = decodeDotenvText(source);\n const prefix = resolvePrefix(options, dotenv.prefix);\n\n const inferred = inferModel(dotenv, { prefix });\n const generated = generateEnvTs(inferred);\n\n await ensureWritableTarget(outputPath, options.force);\n await writeFileAtomic(outputPath, generated);\n\n io.stdout(`Generated ${outputPath}\\n`);\n}\n\nasync function runAddExample(options: AddExampleOptions, io: CliIO): Promise<void> {\n const cwd = io.cwd();\n const defaultInput = await getDefaultExampleInputPath(cwd);\n const inputPath = resolveFromCwd(cwd, options.input ?? defaultInput);\n const outputPath = resolveFromCwd(cwd, options.output ?? \".env.example\");\n\n process.env.ENVIL_INTROSPECT_ONLY = \"1\";\n let mod: Record<string, unknown>;\n try {\n mod = await import(inputPath);\n } finally {\n delete process.env.ENVIL_INTROSPECT_ONLY;\n }\n\n if (!mod.envDefinition || typeof mod.envDefinition !== \"object\") {\n throw new Error(\n `Expected \"envDefinition\" export in ${inputPath}. Make sure the file exports an envDefinition object.`,\n );\n }\n\n const generated = buildEnvExample(mod.envDefinition as Parameters<typeof buildEnvExample>[0]);\n\n await ensureWritableTarget(outputPath, options.force);\n await writeFileAtomic(outputPath, generated);\n\n io.stdout(`Generated ${outputPath}\\n`);\n}\n\nfunction resolvePrefix(\n options: AddEnvOptions,\n fromDocument?: Partial<PrefixConfig>,\n): PrefixConfig {\n const fromFramework = options.framework ? FRAMEWORK_PREFIXES[options.framework] : undefined;\n\n return {\n server: options.serverPrefix ?? fromFramework?.server ?? fromDocument?.server ?? \"\",\n client: options.clientPrefix ?? fromFramework?.client ?? fromDocument?.client ?? \"\",\n shared: options.sharedPrefix ?? fromFramework?.shared ?? fromDocument?.shared ?? \"\",\n };\n}\n\ntype FlagSpec = Record<string, \"string\" | \"boolean\">;\n\nfunction parseFlags(args: ReadonlyArray<string>, spec: FlagSpec): Record<string, string | boolean> {\n const parsed: Record<string, string | boolean> = {};\n for (let index = 0; index < args.length; index += 1) {\n const token = args[index];\n if (!token.startsWith(\"--\")) {\n throw new Error(`Unexpected argument \"${token}\"`);\n }\n\n const [nameWithPrefix, inlineValue] = token.split(\"=\", 2);\n const name = nameWithPrefix.slice(2);\n const expected = spec[name];\n if (!expected) {\n throw new Error(`Unknown option \"--${name}\"`);\n }\n\n if (expected === \"boolean\") {\n if (inlineValue !== undefined) {\n parsed[name] = inlineValue !== \"false\";\n } else {\n parsed[name] = true;\n }\n continue;\n }\n\n if (inlineValue !== undefined) {\n parsed[name] = inlineValue;\n continue;\n }\n\n const next = args[index + 1];\n if (!next || next.startsWith(\"--\")) {\n throw new Error(`Option \"--${name}\" requires a value`);\n }\n\n parsed[name] = next;\n index += 1;\n }\n\n return parsed;\n}\n\nfunction parseAddEnvOptions(args: ReadonlyArray<string>): AddEnvOptions {\n const parsed = parseFlags(args, {\n input: \"string\",\n output: \"string\",\n framework: \"string\",\n \"client-prefix\": \"string\",\n \"server-prefix\": \"string\",\n \"shared-prefix\": \"string\",\n force: \"boolean\",\n help: \"boolean\",\n });\n\n const frameworkValue = parsed.framework;\n if (frameworkValue !== undefined) {\n if (typeof frameworkValue !== \"string\" || !FRAMEWORKS.includes(frameworkValue as Framework)) {\n throw new Error(`Invalid value for --framework. Expected one of: ${FRAMEWORKS.join(\", \")}.`);\n }\n }\n\n return {\n input: asOptionalString(parsed.input),\n output: asOptionalString(parsed.output),\n framework: frameworkValue as Framework | undefined,\n clientPrefix: asOptionalString(parsed[\"client-prefix\"]),\n serverPrefix: asOptionalString(parsed[\"server-prefix\"]),\n sharedPrefix: asOptionalString(parsed[\"shared-prefix\"]),\n force: Boolean(parsed.force),\n help: Boolean(parsed.help),\n };\n}\n\nfunction parseAddExampleOptions(args: ReadonlyArray<string>): AddExampleOptions {\n const parsed = parseFlags(args, {\n input: \"string\",\n output: \"string\",\n force: \"boolean\",\n help: \"boolean\",\n });\n\n return {\n input: asOptionalString(parsed.input),\n output: asOptionalString(parsed.output),\n force: Boolean(parsed.force),\n help: Boolean(parsed.help),\n };\n}\n\nfunction asOptionalString(value: string | boolean | undefined): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction getRootHelpText(): string {\n return [\n \"Usage:\",\n \" envil add env [options]\",\n \" envil add example [options]\",\n \"\",\n getAddHelpText().trimEnd(),\n \"\",\n ].join(\"\\n\");\n}\n\nfunction getAddHelpText(): string {\n return [\n \"Subcommands:\",\n \" envil add env Infer env.ts from .env.example\",\n \" envil add example Recreate .env.example from env.ts\",\n \"\",\n \"Use --help on each subcommand for details.\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction getAddEnvHelpText(): string {\n return [\n \"Usage:\",\n \" envil add env [options]\",\n \"\",\n \"Options:\",\n \" --input <path> Input .env.example path (default: .env.example)\",\n \" --output <path> Output env.ts path (default: src/env.ts or env.ts)\",\n \" --framework <name> Prefix preset: nextjs|vite|expo|nuxt|sveltekit|astro\",\n \" --client-prefix <value> Client runtime prefix override\",\n \" --server-prefix <value> Server runtime prefix override\",\n \" --shared-prefix <value> Shared runtime prefix override\",\n \" --force Overwrite output file if it exists\",\n \" --help Show this help text\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction getAddExampleHelpText(): string {\n return [\n \"Usage:\",\n \" envil add example [options]\",\n \"\",\n \"Options:\",\n \" --input <path> Input env.ts path (default: env.ts, then src/env.ts fallback)\",\n \" --output <path> Output .env.example path (default: .env.example)\",\n \" --force Overwrite output file if it exists\",\n \" --help Show this help text\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction formatErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\nif (import.meta.main) {\n const exitCode = await runCli(process.argv.slice(2));\n process.exit(exitCode);\n}\n"
11
+ "import { Option, Redacted, Schema, SchemaAST } from \"effect\";\n\nimport { encodeDotenvText } from \"./cli/dotenv-codec.ts\";\nimport type { Bucket, SchemaKind } from \"./cli/types.ts\";\nimport {\n DEFAULT_VALUE_ANNOTATION,\n OPTIONAL_ANNOTATION,\n PLACEHOLDER_ANNOTATION,\n REDACTED_ANNOTATION,\n SCHEMA_KIND_ANNOTATION,\n STRING_ENUM_VALUES_ANNOTATION,\n} from \"./schemas.ts\";\nimport type { SchemaDict } from \"./types.ts\";\n\nconst BUCKETS = [\"server\", \"client\", \"shared\"] as const;\n\ninterface EnvDefinition {\n prefix?: { server?: string; client?: string; shared?: string };\n server?: SchemaDict;\n client?: SchemaDict;\n shared?: SchemaDict;\n}\n\nexport interface ExaminedSchema {\n readonly kind: SchemaKind | undefined;\n readonly placeholder: string | undefined;\n readonly optional: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue: unknown;\n readonly redacted: boolean;\n readonly stringEnumValues?: readonly string[];\n}\n\nfunction getAnn<T>(ast: SchemaAST.Annotated, key: symbol): T | undefined {\n return Option.getOrUndefined(SchemaAST.getAnnotation<T>(ast, key));\n}\n\nexport function examineSchema(schema: Schema.Schema.Any): ExaminedSchema {\n let ast: SchemaAST.AST = schema.ast;\n let isRedacted = false;\n let isOptional = false;\n let hasDefault = false;\n let defaultValue: unknown = undefined;\n\n // Peel redacted layer (outermost Transformation with REDACTED_ANNOTATION)\n if (SchemaAST.isTransformation(ast) && getAnn<boolean>(ast, REDACTED_ANNOTATION)) {\n isRedacted = true;\n ast = ast.from;\n }\n\n // Peel withDefault layer (Transformation with DEFAULT_VALUE_ANNOTATION)\n if (SchemaAST.isTransformation(ast) && getAnn(ast, DEFAULT_VALUE_ANNOTATION) !== undefined) {\n hasDefault = true;\n defaultValue = getAnn(ast, DEFAULT_VALUE_ANNOTATION);\n // withDefault wraps UndefinedOr(schema) -> schema, `from` is the Union\n const fromAst = ast.from;\n if (SchemaAST.isUnion(fromAst)) {\n const nonUndefined = fromAst.types.find((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined) ast = nonUndefined;\n }\n }\n\n // Peel optional layer (Union with OPTIONAL_ANNOTATION)\n if (SchemaAST.isUnion(ast) && getAnn<boolean>(ast, OPTIONAL_ANNOTATION)) {\n isOptional = true;\n const nonUndefined = ast.types.find((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined) ast = nonUndefined;\n }\n\n const kind = getAnn<SchemaKind>(ast, SCHEMA_KIND_ANNOTATION);\n const placeholder = getAnn<string>(ast, PLACEHOLDER_ANNOTATION);\n const stringEnumValues =\n kind === \"stringEnum\"\n ? getAnn<readonly string[]>(ast, STRING_ENUM_VALUES_ANNOTATION)\n : undefined;\n\n return {\n kind,\n placeholder,\n optional: isOptional,\n hasDefault,\n defaultValue,\n redacted: isRedacted,\n stringEnumValues,\n };\n}\n\nexport function buildEnvExample(definition: EnvDefinition): string {\n const prefix = {\n server: definition.prefix?.server ?? \"\",\n client: definition.prefix?.client ?? \"\",\n shared: definition.prefix?.shared ?? \"\",\n };\n\n const entries = [];\n let line = 1;\n\n for (const bucket of BUCKETS) {\n const schemas = definition[bucket] ?? {};\n const keys = Object.keys(schemas).sort();\n\n for (const key of keys) {\n const schema = schemas[key];\n const examined = examineSchema(schema);\n const runtimeKey = `${prefix[bucket]}${key}`;\n\n let value: string;\n if (examined.hasDefault) {\n value = encodeDefault(schema, examined);\n } else {\n value = examined.placeholder ?? \"CHANGE_ME\";\n }\n\n entries.push({\n key: runtimeKey,\n value,\n line,\n sectionBucket: bucket as Bucket,\n directives: {\n type: examined.kind,\n bucket: bucket as Bucket,\n optional: examined.optional,\n hasDefault: examined.hasDefault,\n redacted: examined.redacted,\n stringEnumValues: examined.stringEnumValues,\n },\n });\n line += 1;\n }\n }\n\n const hasPrefix = Object.values(prefix).some((v) => v.length > 0);\n return encodeDotenvText({ entries, ...(hasPrefix ? { prefix } : {}) });\n}\n\nfunction encodeDefault(schema: Schema.Schema.Any, examined: ExaminedSchema): string {\n // Encode the default value back to its string representation using the\n // schema's encode direction. For redacted schemas we wrap in Redacted first.\n try {\n let valueToEncode = examined.defaultValue;\n if (examined.redacted) {\n valueToEncode = Redacted.make(valueToEncode);\n }\n const encoded = Schema.encodeSync(schema as Schema.Schema<unknown, unknown, never>)(\n valueToEncode,\n );\n return String(encoded ?? \"\");\n } catch {\n return stringifyDefault(examined);\n }\n}\n\nfunction stringifyDefault(examined: ExaminedSchema): string {\n const val = examined.defaultValue;\n if (val === undefined || val === null) return \"\";\n if (Array.isArray(val)) return val.map(String).join(\",\");\n if (typeof val === \"object\") return JSON.stringify(val);\n return String(val);\n}\n",
12
+ "import { Function, Schema } from \"effect\";\n\nexport const DEFAULT_VALUE_ANNOTATION = Symbol.for(\"@ayronforge/envil/default-value\");\nexport const SCHEMA_KIND_ANNOTATION = Symbol.for(\"@ayronforge/envil/schema-kind\");\nexport const PLACEHOLDER_ANNOTATION = Symbol.for(\"@ayronforge/envil/placeholder\");\nexport const OPTIONAL_ANNOTATION = Symbol.for(\"@ayronforge/envil/optional\");\nexport const REDACTED_ANNOTATION = Symbol.for(\"@ayronforge/envil/redacted\");\nexport const STRING_ENUM_VALUES_ANNOTATION = Symbol.for(\"@ayronforge/envil/string-enum-values\");\n\nexport const withDefault: {\n <S extends Schema.Schema.Any>(\n defaultValue: NonNullable<Schema.Schema.Type<S>>,\n ): (\n schema: S,\n ) => Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n <S extends Schema.Schema.Any>(\n schema: S,\n defaultValue: NonNullable<Schema.Schema.Type<S>>,\n ): Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n} = Function.dual(\n 2,\n <S extends Schema.Schema.Any>(schema: S, defaultValue: NonNullable<Schema.Schema.Type<S>>) => {\n const withDefaultSchema = Schema.transform(\n Schema.UndefinedOr(schema),\n Schema.typeSchema(schema),\n {\n decode: (value) => value ?? defaultValue,\n encode: (value) => value,\n },\n ) as Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n\n return withDefaultSchema.annotations({\n [DEFAULT_VALUE_ANNOTATION]: defaultValue,\n } as Record<PropertyKey, unknown>);\n },\n);\n\nexport const optional = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.UndefinedOr(schema).annotations({\n [OPTIONAL_ANNOTATION]: true,\n } as Record<PropertyKey, unknown>);\n\nexport const redacted = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.Redacted(schema).annotations({\n [REDACTED_ANNOTATION]: true,\n } as Record<PropertyKey, unknown>);\n\nexport const requiredString = Schema.String.pipe(Schema.minLength(1)).annotations({\n identifier: \"RequiredString\",\n [SCHEMA_KIND_ANNOTATION]: \"requiredString\",\n [PLACEHOLDER_ANNOTATION]: \"CHANGE_ME\",\n} as Record<PropertyKey, unknown>);\n\nexport const boolean = Schema.transform(\n Schema.String.pipe(\n Schema.filter((s) => [\"true\", \"false\", \"1\", \"0\"].includes(s.toLowerCase()), {\n identifier: \"BooleanString\",\n message: () => \"Expected 'true', 'false', '1', or '0'\",\n }),\n ),\n Schema.Boolean,\n {\n decode: (s) => s.toLowerCase() === \"true\" || s === \"1\",\n encode: (b) => (b ? \"true\" : \"false\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"boolean\",\n [PLACEHOLDER_ANNOTATION]: \"true\",\n} as Record<PropertyKey, unknown>);\n\nexport const integer = Schema.NumberFromString.pipe(Schema.int()).annotations({\n identifier: \"Integer\",\n [SCHEMA_KIND_ANNOTATION]: \"integer\",\n [PLACEHOLDER_ANNOTATION]: \"123\",\n} as Record<PropertyKey, unknown>);\n\nexport const number = Schema.NumberFromString.annotations({\n identifier: \"Number\",\n [SCHEMA_KIND_ANNOTATION]: \"number\",\n [PLACEHOLDER_ANNOTATION]: \"3.14\",\n} as Record<PropertyKey, unknown>);\n\nexport const positiveNumber = Schema.NumberFromString.pipe(Schema.positive()).annotations({\n identifier: \"PositiveNumber\",\n});\n\nexport const nonNegativeNumber = Schema.NumberFromString.pipe(Schema.nonNegative()).annotations({\n identifier: \"NonNegativeNumber\",\n});\n\nexport const port = Schema.NumberFromString.pipe(\n Schema.int(),\n Schema.between(1, 65535),\n).annotations({\n identifier: \"Port\",\n [SCHEMA_KIND_ANNOTATION]: \"port\",\n [PLACEHOLDER_ANNOTATION]: \"3000\",\n} as Record<PropertyKey, unknown>);\n\nexport const url = Schema.String.pipe(\n Schema.filter(\n (s) => {\n try {\n new URL(s);\n return s.startsWith(\"http://\") || s.startsWith(\"https://\");\n } catch {\n return false;\n }\n },\n { identifier: \"Url\", message: () => \"Expected a valid HTTP or HTTPS URL\" },\n ),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"url\",\n [PLACEHOLDER_ANNOTATION]: \"https://example.com\",\n} as Record<PropertyKey, unknown>);\nexport type Url = Schema.Schema.Type<typeof url>;\n\nexport const postgresUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"postgres://\") || s.startsWith(\"postgresql://\"), {\n identifier: \"PostgresUrl\",\n message: () => \"Expected a valid PostgreSQL connection URL\",\n }),\n Schema.pattern(/^(postgres|postgresql):\\/\\/[^:]+:[^@]+@[^:]+:\\d+\\/.+$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"postgresUrl\",\n [PLACEHOLDER_ANNOTATION]: \"postgres://user:pass@localhost:5432/app\",\n} as Record<PropertyKey, unknown>);\nexport type PostgresUrl = Schema.Schema.Type<typeof postgresUrl>;\n\nexport const redisUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"redis://\") || s.startsWith(\"rediss://\"), {\n identifier: \"RedisUrl\",\n message: () => \"Expected a valid Redis connection URL\",\n }),\n Schema.pattern(/^rediss?:\\/\\/(?:[^:]+:[^@]+@)?[^:]+(?::\\d+)?(?:\\/\\d+)?$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"redisUrl\",\n [PLACEHOLDER_ANNOTATION]: \"redis://localhost:6379\",\n} as Record<PropertyKey, unknown>);\nexport type RedisUrl = Schema.Schema.Type<typeof redisUrl>;\n\nexport const mongoUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"mongodb://\") || s.startsWith(\"mongodb+srv://\"), {\n identifier: \"MongoUrl\",\n message: () => \"Expected a valid MongoDB connection URL\",\n }),\n Schema.pattern(/^mongodb(\\+srv)?:\\/\\/(?:[^:]+:[^@]+@)?[^/]+(?:\\/[^?]*)?(?:\\?.*)?$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"mongoUrl\",\n [PLACEHOLDER_ANNOTATION]: \"mongodb://localhost:27017/app\",\n} as Record<PropertyKey, unknown>);\nexport type MongoUrl = Schema.Schema.Type<typeof mongoUrl>;\n\nexport const mysqlUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"mysql://\") || s.startsWith(\"mysqls://\"), {\n identifier: \"MysqlUrl\",\n message: () => \"Expected a valid MySQL connection URL\",\n }),\n Schema.pattern(/^mysqls?:\\/\\/[^:]+:[^@]+@[^:]+:\\d+\\/.+$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"mysqlUrl\",\n [PLACEHOLDER_ANNOTATION]: \"mysql://user:pass@localhost:3306/app\",\n} as Record<PropertyKey, unknown>);\nexport type MysqlUrl = Schema.Schema.Type<typeof mysqlUrl>;\n\nexport const commaSeparated = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(Schema.String)),\n {\n decode: (s) => s.split(\",\").map((x) => x.trim()),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparated\",\n [PLACEHOLDER_ANNOTATION]: \"alpha,beta,gamma\",\n} as Record<PropertyKey, unknown>);\n\nexport const commaSeparatedNumbers = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(Schema.Number)),\n {\n decode: (s) =>\n s.split(\",\").map((x) => {\n const n = Number(x.trim());\n if (Number.isNaN(n)) throw new Error(`\"${x.trim()}\" is not a valid number`);\n return n;\n }),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparatedNumbers\",\n [PLACEHOLDER_ANNOTATION]: \"1,2,3\",\n} as Record<PropertyKey, unknown>);\n\nexport const commaSeparatedUrls = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(url)),\n {\n decode: (s) => s.split(\",\").map((x) => Schema.decodeUnknownSync(url)(x.trim())),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparatedUrls\",\n [PLACEHOLDER_ANNOTATION]: \"https://one.example.com,https://two.example.com\",\n} as Record<PropertyKey, unknown>);\n\nexport const stringEnum = <T extends readonly [string, ...string[]]>(values: T) =>\n Schema.Literal(...values).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"stringEnum\",\n [STRING_ENUM_VALUES_ANNOTATION]: values,\n [PLACEHOLDER_ANNOTATION]: values[0],\n } as Record<PropertyKey, unknown>);\n\nexport const json = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.parseJson(schema).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"json\",\n [PLACEHOLDER_ANNOTATION]: '{\"key\":\"value\"}',\n } as Record<PropertyKey, unknown>);\n",
13
+ "#!/usr/bin/env node\n\nimport { ensureWritableTarget, readTextFileOrThrow, writeFileAtomic } from \"./cli/fs-utils.ts\";\nimport {\n decodeDotenvText,\n generateEnvTs,\n getDefaultEnvOutputPath,\n getDefaultExampleInputPath,\n inferModel,\n resolveFromCwd,\n} from \"./cli/index.ts\";\nimport { FRAMEWORKS, type Framework, type PrefixConfig } from \"./cli/types.ts\";\nimport { buildEnvExample } from \"./introspect.ts\";\n\ninterface CliIO {\n cwd: () => string;\n stdout: (message: string) => void;\n stderr: (message: string) => void;\n}\n\ninterface AddEnvOptions {\n input?: string;\n output?: string;\n framework?: Framework;\n clientPrefix?: string;\n serverPrefix?: string;\n sharedPrefix?: string;\n force: boolean;\n help: boolean;\n}\n\ninterface AddExampleOptions {\n input?: string;\n output?: string;\n force: boolean;\n help: boolean;\n}\n\nconst DEFAULT_IO: CliIO = {\n cwd: () => process.cwd(),\n stdout: (message) => process.stdout.write(message),\n stderr: (message) => process.stderr.write(message),\n};\n\nconst FRAMEWORK_PREFIXES: Record<Framework, PrefixConfig> = {\n nextjs: { server: \"\", client: \"NEXT_PUBLIC_\", shared: \"\" },\n vite: { server: \"\", client: \"VITE_\", shared: \"\" },\n expo: { server: \"\", client: \"EXPO_PUBLIC_\", shared: \"\" },\n nuxt: { server: \"\", client: \"NUXT_PUBLIC_\", shared: \"\" },\n sveltekit: { server: \"\", client: \"PUBLIC_\", shared: \"\" },\n astro: { server: \"\", client: \"PUBLIC_\", shared: \"\" },\n};\n\nexport async function runCli(argv: string[], io: Partial<CliIO> = {}): Promise<number> {\n const runtimeIO: CliIO = {\n cwd: io.cwd ?? DEFAULT_IO.cwd,\n stdout: io.stdout ?? DEFAULT_IO.stdout,\n stderr: io.stderr ?? DEFAULT_IO.stderr,\n };\n\n try {\n if (argv.length === 0 || argv[0] === \"--help\" || argv[0] === \"-h\") {\n runtimeIO.stdout(getRootHelpText());\n return 0;\n }\n\n if (argv[0] !== \"add\") {\n throw new Error(`Unknown command \"${argv[0]}\".\\n${getRootHelpText()}`);\n }\n\n const subcommand = argv[1];\n if (!subcommand || subcommand === \"--help\") {\n runtimeIO.stdout(getAddHelpText());\n return 0;\n }\n\n if (subcommand === \"env\") {\n const options = parseAddEnvOptions(argv.slice(2));\n if (options.help) {\n runtimeIO.stdout(getAddEnvHelpText());\n return 0;\n }\n\n await runAddEnv(options, runtimeIO);\n return 0;\n }\n\n if (subcommand === \"example\") {\n const options = parseAddExampleOptions(argv.slice(2));\n if (options.help) {\n runtimeIO.stdout(getAddExampleHelpText());\n return 0;\n }\n\n await runAddExample(options, runtimeIO);\n return 0;\n }\n\n throw new Error(`Unknown subcommand \"add ${subcommand}\".\\n${getAddHelpText()}`);\n } catch (error) {\n runtimeIO.stderr(`${formatErrorMessage(error)}\\n`);\n return 1;\n }\n}\n\nasync function runAddEnv(options: AddEnvOptions, io: CliIO): Promise<void> {\n const cwd = io.cwd();\n const inputPath = resolveFromCwd(cwd, options.input ?? \".env.example\");\n const outputPath = resolveFromCwd(cwd, options.output ?? (await getDefaultEnvOutputPath(cwd)));\n\n const source = await readTextFileOrThrow(inputPath, \"input file\");\n const dotenv = decodeDotenvText(source);\n const prefix = resolvePrefix(options, dotenv.prefix);\n\n const inferred = inferModel(dotenv, { prefix });\n const generated = generateEnvTs(inferred);\n\n await ensureWritableTarget(outputPath, options.force);\n await writeFileAtomic(outputPath, generated);\n\n io.stdout(`Generated ${outputPath}\\n`);\n}\n\nasync function runAddExample(options: AddExampleOptions, io: CliIO): Promise<void> {\n const cwd = io.cwd();\n const defaultInput = await getDefaultExampleInputPath(cwd);\n const inputPath = resolveFromCwd(cwd, options.input ?? defaultInput);\n const outputPath = resolveFromCwd(cwd, options.output ?? \".env.example\");\n\n process.env.ENVIL_INTROSPECT_ONLY = \"1\";\n let mod: Record<string, unknown>;\n try {\n mod = await import(inputPath);\n } finally {\n delete process.env.ENVIL_INTROSPECT_ONLY;\n }\n\n if (!mod.envDefinition || typeof mod.envDefinition !== \"object\") {\n throw new Error(\n `Expected \"envDefinition\" export in ${inputPath}. Make sure the file exports an envDefinition object.`,\n );\n }\n\n const generated = buildEnvExample(mod.envDefinition as Parameters<typeof buildEnvExample>[0]);\n\n await ensureWritableTarget(outputPath, options.force);\n await writeFileAtomic(outputPath, generated);\n\n io.stdout(`Generated ${outputPath}\\n`);\n}\n\nfunction resolvePrefix(options: AddEnvOptions, fromDocument?: Partial<PrefixConfig>): PrefixConfig {\n const fromFramework = options.framework ? FRAMEWORK_PREFIXES[options.framework] : undefined;\n\n return {\n server: options.serverPrefix ?? fromFramework?.server ?? fromDocument?.server ?? \"\",\n client: options.clientPrefix ?? fromFramework?.client ?? fromDocument?.client ?? \"\",\n shared: options.sharedPrefix ?? fromFramework?.shared ?? fromDocument?.shared ?? \"\",\n };\n}\n\ntype FlagSpec = Record<string, \"string\" | \"boolean\">;\n\nfunction parseFlags(args: ReadonlyArray<string>, spec: FlagSpec): Record<string, string | boolean> {\n const parsed: Record<string, string | boolean> = {};\n for (let index = 0; index < args.length; index += 1) {\n const token = args[index];\n if (!token.startsWith(\"--\")) {\n throw new Error(`Unexpected argument \"${token}\"`);\n }\n\n const [nameWithPrefix, inlineValue] = token.split(\"=\", 2);\n const name = nameWithPrefix.slice(2);\n const expected = spec[name];\n if (!expected) {\n throw new Error(`Unknown option \"--${name}\"`);\n }\n\n if (expected === \"boolean\") {\n if (inlineValue !== undefined) {\n parsed[name] = inlineValue !== \"false\";\n } else {\n parsed[name] = true;\n }\n continue;\n }\n\n if (inlineValue !== undefined) {\n parsed[name] = inlineValue;\n continue;\n }\n\n const next = args[index + 1];\n if (!next || next.startsWith(\"--\")) {\n throw new Error(`Option \"--${name}\" requires a value`);\n }\n\n parsed[name] = next;\n index += 1;\n }\n\n return parsed;\n}\n\nfunction parseAddEnvOptions(args: ReadonlyArray<string>): AddEnvOptions {\n const parsed = parseFlags(args, {\n input: \"string\",\n output: \"string\",\n framework: \"string\",\n \"client-prefix\": \"string\",\n \"server-prefix\": \"string\",\n \"shared-prefix\": \"string\",\n force: \"boolean\",\n help: \"boolean\",\n });\n\n const frameworkValue = parsed.framework;\n if (frameworkValue !== undefined) {\n if (typeof frameworkValue !== \"string\" || !FRAMEWORKS.includes(frameworkValue as Framework)) {\n throw new Error(`Invalid value for --framework. Expected one of: ${FRAMEWORKS.join(\", \")}.`);\n }\n }\n\n return {\n input: asOptionalString(parsed.input),\n output: asOptionalString(parsed.output),\n framework: frameworkValue as Framework | undefined,\n clientPrefix: asOptionalString(parsed[\"client-prefix\"]),\n serverPrefix: asOptionalString(parsed[\"server-prefix\"]),\n sharedPrefix: asOptionalString(parsed[\"shared-prefix\"]),\n force: Boolean(parsed.force),\n help: Boolean(parsed.help),\n };\n}\n\nfunction parseAddExampleOptions(args: ReadonlyArray<string>): AddExampleOptions {\n const parsed = parseFlags(args, {\n input: \"string\",\n output: \"string\",\n force: \"boolean\",\n help: \"boolean\",\n });\n\n return {\n input: asOptionalString(parsed.input),\n output: asOptionalString(parsed.output),\n force: Boolean(parsed.force),\n help: Boolean(parsed.help),\n };\n}\n\nfunction asOptionalString(value: string | boolean | undefined): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction getRootHelpText(): string {\n return [\n \"Usage:\",\n \" envil add env [options]\",\n \" envil add example [options]\",\n \"\",\n getAddHelpText().trimEnd(),\n \"\",\n ].join(\"\\n\");\n}\n\nfunction getAddHelpText(): string {\n return [\n \"Subcommands:\",\n \" envil add env Infer env.ts from .env.example\",\n \" envil add example Recreate .env.example from env.ts\",\n \"\",\n \"Use --help on each subcommand for details.\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction getAddEnvHelpText(): string {\n return [\n \"Usage:\",\n \" envil add env [options]\",\n \"\",\n \"Options:\",\n \" --input <path> Input .env.example path (default: .env.example)\",\n \" --output <path> Output env.ts path (default: src/env.ts or env.ts)\",\n \" --framework <name> Prefix preset: nextjs|vite|expo|nuxt|sveltekit|astro\",\n \" --client-prefix <value> Client runtime prefix override\",\n \" --server-prefix <value> Server runtime prefix override\",\n \" --shared-prefix <value> Shared runtime prefix override\",\n \" --force Overwrite output file if it exists\",\n \" --help Show this help text\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction getAddExampleHelpText(): string {\n return [\n \"Usage:\",\n \" envil add example [options]\",\n \"\",\n \"Options:\",\n \" --input <path> Input env.ts path (default: env.ts, then src/env.ts fallback)\",\n \" --output <path> Output .env.example path (default: .env.example)\",\n \" --force Overwrite output file if it exists\",\n \" --help Show this help text\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction formatErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\nif (import.meta.main) {\n const exitCode = await runCli(process.argv.slice(2));\n process.exit(exitCode);\n}\n"
14
14
  ],
15
- "mappings": "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",
16
- "debugId": "D32DCC7ECD9FDB2E64756E2164756E21",
15
+ "mappings": "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",
16
+ "debugId": "2598B6F54188F97964756E2164756E21",
17
17
  "names": []
18
18
  }
package/dist/index.js CHANGED
@@ -588,7 +588,6 @@ var requiredString = Schema3.String.pipe(Schema3.minLength(1)).annotations({
588
588
  [SCHEMA_KIND_ANNOTATION]: "requiredString",
589
589
  [PLACEHOLDER_ANNOTATION]: "CHANGE_ME"
590
590
  });
591
- var optionalString = Schema3.UndefinedOr(Schema3.String);
592
591
  var boolean = Schema3.transform(Schema3.String.pipe(Schema3.filter((s) => ["true", "false", "1", "0"].includes(s.toLowerCase()), {
593
592
  identifier: "BooleanString",
594
593
  message: () => "Expected 'true', 'false', '1', or '0'"
@@ -729,7 +728,15 @@ function examineSchema(schema) {
729
728
  const kind = getAnn(ast, SCHEMA_KIND_ANNOTATION);
730
729
  const placeholder = getAnn(ast, PLACEHOLDER_ANNOTATION);
731
730
  const stringEnumValues = kind === "stringEnum" ? getAnn(ast, STRING_ENUM_VALUES_ANNOTATION) : undefined;
732
- return { kind, placeholder, optional: isOptional, hasDefault, defaultValue, redacted: isRedacted, stringEnumValues };
731
+ return {
732
+ kind,
733
+ placeholder,
734
+ optional: isOptional,
735
+ hasDefault,
736
+ defaultValue,
737
+ redacted: isRedacted,
738
+ stringEnumValues
739
+ };
733
740
  }
734
741
  function buildEnvExample(definition) {
735
742
  const prefix = {
@@ -912,7 +919,6 @@ export {
912
919
  postgresUrl,
913
920
  positiveNumber,
914
921
  port,
915
- optionalString,
916
922
  optional,
917
923
  number,
918
924
  nonNegativeNumber,
@@ -938,5 +944,5 @@ export {
938
944
  ClientAccessError
939
945
  };
940
946
 
941
- //# debugId=466803FAE61AC0A564756E2164756E21
947
+ //# debugId=D41C1808EDE7815C64756E2164756E21
942
948
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -5,17 +5,17 @@
5
5
  "import { Effect, Either, ParseResult, Redacted, Schema } from \"effect\";\n\nimport { ClientAccessError, EnvValidationError } from \"./errors.ts\";\nimport { resolvePrefixMap } from \"./prefix.ts\";\nimport type { ResolverError, ResolverResult } from \"./resolvers/types.ts\";\nimport type {\n AnyEnv,\n EnvOptions,\n EnvResult,\n EnvResultAutoRedacted,\n ExtractResolverKeys,\n InternalEnvOptions,\n PrefixMap,\n PrefixStr,\n SchemaDict,\n} from \"./types.ts\";\n\ninterface EnvMeta {\n readonly serverKeys: ReadonlySet<string>;\n readonly clientKeys: ReadonlySet<string>;\n readonly sharedKeys: ReadonlySet<string>;\n}\n\ninterface AggregatedKeys {\n serverKeys: Set<string>;\n clientKeys: Set<string>;\n sharedKeys: Set<string>;\n}\n\nconst envMetaStore = new WeakMap<object, EnvMeta>();\n\ntype EnvCategory = keyof Required<PrefixMap>;\n\nfunction addToSet(target: Set<string>, values: Iterable<string>) {\n for (const value of values) {\n target.add(value);\n }\n}\n\nfunction getEnvMeta(env: unknown): EnvMeta | undefined {\n if (typeof env !== \"object\" || env === null) {\n return undefined;\n }\n\n return envMetaStore.get(env);\n}\n\nfunction normalizeRuntimeEnv(\n runtimeEnv: Record<string, string | undefined>,\n emptyStringAsUndefined: boolean | undefined,\n): Record<string, string | undefined> {\n if (!emptyStringAsUndefined) {\n return runtimeEnv;\n }\n\n return Object.fromEntries(\n Object.entries(runtimeEnv).map(([key, value]) => [key, value === \"\" ? undefined : value]),\n );\n}\n\nfunction aggregateEnvKeys(\n server: SchemaDict,\n client: SchemaDict,\n shared: SchemaDict,\n extendsEnvs: readonly AnyEnv[],\n): AggregatedKeys {\n const serverKeys = new Set<string>(Object.keys(server));\n const clientKeys = new Set<string>(Object.keys(client));\n const sharedKeys = new Set<string>(Object.keys(shared));\n\n for (const ext of extendsEnvs) {\n const meta = getEnvMeta(ext);\n if (!meta) continue;\n addToSet(serverKeys, meta.serverKeys);\n addToSet(clientKeys, meta.clientKeys);\n addToSet(sharedKeys, meta.sharedKeys);\n }\n\n return { serverKeys, clientKeys, sharedKeys };\n}\n\nfunction selectSchemaForRuntime(\n isServer: boolean,\n server: SchemaDict,\n client: SchemaDict,\n shared: SchemaDict,\n): SchemaDict {\n return isServer ? { ...server, ...client, ...shared } : { ...client, ...shared };\n}\n\nfunction getKeyCategory(key: string, client: SchemaDict, shared: SchemaDict): EnvCategory {\n if (key in client) return \"client\";\n if (key in shared) return \"shared\";\n return \"server\";\n}\n\nfunction parseSchemaValues(\n schema: SchemaDict,\n options: {\n client: SchemaDict;\n shared: SchemaDict;\n runtimeEnv: Record<string, string | undefined>;\n prefixMap: Required<PrefixMap>;\n autoRedactKeys?: ReadonlySet<string>;\n },\n): { values: Record<string, unknown>; errors: string[] } {\n const values: Record<string, unknown> = {};\n const errors: string[] = [];\n\n for (const [key, validator] of Object.entries(schema)) {\n const category = getKeyCategory(key, options.client, options.shared);\n const envKey = `${options.prefixMap[category]}${key}`;\n const rawValue = options.runtimeEnv[envKey];\n const parsed = Schema.decodeUnknownEither(validator)(rawValue);\n\n if (Either.isLeft(parsed)) {\n const detail = ParseResult.TreeFormatter.formatErrorSync(parsed.left);\n errors.push(`${envKey}: ${detail}`);\n continue;\n }\n\n let finalValue = parsed.right;\n if (options.autoRedactKeys?.has(envKey) && !Redacted.isRedacted(finalValue)) {\n finalValue = Redacted.make(finalValue);\n }\n\n values[key] = finalValue;\n }\n\n return { values, errors };\n}\n\nfunction raiseValidationErrors(\n errors: string[],\n onValidationError?: (errors: string[]) => void,\n): void {\n if (errors.length === 0) {\n return;\n }\n\n if (onValidationError) {\n try {\n onValidationError(errors);\n } catch (error) {\n throw error instanceof EnvValidationError ? error : new EnvValidationError([String(error)]);\n }\n }\n\n throw new EnvValidationError(errors);\n}\n\nfunction mergeExtendedEnvs(\n extendsEnvs: readonly AnyEnv[],\n parsedValues: Record<string, unknown>,\n): Record<string, unknown> {\n const mergedValues: Record<string, unknown> = {};\n\n for (const ext of extendsEnvs) {\n for (const [key, value] of Object.entries(ext)) {\n mergedValues[key] = value;\n }\n }\n\n for (const [key, value] of Object.entries(parsedValues)) {\n mergedValues[key] = value;\n }\n\n return mergedValues;\n}\n\nfunction createClientBlockedKeys(aggregated: AggregatedKeys): Set<string> {\n const blockedKeys = new Set<string>();\n\n for (const key of aggregated.serverKeys) {\n if (!aggregated.clientKeys.has(key) && !aggregated.sharedKeys.has(key)) {\n blockedKeys.add(key);\n }\n }\n\n return blockedKeys;\n}\n\nfunction createReadOnlyEnv<T extends AnyEnv>(\n envValues: Record<string, unknown>,\n options: {\n isServer: boolean;\n clientBlockedKeys: ReadonlySet<string>;\n },\n): T {\n const frozenValues = Object.freeze(envValues);\n\n return new Proxy(frozenValues, {\n get(target, prop) {\n if (typeof prop !== \"string\") return undefined;\n if (!options.isServer && options.clientBlockedKeys.has(prop)) {\n throw new ClientAccessError(prop);\n }\n\n return Reflect.get(target, prop);\n },\n set() {\n throw new TypeError(\"Environment object is read-only\");\n },\n deleteProperty() {\n throw new TypeError(\"Environment object is read-only\");\n },\n defineProperty() {\n throw new TypeError(\"Environment object is read-only\");\n },\n }) as T;\n}\n\nfunction buildEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n>(\n opts: InternalEnvOptions<TServer, TClient, TShared, TExtends>,\n): EnvResult<TExtends, TServer, TClient, TShared> {\n const extendsEnvs = opts.extends ?? [];\n const runtimeEnv = normalizeRuntimeEnv(\n opts.runtimeEnv ?? process.env,\n opts.emptyStringAsUndefined,\n );\n const isServer = opts.isServer ?? typeof window === \"undefined\";\n\n const server = opts.server ?? ({} as TServer);\n const client = opts.client ?? ({} as TClient);\n const shared = opts.shared ?? ({} as TShared);\n\n const aggregated = aggregateEnvKeys(server, client, shared, extendsEnvs);\n const prefixMap = resolvePrefixMap(opts.prefix);\n const runtimeSchema = selectSchemaForRuntime(isServer, server, client, shared);\n const { values: parsedValues, errors } = parseSchemaValues(runtimeSchema, {\n client,\n shared,\n runtimeEnv,\n prefixMap,\n autoRedactKeys: opts._autoRedactKeys,\n });\n\n raiseValidationErrors(errors, opts.onValidationError);\n\n const mergedValues = mergeExtendedEnvs(extendsEnvs, parsedValues);\n const clientBlockedKeys = createClientBlockedKeys(aggregated);\n const env = createReadOnlyEnv<EnvResult<TExtends, TServer, TClient, TShared>>(mergedValues, {\n isServer,\n clientBlockedKeys,\n });\n\n envMetaStore.set(env as object, {\n serverKeys: aggregated.serverKeys,\n clientKeys: aggregated.clientKeys,\n sharedKeys: aggregated.sharedKeys,\n });\n\n return env;\n}\n\nexport function createEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver: false;\n },\n): Effect.Effect<\n EnvResult<TExtends, TServer, TClient, TShared>,\n ResolverError | EnvValidationError\n>;\n\n// Overload: with resolvers (autoRedactResolver defaults to true) -> auto-redact resolver keys\nexport function createEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n const TPrefix extends string | PrefixMap | undefined = undefined,\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver?: true;\n prefix?: TPrefix;\n },\n): Effect.Effect<\n EnvResultAutoRedacted<\n TExtends,\n TServer,\n TClient,\n TShared,\n ExtractResolverKeys<TResolvers>,\n PrefixStr<TPrefix>\n >,\n ResolverError | EnvValidationError\n>;\n\n// Overload: without resolvers -> synchronous\nexport function createEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends>,\n): EnvResult<TExtends, TServer, TClient, TShared>;\n\nexport function createEnv(\n opts: EnvOptions<SchemaDict, SchemaDict, SchemaDict, readonly AnyEnv[]> & {\n resolvers?: readonly Effect.Effect<ResolverResult, ResolverError>[];\n autoRedactResolver?: boolean;\n },\n) {\n if (process.env.ENVIL_INTROSPECT_ONLY === \"1\") {\n return new Proxy({}, { get: () => undefined }) as any;\n }\n\n if (opts.resolvers?.length) {\n const shouldAutoRedact = opts.autoRedactResolver !== false;\n return Effect.all(opts.resolvers, { concurrency: \"unbounded\" }).pipe(\n Effect.map((results) => {\n const autoRedactKeys = new Set<string>();\n if (shouldAutoRedact) {\n for (const result of results) {\n for (const [key, value] of Object.entries(result)) {\n if (value !== undefined) {\n autoRedactKeys.add(key);\n }\n }\n }\n }\n\n return {\n mergedEnv: Object.assign({}, opts.runtimeEnv ?? process.env, ...results),\n autoRedactKeys,\n };\n }),\n Effect.flatMap(({ mergedEnv, autoRedactKeys }) =>\n Effect.try({\n try: () =>\n buildEnv({\n ...opts,\n runtimeEnv: mergedEnv,\n _autoRedactKeys: shouldAutoRedact ? autoRedactKeys : undefined,\n }),\n catch: (error) =>\n error instanceof EnvValidationError ? error : new EnvValidationError([String(error)]),\n }),\n ),\n );\n }\n\n return buildEnv(opts);\n}\n",
6
6
  "export class EnvValidationError extends Error {\n readonly _tag = \"EnvValidationError\" as const;\n readonly errors: ReadonlyArray<string>;\n constructor(errors: ReadonlyArray<string>) {\n super(`Invalid environment variables:\\n${errors.join(\"\\n\")}`);\n this.name = \"EnvValidationError\";\n this.errors = errors;\n }\n}\n\nexport class ClientAccessError extends Error {\n readonly _tag = \"ClientAccessError\" as const;\n readonly variableName: string;\n constructor(variableName: string) {\n super(`Attempted to access server-side env var \"${variableName}\" on client`);\n this.name = \"ClientAccessError\";\n this.variableName = variableName;\n }\n}\n",
7
7
  "export interface PrefixMap {\n server?: string;\n client?: string;\n shared?: string;\n}\n\nexport function resolvePrefixMap(prefix: string | PrefixMap | undefined): Required<PrefixMap> {\n if (typeof prefix === \"string\" || prefix === undefined) {\n const value = prefix ?? \"\";\n return { server: value, client: value, shared: value };\n }\n\n return {\n server: prefix.server ?? \"\",\n client: prefix.client ?? \"\",\n shared: prefix.shared ?? \"\",\n };\n}\n",
8
- "import { Option, Redacted, Schema, SchemaAST } from \"effect\";\n\nimport { encodeDotenvText } from \"./cli/dotenv-codec.ts\";\nimport type { Bucket, SchemaKind } from \"./cli/types.ts\";\nimport {\n DEFAULT_VALUE_ANNOTATION,\n OPTIONAL_ANNOTATION,\n PLACEHOLDER_ANNOTATION,\n REDACTED_ANNOTATION,\n SCHEMA_KIND_ANNOTATION,\n STRING_ENUM_VALUES_ANNOTATION,\n} from \"./schemas.ts\";\nimport type { SchemaDict } from \"./types.ts\";\n\nconst BUCKETS = [\"server\", \"client\", \"shared\"] as const;\n\ninterface EnvDefinition {\n prefix?: { server?: string; client?: string; shared?: string };\n server?: SchemaDict;\n client?: SchemaDict;\n shared?: SchemaDict;\n}\n\nexport interface ExaminedSchema {\n readonly kind: SchemaKind | undefined;\n readonly placeholder: string | undefined;\n readonly optional: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue: unknown;\n readonly redacted: boolean;\n readonly stringEnumValues?: readonly string[];\n}\n\nfunction getAnn<T>(ast: SchemaAST.Annotated, key: symbol): T | undefined {\n return Option.getOrUndefined(SchemaAST.getAnnotation<T>(ast, key));\n}\n\nexport function examineSchema(schema: Schema.Schema.Any): ExaminedSchema {\n let ast: SchemaAST.AST = schema.ast;\n let isRedacted = false;\n let isOptional = false;\n let hasDefault = false;\n let defaultValue: unknown = undefined;\n\n // Peel redacted layer (outermost Transformation with REDACTED_ANNOTATION)\n if (SchemaAST.isTransformation(ast) && getAnn<boolean>(ast, REDACTED_ANNOTATION)) {\n isRedacted = true;\n ast = ast.from;\n }\n\n // Peel withDefault layer (Transformation with DEFAULT_VALUE_ANNOTATION)\n if (SchemaAST.isTransformation(ast) && getAnn(ast, DEFAULT_VALUE_ANNOTATION) !== undefined) {\n hasDefault = true;\n defaultValue = getAnn(ast, DEFAULT_VALUE_ANNOTATION);\n // withDefault wraps UndefinedOr(schema) -> schema, `from` is the Union\n const fromAst = ast.from;\n if (SchemaAST.isUnion(fromAst)) {\n const nonUndefined = fromAst.types.find((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined) ast = nonUndefined;\n }\n }\n\n // Peel optional layer (Union with OPTIONAL_ANNOTATION)\n if (SchemaAST.isUnion(ast) && getAnn<boolean>(ast, OPTIONAL_ANNOTATION)) {\n isOptional = true;\n const nonUndefined = ast.types.find((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined) ast = nonUndefined;\n }\n\n const kind = getAnn<SchemaKind>(ast, SCHEMA_KIND_ANNOTATION);\n const placeholder = getAnn<string>(ast, PLACEHOLDER_ANNOTATION);\n const stringEnumValues = kind === \"stringEnum\"\n ? getAnn<readonly string[]>(ast, STRING_ENUM_VALUES_ANNOTATION)\n : undefined;\n\n return { kind, placeholder, optional: isOptional, hasDefault, defaultValue, redacted: isRedacted, stringEnumValues };\n}\n\nexport function buildEnvExample(definition: EnvDefinition): string {\n const prefix = {\n server: definition.prefix?.server ?? \"\",\n client: definition.prefix?.client ?? \"\",\n shared: definition.prefix?.shared ?? \"\",\n };\n\n const entries = [];\n let line = 1;\n\n for (const bucket of BUCKETS) {\n const schemas = definition[bucket] ?? {};\n const keys = Object.keys(schemas).sort();\n\n for (const key of keys) {\n const schema = schemas[key];\n const examined = examineSchema(schema);\n const runtimeKey = `${prefix[bucket]}${key}`;\n\n let value: string;\n if (examined.hasDefault) {\n value = encodeDefault(schema, examined);\n } else {\n value = examined.placeholder ?? \"CHANGE_ME\";\n }\n\n entries.push({\n key: runtimeKey,\n value,\n line,\n sectionBucket: bucket as Bucket,\n directives: {\n type: examined.kind,\n bucket: bucket as Bucket,\n optional: examined.optional,\n hasDefault: examined.hasDefault,\n redacted: examined.redacted,\n stringEnumValues: examined.stringEnumValues,\n },\n });\n line += 1;\n }\n }\n\n const hasPrefix = Object.values(prefix).some((v) => v.length > 0);\n return encodeDotenvText({ entries, ...(hasPrefix ? { prefix } : {}) });\n}\n\nfunction encodeDefault(schema: Schema.Schema.Any, examined: ExaminedSchema): string {\n // Encode the default value back to its string representation using the\n // schema's encode direction. For redacted schemas we wrap in Redacted first.\n try {\n let valueToEncode = examined.defaultValue;\n if (examined.redacted) {\n valueToEncode = Redacted.make(valueToEncode);\n }\n const encoded = Schema.encodeSync(schema as Schema.Schema<unknown, unknown, never>)(valueToEncode);\n return String(encoded ?? \"\");\n } catch {\n return stringifyDefault(examined);\n }\n}\n\nfunction stringifyDefault(examined: ExaminedSchema): string {\n const val = examined.defaultValue;\n if (val === undefined || val === null) return \"\";\n if (Array.isArray(val)) return val.map(String).join(\",\");\n if (typeof val === \"object\") return JSON.stringify(val);\n return String(val);\n}\n",
9
- "import { Schema } from \"effect\";\n\nimport {\n parseBooleanDirective,\n toEnvValueLiteral,\n} from \"./literals.ts\";\nimport {\n BUCKETS,\n SCHEMA_KINDS,\n type Bucket,\n type DotenvDocument,\n type SchemaKind,\n} from \"./types.ts\";\n\ntype MutableDirectives = {\n type?: SchemaKind;\n optional?: boolean;\n hasDefault?: boolean;\n redacted?: boolean;\n bucket?: Bucket;\n stringEnumValues?: readonly string[];\n};\n\nconst SENTINEL_DIRECTIVE_PREFIX = \"@\";\nconst KEY_ASSIGNMENT_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s*=(.*)$/;\n\nconst DotenvCodec = Schema.transform(Schema.String, Schema.Unknown, {\n decode: (text) => parseDotenvText(String(text)),\n encode: (value) => stringifyDotenvDocument(value as DotenvDocument),\n});\n\nexport function decodeDotenvText(text: string): DotenvDocument {\n return Schema.decodeUnknownSync(DotenvCodec)(text) as DotenvDocument;\n}\n\nexport function encodeDotenvText(document: DotenvDocument): string {\n return Schema.encodeSync(DotenvCodec)(document) as string;\n}\n\nfunction parseDotenvText(text: string): DotenvDocument {\n const lines = text.split(/\\r?\\n/);\n const entries: Array<DotenvDocument[\"entries\"][number]> = [];\n const prefix: Partial<Record<Bucket, string>> = {};\n let activeBucket: Bucket | undefined;\n let pendingDirectives: MutableDirectives = {};\n\n for (const [index, line] of lines.entries()) {\n const lineNumber = index + 1;\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n\n if (trimmed.startsWith(\"#\")) {\n const comment = trimmed.slice(1).trim();\n if (comment.startsWith(SENTINEL_DIRECTIVE_PREFIX)) {\n const directiveResult = parseDirectiveGroup(comment, lineNumber, pendingDirectives);\n if (directiveResult.sectionBucket) {\n activeBucket = directiveResult.sectionBucket;\n if (directiveResult.sectionPrefix) {\n prefix[directiveResult.sectionBucket] = directiveResult.sectionPrefix;\n }\n pendingDirectives = {};\n } else {\n pendingDirectives = directiveResult.directives;\n }\n }\n continue;\n }\n\n const assignmentMatch = KEY_ASSIGNMENT_PATTERN.exec(trimmed);\n if (!assignmentMatch) {\n throw new Error(`Malformed assignment at line ${lineNumber}: \"${line}\"`);\n }\n\n const key = assignmentMatch[1];\n const rightHandSide = assignmentMatch[2];\n const split = splitValueAndInlineComment(rightHandSide);\n const value = normalizeAssignedValue(split.value.trim());\n\n let directives = { ...pendingDirectives };\n if (split.comment) {\n const inlineComment = split.comment.trim();\n if (inlineComment.startsWith(SENTINEL_DIRECTIVE_PREFIX)) {\n const parsedInline = parseDirectiveGroup(inlineComment, lineNumber, directives);\n if (parsedInline.sectionBucket) {\n throw new Error(`Section directives are not allowed inline at line ${lineNumber}`);\n }\n directives = parsedInline.directives;\n }\n }\n\n entries.push({\n key,\n value,\n line: lineNumber,\n sectionBucket: activeBucket,\n directives,\n });\n pendingDirectives = {};\n }\n\n const hasPrefix = Object.values(prefix).some((v) => v && v.length > 0);\n return { entries, ...(hasPrefix ? { prefix } : {}) };\n}\n\nfunction stringifyDotenvDocument(document: DotenvDocument): string {\n if (!document || !Array.isArray(document.entries)) {\n throw new Error(\"Invalid dotenv document: expected an entries array\");\n }\n\n const grouped = {\n server: [] as Array<DotenvDocument[\"entries\"][number]>,\n client: [] as Array<DotenvDocument[\"entries\"][number]>,\n shared: [] as Array<DotenvDocument[\"entries\"][number]>,\n };\n\n const sortedEntries = [...document.entries].sort((left, right) => {\n if (left.line !== right.line) return left.line - right.line;\n return left.key.localeCompare(right.key);\n });\n\n for (const entry of sortedEntries) {\n const bucket: Bucket = entry.directives.bucket ?? entry.sectionBucket ?? \"server\";\n grouped[bucket].push(entry);\n }\n\n const lines: string[] = [];\n\n for (const bucket of BUCKETS) {\n const pfx = document.prefix?.[bucket];\n lines.push(pfx && pfx.length > 0 ? `# @${bucket} ${pfx}` : `# @${bucket}`);\n lines.push(\"\");\n\n for (const entry of grouped[bucket]) {\n const optional = entry.directives.optional ?? false;\n const redacted = entry.directives.redacted ?? false;\n const noDefault = entry.directives.hasDefault === false;\n\n if (entry.directives.type === \"stringEnum\" && entry.directives.stringEnumValues) {\n lines.push(`# @type enum ${entry.directives.stringEnumValues.join(\",\")}`);\n }\n if (optional) lines.push(\"# @optional\");\n if (noDefault) lines.push(\"# @no-default\");\n if (redacted) lines.push(\"# @redacted\");\n lines.push(`${entry.key}=${serializeEnvValue(entry.value)}`);\n lines.push(\"\");\n }\n }\n\n while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction splitValueAndInlineComment(value: string): { value: string; comment?: string } {\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let escaped = false;\n\n for (let index = 0; index < value.length; index += 1) {\n const char = value[index];\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n\n if (char === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n continue;\n }\n\n if (char === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n continue;\n }\n\n if (!inSingleQuote && !inDoubleQuote && char === \"#\") {\n return {\n value: value.slice(0, index).trimEnd(),\n comment: value.slice(index + 1),\n };\n }\n }\n\n return { value };\n}\n\nfunction parseDirectiveGroup(\n directiveText: string,\n lineNumber: number,\n base: MutableDirectives,\n): { directives: MutableDirectives; sectionBucket?: Bucket; sectionPrefix?: string } {\n const directives = { ...base };\n const tokens = directiveText\n .split(/\\s+(?=@)/g)\n .map((token) => token.trim())\n .filter(Boolean);\n\n let sectionBucket: Bucket | undefined;\n let sectionPrefix: string | undefined;\n for (const token of tokens) {\n const parsed = parseDirectiveToken(token, lineNumber);\n if (\"type\" in parsed) directives.type = parsed.type;\n if (\"optional\" in parsed) directives.optional = parsed.optional;\n if (\"hasDefault\" in parsed) directives.hasDefault = parsed.hasDefault;\n if (\"redacted\" in parsed) directives.redacted = parsed.redacted;\n if (\"bucket\" in parsed) directives.bucket = parsed.bucket;\n if (\"stringEnumValues\" in parsed) directives.stringEnumValues = parsed.stringEnumValues;\n if (\"sectionBucket\" in parsed) sectionBucket = parsed.sectionBucket;\n if (\"sectionPrefix\" in parsed) sectionPrefix = parsed.sectionPrefix;\n }\n\n return { directives, sectionBucket, sectionPrefix };\n}\n\nfunction parseDirectiveToken(\n token: string,\n lineNumber: number,\n): MutableDirectives & { sectionBucket?: Bucket; sectionPrefix?: string } {\n if (!token.startsWith(\"@\")) {\n throw new Error(`Malformed directive at line ${lineNumber}: \"${token}\"`);\n }\n\n const spaceIndex = token.indexOf(\" \");\n const name = (spaceIndex === -1 ? token.slice(1) : token.slice(1, spaceIndex)).trim();\n const value = (spaceIndex === -1 ? \"\" : token.slice(spaceIndex + 1)).trim();\n\n if (name === \"server\" || name === \"client\" || name === \"shared\") {\n return value.length > 0\n ? { sectionBucket: name, sectionPrefix: value }\n : { sectionBucket: name };\n }\n\n if (name === \"type\") {\n if (value.length === 0) {\n throw new Error(`Directive \"@type\" requires a value at line ${lineNumber}`);\n }\n if (value === \"enum\" || value.startsWith(\"enum \")) {\n const raw = value.slice(4).trim();\n if (raw.length === 0) {\n throw new Error(`Directive \"@type enum\" requires comma-separated values at line ${lineNumber}`);\n }\n const stringEnumValues = raw.split(\",\").map((v) => v.trim()).filter(Boolean);\n if (stringEnumValues.length === 0) {\n throw new Error(`Directive \"@type enum\" requires at least one value at line ${lineNumber}`);\n }\n return { type: \"stringEnum\", stringEnumValues };\n }\n return { type: parseSchemaKind(value, lineNumber) };\n }\n\n if (name === \"optional\") {\n return { optional: parseBooleanDirective(value || undefined, true) };\n }\n\n if (name === \"no-default\") {\n return { hasDefault: false };\n }\n\n if (name === \"redacted\") {\n return { redacted: parseBooleanDirective(value || undefined, true) };\n }\n\n if (name === \"bucket\") {\n if (value.length === 0) {\n throw new Error(`Directive \"@bucket\" requires a value at line ${lineNumber}`);\n }\n if (!isBucket(value)) {\n throw new Error(`Invalid bucket \"${value}\" at line ${lineNumber}`);\n }\n return { bucket: value };\n }\n\n throw new Error(`Unknown directive \"@${name}\" at line ${lineNumber}`);\n}\n\nfunction parseSchemaKind(rawValue: string, lineNumber: number): SchemaKind {\n const normalized = rawValue.trim().toLowerCase();\n const aliasMap: Record<string, SchemaKind> = {\n string: \"requiredString\",\n requiredstring: \"requiredString\",\n bool: \"boolean\",\n boolean: \"boolean\",\n int: \"integer\",\n integer: \"integer\",\n number: \"number\",\n port: \"port\",\n url: \"url\",\n postgresurl: \"postgresUrl\",\n redisurl: \"redisUrl\",\n mongourl: \"mongoUrl\",\n mysqlurl: \"mysqlUrl\",\n commaseparated: \"commaSeparated\",\n commaseparatednumbers: \"commaSeparatedNumbers\",\n commaseparatedurls: \"commaSeparatedUrls\",\n json: \"json\",\n \"json(schema.unknown)\": \"json\",\n };\n\n const resolved = aliasMap[normalized];\n if (!resolved || !SCHEMA_KINDS.includes(resolved)) {\n throw new Error(`Invalid @type value \"${rawValue}\" at line ${lineNumber}`);\n }\n\n return resolved;\n}\n\nfunction normalizeAssignedValue(value: string): string {\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n return value.slice(1, -1);\n }\n return value;\n}\n\nfunction serializeEnvValue(value: string): string {\n const literal = toEnvValueLiteral(value);\n if (literal.length === 0) return \"\";\n\n if (/[\\s#]/.test(literal)) {\n return JSON.stringify(literal);\n }\n\n return literal;\n}\n\nfunction isBucket(value: string): value is Bucket {\n return BUCKETS.includes(value as Bucket);\n}\n",
8
+ "import { Option, Redacted, Schema, SchemaAST } from \"effect\";\n\nimport { encodeDotenvText } from \"./cli/dotenv-codec.ts\";\nimport type { Bucket, SchemaKind } from \"./cli/types.ts\";\nimport {\n DEFAULT_VALUE_ANNOTATION,\n OPTIONAL_ANNOTATION,\n PLACEHOLDER_ANNOTATION,\n REDACTED_ANNOTATION,\n SCHEMA_KIND_ANNOTATION,\n STRING_ENUM_VALUES_ANNOTATION,\n} from \"./schemas.ts\";\nimport type { SchemaDict } from \"./types.ts\";\n\nconst BUCKETS = [\"server\", \"client\", \"shared\"] as const;\n\ninterface EnvDefinition {\n prefix?: { server?: string; client?: string; shared?: string };\n server?: SchemaDict;\n client?: SchemaDict;\n shared?: SchemaDict;\n}\n\nexport interface ExaminedSchema {\n readonly kind: SchemaKind | undefined;\n readonly placeholder: string | undefined;\n readonly optional: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue: unknown;\n readonly redacted: boolean;\n readonly stringEnumValues?: readonly string[];\n}\n\nfunction getAnn<T>(ast: SchemaAST.Annotated, key: symbol): T | undefined {\n return Option.getOrUndefined(SchemaAST.getAnnotation<T>(ast, key));\n}\n\nexport function examineSchema(schema: Schema.Schema.Any): ExaminedSchema {\n let ast: SchemaAST.AST = schema.ast;\n let isRedacted = false;\n let isOptional = false;\n let hasDefault = false;\n let defaultValue: unknown = undefined;\n\n // Peel redacted layer (outermost Transformation with REDACTED_ANNOTATION)\n if (SchemaAST.isTransformation(ast) && getAnn<boolean>(ast, REDACTED_ANNOTATION)) {\n isRedacted = true;\n ast = ast.from;\n }\n\n // Peel withDefault layer (Transformation with DEFAULT_VALUE_ANNOTATION)\n if (SchemaAST.isTransformation(ast) && getAnn(ast, DEFAULT_VALUE_ANNOTATION) !== undefined) {\n hasDefault = true;\n defaultValue = getAnn(ast, DEFAULT_VALUE_ANNOTATION);\n // withDefault wraps UndefinedOr(schema) -> schema, `from` is the Union\n const fromAst = ast.from;\n if (SchemaAST.isUnion(fromAst)) {\n const nonUndefined = fromAst.types.find((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined) ast = nonUndefined;\n }\n }\n\n // Peel optional layer (Union with OPTIONAL_ANNOTATION)\n if (SchemaAST.isUnion(ast) && getAnn<boolean>(ast, OPTIONAL_ANNOTATION)) {\n isOptional = true;\n const nonUndefined = ast.types.find((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined) ast = nonUndefined;\n }\n\n const kind = getAnn<SchemaKind>(ast, SCHEMA_KIND_ANNOTATION);\n const placeholder = getAnn<string>(ast, PLACEHOLDER_ANNOTATION);\n const stringEnumValues =\n kind === \"stringEnum\"\n ? getAnn<readonly string[]>(ast, STRING_ENUM_VALUES_ANNOTATION)\n : undefined;\n\n return {\n kind,\n placeholder,\n optional: isOptional,\n hasDefault,\n defaultValue,\n redacted: isRedacted,\n stringEnumValues,\n };\n}\n\nexport function buildEnvExample(definition: EnvDefinition): string {\n const prefix = {\n server: definition.prefix?.server ?? \"\",\n client: definition.prefix?.client ?? \"\",\n shared: definition.prefix?.shared ?? \"\",\n };\n\n const entries = [];\n let line = 1;\n\n for (const bucket of BUCKETS) {\n const schemas = definition[bucket] ?? {};\n const keys = Object.keys(schemas).sort();\n\n for (const key of keys) {\n const schema = schemas[key];\n const examined = examineSchema(schema);\n const runtimeKey = `${prefix[bucket]}${key}`;\n\n let value: string;\n if (examined.hasDefault) {\n value = encodeDefault(schema, examined);\n } else {\n value = examined.placeholder ?? \"CHANGE_ME\";\n }\n\n entries.push({\n key: runtimeKey,\n value,\n line,\n sectionBucket: bucket as Bucket,\n directives: {\n type: examined.kind,\n bucket: bucket as Bucket,\n optional: examined.optional,\n hasDefault: examined.hasDefault,\n redacted: examined.redacted,\n stringEnumValues: examined.stringEnumValues,\n },\n });\n line += 1;\n }\n }\n\n const hasPrefix = Object.values(prefix).some((v) => v.length > 0);\n return encodeDotenvText({ entries, ...(hasPrefix ? { prefix } : {}) });\n}\n\nfunction encodeDefault(schema: Schema.Schema.Any, examined: ExaminedSchema): string {\n // Encode the default value back to its string representation using the\n // schema's encode direction. For redacted schemas we wrap in Redacted first.\n try {\n let valueToEncode = examined.defaultValue;\n if (examined.redacted) {\n valueToEncode = Redacted.make(valueToEncode);\n }\n const encoded = Schema.encodeSync(schema as Schema.Schema<unknown, unknown, never>)(\n valueToEncode,\n );\n return String(encoded ?? \"\");\n } catch {\n return stringifyDefault(examined);\n }\n}\n\nfunction stringifyDefault(examined: ExaminedSchema): string {\n const val = examined.defaultValue;\n if (val === undefined || val === null) return \"\";\n if (Array.isArray(val)) return val.map(String).join(\",\");\n if (typeof val === \"object\") return JSON.stringify(val);\n return String(val);\n}\n",
9
+ "import { Schema } from \"effect\";\n\nimport { parseBooleanDirective, toEnvValueLiteral } from \"./literals.ts\";\nimport {\n BUCKETS,\n SCHEMA_KINDS,\n type Bucket,\n type DotenvDocument,\n type SchemaKind,\n} from \"./types.ts\";\n\ntype MutableDirectives = {\n type?: SchemaKind;\n optional?: boolean;\n hasDefault?: boolean;\n redacted?: boolean;\n bucket?: Bucket;\n stringEnumValues?: readonly string[];\n};\n\nconst SENTINEL_DIRECTIVE_PREFIX = \"@\";\nconst KEY_ASSIGNMENT_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s*=(.*)$/;\n\nconst DotenvCodec = Schema.transform(Schema.String, Schema.Unknown, {\n decode: (text) => parseDotenvText(String(text)),\n encode: (value) => stringifyDotenvDocument(value as DotenvDocument),\n});\n\nexport function decodeDotenvText(text: string): DotenvDocument {\n return Schema.decodeUnknownSync(DotenvCodec)(text) as DotenvDocument;\n}\n\nexport function encodeDotenvText(document: DotenvDocument): string {\n return Schema.encodeSync(DotenvCodec)(document) as string;\n}\n\nfunction parseDotenvText(text: string): DotenvDocument {\n const lines = text.split(/\\r?\\n/);\n const entries: Array<DotenvDocument[\"entries\"][number]> = [];\n const prefix: Partial<Record<Bucket, string>> = {};\n let activeBucket: Bucket | undefined;\n let pendingDirectives: MutableDirectives = {};\n\n for (const [index, line] of lines.entries()) {\n const lineNumber = index + 1;\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n\n if (trimmed.startsWith(\"#\")) {\n const comment = trimmed.slice(1).trim();\n if (comment.startsWith(SENTINEL_DIRECTIVE_PREFIX)) {\n const directiveResult = parseDirectiveGroup(comment, lineNumber, pendingDirectives);\n if (directiveResult.sectionBucket) {\n activeBucket = directiveResult.sectionBucket;\n if (directiveResult.sectionPrefix) {\n prefix[directiveResult.sectionBucket] = directiveResult.sectionPrefix;\n }\n pendingDirectives = {};\n } else {\n pendingDirectives = directiveResult.directives;\n }\n }\n continue;\n }\n\n const assignmentMatch = KEY_ASSIGNMENT_PATTERN.exec(trimmed);\n if (!assignmentMatch) {\n throw new Error(`Malformed assignment at line ${lineNumber}: \"${line}\"`);\n }\n\n const key = assignmentMatch[1];\n const rightHandSide = assignmentMatch[2];\n const split = splitValueAndInlineComment(rightHandSide);\n const value = normalizeAssignedValue(split.value.trim());\n\n let directives = { ...pendingDirectives };\n if (split.comment) {\n const inlineComment = split.comment.trim();\n if (inlineComment.startsWith(SENTINEL_DIRECTIVE_PREFIX)) {\n const parsedInline = parseDirectiveGroup(inlineComment, lineNumber, directives);\n if (parsedInline.sectionBucket) {\n throw new Error(`Section directives are not allowed inline at line ${lineNumber}`);\n }\n directives = parsedInline.directives;\n }\n }\n\n entries.push({\n key,\n value,\n line: lineNumber,\n sectionBucket: activeBucket,\n directives,\n });\n pendingDirectives = {};\n }\n\n const hasPrefix = Object.values(prefix).some((v) => v && v.length > 0);\n return { entries, ...(hasPrefix ? { prefix } : {}) };\n}\n\nfunction stringifyDotenvDocument(document: DotenvDocument): string {\n if (!document || !Array.isArray(document.entries)) {\n throw new Error(\"Invalid dotenv document: expected an entries array\");\n }\n\n const grouped = {\n server: [] as Array<DotenvDocument[\"entries\"][number]>,\n client: [] as Array<DotenvDocument[\"entries\"][number]>,\n shared: [] as Array<DotenvDocument[\"entries\"][number]>,\n };\n\n const sortedEntries = [...document.entries].sort((left, right) => {\n if (left.line !== right.line) return left.line - right.line;\n return left.key.localeCompare(right.key);\n });\n\n for (const entry of sortedEntries) {\n const bucket: Bucket = entry.directives.bucket ?? entry.sectionBucket ?? \"server\";\n grouped[bucket].push(entry);\n }\n\n const lines: string[] = [];\n\n for (const bucket of BUCKETS) {\n const pfx = document.prefix?.[bucket];\n lines.push(pfx && pfx.length > 0 ? `# @${bucket} ${pfx}` : `# @${bucket}`);\n lines.push(\"\");\n\n for (const entry of grouped[bucket]) {\n const optional = entry.directives.optional ?? false;\n const redacted = entry.directives.redacted ?? false;\n const noDefault = entry.directives.hasDefault === false;\n\n if (entry.directives.type === \"stringEnum\" && entry.directives.stringEnumValues) {\n lines.push(`# @type enum ${entry.directives.stringEnumValues.join(\",\")}`);\n }\n if (optional) lines.push(\"# @optional\");\n if (noDefault) lines.push(\"# @no-default\");\n if (redacted) lines.push(\"# @redacted\");\n lines.push(`${entry.key}=${serializeEnvValue(entry.value)}`);\n lines.push(\"\");\n }\n }\n\n while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction splitValueAndInlineComment(value: string): { value: string; comment?: string } {\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let escaped = false;\n\n for (let index = 0; index < value.length; index += 1) {\n const char = value[index];\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n\n if (char === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n continue;\n }\n\n if (char === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n continue;\n }\n\n if (!inSingleQuote && !inDoubleQuote && char === \"#\") {\n return {\n value: value.slice(0, index).trimEnd(),\n comment: value.slice(index + 1),\n };\n }\n }\n\n return { value };\n}\n\nfunction parseDirectiveGroup(\n directiveText: string,\n lineNumber: number,\n base: MutableDirectives,\n): { directives: MutableDirectives; sectionBucket?: Bucket; sectionPrefix?: string } {\n const directives = { ...base };\n const tokens = directiveText\n .split(/\\s+(?=@)/g)\n .map((token) => token.trim())\n .filter(Boolean);\n\n let sectionBucket: Bucket | undefined;\n let sectionPrefix: string | undefined;\n for (const token of tokens) {\n const parsed = parseDirectiveToken(token, lineNumber);\n if (\"type\" in parsed) directives.type = parsed.type;\n if (\"optional\" in parsed) directives.optional = parsed.optional;\n if (\"hasDefault\" in parsed) directives.hasDefault = parsed.hasDefault;\n if (\"redacted\" in parsed) directives.redacted = parsed.redacted;\n if (\"bucket\" in parsed) directives.bucket = parsed.bucket;\n if (\"stringEnumValues\" in parsed) directives.stringEnumValues = parsed.stringEnumValues;\n if (\"sectionBucket\" in parsed) sectionBucket = parsed.sectionBucket;\n if (\"sectionPrefix\" in parsed) sectionPrefix = parsed.sectionPrefix;\n }\n\n return { directives, sectionBucket, sectionPrefix };\n}\n\nfunction parseDirectiveToken(\n token: string,\n lineNumber: number,\n): MutableDirectives & { sectionBucket?: Bucket; sectionPrefix?: string } {\n if (!token.startsWith(\"@\")) {\n throw new Error(`Malformed directive at line ${lineNumber}: \"${token}\"`);\n }\n\n const spaceIndex = token.indexOf(\" \");\n const name = (spaceIndex === -1 ? token.slice(1) : token.slice(1, spaceIndex)).trim();\n const value = (spaceIndex === -1 ? \"\" : token.slice(spaceIndex + 1)).trim();\n\n if (name === \"server\" || name === \"client\" || name === \"shared\") {\n return value.length > 0\n ? { sectionBucket: name, sectionPrefix: value }\n : { sectionBucket: name };\n }\n\n if (name === \"type\") {\n if (value.length === 0) {\n throw new Error(`Directive \"@type\" requires a value at line ${lineNumber}`);\n }\n if (value === \"enum\" || value.startsWith(\"enum \")) {\n const raw = value.slice(4).trim();\n if (raw.length === 0) {\n throw new Error(\n `Directive \"@type enum\" requires comma-separated values at line ${lineNumber}`,\n );\n }\n const stringEnumValues = raw\n .split(\",\")\n .map((v) => v.trim())\n .filter(Boolean);\n if (stringEnumValues.length === 0) {\n throw new Error(`Directive \"@type enum\" requires at least one value at line ${lineNumber}`);\n }\n return { type: \"stringEnum\", stringEnumValues };\n }\n return { type: parseSchemaKind(value, lineNumber) };\n }\n\n if (name === \"optional\") {\n return { optional: parseBooleanDirective(value || undefined, true) };\n }\n\n if (name === \"no-default\") {\n return { hasDefault: false };\n }\n\n if (name === \"redacted\") {\n return { redacted: parseBooleanDirective(value || undefined, true) };\n }\n\n if (name === \"bucket\") {\n if (value.length === 0) {\n throw new Error(`Directive \"@bucket\" requires a value at line ${lineNumber}`);\n }\n if (!isBucket(value)) {\n throw new Error(`Invalid bucket \"${value}\" at line ${lineNumber}`);\n }\n return { bucket: value };\n }\n\n throw new Error(`Unknown directive \"@${name}\" at line ${lineNumber}`);\n}\n\nfunction parseSchemaKind(rawValue: string, lineNumber: number): SchemaKind {\n const normalized = rawValue.trim().toLowerCase();\n const aliasMap: Record<string, SchemaKind> = {\n string: \"requiredString\",\n requiredstring: \"requiredString\",\n bool: \"boolean\",\n boolean: \"boolean\",\n int: \"integer\",\n integer: \"integer\",\n number: \"number\",\n port: \"port\",\n url: \"url\",\n postgresurl: \"postgresUrl\",\n redisurl: \"redisUrl\",\n mongourl: \"mongoUrl\",\n mysqlurl: \"mysqlUrl\",\n commaseparated: \"commaSeparated\",\n commaseparatednumbers: \"commaSeparatedNumbers\",\n commaseparatedurls: \"commaSeparatedUrls\",\n json: \"json\",\n \"json(schema.unknown)\": \"json\",\n };\n\n const resolved = aliasMap[normalized];\n if (!resolved || !SCHEMA_KINDS.includes(resolved)) {\n throw new Error(`Invalid @type value \"${rawValue}\" at line ${lineNumber}`);\n }\n\n return resolved;\n}\n\nfunction normalizeAssignedValue(value: string): string {\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n return value.slice(1, -1);\n }\n return value;\n}\n\nfunction serializeEnvValue(value: string): string {\n const literal = toEnvValueLiteral(value);\n if (literal.length === 0) return \"\";\n\n if (/[\\s#]/.test(literal)) {\n return JSON.stringify(literal);\n }\n\n return literal;\n}\n\nfunction isBucket(value: string): value is Bucket {\n return BUCKETS.includes(value as Bucket);\n}\n",
10
10
  "export function parseLiteral(input: string): unknown {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return \"\";\n }\n\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ) {\n try {\n return JSON.parse(trimmed.replace(/^'/, '\"').replace(/'$/, '\"'));\n } catch {\n return trimmed.slice(1, -1);\n }\n }\n\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n if (trimmed === \"null\") return null;\n\n if (/^[+-]?\\d+(?:\\.\\d+)?$/.test(trimmed)) {\n const value = Number(trimmed);\n if (!Number.isNaN(value)) {\n return value;\n }\n }\n\n if (\n (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n ) {\n try {\n return JSON.parse(trimmed);\n } catch {\n return trimmed;\n }\n }\n\n return trimmed;\n}\n\nexport function toCodeLiteral(value: unknown): string {\n if (typeof value === \"string\") return JSON.stringify(value);\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n return JSON.stringify(value);\n}\n\nexport function toDirectiveLiteral(value: unknown): string {\n if (value === undefined) return \"\";\n return toCodeLiteral(value);\n}\n\nexport function toEnvValueLiteral(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === null || value === undefined) return \"\";\n return JSON.stringify(value);\n}\n\nexport function parseBooleanDirective(value: string | undefined, defaultValue: boolean): boolean {\n if (value === undefined || value.length === 0) {\n return defaultValue;\n }\n\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") return true;\n if (normalized === \"false\") return false;\n throw new Error(`Invalid boolean directive value \"${value}\"`);\n}\n",
11
- "export const BUCKETS = [\"server\", \"client\", \"shared\"] as const;\nexport type Bucket = (typeof BUCKETS)[number];\n\nexport const SCHEMA_KINDS = [\n \"requiredString\",\n \"boolean\",\n \"integer\",\n \"number\",\n \"port\",\n \"url\",\n \"postgresUrl\",\n \"redisUrl\",\n \"mongoUrl\",\n \"mysqlUrl\",\n \"commaSeparated\",\n \"commaSeparatedNumbers\",\n \"commaSeparatedUrls\",\n \"json\",\n \"stringEnum\",\n] as const;\nexport type SchemaKind = (typeof SCHEMA_KINDS)[number];\n\nexport const FRAMEWORKS = [\"nextjs\", \"vite\", \"expo\", \"nuxt\", \"sveltekit\", \"astro\"] as const;\nexport type Framework = (typeof FRAMEWORKS)[number];\n\nexport interface PrefixConfig {\n readonly server: string;\n readonly client: string;\n readonly shared: string;\n}\n\nexport interface ParsedDirectives {\n readonly type?: SchemaKind;\n readonly optional?: boolean;\n readonly hasDefault?: boolean;\n readonly redacted?: boolean;\n readonly bucket?: Bucket;\n readonly stringEnumValues?: readonly string[];\n}\n\nexport interface DotenvAssignment {\n readonly key: string;\n readonly value: string;\n readonly line: number;\n readonly sectionBucket?: Bucket;\n readonly directives: ParsedDirectives;\n}\n\nexport interface DotenvDocument {\n readonly entries: ReadonlyArray<DotenvAssignment>;\n readonly prefix?: Partial<PrefixConfig>;\n}\n\nexport interface InferredVariable {\n readonly schemaKey: string;\n readonly runtimeKey: string;\n readonly bucket: Bucket;\n readonly kind: SchemaKind;\n readonly optional: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue?: unknown;\n readonly redacted: boolean;\n readonly sourceLine: number;\n readonly stringEnumValues?: readonly string[];\n}\n\nexport interface InferredModel {\n readonly prefix: PrefixConfig;\n readonly variables: ReadonlyArray<InferredVariable>;\n readonly runtimeEnv: Readonly<Record<string, string | undefined>>;\n}\n\n",
12
- "import { Function, Schema } from \"effect\";\n\nexport const DEFAULT_VALUE_ANNOTATION = Symbol.for(\"@ayronforge/envil/default-value\");\nexport const SCHEMA_KIND_ANNOTATION = Symbol.for(\"@ayronforge/envil/schema-kind\");\nexport const PLACEHOLDER_ANNOTATION = Symbol.for(\"@ayronforge/envil/placeholder\");\nexport const OPTIONAL_ANNOTATION = Symbol.for(\"@ayronforge/envil/optional\");\nexport const REDACTED_ANNOTATION = Symbol.for(\"@ayronforge/envil/redacted\");\nexport const STRING_ENUM_VALUES_ANNOTATION = Symbol.for(\"@ayronforge/envil/string-enum-values\");\n\nexport const withDefault: {\n <S extends Schema.Schema.Any>(\n defaultValue: NonNullable<Schema.Schema.Type<S>>,\n ): (\n schema: S,\n ) => Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n <S extends Schema.Schema.Any>(\n schema: S,\n defaultValue: NonNullable<Schema.Schema.Type<S>>,\n ): Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n} = Function.dual(\n 2,\n <S extends Schema.Schema.Any>(schema: S, defaultValue: NonNullable<Schema.Schema.Type<S>>) => {\n const withDefaultSchema = Schema.transform(\n Schema.UndefinedOr(schema),\n Schema.typeSchema(schema),\n {\n decode: (value) => value ?? defaultValue,\n encode: (value) => value,\n },\n ) as Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n\n return withDefaultSchema.annotations({\n [DEFAULT_VALUE_ANNOTATION]: defaultValue,\n } as Record<PropertyKey, unknown>);\n },\n);\n\nexport const optional = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.UndefinedOr(schema).annotations({\n [OPTIONAL_ANNOTATION]: true,\n } as Record<PropertyKey, unknown>);\n\nexport const redacted = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.Redacted(schema).annotations({\n [REDACTED_ANNOTATION]: true,\n } as Record<PropertyKey, unknown>);\n\nexport const requiredString = Schema.String.pipe(Schema.minLength(1)).annotations({\n identifier: \"RequiredString\",\n [SCHEMA_KIND_ANNOTATION]: \"requiredString\",\n [PLACEHOLDER_ANNOTATION]: \"CHANGE_ME\",\n} as Record<PropertyKey, unknown>);\n\nexport const optionalString = Schema.UndefinedOr(Schema.String);\n\nexport const boolean = Schema.transform(\n Schema.String.pipe(\n Schema.filter((s) => [\"true\", \"false\", \"1\", \"0\"].includes(s.toLowerCase()), {\n identifier: \"BooleanString\",\n message: () => \"Expected 'true', 'false', '1', or '0'\",\n }),\n ),\n Schema.Boolean,\n {\n decode: (s) => s.toLowerCase() === \"true\" || s === \"1\",\n encode: (b) => (b ? \"true\" : \"false\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"boolean\",\n [PLACEHOLDER_ANNOTATION]: \"true\",\n} as Record<PropertyKey, unknown>);\n\nexport const integer = Schema.NumberFromString.pipe(Schema.int()).annotations({\n identifier: \"Integer\",\n [SCHEMA_KIND_ANNOTATION]: \"integer\",\n [PLACEHOLDER_ANNOTATION]: \"123\",\n} as Record<PropertyKey, unknown>);\n\nexport const number = Schema.NumberFromString.annotations({\n identifier: \"Number\",\n [SCHEMA_KIND_ANNOTATION]: \"number\",\n [PLACEHOLDER_ANNOTATION]: \"3.14\",\n} as Record<PropertyKey, unknown>);\n\nexport const positiveNumber = Schema.NumberFromString.pipe(Schema.positive()).annotations({\n identifier: \"PositiveNumber\",\n});\n\nexport const nonNegativeNumber = Schema.NumberFromString.pipe(Schema.nonNegative()).annotations({\n identifier: \"NonNegativeNumber\",\n});\n\nexport const port = Schema.NumberFromString.pipe(\n Schema.int(),\n Schema.between(1, 65535),\n).annotations({\n identifier: \"Port\",\n [SCHEMA_KIND_ANNOTATION]: \"port\",\n [PLACEHOLDER_ANNOTATION]: \"3000\",\n} as Record<PropertyKey, unknown>);\n\nexport const url = Schema.String.pipe(\n Schema.filter(\n (s) => {\n try {\n new URL(s);\n return s.startsWith(\"http://\") || s.startsWith(\"https://\");\n } catch {\n return false;\n }\n },\n { identifier: \"Url\", message: () => \"Expected a valid HTTP or HTTPS URL\" },\n ),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"url\",\n [PLACEHOLDER_ANNOTATION]: \"https://example.com\",\n} as Record<PropertyKey, unknown>);\nexport type Url = Schema.Schema.Type<typeof url>;\n\nexport const postgresUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"postgres://\") || s.startsWith(\"postgresql://\"), {\n identifier: \"PostgresUrl\",\n message: () => \"Expected a valid PostgreSQL connection URL\",\n }),\n Schema.pattern(/^(postgres|postgresql):\\/\\/[^:]+:[^@]+@[^:]+:\\d+\\/.+$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"postgresUrl\",\n [PLACEHOLDER_ANNOTATION]: \"postgres://user:pass@localhost:5432/app\",\n} as Record<PropertyKey, unknown>);\nexport type PostgresUrl = Schema.Schema.Type<typeof postgresUrl>;\n\nexport const redisUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"redis://\") || s.startsWith(\"rediss://\"), {\n identifier: \"RedisUrl\",\n message: () => \"Expected a valid Redis connection URL\",\n }),\n Schema.pattern(/^rediss?:\\/\\/(?:[^:]+:[^@]+@)?[^:]+(?::\\d+)?(?:\\/\\d+)?$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"redisUrl\",\n [PLACEHOLDER_ANNOTATION]: \"redis://localhost:6379\",\n} as Record<PropertyKey, unknown>);\nexport type RedisUrl = Schema.Schema.Type<typeof redisUrl>;\n\nexport const mongoUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"mongodb://\") || s.startsWith(\"mongodb+srv://\"), {\n identifier: \"MongoUrl\",\n message: () => \"Expected a valid MongoDB connection URL\",\n }),\n Schema.pattern(/^mongodb(\\+srv)?:\\/\\/(?:[^:]+:[^@]+@)?[^/]+(?:\\/[^?]*)?(?:\\?.*)?$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"mongoUrl\",\n [PLACEHOLDER_ANNOTATION]: \"mongodb://localhost:27017/app\",\n} as Record<PropertyKey, unknown>);\nexport type MongoUrl = Schema.Schema.Type<typeof mongoUrl>;\n\nexport const mysqlUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"mysql://\") || s.startsWith(\"mysqls://\"), {\n identifier: \"MysqlUrl\",\n message: () => \"Expected a valid MySQL connection URL\",\n }),\n Schema.pattern(/^mysqls?:\\/\\/[^:]+:[^@]+@[^:]+:\\d+\\/.+$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"mysqlUrl\",\n [PLACEHOLDER_ANNOTATION]: \"mysql://user:pass@localhost:3306/app\",\n} as Record<PropertyKey, unknown>);\nexport type MysqlUrl = Schema.Schema.Type<typeof mysqlUrl>;\n\nexport const commaSeparated = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(Schema.String)),\n {\n decode: (s) => s.split(\",\").map((x) => x.trim()),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparated\",\n [PLACEHOLDER_ANNOTATION]: \"alpha,beta,gamma\",\n} as Record<PropertyKey, unknown>);\n\nexport const commaSeparatedNumbers = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(Schema.Number)),\n {\n decode: (s) =>\n s.split(\",\").map((x) => {\n const n = Number(x.trim());\n if (Number.isNaN(n)) throw new Error(`\"${x.trim()}\" is not a valid number`);\n return n;\n }),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparatedNumbers\",\n [PLACEHOLDER_ANNOTATION]: \"1,2,3\",\n} as Record<PropertyKey, unknown>);\n\nexport const commaSeparatedUrls = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(url)),\n {\n decode: (s) => s.split(\",\").map((x) => Schema.decodeUnknownSync(url)(x.trim())),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparatedUrls\",\n [PLACEHOLDER_ANNOTATION]: \"https://one.example.com,https://two.example.com\",\n} as Record<PropertyKey, unknown>);\n\nexport const stringEnum = <T extends readonly [string, ...string[]]>(values: T) =>\n Schema.Literal(...values).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"stringEnum\",\n [STRING_ENUM_VALUES_ANNOTATION]: values,\n [PLACEHOLDER_ANNOTATION]: values[0],\n } as Record<PropertyKey, unknown>);\n\nexport const json = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.parseJson(schema).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"json\",\n [PLACEHOLDER_ANNOTATION]: '{\"key\":\"value\"}',\n } as Record<PropertyKey, unknown>);\n",
11
+ "export const BUCKETS = [\"server\", \"client\", \"shared\"] as const;\nexport type Bucket = (typeof BUCKETS)[number];\n\nexport const SCHEMA_KINDS = [\n \"requiredString\",\n \"boolean\",\n \"integer\",\n \"number\",\n \"port\",\n \"url\",\n \"postgresUrl\",\n \"redisUrl\",\n \"mongoUrl\",\n \"mysqlUrl\",\n \"commaSeparated\",\n \"commaSeparatedNumbers\",\n \"commaSeparatedUrls\",\n \"json\",\n \"stringEnum\",\n] as const;\nexport type SchemaKind = (typeof SCHEMA_KINDS)[number];\n\nexport const FRAMEWORKS = [\"nextjs\", \"vite\", \"expo\", \"nuxt\", \"sveltekit\", \"astro\"] as const;\nexport type Framework = (typeof FRAMEWORKS)[number];\n\nexport interface PrefixConfig {\n readonly server: string;\n readonly client: string;\n readonly shared: string;\n}\n\nexport interface ParsedDirectives {\n readonly type?: SchemaKind;\n readonly optional?: boolean;\n readonly hasDefault?: boolean;\n readonly redacted?: boolean;\n readonly bucket?: Bucket;\n readonly stringEnumValues?: readonly string[];\n}\n\nexport interface DotenvAssignment {\n readonly key: string;\n readonly value: string;\n readonly line: number;\n readonly sectionBucket?: Bucket;\n readonly directives: ParsedDirectives;\n}\n\nexport interface DotenvDocument {\n readonly entries: ReadonlyArray<DotenvAssignment>;\n readonly prefix?: Partial<PrefixConfig>;\n}\n\nexport interface InferredVariable {\n readonly schemaKey: string;\n readonly runtimeKey: string;\n readonly bucket: Bucket;\n readonly kind: SchemaKind;\n readonly optional: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue?: unknown;\n readonly redacted: boolean;\n readonly sourceLine: number;\n readonly stringEnumValues?: readonly string[];\n}\n\nexport interface InferredModel {\n readonly prefix: PrefixConfig;\n readonly variables: ReadonlyArray<InferredVariable>;\n readonly runtimeEnv: Readonly<Record<string, string | undefined>>;\n}\n",
12
+ "import { Function, Schema } from \"effect\";\n\nexport const DEFAULT_VALUE_ANNOTATION = Symbol.for(\"@ayronforge/envil/default-value\");\nexport const SCHEMA_KIND_ANNOTATION = Symbol.for(\"@ayronforge/envil/schema-kind\");\nexport const PLACEHOLDER_ANNOTATION = Symbol.for(\"@ayronforge/envil/placeholder\");\nexport const OPTIONAL_ANNOTATION = Symbol.for(\"@ayronforge/envil/optional\");\nexport const REDACTED_ANNOTATION = Symbol.for(\"@ayronforge/envil/redacted\");\nexport const STRING_ENUM_VALUES_ANNOTATION = Symbol.for(\"@ayronforge/envil/string-enum-values\");\n\nexport const withDefault: {\n <S extends Schema.Schema.Any>(\n defaultValue: NonNullable<Schema.Schema.Type<S>>,\n ): (\n schema: S,\n ) => Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n <S extends Schema.Schema.Any>(\n schema: S,\n defaultValue: NonNullable<Schema.Schema.Type<S>>,\n ): Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n} = Function.dual(\n 2,\n <S extends Schema.Schema.Any>(schema: S, defaultValue: NonNullable<Schema.Schema.Type<S>>) => {\n const withDefaultSchema = Schema.transform(\n Schema.UndefinedOr(schema),\n Schema.typeSchema(schema),\n {\n decode: (value) => value ?? defaultValue,\n encode: (value) => value,\n },\n ) as Schema.transform<\n Schema.UndefinedOr<S>,\n Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>\n >;\n\n return withDefaultSchema.annotations({\n [DEFAULT_VALUE_ANNOTATION]: defaultValue,\n } as Record<PropertyKey, unknown>);\n },\n);\n\nexport const optional = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.UndefinedOr(schema).annotations({\n [OPTIONAL_ANNOTATION]: true,\n } as Record<PropertyKey, unknown>);\n\nexport const redacted = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.Redacted(schema).annotations({\n [REDACTED_ANNOTATION]: true,\n } as Record<PropertyKey, unknown>);\n\nexport const requiredString = Schema.String.pipe(Schema.minLength(1)).annotations({\n identifier: \"RequiredString\",\n [SCHEMA_KIND_ANNOTATION]: \"requiredString\",\n [PLACEHOLDER_ANNOTATION]: \"CHANGE_ME\",\n} as Record<PropertyKey, unknown>);\n\nexport const boolean = Schema.transform(\n Schema.String.pipe(\n Schema.filter((s) => [\"true\", \"false\", \"1\", \"0\"].includes(s.toLowerCase()), {\n identifier: \"BooleanString\",\n message: () => \"Expected 'true', 'false', '1', or '0'\",\n }),\n ),\n Schema.Boolean,\n {\n decode: (s) => s.toLowerCase() === \"true\" || s === \"1\",\n encode: (b) => (b ? \"true\" : \"false\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"boolean\",\n [PLACEHOLDER_ANNOTATION]: \"true\",\n} as Record<PropertyKey, unknown>);\n\nexport const integer = Schema.NumberFromString.pipe(Schema.int()).annotations({\n identifier: \"Integer\",\n [SCHEMA_KIND_ANNOTATION]: \"integer\",\n [PLACEHOLDER_ANNOTATION]: \"123\",\n} as Record<PropertyKey, unknown>);\n\nexport const number = Schema.NumberFromString.annotations({\n identifier: \"Number\",\n [SCHEMA_KIND_ANNOTATION]: \"number\",\n [PLACEHOLDER_ANNOTATION]: \"3.14\",\n} as Record<PropertyKey, unknown>);\n\nexport const positiveNumber = Schema.NumberFromString.pipe(Schema.positive()).annotations({\n identifier: \"PositiveNumber\",\n});\n\nexport const nonNegativeNumber = Schema.NumberFromString.pipe(Schema.nonNegative()).annotations({\n identifier: \"NonNegativeNumber\",\n});\n\nexport const port = Schema.NumberFromString.pipe(\n Schema.int(),\n Schema.between(1, 65535),\n).annotations({\n identifier: \"Port\",\n [SCHEMA_KIND_ANNOTATION]: \"port\",\n [PLACEHOLDER_ANNOTATION]: \"3000\",\n} as Record<PropertyKey, unknown>);\n\nexport const url = Schema.String.pipe(\n Schema.filter(\n (s) => {\n try {\n new URL(s);\n return s.startsWith(\"http://\") || s.startsWith(\"https://\");\n } catch {\n return false;\n }\n },\n { identifier: \"Url\", message: () => \"Expected a valid HTTP or HTTPS URL\" },\n ),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"url\",\n [PLACEHOLDER_ANNOTATION]: \"https://example.com\",\n} as Record<PropertyKey, unknown>);\nexport type Url = Schema.Schema.Type<typeof url>;\n\nexport const postgresUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"postgres://\") || s.startsWith(\"postgresql://\"), {\n identifier: \"PostgresUrl\",\n message: () => \"Expected a valid PostgreSQL connection URL\",\n }),\n Schema.pattern(/^(postgres|postgresql):\\/\\/[^:]+:[^@]+@[^:]+:\\d+\\/.+$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"postgresUrl\",\n [PLACEHOLDER_ANNOTATION]: \"postgres://user:pass@localhost:5432/app\",\n} as Record<PropertyKey, unknown>);\nexport type PostgresUrl = Schema.Schema.Type<typeof postgresUrl>;\n\nexport const redisUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"redis://\") || s.startsWith(\"rediss://\"), {\n identifier: \"RedisUrl\",\n message: () => \"Expected a valid Redis connection URL\",\n }),\n Schema.pattern(/^rediss?:\\/\\/(?:[^:]+:[^@]+@)?[^:]+(?::\\d+)?(?:\\/\\d+)?$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"redisUrl\",\n [PLACEHOLDER_ANNOTATION]: \"redis://localhost:6379\",\n} as Record<PropertyKey, unknown>);\nexport type RedisUrl = Schema.Schema.Type<typeof redisUrl>;\n\nexport const mongoUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"mongodb://\") || s.startsWith(\"mongodb+srv://\"), {\n identifier: \"MongoUrl\",\n message: () => \"Expected a valid MongoDB connection URL\",\n }),\n Schema.pattern(/^mongodb(\\+srv)?:\\/\\/(?:[^:]+:[^@]+@)?[^/]+(?:\\/[^?]*)?(?:\\?.*)?$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"mongoUrl\",\n [PLACEHOLDER_ANNOTATION]: \"mongodb://localhost:27017/app\",\n} as Record<PropertyKey, unknown>);\nexport type MongoUrl = Schema.Schema.Type<typeof mongoUrl>;\n\nexport const mysqlUrl = Schema.String.pipe(\n Schema.filter((s) => s.startsWith(\"mysql://\") || s.startsWith(\"mysqls://\"), {\n identifier: \"MysqlUrl\",\n message: () => \"Expected a valid MySQL connection URL\",\n }),\n Schema.pattern(/^mysqls?:\\/\\/[^:]+:[^@]+@[^:]+:\\d+\\/.+$/),\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"mysqlUrl\",\n [PLACEHOLDER_ANNOTATION]: \"mysql://user:pass@localhost:3306/app\",\n} as Record<PropertyKey, unknown>);\nexport type MysqlUrl = Schema.Schema.Type<typeof mysqlUrl>;\n\nexport const commaSeparated = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(Schema.String)),\n {\n decode: (s) => s.split(\",\").map((x) => x.trim()),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparated\",\n [PLACEHOLDER_ANNOTATION]: \"alpha,beta,gamma\",\n} as Record<PropertyKey, unknown>);\n\nexport const commaSeparatedNumbers = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(Schema.Number)),\n {\n decode: (s) =>\n s.split(\",\").map((x) => {\n const n = Number(x.trim());\n if (Number.isNaN(n)) throw new Error(`\"${x.trim()}\" is not a valid number`);\n return n;\n }),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparatedNumbers\",\n [PLACEHOLDER_ANNOTATION]: \"1,2,3\",\n} as Record<PropertyKey, unknown>);\n\nexport const commaSeparatedUrls = Schema.transform(\n Schema.String,\n Schema.mutable(Schema.Array(url)),\n {\n decode: (s) => s.split(\",\").map((x) => Schema.decodeUnknownSync(url)(x.trim())),\n encode: (a) => a.join(\",\"),\n },\n).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"commaSeparatedUrls\",\n [PLACEHOLDER_ANNOTATION]: \"https://one.example.com,https://two.example.com\",\n} as Record<PropertyKey, unknown>);\n\nexport const stringEnum = <T extends readonly [string, ...string[]]>(values: T) =>\n Schema.Literal(...values).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"stringEnum\",\n [STRING_ENUM_VALUES_ANNOTATION]: values,\n [PLACEHOLDER_ANNOTATION]: values[0],\n } as Record<PropertyKey, unknown>);\n\nexport const json = <S extends Schema.Schema.Any>(schema: S) =>\n Schema.parseJson(schema).annotations({\n [SCHEMA_KIND_ANNOTATION]: \"json\",\n [PLACEHOLDER_ANNOTATION]: '{\"key\":\"value\"}',\n } as Record<PropertyKey, unknown>);\n",
13
13
  "import { Effect } from \"effect\";\n\nimport { ResolverError, type ResolverResult, type SecretClient } from \"./types.ts\";\nimport { fillMissingMapValues, keyValueResultsToRecord, strictOrElse } from \"./utils.ts\";\n\nexport { ResolverError } from \"./types.ts\";\n\ninterface RemoteSecretsOptions<K extends string = string> {\n secrets: Record<K, string>;\n client: SecretClient;\n strict?: boolean;\n}\n\nexport function fromRemoteSecrets<K extends string>(\n opts: RemoteSecretsOptions<K>,\n): Effect.Effect<ResolverResult<K>, ResolverError>;\nexport function fromRemoteSecrets(\n opts: RemoteSecretsOptions,\n): Effect.Effect<ResolverResult, ResolverError> {\n return Effect.gen(function* () {\n const { secrets, client, strict = false } = opts;\n const entries = Object.entries(secrets);\n const secretIds = entries.map(([, id]) => id);\n\n const secretValues = new Map<string, string | undefined>();\n\n if (client.getSecrets && secretIds.length > 1) {\n const batchResult = yield* strictOrElse(\n Effect.tryPromise(() => client.getSecrets!(secretIds)),\n {\n strict,\n resolver: \"remote\",\n message: \"Failed to resolve remote secrets batch\",\n fallback: () => new Map<string, string | undefined>(),\n },\n );\n\n for (const [id, value] of batchResult) {\n secretValues.set(id, value);\n }\n fillMissingMapValues(secretIds, secretValues);\n } else {\n const results = yield* Effect.forEach(\n secretIds,\n (secretId) =>\n strictOrElse(\n Effect.tryPromise(() => client.getSecret(secretId)),\n {\n strict,\n resolver: \"remote\",\n message: `Failed to resolve remote secret \"${secretId}\"`,\n fallback: () => undefined,\n },\n ).pipe(Effect.map((value) => ({ envKey: secretId, value }))),\n { concurrency: \"unbounded\" },\n );\n\n for (const { envKey, value } of results) {\n secretValues.set(envKey, value);\n }\n }\n\n return keyValueResultsToRecord(\n entries.map(([envKey, secretId]) => ({\n envKey,\n value: secretValues.get(secretId),\n })),\n );\n });\n}\n",
14
14
  "import { Effect } from \"effect\";\n\nimport { ResolverError } from \"./types.ts\";\n\nexport function toResolverError(resolver: string, message: string, cause?: unknown): ResolverError {\n return new ResolverError({ resolver, message, cause });\n}\n\nexport function tryInitializeClient<A>(\n resolver: string,\n message: string,\n initialize: () => Promise<A>,\n): Effect.Effect<A, ResolverError> {\n return Effect.tryPromise({\n try: initialize,\n catch: (cause) => toResolverError(resolver, message, cause),\n });\n}\n\nexport function strictOrElse<A>(\n effect: Effect.Effect<A, unknown>,\n options: {\n strict: boolean;\n resolver: string;\n message: string;\n fallback: () => A;\n },\n): Effect.Effect<A, ResolverError> {\n return options.strict\n ? effect.pipe(\n Effect.mapError((cause) => toResolverError(options.resolver, options.message, cause)),\n )\n : effect.pipe(Effect.orElseSucceed(options.fallback));\n}\n\nexport function keyValueResultsToRecord<K extends string>(\n values: ReadonlyArray<{ envKey: K; value: string | undefined }>,\n): Record<K, string | undefined> {\n const result = {} as Record<K, string | undefined>;\n for (const { envKey, value } of values) {\n result[envKey] = value;\n }\n return result;\n}\n\nexport function fillMissingMapValues(\n ids: readonly string[],\n values: Map<string, string | undefined>,\n): void {\n for (const id of ids) {\n if (!values.has(id)) {\n values.set(id, undefined);\n }\n }\n}\n",
15
15
  "import { Data } from \"effect\";\n\nexport type ResolverResult<K extends string = string> = Record<K, string | undefined>;\n\nexport class ResolverError extends Data.TaggedError(\"ResolverError\")<{\n readonly resolver: string;\n readonly message: string;\n readonly cause?: unknown;\n}> {}\n\nexport interface SecretClient {\n getSecret: (secretId: string) => Promise<string | undefined>;\n getSecrets?: (secretIds: string[]) => Promise<Map<string, string | undefined>>;\n}\n",
16
16
  "import { Effect } from \"effect\";\n\nimport { createEnv } from \"./env.ts\";\nimport { EnvValidationError } from \"./errors.ts\";\nimport type { ResolverError, ResolverResult } from \"./resolvers/types.ts\";\nimport type {\n AnyEnv,\n EnvOptions,\n EnvResult,\n EnvResultAutoRedacted,\n ExtractResolverKeys,\n PrefixMap,\n PrefixStr,\n SchemaDict,\n} from \"./types.ts\";\n\nexport type SafeCreateEnvSuccess<T> = Readonly<{ success: true; data: T }>;\nexport type SafeCreateEnvFailure<E> = Readonly<{ success: false; error: E }>;\nexport type SafeCreateEnvResult<T, E> = SafeCreateEnvSuccess<T> | SafeCreateEnvFailure<E>;\n\nfunction normalizeEnvValidationError(error: unknown): EnvValidationError {\n return error instanceof EnvValidationError ? error : new EnvValidationError([String(error)]);\n}\n\n// Overload: with resolvers + autoRedactResolver false\nexport function safeCreateEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver: false;\n },\n): Effect.Effect<\n SafeCreateEnvResult<\n EnvResult<TExtends, TServer, TClient, TShared>,\n ResolverError | EnvValidationError\n >,\n never\n>;\n\n// Overload: with resolvers + autoRedactResolver true (default)\nexport function safeCreateEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n const TPrefix extends string | PrefixMap | undefined = undefined,\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver?: true;\n prefix?: TPrefix;\n },\n): Effect.Effect<\n SafeCreateEnvResult<\n EnvResultAutoRedacted<\n TExtends,\n TServer,\n TClient,\n TShared,\n ExtractResolverKeys<TResolvers>,\n PrefixStr<TPrefix>\n >,\n ResolverError | EnvValidationError\n >,\n never\n>;\n\n// Overload: without resolvers + sync result object\nexport function safeCreateEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends>,\n): SafeCreateEnvResult<EnvResult<TExtends, TServer, TClient, TShared>, EnvValidationError>;\n\nexport function safeCreateEnv(\n opts: EnvOptions<SchemaDict, SchemaDict, SchemaDict, readonly AnyEnv[]> & {\n resolvers?: readonly Effect.Effect<ResolverResult<any>, ResolverError>[];\n autoRedactResolver?: boolean;\n },\n):\n | SafeCreateEnvResult<AnyEnv, EnvValidationError>\n | Effect.Effect<SafeCreateEnvResult<AnyEnv, ResolverError | EnvValidationError>, never> {\n if (opts.resolvers !== undefined) {\n try {\n const created = createEnv(opts);\n if (Effect.isEffect(created)) {\n const createdEffect = created as Effect.Effect<\n AnyEnv,\n ResolverError | EnvValidationError,\n never\n >;\n\n return createdEffect.pipe(\n Effect.match({\n onFailure: (error) => ({ success: false, error }) as const,\n onSuccess: (data) => ({ success: true, data }) as const,\n }),\n );\n }\n\n return Effect.succeed({ success: true, data: created } as const);\n } catch (error) {\n return Effect.succeed({\n success: false,\n error: normalizeEnvValidationError(error),\n } as const);\n }\n }\n\n try {\n return { success: true, data: createEnv(opts) } as const;\n } catch (error) {\n return { success: false, error: normalizeEnvValidationError(error) } as const;\n }\n}\n"
17
17
  ],
18
- "mappings": "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",
19
- "debugId": "466803FAE61AC0A564756E2164756E21",
18
+ "mappings": "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",
19
+ "debugId": "D41C1808EDE7815C64756E2164756E21",
20
20
  "names": []
21
21
  }
package/dist/schemas.d.ts CHANGED
@@ -12,7 +12,6 @@ export declare const withDefault: {
12
12
  export declare const optional: <S extends Schema.Schema.Any>(schema: S) => Schema.UndefinedOr<S>;
13
13
  export declare const redacted: <S extends Schema.Schema.Any>(schema: S) => Schema.transform<S, Schema.RedactedFromSelf<Schema.SchemaClass<Schema.Schema.Type<S>, Schema.Schema.Type<S>, never>>>;
14
14
  export declare const requiredString: Schema.refine<string, typeof Schema.String>;
15
- export declare const optionalString: Schema.UndefinedOr<typeof Schema.String>;
16
15
  export declare const boolean: Schema.transform<Schema.filter<typeof Schema.String>, typeof Schema.Boolean>;
17
16
  export declare const integer: Schema.refine<number, typeof Schema.NumberFromString>;
18
17
  export declare const number: Schema.transformOrFail<Schema.SchemaClass<string, string, never>, typeof Schema.Number, never>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ayronforge/envil",
3
- "version": "0.7.0",
3
+ "version": "0.7.2",
4
4
  "description": "Type-safe environment variable validation using Effect Schema",
5
5
  "keywords": [
6
6
  "effect",