@ayronforge/envil 0.6.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/generate-env-ts.d.ts +1 -1
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/types.d.ts +4 -18
- package/dist/cli.js +327 -347
- package/dist/cli.js.map +10 -10
- package/dist/index.d.ts +1 -0
- package/dist/index.js +585 -80
- package/dist/index.js.map +10 -6
- package/dist/introspect.d.ts +25 -0
- package/dist/schemas.d.ts +21 -16
- package/package.json +1 -1
- package/dist/cli/generate-example.d.ts +0 -2
- package/dist/cli/manifest-codec.d.ts +0 -3
package/dist/cli.js.map
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/cli/fs-utils.ts", "../src/cli/dotenv-codec.ts", "../src/cli/literals.ts", "../src/cli/types.ts", "../src/cli/generate-
|
|
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 parseLiteral,\n toDirectiveLiteral,\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 defaultValue?: unknown;\n redacted?: boolean;\n bucket?: Bucket;\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 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 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 return { entries };\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 for (const bucket of BUCKETS) {\n lines.push(`# @${bucket}`);\n lines.push(\"\");\n\n for (const entry of grouped[bucket]) {\n const type = entry.directives.type ?? \"requiredString\";\n const optional = entry.directives.optional ?? false;\n const hasDefault = entry.directives.hasDefault ?? false;\n const redacted = entry.directives.redacted ?? false;\n const defaultLiteral = hasDefault\n ? ` ${toDirectiveLiteral(entry.directives.defaultValue)}`\n : \"\";\n\n lines.push(`# @type ${type}`);\n lines.push(`# @bucket ${bucket}`);\n lines.push(`# @optional ${optional}`);\n lines.push(`# @default${defaultLiteral}`);\n lines.push(`# @redacted ${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 } {\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 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 (\"defaultValue\" in parsed) directives.defaultValue = parsed.defaultValue;\n if (\"redacted\" in parsed) directives.redacted = parsed.redacted;\n if (\"bucket\" in parsed) directives.bucket = parsed.bucket;\n if (\"sectionBucket\" in parsed) sectionBucket = parsed.sectionBucket;\n }\n\n return { directives, sectionBucket };\n}\n\nfunction parseDirectiveToken(\n token: string,\n lineNumber: number,\n): MutableDirectives & { sectionBucket?: Bucket } {\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 if (value.length > 0) {\n throw new Error(`Section directive \"@${name}\" must not include a value (line ${lineNumber})`);\n }\n return { 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 return { type: parseSchemaKind(value, lineNumber) };\n }\n\n if (name === \"optional\") {\n return { optional: parseBooleanDirective(value || undefined, true) };\n }\n\n if (name === \"default\") {\n if (value.length === 0) {\n return { hasDefault: false, defaultValue: undefined };\n }\n\n return { hasDefault: true, defaultValue: parseLiteral(value) };\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] 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
|
|
9
|
-
"import {
|
|
10
|
-
"import
|
|
11
|
-
"import {
|
|
12
|
-
"import
|
|
13
|
-
"#!/usr/bin/env node\n\nimport { ensureWritableTarget, readTextFileOrThrow, writeFileAtomic } from \"./cli/fs-utils.ts\";\nimport {\n decodeDotenvText,\n decodeManifestFromSource,\n generateEnvTs,\n generateExample,\n getDefaultEnvOutputPath,\n getDefaultExampleInputPath,\n inferModel,\n resolveFromCwd,\n} from \"./cli/index.ts\";\nimport { FRAMEWORKS, type Framework, type PrefixConfig } from \"./cli/types.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);\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 const source = await readTextFileOrThrow(inputPath, \"input env.ts\");\n const manifest = decodeManifestFromSource(source);\n const generated = generateExample(manifest);\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): PrefixConfig {\n const fromFramework = options.framework ? FRAMEWORK_PREFIXES[options.framework] : undefined;\n\n return {\n server: options.serverPrefix ?? fromFramework?.server ?? \"\",\n client: options.clientPrefix ?? fromFramework?.client ?? \"\",\n shared: options.sharedPrefix ?? fromFramework?.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 manifest\",\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"
|
|
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
|
+
"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 =\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": ";;;;;;;;;;AAAA;AACA;AAEA,eAAsB,UAAU,CAAC,UAAoC;AAAA,EACnE,IAAI;AAAA,IACF,MAAM,OAAO,QAAQ;AAAA,IACrB,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIJ,SAAS,cAAc,CAAC,KAAa,UAA0B;AAAA,EACpE,OAAO,KAAK,WAAW,QAAQ,IAAI,WAAW,KAAK,QAAQ,KAAK,QAAQ;AAAA;AAG1E,eAAsB,uBAAuB,CAAC,KAA8B;AAAA,EAC1E,MAAM,SAAS,KAAK,KAAK,KAAK,KAAK;AAAA,EACnC,IAAI,MAAM,WAAW,MAAM,GAAG;AAAA,IAC5B,OAAO,KAAK,KAAK,QAAQ,QAAQ;AAAA,EACnC;AAAA,EACA,OAAO,KAAK,KAAK,KAAK,QAAQ;AAAA;AAGhC,eAAsB,0BAA0B,CAAC,KAA8B;AAAA,EAC7E,MAAM,UAAU,KAAK,KAAK,KAAK,QAAQ;AAAA,EACvC,MAAM,SAAS,KAAK,KAAK,KAAK,OAAO,QAAQ;AAAA,EAE7C,IAAI,MAAM,WAAW,OAAO;AAAA,IAAG,OAAO;AAAA,EACtC,IAAI,MAAM,WAAW,MAAM;AAAA,IAAG,OAAO;AAAA,EAErC,MAAM,SAAS,KAAK,KAAK,KAAK,KAAK;AAAA,EACnC,IAAI,MAAM,WAAW,MAAM,GAAG;AAAA,IAC5B,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAGT,eAAsB,oBAAoB,CAAC,YAAoB,OAA+B;AAAA,EAC5F,IAAI,CAAC,SAAU,MAAM,WAAW,UAAU,GAAI;AAAA,IAC5C,MAAM,IAAI,MAAM,gBAAgB,uDAAuD;AAAA,EACzF;AAAA;AAGF,eAAsB,mBAAmB,CAAC,UAAkB,OAAgC;AAAA,EAC1F,IAAI;AAAA,IACF,OAAO,MAAM,SAAS,UAAU,MAAM;AAAA,IACtC,OAAO,OAAO;AAAA,IACd,MAAM,IAAI,MAAM,kBAAkB,aAAa,cAAc,OAAO,KAAK,GAAG;AAAA;AAAA;AAIhF,eAAsB,eAAe,CAAC,YAAoB,UAAiC;AAAA,EACzF,MAAM,YAAY,KAAK,QAAQ,UAAU;AAAA,EACzC,MAAM,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,EAE1C,MAAM,WAAW,KAAK,KACpB,WACA,cAAc,QAAQ,OAAO,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,GAC/E;AAAA,EAEA,MAAM,UAAU,UAAU,UAAU,MAAM;AAAA,EAC1C,MAAM,OAAO,UAAU,UAAU;AAAA;;;AC/DnC;;;ACAO,SAAS,YAAY,CAAC,OAAwB;AAAA,EACnD,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3B,IAAI,QAAQ,WAAW,GAAG;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EAEA,IACG,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,KAC/C,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,GAChD;AAAA,IACA,IAAI;AAAA,MACF,OAAO,KAAK,MAAM,QAAQ,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG,CAAC;AAAA,MAC/D,MAAM;AAAA,MACN,OAAO,QAAQ,MAAM,GAAG,EAAE;AAAA;AAAA,EAE9B;AAAA,EAEA,IAAI,YAAY;AAAA,IAAQ,OAAO;AAAA,EAC/B,IAAI,YAAY;AAAA,IAAS,OAAO;AAAA,EAChC,IAAI,YAAY;AAAA,IAAQ,OAAO;AAAA,EAE/B,IAAI,uBAAuB,KAAK,OAAO,GAAG;AAAA,IACxC,MAAM,QAAQ,OAAO,OAAO;AAAA,IAC5B,IAAI,CAAC,OAAO,MAAM,KAAK,GAAG;AAAA,MACxB,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,IACG,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,KAC/C,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,GAChD;AAAA,IACA,IAAI;AAAA,MACF,OAAO,KAAK,MAAM,OAAO;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA;AAAA,EAEX;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,aAAa,CAAC,OAAwB;AAAA,EACpD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,KAAK,UAAU,KAAK;AAAA,EAC1D,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU;AAAA,IAAW,OAAO,OAAO,KAAK;AAAA,EAChF,IAAI,UAAU;AAAA,IAAM,OAAO;AAAA,EAC3B,IAAI,UAAU;AAAA,IAAW,OAAO;AAAA,EAChC,OAAO,KAAK,UAAU,KAAK;AAAA;AAGtB,SAAS,kBAAkB,CAAC,OAAwB;AAAA,EACzD,IAAI,UAAU;AAAA,IAAW,OAAO;AAAA,EAChC,OAAO,cAAc,KAAK;AAAA;AAGrB,SAAS,iBAAiB,CAAC,OAAwB;AAAA,EACxD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACtC,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU;AAAA,IAAW,OAAO,OAAO,KAAK;AAAA,EAChF,IAAI,UAAU,QAAQ,UAAU;AAAA,IAAW,OAAO;AAAA,EAClD,OAAO,KAAK,UAAU,KAAK;AAAA;AAGtB,SAAS,qBAAqB,CAAC,OAA2B,cAAgC;AAAA,EAC/F,IAAI,UAAU,aAAa,MAAM,WAAW,GAAG;AAAA,IAC7C,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAAA,EAC5C,IAAI,eAAe;AAAA,IAAQ,OAAO;AAAA,EAClC,IAAI,eAAe;AAAA,IAAS,OAAO;AAAA,EACnC,MAAM,IAAI,MAAM,oCAAoC,QAAQ;AAAA;;;ACtEvD,IAAM,UAAU,CAAC,UAAU,UAAU,QAAQ;AAG7C,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,aAAa,CAAC,UAAU,QAAQ,QAAQ,QAAQ,aAAa,OAAO;AAkE1E,IAAM,mBAAmB;;;AF9DhC,IAAM,4BAA4B;AAClC,IAAM,yBAAyB;AAE/B,IAAM,cAAc,OAAO,UAAU,OAAO,QAAQ,OAAO,SAAS;AAAA,EAClE,QAAQ,CAAC,SAAS,gBAAgB,OAAO,IAAI,CAAC;AAAA,EAC9C,QAAQ,CAAC,UAAU,wBAAwB,KAAuB;AACpE,CAAC;AAEM,SAAS,gBAAgB,CAAC,MAA8B;AAAA,EAC7D,OAAO,OAAO,kBAAkB,WAAW,EAAE,IAAI;AAAA;AAG5C,SAAS,gBAAgB,CAAC,UAAkC;AAAA,EACjE,OAAO,OAAO,WAAW,WAAW,EAAE,QAAQ;AAAA;AAGhD,SAAS,eAAe,CAAC,MAA8B;AAAA,EACrD,MAAM,QAAQ,KAAK,MAAM,OAAO;AAAA,EAChC,MAAM,UAAoD,CAAC;AAAA,EAC3D,IAAI;AAAA,EACJ,IAAI,oBAAuC,CAAC;AAAA,EAE5C,YAAY,OAAO,SAAS,MAAM,QAAQ,GAAG;AAAA,IAC3C,MAAM,aAAa,QAAQ;AAAA,IAC3B,MAAM,UAAU,KAAK,KAAK;AAAA,IAC1B,IAAI,QAAQ,WAAW,GAAG;AAAA,MACxB;AAAA,IACF;AAAA,IAEA,IAAI,QAAQ,WAAW,GAAG,GAAG;AAAA,MAC3B,MAAM,UAAU,QAAQ,MAAM,CAAC,EAAE,KAAK;AAAA,MACtC,IAAI,QAAQ,WAAW,yBAAyB,GAAG;AAAA,QACjD,MAAM,kBAAkB,oBAAoB,SAAS,YAAY,iBAAiB;AAAA,QAClF,IAAI,gBAAgB,eAAe;AAAA,UACjC,eAAe,gBAAgB;AAAA,UAC/B,oBAAoB,CAAC;AAAA,QACvB,EAAO;AAAA,UACL,oBAAoB,gBAAgB;AAAA;AAAA,MAExC;AAAA,MACA;AAAA,IACF;AAAA,IAEA,MAAM,kBAAkB,uBAAuB,KAAK,OAAO;AAAA,IAC3D,IAAI,CAAC,iBAAiB;AAAA,MACpB,MAAM,IAAI,MAAM,gCAAgC,gBAAgB,OAAO;AAAA,IACzE;AAAA,IAEA,MAAM,MAAM,gBAAgB;AAAA,IAC5B,MAAM,gBAAgB,gBAAgB;AAAA,IACtC,MAAM,QAAQ,2BAA2B,aAAa;AAAA,IACtD,MAAM,QAAQ,uBAAuB,MAAM,MAAM,KAAK,CAAC;AAAA,IAEvD,IAAI,aAAa,KAAK,kBAAkB;AAAA,IACxC,IAAI,MAAM,SAAS;AAAA,MACjB,MAAM,gBAAgB,MAAM,QAAQ,KAAK;AAAA,MACzC,IAAI,cAAc,WAAW,yBAAyB,GAAG;AAAA,QACvD,MAAM,eAAe,oBAAoB,eAAe,YAAY,UAAU;AAAA,QAC9E,IAAI,aAAa,eAAe;AAAA,UAC9B,MAAM,IAAI,MAAM,qDAAqD,YAAY;AAAA,QACnF;AAAA,QACA,aAAa,aAAa;AAAA,MAC5B;AAAA,IACF;AAAA,IAEA,QAAQ,KAAK;AAAA,MACX;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,eAAe;AAAA,MACf;AAAA,IACF,CAAC;AAAA,IACD,oBAAoB,CAAC;AAAA,EACvB;AAAA,EAEA,OAAO,EAAE,QAAQ;AAAA;AAGnB,SAAS,uBAAuB,CAAC,UAAkC;AAAA,EACjE,IAAI,CAAC,YAAY,CAAC,MAAM,QAAQ,SAAS,OAAO,GAAG;AAAA,IACjD,MAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAAA,EAEA,MAAM,UAAU;AAAA,IACd,QAAQ,CAAC;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,QAAQ,CAAC;AAAA,EACX;AAAA,EAEA,MAAM,gBAAgB,CAAC,GAAG,SAAS,OAAO,EAAE,KAAK,CAAC,MAAM,UAAU;AAAA,IAChE,IAAI,KAAK,SAAS,MAAM;AAAA,MAAM,OAAO,KAAK,OAAO,MAAM;AAAA,IACvD,OAAO,KAAK,IAAI,cAAc,MAAM,GAAG;AAAA,GACxC;AAAA,EAED,WAAW,SAAS,eAAe;AAAA,IACjC,MAAM,SAAiB,MAAM,WAAW,UAAU,MAAM,iBAAiB;AAAA,IACzE,QAAQ,QAAQ,KAAK,KAAK;AAAA,EAC5B;AAAA,EAEA,MAAM,QAAkB,CAAC;AAAA,EACzB,WAAW,UAAU,SAAS;AAAA,IAC5B,MAAM,KAAK,MAAM,QAAQ;AAAA,IACzB,MAAM,KAAK,EAAE;AAAA,IAEb,WAAW,SAAS,QAAQ,SAAS;AAAA,MACnC,MAAM,OAAO,MAAM,WAAW,QAAQ;AAAA,MACtC,MAAM,WAAW,MAAM,WAAW,YAAY;AAAA,MAC9C,MAAM,aAAa,MAAM,WAAW,cAAc;AAAA,MAClD,MAAM,WAAW,MAAM,WAAW,YAAY;AAAA,MAC9C,MAAM,iBAAiB,aACnB,IAAI,mBAAmB,MAAM,WAAW,YAAY,MACpD;AAAA,MAEJ,MAAM,KAAK,WAAW,MAAM;AAAA,MAC5B,MAAM,KAAK,aAAa,QAAQ;AAAA,MAChC,MAAM,KAAK,eAAe,UAAU;AAAA,MACpC,MAAM,KAAK,aAAa,gBAAgB;AAAA,MACxC,MAAM,KAAK,eAAe,UAAU;AAAA,MACpC,MAAM,KAAK,GAAG,MAAM,OAAO,kBAAkB,MAAM,KAAK,GAAG;AAAA,MAC3D,MAAM,KAAK,EAAE;AAAA,IACf;AAAA,EACF;AAAA,EAEA,OAAO,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,OAAO,IAAI;AAAA,IACzD,MAAM,IAAI;AAAA,EACZ;AAAA,EAEA,OAAO,GAAG,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA;AAG3B,SAAS,0BAA0B,CAAC,OAAoD;AAAA,EACtF,IAAI,gBAAgB;AAAA,EACpB,IAAI,gBAAgB;AAAA,EACpB,IAAI,UAAU;AAAA,EAEd,SAAS,QAAQ,EAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AAAA,IACpD,MAAM,OAAO,MAAM;AAAA,IAEnB,IAAI,SAAS;AAAA,MACX,UAAU;AAAA,MACV;AAAA,IACF;AAAA,IAEA,IAAI,SAAS,MAAM;AAAA,MACjB,UAAU;AAAA,MACV;AAAA,IACF;AAAA,IAEA,IAAI,SAAS,OAAO,CAAC,eAAe;AAAA,MAClC,gBAAgB,CAAC;AAAA,MACjB;AAAA,IACF;AAAA,IAEA,IAAI,SAAS,OAAO,CAAC,eAAe;AAAA,MAClC,gBAAgB,CAAC;AAAA,MACjB;AAAA,IACF;AAAA,IAEA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,SAAS,KAAK;AAAA,MACpD,OAAO;AAAA,QACL,OAAO,MAAM,MAAM,GAAG,KAAK,EAAE,QAAQ;AAAA,QACrC,SAAS,MAAM,MAAM,QAAQ,CAAC;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,EAAE,MAAM;AAAA;AAGjB,SAAS,mBAAmB,CAC1B,eACA,YACA,MAC2D;AAAA,EAC3D,MAAM,aAAa,KAAK,KAAK;AAAA,EAC7B,MAAM,SAAS,cACZ,MAAM,WAAW,EACjB,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO;AAAA,EAEjB,IAAI;AAAA,EACJ,WAAW,SAAS,QAAQ;AAAA,IAC1B,MAAM,SAAS,oBAAoB,OAAO,UAAU;AAAA,IACpD,IAAI,UAAU;AAAA,MAAQ,WAAW,OAAO,OAAO;AAAA,IAC/C,IAAI,cAAc;AAAA,MAAQ,WAAW,WAAW,OAAO;AAAA,IACvD,IAAI,gBAAgB;AAAA,MAAQ,WAAW,aAAa,OAAO;AAAA,IAC3D,IAAI,kBAAkB;AAAA,MAAQ,WAAW,eAAe,OAAO;AAAA,IAC/D,IAAI,cAAc;AAAA,MAAQ,WAAW,WAAW,OAAO;AAAA,IACvD,IAAI,YAAY;AAAA,MAAQ,WAAW,SAAS,OAAO;AAAA,IACnD,IAAI,mBAAmB;AAAA,MAAQ,gBAAgB,OAAO;AAAA,EACxD;AAAA,EAEA,OAAO,EAAE,YAAY,cAAc;AAAA;AAGrC,SAAS,mBAAmB,CAC1B,OACA,YACgD;AAAA,EAChD,IAAI,CAAC,MAAM,WAAW,GAAG,GAAG;AAAA,IAC1B,MAAM,IAAI,MAAM,+BAA+B,gBAAgB,QAAQ;AAAA,EACzE;AAAA,EAEA,MAAM,aAAa,MAAM,QAAQ,GAAG;AAAA,EACpC,MAAM,QAAQ,eAAe,KAAK,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,GAAG,UAAU,GAAG,KAAK;AAAA,EACpF,MAAM,SAAS,eAAe,KAAK,KAAK,MAAM,MAAM,aAAa,CAAC,GAAG,KAAK;AAAA,EAE1E,IAAI,SAAS,YAAY,SAAS,YAAY,SAAS,UAAU;AAAA,IAC/D,IAAI,MAAM,SAAS,GAAG;AAAA,MACpB,MAAM,IAAI,MAAM,uBAAuB,wCAAwC,aAAa;AAAA,IAC9F;AAAA,IACA,OAAO,EAAE,eAAe,KAAK;AAAA,EAC/B;AAAA,EAEA,IAAI,SAAS,QAAQ;AAAA,IACnB,IAAI,MAAM,WAAW,GAAG;AAAA,MACtB,MAAM,IAAI,MAAM,8CAA8C,YAAY;AAAA,IAC5E;AAAA,IACA,OAAO,EAAE,MAAM,gBAAgB,OAAO,UAAU,EAAE;AAAA,EACpD;AAAA,EAEA,IAAI,SAAS,YAAY;AAAA,IACvB,OAAO,EAAE,UAAU,sBAAsB,SAAS,WAAW,IAAI,EAAE;AAAA,EACrE;AAAA,EAEA,IAAI,SAAS,WAAW;AAAA,IACtB,IAAI,MAAM,WAAW,GAAG;AAAA,MACtB,OAAO,EAAE,YAAY,OAAO,cAAc,UAAU;AAAA,IACtD;AAAA,IAEA,OAAO,EAAE,YAAY,MAAM,cAAc,aAAa,KAAK,EAAE;AAAA,EAC/D;AAAA,EAEA,IAAI,SAAS,YAAY;AAAA,IACvB,OAAO,EAAE,UAAU,sBAAsB,SAAS,WAAW,IAAI,EAAE;AAAA,EACrE;AAAA,EAEA,IAAI,SAAS,UAAU;AAAA,IACrB,IAAI,MAAM,WAAW,GAAG;AAAA,MACtB,MAAM,IAAI,MAAM,gDAAgD,YAAY;AAAA,IAC9E;AAAA,IACA,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,MACpB,MAAM,IAAI,MAAM,mBAAmB,kBAAkB,YAAY;AAAA,IACnE;AAAA,IACA,OAAO,EAAE,QAAQ,MAAM;AAAA,EACzB;AAAA,EAEA,MAAM,IAAI,MAAM,uBAAuB,iBAAiB,YAAY;AAAA;AAGtE,SAAS,eAAe,CAAC,UAAkB,YAAgC;AAAA,EACzE,MAAM,aAAa,SAAS,KAAK,EAAE,YAAY;AAAA,EAC/C,MAAM,WAAuC;AAAA,IAC3C,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,KAAK;AAAA,IACL,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,MAAM;AAAA,IACN,wBAAwB;AAAA,EAC1B;AAAA,EAEA,MAAM,WAAW,SAAS;AAAA,EAC1B,IAAI,CAAC,YAAY,CAAC,aAAa,SAAS,QAAQ,GAAG;AAAA,IACjD,MAAM,IAAI,MAAM,wBAAwB,qBAAqB,YAAY;AAAA,EAC3E;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,sBAAsB,CAAC,OAAuB;AAAA,EACrD,IACG,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,KAC3C,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAC5C;AAAA,IACA,OAAO,MAAM,MAAM,GAAG,EAAE;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,iBAAiB,CAAC,OAAuB;AAAA,EAChD,MAAM,UAAU,kBAAkB,KAAK;AAAA,EACvC,IAAI,QAAQ,WAAW;AAAA,IAAG,OAAO;AAAA,EAEjC,IAAI,QAAQ,KAAK,OAAO,GAAG;AAAA,IACzB,OAAO,KAAK,UAAU,OAAO;AAAA,EAC/B;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,QAAQ,CAAC,OAAgC;AAAA,EAChD,OAAO,QAAQ,SAAS,KAAe;AAAA;;AGpUzC,IAAM,eAA2C;AAAA,EAC/C,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,uBAAuB;AAAA,EACvB,oBAAoB;AAAA,EACpB,MAAM;AACR;AAEO,SAAS,eAAe,CAAC,UAA4B;AAAA,EAC1D,MAAM,UAAU,CAAC;AAAA,EACjB,IAAI,OAAO;AAAA,EAEX,WAAW,UAAU,SAAS;AAAA,IAC5B,MAAM,YAAY,SAAS,UACxB,OAAO,CAAC,aAAa,SAAS,WAAW,MAAM,EAC/C,KAAK,CAAC,MAAM,UAAU,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC;AAAA,IAE5D,WAAW,YAAY,WAAW;AAAA,MAChC,MAAM,aAAa,GAAG,SAAS,OAAO,UAAU,SAAS;AAAA,MACzD,MAAM,QAAQ,SAAS,aACnB,mBAAmB,QAAQ,IAC1B,aAAa,SAAS,SAAS,aAAa;AAAA,MAEjD,QAAQ,KAAK;AAAA,QACX,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf,YAAY;AAAA,UACV,MAAM,SAAS;AAAA,UACf;AAAA,UACA,UAAU,SAAS;AAAA,UACnB,YAAY,SAAS;AAAA,UACrB,cAAc,SAAS;AAAA,UACvB,UAAU,SAAS;AAAA,QACrB;AAAA,MACF,CAAC;AAAA,MACD,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,OAAO,iBAAiB,EAAE,QAAQ,CAAC;AAAA;AAGrC,SAAS,kBAAkB,CAAC,UAAoC;AAAA,EAC9D,IAAI,CAAC,SAAS,YAAY;AAAA,IACxB,OAAO,aAAa,SAAS;AAAA,EAC/B;AAAA,EAEA,IAAI,SAAS,SAAS,kBAAkB;AAAA,IACtC,IAAI,MAAM,QAAQ,SAAS,YAAY,GAAG;AAAA,MACxC,OAAO,SAAS,aAAa,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,EAAE,KAAK,GAAG;AAAA,IACnE;AAAA,IACA,OAAO,OAAO,SAAS,gBAAgB,EAAE;AAAA,EAC3C;AAAA,EAEA,IAAI,SAAS,SAAS,yBAAyB;AAAA,IAC7C,IAAI,MAAM,QAAQ,SAAS,YAAY,GAAG;AAAA,MACxC,OAAO,SAAS,aACb,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,EAC1B,OAAO,CAAC,SAAS,OAAO,SAAS,IAAI,CAAC,EACtC,KAAK,GAAG;AAAA,IACb;AAAA,IACA,OAAO,OAAO,SAAS,gBAAgB,GAAG;AAAA,EAC5C;AAAA,EAEA,IAAI,SAAS,SAAS,sBAAsB;AAAA,IAC1C,IAAI,MAAM,QAAQ,SAAS,YAAY,GAAG;AAAA,MACxC,OAAO,SAAS,aAAa,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,EAAE,KAAK,GAAG;AAAA,IACnE;AAAA,IACA,OAAO,OAAO,SAAS,gBAAgB,aAAa,kBAAkB;AAAA,EACxE;AAAA,EAEA,IAAI,SAAS,SAAS,QAAQ;AAAA,IAC5B,IAAI,OAAO,SAAS,iBAAiB,UAAU;AAAA,MAC7C,OAAO,SAAS;AAAA,IAClB;AAAA,IACA,OAAO,KAAK,UAAU,SAAS,gBAAgB,CAAC,CAAC;AAAA,EACnD;AAAA,EAEA,OAAO,kBAAkB,SAAS,YAAY;AAAA;;AC7FhD,mBAAS;AAUT,IAAM,oBAAoB;AAC1B,IAAM,yBAAyB;AAE/B,IAAM,gBAAgB,QAAO,UAAU,QAAO,QAAQ,QAAO,SAAS;AAAA,EACpE,QAAQ,CAAC,WAAW,6BAA6B,OAAO,MAAM,CAAC;AAAA,EAC/D,QAAQ,CAAC,UAAU,6BAA6B,KAAiB;AACnE,CAAC;AAEM,SAAS,wBAAwB,CAAC,QAA0B;AAAA,EACjE,OAAO,QAAO,kBAAkB,aAAa,EAAE,MAAM;AAAA;AAGhD,SAAS,mBAAmB,CAAC,UAA4B;AAAA,EAC9D,OAAO,QAAO,WAAW,aAAa,EAAE,QAAQ;AAAA;AAGlD,SAAS,4BAA4B,CAAC,QAA0B;AAAA,EAC9D,MAAM,QAAQ,uBAAuB,KAAK,MAAM;AAAA,EAChD,IAAI,CAAC,OAAO;AAAA,IACV,MAAM,IAAI,MACR,+EACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,MAAM,GAAG,KAAK;AAAA,EAC/B,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,KAAK,MAAM,QAAQ;AAAA,IAC5B,OAAO,OAAO;AAAA,IACd,MAAM,IAAI,MAAM,4BAA4B,OAAO,KAAK,GAAG;AAAA;AAAA,EAG7D,OAAO,iBAAiB,MAAM;AAAA;AAGhC,SAAS,4BAA4B,CAAC,UAA4B;AAAA,EAChE,MAAM,aAAa,iBAAiB,QAAQ;AAAA,EAC5C,OAAO,MAAM;AAAA,EAAsB,KAAK,UAAU,YAAY,MAAM,CAAC;AAAA;AAAA;AAGvE,SAAS,gBAAgB,CAAC,OAA0B;AAAA,EAClD,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AAAA,IACvC,MAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AAAA,EAEA,MAAM,YAAY;AAAA,EAClB,IAAI,UAAU,YAAY,kBAAkB;AAAA,IAC1C,MAAM,IAAI,MAAM,iCAAiC,OAAO,UAAU,OAAO,KAAK;AAAA,EAChF;AAAA,EAEA,MAAM,SAAS,eAAe,UAAU,MAAM;AAAA,EAC9C,MAAM,eAAe,UAAU;AAAA,EAC/B,IAAI,CAAC,MAAM,QAAQ,YAAY,GAAG;AAAA,IAChC,MAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AAAA,EAEA,MAAM,YAAY,aAAa,IAAI,CAAC,MAAM,UAAU,yBAAyB,MAAM,KAAK,CAAC;AAAA,EACzF,UAAU,KAAK,CAAC,MAAM,UAAU;AAAA,IAC9B,IAAI,KAAK,WAAW,MAAM;AAAA,MAAQ,OAAO,KAAK,OAAO,cAAc,MAAM,MAAM;AAAA,IAC/E,OAAO,KAAK,KAAK,cAAc,MAAM,IAAI;AAAA,GAC1C;AAAA,EAED,OAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACF;AAAA;AAGF,SAAS,cAAc,CAAC,aAAsB;AAAA,EAC5C,IAAI,CAAC,eAAe,OAAO,gBAAgB,UAAU;AAAA,IACnD,MAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AAAA,EAEA,MAAM,SAAS;AAAA,EACf,MAAM,SAAS,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AAAA,EACnE,MAAM,SAAS,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AAAA,EACnE,MAAM,SAAS,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AAAA,EACnE,OAAO,EAAE,QAAQ,QAAQ,OAAO;AAAA;AAGlC,SAAS,wBAAwB,CAAC,OAAgB,OAAiC;AAAA,EACjF,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AAAA,IACvC,MAAM,IAAI,MAAM,8BAA8B,0BAA0B;AAAA,EAC1E;AAAA,EAEA,MAAM,WAAW;AAAA,EACjB,IAAI,OAAO,SAAS,SAAS,YAAY,SAAS,KAAK,WAAW,GAAG;AAAA,IACnE,MAAM,IAAI,MAAM,8BAA8B,8BAA8B;AAAA,EAC9E;AAAA,EAEA,IAAI,OAAO,SAAS,WAAW,YAAY,CAAC,QAAQ,SAAS,SAAS,MAAa,GAAG;AAAA,IACpF,MAAM,IAAI,MAAM,sBAAsB,SAAS,gCAAgC;AAAA,EACjF;AAAA,EAEA,IAAI,OAAO,SAAS,SAAS,YAAY,CAAC,aAAa,SAAS,SAAS,IAAW,GAAG;AAAA,IACrF,MAAM,IAAI,MAAM,sBAAsB,SAAS,8BAA8B;AAAA,EAC/E;AAAA,EAEA,IAAI,OAAO,SAAS,aAAa,WAAW;AAAA,IAC1C,MAAM,IAAI,MAAM,sBAAsB,SAAS,uCAAuC;AAAA,EACxF;AAAA,EAEA,IAAI,OAAO,SAAS,eAAe,WAAW;AAAA,IAC5C,MAAM,IAAI,MAAM,sBAAsB,SAAS,yCAAyC;AAAA,EAC1F;AAAA,EAEA,IAAI,OAAO,SAAS,aAAa,WAAW;AAAA,IAC1C,MAAM,IAAI,MAAM,sBAAsB,SAAS,uCAAuC;AAAA,EACxF;AAAA,EAEA,OAAO;AAAA,IACL,MAAM,SAAS;AAAA,IACf,QAAQ,SAAS;AAAA,IACjB,MAAM,SAAS;AAAA,IACf,UAAU,SAAS;AAAA,IACnB,YAAY,SAAS;AAAA,IACrB,cAAc,SAAS;AAAA,IACvB,UAAU,SAAS;AAAA,EACrB;AAAA;;;ACpHK,SAAS,aAAa,CAAC,OAA8B;AAAA,EAC1D,MAAM,kBAAkB,CAAC,GAAG,MAAM,SAAS,EAAE,KAAK,CAAC,MAAM,UAAU;AAAA,IACjE,IAAI,KAAK,WAAW,MAAM;AAAA,MAAQ,OAAO,KAAK,OAAO,cAAc,MAAM,MAAM;AAAA,IAC/E,OAAO,KAAK,UAAU,cAAc,MAAM,SAAS;AAAA,GACpD;AAAA,EAED,MAAM,UAA8C;AAAA,IAClD,QAAQ,CAAC;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,QAAQ,CAAC;AAAA,EACX;AAAA,EAEA,MAAM,gBAAgB,IAAI,IAAY,CAAC,WAAW,CAAC;AAAA,EACnD,IAAI,oBAAoB;AAAA,EAExB,WAAW,YAAY,iBAAiB;AAAA,IACtC,MAAM,WAAW,uBAAuB,SAAS,MAAM;AAAA,MACrD,UAAU,SAAS;AAAA,MACnB,YAAY,SAAS;AAAA,MACrB,cAAc,SAAS;AAAA,MACvB,UAAU,SAAS;AAAA,IACrB,CAAC;AAAA,IACD,WAAW,UAAU,SAAS,SAAS;AAAA,MACrC,cAAc,IAAI,MAAM;AAAA,IAC1B;AAAA,IACA,sBAAsB,SAAS;AAAA,IAE/B,QAAQ,SAAS,QAAQ,KAAK;AAAA,MAC5B,KAAK,eAAe,SAAS,SAAS;AAAA,MACtC,YAAY,SAAS;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAAa,YAAY,CAAC,GAAG,aAAa,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA,EAClE,MAAM,mBAAmB,oBAAoB,qCAAqC;AAAA,EAClF,MAAM,gBAAgB,oBAAoB,WAAW,KAAK,CAAC;AAAA,EAE3D,MAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,KAAK,UAAU,MAAM,OAAO,MAAM;AAAA,IACjD,eAAe,KAAK,UAAU,MAAM,OAAO,MAAM;AAAA,IACjD,eAAe,KAAK,UAAU,MAAM,OAAO,MAAM;AAAA,IACjD;AAAA,IACA;AAAA,IACA,GAAG,oBAAoB,QAAQ,MAAM;AAAA,IACrC;AAAA,IACA;AAAA,IACA,GAAG,oBAAoB,QAAQ,MAAM;AAAA,IACrC;AAAA,IACA;AAAA,IACA,GAAG,oBAAoB,QAAQ,MAAM;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,OAAO,YAAY,OAAO,CAAC,MAAM,OAAO,QAAQ,SAAS,MAAM,IAAI,QAAQ,OAAO,EAAE,EAAE,KAAK;AAAA,CAAI;AAAA;AAGjG,SAAS,mBAAmB,CAAC,SAAoD;AAAA,EAC/E,IAAI,QAAQ,WAAW,GAAG;AAAA,IACxB,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,OAAO,QAAQ,IAAI,CAAC,UAAU,OAAO,MAAM,QAAQ,MAAM,aAAa;AAAA;AAGxE,SAAS,sBAAsB,CAC7B,MACA,UAM0E;AAAA,EAC1E,IAAI,aAAa,qBAAqB,IAAI;AAAA,EAC1C,MAAM,UAAU,IAAI,IAAY,uBAAuB,IAAI,CAAC;AAAA,EAC5D,MAAM,oBAAoB,SAAS,YAAY,SAAS;AAAA,EAExD,IAAI,SAAS,YAAY,CAAC,SAAS,YAAY;AAAA,IAC7C,aAAa,YAAY;AAAA,IACzB,QAAQ,IAAI,UAAU;AAAA,EACxB;AAAA,EAEA,IAAI,SAAS,YAAY;AAAA,IACvB,aAAa,eAAe,eAAe,cAAc,SAAS,YAAY;AAAA,IAC9E,QAAQ,IAAI,aAAa;AAAA,EAC3B;AAAA,EAEA,IAAI,SAAS,UAAU;AAAA,IACrB,aAAa,YAAY;AAAA,IACzB,QAAQ,IAAI,UAAU;AAAA,EACxB;AAAA,EAEA,OAAO,EAAE,YAAY,SAAS,kBAAkB;AAAA;AAGlD,SAAS,oBAAoB,CAAC,MAA0B;AAAA,EACtD,QAAQ;AAAA,SACD;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA;AAAA,MAEP,OAAO;AAAA;AAAA;AAIb,SAAS,sBAAsB,CAAC,MAAyC;AAAA,EACvE,QAAQ;AAAA,SACD;AAAA,MACH,OAAO,CAAC,gBAAgB;AAAA,SACrB;AAAA,MACH,OAAO,CAAC,SAAS;AAAA,SACd;AAAA,MACH,OAAO,CAAC,SAAS;AAAA,SACd;AAAA,MACH,OAAO,CAAC;AAAA,SACL;AAAA,MACH,OAAO,CAAC,MAAM;AAAA,SACX;AAAA,MACH,OAAO,CAAC,KAAK;AAAA,SACV;AAAA,MACH,OAAO,CAAC,aAAa;AAAA,SAClB;AAAA,MACH,OAAO,CAAC,UAAU;AAAA,SACf;AAAA,MACH,OAAO,CAAC,UAAU;AAAA,SACf;AAAA,MACH,OAAO,CAAC,UAAU;AAAA,SACf;AAAA,MACH,OAAO,CAAC,gBAAgB;AAAA,SACrB;AAAA,MACH,OAAO,CAAC,uBAAuB;AAAA,SAC5B;AAAA,MACH,OAAO,CAAC,oBAAoB;AAAA,SACzB;AAAA,MACH,OAAO,CAAC,MAAM;AAAA;AAAA,MAEd,OAAO,CAAC,gBAAgB;AAAA;AAAA;AAI9B,SAAS,cAAc,CAAC,OAAuB;AAAA,EAC7C,OAAO,6BAA6B,KAAK,KAAK,IAAI,QAAQ,KAAK,UAAU,KAAK;AAAA;AAGhF,SAAS,UAAU,CAAC,OAAgC;AAAA,EAClD,MAAM,YAAY,CAAC,GAAG,MAAM,SAAS,EAClC,IAAI,CAAC,cAAc;AAAA,IAClB,MAAM,SAAS;AAAA,IACf,QAAQ,SAAS;AAAA,IACjB,MAAM,SAAS;AAAA,IACf,UAAU,SAAS;AAAA,IACnB,YAAY,SAAS;AAAA,IACrB,cAAc,SAAS;AAAA,IACvB,UAAU,SAAS;AAAA,EACrB,EAAE,EACD,KAAK,CAAC,MAAM,UAAU;AAAA,IACrB,IAAI,KAAK,WAAW,MAAM;AAAA,MAAQ,OAAO,KAAK,OAAO,cAAc,MAAM,MAAM;AAAA,IAC/E,OAAO,KAAK,KAAK,cAAc,MAAM,IAAI;AAAA,GAC1C;AAAA,EAEH,OAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ,MAAM;AAAA,IACd;AAAA,EACF;AAAA;;ACzMF,IAAM,eAAe,IAAI,IAAgB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,eAA2D;AAAA,EAC/D,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AACV;AAEO,SAAS,UAAU,CAAC,UAA0B,SAAsC;AAAA,EACzF,MAAM,aAAiD,CAAC;AAAA,EACxD,MAAM,oBAAwC,CAAC;AAAA,EAE/C,WAAW,SAAS,SAAS,SAAS;AAAA,IACpC,WAAW,MAAM,OAAO,MAAM;AAAA,IAC9B,QAAQ,QAAQ,cAAc,0BAA0B,MAAM,KAAK,QAAQ,QAAQ;AAAA,MACjF,gBAAgB,MAAM,WAAW;AAAA,MACjC,eAAe,MAAM;AAAA,IACvB,CAAC;AAAA,IAED,MAAM,eAAe,MAAM,WAAW,QAAQ,gBAAgB,MAAM,KAAK,MAAM,KAAK;AAAA,IACpF,MAAM,aAAa,MAAM,WAAW,cAAc;AAAA,IAClD,MAAM,eAAe,aACjB,sBAAsB,cAAc,MAAM,WAAW,YAAY,IACjE;AAAA,IACJ,MAAM,eAAe,MAAM,WAAW,YAAY;AAAA,IAClD,MAAM,eAAe,MAAM,WAAW,YAAY;AAAA,IAElD,MAAM,YAAY,kBAAkB,KAClC,CAAC,cAAc,UAAU,WAAW,UAAU,UAAU,cAAc,SACxE;AAAA,IACA,IAAI,WAAW;AAAA,MACb,MAAM,IAAI,MACR,yBAAyB,yBAAyB,mBAAmB,MAAM,OAC7E;AAAA,IACF;AAAA,IAEA,kBAAkB,KAAK;AAAA,MACrB;AAAA,MACA,YAAY,MAAM;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,MACN,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,YAAY,MAAM;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,kBAAkB,KAAK,CAAC,MAAM,UAAU;AAAA,IACtC,MAAM,cAAc,aAAa,KAAK,UAAU,aAAa,MAAM;AAAA,IACnE,IAAI,gBAAgB;AAAA,MAAG,OAAO;AAAA,IAC9B,OAAO,KAAK,UAAU,cAAc,MAAM,SAAS;AAAA,GACpD;AAAA,EAED,OAAO;AAAA,IACL,QAAQ,QAAQ;AAAA,IAChB,WAAW;AAAA,IACX;AAAA,EACF;AAAA;AAGF,SAAS,yBAAyB,CAChC,YACA,QACA,SAI2D;AAAA,EAC3D,MAAM,iBAAiB,QAAQ,kBAAkB,QAAQ;AAAA,EACzD,IAAI,gBAAgB;AAAA,IAClB,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,WAAW,YAAY,YAAY,OAAO,eAAe;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,sBAAsB,YAAY,MAAM;AAAA,EACnE,IAAI,oBAAoB;AAAA,IACtB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AAAA;AAGF,SAAS,qBAAqB,CAC5B,YACA,QACuE;AAAA,EACvE,MAAM,aAAa;AAAA,IACjB,EAAE,QAAQ,UAAU,QAAQ,OAAO,OAAO;AAAA,IAC1C,EAAE,QAAQ,UAAU,QAAQ,OAAO,OAAO;AAAA,IAC1C,EAAE,QAAQ,UAAU,QAAQ,OAAO,OAAO;AAAA,EAC5C,EACG,OAAO,CAAC,cAAc,UAAU,OAAO,SAAS,KAAK,WAAW,WAAW,UAAU,MAAM,CAAC,EAC5F,KAAK,CAAC,MAAM,UAAU,MAAM,OAAO,SAAS,KAAK,OAAO,MAAM;AAAA,EAKjE,MAAM,OAAO,WAAW;AAAA,EACxB,IAAI,CAAC;AAAA,IAAM;AAAA,EAEX,OAAO;AAAA,IACL,QAAQ,KAAK;AAAA,IACb,WAAW,YAAY,YAAY,KAAK,MAAM;AAAA,EAChD;AAAA;AAGF,SAAS,WAAW,CAAC,KAAa,QAAwB;AAAA,EACxD,IAAI,CAAC,UAAU,CAAC,IAAI,WAAW,MAAM,GAAG;AAAA,IACtC,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,IAAI,MAAM,OAAO,MAAM;AAAA,EACxC,OAAO,SAAS,SAAS,IAAI,WAAW;AAAA;AAG1C,SAAS,eAAe,CAAC,KAAa,UAA8B;AAAA,EAClE,MAAM,QAAQ,SAAS,KAAK;AAAA,EAC5B,MAAM,aAAa,MAAM,YAAY;AAAA,EACrC,MAAM,WAAW,IAAI,YAAY;AAAA,EAEjC,IAAI,gBAAgB,KAAK,GAAG;AAAA,IAC1B,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW,WAAW,aAAa,KAAK,WAAW,WAAW,eAAe,GAAG;AAAA,IAClF,OAAO;AAAA,EACT;AAAA,EACA,IAAI,WAAW,WAAW,UAAU,KAAK,WAAW,WAAW,WAAW,GAAG;AAAA,IAC3E,OAAO;AAAA,EACT;AAAA,EACA,IAAI,WAAW,WAAW,YAAY,KAAK,WAAW,WAAW,gBAAgB,GAAG;AAAA,IAClF,OAAO;AAAA,EACT;AAAA,EACA,IAAI,WAAW,WAAW,UAAU,KAAK,WAAW,WAAW,WAAW,GAAG;AAAA,IAC3E,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,0BAA0B,KAAK,GAAG;AAAA,IACpC,MAAM,QAAQ,iBAAiB,KAAK;AAAA,IACpC,IAAI,MAAM,SAAS,KAAK,MAAM,MAAM,CAAC,SAAS,gBAAgB,IAAI,KAAK,eAAe,IAAI,CAAC,GAAG;AAAA,MAC5F,OAAO;AAAA,IACT;AAAA,IACA,IAAI,MAAM,SAAS,KAAK,MAAM,MAAM,CAAC,SAAS,UAAU,IAAI,CAAC,GAAG;AAAA,MAC9D,OAAO;AAAA,IACT;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAU,KAAK,GAAG;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,gBAAgB,UAAU,GAAG;AAAA,IAC/B,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,gBAAgB,KAAK,GAAG;AAAA,IAC1B,MAAM,cAAc,OAAO,KAAK;AAAA,IAChC,IAAI,SAAS,SAAS,MAAM,KAAK,eAAe,KAAK,eAAe,OAAO;AAAA,MACzE,OAAO;AAAA,IACT;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,eAAe,KAAK,GAAG;AAAA,IACzB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,eAAe,CAAC,OAAwB;AAAA,EAC/C,OAAO,UAAU,UAAU,UAAU,WAAW,UAAU,OAAO,UAAU;AAAA;AAG7E,SAAS,eAAe,CAAC,OAAwB;AAAA,EAC/C,OAAO,aAAa,KAAK,KAAK;AAAA;AAGhC,SAAS,cAAc,CAAC,OAAwB;AAAA,EAC9C,OAAO,6BAA6B,KAAK,KAAK;AAAA;AAGhD,SAAS,SAAS,CAAC,OAAwB;AAAA,EACzC,IAAI;AAAA,IACF,MAAM,SAAS,IAAI,IAAI,KAAK;AAAA,IAC5B,OAAO,OAAO,aAAa,WAAW,OAAO,aAAa;AAAA,IAC1D,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIX,SAAS,yBAAyB,CAAC,OAAwB;AAAA,EACzD,OAAO,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,WAAW,GAAG;AAAA;AAG/E,SAAS,gBAAgB,CAAC,OAAyB;AAAA,EACjD,OAAO,MACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AAAA;AAGrC,SAAS,eAAe,CAAC,OAAwB;AAAA,EAC/C,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3B,IACE,EACG,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,KAC/C,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,IAElD;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI;AAAA,IACF,KAAK,MAAM,OAAO;AAAA,IAClB,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIX,SAAS,qBAAqB,CAAC,MAAkB,OAAyB;AAAA,EACxE,IAAI,SAAS,WAAW;AAAA,IACtB,IAAI,OAAO,UAAU;AAAA,MAAW,OAAO;AAAA,IACvC,IAAI,OAAO,UAAU,UAAU;AAAA,MAC7B,MAAM,aAAa,MAAM,YAAY;AAAA,MACrC,OAAO,eAAe,UAAU,eAAe;AAAA,IACjD;AAAA,IACA,OAAO,QAAQ,KAAK;AAAA,EACtB;AAAA,EAEA,IAAI,SAAS,WAAW;AAAA,IACtB,MAAM,UAAU,OAAO,KAAK;AAAA,IAC5B,IAAI,CAAC,OAAO,SAAS,OAAO;AAAA,MAAG,OAAO;AAAA,IACtC,OAAO,KAAK,MAAM,OAAO;AAAA,EAC3B;AAAA,EAEA,IAAI,SAAS,UAAU;AAAA,IACrB,MAAM,UAAU,OAAO,KAAK;AAAA,IAC5B,OAAO,OAAO,SAAS,OAAO,IAAI,UAAU;AAAA,EAC9C;AAAA,EAEA,IAAI,SAAS,QAAQ;AAAA,IACnB,MAAM,UAAU,KAAK,MAAM,OAAO,KAAK,CAAC;AAAA,IACxC,IAAI,OAAO,SAAS,OAAO,KAAK,WAAW,KAAK,WAAW,OAAO;AAAA,MAChE,OAAO;AAAA,IACT;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,SAAS,kBAAkB;AAAA,IAC7B,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,MACxB,OAAO,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC;AAAA,IACzC;AAAA,IACA,IAAI,OAAO,UAAU,UAAU;AAAA,MAC7B,OAAO,iBAAiB,KAAK;AAAA,IAC/B;AAAA,IACA,OAAO,CAAC,OAAO,SAAS,EAAE,CAAC;AAAA,EAC7B;AAAA,EAEA,IAAI,SAAS,yBAAyB;AAAA,IACpC,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,MACxB,OAAO,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,OAAO,SAAS,IAAI,CAAC;AAAA,IACjF;AAAA,IACA,IAAI,OAAO,UAAU,UAAU;AAAA,MAC7B,OAAO,iBAAiB,KAAK,EAC1B,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,EAC1B,OAAO,CAAC,SAAS,OAAO,SAAS,IAAI,CAAC;AAAA,IAC3C;AAAA,IACA,MAAM,UAAU,OAAO,KAAK;AAAA,IAC5B,OAAO,OAAO,SAAS,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAAA,EAClD;AAAA,EAEA,IAAI,SAAS,sBAAsB;AAAA,IACjC,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,MACxB,OAAO,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC;AAAA,IACzC;AAAA,IACA,IAAI,OAAO,UAAU,UAAU;AAAA,MAC7B,OAAO,iBAAiB,KAAK;AAAA,IAC/B;AAAA,IACA,OAAO,CAAC,OAAO,SAAS,qBAAqB,CAAC;AAAA,EAChD;AAAA,EAEA,IAAI,SAAS,QAAQ;AAAA,IACnB,OAAO,SAAS,CAAC;AAAA,EACnB;AAAA,EAEA,IAAI,aAAa,IAAI,IAAI,GAAG;AAAA,IAC1B,MAAM,cAAc,OAAO,SAAS,EAAE;AAAA,IACtC,OAAO,YAAY,SAAS,IAAI,cAAc;AAAA,EAChD;AAAA,EAEA,OAAO;AAAA;;ACxRT,IAAM,aAAoB;AAAA,EACxB,KAAK,MAAM,QAAQ,IAAI;AAAA,EACvB,QAAQ,CAAC,YAAY,QAAQ,OAAO,MAAM,OAAO;AAAA,EACjD,QAAQ,CAAC,YAAY,QAAQ,OAAO,MAAM,OAAO;AACnD;AAEA,IAAM,qBAAsD;AAAA,EAC1D,QAAQ,EAAE,QAAQ,IAAI,QAAQ,gBAAgB,QAAQ,GAAG;AAAA,EACzD,MAAM,EAAE,QAAQ,IAAI,QAAQ,SAAS,QAAQ,GAAG;AAAA,EAChD,MAAM,EAAE,QAAQ,IAAI,QAAQ,gBAAgB,QAAQ,GAAG;AAAA,EACvD,MAAM,EAAE,QAAQ,IAAI,QAAQ,gBAAgB,QAAQ,GAAG;AAAA,EACvD,WAAW,EAAE,QAAQ,IAAI,QAAQ,WAAW,QAAQ,GAAG;AAAA,EACvD,OAAO,EAAE,QAAQ,IAAI,QAAQ,WAAW,QAAQ,GAAG;AACrD;AAEA,eAAsB,MAAM,CAAC,MAAgB,KAAqB,CAAC,GAAoB;AAAA,EACrF,MAAM,YAAmB;AAAA,IACvB,KAAK,GAAG,OAAO,WAAW;AAAA,IAC1B,QAAQ,GAAG,UAAU,WAAW;AAAA,IAChC,QAAQ,GAAG,UAAU,WAAW;AAAA,EAClC;AAAA,EAEA,IAAI;AAAA,IACF,IAAI,KAAK,WAAW,KAAK,KAAK,OAAO,YAAY,KAAK,OAAO,MAAM;AAAA,MACjE,UAAU,OAAO,gBAAgB,CAAC;AAAA,MAClC,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,KAAK,OAAO,OAAO;AAAA,MACrB,MAAM,IAAI,MAAM,oBAAoB,KAAK;AAAA,EAAS,gBAAgB,GAAG;AAAA,IACvE;AAAA,IAEA,MAAM,aAAa,KAAK;AAAA,IACxB,IAAI,CAAC,cAAc,eAAe,UAAU;AAAA,MAC1C,UAAU,OAAO,eAAe,CAAC;AAAA,MACjC,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,eAAe,OAAO;AAAA,MACxB,MAAM,UAAU,mBAAmB,KAAK,MAAM,CAAC,CAAC;AAAA,MAChD,IAAI,QAAQ,MAAM;AAAA,QAChB,UAAU,OAAO,kBAAkB,CAAC;AAAA,QACpC,OAAO;AAAA,MACT;AAAA,MAEA,MAAM,UAAU,SAAS,SAAS;AAAA,MAClC,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,eAAe,WAAW;AAAA,MAC5B,MAAM,UAAU,uBAAuB,KAAK,MAAM,CAAC,CAAC;AAAA,MACpD,IAAI,QAAQ,MAAM;AAAA,QAChB,UAAU,OAAO,sBAAsB,CAAC;AAAA,QACxC,OAAO;AAAA,MACT;AAAA,MAEA,MAAM,cAAc,SAAS,SAAS;AAAA,MACtC,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,IAAI,MAAM,2BAA2B;AAAA,EAAiB,eAAe,GAAG;AAAA,IAC9E,OAAO,OAAO;AAAA,IACd,UAAU,OAAO,GAAG,mBAAmB,KAAK;AAAA,CAAK;AAAA,IACjD,OAAO;AAAA;AAAA;AAIX,eAAe,SAAS,CAAC,SAAwB,IAA0B;AAAA,EACzE,MAAM,MAAM,GAAG,IAAI;AAAA,EACnB,MAAM,YAAY,eAAe,KAAK,QAAQ,SAAS,cAAc;AAAA,EACrE,MAAM,aAAa,eAAe,KAAK,QAAQ,UAAW,MAAM,wBAAwB,GAAG,CAAE;AAAA,EAE7F,MAAM,SAAS,MAAM,oBAAoB,WAAW,YAAY;AAAA,EAChE,MAAM,SAAS,iBAAiB,MAAM;AAAA,EACtC,MAAM,SAAS,cAAc,OAAO;AAAA,EAEpC,MAAM,WAAW,WAAW,QAAQ,EAAE,OAAO,CAAC;AAAA,EAC9C,MAAM,YAAY,cAAc,QAAQ;AAAA,EAExC,MAAM,qBAAqB,YAAY,QAAQ,KAAK;AAAA,EACpD,MAAM,gBAAgB,YAAY,SAAS;AAAA,EAE3C,GAAG,OAAO,aAAa;AAAA,CAAc;AAAA;AAGvC,eAAe,aAAa,CAAC,SAA4B,IAA0B;AAAA,EACjF,MAAM,MAAM,GAAG,IAAI;AAAA,EACnB,MAAM,eAAe,MAAM,2BAA2B,GAAG;AAAA,EACzD,MAAM,YAAY,eAAe,KAAK,QAAQ,SAAS,YAAY;AAAA,EACnE,MAAM,aAAa,eAAe,KAAK,QAAQ,UAAU,cAAc;AAAA,EAEvE,MAAM,SAAS,MAAM,oBAAoB,WAAW,cAAc;AAAA,EAClE,MAAM,WAAW,yBAAyB,MAAM;AAAA,EAChD,MAAM,YAAY,gBAAgB,QAAQ;AAAA,EAE1C,MAAM,qBAAqB,YAAY,QAAQ,KAAK;AAAA,EACpD,MAAM,gBAAgB,YAAY,SAAS;AAAA,EAE3C,GAAG,OAAO,aAAa;AAAA,CAAc;AAAA;AAGvC,SAAS,aAAa,CAAC,SAAsC;AAAA,EAC3D,MAAM,gBAAgB,QAAQ,YAAY,mBAAmB,QAAQ,aAAa;AAAA,EAElF,OAAO;AAAA,IACL,QAAQ,QAAQ,gBAAgB,eAAe,UAAU;AAAA,IACzD,QAAQ,QAAQ,gBAAgB,eAAe,UAAU;AAAA,IACzD,QAAQ,QAAQ,gBAAgB,eAAe,UAAU;AAAA,EAC3D;AAAA;AAKF,SAAS,UAAU,CAAC,MAA6B,MAAkD;AAAA,EACjG,MAAM,SAA2C,CAAC;AAAA,EAClD,SAAS,QAAQ,EAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AAAA,IACnD,MAAM,QAAQ,KAAK;AAAA,IACnB,IAAI,CAAC,MAAM,WAAW,IAAI,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,wBAAwB,QAAQ;AAAA,IAClD;AAAA,IAEA,OAAO,gBAAgB,eAAe,MAAM,MAAM,KAAK,CAAC;AAAA,IACxD,MAAM,OAAO,eAAe,MAAM,CAAC;AAAA,IACnC,MAAM,WAAW,KAAK;AAAA,IACtB,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,MAAM,qBAAqB,OAAO;AAAA,IAC9C;AAAA,IAEA,IAAI,aAAa,WAAW;AAAA,MAC1B,IAAI,gBAAgB,WAAW;AAAA,QAC7B,OAAO,QAAQ,gBAAgB;AAAA,MACjC,EAAO;AAAA,QACL,OAAO,QAAQ;AAAA;AAAA,MAEjB;AAAA,IACF;AAAA,IAEA,IAAI,gBAAgB,WAAW;AAAA,MAC7B,OAAO,QAAQ;AAAA,MACf;AAAA,IACF;AAAA,IAEA,MAAM,OAAO,KAAK,QAAQ;AAAA,IAC1B,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG;AAAA,MAClC,MAAM,IAAI,MAAM,aAAa,wBAAwB;AAAA,IACvD;AAAA,IAEA,OAAO,QAAQ;AAAA,IACf,SAAS;AAAA,EACX;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,kBAAkB,CAAC,MAA4C;AAAA,EACtE,MAAM,SAAS,WAAW,MAAM;AAAA,IAC9B,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,OAAO;AAAA,IACP,MAAM;AAAA,EACR,CAAC;AAAA,EAED,MAAM,iBAAiB,OAAO;AAAA,EAC9B,IAAI,mBAAmB,WAAW;AAAA,IAChC,IAAI,OAAO,mBAAmB,YAAY,CAAC,WAAW,SAAS,cAA2B,GAAG;AAAA,MAC3F,MAAM,IAAI,MAAM,mDAAmD,WAAW,KAAK,IAAI,IAAI;AAAA,IAC7F;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,OAAO,iBAAiB,OAAO,KAAK;AAAA,IACpC,QAAQ,iBAAiB,OAAO,MAAM;AAAA,IACtC,WAAW;AAAA,IACX,cAAc,iBAAiB,OAAO,gBAAgB;AAAA,IACtD,cAAc,iBAAiB,OAAO,gBAAgB;AAAA,IACtD,cAAc,iBAAiB,OAAO,gBAAgB;AAAA,IACtD,OAAO,QAAQ,OAAO,KAAK;AAAA,IAC3B,MAAM,QAAQ,OAAO,IAAI;AAAA,EAC3B;AAAA;AAGF,SAAS,sBAAsB,CAAC,MAAgD;AAAA,EAC9E,MAAM,SAAS,WAAW,MAAM;AAAA,IAC9B,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR,CAAC;AAAA,EAED,OAAO;AAAA,IACL,OAAO,iBAAiB,OAAO,KAAK;AAAA,IACpC,QAAQ,iBAAiB,OAAO,MAAM;AAAA,IACtC,OAAO,QAAQ,OAAO,KAAK;AAAA,IAC3B,MAAM,QAAQ,OAAO,IAAI;AAAA,EAC3B;AAAA;AAGF,SAAS,gBAAgB,CAAC,OAAyD;AAAA,EACjF,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA;AAG7C,SAAS,eAAe,GAAW;AAAA,EACjC,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,EAAE,QAAQ;AAAA,IACzB;AAAA,EACF,EAAE,KAAK;AAAA,CAAI;AAAA;AAGb,SAAS,cAAc,GAAW;AAAA,EAChC,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK;AAAA,CAAI;AAAA;AAGb,SAAS,iBAAiB,GAAW;AAAA,EACnC,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK;AAAA,CAAI;AAAA;AAGb,SAAS,qBAAqB,GAAW;AAAA,EACvC,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK;AAAA,CAAI;AAAA;AAGb,SAAS,kBAAkB,CAAC,OAAwB;AAAA,EAClD,IAAI,iBAAiB,OAAO;AAAA,IAC1B,OAAO,MAAM;AAAA,EACf;AAAA,EACA,OAAO,OAAO,KAAK;AAAA;AAGrB,IAAI,kBAAkB;AAAA,EACpB,MAAM,WAAW,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC;AAAA,EACnD,QAAQ,KAAK,QAAQ;AACvB;",
|
|
16
|
-
"debugId": "
|
|
15
|
+
"mappings": "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",
|
|
16
|
+
"debugId": "2598B6F54188F97964756E2164756E21",
|
|
17
17
|
"names": []
|
|
18
18
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { createEnv } from "./env.ts";
|
|
2
2
|
export { ClientAccessError, EnvValidationError } from "./errors.ts";
|
|
3
|
+
export { buildEnvExample, examineSchema, type ExaminedSchema } from "./introspect.ts";
|
|
3
4
|
export { fromRemoteSecrets } from "./resolvers/remote.ts";
|
|
4
5
|
export type { SecretClient } from "./resolvers/types.ts";
|
|
5
6
|
export { safeCreateEnv } from "./safe-env.ts";
|