{"version":3,"file":"create-env-o205_sj3.cjs","names":[],"sources":["../src/create-env.ts"],"sourcesContent":["import type { Dict, SchemaShape } from \"@repo/types\";\nimport { createEnv as coreCreateEnv } from \"arkenv\";\n\nexport const EXTENDED_ENV = Symbol.for(\"arkenv.extended_env\");\nexport const ENV_KEYS = Symbol.for(\"arkenv.keys\");\nexport const SERVER_ONLY_KEYS = Symbol.for(\"arkenv.server_only_keys\");\n\nlet hasWarnedLegacy = false;\n\nfunction getSchemaKeys(schema: any): string[] {\n\tif (!schema || (typeof schema !== \"object\" && typeof schema !== \"function\")) {\n\t\treturn [];\n\t}\n\n\t// ArkType Type\n\tif (\n\t\tschema.json &&\n\t\ttypeof schema.json === \"object\" &&\n\t\tschema.json.domain === \"object\"\n\t) {\n\t\tconst keys: string[] = [];\n\t\tif (Array.isArray(schema.json.required)) {\n\t\t\tfor (const r of schema.json.required) {\n\t\t\t\tif (r && typeof r === \"object\" && \"key\" in r) {\n\t\t\t\t\tkeys.push(r.key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Array.isArray(schema.json.optional)) {\n\t\t\tfor (const o of schema.json.optional) {\n\t\t\t\tif (o && typeof o === \"object\" && \"key\" in o) {\n\t\t\t\t\tkeys.push(o.key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn keys;\n\t}\n\n\t// Zod schema\n\tif (\"shape\" in schema && schema.shape && typeof schema.shape === \"object\") {\n\t\treturn Object.keys(schema.shape);\n\t}\n\n\t// Valibot schema\n\tif (\n\t\t\"entries\" in schema &&\n\t\tschema.entries &&\n\t\ttypeof schema.entries === \"object\"\n\t) {\n\t\treturn Object.keys(schema.entries);\n\t}\n\n\t// Plain object schema\n\treturn Object.keys(schema);\n}\n\n/**\n * Validate and wrap environment variables in a security proxy.\n *\n * @internal\n */\nexport function createEnvInternal(\n\tschemaOrOptions: any,\n\toptionsOrIsServer: any,\n\tcontext?: {\n\t\tisServer: boolean;\n\t\tisShared?: boolean;\n\t\tstrictLayout?: \"client\" | \"server\";\n\t},\n): unknown {\n\tlet server: SchemaShape = {};\n\tlet client: SchemaShape = {};\n\tlet shared: SchemaShape = {};\n\tlet extendsList: unknown[] = [];\n\tlet runtimeEnv: Dict<string> = {};\n\tlet isServer = false;\n\n\tif (typeof optionsOrIsServer === \"boolean\") {\n\t\tif (process.env.NODE_ENV === \"development\" && !hasWarnedLegacy) {\n\t\t\thasWarnedLegacy = true;\n\t\t\tconsole.warn(\n\t\t\t\t\"⚠️ [arkenv] Deprecated: The nested layout structure (specifying 'server', 'client', or 'shared' keys in createEnv) is deprecated and will be removed in the next major version. Please migrate to the flat layout. See guide: https://arkenv.js.org/docs/nextjs/faq#how-do-i-define-client-side-variables\",\n\t\t\t);\n\t\t}\n\t\t// Old nested schema behavior (backward compatible)\n\t\tserver = schemaOrOptions.server || {};\n\t\tclient = schemaOrOptions.client || {};\n\t\tshared = schemaOrOptions.shared || {};\n\t\textendsList = schemaOrOptions.extends || [];\n\t\truntimeEnv = schemaOrOptions.runtimeEnv || {};\n\t\tisServer =\n\t\t\t(globalThis as any).__arkenv_force_server__ === true ||\n\t\t\t!!optionsOrIsServer;\n\t} else {\n\t\t// New flat schema behavior\n\t\tconst flatSchema = schemaOrOptions || {};\n\t\tconst options = optionsOrIsServer || {};\n\t\textendsList = options.extends || [];\n\t\truntimeEnv = options.runtimeEnv || {};\n\t\tisServer =\n\t\t\t(globalThis as any).__arkenv_force_server__ === true ||\n\t\t\t!!context?.isServer;\n\n\t\tif (context?.isShared) {\n\t\t\tshared = flatSchema;\n\t\t} else if (context?.strictLayout === \"client\") {\n\t\t\tclient = flatSchema;\n\t\t} else if (context?.strictLayout === \"server\") {\n\t\t\tserver = flatSchema;\n\t\t} else {\n\t\t\tconst exposedKeys =\n\t\t\t\toptions.exposeToClient || options.expose || options.shared || [];\n\t\t\tfor (const key of Object.keys(flatSchema)) {\n\t\t\t\t// NODE_ENV is implicitly shared as Next.js automatically inlines and replaces references to process.env.NODE_ENV in browser bundles.\n\t\t\t\t// See: https://nextjs.org/docs/app/guides/environment-variables\n\t\t\t\tif (exposedKeys.includes(key) || key === \"NODE_ENV\") {\n\t\t\t\t\tshared[key] = flatSchema[key];\n\t\t\t\t} else if (key.startsWith(\"NEXT_PUBLIC_\")) {\n\t\t\t\t\tclient[key] = flatSchema[key];\n\t\t\t\t} else {\n\t\t\t\t\tserver[key] = flatSchema[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tlet extendedEnvValues: Dict<string> = {};\n\tconst allKeys = new Set<string>();\n\tconst serverOnlyKeys = new Set<string>();\n\n\t// Add local keys\n\tfor (const key of Object.keys(server)) {\n\t\tallKeys.add(key);\n\t\tif (!(key in client) && !(key in shared)) {\n\t\t\tserverOnlyKeys.add(key);\n\t\t}\n\t}\n\tfor (const key of Object.keys(client)) {\n\t\tallKeys.add(key);\n\t}\n\tfor (const key of Object.keys(shared)) {\n\t\tallKeys.add(key);\n\t}\n\n\t// Prepare combined environment for core validation\n\tconst combinedEnv: Dict<string> = {};\n\n\t// Process extended environments\n\tif (extendsList && Array.isArray(extendsList)) {\n\t\tfor (const ext of extendsList) {\n\t\t\tif (ext && (typeof ext === \"object\" || typeof ext === \"function\")) {\n\t\t\t\tconst raw = (ext as any)[EXTENDED_ENV];\n\t\t\t\tif (raw) {\n\t\t\t\t\textendedEnvValues = { ...extendedEnvValues, ...raw };\n\n\t\t\t\t\tconst extKeys = (ext as any)[ENV_KEYS];\n\t\t\t\t\tif (extKeys instanceof Set) {\n\t\t\t\t\t\tfor (const key of extKeys) allKeys.add(key);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst extServerOnly = (ext as any)[SERVER_ONLY_KEYS];\n\t\t\t\t\tif (extServerOnly instanceof Set) {\n\t\t\t\t\t\tfor (const key of extServerOnly) serverOnlyKeys.add(key);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Prepare what we have so far for validating the extended schema\n\t\t\t\t\tfor (const key of Object.keys(extendedEnvValues)) {\n\t\t\t\t\t\tif (extendedEnvValues[key] !== undefined) {\n\t\t\t\t\t\t\tcombinedEnv[key] = extendedEnvValues[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (const key of Object.keys(runtimeEnv)) {\n\t\t\t\t\t\tif (runtimeEnv[key] !== undefined) {\n\t\t\t\t\t\t\tcombinedEnv[key] = runtimeEnv[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (isServer) {\n\t\t\t\t\t\tfor (const key of Object.keys(server)) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tcombinedEnv[key] === undefined &&\n\t\t\t\t\t\t\t\tprocess.env[key] !== undefined\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcombinedEnv[key] = process.env[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst validated = coreCreateEnv(ext as any, { env: combinedEnv });\n\t\t\t\t\textendedEnvValues = { ...extendedEnvValues, ...validated };\n\n\t\t\t\t\tconst extKeys = getSchemaKeys(ext);\n\t\t\t\t\tfor (const key of extKeys) {\n\t\t\t\t\t\tallKeys.add(key);\n\t\t\t\t\t\t// Only classify as server-only if we are on the server, it's not a public key,\n\t\t\t\t\t\t// and we aren't explicitly inside the shared entry point.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tisServer &&\n\t\t\t\t\t\t\t!key.startsWith(\"NEXT_PUBLIC_\") &&\n\t\t\t\t\t\t\t!context?.isShared\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tserverOnlyKeys.add(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove keys from serverOnlyKeys if they are defined as client or shared locally\n\tfor (const key of Object.keys(client)) {\n\t\tserverOnlyKeys.delete(key);\n\t}\n\tfor (const key of Object.keys(shared)) {\n\t\tserverOnlyKeys.delete(key);\n\t}\n\n\t// Validate options\n\t// For client keys, check prefix\n\tfor (const key of Object.keys(client)) {\n\t\tif (!key.startsWith(\"NEXT_PUBLIC_\")) {\n\t\t\tthrow new Error(\n\t\t\t\t`Client-side environment variables must be prefixed with 'NEXT_PUBLIC_'. Found invalid key: ${key}`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Check runtimeEnv has all local client and shared keys\n\tconst requiredKeys = [...Object.keys(client), ...Object.keys(shared)];\n\tfor (const key of requiredKeys) {\n\t\tif (!(key in runtimeEnv)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Missing key in runtimeEnv: ${key}. All client and shared environment variables must be explicitly destructured in runtimeEnv.`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Check runtimeEnv does not have any keys not defined in the schema (allKeys)\n\tfor (const key of Object.keys(runtimeEnv)) {\n\t\tif (!allKeys.has(key)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Environment variable '${key}' is passed to runtimeEnv but is not defined in the schema.`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Build final combinedEnv\n\tfor (const key of Object.keys(extendedEnvValues)) {\n\t\tif (extendedEnvValues[key] !== undefined) {\n\t\t\tcombinedEnv[key] = extendedEnvValues[key];\n\t\t}\n\t}\n\n\tconst globalEnv =\n\t\ttypeof globalThis !== \"undefined\"\n\t\t\t? (globalThis as any).__arkenv_env__\n\t\t\t: undefined;\n\n\tfor (const key of Object.keys(runtimeEnv)) {\n\t\tif (runtimeEnv[key] !== undefined) {\n\t\t\tcombinedEnv[key] = runtimeEnv[key];\n\t\t}\n\t\tif (globalEnv && globalEnv[key] !== undefined) {\n\t\t\tif (key.startsWith(\"NEXT_PUBLIC_\") || key in client || key in shared) {\n\t\t\t\tcombinedEnv[key] = globalEnv[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (isServer) {\n\t\t// Fallback server keys to process.env if omitted or undefined\n\t\tfor (const key of Object.keys(server)) {\n\t\t\tif (combinedEnv[key] === undefined && process.env[key] !== undefined) {\n\t\t\t\tcombinedEnv[key] = process.env[key];\n\t\t\t}\n\t\t}\n\t}\n\n\t// Select schema based on environment\n\tconst schema = isServer\n\t\t? { ...server, ...client, ...shared }\n\t\t: { ...client, ...shared };\n\n\t// Run core validation\n\tconst validated = coreCreateEnv(schema as any, { env: combinedEnv });\n\n\tconst mergedValidated = { ...extendedEnvValues, ...validated };\n\n\t// Return a Proxy wrapper\n\treturn new Proxy(mergedValidated, {\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === EXTENDED_ENV) {\n\t\t\t\treturn target;\n\t\t\t}\n\t\t\tif (prop === ENV_KEYS) {\n\t\t\t\treturn allKeys;\n\t\t\t}\n\t\t\tif (prop === SERVER_ONLY_KEYS) {\n\t\t\t\treturn serverOnlyKeys;\n\t\t\t}\n\n\t\t\t// Always allow symbol properties (Symbol.iterator, Symbol.toStringTag, etc.)\n\t\t\tif (typeof prop === \"symbol\") {\n\t\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t\t}\n\n\t\t\tif (typeof prop === \"string\") {\n\t\t\t\tif (serverOnlyKeys.has(prop) && !isServer) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`ArkEnv Error: Attempted to access server environment variable '${prop}' on the client.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Allow schema keys and standard Object prototype properties\n\t\t\t\tif (!allKeys.has(prop) && !(prop in Object.prototype)) {\n\t\t\t\t\t// Fallback for bundler/framework-specific properties that bypass the prototype\n\t\t\t\t\tconst isCommonKey =\n\t\t\t\t\t\tprop === \"__esModule\" ||\n\t\t\t\t\t\tprop === \"$$typeof\" ||\n\t\t\t\t\t\tprop === \"toJSON\" ||\n\t\t\t\t\t\tprop === \"inspect\";\n\n\t\t\t\t\tif (!isCommonKey) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Environment variable '${prop}' is not defined in the schema.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\t});\n}\n"],"mappings":"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"}