@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/index.js.map CHANGED
@@ -1,17 +1,21 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/env.ts", "../src/errors.ts", "../src/prefix.ts", "../src/resolvers/remote.ts", "../src/resolvers/utils.ts", "../src/resolvers/types.ts", "../src/safe-env.ts", "../src/schemas.ts"],
3
+ "sources": ["../src/env.ts", "../src/errors.ts", "../src/prefix.ts", "../src/introspect.ts", "../src/cli/dotenv-codec.ts", "../src/cli/literals.ts", "../src/cli/types.ts", "../src/schemas.ts", "../src/resolvers/remote.ts", "../src/resolvers/utils.ts", "../src/resolvers/types.ts", "../src/safe-env.ts"],
4
4
  "sourcesContent": [
5
- "import { Effect, Either, ParseResult, Redacted, Schema } from \"effect\";\n\nimport { ClientAccessError, EnvValidationError } from \"./errors.ts\";\nimport { resolvePrefixMap } from \"./prefix.ts\";\nimport type { ResolverError, ResolverResult } from \"./resolvers/types.ts\";\nimport type {\n AnyEnv,\n EnvOptions,\n EnvResult,\n EnvResultAutoRedacted,\n ExtractResolverKeys,\n InternalEnvOptions,\n PrefixMap,\n PrefixStr,\n SchemaDict,\n} from \"./types.ts\";\n\ninterface EnvMeta {\n readonly serverKeys: ReadonlySet<string>;\n readonly clientKeys: ReadonlySet<string>;\n readonly sharedKeys: ReadonlySet<string>;\n}\n\ninterface AggregatedKeys {\n serverKeys: Set<string>;\n clientKeys: Set<string>;\n sharedKeys: Set<string>;\n}\n\nconst envMetaStore = new WeakMap<object, EnvMeta>();\n\ntype EnvCategory = keyof Required<PrefixMap>;\n\nfunction addToSet(target: Set<string>, values: Iterable<string>) {\n for (const value of values) {\n target.add(value);\n }\n}\n\nfunction getEnvMeta(env: unknown): EnvMeta | undefined {\n if (typeof env !== \"object\" || env === null) {\n return undefined;\n }\n\n return envMetaStore.get(env);\n}\n\nfunction normalizeRuntimeEnv(\n runtimeEnv: Record<string, string | undefined>,\n emptyStringAsUndefined: boolean | undefined,\n): Record<string, string | undefined> {\n if (!emptyStringAsUndefined) {\n return runtimeEnv;\n }\n\n return Object.fromEntries(\n Object.entries(runtimeEnv).map(([key, value]) => [key, value === \"\" ? undefined : value]),\n );\n}\n\nfunction aggregateEnvKeys(\n server: SchemaDict,\n client: SchemaDict,\n shared: SchemaDict,\n extendsEnvs: readonly AnyEnv[],\n): AggregatedKeys {\n const serverKeys = new Set<string>(Object.keys(server));\n const clientKeys = new Set<string>(Object.keys(client));\n const sharedKeys = new Set<string>(Object.keys(shared));\n\n for (const ext of extendsEnvs) {\n const meta = getEnvMeta(ext);\n if (!meta) continue;\n addToSet(serverKeys, meta.serverKeys);\n addToSet(clientKeys, meta.clientKeys);\n addToSet(sharedKeys, meta.sharedKeys);\n }\n\n return { serverKeys, clientKeys, sharedKeys };\n}\n\nfunction selectSchemaForRuntime(\n isServer: boolean,\n server: SchemaDict,\n client: SchemaDict,\n shared: SchemaDict,\n): SchemaDict {\n return isServer ? { ...server, ...client, ...shared } : { ...client, ...shared };\n}\n\nfunction getKeyCategory(key: string, client: SchemaDict, shared: SchemaDict): EnvCategory {\n if (key in client) return \"client\";\n if (key in shared) return \"shared\";\n return \"server\";\n}\n\nfunction parseSchemaValues(\n schema: SchemaDict,\n options: {\n client: SchemaDict;\n shared: SchemaDict;\n runtimeEnv: Record<string, string | undefined>;\n prefixMap: Required<PrefixMap>;\n autoRedactKeys?: ReadonlySet<string>;\n },\n): { values: Record<string, unknown>; errors: string[] } {\n const values: Record<string, unknown> = {};\n const errors: string[] = [];\n\n for (const [key, validator] of Object.entries(schema)) {\n const category = getKeyCategory(key, options.client, options.shared);\n const envKey = `${options.prefixMap[category]}${key}`;\n const rawValue = options.runtimeEnv[envKey];\n const parsed = Schema.decodeUnknownEither(validator)(rawValue);\n\n if (Either.isLeft(parsed)) {\n const detail = ParseResult.TreeFormatter.formatErrorSync(parsed.left);\n errors.push(`${envKey}: ${detail}`);\n continue;\n }\n\n let finalValue = parsed.right;\n if (options.autoRedactKeys?.has(envKey) && !Redacted.isRedacted(finalValue)) {\n finalValue = Redacted.make(finalValue);\n }\n\n values[key] = finalValue;\n }\n\n return { values, errors };\n}\n\nfunction raiseValidationErrors(\n errors: string[],\n onValidationError?: (errors: string[]) => void,\n): void {\n if (errors.length === 0) {\n return;\n }\n\n if (onValidationError) {\n try {\n onValidationError(errors);\n } catch (error) {\n throw error instanceof EnvValidationError ? error : new EnvValidationError([String(error)]);\n }\n }\n\n throw new EnvValidationError(errors);\n}\n\nfunction mergeExtendedEnvs(\n extendsEnvs: readonly AnyEnv[],\n parsedValues: Record<string, unknown>,\n): Record<string, unknown> {\n const mergedValues: Record<string, unknown> = {};\n\n for (const ext of extendsEnvs) {\n for (const [key, value] of Object.entries(ext)) {\n mergedValues[key] = value;\n }\n }\n\n for (const [key, value] of Object.entries(parsedValues)) {\n mergedValues[key] = value;\n }\n\n return mergedValues;\n}\n\nfunction createClientBlockedKeys(aggregated: AggregatedKeys): Set<string> {\n const blockedKeys = new Set<string>();\n\n for (const key of aggregated.serverKeys) {\n if (!aggregated.clientKeys.has(key) && !aggregated.sharedKeys.has(key)) {\n blockedKeys.add(key);\n }\n }\n\n return blockedKeys;\n}\n\nfunction createReadOnlyEnv<T extends AnyEnv>(\n envValues: Record<string, unknown>,\n options: {\n isServer: boolean;\n clientBlockedKeys: ReadonlySet<string>;\n },\n): T {\n const frozenValues = Object.freeze(envValues);\n\n return new Proxy(frozenValues, {\n get(target, prop) {\n if (typeof prop !== \"string\") return undefined;\n if (!options.isServer && options.clientBlockedKeys.has(prop)) {\n throw new ClientAccessError(prop);\n }\n\n return Reflect.get(target, prop);\n },\n set() {\n throw new TypeError(\"Environment object is read-only\");\n },\n deleteProperty() {\n throw new TypeError(\"Environment object is read-only\");\n },\n defineProperty() {\n throw new TypeError(\"Environment object is read-only\");\n },\n }) as T;\n}\n\nfunction buildEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n>(\n opts: InternalEnvOptions<TServer, TClient, TShared, TExtends>,\n): EnvResult<TExtends, TServer, TClient, TShared> {\n const extendsEnvs = opts.extends ?? [];\n const runtimeEnv = normalizeRuntimeEnv(\n opts.runtimeEnv ?? process.env,\n opts.emptyStringAsUndefined,\n );\n const isServer = opts.isServer ?? typeof window === \"undefined\";\n\n const server = opts.server ?? ({} as TServer);\n const client = opts.client ?? ({} as TClient);\n const shared = opts.shared ?? ({} as TShared);\n\n const aggregated = aggregateEnvKeys(server, client, shared, extendsEnvs);\n const prefixMap = resolvePrefixMap(opts.prefix);\n const runtimeSchema = selectSchemaForRuntime(isServer, server, client, shared);\n const { values: parsedValues, errors } = parseSchemaValues(runtimeSchema, {\n client,\n shared,\n runtimeEnv,\n prefixMap,\n autoRedactKeys: opts._autoRedactKeys,\n });\n\n raiseValidationErrors(errors, opts.onValidationError);\n\n const mergedValues = mergeExtendedEnvs(extendsEnvs, parsedValues);\n const clientBlockedKeys = createClientBlockedKeys(aggregated);\n const env = createReadOnlyEnv<EnvResult<TExtends, TServer, TClient, TShared>>(mergedValues, {\n isServer,\n clientBlockedKeys,\n });\n\n envMetaStore.set(env as object, {\n serverKeys: aggregated.serverKeys,\n clientKeys: aggregated.clientKeys,\n sharedKeys: aggregated.sharedKeys,\n });\n\n return env;\n}\n\nexport function createEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver: false;\n },\n): Effect.Effect<\n EnvResult<TExtends, TServer, TClient, TShared>,\n ResolverError | EnvValidationError\n>;\n\n// Overload: with resolvers (autoRedactResolver defaults to true) -> auto-redact resolver keys\nexport function createEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n const TPrefix extends string | PrefixMap | undefined = undefined,\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver?: true;\n prefix?: TPrefix;\n },\n): Effect.Effect<\n EnvResultAutoRedacted<\n TExtends,\n TServer,\n TClient,\n TShared,\n ExtractResolverKeys<TResolvers>,\n PrefixStr<TPrefix>\n >,\n ResolverError | EnvValidationError\n>;\n\n// Overload: without resolvers -> synchronous\nexport function createEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends>,\n): EnvResult<TExtends, TServer, TClient, TShared>;\n\nexport function createEnv(\n opts: EnvOptions<SchemaDict, SchemaDict, SchemaDict, readonly AnyEnv[]> & {\n resolvers?: readonly Effect.Effect<ResolverResult, ResolverError>[];\n autoRedactResolver?: boolean;\n },\n) {\n if (opts.resolvers?.length) {\n const shouldAutoRedact = opts.autoRedactResolver !== false;\n return Effect.all(opts.resolvers, { concurrency: \"unbounded\" }).pipe(\n Effect.map((results) => {\n const autoRedactKeys = new Set<string>();\n if (shouldAutoRedact) {\n for (const result of results) {\n for (const [key, value] of Object.entries(result)) {\n if (value !== undefined) {\n autoRedactKeys.add(key);\n }\n }\n }\n }\n\n return {\n mergedEnv: Object.assign({}, opts.runtimeEnv ?? process.env, ...results),\n autoRedactKeys,\n };\n }),\n Effect.flatMap(({ mergedEnv, autoRedactKeys }) =>\n Effect.try({\n try: () =>\n buildEnv({\n ...opts,\n runtimeEnv: mergedEnv,\n _autoRedactKeys: shouldAutoRedact ? autoRedactKeys : undefined,\n }),\n catch: (error) =>\n error instanceof EnvValidationError ? error : new EnvValidationError([String(error)]),\n }),\n ),\n );\n }\n\n return buildEnv(opts);\n}\n",
5
+ "import { Effect, Either, ParseResult, Redacted, Schema } from \"effect\";\n\nimport { ClientAccessError, EnvValidationError } from \"./errors.ts\";\nimport { resolvePrefixMap } from \"./prefix.ts\";\nimport type { ResolverError, ResolverResult } from \"./resolvers/types.ts\";\nimport type {\n AnyEnv,\n EnvOptions,\n EnvResult,\n EnvResultAutoRedacted,\n ExtractResolverKeys,\n InternalEnvOptions,\n PrefixMap,\n PrefixStr,\n SchemaDict,\n} from \"./types.ts\";\n\ninterface EnvMeta {\n readonly serverKeys: ReadonlySet<string>;\n readonly clientKeys: ReadonlySet<string>;\n readonly sharedKeys: ReadonlySet<string>;\n}\n\ninterface AggregatedKeys {\n serverKeys: Set<string>;\n clientKeys: Set<string>;\n sharedKeys: Set<string>;\n}\n\nconst envMetaStore = new WeakMap<object, EnvMeta>();\n\ntype EnvCategory = keyof Required<PrefixMap>;\n\nfunction addToSet(target: Set<string>, values: Iterable<string>) {\n for (const value of values) {\n target.add(value);\n }\n}\n\nfunction getEnvMeta(env: unknown): EnvMeta | undefined {\n if (typeof env !== \"object\" || env === null) {\n return undefined;\n }\n\n return envMetaStore.get(env);\n}\n\nfunction normalizeRuntimeEnv(\n runtimeEnv: Record<string, string | undefined>,\n emptyStringAsUndefined: boolean | undefined,\n): Record<string, string | undefined> {\n if (!emptyStringAsUndefined) {\n return runtimeEnv;\n }\n\n return Object.fromEntries(\n Object.entries(runtimeEnv).map(([key, value]) => [key, value === \"\" ? undefined : value]),\n );\n}\n\nfunction aggregateEnvKeys(\n server: SchemaDict,\n client: SchemaDict,\n shared: SchemaDict,\n extendsEnvs: readonly AnyEnv[],\n): AggregatedKeys {\n const serverKeys = new Set<string>(Object.keys(server));\n const clientKeys = new Set<string>(Object.keys(client));\n const sharedKeys = new Set<string>(Object.keys(shared));\n\n for (const ext of extendsEnvs) {\n const meta = getEnvMeta(ext);\n if (!meta) continue;\n addToSet(serverKeys, meta.serverKeys);\n addToSet(clientKeys, meta.clientKeys);\n addToSet(sharedKeys, meta.sharedKeys);\n }\n\n return { serverKeys, clientKeys, sharedKeys };\n}\n\nfunction selectSchemaForRuntime(\n isServer: boolean,\n server: SchemaDict,\n client: SchemaDict,\n shared: SchemaDict,\n): SchemaDict {\n return isServer ? { ...server, ...client, ...shared } : { ...client, ...shared };\n}\n\nfunction getKeyCategory(key: string, client: SchemaDict, shared: SchemaDict): EnvCategory {\n if (key in client) return \"client\";\n if (key in shared) return \"shared\";\n return \"server\";\n}\n\nfunction parseSchemaValues(\n schema: SchemaDict,\n options: {\n client: SchemaDict;\n shared: SchemaDict;\n runtimeEnv: Record<string, string | undefined>;\n prefixMap: Required<PrefixMap>;\n autoRedactKeys?: ReadonlySet<string>;\n },\n): { values: Record<string, unknown>; errors: string[] } {\n const values: Record<string, unknown> = {};\n const errors: string[] = [];\n\n for (const [key, validator] of Object.entries(schema)) {\n const category = getKeyCategory(key, options.client, options.shared);\n const envKey = `${options.prefixMap[category]}${key}`;\n const rawValue = options.runtimeEnv[envKey];\n const parsed = Schema.decodeUnknownEither(validator)(rawValue);\n\n if (Either.isLeft(parsed)) {\n const detail = ParseResult.TreeFormatter.formatErrorSync(parsed.left);\n errors.push(`${envKey}: ${detail}`);\n continue;\n }\n\n let finalValue = parsed.right;\n if (options.autoRedactKeys?.has(envKey) && !Redacted.isRedacted(finalValue)) {\n finalValue = Redacted.make(finalValue);\n }\n\n values[key] = finalValue;\n }\n\n return { values, errors };\n}\n\nfunction raiseValidationErrors(\n errors: string[],\n onValidationError?: (errors: string[]) => void,\n): void {\n if (errors.length === 0) {\n return;\n }\n\n if (onValidationError) {\n try {\n onValidationError(errors);\n } catch (error) {\n throw error instanceof EnvValidationError ? error : new EnvValidationError([String(error)]);\n }\n }\n\n throw new EnvValidationError(errors);\n}\n\nfunction mergeExtendedEnvs(\n extendsEnvs: readonly AnyEnv[],\n parsedValues: Record<string, unknown>,\n): Record<string, unknown> {\n const mergedValues: Record<string, unknown> = {};\n\n for (const ext of extendsEnvs) {\n for (const [key, value] of Object.entries(ext)) {\n mergedValues[key] = value;\n }\n }\n\n for (const [key, value] of Object.entries(parsedValues)) {\n mergedValues[key] = value;\n }\n\n return mergedValues;\n}\n\nfunction createClientBlockedKeys(aggregated: AggregatedKeys): Set<string> {\n const blockedKeys = new Set<string>();\n\n for (const key of aggregated.serverKeys) {\n if (!aggregated.clientKeys.has(key) && !aggregated.sharedKeys.has(key)) {\n blockedKeys.add(key);\n }\n }\n\n return blockedKeys;\n}\n\nfunction createReadOnlyEnv<T extends AnyEnv>(\n envValues: Record<string, unknown>,\n options: {\n isServer: boolean;\n clientBlockedKeys: ReadonlySet<string>;\n },\n): T {\n const frozenValues = Object.freeze(envValues);\n\n return new Proxy(frozenValues, {\n get(target, prop) {\n if (typeof prop !== \"string\") return undefined;\n if (!options.isServer && options.clientBlockedKeys.has(prop)) {\n throw new ClientAccessError(prop);\n }\n\n return Reflect.get(target, prop);\n },\n set() {\n throw new TypeError(\"Environment object is read-only\");\n },\n deleteProperty() {\n throw new TypeError(\"Environment object is read-only\");\n },\n defineProperty() {\n throw new TypeError(\"Environment object is read-only\");\n },\n }) as T;\n}\n\nfunction buildEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n>(\n opts: InternalEnvOptions<TServer, TClient, TShared, TExtends>,\n): EnvResult<TExtends, TServer, TClient, TShared> {\n const extendsEnvs = opts.extends ?? [];\n const runtimeEnv = normalizeRuntimeEnv(\n opts.runtimeEnv ?? process.env,\n opts.emptyStringAsUndefined,\n );\n const isServer = opts.isServer ?? typeof window === \"undefined\";\n\n const server = opts.server ?? ({} as TServer);\n const client = opts.client ?? ({} as TClient);\n const shared = opts.shared ?? ({} as TShared);\n\n const aggregated = aggregateEnvKeys(server, client, shared, extendsEnvs);\n const prefixMap = resolvePrefixMap(opts.prefix);\n const runtimeSchema = selectSchemaForRuntime(isServer, server, client, shared);\n const { values: parsedValues, errors } = parseSchemaValues(runtimeSchema, {\n client,\n shared,\n runtimeEnv,\n prefixMap,\n autoRedactKeys: opts._autoRedactKeys,\n });\n\n raiseValidationErrors(errors, opts.onValidationError);\n\n const mergedValues = mergeExtendedEnvs(extendsEnvs, parsedValues);\n const clientBlockedKeys = createClientBlockedKeys(aggregated);\n const env = createReadOnlyEnv<EnvResult<TExtends, TServer, TClient, TShared>>(mergedValues, {\n isServer,\n clientBlockedKeys,\n });\n\n envMetaStore.set(env as object, {\n serverKeys: aggregated.serverKeys,\n clientKeys: aggregated.clientKeys,\n sharedKeys: aggregated.sharedKeys,\n });\n\n return env;\n}\n\nexport function createEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver: false;\n },\n): Effect.Effect<\n EnvResult<TExtends, TServer, TClient, TShared>,\n ResolverError | EnvValidationError\n>;\n\n// Overload: with resolvers (autoRedactResolver defaults to true) -> auto-redact resolver keys\nexport function createEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n const TPrefix extends string | PrefixMap | undefined = undefined,\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver?: true;\n prefix?: TPrefix;\n },\n): Effect.Effect<\n EnvResultAutoRedacted<\n TExtends,\n TServer,\n TClient,\n TShared,\n ExtractResolverKeys<TResolvers>,\n PrefixStr<TPrefix>\n >,\n ResolverError | EnvValidationError\n>;\n\n// Overload: without resolvers -> synchronous\nexport function createEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends>,\n): EnvResult<TExtends, TServer, TClient, TShared>;\n\nexport function createEnv(\n opts: EnvOptions<SchemaDict, SchemaDict, SchemaDict, readonly AnyEnv[]> & {\n resolvers?: readonly Effect.Effect<ResolverResult, ResolverError>[];\n autoRedactResolver?: boolean;\n },\n) {\n if (process.env.ENVIL_INTROSPECT_ONLY === \"1\") {\n return new Proxy({}, { get: () => undefined }) as any;\n }\n\n if (opts.resolvers?.length) {\n const shouldAutoRedact = opts.autoRedactResolver !== false;\n return Effect.all(opts.resolvers, { concurrency: \"unbounded\" }).pipe(\n Effect.map((results) => {\n const autoRedactKeys = new Set<string>();\n if (shouldAutoRedact) {\n for (const result of results) {\n for (const [key, value] of Object.entries(result)) {\n if (value !== undefined) {\n autoRedactKeys.add(key);\n }\n }\n }\n }\n\n return {\n mergedEnv: Object.assign({}, opts.runtimeEnv ?? process.env, ...results),\n autoRedactKeys,\n };\n }),\n Effect.flatMap(({ mergedEnv, autoRedactKeys }) =>\n Effect.try({\n try: () =>\n buildEnv({\n ...opts,\n runtimeEnv: mergedEnv,\n _autoRedactKeys: shouldAutoRedact ? autoRedactKeys : undefined,\n }),\n catch: (error) =>\n error instanceof EnvValidationError ? error : new EnvValidationError([String(error)]),\n }),\n ),\n );\n }\n\n return buildEnv(opts);\n}\n",
6
6
  "export class EnvValidationError extends Error {\n readonly _tag = \"EnvValidationError\" as const;\n readonly errors: ReadonlyArray<string>;\n constructor(errors: ReadonlyArray<string>) {\n super(`Invalid environment variables:\\n${errors.join(\"\\n\")}`);\n this.name = \"EnvValidationError\";\n this.errors = errors;\n }\n}\n\nexport class ClientAccessError extends Error {\n readonly _tag = \"ClientAccessError\" as const;\n readonly variableName: string;\n constructor(variableName: string) {\n super(`Attempted to access server-side env var \"${variableName}\" on client`);\n this.name = \"ClientAccessError\";\n this.variableName = variableName;\n }\n}\n",
7
7
  "export interface PrefixMap {\n server?: string;\n client?: string;\n shared?: string;\n}\n\nexport function resolvePrefixMap(prefix: string | PrefixMap | undefined): Required<PrefixMap> {\n if (typeof prefix === \"string\" || prefix === undefined) {\n const value = prefix ?? \"\";\n return { server: value, client: value, shared: value };\n }\n\n return {\n server: prefix.server ?? \"\",\n client: prefix.client ?? \"\",\n shared: prefix.shared ?? \"\",\n };\n}\n",
8
+ "import { Option, Redacted, Schema, SchemaAST } from \"effect\";\n\nimport { encodeDotenvText } from \"./cli/dotenv-codec.ts\";\nimport type { Bucket, SchemaKind } from \"./cli/types.ts\";\nimport {\n DEFAULT_VALUE_ANNOTATION,\n OPTIONAL_ANNOTATION,\n PLACEHOLDER_ANNOTATION,\n REDACTED_ANNOTATION,\n SCHEMA_KIND_ANNOTATION,\n STRING_ENUM_VALUES_ANNOTATION,\n} from \"./schemas.ts\";\nimport type { SchemaDict } from \"./types.ts\";\n\nconst BUCKETS = [\"server\", \"client\", \"shared\"] as const;\n\ninterface EnvDefinition {\n prefix?: { server?: string; client?: string; shared?: string };\n server?: SchemaDict;\n client?: SchemaDict;\n shared?: SchemaDict;\n}\n\nexport interface ExaminedSchema {\n readonly kind: SchemaKind | undefined;\n readonly placeholder: string | undefined;\n readonly optional: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue: unknown;\n readonly redacted: boolean;\n readonly stringEnumValues?: readonly string[];\n}\n\nfunction getAnn<T>(ast: SchemaAST.Annotated, key: symbol): T | undefined {\n return Option.getOrUndefined(SchemaAST.getAnnotation<T>(ast, key));\n}\n\nexport function examineSchema(schema: Schema.Schema.Any): ExaminedSchema {\n let ast: SchemaAST.AST = schema.ast;\n let isRedacted = false;\n let isOptional = false;\n let hasDefault = false;\n let defaultValue: unknown = undefined;\n\n // Peel redacted layer (outermost Transformation with REDACTED_ANNOTATION)\n if (SchemaAST.isTransformation(ast) && getAnn<boolean>(ast, REDACTED_ANNOTATION)) {\n isRedacted = true;\n ast = ast.from;\n }\n\n // Peel withDefault layer (Transformation with DEFAULT_VALUE_ANNOTATION)\n if (SchemaAST.isTransformation(ast) && getAnn(ast, DEFAULT_VALUE_ANNOTATION) !== undefined) {\n hasDefault = true;\n defaultValue = getAnn(ast, DEFAULT_VALUE_ANNOTATION);\n // withDefault wraps UndefinedOr(schema) -> schema, `from` is the Union\n const fromAst = ast.from;\n if (SchemaAST.isUnion(fromAst)) {\n const nonUndefined = fromAst.types.find((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined) ast = nonUndefined;\n }\n }\n\n // Peel optional layer (Union with OPTIONAL_ANNOTATION)\n if (SchemaAST.isUnion(ast) && getAnn<boolean>(ast, OPTIONAL_ANNOTATION)) {\n isOptional = true;\n const nonUndefined = ast.types.find((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined) ast = nonUndefined;\n }\n\n const kind = getAnn<SchemaKind>(ast, SCHEMA_KIND_ANNOTATION);\n const placeholder = getAnn<string>(ast, PLACEHOLDER_ANNOTATION);\n const stringEnumValues =\n kind === \"stringEnum\"\n ? getAnn<readonly string[]>(ast, STRING_ENUM_VALUES_ANNOTATION)\n : undefined;\n\n return {\n kind,\n placeholder,\n optional: isOptional,\n hasDefault,\n defaultValue,\n redacted: isRedacted,\n stringEnumValues,\n };\n}\n\nexport function buildEnvExample(definition: EnvDefinition): string {\n const prefix = {\n server: definition.prefix?.server ?? \"\",\n client: definition.prefix?.client ?? \"\",\n shared: definition.prefix?.shared ?? \"\",\n };\n\n const entries = [];\n let line = 1;\n\n for (const bucket of BUCKETS) {\n const schemas = definition[bucket] ?? {};\n const keys = Object.keys(schemas).sort();\n\n for (const key of keys) {\n const schema = schemas[key];\n const examined = examineSchema(schema);\n const runtimeKey = `${prefix[bucket]}${key}`;\n\n let value: string;\n if (examined.hasDefault) {\n value = encodeDefault(schema, examined);\n } else {\n value = examined.placeholder ?? \"CHANGE_ME\";\n }\n\n entries.push({\n key: runtimeKey,\n value,\n line,\n sectionBucket: bucket as Bucket,\n directives: {\n type: examined.kind,\n bucket: bucket as Bucket,\n optional: examined.optional,\n hasDefault: examined.hasDefault,\n redacted: examined.redacted,\n stringEnumValues: examined.stringEnumValues,\n },\n });\n line += 1;\n }\n }\n\n const hasPrefix = Object.values(prefix).some((v) => v.length > 0);\n return encodeDotenvText({ entries, ...(hasPrefix ? { prefix } : {}) });\n}\n\nfunction encodeDefault(schema: Schema.Schema.Any, examined: ExaminedSchema): string {\n // Encode the default value back to its string representation using the\n // schema's encode direction. For redacted schemas we wrap in Redacted first.\n try {\n let valueToEncode = examined.defaultValue;\n if (examined.redacted) {\n valueToEncode = Redacted.make(valueToEncode);\n }\n const encoded = Schema.encodeSync(schema as Schema.Schema<unknown, unknown, never>)(\n valueToEncode,\n );\n return String(encoded ?? \"\");\n } catch {\n return stringifyDefault(examined);\n }\n}\n\nfunction stringifyDefault(examined: ExaminedSchema): string {\n const val = examined.defaultValue;\n if (val === undefined || val === null) return \"\";\n if (Array.isArray(val)) return val.map(String).join(\",\");\n if (typeof val === \"object\") return JSON.stringify(val);\n return String(val);\n}\n",
9
+ "import { Schema } from \"effect\";\n\nimport { parseBooleanDirective, toEnvValueLiteral } from \"./literals.ts\";\nimport {\n BUCKETS,\n SCHEMA_KINDS,\n type Bucket,\n type DotenvDocument,\n type SchemaKind,\n} from \"./types.ts\";\n\ntype MutableDirectives = {\n type?: SchemaKind;\n optional?: boolean;\n hasDefault?: boolean;\n redacted?: boolean;\n bucket?: Bucket;\n stringEnumValues?: readonly string[];\n};\n\nconst SENTINEL_DIRECTIVE_PREFIX = \"@\";\nconst KEY_ASSIGNMENT_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s*=(.*)$/;\n\nconst DotenvCodec = Schema.transform(Schema.String, Schema.Unknown, {\n decode: (text) => parseDotenvText(String(text)),\n encode: (value) => stringifyDotenvDocument(value as DotenvDocument),\n});\n\nexport function decodeDotenvText(text: string): DotenvDocument {\n return Schema.decodeUnknownSync(DotenvCodec)(text) as DotenvDocument;\n}\n\nexport function encodeDotenvText(document: DotenvDocument): string {\n return Schema.encodeSync(DotenvCodec)(document) as string;\n}\n\nfunction parseDotenvText(text: string): DotenvDocument {\n const lines = text.split(/\\r?\\n/);\n const entries: Array<DotenvDocument[\"entries\"][number]> = [];\n const prefix: Partial<Record<Bucket, string>> = {};\n let activeBucket: Bucket | undefined;\n let pendingDirectives: MutableDirectives = {};\n\n for (const [index, line] of lines.entries()) {\n const lineNumber = index + 1;\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n\n if (trimmed.startsWith(\"#\")) {\n const comment = trimmed.slice(1).trim();\n if (comment.startsWith(SENTINEL_DIRECTIVE_PREFIX)) {\n const directiveResult = parseDirectiveGroup(comment, lineNumber, pendingDirectives);\n if (directiveResult.sectionBucket) {\n activeBucket = directiveResult.sectionBucket;\n if (directiveResult.sectionPrefix) {\n prefix[directiveResult.sectionBucket] = directiveResult.sectionPrefix;\n }\n pendingDirectives = {};\n } else {\n pendingDirectives = directiveResult.directives;\n }\n }\n continue;\n }\n\n const assignmentMatch = KEY_ASSIGNMENT_PATTERN.exec(trimmed);\n if (!assignmentMatch) {\n throw new Error(`Malformed assignment at line ${lineNumber}: \"${line}\"`);\n }\n\n const key = assignmentMatch[1];\n const rightHandSide = assignmentMatch[2];\n const split = splitValueAndInlineComment(rightHandSide);\n const value = normalizeAssignedValue(split.value.trim());\n\n let directives = { ...pendingDirectives };\n if (split.comment) {\n const inlineComment = split.comment.trim();\n if (inlineComment.startsWith(SENTINEL_DIRECTIVE_PREFIX)) {\n const parsedInline = parseDirectiveGroup(inlineComment, lineNumber, directives);\n if (parsedInline.sectionBucket) {\n throw new Error(`Section directives are not allowed inline at line ${lineNumber}`);\n }\n directives = parsedInline.directives;\n }\n }\n\n entries.push({\n key,\n value,\n line: lineNumber,\n sectionBucket: activeBucket,\n directives,\n });\n pendingDirectives = {};\n }\n\n const hasPrefix = Object.values(prefix).some((v) => v && v.length > 0);\n return { entries, ...(hasPrefix ? { prefix } : {}) };\n}\n\nfunction stringifyDotenvDocument(document: DotenvDocument): string {\n if (!document || !Array.isArray(document.entries)) {\n throw new Error(\"Invalid dotenv document: expected an entries array\");\n }\n\n const grouped = {\n server: [] as Array<DotenvDocument[\"entries\"][number]>,\n client: [] as Array<DotenvDocument[\"entries\"][number]>,\n shared: [] as Array<DotenvDocument[\"entries\"][number]>,\n };\n\n const sortedEntries = [...document.entries].sort((left, right) => {\n if (left.line !== right.line) return left.line - right.line;\n return left.key.localeCompare(right.key);\n });\n\n for (const entry of sortedEntries) {\n const bucket: Bucket = entry.directives.bucket ?? entry.sectionBucket ?? \"server\";\n grouped[bucket].push(entry);\n }\n\n const lines: string[] = [];\n\n for (const bucket of BUCKETS) {\n const pfx = document.prefix?.[bucket];\n lines.push(pfx && pfx.length > 0 ? `# @${bucket} ${pfx}` : `# @${bucket}`);\n lines.push(\"\");\n\n for (const entry of grouped[bucket]) {\n const optional = entry.directives.optional ?? false;\n const redacted = entry.directives.redacted ?? false;\n const noDefault = entry.directives.hasDefault === false;\n\n if (entry.directives.type === \"stringEnum\" && entry.directives.stringEnumValues) {\n lines.push(`# @type enum ${entry.directives.stringEnumValues.join(\",\")}`);\n }\n if (optional) lines.push(\"# @optional\");\n if (noDefault) lines.push(\"# @no-default\");\n if (redacted) lines.push(\"# @redacted\");\n lines.push(`${entry.key}=${serializeEnvValue(entry.value)}`);\n lines.push(\"\");\n }\n }\n\n while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction splitValueAndInlineComment(value: string): { value: string; comment?: string } {\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let escaped = false;\n\n for (let index = 0; index < value.length; index += 1) {\n const char = value[index];\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n\n if (char === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n continue;\n }\n\n if (char === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n continue;\n }\n\n if (!inSingleQuote && !inDoubleQuote && char === \"#\") {\n return {\n value: value.slice(0, index).trimEnd(),\n comment: value.slice(index + 1),\n };\n }\n }\n\n return { value };\n}\n\nfunction parseDirectiveGroup(\n directiveText: string,\n lineNumber: number,\n base: MutableDirectives,\n): { directives: MutableDirectives; sectionBucket?: Bucket; sectionPrefix?: string } {\n const directives = { ...base };\n const tokens = directiveText\n .split(/\\s+(?=@)/g)\n .map((token) => token.trim())\n .filter(Boolean);\n\n let sectionBucket: Bucket | undefined;\n let sectionPrefix: string | undefined;\n for (const token of tokens) {\n const parsed = parseDirectiveToken(token, lineNumber);\n if (\"type\" in parsed) directives.type = parsed.type;\n if (\"optional\" in parsed) directives.optional = parsed.optional;\n if (\"hasDefault\" in parsed) directives.hasDefault = parsed.hasDefault;\n if (\"redacted\" in parsed) directives.redacted = parsed.redacted;\n if (\"bucket\" in parsed) directives.bucket = parsed.bucket;\n if (\"stringEnumValues\" in parsed) directives.stringEnumValues = parsed.stringEnumValues;\n if (\"sectionBucket\" in parsed) sectionBucket = parsed.sectionBucket;\n if (\"sectionPrefix\" in parsed) sectionPrefix = parsed.sectionPrefix;\n }\n\n return { directives, sectionBucket, sectionPrefix };\n}\n\nfunction parseDirectiveToken(\n token: string,\n lineNumber: number,\n): MutableDirectives & { sectionBucket?: Bucket; sectionPrefix?: string } {\n if (!token.startsWith(\"@\")) {\n throw new Error(`Malformed directive at line ${lineNumber}: \"${token}\"`);\n }\n\n const spaceIndex = token.indexOf(\" \");\n const name = (spaceIndex === -1 ? token.slice(1) : token.slice(1, spaceIndex)).trim();\n const value = (spaceIndex === -1 ? \"\" : token.slice(spaceIndex + 1)).trim();\n\n if (name === \"server\" || name === \"client\" || name === \"shared\") {\n return value.length > 0\n ? { sectionBucket: name, sectionPrefix: value }\n : { sectionBucket: name };\n }\n\n if (name === \"type\") {\n if (value.length === 0) {\n throw new Error(`Directive \"@type\" requires a value at line ${lineNumber}`);\n }\n if (value === \"enum\" || value.startsWith(\"enum \")) {\n const raw = value.slice(4).trim();\n if (raw.length === 0) {\n throw new Error(\n `Directive \"@type enum\" requires comma-separated values at line ${lineNumber}`,\n );\n }\n const stringEnumValues = raw\n .split(\",\")\n .map((v) => v.trim())\n .filter(Boolean);\n if (stringEnumValues.length === 0) {\n throw new Error(`Directive \"@type enum\" requires at least one value at line ${lineNumber}`);\n }\n return { type: \"stringEnum\", stringEnumValues };\n }\n return { type: parseSchemaKind(value, lineNumber) };\n }\n\n if (name === \"optional\") {\n return { optional: parseBooleanDirective(value || undefined, true) };\n }\n\n if (name === \"no-default\") {\n return { hasDefault: false };\n }\n\n if (name === \"redacted\") {\n return { redacted: parseBooleanDirective(value || undefined, true) };\n }\n\n if (name === \"bucket\") {\n if (value.length === 0) {\n throw new Error(`Directive \"@bucket\" requires a value at line ${lineNumber}`);\n }\n if (!isBucket(value)) {\n throw new Error(`Invalid bucket \"${value}\" at line ${lineNumber}`);\n }\n return { bucket: value };\n }\n\n throw new Error(`Unknown directive \"@${name}\" at line ${lineNumber}`);\n}\n\nfunction parseSchemaKind(rawValue: string, lineNumber: number): SchemaKind {\n const normalized = rawValue.trim().toLowerCase();\n const aliasMap: Record<string, SchemaKind> = {\n string: \"requiredString\",\n requiredstring: \"requiredString\",\n bool: \"boolean\",\n boolean: \"boolean\",\n int: \"integer\",\n integer: \"integer\",\n number: \"number\",\n port: \"port\",\n url: \"url\",\n postgresurl: \"postgresUrl\",\n redisurl: \"redisUrl\",\n mongourl: \"mongoUrl\",\n mysqlurl: \"mysqlUrl\",\n commaseparated: \"commaSeparated\",\n commaseparatednumbers: \"commaSeparatedNumbers\",\n commaseparatedurls: \"commaSeparatedUrls\",\n json: \"json\",\n \"json(schema.unknown)\": \"json\",\n };\n\n const resolved = aliasMap[normalized];\n if (!resolved || !SCHEMA_KINDS.includes(resolved)) {\n throw new Error(`Invalid @type value \"${rawValue}\" at line ${lineNumber}`);\n }\n\n return resolved;\n}\n\nfunction normalizeAssignedValue(value: string): string {\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n return value.slice(1, -1);\n }\n return value;\n}\n\nfunction serializeEnvValue(value: string): string {\n const literal = toEnvValueLiteral(value);\n if (literal.length === 0) return \"\";\n\n if (/[\\s#]/.test(literal)) {\n return JSON.stringify(literal);\n }\n\n return literal;\n}\n\nfunction isBucket(value: string): value is Bucket {\n return BUCKETS.includes(value as Bucket);\n}\n",
10
+ "export function parseLiteral(input: string): unknown {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return \"\";\n }\n\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ) {\n try {\n return JSON.parse(trimmed.replace(/^'/, '\"').replace(/'$/, '\"'));\n } catch {\n return trimmed.slice(1, -1);\n }\n }\n\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n if (trimmed === \"null\") return null;\n\n if (/^[+-]?\\d+(?:\\.\\d+)?$/.test(trimmed)) {\n const value = Number(trimmed);\n if (!Number.isNaN(value)) {\n return value;\n }\n }\n\n if (\n (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n ) {\n try {\n return JSON.parse(trimmed);\n } catch {\n return trimmed;\n }\n }\n\n return trimmed;\n}\n\nexport function toCodeLiteral(value: unknown): string {\n if (typeof value === \"string\") return JSON.stringify(value);\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n return JSON.stringify(value);\n}\n\nexport function toDirectiveLiteral(value: unknown): string {\n if (value === undefined) return \"\";\n return toCodeLiteral(value);\n}\n\nexport function toEnvValueLiteral(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === null || value === undefined) return \"\";\n return JSON.stringify(value);\n}\n\nexport function parseBooleanDirective(value: string | undefined, defaultValue: boolean): boolean {\n if (value === undefined || value.length === 0) {\n return defaultValue;\n }\n\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") return true;\n if (normalized === \"false\") return false;\n throw new Error(`Invalid boolean directive value \"${value}\"`);\n}\n",
11
+ "export const BUCKETS = [\"server\", \"client\", \"shared\"] as const;\nexport type Bucket = (typeof BUCKETS)[number];\n\nexport const SCHEMA_KINDS = [\n \"requiredString\",\n \"boolean\",\n \"integer\",\n \"number\",\n \"port\",\n \"url\",\n \"postgresUrl\",\n \"redisUrl\",\n \"mongoUrl\",\n \"mysqlUrl\",\n \"commaSeparated\",\n \"commaSeparatedNumbers\",\n \"commaSeparatedUrls\",\n \"json\",\n \"stringEnum\",\n] as const;\nexport type SchemaKind = (typeof SCHEMA_KINDS)[number];\n\nexport const FRAMEWORKS = [\"nextjs\", \"vite\", \"expo\", \"nuxt\", \"sveltekit\", \"astro\"] as const;\nexport type Framework = (typeof FRAMEWORKS)[number];\n\nexport interface PrefixConfig {\n readonly server: string;\n readonly client: string;\n readonly shared: string;\n}\n\nexport interface ParsedDirectives {\n readonly type?: SchemaKind;\n readonly optional?: boolean;\n readonly hasDefault?: boolean;\n readonly redacted?: boolean;\n readonly bucket?: Bucket;\n readonly stringEnumValues?: readonly string[];\n}\n\nexport interface DotenvAssignment {\n readonly key: string;\n readonly value: string;\n readonly line: number;\n readonly sectionBucket?: Bucket;\n readonly directives: ParsedDirectives;\n}\n\nexport interface DotenvDocument {\n readonly entries: ReadonlyArray<DotenvAssignment>;\n readonly prefix?: Partial<PrefixConfig>;\n}\n\nexport interface InferredVariable {\n readonly schemaKey: string;\n readonly runtimeKey: string;\n readonly bucket: Bucket;\n readonly kind: SchemaKind;\n readonly optional: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue?: unknown;\n readonly redacted: boolean;\n readonly sourceLine: number;\n readonly stringEnumValues?: readonly string[];\n}\n\nexport interface InferredModel {\n readonly prefix: PrefixConfig;\n readonly variables: ReadonlyArray<InferredVariable>;\n readonly runtimeEnv: Readonly<Record<string, string | undefined>>;\n}\n",
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",
8
13
  "import { Effect } from \"effect\";\n\nimport { ResolverError, type ResolverResult, type SecretClient } from \"./types.ts\";\nimport { fillMissingMapValues, keyValueResultsToRecord, strictOrElse } from \"./utils.ts\";\n\nexport { ResolverError } from \"./types.ts\";\n\ninterface RemoteSecretsOptions<K extends string = string> {\n secrets: Record<K, string>;\n client: SecretClient;\n strict?: boolean;\n}\n\nexport function fromRemoteSecrets<K extends string>(\n opts: RemoteSecretsOptions<K>,\n): Effect.Effect<ResolverResult<K>, ResolverError>;\nexport function fromRemoteSecrets(\n opts: RemoteSecretsOptions,\n): Effect.Effect<ResolverResult, ResolverError> {\n return Effect.gen(function* () {\n const { secrets, client, strict = false } = opts;\n const entries = Object.entries(secrets);\n const secretIds = entries.map(([, id]) => id);\n\n const secretValues = new Map<string, string | undefined>();\n\n if (client.getSecrets && secretIds.length > 1) {\n const batchResult = yield* strictOrElse(\n Effect.tryPromise(() => client.getSecrets!(secretIds)),\n {\n strict,\n resolver: \"remote\",\n message: \"Failed to resolve remote secrets batch\",\n fallback: () => new Map<string, string | undefined>(),\n },\n );\n\n for (const [id, value] of batchResult) {\n secretValues.set(id, value);\n }\n fillMissingMapValues(secretIds, secretValues);\n } else {\n const results = yield* Effect.forEach(\n secretIds,\n (secretId) =>\n strictOrElse(\n Effect.tryPromise(() => client.getSecret(secretId)),\n {\n strict,\n resolver: \"remote\",\n message: `Failed to resolve remote secret \"${secretId}\"`,\n fallback: () => undefined,\n },\n ).pipe(Effect.map((value) => ({ envKey: secretId, value }))),\n { concurrency: \"unbounded\" },\n );\n\n for (const { envKey, value } of results) {\n secretValues.set(envKey, value);\n }\n }\n\n return keyValueResultsToRecord(\n entries.map(([envKey, secretId]) => ({\n envKey,\n value: secretValues.get(secretId),\n })),\n );\n });\n}\n",
9
14
  "import { Effect } from \"effect\";\n\nimport { ResolverError } from \"./types.ts\";\n\nexport function toResolverError(resolver: string, message: string, cause?: unknown): ResolverError {\n return new ResolverError({ resolver, message, cause });\n}\n\nexport function tryInitializeClient<A>(\n resolver: string,\n message: string,\n initialize: () => Promise<A>,\n): Effect.Effect<A, ResolverError> {\n return Effect.tryPromise({\n try: initialize,\n catch: (cause) => toResolverError(resolver, message, cause),\n });\n}\n\nexport function strictOrElse<A>(\n effect: Effect.Effect<A, unknown>,\n options: {\n strict: boolean;\n resolver: string;\n message: string;\n fallback: () => A;\n },\n): Effect.Effect<A, ResolverError> {\n return options.strict\n ? effect.pipe(\n Effect.mapError((cause) => toResolverError(options.resolver, options.message, cause)),\n )\n : effect.pipe(Effect.orElseSucceed(options.fallback));\n}\n\nexport function keyValueResultsToRecord<K extends string>(\n values: ReadonlyArray<{ envKey: K; value: string | undefined }>,\n): Record<K, string | undefined> {\n const result = {} as Record<K, string | undefined>;\n for (const { envKey, value } of values) {\n result[envKey] = value;\n }\n return result;\n}\n\nexport function fillMissingMapValues(\n ids: readonly string[],\n values: Map<string, string | undefined>,\n): void {\n for (const id of ids) {\n if (!values.has(id)) {\n values.set(id, undefined);\n }\n }\n}\n",
10
15
  "import { Data } from \"effect\";\n\nexport type ResolverResult<K extends string = string> = Record<K, string | undefined>;\n\nexport class ResolverError extends Data.TaggedError(\"ResolverError\")<{\n readonly resolver: string;\n readonly message: string;\n readonly cause?: unknown;\n}> {}\n\nexport interface SecretClient {\n getSecret: (secretId: string) => Promise<string | undefined>;\n getSecrets?: (secretIds: string[]) => Promise<Map<string, string | undefined>>;\n}\n",
11
- "import { Effect } from \"effect\";\n\nimport { createEnv } from \"./env.ts\";\nimport { EnvValidationError } from \"./errors.ts\";\nimport type { ResolverError, ResolverResult } from \"./resolvers/types.ts\";\nimport type {\n AnyEnv,\n EnvOptions,\n EnvResult,\n EnvResultAutoRedacted,\n ExtractResolverKeys,\n PrefixMap,\n PrefixStr,\n SchemaDict,\n} from \"./types.ts\";\n\nexport type SafeCreateEnvSuccess<T> = Readonly<{ success: true; data: T }>;\nexport type SafeCreateEnvFailure<E> = Readonly<{ success: false; error: E }>;\nexport type SafeCreateEnvResult<T, E> = SafeCreateEnvSuccess<T> | SafeCreateEnvFailure<E>;\n\nfunction normalizeEnvValidationError(error: unknown): EnvValidationError {\n return error instanceof EnvValidationError ? error : new EnvValidationError([String(error)]);\n}\n\n// Overload: with resolvers + autoRedactResolver false\nexport function safeCreateEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver: false;\n },\n): Effect.Effect<\n SafeCreateEnvResult<\n EnvResult<TExtends, TServer, TClient, TShared>,\n ResolverError | EnvValidationError\n >,\n never\n>;\n\n// Overload: with resolvers + autoRedactResolver true (default)\nexport function safeCreateEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n const TPrefix extends string | PrefixMap | undefined = undefined,\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver?: true;\n prefix?: TPrefix;\n },\n): Effect.Effect<\n SafeCreateEnvResult<\n EnvResultAutoRedacted<\n TExtends,\n TServer,\n TClient,\n TShared,\n ExtractResolverKeys<TResolvers>,\n PrefixStr<TPrefix>\n >,\n ResolverError | EnvValidationError\n >,\n never\n>;\n\n// Overload: without resolvers + sync result object\nexport function safeCreateEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends>,\n): SafeCreateEnvResult<EnvResult<TExtends, TServer, TClient, TShared>, EnvValidationError>;\n\nexport function safeCreateEnv(\n opts: EnvOptions<SchemaDict, SchemaDict, SchemaDict, readonly AnyEnv[]> & {\n resolvers?: readonly Effect.Effect<ResolverResult<any>, ResolverError>[];\n autoRedactResolver?: boolean;\n },\n):\n | SafeCreateEnvResult<AnyEnv, EnvValidationError>\n | Effect.Effect<SafeCreateEnvResult<AnyEnv, ResolverError | EnvValidationError>, never> {\n if (opts.resolvers !== undefined) {\n try {\n const created = createEnv(opts);\n if (Effect.isEffect(created)) {\n const createdEffect = created as Effect.Effect<\n AnyEnv,\n ResolverError | EnvValidationError,\n never\n >;\n\n return createdEffect.pipe(\n Effect.match({\n onFailure: (error) => ({ success: false, error }) as const,\n onSuccess: (data) => ({ success: true, data }) as const,\n }),\n );\n }\n\n return Effect.succeed({ success: true, data: created } as const);\n } catch (error) {\n return Effect.succeed({\n success: false,\n error: normalizeEnvValidationError(error),\n } as const);\n }\n }\n\n try {\n return { success: true, data: createEnv(opts) } as const;\n } catch (error) {\n return { success: false, error: normalizeEnvValidationError(error) } as const;\n }\n}\n",
12
- "import { Function, Schema } from \"effect\";\n\nexport const DEFAULT_VALUE_ANNOTATION = Symbol.for(\"@ayronforge/envil/default-value\");\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) => Schema.UndefinedOr(schema);\n\nexport const redacted = <S extends Schema.Schema.Any>(schema: S) => Schema.Redacted(schema);\n\nexport const requiredString = Schema.String.pipe(Schema.minLength(1)).annotations({\n identifier: \"RequiredString\",\n});\nexport const optionalString = Schema.UndefinedOr(Schema.String);\nexport const positiveNumber = Schema.NumberFromString.pipe(Schema.positive()).annotations({\n identifier: \"PositiveNumber\",\n});\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);\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);\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);\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);\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);\nexport type RedisUrl = Schema.Schema.Type<typeof redisUrl>;\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);\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);\n\nexport const integer = Schema.NumberFromString.pipe(Schema.int()).annotations({\n identifier: \"Integer\",\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({ identifier: \"Port\" });\n\nexport const stringEnum = <T extends readonly [string, ...string[]]>(values: T) =>\n Schema.Literal(...values);\n\nexport const json = <S extends Schema.Schema.Any>(schema: S) => Schema.parseJson(schema);\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);\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);\nexport type MysqlUrl = Schema.Schema.Type<typeof mysqlUrl>;\n"
16
+ "import { Effect } from \"effect\";\n\nimport { createEnv } from \"./env.ts\";\nimport { EnvValidationError } from \"./errors.ts\";\nimport type { ResolverError, ResolverResult } from \"./resolvers/types.ts\";\nimport type {\n AnyEnv,\n EnvOptions,\n EnvResult,\n EnvResultAutoRedacted,\n ExtractResolverKeys,\n PrefixMap,\n PrefixStr,\n SchemaDict,\n} from \"./types.ts\";\n\nexport type SafeCreateEnvSuccess<T> = Readonly<{ success: true; data: T }>;\nexport type SafeCreateEnvFailure<E> = Readonly<{ success: false; error: E }>;\nexport type SafeCreateEnvResult<T, E> = SafeCreateEnvSuccess<T> | SafeCreateEnvFailure<E>;\n\nfunction normalizeEnvValidationError(error: unknown): EnvValidationError {\n return error instanceof EnvValidationError ? error : new EnvValidationError([String(error)]);\n}\n\n// Overload: with resolvers + autoRedactResolver false\nexport function safeCreateEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver: false;\n },\n): Effect.Effect<\n SafeCreateEnvResult<\n EnvResult<TExtends, TServer, TClient, TShared>,\n ResolverError | EnvValidationError\n >,\n never\n>;\n\n// Overload: with resolvers + autoRedactResolver true (default)\nexport function safeCreateEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n const TResolvers extends readonly Effect.Effect<ResolverResult<any>, ResolverError>[] =\n readonly [],\n const TPrefix extends string | PrefixMap | undefined = undefined,\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends> & {\n resolvers: TResolvers;\n autoRedactResolver?: true;\n prefix?: TPrefix;\n },\n): Effect.Effect<\n SafeCreateEnvResult<\n EnvResultAutoRedacted<\n TExtends,\n TServer,\n TClient,\n TShared,\n ExtractResolverKeys<TResolvers>,\n PrefixStr<TPrefix>\n >,\n ResolverError | EnvValidationError\n >,\n never\n>;\n\n// Overload: without resolvers + sync result object\nexport function safeCreateEnv<\n TServer extends SchemaDict = {},\n TClient extends SchemaDict = {},\n TShared extends SchemaDict = {},\n const TExtends extends readonly AnyEnv[] = readonly [],\n>(\n opts: EnvOptions<TServer, TClient, TShared, TExtends>,\n): SafeCreateEnvResult<EnvResult<TExtends, TServer, TClient, TShared>, EnvValidationError>;\n\nexport function safeCreateEnv(\n opts: EnvOptions<SchemaDict, SchemaDict, SchemaDict, readonly AnyEnv[]> & {\n resolvers?: readonly Effect.Effect<ResolverResult<any>, ResolverError>[];\n autoRedactResolver?: boolean;\n },\n):\n | SafeCreateEnvResult<AnyEnv, EnvValidationError>\n | Effect.Effect<SafeCreateEnvResult<AnyEnv, ResolverError | EnvValidationError>, never> {\n if (opts.resolvers !== undefined) {\n try {\n const created = createEnv(opts);\n if (Effect.isEffect(created)) {\n const createdEffect = created as Effect.Effect<\n AnyEnv,\n ResolverError | EnvValidationError,\n never\n >;\n\n return createdEffect.pipe(\n Effect.match({\n onFailure: (error) => ({ success: false, error }) as const,\n onSuccess: (data) => ({ success: true, data }) as const,\n }),\n );\n }\n\n return Effect.succeed({ success: true, data: created } as const);\n } catch (error) {\n return Effect.succeed({\n success: false,\n error: normalizeEnvValidationError(error),\n } as const);\n }\n }\n\n try {\n return { success: true, data: createEnv(opts) } as const;\n } catch (error) {\n return { success: false, error: normalizeEnvValidationError(error) } as const;\n }\n}\n"
13
17
  ],
14
- "mappings": "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",
15
- "debugId": "83E78DCC4BD19C8E64756E2164756E21",
18
+ "mappings": "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",
19
+ "debugId": "D41C1808EDE7815C64756E2164756E21",
16
20
  "names": []
17
21
  }
@@ -0,0 +1,25 @@
1
+ import { Schema } from "effect";
2
+ import type { SchemaKind } from "./cli/types.ts";
3
+ import type { SchemaDict } from "./types.ts";
4
+ interface EnvDefinition {
5
+ prefix?: {
6
+ server?: string;
7
+ client?: string;
8
+ shared?: string;
9
+ };
10
+ server?: SchemaDict;
11
+ client?: SchemaDict;
12
+ shared?: SchemaDict;
13
+ }
14
+ export interface ExaminedSchema {
15
+ readonly kind: SchemaKind | undefined;
16
+ readonly placeholder: string | undefined;
17
+ readonly optional: boolean;
18
+ readonly hasDefault: boolean;
19
+ readonly defaultValue: unknown;
20
+ readonly redacted: boolean;
21
+ readonly stringEnumValues?: readonly string[];
22
+ }
23
+ export declare function examineSchema(schema: Schema.Schema.Any): ExaminedSchema;
24
+ export declare function buildEnvExample(definition: EnvDefinition): string;
25
+ export {};
package/dist/schemas.d.ts CHANGED
@@ -1,30 +1,35 @@
1
1
  import { Schema } from "effect";
2
2
  export declare const DEFAULT_VALUE_ANNOTATION: unique symbol;
3
+ export declare const SCHEMA_KIND_ANNOTATION: unique symbol;
4
+ export declare const PLACEHOLDER_ANNOTATION: unique symbol;
5
+ export declare const OPTIONAL_ANNOTATION: unique symbol;
6
+ export declare const REDACTED_ANNOTATION: unique symbol;
7
+ export declare const STRING_ENUM_VALUES_ANNOTATION: unique symbol;
3
8
  export declare const withDefault: {
4
9
  <S extends Schema.Schema.Any>(defaultValue: NonNullable<Schema.Schema.Type<S>>): (schema: S) => Schema.transform<Schema.UndefinedOr<S>, Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>>;
5
10
  <S extends Schema.Schema.Any>(schema: S, defaultValue: NonNullable<Schema.Schema.Type<S>>): Schema.transform<Schema.UndefinedOr<S>, Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>>;
6
11
  };
7
12
  export declare const optional: <S extends Schema.Schema.Any>(schema: S) => Schema.UndefinedOr<S>;
8
- export declare const redacted: <S extends Schema.Schema.Any>(schema: S) => Schema.Redacted<S>;
13
+ export declare const redacted: <S extends Schema.Schema.Any>(schema: S) => Schema.transform<S, Schema.RedactedFromSelf<Schema.SchemaClass<Schema.Schema.Type<S>, Schema.Schema.Type<S>, never>>>;
9
14
  export declare const requiredString: Schema.refine<string, typeof Schema.String>;
10
- export declare const optionalString: Schema.UndefinedOr<typeof Schema.String>;
11
- export declare const positiveNumber: Schema.refine<number, typeof Schema.NumberFromString>;
12
- export declare const commaSeparated: Schema.transform<typeof Schema.String, Schema.mutable<Schema.Array$<typeof Schema.String>>>;
13
- export declare const commaSeparatedNumbers: Schema.transform<typeof Schema.String, Schema.mutable<Schema.Array$<typeof Schema.Number>>>;
14
- export declare const url: Schema.filter<typeof Schema.String>;
15
- export type Url = Schema.Schema.Type<typeof url>;
16
- export declare const postgresUrl: Schema.filter<Schema.filter<typeof Schema.String>>;
17
- export type PostgresUrl = Schema.Schema.Type<typeof postgresUrl>;
18
- export declare const redisUrl: Schema.filter<Schema.filter<typeof Schema.String>>;
19
- export type RedisUrl = Schema.Schema.Type<typeof redisUrl>;
20
- export declare const commaSeparatedUrls: Schema.transform<typeof Schema.String, Schema.mutable<Schema.Array$<Schema.filter<typeof Schema.String>>>>;
21
15
  export declare const boolean: Schema.transform<Schema.filter<typeof Schema.String>, typeof Schema.Boolean>;
22
16
  export declare const integer: Schema.refine<number, typeof Schema.NumberFromString>;
17
+ export declare const number: Schema.transformOrFail<Schema.SchemaClass<string, string, never>, typeof Schema.Number, never>;
18
+ export declare const positiveNumber: Schema.refine<number, typeof Schema.NumberFromString>;
23
19
  export declare const nonNegativeNumber: Schema.refine<number, typeof Schema.NumberFromString>;
24
20
  export declare const port: Schema.refine<number, Schema.filter<typeof Schema.NumberFromString>>;
25
- export declare const stringEnum: <T extends readonly [string, ...string[]]>(values: T) => Schema.Literal<[...T]>;
26
- export declare const json: <S extends Schema.Schema.Any>(schema: S) => Schema.transform<Schema.SchemaClass<unknown, string, never>, S>;
27
- export declare const mongoUrl: Schema.filter<Schema.filter<typeof Schema.String>>;
21
+ export declare const url: Schema.refine<string, typeof Schema.String>;
22
+ export type Url = Schema.Schema.Type<typeof url>;
23
+ export declare const postgresUrl: Schema.refine<string, Schema.filter<typeof Schema.String>>;
24
+ export type PostgresUrl = Schema.Schema.Type<typeof postgresUrl>;
25
+ export declare const redisUrl: Schema.refine<string, Schema.filter<typeof Schema.String>>;
26
+ export type RedisUrl = Schema.Schema.Type<typeof redisUrl>;
27
+ export declare const mongoUrl: Schema.refine<string, Schema.filter<typeof Schema.String>>;
28
28
  export type MongoUrl = Schema.Schema.Type<typeof mongoUrl>;
29
- export declare const mysqlUrl: Schema.filter<Schema.filter<typeof Schema.String>>;
29
+ export declare const mysqlUrl: Schema.refine<string, Schema.filter<typeof Schema.String>>;
30
30
  export type MysqlUrl = Schema.Schema.Type<typeof mysqlUrl>;
31
+ export declare const commaSeparated: Schema.transform<typeof Schema.String, Schema.mutable<Schema.Array$<typeof Schema.String>>>;
32
+ export declare const commaSeparatedNumbers: Schema.transform<typeof Schema.String, Schema.mutable<Schema.Array$<typeof Schema.Number>>>;
33
+ export declare const commaSeparatedUrls: Schema.transform<typeof Schema.String, Schema.mutable<Schema.Array$<Schema.refine<string, typeof Schema.String>>>>;
34
+ export declare const stringEnum: <T extends readonly [string, ...string[]]>(values: T) => Schema.Literal<[...T]>;
35
+ export declare const json: <S extends Schema.Schema.Any>(schema: S) => Schema.transform<Schema.SchemaClass<unknown, string, never>, S>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ayronforge/envil",
3
- "version": "0.6.0",
3
+ "version": "0.7.2",
4
4
  "description": "Type-safe environment variable validation using Effect Schema",
5
5
  "keywords": [
6
6
  "effect",
@@ -1,2 +0,0 @@
1
- import { type Manifest } from "./types.ts";
2
- export declare function generateExample(manifest: Manifest): string;
@@ -1,3 +0,0 @@
1
- import { type Manifest } from "./types.ts";
2
- export declare function decodeManifestFromSource(source: string): Manifest;
3
- export declare function encodeManifestBlock(manifest: Manifest): string;