@arkenv/nextjs 1.0.0-alpha.11 → 1.0.0-alpha.13
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/README.md +18 -29
- package/dist/client.cjs +1 -1
- package/dist/config/index.cjs +1 -1
- package/dist/config/index.d.cts +2 -2
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.js +1 -1
- package/dist/config-B9BksrZQ.js +97 -0
- package/dist/config-B9BksrZQ.js.map +1 -0
- package/dist/config-DNiuFUxj.cjs +97 -0
- package/dist/config-DNiuFUxj.cjs.map +1 -0
- package/dist/{index-CL9MPCBA.d.cts → index-BIewRgpQ.d.cts} +45 -13
- package/dist/{index-CL9MPCBA.d.cts.map → index-BIewRgpQ.d.cts.map} +1 -1
- package/dist/{index-DLwzgCyF.d.ts → index-U5bfcjNW.d.ts} +45 -13
- package/dist/{index-DLwzgCyF.d.ts.map → index-U5bfcjNW.d.ts.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/react-server.cjs +1 -1
- package/dist/{script-BBfmzIh4.cjs → script-iYGXywhf.cjs} +2 -2
- package/dist/{script-BBfmzIh4.cjs.map → script-iYGXywhf.cjs.map} +1 -1
- package/dist/server.cjs +1 -1
- package/dist/standard/client.cjs +1 -1
- package/dist/standard/config.cjs +1 -1
- package/dist/standard/config.cjs.map +1 -1
- package/dist/standard/config.d.cts +6 -5
- package/dist/standard/config.d.cts.map +1 -1
- package/dist/standard/config.d.ts +6 -5
- package/dist/standard/config.d.ts.map +1 -1
- package/dist/standard/config.js +1 -1
- package/dist/standard/config.js.map +1 -1
- package/dist/standard/index.cjs +1 -1
- package/dist/standard/server.cjs +1 -1
- package/dist/standard/shared.cjs +1 -1
- package/package.json +3 -3
- package/dist/config-Bnir9dSk.js +0 -97
- package/dist/config-Bnir9dSk.js.map +0 -1
- package/dist/config-CU-9fwxw.cjs +0 -97
- package/dist/config-CU-9fwxw.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-Bnir9dSk.js","names":["resolveBuildLog","resolveBuildLog","formatBuildError","resolveLoggerFromOptions"],"sources":["../src/config/extract.ts","../src/config/generate.ts","../src/config/layout.ts","../src/config/codegen.ts","../src/config/strict-layout-aliases.ts","../src/config/setup.ts"],"sourcesContent":["import { extractBlock, parseBlockKeys } from \"@arkenv/build\";\n\nfunction parseExposeKeys(optionsArg: string): string[] {\n\tconst exposeMatch =\n\t\toptionsArg.match(/exposeToClient\\s*:\\s*\\[([\\s\\S]*?)\\]/) ||\n\t\toptionsArg.match(/expose\\s*:\\s*\\[([\\s\\S]*?)\\]/) ||\n\t\toptionsArg.match(/shared\\s*:\\s*\\[([\\s\\S]*?)\\]/);\n\tif (!exposeMatch) return [];\n\n\tconst keys: string[] = [];\n\tfor (const match of exposeMatch[1].matchAll(/['\"`](.*?)['\"`]/g)) {\n\t\tkeys.push(match[1]);\n\t}\n\treturn keys;\n}\n\nfunction extractCallArguments(\n\tcontent: string,\n): { schemaArg: string; optionsArg: string | null } | null {\n\tconst regex = /\\b(?:arkenv|createEnv)\\s*\\(/g;\n\twhile (regex.exec(content) !== null) {\n\t\tlet parenCount = 1;\n\t\tlet index = regex.lastIndex;\n\t\tlet inString: string | null = null;\n\t\tlet inComment: \"single\" | \"multi\" | null = null;\n\t\tlet braceCount = 0;\n\t\tlet bracketCount = 0;\n\n\t\tconst args: string[] = [];\n\t\tlet currentArg = \"\";\n\n\t\twhile (index < content.length && parenCount > 0) {\n\t\t\tconst char = content[index];\n\t\t\tconst nextChar = content[index + 1];\n\n\t\t\tif (inComment === \"single\") {\n\t\t\t\tif (char === \"\\n\" || char === \"\\r\") inComment = null;\n\t\t\t\tcurrentArg += char;\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (inComment === \"multi\") {\n\t\t\t\tif (char === \"*\" && nextChar === \"/\") {\n\t\t\t\t\tinComment = null;\n\t\t\t\t\tcurrentArg += \"*/\";\n\t\t\t\t\tindex += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcurrentArg += char;\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (inString) {\n\t\t\t\tif (char === inString && content[index - 1] !== \"\\\\\") {\n\t\t\t\t\tinString = null;\n\t\t\t\t}\n\t\t\t\tcurrentArg += char;\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (char === \"/\" && nextChar === \"/\") {\n\t\t\t\tinComment = \"single\";\n\t\t\t\tcurrentArg += \"//\";\n\t\t\t\tindex += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === \"/\" && nextChar === \"*\") {\n\t\t\t\tinComment = \"multi\";\n\t\t\t\tcurrentArg += \"/*\";\n\t\t\t\tindex += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === \"'\" || char === '\"' || char === \"`\") {\n\t\t\t\tinString = char;\n\t\t\t\tcurrentArg += char;\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (char === \"(\") {\n\t\t\t\tparenCount++;\n\t\t\t} else if (char === \")\") {\n\t\t\t\tparenCount--;\n\t\t\t} else if (char === \"{\") {\n\t\t\t\tbraceCount++;\n\t\t\t} else if (char === \"}\") {\n\t\t\t\tbraceCount--;\n\t\t\t} else if (char === \"[\") {\n\t\t\t\tbracketCount++;\n\t\t\t} else if (char === \"]\") {\n\t\t\t\tbracketCount--;\n\t\t\t}\n\n\t\t\tif (parenCount === 0) {\n\t\t\t\targs.push(currentArg);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tchar === \",\" &&\n\t\t\t\tparenCount === 1 &&\n\t\t\t\tbraceCount === 0 &&\n\t\t\t\tbracketCount === 0\n\t\t\t) {\n\t\t\t\targs.push(currentArg);\n\t\t\t\tcurrentArg = \"\";\n\t\t\t} else {\n\t\t\t\tcurrentArg += char;\n\t\t\t}\n\t\t\tindex++;\n\t\t}\n\n\t\tif (parenCount === 0 && args.length > 0) {\n\t\t\treturn {\n\t\t\t\tschemaArg: args[0].trim(),\n\t\t\t\toptionsArg: args[1] ? args[1].trim() : null,\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * Statically extract client and shared keys from the schema content.\n *\n * @param content The schema file string content\n * @returns An object containing the extracted client and shared keys\n */\nexport function extractKeys(content: string): {\n\tclientKeys: string[];\n\tsharedKeys: string[];\n\tisLegacy?: boolean;\n} {\n\tconst clientKeys: string[] = [];\n\tconst sharedKeys: string[] = [];\n\n\tconst args = extractCallArguments(content);\n\tif (!args) {\n\t\treturn { clientKeys, sharedKeys, isLegacy: false };\n\t}\n\n\tconst trimmedSchema = args.schemaArg\n\t\t.replace(/^\\{/, \"\")\n\t\t.replace(/\\}$/, \"\")\n\t\t.trim();\n\tconst topKeys = parseBlockKeys(trimmedSchema);\n\tconst isLegacy =\n\t\ttopKeys.includes(\"client\") ||\n\t\ttopKeys.includes(\"server\") ||\n\t\ttopKeys.includes(\"shared\");\n\n\tif (isLegacy) {\n\t\tconst clientBlock = extractBlock(args.schemaArg, \"client\");\n\t\tif (clientBlock) clientKeys.push(...parseBlockKeys(clientBlock));\n\t\tconst sharedBlock = extractBlock(args.schemaArg, \"shared\");\n\t\tif (sharedBlock) sharedKeys.push(...parseBlockKeys(sharedBlock));\n\t\treturn { clientKeys, sharedKeys, isLegacy };\n\t}\n\n\tconst optionExposedKeys = args.optionsArg\n\t\t? parseExposeKeys(args.optionsArg)\n\t\t: [];\n\n\tfor (const key of topKeys) {\n\t\tif (optionExposedKeys.includes(key) || key === \"NODE_ENV\") {\n\t\t\tsharedKeys.push(key);\n\t\t\tcontinue;\n\t\t}\n\t\tif (key.startsWith(\"NEXT_PUBLIC_\")) {\n\t\t\tclientKeys.push(key);\n\t\t}\n\t}\n\n\treturn { clientKeys, sharedKeys, isLegacy };\n}\n","function generateRuntimeEnvLines(\n\tclientKeys: string[],\n\tsharedKeys: string[],\n): string {\n\tconst allKeys = Array.from(new Set([...clientKeys, ...sharedKeys]));\n\treturn allKeys\n\t\t.map(\n\t\t\t(key) =>\n\t\t\t\t`\\t\\t\\t${key}: typeof window !== \"undefined\" ? (globalThis as any).__arkenv_env__?.${key} ?? process.env.${key} : process.env.${key},`,\n\t\t)\n\t\t.join(\"\\n\");\n}\n\nconst GENERATED_HEADER = `/* eslint-disable */\n// biome-ignore format: auto-generated\n// Generated by ArkEnv. DO NOT EDIT DIRECTLY.\n`;\n\nconst GENERATED_FOOTER = `\nexport default arkenv;\n`;\n\nexport function generateFactoryCode(\n\tclientKeys: string[],\n\tsharedKeys: string[],\n\tisStandard?: boolean,\n): string {\n\tconst runtimeEnvLines = generateRuntimeEnvLines(clientKeys, sharedKeys);\n\tconst importPath = isStandard ? \"@arkenv/nextjs/standard\" : \"@arkenv/nextjs\";\n\tconst coreName = \"arkenv\";\n\tconst callPrefix = \"coreArkenv\";\n\n\treturn `${GENERATED_HEADER}\nimport { ${coreName} as coreArkenv } from \"${importPath}\";\n\nexport function arkenv<\n\tconst TServer extends Record<string, any> = {},\n\tconst TClient extends Record<string, any> = {},\n\tconst TShared extends Record<string, any> = {},\n>(options: {\n\tserver?: TServer;\n\tclient?: TClient & {\n\t\t[K in keyof TClient]: K extends \\`NEXT_PUBLIC_\\${string}\\` ? unknown : never;\n\t};\n\tshared?: TShared;\n}) {\n\treturn ${callPrefix}({\n\t\t...options,\n\t\truntimeEnv: {\n\t\t\t${runtimeEnvLines}\n\t\t},\n\t} as any) as any;\n}\n${GENERATED_FOOTER}`;\n}\n\nexport function generateFlatFactoryCode(\n\tclientKeys: string[],\n\tsharedKeys: string[],\n\tisStandard?: boolean,\n): string {\n\tconst runtimeEnvLines = generateRuntimeEnvLines(clientKeys, sharedKeys);\n\tconst importPath = isStandard ? \"@arkenv/nextjs/standard\" : \"@arkenv/nextjs\";\n\tconst coreName = \"arkenv\";\n\tconst typeImport = isStandard\n\t\t? \"\"\n\t\t: '\\nimport type { type as at, distill } from \"arktype\";';\n\tconst returnType = isStandard\n\t\t? \"Readonly<TSchema>\"\n\t\t: \"Readonly<distill.Out<at.infer<TSchema>>>\";\n\tconst castReturn = isStandard\n\t\t? \"\"\n\t\t: \" as unknown as Readonly<distill.Out<at.infer<TSchema>>>\";\n\tconst callPrefix = \"coreArkenv\";\n\n\treturn `${GENERATED_HEADER}\nimport { ${coreName} as coreArkenv } from \"${importPath}\";${typeImport}\n\nexport function arkenv<\n\tconst TSchema extends Record<string, unknown> & { runtimeEnv?: never } = {},\n\tconst TExpose extends keyof TSchema = never,\n\tconst TExtends extends readonly unknown[] = [],\n>(\n\tschema: TSchema,\n\toptions?: {\n\t\t/**\n\t\t * Custom environment variables to expose to the client bundle.\n\t\t * By default, variables prefixed with \\`NEXT_PUBLIC_\\` and \\`NODE_ENV\\` are exposed automatically.\n\t\t * Use this option to expose custom variables that do not have the \\`NEXT_PUBLIC_\\` prefix.\n\t\t */\n\t\texposeToClient?: readonly TExpose[];\n\t\textends?: [...TExtends];\n\t},\n): ${returnType} {\n\tconst env = ${callPrefix}(schema as any, {\n\t\t...options,\n\t\truntimeEnv: {\n\t\t\t${runtimeEnvLines}\n\t\t},\n\t} as any);\n\treturn env${castReturn};\n}\n${GENERATED_FOOTER}`;\n}\n\n/**\n * Ambient module declaration so `#arkenv/client-env` resolves to the project's\n * `env/client.ts` for `AutoClientEnv` type inference on `@arkenv/nextjs/server`.\n *\n * @returns Generated `.d.ts` source\n */\nexport function generateClientEnvAmbientDeclaration(): string {\n\treturn `${GENERATED_HEADER}\ndeclare module \"#arkenv/client-env\" {\n\texport { env } from \"../client\";\n}\n`;\n}\n\nexport function generateClientFactoryCode(\n\tclientKeys: string[],\n\tsharedKeys: string[],\n\tisStandard?: boolean,\n): string {\n\tconst runtimeEnvLines = generateRuntimeEnvLines(clientKeys, sharedKeys);\n\tconst importPath = isStandard\n\t\t? \"@arkenv/nextjs/standard/client\"\n\t\t: \"@arkenv/nextjs/client\";\n\tconst coreName = \"arkenv\";\n\tconst typeImport = isStandard\n\t\t? \"\"\n\t\t: '\\nimport type { Infer } from \"@arkenv/core\";';\n\tconst callPrefix = \"coreArkenv\";\n\tconst returnType = isStandard\n\t\t? \"Readonly<TSchema & MergeExtends<TExtends>>\"\n\t\t: \"Readonly<Infer<TSchema> & MergeExtends<TExtends>>\";\n\n\treturn `${GENERATED_HEADER}\nimport { ${coreName} as coreArkenv } from \"${importPath}\";${typeImport}\n\ntype ResolveExtend<T> = [Infer<T>] extends [never] ? T : Infer<T>;\n\ntype UnionToIntersection<U> = (\n\tU extends any ? (k: U) => void : never\n) extends (k: infer I) => void\n\t? I\n\t: never;\n\ntype MergeExtends<TExtends extends readonly unknown[] | undefined> =\n\tTExtends extends readonly unknown[]\n\t\t? UnionToIntersection<ResolveExtend<TExtends[number]>>\n\t\t: {};\n\nexport function arkenv<\n\tconst TSchema extends Record<string, any> = {},\n\tconst TExtends extends readonly unknown[] = [],\n>(\n\tschema: TSchema & {\n\t\t[K in keyof TSchema]: K extends \\`NEXT_PUBLIC_\\${string}\\` ? unknown : never;\n\t},\n\toptions?: {\n\t\textends?: [...TExtends];\n\t},\n): ${returnType} {\n\treturn ${callPrefix}(schema as any, {\n\t\t...options,\n\t\truntimeEnv: {\n\t\t\t${runtimeEnvLines}\n\t\t},\n\t} as any);\n}\n${GENERATED_FOOTER}`;\n}\n","import type { BuildLogHelpers } from \"@repo/log\";\nimport type { ArkEnvConfigOptions } from \"./types\";\n\nlet hasWarnedSimpleLayout = false;\n\nexport function normalizeLayout(\n\tlayout: ArkEnvConfigOptions[\"layout\"],\n\tbuildLog: BuildLogHelpers,\n): \"simple\" | \"strict\" | undefined {\n\tif (layout === \"flat\") return \"simple\";\n\tif (layout !== \"simple\") return layout;\n\n\tconst isDev = process.env.NODE_ENV === \"development\";\n\tif (!isDev || hasWarnedSimpleLayout) return \"simple\";\n\n\thasWarnedSimpleLayout = true;\n\tbuildLog.logBuildWarning(\n\t\t\"The 'simple' layout option is deprecated and will be removed in the next major version. Use 'flat' instead.\",\n\t);\n\treturn \"simple\";\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n\textractClientKeys,\n\textractSharedKeys,\n\tresolveLayout,\n} from \"@arkenv/build\";\nimport { resolveBuildLog } from \"@repo/log\";\nimport { extractKeys } from \"./extract\";\nimport {\n\tgenerateClientEnvAmbientDeclaration,\n\tgenerateClientFactoryCode,\n\tgenerateFactoryCode,\n\tgenerateFlatFactoryCode,\n} from \"./generate\";\nimport { normalizeLayout } from \"./layout\";\nimport type { ArkEnvConfigOptions } from \"./types\";\n\nfunction detectStandard(content: string, forceStandard?: boolean): boolean {\n\tif (forceStandard) return true;\n\treturn (\n\t\tcontent.includes(\"@arkenv/standard\") || content.includes(\"arkenv/standard\")\n\t);\n}\n\n/**\n * Run code generation to read the schema file and generate the env.gen.ts factory.\n *\n * @param schemaPath The absolute path to the schema file or directory\n * @param outputPath The absolute path to the generated output file\n * @param layoutOption The explicit layout to use; auto-detected from the filesystem when omitted\n * @param forceStandard Force standard mode code generation\n * @throws An error if strict layout files are missing when `layoutOption` is `\"strict\"`\n */\nexport function runCodegen(\n\tschemaPath: string,\n\toutputPath: string,\n\tlayoutOption?: ArkEnvConfigOptions[\"layout\"],\n\tforceStandard?: boolean,\n\tlogOptions?: Pick<ArkEnvConfigOptions, \"logger\" | \"logLevel\">,\n) {\n\tconst normalizedLayout = normalizeLayout(\n\t\tlayoutOption,\n\t\tresolveBuildLog(logOptions),\n\t);\n\n\tconst { layout: resolvedLayout, baseDir } = resolveLayout(\n\t\tschemaPath,\n\t\tnormalizedLayout,\n\t);\n\n\tlet generatedCode = \"\";\n\tif (resolvedLayout === \"strict\") {\n\t\tconst clientPath = path.join(baseDir, \"client.ts\");\n\t\tconst sharedPath = path.join(baseDir, \"internal\", \"shared.ts\");\n\n\t\tconst clientContent = fs.existsSync(clientPath)\n\t\t\t? fs.readFileSync(clientPath, \"utf-8\")\n\t\t\t: \"\";\n\t\tconst sharedContent = fs.existsSync(sharedPath)\n\t\t\t? fs.readFileSync(sharedPath, \"utf-8\")\n\t\t\t: \"\";\n\n\t\tconst isStandard =\n\t\t\tdetectStandard(clientContent, forceStandard) ||\n\t\t\tdetectStandard(sharedContent, forceStandard);\n\n\t\tconst clientKeys = extractClientKeys(clientContent);\n\t\tconst sharedKeys = extractSharedKeys(sharedContent);\n\n\t\tgeneratedCode = generateClientFactoryCode(\n\t\t\tclientKeys,\n\t\t\tsharedKeys,\n\t\t\tisStandard,\n\t\t);\n\t} else {\n\t\tconst fileContent = fs.readFileSync(schemaPath, \"utf-8\");\n\t\tconst isStandard = detectStandard(fileContent, forceStandard);\n\n\t\tconst { clientKeys, sharedKeys, isLegacy } = extractKeys(fileContent);\n\t\tif (isLegacy) {\n\t\t\tgeneratedCode = generateFactoryCode(clientKeys, sharedKeys, isStandard);\n\t\t} else {\n\t\t\tgeneratedCode = generateFlatFactoryCode(\n\t\t\t\tclientKeys,\n\t\t\t\tsharedKeys,\n\t\t\t\tisStandard,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst outputDir = path.dirname(outputPath);\n\tif (!fs.existsSync(outputDir)) {\n\t\tfs.mkdirSync(outputDir, { recursive: true });\n\t}\n\n\tlet shouldWrite = true;\n\tif (fs.existsSync(outputPath)) {\n\t\tconst existingContent = fs.readFileSync(outputPath, \"utf-8\");\n\t\tif (existingContent === generatedCode) {\n\t\t\tshouldWrite = false;\n\t\t}\n\t}\n\n\tif (shouldWrite) {\n\t\tfs.writeFileSync(outputPath, generatedCode, \"utf-8\");\n\t}\n\n\tif (resolvedLayout === \"strict\" && baseDir) {\n\t\tconst ambientPath = path.join(\n\t\t\tpath.dirname(outputPath),\n\t\t\t\"arkenv-client-env.d.ts\",\n\t\t);\n\t\tconst ambientCode = generateClientEnvAmbientDeclaration();\n\t\tlet shouldWriteAmbient = true;\n\t\tif (fs.existsSync(ambientPath)) {\n\t\t\tif (fs.readFileSync(ambientPath, \"utf-8\") === ambientCode) {\n\t\t\t\tshouldWriteAmbient = false;\n\t\t\t}\n\t\t}\n\t\tif (shouldWriteAmbient) {\n\t\t\tfs.writeFileSync(ambientPath, ambientCode, \"utf-8\");\n\t\t}\n\t}\n}\n","import path from \"node:path\";\nimport type { CLIENT_ENV_SPECIFIER } from \"../strict-client-env\";\n\ntype WebpackConfigLike = {\n\tresolve?: {\n\t\talias?:\n\t\t\t| Record<string, string | false | string[]>\n\t\t\t| Array<{ name: string; alias: string | false | string[] }>;\n\t};\n\tplugins?: unknown[];\n};\n\ntype WebpackLike = {\n\tDefinePlugin: new (definitions: Record<string, string>) => unknown;\n};\n\ntype WebpackContextLike = {\n\twebpack?: WebpackLike;\n};\n\ntype TurbopackResolveAlias = Record<string, string | string[]>;\n\ntype NextConfigLike = {\n\twebpack?: (\n\t\tconfig: WebpackConfigLike,\n\t\tcontext: WebpackContextLike,\n\t) => WebpackConfigLike | undefined;\n\tturbopack?: {\n\t\tresolveAlias?: TurbopackResolveAlias;\n\t\t[key: string]: unknown;\n\t};\n\texperimental?: {\n\t\tturbo?: {\n\t\t\tresolveAlias?: TurbopackResolveAlias;\n\t\t\t[key: string]: unknown;\n\t\t};\n\t\t[key: string]: unknown;\n\t};\n\tenv?: Record<string, string | undefined>;\n\t[key: string]: unknown;\n};\n\n/**\n * Merge `#arkenv/client-env` into a webpack `resolve.alias` value (object or array form).\n *\n * @param alias Existing webpack resolve.alias\n * @param specifier Virtual module specifier\n * @param target Absolute path to the project client env module\n * @returns Updated alias value\n */\nfunction mergeWebpackAlias(\n\talias:\n\t\t| Record<string, string | false | string[]>\n\t\t| Array<{ name: string; alias: string | false | string[] }>\n\t\t| undefined,\n\tspecifier: string,\n\ttarget: string,\n):\n\t| Record<string, string | false | string[]>\n\t| Array<{ name: string; alias: string | false | string[] }> {\n\tif (Array.isArray(alias)) {\n\t\tconst next = alias.filter((entry) => entry.name !== specifier);\n\t\tnext.push({ name: specifier, alias: target });\n\t\treturn next;\n\t}\n\treturn {\n\t\t...(alias ?? {}),\n\t\t[specifier]: target,\n\t};\n}\n\n/**\n * Apply webpack + Turbopack aliases and a compile-time strict-layout flag.\n *\n * Chains any existing `webpack` function on the user config. Turbopack aliases\n * are written to both `turbopack.resolveAlias` (Next 15+) and\n * `experimental.turbo.resolveAlias` for older configs.\n *\n * @param nextConfig User Next.js config object\n * @param clientEnvPath Absolute path to `env/client.ts`\n * @param specifier Virtual module specifier (typically `#arkenv/client-env`)\n * @returns Next config with strict-layout alias wiring\n */\nexport function applyStrictLayoutAliases<T extends NextConfigLike>(\n\tnextConfig: T,\n\tclientEnvPath: string,\n\tspecifier: typeof CLIENT_ENV_SPECIFIER | string = \"#arkenv/client-env\",\n): T {\n\tconst previousWebpack = nextConfig.webpack;\n\n\tconst webpack = (config: WebpackConfigLike, context: WebpackContextLike) => {\n\t\tconst resolved = previousWebpack\n\t\t\t? (previousWebpack(config, context) ?? config)\n\t\t\t: config;\n\t\tresolved.resolve = resolved.resolve ?? {};\n\t\tresolved.resolve.alias = mergeWebpackAlias(\n\t\t\tresolved.resolve.alias,\n\t\t\tspecifier,\n\t\t\tclientEnvPath,\n\t\t);\n\n\t\tconst DefinePlugin = context.webpack?.DefinePlugin;\n\t\tif (DefinePlugin) {\n\t\t\tresolved.plugins = resolved.plugins ?? [];\n\t\t\tresolved.plugins.push(\n\t\t\t\tnew DefinePlugin({\n\t\t\t\t\t__ARKENV_STRICT_LAYOUT__: JSON.stringify(true),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn resolved;\n\t};\n\n\tconst turbopackTarget = path.isAbsolute(clientEnvPath)\n\t\t? `./${path.relative(process.cwd(), clientEnvPath).replace(/\\\\/g, \"/\")}`\n\t\t: clientEnvPath.startsWith(\".\")\n\t\t\t? clientEnvPath\n\t\t\t: `./${clientEnvPath}`;\n\n\tconst existingTurbopack = nextConfig.turbopack ?? {};\n\tconst turbopackResolveAlias: TurbopackResolveAlias = {\n\t\t...(existingTurbopack.resolveAlias ?? {}),\n\t\t[specifier]: turbopackTarget,\n\t};\n\n\tconst existingExperimental = nextConfig.experimental;\n\tconst experimental = existingExperimental\n\t\t? {\n\t\t\t\t...existingExperimental,\n\t\t\t\t...(existingExperimental.turbo\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tturbo: {\n\t\t\t\t\t\t\t\t...existingExperimental.turbo,\n\t\t\t\t\t\t\t\tresolveAlias: {\n\t\t\t\t\t\t\t\t\t...(existingExperimental.turbo.resolveAlias ?? {}),\n\t\t\t\t\t\t\t\t\t[specifier]: turbopackTarget,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t}\n\t\t: undefined;\n\n\t// NOTE: `nextConfig` is spread as a plain object below. Only the object-form\n\t// of `next.config` is supported here — a callable/function-form config would\n\t// lose its call signature when spread, silently dropping any phase-dependent\n\t// logic. Callers are responsible for dereferencing a callable config before\n\t// passing it to this function. Full callable-form support is tracked separately.\n\tconst result: Record<string, unknown> = {\n\t\t...nextConfig,\n\t\twebpack,\n\t\t// Turbopack / non-webpack paths: surface the flag via Next env inlining.\n\t\t// Note: Next.js forbids keys with __ prefix in nextConfig.env, so we use\n\t\t// ARKENV_STRICT_LAYOUT (no underscores) here. The webpack DefinePlugin\n\t\t// path uses __ARKENV_STRICT_LAYOUT__ as a compile-time literal, which is fine.\n\t\tenv: {\n\t\t\t...(nextConfig.env ?? {}),\n\t\t\tARKENV_STRICT_LAYOUT: \"true\",\n\t\t},\n\t\tturbopack: {\n\t\t\t...existingTurbopack,\n\t\t\tresolveAlias: turbopackResolveAlias,\n\t\t},\n\t};\n\n\tif (experimental) {\n\t\tresult.experimental = experimental;\n\t}\n\n\treturn result as T;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n\tfindSchemaPath,\n\tformatMissingSchemaError,\n\tresolveLayout,\n\twatchSchema,\n} from \"@arkenv/build\";\nimport {\n\tformatBuildError,\n\tresolveBuildLog,\n\tresolveLoggerFromOptions,\n} from \"@repo/log\";\nimport { createJiti } from \"jiti\";\nimport {\n\tCLIENT_ENV_SPECIFIER,\n\tmissingClientTsError,\n} from \"../strict-client-env\";\nimport { runCodegen } from \"./codegen\";\nimport { normalizeLayout } from \"./layout\";\nimport { applyStrictLayoutAliases } from \"./strict-layout-aliases\";\nimport type { ArkEnvConfigOptions } from \"./types\";\n\nfunction resolveMockServerOnlyPath(moduleDir: string): string {\n\tfor (const base of [moduleDir, path.join(moduleDir, \"..\")]) {\n\t\tconst tsPath = path.join(base, \"mock-server-only.ts\");\n\t\tif (fs.existsSync(tsPath)) {\n\t\t\treturn tsPath;\n\t\t}\n\t\tconst jsPath = path.join(base, \"mock-server-only.js\");\n\t\tif (fs.existsSync(jsPath)) {\n\t\t\treturn jsPath;\n\t\t}\n\t}\n\n\treturn path.join(moduleDir, \"mock-server-only.js\");\n}\n\nfunction resolveEmptyClientEnvPath(moduleDir: string): string {\n\tfor (const base of [moduleDir, path.join(moduleDir, \"..\")]) {\n\t\tconst tsPath = path.join(base, \"empty-client-env.ts\");\n\t\tif (fs.existsSync(tsPath)) {\n\t\t\treturn tsPath;\n\t\t}\n\t\tconst jsPath = path.join(base, \"empty-client-env.js\");\n\t\tif (fs.existsSync(jsPath)) {\n\t\t\treturn jsPath;\n\t\t}\n\t}\n\n\treturn path.join(moduleDir, \"empty-client-env.js\");\n}\n\nfunction schemaPathExists(schemaPath: string): boolean {\n\tif (fs.existsSync(schemaPath)) return true;\n\n\tconst ext = path.extname(schemaPath);\n\tif (!ext) return false;\n\n\tconst baseWithoutExt = schemaPath.slice(0, -ext.length);\n\treturn fs.existsSync(baseWithoutExt);\n}\n\ntype SetupResult = {\n\tresolvedLayout: \"flat\" | \"strict\" | \"simple\";\n\tbaseDir: string | undefined;\n\tclientEnvPath: string | undefined;\n};\n\n/**\n * Run ArkEnv codegen and setup without wrapping nextConfig.\n *\n * @param options Optional configuration paths for schema and output files\n * @param internalOptions Optional configuration for internal testing hooks\n * @returns Resolved layout paths used by `withArkEnv` for alias registration\n * @throws An error if the schema file cannot be found or if code generation fails\n */\nexport function setupArkEnv(\n\toptions?: ArkEnvConfigOptions,\n\tinternalOptions?: { _jitiAliases?: Record<string, string> },\n): SetupResult {\n\tconst buildLog = resolveBuildLog(options);\n\n\tconst schemaPath = options?.schemaPath\n\t\t? path.resolve(options.schemaPath)\n\t\t: findSchemaPath();\n\n\tif (!schemaPath || !schemaPathExists(schemaPath)) {\n\t\tthrow new Error(\n\t\t\tformatMissingSchemaError({\n\t\t\t\tschemaPath: options?.schemaPath,\n\t\t\t\toptionsHint: \"setupArkEnv options\",\n\t\t\t}),\n\t\t);\n\t}\n\n\tconst normalizedLayout = normalizeLayout(options?.layout, buildLog);\n\n\tconst { layout: resolvedLayout, baseDir } = resolveLayout(\n\t\tschemaPath,\n\t\tnormalizedLayout,\n\t);\n\n\tconst clientEnvPath =\n\t\tresolvedLayout === \"strict\" && baseDir\n\t\t\t? path.join(baseDir, \"client.ts\")\n\t\t\t: undefined;\n\n\tif (clientEnvPath && !fs.existsSync(clientEnvPath)) {\n\t\tthrow new Error(missingClientTsError(clientEnvPath, baseDir!));\n\t}\n\n\tconst defaultOutputDir =\n\t\tresolvedLayout === \"strict\" && baseDir ? baseDir : path.dirname(schemaPath);\n\tconst defaultOutputPath = path.join(\n\t\tdefaultOutputDir,\n\t\t\"generated\",\n\t\t\"env.gen.ts\",\n\t);\n\tconst outputPath = options?.outputPath\n\t\t? path.resolve(options.outputPath)\n\t\t: defaultOutputPath;\n\n\tconst codegen = options?.codegen ?? true;\n\tif (codegen) {\n\t\ttry {\n\t\t\trunCodegen(\n\t\t\t\tschemaPath,\n\t\t\t\toutputPath,\n\t\t\t\tresolvedLayout,\n\t\t\t\toptions?.standard,\n\t\t\t\toptions,\n\t\t\t);\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new Error(\n\t\t\t\tformatBuildError(`Failed to generate env.gen.ts: ${message}`),\n\t\t\t);\n\t\t}\n\t}\n\n\tconst runValidation = options?.validate ?? true;\n\tif (runValidation) {\n\t\tconst g = globalThis as {\n\t\t\t__arkenv_force_server__?: boolean;\n\t\t\t__ARKENV_STRICT_LAYOUT__?: boolean;\n\t\t\t__ARKENV_CLIENT_ENV__?: unknown;\n\t\t};\n\t\ttry {\n\t\t\tg.__arkenv_force_server__ = true;\n\t\t\tconst fileToEvaluate =\n\t\t\t\tresolvedLayout === \"strict\" && baseDir\n\t\t\t\t\t? path.join(baseDir, \"server.ts\")\n\t\t\t\t\t: schemaPath;\n\n\t\t\tconst filenameForJiti =\n\t\t\t\ttypeof __filename !== \"undefined\"\n\t\t\t\t\t? __filename\n\t\t\t\t\t: typeof import.meta !== \"undefined\" && import.meta.url\n\t\t\t\t\t\t? fileURLToPath(import.meta.url)\n\t\t\t\t\t\t: \"\";\n\t\t\tconst dir = path.dirname(filenameForJiti);\n\t\t\tconst mockServerOnlyPath = resolveMockServerOnlyPath(dir);\n\t\t\tconst emptyClientEnvPath = resolveEmptyClientEnvPath(dir);\n\n\t\t\tconst aliases: Record<string, string> = {\n\t\t\t\t\"server-only\": mockServerOnlyPath,\n\t\t\t\t\"./script\": mockServerOnlyPath,\n\t\t\t\t\"./script.tsx\": mockServerOnlyPath,\n\t\t\t\t[CLIENT_ENV_SPECIFIER]:\n\t\t\t\t\tclientEnvPath && fs.existsSync(clientEnvPath)\n\t\t\t\t\t\t? clientEnvPath\n\t\t\t\t\t\t: emptyClientEnvPath,\n\t\t\t\t...internalOptions?._jitiAliases,\n\t\t\t};\n\n\t\t\tconst jiti = createJiti(fileToEvaluate, {\n\t\t\t\tmoduleCache: false,\n\t\t\t\tfsCache: false,\n\t\t\t\ttsconfigPaths: true,\n\t\t\t\talias: aliases,\n\t\t\t});\n\n\t\t\tif (resolvedLayout === \"strict\" && clientEnvPath) {\n\t\t\t\tg.__ARKENV_STRICT_LAYOUT__ = true;\n\t\t\t\tconst clientMod = jiti(clientEnvPath) as {\n\t\t\t\t\tenv?: unknown;\n\t\t\t\t\tdefault?: { env?: unknown };\n\t\t\t\t};\n\t\t\t\tg.__ARKENV_CLIENT_ENV__ =\n\t\t\t\t\tclientMod.env ?? clientMod.default?.env ?? clientMod;\n\t\t\t}\n\n\t\t\tjiti(fileToEvaluate);\n\t\t} catch (error: unknown) {\n\t\t\tbuildLog.logBuildError(\"Environment validation failed:\");\n\t\t\tbuildLog.logBuildErrorDetail(\n\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t);\n\t\t\tbuildLog.logBuildErrorBlankLine();\n\t\t\tprocess.exit(1);\n\t\t} finally {\n\t\t\tdelete g.__arkenv_force_server__;\n\t\t\tdelete g.__ARKENV_STRICT_LAYOUT__;\n\t\t\tdelete g.__ARKENV_CLIENT_ENV__;\n\t\t}\n\t}\n\n\tconst isDev =\n\t\tprocess.env.NODE_ENV === \"development\" ||\n\t\tprocess.env.NEXT_PHASE === \"phase-development-server\";\n\tif (isDev && codegen) {\n\t\tconst watchPaths =\n\t\t\tresolvedLayout === \"strict\" && baseDir\n\t\t\t\t? [\n\t\t\t\t\t\tpath.join(baseDir, \"internal\", \"shared.ts\"),\n\t\t\t\t\t\tpath.join(baseDir, \"client.ts\"),\n\t\t\t\t\t\tpath.join(baseDir, \"server.ts\"),\n\t\t\t\t\t].filter(fs.existsSync)\n\t\t\t\t: [schemaPath];\n\t\twatchSchema(\n\t\t\twatchPaths,\n\t\t\t() => {\n\t\t\t\trunCodegen(\n\t\t\t\t\tschemaPath,\n\t\t\t\t\toutputPath,\n\t\t\t\t\tresolvedLayout,\n\t\t\t\t\toptions?.standard,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t\tresolveLoggerFromOptions(options),\n\t\t);\n\t}\n\n\treturn {\n\t\tresolvedLayout,\n\t\tbaseDir,\n\t\tclientEnvPath,\n\t};\n}\n\n/**\n * Wrap a Next.js configuration object to automatically generate the `runtimeEnv`\n * block in `env.gen.ts` and, in strict layout, register the `#arkenv/client-env`\n * alias so `@arkenv/nextjs/server` can auto-extend the client env.\n *\n * @param nextConfig The Next.js configuration object (object-form only; function-form configs are not yet supported — see follow-up issue)\n * @param options Optional configuration paths for schema and output files\n * @returns The Next.js configuration object (with strict-layout aliases when applicable)\n * @throws An error if the schema file cannot be found or if code generation fails\n */\nexport function withArkEnv<T>(nextConfig: T, options?: ArkEnvConfigOptions): T {\n\tconst { resolvedLayout, clientEnvPath } = setupArkEnv(options);\n\n\tif (resolvedLayout === \"strict\" && clientEnvPath) {\n\t\treturn applyStrictLayoutAliases(\n\t\t\tnextConfig as Record<string, unknown>,\n\t\t\tclientEnvPath,\n\t\t\tCLIENT_ENV_SPECIFIER,\n\t\t) as T;\n\t}\n\n\treturn nextConfig;\n}\n"],"mappings":"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"}
|
package/dist/config-CU-9fwxw.cjs
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=require(`./dist-Bof1Std7.cjs`),l=require(`./strict-client-env-MouPnkRr.cjs`);let u=require(`@arkenv/build`),d=require(`node:fs`);d=s(d,1);let f=require(`node:path`);f=s(f,1);let p=require(`node:url`),m=require(`jiti`);function h(e){let t=e.match(/exposeToClient\s*:\s*\[([\s\S]*?)\]/)||e.match(/expose\s*:\s*\[([\s\S]*?)\]/)||e.match(/shared\s*:\s*\[([\s\S]*?)\]/);if(!t)return[];let n=[];for(let e of t[1].matchAll(/['"`](.*?)['"`]/g))n.push(e[1]);return n}function g(e){let t=/\b(?:arkenv|createEnv)\s*\(/g;for(;t.exec(e)!==null;){let n=1,r=t.lastIndex,i=null,a=null,o=0,s=0,c=[],l=``;for(;r<e.length&&n>0;){let t=e[r],u=e[r+1];if(a===`single`){(t===`
|
|
2
|
-
`||t===`\r`)&&(a=null),l+=t,r++;continue}if(a===`multi`){if(t===`*`&&u===`/`){a=null,l+=`*/`,r+=2;continue}l+=t,r++;continue}if(i){t===i&&e[r-1]!==`\\`&&(i=null),l+=t,r++;continue}if(t===`/`&&u===`/`){a=`single`,l+=`//`,r+=2;continue}if(t===`/`&&u===`*`){a=`multi`,l+=`/*`,r+=2;continue}if(t===`'`||t===`"`||t==="`"){i=t,l+=t,r++;continue}if(t===`(`?n++:t===`)`?n--:t===`{`?o++:t===`}`?o--:t===`[`?s++:t===`]`&&s--,n===0){c.push(l);break}t===`,`&&n===1&&o===0&&s===0?(c.push(l),l=``):l+=t,r++}if(n===0&&c.length>0)return{schemaArg:c[0].trim(),optionsArg:c[1]?c[1].trim():null}}return null}function _(e){let t=[],n=[],r=g(e);if(!r)return{clientKeys:t,sharedKeys:n,isLegacy:!1};let i=(0,u.parseBlockKeys)(r.schemaArg.replace(/^\{/,``).replace(/\}$/,``).trim()),a=i.includes(`client`)||i.includes(`server`)||i.includes(`shared`);if(a){let e=(0,u.extractBlock)(r.schemaArg,`client`);e&&t.push(...(0,u.parseBlockKeys)(e));let i=(0,u.extractBlock)(r.schemaArg,`shared`);return i&&n.push(...(0,u.parseBlockKeys)(i)),{clientKeys:t,sharedKeys:n,isLegacy:a}}let o=r.optionsArg?h(r.optionsArg):[];for(let e of i){if(o.includes(e)||e===`NODE_ENV`){n.push(e);continue}e.startsWith(`NEXT_PUBLIC_`)&&t.push(e)}return{clientKeys:t,sharedKeys:n,isLegacy:a}}function v(e,t){return Array.from(new Set([...e,...t])).map(e=>`\t\t\t${e}: typeof window !== "undefined" ? (globalThis as any).__arkenv_env__?.${e} ?? process.env.${e} : process.env.${e},`).join(`
|
|
3
|
-
`)}const y=`/* eslint-disable */
|
|
4
|
-
// biome-ignore format: auto-generated
|
|
5
|
-
// Generated by ArkEnv. DO NOT EDIT DIRECTLY.
|
|
6
|
-
`,b=`
|
|
7
|
-
export default arkenv;
|
|
8
|
-
`;function x(e,t,n){let r=v(e,t);return`${y}
|
|
9
|
-
import { arkenv as coreArkenv } from "${n?`@arkenv/nextjs/standard`:`@arkenv/nextjs`}";
|
|
10
|
-
|
|
11
|
-
export function arkenv<
|
|
12
|
-
const TServer extends Record<string, any> = {},
|
|
13
|
-
const TClient extends Record<string, any> = {},
|
|
14
|
-
const TShared extends Record<string, any> = {},
|
|
15
|
-
>(options: {
|
|
16
|
-
server?: TServer;
|
|
17
|
-
client?: TClient & {
|
|
18
|
-
[K in keyof TClient]: K extends \`NEXT_PUBLIC_\${string}\` ? unknown : never;
|
|
19
|
-
};
|
|
20
|
-
shared?: TShared;
|
|
21
|
-
}) {
|
|
22
|
-
return coreArkenv({
|
|
23
|
-
...options,
|
|
24
|
-
runtimeEnv: {
|
|
25
|
-
${r}
|
|
26
|
-
},
|
|
27
|
-
} as any) as any;
|
|
28
|
-
}
|
|
29
|
-
${b}`}function S(e,t,n){let r=v(e,t);return`${y}
|
|
30
|
-
import { arkenv as coreArkenv } from "${n?`@arkenv/nextjs/standard`:`@arkenv/nextjs`}";${n?``:`
|
|
31
|
-
import type { type as at, distill } from "arktype";`}
|
|
32
|
-
|
|
33
|
-
export function arkenv<
|
|
34
|
-
const TSchema extends Record<string, unknown> & { runtimeEnv?: never } = {},
|
|
35
|
-
const TExpose extends keyof TSchema = never,
|
|
36
|
-
const TExtends extends readonly unknown[] = [],
|
|
37
|
-
>(
|
|
38
|
-
schema: TSchema,
|
|
39
|
-
options?: {
|
|
40
|
-
/**
|
|
41
|
-
* Custom environment variables to expose to the client bundle.
|
|
42
|
-
* By default, variables prefixed with \`NEXT_PUBLIC_\` and \`NODE_ENV\` are exposed automatically.
|
|
43
|
-
* Use this option to expose custom variables that do not have the \`NEXT_PUBLIC_\` prefix.
|
|
44
|
-
*/
|
|
45
|
-
exposeToClient?: readonly TExpose[];
|
|
46
|
-
extends?: [...TExtends];
|
|
47
|
-
},
|
|
48
|
-
): ${n?`Readonly<TSchema>`:`Readonly<distill.Out<at.infer<TSchema>>>`} {
|
|
49
|
-
const env = coreArkenv(schema as any, {
|
|
50
|
-
...options,
|
|
51
|
-
runtimeEnv: {
|
|
52
|
-
${r}
|
|
53
|
-
},
|
|
54
|
-
} as any);
|
|
55
|
-
return env${n?``:` as unknown as Readonly<distill.Out<at.infer<TSchema>>>`};
|
|
56
|
-
}
|
|
57
|
-
${b}`}function C(){return`${y}
|
|
58
|
-
declare module "#arkenv/client-env" {
|
|
59
|
-
export { env } from "../client";
|
|
60
|
-
}
|
|
61
|
-
`}function w(e,t,n){let r=v(e,t);return`${y}
|
|
62
|
-
import { arkenv as coreArkenv } from "${n?`@arkenv/nextjs/standard/client`:`@arkenv/nextjs/client`}";${n?``:`
|
|
63
|
-
import type { Infer } from "@arkenv/core";`}
|
|
64
|
-
|
|
65
|
-
type ResolveExtend<T> = [Infer<T>] extends [never] ? T : Infer<T>;
|
|
66
|
-
|
|
67
|
-
type UnionToIntersection<U> = (
|
|
68
|
-
U extends any ? (k: U) => void : never
|
|
69
|
-
) extends (k: infer I) => void
|
|
70
|
-
? I
|
|
71
|
-
: never;
|
|
72
|
-
|
|
73
|
-
type MergeExtends<TExtends extends readonly unknown[] | undefined> =
|
|
74
|
-
TExtends extends readonly unknown[]
|
|
75
|
-
? UnionToIntersection<ResolveExtend<TExtends[number]>>
|
|
76
|
-
: {};
|
|
77
|
-
|
|
78
|
-
export function arkenv<
|
|
79
|
-
const TSchema extends Record<string, any> = {},
|
|
80
|
-
const TExtends extends readonly unknown[] = [],
|
|
81
|
-
>(
|
|
82
|
-
schema: TSchema & {
|
|
83
|
-
[K in keyof TSchema]: K extends \`NEXT_PUBLIC_\${string}\` ? unknown : never;
|
|
84
|
-
},
|
|
85
|
-
options?: {
|
|
86
|
-
extends?: [...TExtends];
|
|
87
|
-
},
|
|
88
|
-
): ${n?`Readonly<TSchema & MergeExtends<TExtends>>`:`Readonly<Infer<TSchema> & MergeExtends<TExtends>>`} {
|
|
89
|
-
return coreArkenv(schema as any, {
|
|
90
|
-
...options,
|
|
91
|
-
runtimeEnv: {
|
|
92
|
-
${r}
|
|
93
|
-
},
|
|
94
|
-
} as any);
|
|
95
|
-
}
|
|
96
|
-
${b}`}let T=!1;function E(e,t){return e===`flat`?`simple`:e===`simple`?process.env.NODE_ENV!==`development`||T?`simple`:(T=!0,t.logBuildWarning(`The 'simple' layout option is deprecated and will be removed in the next major version. Use 'flat' instead.`),`simple`):e}function D(e,t){return t?!0:e.includes(`@arkenv/standard`)||e.includes(`arkenv/standard`)}function O(e,t,n,r,i){let{layout:a,baseDir:o}=(0,u.resolveLayout)(e,E(n,c.n(i))),s=``;if(a===`strict`){let e=f.default.join(o,`client.ts`),t=f.default.join(o,`internal`,`shared.ts`),n=d.default.existsSync(e)?d.default.readFileSync(e,`utf-8`):``,i=d.default.existsSync(t)?d.default.readFileSync(t,`utf-8`):``,a=D(n,r)||D(i,r);s=w((0,u.extractClientKeys)(n),(0,u.extractSharedKeys)(i),a)}else{let t=d.default.readFileSync(e,`utf-8`),n=D(t,r),{clientKeys:i,sharedKeys:a,isLegacy:o}=_(t);s=o?x(i,a,n):S(i,a,n)}let l=f.default.dirname(t);d.default.existsSync(l)||d.default.mkdirSync(l,{recursive:!0});let p=!0;if(d.default.existsSync(t)&&d.default.readFileSync(t,`utf-8`)===s&&(p=!1),p&&d.default.writeFileSync(t,s,`utf-8`),a===`strict`&&o){let e=f.default.join(f.default.dirname(t),`arkenv-client-env.d.ts`),n=C(),r=!0;d.default.existsSync(e)&&d.default.readFileSync(e,`utf-8`)===n&&(r=!1),r&&d.default.writeFileSync(e,n,`utf-8`)}}function k(e,t,n){if(Array.isArray(e)){let r=e.filter(e=>e.name!==t);return r.push({name:t,alias:n}),r}return{...e??{},[t]:n}}function A(e,t,n=`#arkenv/client-env`){let r=e.webpack,i=(e,i)=>{let a=r?r(e,i)??e:e;a.resolve=a.resolve??{},a.resolve.alias=k(a.resolve.alias,n,t);let o=i.webpack?.DefinePlugin;return o&&(a.plugins=a.plugins??[],a.plugins.push(new o({__ARKENV_STRICT_LAYOUT__:JSON.stringify(!0)}))),a},a=f.default.isAbsolute(t)?`./${f.default.relative(process.cwd(),t).replace(/\\/g,`/`)}`:t.startsWith(`.`)?t:`./${t}`,o=e.turbopack??{},s={...o.resolveAlias??{},[n]:a},c=e.experimental,l=c?{...c,...c.turbo?{turbo:{...c.turbo,resolveAlias:{...c.turbo.resolveAlias??{},[n]:a}}}:{}}:void 0,u={...e,webpack:i,env:{...e.env??{},ARKENV_STRICT_LAYOUT:`true`},turbopack:{...o,resolveAlias:s}};return l&&(u.experimental=l),u}function j(e){for(let t of[e,f.default.join(e,`..`)]){let e=f.default.join(t,`mock-server-only.ts`);if(d.default.existsSync(e))return e;let n=f.default.join(t,`mock-server-only.js`);if(d.default.existsSync(n))return n}return f.default.join(e,`mock-server-only.js`)}function M(e){for(let t of[e,f.default.join(e,`..`)]){let e=f.default.join(t,`empty-client-env.ts`);if(d.default.existsSync(e))return e;let n=f.default.join(t,`empty-client-env.js`);if(d.default.existsSync(n))return n}return f.default.join(e,`empty-client-env.js`)}function N(e){if(d.default.existsSync(e))return!0;let t=f.default.extname(e);if(!t)return!1;let n=e.slice(0,-t.length);return d.default.existsSync(n)}function P(e,t){let n=c.n(e),r=e?.schemaPath?f.default.resolve(e.schemaPath):(0,u.findSchemaPath)();if(!r||!N(r))throw Error((0,u.formatMissingSchemaError)({schemaPath:e?.schemaPath,optionsHint:`setupArkEnv options`}));let{layout:i,baseDir:a}=(0,u.resolveLayout)(r,E(e?.layout,n)),o=i===`strict`&&a?f.default.join(a,`client.ts`):void 0;if(o&&!d.default.existsSync(o))throw Error(l.r(o,a));let s=i===`strict`&&a?a:f.default.dirname(r),h=f.default.join(s,`generated`,`env.gen.ts`),g=e?.outputPath?f.default.resolve(e.outputPath):h,_=e?.codegen??!0;if(_)try{O(r,g,i,e?.standard,e)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(c.r(`Failed to generate env.gen.ts: ${t}`))}if(e?.validate??!0){let e=globalThis;try{e.__arkenv_force_server__=!0;let n=i===`strict`&&a?f.default.join(a,`server.ts`):r,s=typeof __filename<`u`?__filename:require(`url`).pathToFileURL(__filename).href?(0,p.fileURLToPath)(require(`url`).pathToFileURL(__filename).href):``,c=f.default.dirname(s),u=j(c),h=M(c),g=(0,m.createJiti)(n,{moduleCache:!1,fsCache:!1,tsconfigPaths:!0,alias:{"server-only":u,"./script":u,"./script.tsx":u,[l.t]:o&&d.default.existsSync(o)?o:h,...t?._jitiAliases}});if(i===`strict`&&o){e.__ARKENV_STRICT_LAYOUT__=!0;let t=g(o);e.__ARKENV_CLIENT_ENV__=t.env??t.default?.env??t}g(n)}catch(e){n.logBuildError(`Environment validation failed:`),n.logBuildErrorDetail(e instanceof Error?e.message:String(e)),n.logBuildErrorBlankLine(),process.exit(1)}finally{delete e.__arkenv_force_server__,delete e.__ARKENV_STRICT_LAYOUT__,delete e.__ARKENV_CLIENT_ENV__}}return(process.env.NODE_ENV===`development`||process.env.NEXT_PHASE===`phase-development-server`)&&_&&(0,u.watchSchema)(i===`strict`&&a?[f.default.join(a,`internal`,`shared.ts`),f.default.join(a,`client.ts`),f.default.join(a,`server.ts`)].filter(d.default.existsSync):[r],()=>{O(r,g,i,e?.standard,e)},c.t(e)),{resolvedLayout:i,baseDir:a,clientEnvPath:o}}function F(e,t){let{resolvedLayout:n,clientEnvPath:r}=P(t);return n===`strict`&&r?A(e,r,l.t):e}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return P}});
|
|
97
|
-
//# sourceMappingURL=config-CU-9fwxw.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-CU-9fwxw.cjs","names":["resolveBuildLog","path","fs","path","path","fs","resolveBuildLog","missingClientTsError","formatBuildError","jiti","CLIENT_ENV_SPECIFIER","resolveLoggerFromOptions"],"sources":["../src/config/extract.ts","../src/config/generate.ts","../src/config/layout.ts","../src/config/codegen.ts","../src/config/strict-layout-aliases.ts","../src/config/setup.ts"],"sourcesContent":["import { extractBlock, parseBlockKeys } from \"@arkenv/build\";\n\nfunction parseExposeKeys(optionsArg: string): string[] {\n\tconst exposeMatch =\n\t\toptionsArg.match(/exposeToClient\\s*:\\s*\\[([\\s\\S]*?)\\]/) ||\n\t\toptionsArg.match(/expose\\s*:\\s*\\[([\\s\\S]*?)\\]/) ||\n\t\toptionsArg.match(/shared\\s*:\\s*\\[([\\s\\S]*?)\\]/);\n\tif (!exposeMatch) return [];\n\n\tconst keys: string[] = [];\n\tfor (const match of exposeMatch[1].matchAll(/['\"`](.*?)['\"`]/g)) {\n\t\tkeys.push(match[1]);\n\t}\n\treturn keys;\n}\n\nfunction extractCallArguments(\n\tcontent: string,\n): { schemaArg: string; optionsArg: string | null } | null {\n\tconst regex = /\\b(?:arkenv|createEnv)\\s*\\(/g;\n\twhile (regex.exec(content) !== null) {\n\t\tlet parenCount = 1;\n\t\tlet index = regex.lastIndex;\n\t\tlet inString: string | null = null;\n\t\tlet inComment: \"single\" | \"multi\" | null = null;\n\t\tlet braceCount = 0;\n\t\tlet bracketCount = 0;\n\n\t\tconst args: string[] = [];\n\t\tlet currentArg = \"\";\n\n\t\twhile (index < content.length && parenCount > 0) {\n\t\t\tconst char = content[index];\n\t\t\tconst nextChar = content[index + 1];\n\n\t\t\tif (inComment === \"single\") {\n\t\t\t\tif (char === \"\\n\" || char === \"\\r\") inComment = null;\n\t\t\t\tcurrentArg += char;\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (inComment === \"multi\") {\n\t\t\t\tif (char === \"*\" && nextChar === \"/\") {\n\t\t\t\t\tinComment = null;\n\t\t\t\t\tcurrentArg += \"*/\";\n\t\t\t\t\tindex += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcurrentArg += char;\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (inString) {\n\t\t\t\tif (char === inString && content[index - 1] !== \"\\\\\") {\n\t\t\t\t\tinString = null;\n\t\t\t\t}\n\t\t\t\tcurrentArg += char;\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (char === \"/\" && nextChar === \"/\") {\n\t\t\t\tinComment = \"single\";\n\t\t\t\tcurrentArg += \"//\";\n\t\t\t\tindex += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === \"/\" && nextChar === \"*\") {\n\t\t\t\tinComment = \"multi\";\n\t\t\t\tcurrentArg += \"/*\";\n\t\t\t\tindex += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === \"'\" || char === '\"' || char === \"`\") {\n\t\t\t\tinString = char;\n\t\t\t\tcurrentArg += char;\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (char === \"(\") {\n\t\t\t\tparenCount++;\n\t\t\t} else if (char === \")\") {\n\t\t\t\tparenCount--;\n\t\t\t} else if (char === \"{\") {\n\t\t\t\tbraceCount++;\n\t\t\t} else if (char === \"}\") {\n\t\t\t\tbraceCount--;\n\t\t\t} else if (char === \"[\") {\n\t\t\t\tbracketCount++;\n\t\t\t} else if (char === \"]\") {\n\t\t\t\tbracketCount--;\n\t\t\t}\n\n\t\t\tif (parenCount === 0) {\n\t\t\t\targs.push(currentArg);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tchar === \",\" &&\n\t\t\t\tparenCount === 1 &&\n\t\t\t\tbraceCount === 0 &&\n\t\t\t\tbracketCount === 0\n\t\t\t) {\n\t\t\t\targs.push(currentArg);\n\t\t\t\tcurrentArg = \"\";\n\t\t\t} else {\n\t\t\t\tcurrentArg += char;\n\t\t\t}\n\t\t\tindex++;\n\t\t}\n\n\t\tif (parenCount === 0 && args.length > 0) {\n\t\t\treturn {\n\t\t\t\tschemaArg: args[0].trim(),\n\t\t\t\toptionsArg: args[1] ? args[1].trim() : null,\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * Statically extract client and shared keys from the schema content.\n *\n * @param content The schema file string content\n * @returns An object containing the extracted client and shared keys\n */\nexport function extractKeys(content: string): {\n\tclientKeys: string[];\n\tsharedKeys: string[];\n\tisLegacy?: boolean;\n} {\n\tconst clientKeys: string[] = [];\n\tconst sharedKeys: string[] = [];\n\n\tconst args = extractCallArguments(content);\n\tif (!args) {\n\t\treturn { clientKeys, sharedKeys, isLegacy: false };\n\t}\n\n\tconst trimmedSchema = args.schemaArg\n\t\t.replace(/^\\{/, \"\")\n\t\t.replace(/\\}$/, \"\")\n\t\t.trim();\n\tconst topKeys = parseBlockKeys(trimmedSchema);\n\tconst isLegacy =\n\t\ttopKeys.includes(\"client\") ||\n\t\ttopKeys.includes(\"server\") ||\n\t\ttopKeys.includes(\"shared\");\n\n\tif (isLegacy) {\n\t\tconst clientBlock = extractBlock(args.schemaArg, \"client\");\n\t\tif (clientBlock) clientKeys.push(...parseBlockKeys(clientBlock));\n\t\tconst sharedBlock = extractBlock(args.schemaArg, \"shared\");\n\t\tif (sharedBlock) sharedKeys.push(...parseBlockKeys(sharedBlock));\n\t\treturn { clientKeys, sharedKeys, isLegacy };\n\t}\n\n\tconst optionExposedKeys = args.optionsArg\n\t\t? parseExposeKeys(args.optionsArg)\n\t\t: [];\n\n\tfor (const key of topKeys) {\n\t\tif (optionExposedKeys.includes(key) || key === \"NODE_ENV\") {\n\t\t\tsharedKeys.push(key);\n\t\t\tcontinue;\n\t\t}\n\t\tif (key.startsWith(\"NEXT_PUBLIC_\")) {\n\t\t\tclientKeys.push(key);\n\t\t}\n\t}\n\n\treturn { clientKeys, sharedKeys, isLegacy };\n}\n","function generateRuntimeEnvLines(\n\tclientKeys: string[],\n\tsharedKeys: string[],\n): string {\n\tconst allKeys = Array.from(new Set([...clientKeys, ...sharedKeys]));\n\treturn allKeys\n\t\t.map(\n\t\t\t(key) =>\n\t\t\t\t`\\t\\t\\t${key}: typeof window !== \"undefined\" ? (globalThis as any).__arkenv_env__?.${key} ?? process.env.${key} : process.env.${key},`,\n\t\t)\n\t\t.join(\"\\n\");\n}\n\nconst GENERATED_HEADER = `/* eslint-disable */\n// biome-ignore format: auto-generated\n// Generated by ArkEnv. DO NOT EDIT DIRECTLY.\n`;\n\nconst GENERATED_FOOTER = `\nexport default arkenv;\n`;\n\nexport function generateFactoryCode(\n\tclientKeys: string[],\n\tsharedKeys: string[],\n\tisStandard?: boolean,\n): string {\n\tconst runtimeEnvLines = generateRuntimeEnvLines(clientKeys, sharedKeys);\n\tconst importPath = isStandard ? \"@arkenv/nextjs/standard\" : \"@arkenv/nextjs\";\n\tconst coreName = \"arkenv\";\n\tconst callPrefix = \"coreArkenv\";\n\n\treturn `${GENERATED_HEADER}\nimport { ${coreName} as coreArkenv } from \"${importPath}\";\n\nexport function arkenv<\n\tconst TServer extends Record<string, any> = {},\n\tconst TClient extends Record<string, any> = {},\n\tconst TShared extends Record<string, any> = {},\n>(options: {\n\tserver?: TServer;\n\tclient?: TClient & {\n\t\t[K in keyof TClient]: K extends \\`NEXT_PUBLIC_\\${string}\\` ? unknown : never;\n\t};\n\tshared?: TShared;\n}) {\n\treturn ${callPrefix}({\n\t\t...options,\n\t\truntimeEnv: {\n\t\t\t${runtimeEnvLines}\n\t\t},\n\t} as any) as any;\n}\n${GENERATED_FOOTER}`;\n}\n\nexport function generateFlatFactoryCode(\n\tclientKeys: string[],\n\tsharedKeys: string[],\n\tisStandard?: boolean,\n): string {\n\tconst runtimeEnvLines = generateRuntimeEnvLines(clientKeys, sharedKeys);\n\tconst importPath = isStandard ? \"@arkenv/nextjs/standard\" : \"@arkenv/nextjs\";\n\tconst coreName = \"arkenv\";\n\tconst typeImport = isStandard\n\t\t? \"\"\n\t\t: '\\nimport type { type as at, distill } from \"arktype\";';\n\tconst returnType = isStandard\n\t\t? \"Readonly<TSchema>\"\n\t\t: \"Readonly<distill.Out<at.infer<TSchema>>>\";\n\tconst castReturn = isStandard\n\t\t? \"\"\n\t\t: \" as unknown as Readonly<distill.Out<at.infer<TSchema>>>\";\n\tconst callPrefix = \"coreArkenv\";\n\n\treturn `${GENERATED_HEADER}\nimport { ${coreName} as coreArkenv } from \"${importPath}\";${typeImport}\n\nexport function arkenv<\n\tconst TSchema extends Record<string, unknown> & { runtimeEnv?: never } = {},\n\tconst TExpose extends keyof TSchema = never,\n\tconst TExtends extends readonly unknown[] = [],\n>(\n\tschema: TSchema,\n\toptions?: {\n\t\t/**\n\t\t * Custom environment variables to expose to the client bundle.\n\t\t * By default, variables prefixed with \\`NEXT_PUBLIC_\\` and \\`NODE_ENV\\` are exposed automatically.\n\t\t * Use this option to expose custom variables that do not have the \\`NEXT_PUBLIC_\\` prefix.\n\t\t */\n\t\texposeToClient?: readonly TExpose[];\n\t\textends?: [...TExtends];\n\t},\n): ${returnType} {\n\tconst env = ${callPrefix}(schema as any, {\n\t\t...options,\n\t\truntimeEnv: {\n\t\t\t${runtimeEnvLines}\n\t\t},\n\t} as any);\n\treturn env${castReturn};\n}\n${GENERATED_FOOTER}`;\n}\n\n/**\n * Ambient module declaration so `#arkenv/client-env` resolves to the project's\n * `env/client.ts` for `AutoClientEnv` type inference on `@arkenv/nextjs/server`.\n *\n * @returns Generated `.d.ts` source\n */\nexport function generateClientEnvAmbientDeclaration(): string {\n\treturn `${GENERATED_HEADER}\ndeclare module \"#arkenv/client-env\" {\n\texport { env } from \"../client\";\n}\n`;\n}\n\nexport function generateClientFactoryCode(\n\tclientKeys: string[],\n\tsharedKeys: string[],\n\tisStandard?: boolean,\n): string {\n\tconst runtimeEnvLines = generateRuntimeEnvLines(clientKeys, sharedKeys);\n\tconst importPath = isStandard\n\t\t? \"@arkenv/nextjs/standard/client\"\n\t\t: \"@arkenv/nextjs/client\";\n\tconst coreName = \"arkenv\";\n\tconst typeImport = isStandard\n\t\t? \"\"\n\t\t: '\\nimport type { Infer } from \"@arkenv/core\";';\n\tconst callPrefix = \"coreArkenv\";\n\tconst returnType = isStandard\n\t\t? \"Readonly<TSchema & MergeExtends<TExtends>>\"\n\t\t: \"Readonly<Infer<TSchema> & MergeExtends<TExtends>>\";\n\n\treturn `${GENERATED_HEADER}\nimport { ${coreName} as coreArkenv } from \"${importPath}\";${typeImport}\n\ntype ResolveExtend<T> = [Infer<T>] extends [never] ? T : Infer<T>;\n\ntype UnionToIntersection<U> = (\n\tU extends any ? (k: U) => void : never\n) extends (k: infer I) => void\n\t? I\n\t: never;\n\ntype MergeExtends<TExtends extends readonly unknown[] | undefined> =\n\tTExtends extends readonly unknown[]\n\t\t? UnionToIntersection<ResolveExtend<TExtends[number]>>\n\t\t: {};\n\nexport function arkenv<\n\tconst TSchema extends Record<string, any> = {},\n\tconst TExtends extends readonly unknown[] = [],\n>(\n\tschema: TSchema & {\n\t\t[K in keyof TSchema]: K extends \\`NEXT_PUBLIC_\\${string}\\` ? unknown : never;\n\t},\n\toptions?: {\n\t\textends?: [...TExtends];\n\t},\n): ${returnType} {\n\treturn ${callPrefix}(schema as any, {\n\t\t...options,\n\t\truntimeEnv: {\n\t\t\t${runtimeEnvLines}\n\t\t},\n\t} as any);\n}\n${GENERATED_FOOTER}`;\n}\n","import type { BuildLogHelpers } from \"@repo/log\";\nimport type { ArkEnvConfigOptions } from \"./types\";\n\nlet hasWarnedSimpleLayout = false;\n\nexport function normalizeLayout(\n\tlayout: ArkEnvConfigOptions[\"layout\"],\n\tbuildLog: BuildLogHelpers,\n): \"simple\" | \"strict\" | undefined {\n\tif (layout === \"flat\") return \"simple\";\n\tif (layout !== \"simple\") return layout;\n\n\tconst isDev = process.env.NODE_ENV === \"development\";\n\tif (!isDev || hasWarnedSimpleLayout) return \"simple\";\n\n\thasWarnedSimpleLayout = true;\n\tbuildLog.logBuildWarning(\n\t\t\"The 'simple' layout option is deprecated and will be removed in the next major version. Use 'flat' instead.\",\n\t);\n\treturn \"simple\";\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n\textractClientKeys,\n\textractSharedKeys,\n\tresolveLayout,\n} from \"@arkenv/build\";\nimport { resolveBuildLog } from \"@repo/log\";\nimport { extractKeys } from \"./extract\";\nimport {\n\tgenerateClientEnvAmbientDeclaration,\n\tgenerateClientFactoryCode,\n\tgenerateFactoryCode,\n\tgenerateFlatFactoryCode,\n} from \"./generate\";\nimport { normalizeLayout } from \"./layout\";\nimport type { ArkEnvConfigOptions } from \"./types\";\n\nfunction detectStandard(content: string, forceStandard?: boolean): boolean {\n\tif (forceStandard) return true;\n\treturn (\n\t\tcontent.includes(\"@arkenv/standard\") || content.includes(\"arkenv/standard\")\n\t);\n}\n\n/**\n * Run code generation to read the schema file and generate the env.gen.ts factory.\n *\n * @param schemaPath The absolute path to the schema file or directory\n * @param outputPath The absolute path to the generated output file\n * @param layoutOption The explicit layout to use; auto-detected from the filesystem when omitted\n * @param forceStandard Force standard mode code generation\n * @throws An error if strict layout files are missing when `layoutOption` is `\"strict\"`\n */\nexport function runCodegen(\n\tschemaPath: string,\n\toutputPath: string,\n\tlayoutOption?: ArkEnvConfigOptions[\"layout\"],\n\tforceStandard?: boolean,\n\tlogOptions?: Pick<ArkEnvConfigOptions, \"logger\" | \"logLevel\">,\n) {\n\tconst normalizedLayout = normalizeLayout(\n\t\tlayoutOption,\n\t\tresolveBuildLog(logOptions),\n\t);\n\n\tconst { layout: resolvedLayout, baseDir } = resolveLayout(\n\t\tschemaPath,\n\t\tnormalizedLayout,\n\t);\n\n\tlet generatedCode = \"\";\n\tif (resolvedLayout === \"strict\") {\n\t\tconst clientPath = path.join(baseDir, \"client.ts\");\n\t\tconst sharedPath = path.join(baseDir, \"internal\", \"shared.ts\");\n\n\t\tconst clientContent = fs.existsSync(clientPath)\n\t\t\t? fs.readFileSync(clientPath, \"utf-8\")\n\t\t\t: \"\";\n\t\tconst sharedContent = fs.existsSync(sharedPath)\n\t\t\t? fs.readFileSync(sharedPath, \"utf-8\")\n\t\t\t: \"\";\n\n\t\tconst isStandard =\n\t\t\tdetectStandard(clientContent, forceStandard) ||\n\t\t\tdetectStandard(sharedContent, forceStandard);\n\n\t\tconst clientKeys = extractClientKeys(clientContent);\n\t\tconst sharedKeys = extractSharedKeys(sharedContent);\n\n\t\tgeneratedCode = generateClientFactoryCode(\n\t\t\tclientKeys,\n\t\t\tsharedKeys,\n\t\t\tisStandard,\n\t\t);\n\t} else {\n\t\tconst fileContent = fs.readFileSync(schemaPath, \"utf-8\");\n\t\tconst isStandard = detectStandard(fileContent, forceStandard);\n\n\t\tconst { clientKeys, sharedKeys, isLegacy } = extractKeys(fileContent);\n\t\tif (isLegacy) {\n\t\t\tgeneratedCode = generateFactoryCode(clientKeys, sharedKeys, isStandard);\n\t\t} else {\n\t\t\tgeneratedCode = generateFlatFactoryCode(\n\t\t\t\tclientKeys,\n\t\t\t\tsharedKeys,\n\t\t\t\tisStandard,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst outputDir = path.dirname(outputPath);\n\tif (!fs.existsSync(outputDir)) {\n\t\tfs.mkdirSync(outputDir, { recursive: true });\n\t}\n\n\tlet shouldWrite = true;\n\tif (fs.existsSync(outputPath)) {\n\t\tconst existingContent = fs.readFileSync(outputPath, \"utf-8\");\n\t\tif (existingContent === generatedCode) {\n\t\t\tshouldWrite = false;\n\t\t}\n\t}\n\n\tif (shouldWrite) {\n\t\tfs.writeFileSync(outputPath, generatedCode, \"utf-8\");\n\t}\n\n\tif (resolvedLayout === \"strict\" && baseDir) {\n\t\tconst ambientPath = path.join(\n\t\t\tpath.dirname(outputPath),\n\t\t\t\"arkenv-client-env.d.ts\",\n\t\t);\n\t\tconst ambientCode = generateClientEnvAmbientDeclaration();\n\t\tlet shouldWriteAmbient = true;\n\t\tif (fs.existsSync(ambientPath)) {\n\t\t\tif (fs.readFileSync(ambientPath, \"utf-8\") === ambientCode) {\n\t\t\t\tshouldWriteAmbient = false;\n\t\t\t}\n\t\t}\n\t\tif (shouldWriteAmbient) {\n\t\t\tfs.writeFileSync(ambientPath, ambientCode, \"utf-8\");\n\t\t}\n\t}\n}\n","import path from \"node:path\";\nimport type { CLIENT_ENV_SPECIFIER } from \"../strict-client-env\";\n\ntype WebpackConfigLike = {\n\tresolve?: {\n\t\talias?:\n\t\t\t| Record<string, string | false | string[]>\n\t\t\t| Array<{ name: string; alias: string | false | string[] }>;\n\t};\n\tplugins?: unknown[];\n};\n\ntype WebpackLike = {\n\tDefinePlugin: new (definitions: Record<string, string>) => unknown;\n};\n\ntype WebpackContextLike = {\n\twebpack?: WebpackLike;\n};\n\ntype TurbopackResolveAlias = Record<string, string | string[]>;\n\ntype NextConfigLike = {\n\twebpack?: (\n\t\tconfig: WebpackConfigLike,\n\t\tcontext: WebpackContextLike,\n\t) => WebpackConfigLike | undefined;\n\tturbopack?: {\n\t\tresolveAlias?: TurbopackResolveAlias;\n\t\t[key: string]: unknown;\n\t};\n\texperimental?: {\n\t\tturbo?: {\n\t\t\tresolveAlias?: TurbopackResolveAlias;\n\t\t\t[key: string]: unknown;\n\t\t};\n\t\t[key: string]: unknown;\n\t};\n\tenv?: Record<string, string | undefined>;\n\t[key: string]: unknown;\n};\n\n/**\n * Merge `#arkenv/client-env` into a webpack `resolve.alias` value (object or array form).\n *\n * @param alias Existing webpack resolve.alias\n * @param specifier Virtual module specifier\n * @param target Absolute path to the project client env module\n * @returns Updated alias value\n */\nfunction mergeWebpackAlias(\n\talias:\n\t\t| Record<string, string | false | string[]>\n\t\t| Array<{ name: string; alias: string | false | string[] }>\n\t\t| undefined,\n\tspecifier: string,\n\ttarget: string,\n):\n\t| Record<string, string | false | string[]>\n\t| Array<{ name: string; alias: string | false | string[] }> {\n\tif (Array.isArray(alias)) {\n\t\tconst next = alias.filter((entry) => entry.name !== specifier);\n\t\tnext.push({ name: specifier, alias: target });\n\t\treturn next;\n\t}\n\treturn {\n\t\t...(alias ?? {}),\n\t\t[specifier]: target,\n\t};\n}\n\n/**\n * Apply webpack + Turbopack aliases and a compile-time strict-layout flag.\n *\n * Chains any existing `webpack` function on the user config. Turbopack aliases\n * are written to both `turbopack.resolveAlias` (Next 15+) and\n * `experimental.turbo.resolveAlias` for older configs.\n *\n * @param nextConfig User Next.js config object\n * @param clientEnvPath Absolute path to `env/client.ts`\n * @param specifier Virtual module specifier (typically `#arkenv/client-env`)\n * @returns Next config with strict-layout alias wiring\n */\nexport function applyStrictLayoutAliases<T extends NextConfigLike>(\n\tnextConfig: T,\n\tclientEnvPath: string,\n\tspecifier: typeof CLIENT_ENV_SPECIFIER | string = \"#arkenv/client-env\",\n): T {\n\tconst previousWebpack = nextConfig.webpack;\n\n\tconst webpack = (config: WebpackConfigLike, context: WebpackContextLike) => {\n\t\tconst resolved = previousWebpack\n\t\t\t? (previousWebpack(config, context) ?? config)\n\t\t\t: config;\n\t\tresolved.resolve = resolved.resolve ?? {};\n\t\tresolved.resolve.alias = mergeWebpackAlias(\n\t\t\tresolved.resolve.alias,\n\t\t\tspecifier,\n\t\t\tclientEnvPath,\n\t\t);\n\n\t\tconst DefinePlugin = context.webpack?.DefinePlugin;\n\t\tif (DefinePlugin) {\n\t\t\tresolved.plugins = resolved.plugins ?? [];\n\t\t\tresolved.plugins.push(\n\t\t\t\tnew DefinePlugin({\n\t\t\t\t\t__ARKENV_STRICT_LAYOUT__: JSON.stringify(true),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn resolved;\n\t};\n\n\tconst turbopackTarget = path.isAbsolute(clientEnvPath)\n\t\t? `./${path.relative(process.cwd(), clientEnvPath).replace(/\\\\/g, \"/\")}`\n\t\t: clientEnvPath.startsWith(\".\")\n\t\t\t? clientEnvPath\n\t\t\t: `./${clientEnvPath}`;\n\n\tconst existingTurbopack = nextConfig.turbopack ?? {};\n\tconst turbopackResolveAlias: TurbopackResolveAlias = {\n\t\t...(existingTurbopack.resolveAlias ?? {}),\n\t\t[specifier]: turbopackTarget,\n\t};\n\n\tconst existingExperimental = nextConfig.experimental;\n\tconst experimental = existingExperimental\n\t\t? {\n\t\t\t\t...existingExperimental,\n\t\t\t\t...(existingExperimental.turbo\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tturbo: {\n\t\t\t\t\t\t\t\t...existingExperimental.turbo,\n\t\t\t\t\t\t\t\tresolveAlias: {\n\t\t\t\t\t\t\t\t\t...(existingExperimental.turbo.resolveAlias ?? {}),\n\t\t\t\t\t\t\t\t\t[specifier]: turbopackTarget,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t}\n\t\t: undefined;\n\n\t// NOTE: `nextConfig` is spread as a plain object below. Only the object-form\n\t// of `next.config` is supported here — a callable/function-form config would\n\t// lose its call signature when spread, silently dropping any phase-dependent\n\t// logic. Callers are responsible for dereferencing a callable config before\n\t// passing it to this function. Full callable-form support is tracked separately.\n\tconst result: Record<string, unknown> = {\n\t\t...nextConfig,\n\t\twebpack,\n\t\t// Turbopack / non-webpack paths: surface the flag via Next env inlining.\n\t\t// Note: Next.js forbids keys with __ prefix in nextConfig.env, so we use\n\t\t// ARKENV_STRICT_LAYOUT (no underscores) here. The webpack DefinePlugin\n\t\t// path uses __ARKENV_STRICT_LAYOUT__ as a compile-time literal, which is fine.\n\t\tenv: {\n\t\t\t...(nextConfig.env ?? {}),\n\t\t\tARKENV_STRICT_LAYOUT: \"true\",\n\t\t},\n\t\tturbopack: {\n\t\t\t...existingTurbopack,\n\t\t\tresolveAlias: turbopackResolveAlias,\n\t\t},\n\t};\n\n\tif (experimental) {\n\t\tresult.experimental = experimental;\n\t}\n\n\treturn result as T;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n\tfindSchemaPath,\n\tformatMissingSchemaError,\n\tresolveLayout,\n\twatchSchema,\n} from \"@arkenv/build\";\nimport {\n\tformatBuildError,\n\tresolveBuildLog,\n\tresolveLoggerFromOptions,\n} from \"@repo/log\";\nimport { createJiti } from \"jiti\";\nimport {\n\tCLIENT_ENV_SPECIFIER,\n\tmissingClientTsError,\n} from \"../strict-client-env\";\nimport { runCodegen } from \"./codegen\";\nimport { normalizeLayout } from \"./layout\";\nimport { applyStrictLayoutAliases } from \"./strict-layout-aliases\";\nimport type { ArkEnvConfigOptions } from \"./types\";\n\nfunction resolveMockServerOnlyPath(moduleDir: string): string {\n\tfor (const base of [moduleDir, path.join(moduleDir, \"..\")]) {\n\t\tconst tsPath = path.join(base, \"mock-server-only.ts\");\n\t\tif (fs.existsSync(tsPath)) {\n\t\t\treturn tsPath;\n\t\t}\n\t\tconst jsPath = path.join(base, \"mock-server-only.js\");\n\t\tif (fs.existsSync(jsPath)) {\n\t\t\treturn jsPath;\n\t\t}\n\t}\n\n\treturn path.join(moduleDir, \"mock-server-only.js\");\n}\n\nfunction resolveEmptyClientEnvPath(moduleDir: string): string {\n\tfor (const base of [moduleDir, path.join(moduleDir, \"..\")]) {\n\t\tconst tsPath = path.join(base, \"empty-client-env.ts\");\n\t\tif (fs.existsSync(tsPath)) {\n\t\t\treturn tsPath;\n\t\t}\n\t\tconst jsPath = path.join(base, \"empty-client-env.js\");\n\t\tif (fs.existsSync(jsPath)) {\n\t\t\treturn jsPath;\n\t\t}\n\t}\n\n\treturn path.join(moduleDir, \"empty-client-env.js\");\n}\n\nfunction schemaPathExists(schemaPath: string): boolean {\n\tif (fs.existsSync(schemaPath)) return true;\n\n\tconst ext = path.extname(schemaPath);\n\tif (!ext) return false;\n\n\tconst baseWithoutExt = schemaPath.slice(0, -ext.length);\n\treturn fs.existsSync(baseWithoutExt);\n}\n\ntype SetupResult = {\n\tresolvedLayout: \"flat\" | \"strict\" | \"simple\";\n\tbaseDir: string | undefined;\n\tclientEnvPath: string | undefined;\n};\n\n/**\n * Run ArkEnv codegen and setup without wrapping nextConfig.\n *\n * @param options Optional configuration paths for schema and output files\n * @param internalOptions Optional configuration for internal testing hooks\n * @returns Resolved layout paths used by `withArkEnv` for alias registration\n * @throws An error if the schema file cannot be found or if code generation fails\n */\nexport function setupArkEnv(\n\toptions?: ArkEnvConfigOptions,\n\tinternalOptions?: { _jitiAliases?: Record<string, string> },\n): SetupResult {\n\tconst buildLog = resolveBuildLog(options);\n\n\tconst schemaPath = options?.schemaPath\n\t\t? path.resolve(options.schemaPath)\n\t\t: findSchemaPath();\n\n\tif (!schemaPath || !schemaPathExists(schemaPath)) {\n\t\tthrow new Error(\n\t\t\tformatMissingSchemaError({\n\t\t\t\tschemaPath: options?.schemaPath,\n\t\t\t\toptionsHint: \"setupArkEnv options\",\n\t\t\t}),\n\t\t);\n\t}\n\n\tconst normalizedLayout = normalizeLayout(options?.layout, buildLog);\n\n\tconst { layout: resolvedLayout, baseDir } = resolveLayout(\n\t\tschemaPath,\n\t\tnormalizedLayout,\n\t);\n\n\tconst clientEnvPath =\n\t\tresolvedLayout === \"strict\" && baseDir\n\t\t\t? path.join(baseDir, \"client.ts\")\n\t\t\t: undefined;\n\n\tif (clientEnvPath && !fs.existsSync(clientEnvPath)) {\n\t\tthrow new Error(missingClientTsError(clientEnvPath, baseDir!));\n\t}\n\n\tconst defaultOutputDir =\n\t\tresolvedLayout === \"strict\" && baseDir ? baseDir : path.dirname(schemaPath);\n\tconst defaultOutputPath = path.join(\n\t\tdefaultOutputDir,\n\t\t\"generated\",\n\t\t\"env.gen.ts\",\n\t);\n\tconst outputPath = options?.outputPath\n\t\t? path.resolve(options.outputPath)\n\t\t: defaultOutputPath;\n\n\tconst codegen = options?.codegen ?? true;\n\tif (codegen) {\n\t\ttry {\n\t\t\trunCodegen(\n\t\t\t\tschemaPath,\n\t\t\t\toutputPath,\n\t\t\t\tresolvedLayout,\n\t\t\t\toptions?.standard,\n\t\t\t\toptions,\n\t\t\t);\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new Error(\n\t\t\t\tformatBuildError(`Failed to generate env.gen.ts: ${message}`),\n\t\t\t);\n\t\t}\n\t}\n\n\tconst runValidation = options?.validate ?? true;\n\tif (runValidation) {\n\t\tconst g = globalThis as {\n\t\t\t__arkenv_force_server__?: boolean;\n\t\t\t__ARKENV_STRICT_LAYOUT__?: boolean;\n\t\t\t__ARKENV_CLIENT_ENV__?: unknown;\n\t\t};\n\t\ttry {\n\t\t\tg.__arkenv_force_server__ = true;\n\t\t\tconst fileToEvaluate =\n\t\t\t\tresolvedLayout === \"strict\" && baseDir\n\t\t\t\t\t? path.join(baseDir, \"server.ts\")\n\t\t\t\t\t: schemaPath;\n\n\t\t\tconst filenameForJiti =\n\t\t\t\ttypeof __filename !== \"undefined\"\n\t\t\t\t\t? __filename\n\t\t\t\t\t: typeof import.meta !== \"undefined\" && import.meta.url\n\t\t\t\t\t\t? fileURLToPath(import.meta.url)\n\t\t\t\t\t\t: \"\";\n\t\t\tconst dir = path.dirname(filenameForJiti);\n\t\t\tconst mockServerOnlyPath = resolveMockServerOnlyPath(dir);\n\t\t\tconst emptyClientEnvPath = resolveEmptyClientEnvPath(dir);\n\n\t\t\tconst aliases: Record<string, string> = {\n\t\t\t\t\"server-only\": mockServerOnlyPath,\n\t\t\t\t\"./script\": mockServerOnlyPath,\n\t\t\t\t\"./script.tsx\": mockServerOnlyPath,\n\t\t\t\t[CLIENT_ENV_SPECIFIER]:\n\t\t\t\t\tclientEnvPath && fs.existsSync(clientEnvPath)\n\t\t\t\t\t\t? clientEnvPath\n\t\t\t\t\t\t: emptyClientEnvPath,\n\t\t\t\t...internalOptions?._jitiAliases,\n\t\t\t};\n\n\t\t\tconst jiti = createJiti(fileToEvaluate, {\n\t\t\t\tmoduleCache: false,\n\t\t\t\tfsCache: false,\n\t\t\t\ttsconfigPaths: true,\n\t\t\t\talias: aliases,\n\t\t\t});\n\n\t\t\tif (resolvedLayout === \"strict\" && clientEnvPath) {\n\t\t\t\tg.__ARKENV_STRICT_LAYOUT__ = true;\n\t\t\t\tconst clientMod = jiti(clientEnvPath) as {\n\t\t\t\t\tenv?: unknown;\n\t\t\t\t\tdefault?: { env?: unknown };\n\t\t\t\t};\n\t\t\t\tg.__ARKENV_CLIENT_ENV__ =\n\t\t\t\t\tclientMod.env ?? clientMod.default?.env ?? clientMod;\n\t\t\t}\n\n\t\t\tjiti(fileToEvaluate);\n\t\t} catch (error: unknown) {\n\t\t\tbuildLog.logBuildError(\"Environment validation failed:\");\n\t\t\tbuildLog.logBuildErrorDetail(\n\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t);\n\t\t\tbuildLog.logBuildErrorBlankLine();\n\t\t\tprocess.exit(1);\n\t\t} finally {\n\t\t\tdelete g.__arkenv_force_server__;\n\t\t\tdelete g.__ARKENV_STRICT_LAYOUT__;\n\t\t\tdelete g.__ARKENV_CLIENT_ENV__;\n\t\t}\n\t}\n\n\tconst isDev =\n\t\tprocess.env.NODE_ENV === \"development\" ||\n\t\tprocess.env.NEXT_PHASE === \"phase-development-server\";\n\tif (isDev && codegen) {\n\t\tconst watchPaths =\n\t\t\tresolvedLayout === \"strict\" && baseDir\n\t\t\t\t? [\n\t\t\t\t\t\tpath.join(baseDir, \"internal\", \"shared.ts\"),\n\t\t\t\t\t\tpath.join(baseDir, \"client.ts\"),\n\t\t\t\t\t\tpath.join(baseDir, \"server.ts\"),\n\t\t\t\t\t].filter(fs.existsSync)\n\t\t\t\t: [schemaPath];\n\t\twatchSchema(\n\t\t\twatchPaths,\n\t\t\t() => {\n\t\t\t\trunCodegen(\n\t\t\t\t\tschemaPath,\n\t\t\t\t\toutputPath,\n\t\t\t\t\tresolvedLayout,\n\t\t\t\t\toptions?.standard,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t\tresolveLoggerFromOptions(options),\n\t\t);\n\t}\n\n\treturn {\n\t\tresolvedLayout,\n\t\tbaseDir,\n\t\tclientEnvPath,\n\t};\n}\n\n/**\n * Wrap a Next.js configuration object to automatically generate the `runtimeEnv`\n * block in `env.gen.ts` and, in strict layout, register the `#arkenv/client-env`\n * alias so `@arkenv/nextjs/server` can auto-extend the client env.\n *\n * @param nextConfig The Next.js configuration object (object-form only; function-form configs are not yet supported — see follow-up issue)\n * @param options Optional configuration paths for schema and output files\n * @returns The Next.js configuration object (with strict-layout aliases when applicable)\n * @throws An error if the schema file cannot be found or if code generation fails\n */\nexport function withArkEnv<T>(nextConfig: T, options?: ArkEnvConfigOptions): T {\n\tconst { resolvedLayout, clientEnvPath } = setupArkEnv(options);\n\n\tif (resolvedLayout === \"strict\" && clientEnvPath) {\n\t\treturn applyStrictLayoutAliases(\n\t\t\tnextConfig as Record<string, unknown>,\n\t\t\tclientEnvPath,\n\t\t\tCLIENT_ENV_SPECIFIER,\n\t\t) as T;\n\t}\n\n\treturn nextConfig;\n}\n"],"mappings":"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"}
|