@arkenv/nextjs 1.0.0-alpha.12 → 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 CHANGED
@@ -14,7 +14,9 @@ For Zod, Valibot, or other Standard Schema validators **without** ArkType, insta
14
14
 
15
15
  Next.js requires client-side environment variables to be statically destructured (`process.env.NEXT_PUBLIC_...`) to allow static inlining during bundling.
16
16
 
17
- To automate this, `@arkenv/nextjs/config` provides `withArkEnv`, which statically extracts your keys and writes a tailored factory in `generated/env.gen.ts`.
17
+ To automate this, `@arkenv/nextjs/config` provides `withArkEnv`, which statically extracts your keys and writes a tailored factory in `.arkenv/env.gen.ts`. Import that factory as `@/.arkenv`. The wrapper registers Turbopack and Webpack aliases so you never import from the dot-folder directly.
18
+
19
+ Add `.arkenv/` to `.gitignore`. `withArkEnv` regenerates the factory when Next.js loads your config (dev and build). `arkenv init` also writes the factory once and maps `@/.arkenv` in `tsconfig.json` so `tsc --noEmit` works after install.
18
20
 
19
21
  ### 1. Configure `next.config.ts`
20
22
 
@@ -43,33 +45,24 @@ export default withArkEnv(async (phase, { defaultConfig }) => ({
43
45
 
44
46
  ### 2. Define your schema in `env.ts`
45
47
 
46
- Import `arkenv` from the generated `./generated/env.gen` file instead of the package:
48
+ Import `arkenv` from `@/.arkenv` instead of the package:
47
49
 
48
50
  ```typescript
49
51
  // src/env.ts
50
- import arkenv from "./generated/env.gen";
52
+ import arkenv from "@/.arkenv";
51
53
 
52
54
  export const env = arkenv({
53
- server: {
54
- DATABASE_URL: "string",
55
- STRIPE_API_KEY: "string",
56
- },
57
- client: {
58
- NEXT_PUBLIC_API_URL: "string.host",
59
- },
60
- shared: {
61
- NODE_ENV: "string",
62
- },
55
+ DATABASE_URL: "string",
56
+ NEXT_PUBLIC_API_URL: "string.host",
57
+ NODE_ENV: "string",
63
58
  });
64
59
  ```
65
60
 
66
- *Note: For the best DX and CI/CD compatibility, we recommend committing `generated/env.gen.ts` to source control.*
67
-
68
61
  ---
69
62
 
70
63
  ## Customizing Paths
71
64
 
72
- If you want to keep generated files in a separate subdirectory (like `src/generated/`), you can specify the `schemaPath` and `outputPath` options in `next.config.ts`:
65
+ If you need a different on-disk location, pass `outputPath`. Keep importing `@/.arkenv`. `withArkEnv` aliases the specifier for Next.js; codegen writes `.arkenv/index.ts` so `tsc --noEmit` follows the same import.
73
66
 
74
67
  ```typescript
75
68
  // next.config.ts
@@ -86,19 +79,6 @@ export default withArkEnv(nextConfig, {
86
79
  });
87
80
  ```
88
81
 
89
- Then, import from the custom location:
90
-
91
- ```typescript
92
- // src/env.ts
93
- import arkenv from "./generated/env.gen";
94
-
95
- export const env = arkenv({
96
- client: {
97
- NEXT_PUBLIC_API_URL: "string",
98
- }
99
- });
100
- ```
101
-
102
82
  ---
103
83
 
104
84
  ## The Danger of Shared Variables
package/dist/client.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`./config-Oq8dsEPM.cjs`);const e=require(`./arkenv-internal-QxkUlA5J.cjs`);let t=require(`@arkenv/core`);function n(n,r){if(n&&typeof n==`object`&&(`runtimeEnv`in n||`client`in n||`shared`in n)){if(`server`in n)throw Error(`client entry point only accepts 'client' and 'shared' schemas.`);return e.t(n,!1,void 0,t.arkenv,t.getSchemaKeys)}return e.t(n,r,{isServer:!1,strictLayout:`client`},t.arkenv,t.getSchemaKeys)}exports.arkenv=n,exports.default=n;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`./config-DNiuFUxj.cjs`);const e=require(`./arkenv-internal-QxkUlA5J.cjs`);let t=require(`@arkenv/core`);function n(n,r){if(n&&typeof n==`object`&&(`runtimeEnv`in n||`client`in n||`shared`in n)){if(`server`in n)throw Error(`client entry point only accepts 'client' and 'shared' schemas.`);return e.t(n,!1,void 0,t.arkenv,t.getSchemaKeys)}return e.t(n,r,{isServer:!1,strictLayout:`client`},t.arkenv,t.getSchemaKeys)}exports.arkenv=n,exports.default=n;
2
2
  //# sourceMappingURL=client.cjs.map
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../config-Oq8dsEPM.cjs`);let t=require(`@arkenv/build`);exports.extractClientKeys=t.extractClientKeys,exports.extractKeys=e.i,exports.extractSharedKeys=t.extractSharedKeys,exports.runCodegen=e.r,exports.setupArkEnv=e.t,exports.withArkEnv=e.n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../config-DNiuFUxj.cjs`);let t=require(`@arkenv/build`);exports.extractClientKeys=t.extractClientKeys,exports.extractKeys=e.i,exports.extractSharedKeys=t.extractSharedKeys,exports.runCodegen=e.r,exports.setupArkEnv=e.t,exports.withArkEnv=e.n;
@@ -1,2 +1,2 @@
1
- import { a as extractKeys, c as NextConfigContext, i as withArkEnv, l as NextConfigFactory, n as extractSharedKeys, o as runCodegen, r as setupArkEnv, s as ArkEnvConfigOptions, t as extractClientKeys } from "../index-RdYGBD_V.cjs";
1
+ import { a as extractKeys, c as NextConfigContext, i as withArkEnv, l as NextConfigFactory, n as extractSharedKeys, o as runCodegen, r as setupArkEnv, s as ArkEnvConfigOptions, t as extractClientKeys } from "../index-BIewRgpQ.cjs";
2
2
  export { ArkEnvConfigOptions, NextConfigContext, NextConfigFactory, extractClientKeys, extractKeys, extractSharedKeys, runCodegen, setupArkEnv, withArkEnv };
@@ -1,2 +1,2 @@
1
- import { a as extractKeys, c as NextConfigContext, i as withArkEnv, l as NextConfigFactory, n as extractSharedKeys, o as runCodegen, r as setupArkEnv, s as ArkEnvConfigOptions, t as extractClientKeys } from "../index-CBjJM83X.js";
1
+ import { a as extractKeys, c as NextConfigContext, i as withArkEnv, l as NextConfigFactory, n as extractSharedKeys, o as runCodegen, r as setupArkEnv, s as ArkEnvConfigOptions, t as extractClientKeys } from "../index-U5bfcjNW.js";
2
2
  export { ArkEnvConfigOptions, NextConfigContext, NextConfigFactory, extractClientKeys, extractKeys, extractSharedKeys, runCodegen, setupArkEnv, withArkEnv };
@@ -1 +1 @@
1
- import{a as e,i as t,n,o as r,r as i,t as a}from"../config-Deut5Vf8.js";export{a as extractClientKeys,r as extractKeys,n as extractSharedKeys,e as runCodegen,i as setupArkEnv,t as withArkEnv};
1
+ import{a as e,i as t,n,o as r,r as i,t as a}from"../config-B9BksrZQ.js";export{a as extractClientKeys,r as extractKeys,n as extractSharedKeys,e as runCodegen,i as setupArkEnv,t as withArkEnv};
@@ -93,7 +93,5 @@ export function arkenv<
93
93
  },
94
94
  } as any);
95
95
  }
96
- ${w}`}let k=!1;function A(e,t){return e===`flat`?`simple`:e===`simple`?process.env.NODE_ENV!==`development`||k?`simple`:(k=!0,t.logBuildWarning(`The 'simple' layout option is deprecated and will be removed in the next major version. Use 'flat' instead.`),`simple`):e}function j(e,t){return t?!0:e.includes(`@arkenv/standard`)||e.includes(`arkenv/standard`)}function M(t,n,r,i,a){let{layout:s,baseDir:l}=p(t,A(r,e(a))),u=``;if(s===`strict`){let e=g.join(l,`client.ts`),t=g.join(l,`internal`,`shared.ts`),n=h.existsSync(e)?h.readFileSync(e,`utf-8`):``,r=h.existsSync(t)?h.readFileSync(t,`utf-8`):``,a=j(n,i)||j(r,i);u=O(o(n),c(r),a)}else{let e=h.readFileSync(t,`utf-8`),n=j(e,i),{clientKeys:r,sharedKeys:a,isLegacy:o}=x(e);u=o?T(r,a,n):E(r,a,n)}let d=g.dirname(n);h.existsSync(d)||h.mkdirSync(d,{recursive:!0});let f=!0;h.existsSync(n)&&h.readFileSync(n,`utf-8`)===u&&(f=!1),f&&h.writeFileSync(n,u,`utf-8`);let m=g.join(d,`index.ts`),_=`export * from "./env.gen";
97
- export { default } from "./env.gen";
98
- `;if(g.basename(d)===`.arkenv`||!h.existsSync(m)){let e=!0;h.existsSync(m)&&h.readFileSync(m,`utf-8`)===_&&(e=!1),e&&h.writeFileSync(m,_,`utf-8`)}if(s===`strict`&&l){let e=g.join(g.dirname(n),`arkenv-client-env.d.ts`),t=D(g.join(l,`client.ts`),n),r=!0;h.existsSync(e)&&h.readFileSync(e,`utf-8`)===t&&(r=!1),r&&h.writeFileSync(e,t,`utf-8`)}}function N(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 P(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=N(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=g.isAbsolute(t)?`./${g.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 F(e){for(let t of[e,g.join(e,`..`)]){let e=g.join(t,`mock-server-only.ts`);if(h.existsSync(e))return e;let n=g.join(t,`mock-server-only.js`);if(h.existsSync(n))return n}return g.join(e,`mock-server-only.js`)}function I(e){for(let t of[e,g.join(e,`..`)]){let e=g.join(t,`empty-client-env.ts`);if(h.existsSync(e))return e;let n=g.join(t,`empty-client-env.js`);if(h.existsSync(n))return n}return g.join(e,`empty-client-env.js`)}function L(e){if(h.existsSync(e))return!0;let t=g.extname(e);if(!t)return!1;let n=e.slice(0,-t.length);return h.existsSync(n)}function R(a,o){let s=e(a),c=a?.schemaPath?g.resolve(a.schemaPath):u();if(!c||!L(c))throw Error(d({schemaPath:a?.schemaPath,optionsHint:`setupArkEnv options`}));let{layout:l,baseDir:f}=p(c,A(a?.layout,s)),y=l===`strict`&&f?g.join(f,`client.ts`):void 0;if(y&&!h.existsSync(y))throw Error(r(y,f));function b(e,t,n){if(n===`strict`&&t){let e=t;return g.basename(e)===`env`&&(e=g.dirname(e)),g.basename(e)===`src`&&(e=g.dirname(e)),e}let r=g.dirname(e);return g.basename(r)===`src`&&(r=g.dirname(r)),r}let x=b(c,f,l),S=g.join(x,`.arkenv`,`env.gen.ts`),C=a?.outputPath?g.resolve(a.outputPath):S,w=a?.codegen??!0;if(w)try{M(c,C,l,a?.standard,a)}catch(e){let n=e instanceof Error?e.message:String(e);throw Error(t(`Failed to generate env.gen.ts: ${n}`))}if(a?.validate??!0){let e=globalThis;try{e.__arkenv_force_server__=!0;let t=l===`strict`&&f?g.join(f,`server.ts`):c,n=typeof __filename<`u`?__filename:import.meta.url?_(import.meta.url):``,r=g.dirname(n),a=F(r),s=I(r),u=v(t,{moduleCache:!1,fsCache:!1,tsconfigPaths:!0,alias:{"server-only":a,"./script":a,"./script.tsx":a,[i]:y&&h.existsSync(y)?y:s,...o?._jitiAliases}});if(l===`strict`&&y){e.__ARKENV_STRICT_LAYOUT__=!0;let t=u(y);e.__ARKENV_CLIENT_ENV__=t.env??t.default?.env??t}u(t)}catch(e){s.logBuildError(`Environment validation failed:`),s.logBuildErrorDetail(e instanceof Error?e.message:String(e)),s.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`)&&w&&m(l===`strict`&&f?[g.join(f,`internal`,`shared.ts`),g.join(f,`client.ts`),g.join(f,`server.ts`)].filter(h.existsSync):[c],()=>{M(c,C,l,a?.standard,a)},n(a)),{resolvedLayout:l,baseDir:f,clientEnvPath:y,outputPath:C}}function z(e,t,n){let{resolvedLayout:r,clientEnvPath:a,outputPath:o}=n,s=e;r===`strict`&&a&&(s=P(s,a,i));let c=process.cwd(),l=o??(t?.outputPath?g.resolve(t.outputPath):g.join(c,`.arkenv`,`env.gen.ts`)),u=`./${g.relative(c,l).replace(/\\/g,`/`)}`,d={...s.turbopack,resolveAlias:{".arkenv/env.gen":u,".arkenv/env.gen.ts":u,".arkenv":u,".arkenv/index":u,".arkenv/index.ts":u,"#arkenv/env":u,"@/.arkenv":u,"@/.arkenv/env.gen":u,...s.turbopack?.resolveAlias}},f=s.webpack,p=(e,t)=>{let n=e;return n.resolve=n.resolve??{},n.resolve.alias={...n.resolve.alias,".arkenv/env.gen":l,".arkenv/env.gen.ts":l,".arkenv":l,".arkenv/index":l,".arkenv/index.ts":l,"#arkenv/env":l,"@/.arkenv":l,"@/.arkenv/env.gen":l},typeof f==`function`?f(n,t):n};return{...s,turbopack:d,webpack:p}}function B(e,t){return typeof e==`function`?async(n,r)=>{let i=R(t);return z(await e(n,r),t,i)}:e&&typeof e==`object`?z(e,t,R(t)):e}export{M as a,B as i,l as n,x as o,R as r,s as t};
99
- //# sourceMappingURL=config-Deut5Vf8.js.map
96
+ ${w}`}let k=!1;function A(e,t){return e===`flat`?`simple`:e===`simple`?process.env.NODE_ENV!==`development`||k?`simple`:(k=!0,t.logBuildWarning(`The 'simple' layout option is deprecated and will be removed in the next major version. Use 'flat' instead.`),`simple`):e}function j(e,t){return t?!0:e.includes(`@arkenv/standard`)||e.includes(`arkenv/standard`)}function M(e,t){let n=g.relative(e,t).replace(/\\/g,`/`);return n.startsWith(`.`)||(n=`./${n}`),n.replace(/\.tsx?$/,``)}function N(e,t){h.existsSync(e)||h.mkdirSync(e,{recursive:!0});let n=g.join(e,`index.ts`),r=M(e,t),i=`export * from ${JSON.stringify(r)};\nexport { default } from ${JSON.stringify(r)};\n`;h.existsSync(n)&&h.readFileSync(n,`utf-8`)===i||h.writeFileSync(n,i,`utf-8`)}function P(e){let t=g.dirname(e);if(g.basename(t)===`.arkenv`)return g.dirname(t)}function F(t,n,r,i,a,s){let{layout:l,baseDir:u}=p(t,A(r,e(a))),d=``;if(l===`strict`){let e=g.join(u,`client.ts`),t=g.join(u,`internal`,`shared.ts`),n=h.existsSync(e)?h.readFileSync(e,`utf-8`):``,r=h.existsSync(t)?h.readFileSync(t,`utf-8`):``,a=j(n,i)||j(r,i);d=O(o(n),c(r),a)}else{let e=h.readFileSync(t,`utf-8`),n=j(e,i),{clientKeys:r,sharedKeys:a,isLegacy:o}=x(e);d=o?T(r,a,n):E(r,a,n)}let f=g.dirname(n);h.existsSync(f)||h.mkdirSync(f,{recursive:!0});let m=!0;h.existsSync(n)&&h.readFileSync(n,`utf-8`)===d&&(m=!1),m&&h.writeFileSync(n,d,`utf-8`);let _=s??P(n);if(_&&N(g.join(_,`.arkenv`),n),l===`strict`&&u){let e=g.join(g.dirname(n),`arkenv-client-env.d.ts`),t=D(g.join(u,`client.ts`),n),r=!0;h.existsSync(e)&&h.readFileSync(e,`utf-8`)===t&&(r=!1),r&&h.writeFileSync(e,t,`utf-8`)}}function I(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 L(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=I(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=g.isAbsolute(t)?`./${g.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 R(e){for(let t of[e,g.join(e,`..`)]){let e=g.join(t,`mock-server-only.ts`);if(h.existsSync(e))return e;let n=g.join(t,`mock-server-only.js`);if(h.existsSync(n))return n}return g.join(e,`mock-server-only.js`)}function z(e){for(let t of[e,g.join(e,`..`)]){let e=g.join(t,`empty-client-env.ts`);if(h.existsSync(e))return e;let n=g.join(t,`empty-client-env.js`);if(h.existsSync(n))return n}return g.join(e,`empty-client-env.js`)}function B(e){if(h.existsSync(e))return!0;let t=g.extname(e);if(!t)return!1;let n=e.slice(0,-t.length);return h.existsSync(n)}function V(a,o){let s=e(a),c=a?.schemaPath?g.resolve(a.schemaPath):u();if(!c||!B(c))throw Error(d({schemaPath:a?.schemaPath,optionsHint:`setupArkEnv options`}));let{layout:l,baseDir:f}=p(c,A(a?.layout,s)),y=l===`strict`&&f?g.join(f,`client.ts`):void 0;if(y&&!h.existsSync(y))throw Error(r(y,f));function b(e,t,n){if(n===`strict`&&t){let e=t;return g.basename(e)===`env`&&(e=g.dirname(e)),g.basename(e)===`src`&&(e=g.dirname(e)),e}let r=g.dirname(e);return g.basename(r)===`src`&&(r=g.dirname(r)),r}let x=b(c,f,l),S=g.join(x,`.arkenv`,`env.gen.ts`),C=a?.outputPath?g.resolve(a.outputPath):S,w=a?.codegen??!0;if(w)try{F(c,C,l,a?.standard,a,x)}catch(e){let n=e instanceof Error?e.message:String(e);throw Error(t(`Failed to generate env.gen.ts: ${n}`))}if(a?.validate??!0){let e=globalThis;try{e.__arkenv_force_server__=!0;let t=l===`strict`&&f?g.join(f,`server.ts`):c,n=typeof __filename<`u`?__filename:import.meta.url?_(import.meta.url):``,r=g.dirname(n),a=R(r),s=z(r),u=v(t,{moduleCache:!1,fsCache:!1,tsconfigPaths:!0,alias:{"server-only":a,"./script":a,"./script.tsx":a,[i]:y&&h.existsSync(y)?y:s,...o?._jitiAliases}});if(l===`strict`&&y){e.__ARKENV_STRICT_LAYOUT__=!0;let t=u(y);e.__ARKENV_CLIENT_ENV__=t.env??t.default?.env??t}u(t)}catch(e){s.logBuildError(`Environment validation failed:`),s.logBuildErrorDetail(e instanceof Error?e.message:String(e)),s.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`)&&w&&m(l===`strict`&&f?[g.join(f,`internal`,`shared.ts`),g.join(f,`client.ts`),g.join(f,`server.ts`)].filter(h.existsSync):[c],()=>{F(c,C,l,a?.standard,a,x)},n(a)),{resolvedLayout:l,baseDir:f,clientEnvPath:y,outputPath:C}}function H(e,t,n){let{resolvedLayout:r,clientEnvPath:a,outputPath:o}=n,s=e;r===`strict`&&a&&(s=L(s,a,i));let c=process.cwd(),l=o??(t?.outputPath?g.resolve(t.outputPath):g.join(c,`.arkenv`,`env.gen.ts`)),u=`./${g.relative(c,l).replace(/\\/g,`/`)}`,d={...s.turbopack,resolveAlias:{".arkenv/env.gen":u,".arkenv/env.gen.ts":u,".arkenv":u,".arkenv/index":u,".arkenv/index.ts":u,"#arkenv/env":u,"@/.arkenv":u,"@/.arkenv/env.gen":u,...s.turbopack?.resolveAlias}},f=s.webpack,p=(e,t)=>{let n=e;return n.resolve=n.resolve??{},n.resolve.alias={...n.resolve.alias,".arkenv/env.gen":l,".arkenv/env.gen.ts":l,".arkenv":l,".arkenv/index":l,".arkenv/index.ts":l,"#arkenv/env":l,"@/.arkenv":l,"@/.arkenv/env.gen":l},typeof f==`function`?f(n,t):n};return{...s,turbopack:d,webpack:p}}function U(e,t){return typeof e==`function`?async(n,r)=>{let i=V(t);return H(await e(n,r),t,i)}:e&&typeof e==`object`?H(e,t,V(t)):e}export{F as a,U as i,l as n,x as o,V as r,s as t};
97
+ //# sourceMappingURL=config-B9BksrZQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-B9BksrZQ.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","import path from \"node:path\";\n\nfunction 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(\n\tclientPath?: string,\n\toutputPath?: string,\n): string {\n\tlet importTarget = \"../client\";\n\tif (clientPath && outputPath) {\n\t\tconst ambientDir = path.dirname(outputPath);\n\t\tconst rel = path.relative(ambientDir, clientPath).replace(/\\\\/g, \"/\");\n\t\tconst cleanRel = rel.replace(/\\.tsx?$/, \"\");\n\t\timportTarget = cleanRel.startsWith(\".\") ? cleanRel : `./${cleanRel}`;\n\t}\n\treturn `${GENERATED_HEADER}\ndeclare module \"#arkenv/client-env\" {\n\texport { env } from \"${importTarget}\";\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 * Convert a file path to a relative TypeScript module specifier from `fromDir`.\n *\n * @param fromDir Directory the import is written in\n * @param toFile Absolute path of the target module\n * @returns A relative specifier without a `.ts` / `.tsx` extension\n */\nfunction toModuleSpecifier(fromDir: string, toFile: string): string {\n\tlet rel = path.relative(fromDir, toFile).replace(/\\\\/g, \"/\");\n\tif (!rel.startsWith(\".\")) {\n\t\trel = `./${rel}`;\n\t}\n\treturn rel.replace(/\\.tsx?$/, \"\");\n}\n\n/**\n * Write `.arkenv/index.ts` so `tsc` can resolve `@/.arkenv` even when the\n * factory file lives at a custom `outputPath`.\n *\n * @param barrelDir Directory for the TypeScript entry (`<projectRoot>/.arkenv`)\n * @param factoryPath Absolute path of the generated factory file\n */\nfunction writeFactoryBarrel(barrelDir: string, factoryPath: string) {\n\tif (!fs.existsSync(barrelDir)) {\n\t\tfs.mkdirSync(barrelDir, { recursive: true });\n\t}\n\tconst barrelPath = path.join(barrelDir, \"index.ts\");\n\tconst spec = toModuleSpecifier(barrelDir, factoryPath);\n\tconst barrelCode = `export * from ${JSON.stringify(spec)};\\nexport { default } from ${JSON.stringify(spec)};\\n`;\n\tif (\n\t\tfs.existsSync(barrelPath) &&\n\t\tfs.readFileSync(barrelPath, \"utf-8\") === barrelCode\n\t) {\n\t\treturn;\n\t}\n\tfs.writeFileSync(barrelPath, barrelCode, \"utf-8\");\n}\n\n/**\n * Infer the app root from a factory path written into `<root>/.arkenv/`.\n *\n * @param outputPath Absolute path of the generated factory file\n * @returns The parent of `.arkenv`, or `undefined` when the file is elsewhere\n */\nfunction projectRootFromDefaultOutput(outputPath: string): string | undefined {\n\tconst outputDir = path.dirname(outputPath);\n\tif (path.basename(outputDir) !== \".arkenv\") return undefined;\n\treturn path.dirname(outputDir);\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 * @param logOptions Logger options forwarded to layout resolution\n * @param projectRoot App root used to keep `.arkenv/index.ts` as the `@/.arkenv` TypeScript entry\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\tprojectRoot?: string,\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\tconst tsEntryRoot = projectRoot ?? projectRootFromDefaultOutput(outputPath);\n\tif (tsEntryRoot) {\n\t\twriteFactoryBarrel(path.join(tsEntryRoot, \".arkenv\"), outputPath);\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 clientPath = path.join(baseDir, \"client.ts\");\n\t\tconst ambientCode = generateClientEnvAmbientDeclaration(\n\t\t\tclientPath,\n\t\t\toutputPath,\n\t\t);\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// Spread as a plain object. Callers must pass a resolved config object —\n\t// `withArkEnv` awaits function-form `next.config` before calling this.\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 {\n\tArkEnvConfigOptions,\n\tNextConfigContext,\n\tNextConfigFactory,\n} 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\toutputPath: string;\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\tfunction resolveProjectRoot(\n\t\tschema: string,\n\t\tbase?: string,\n\t\tlayout?: string,\n\t): string {\n\t\tif (layout === \"strict\" && base) {\n\t\t\tlet dir = base;\n\t\t\tif (path.basename(dir) === \"env\") {\n\t\t\t\tdir = path.dirname(dir);\n\t\t\t}\n\t\t\tif (path.basename(dir) === \"src\") {\n\t\t\t\tdir = path.dirname(dir);\n\t\t\t}\n\t\t\treturn dir;\n\t\t}\n\t\tlet dir = path.dirname(schema);\n\t\tif (path.basename(dir) === \"src\") {\n\t\t\tdir = path.dirname(dir);\n\t\t}\n\t\treturn dir;\n\t}\n\n\tconst projectRoot = resolveProjectRoot(schemaPath, baseDir, resolvedLayout);\n\tconst defaultOutputPath = path.join(projectRoot, \".arkenv\", \"env.gen.ts\");\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\tprojectRoot,\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\tprojectRoot,\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\toutputPath,\n\t};\n}\n\ntype AliasableNextConfig = Record<string, unknown> & {\n\tturbopack?: {\n\t\tresolveAlias?: Record<string, unknown>;\n\t\t[key: string]: unknown;\n\t};\n\twebpack?: (webpackConfig: never, context: never) => unknown;\n};\n\n/**\n * Apply strict-layout and virtual `.arkenv/` aliases to a resolved Next.js config object.\n *\n * @param configObj The resolved Next.js configuration object\n * @param options Optional configuration paths for schema and output files\n * @param setup Result of `setupArkEnv` for the current invocation\n * @returns The configuration object with webpack and Turbopack aliases\n */\nfunction applyArkEnvAliases<T extends object>(\n\tconfigObj: T,\n\toptions: ArkEnvConfigOptions | undefined,\n\tsetup: SetupResult,\n): T {\n\tconst { resolvedLayout, clientEnvPath, outputPath: targetGenPath } = setup;\n\tlet currentConfig = configObj as AliasableNextConfig;\n\n\tif (resolvedLayout === \"strict\" && clientEnvPath) {\n\t\tcurrentConfig = applyStrictLayoutAliases(\n\t\t\tcurrentConfig as never,\n\t\t\tclientEnvPath,\n\t\t\tCLIENT_ENV_SPECIFIER,\n\t\t) as AliasableNextConfig;\n\t}\n\n\tconst rootDir = process.cwd();\n\tconst targetGenPathToUse =\n\t\ttargetGenPath ??\n\t\t(options?.outputPath\n\t\t\t? path.resolve(options.outputPath)\n\t\t\t: path.join(rootDir, \".arkenv\", \"env.gen.ts\"));\n\tconst relativeGenPath = `./${path.relative(rootDir, targetGenPathToUse).replace(/\\\\/g, \"/\")}`;\n\n\tconst turbopack = {\n\t\t...currentConfig.turbopack,\n\t\tresolveAlias: {\n\t\t\t\".arkenv/env.gen\": relativeGenPath,\n\t\t\t\".arkenv/env.gen.ts\": relativeGenPath,\n\t\t\t\".arkenv\": relativeGenPath,\n\t\t\t\".arkenv/index\": relativeGenPath,\n\t\t\t\".arkenv/index.ts\": relativeGenPath,\n\t\t\t\"#arkenv/env\": relativeGenPath,\n\t\t\t\"@/.arkenv\": relativeGenPath,\n\t\t\t\"@/.arkenv/env.gen\": relativeGenPath,\n\t\t\t...currentConfig.turbopack?.resolveAlias,\n\t\t},\n\t};\n\n\tconst previousWebpack = currentConfig.webpack;\n\tconst webpack = (webpackConfig: never, context: never) => {\n\t\tconst resolvedConfig = webpackConfig as {\n\t\t\tresolve?: { alias?: Record<string, unknown> };\n\t\t};\n\t\tresolvedConfig.resolve = resolvedConfig.resolve ?? {};\n\t\tresolvedConfig.resolve.alias = {\n\t\t\t...resolvedConfig.resolve.alias,\n\t\t\t\".arkenv/env.gen\": targetGenPathToUse,\n\t\t\t\".arkenv/env.gen.ts\": targetGenPathToUse,\n\t\t\t\".arkenv\": targetGenPathToUse,\n\t\t\t\".arkenv/index\": targetGenPathToUse,\n\t\t\t\".arkenv/index.ts\": targetGenPathToUse,\n\t\t\t\"#arkenv/env\": targetGenPathToUse,\n\t\t\t\"@/.arkenv\": targetGenPathToUse,\n\t\t\t\"@/.arkenv/env.gen\": targetGenPathToUse,\n\t\t};\n\t\tif (typeof previousWebpack === \"function\") {\n\t\t\treturn previousWebpack(resolvedConfig as never, context);\n\t\t}\n\t\treturn resolvedConfig;\n\t};\n\n\treturn {\n\t\t...currentConfig,\n\t\tturbopack,\n\t\twebpack,\n\t} as unknown as T;\n}\n\n/**\n * Wrap a Next.js configuration object or function to generate `runtimeEnv` in\n * `env.gen.ts`, register `#arkenv/client-env` in strict layout for auto-extend,\n * and configure Turbopack/Webpack aliases for virtualized `.arkenv/` placement.\n *\n * Function-form configs (sync or async) are preserved: ArkEnv awaits the user's\n * factory, then applies aliases to the resolved object.\n *\n * @param nextConfig The Next.js configuration object or `(phase, context)` factory\n * @param options Optional configuration paths for schema and output files\n * @returns The Next.js configuration object, or an async factory that resolves to it\n * @throws An error if the schema file cannot be found or if code generation fails\n *\n * @example\n * ```ts\n * export default withArkEnv({ reactStrictMode: true });\n *\n * export default withArkEnv(async (phase, { defaultConfig }) => ({\n * ...defaultConfig,\n * reactStrictMode: phase !== \"phase-test\",\n * }));\n * ```\n */\nexport function withArkEnv<T extends object>(\n\tnextConfig: NextConfigFactory<T>,\n\toptions?: ArkEnvConfigOptions,\n): (phase: string, context: NextConfigContext) => Promise<T>;\nexport function withArkEnv<T extends object>(\n\tnextConfig: T,\n\toptions?: ArkEnvConfigOptions,\n): T;\nexport function withArkEnv<T extends object>(\n\tnextConfig: T | NextConfigFactory<T>,\n\toptions?: ArkEnvConfigOptions,\n): T | ((phase: string, context: NextConfigContext) => Promise<T>) {\n\tif (typeof nextConfig === \"function\") {\n\t\treturn async (phase: string, context: NextConfigContext) => {\n\t\t\tconst setup = setupArkEnv(options);\n\t\t\tconst resolved = await nextConfig(phase, context);\n\t\t\treturn applyArkEnvAliases(resolved, options, setup);\n\t\t};\n\t}\n\n\tif (nextConfig && typeof nextConfig === \"object\") {\n\t\tconst setup = setupArkEnv(options);\n\t\treturn applyArkEnvAliases(nextConfig, options, setup);\n\t}\n\n\treturn nextConfig;\n}\n"],"mappings":"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"}
@@ -0,0 +1,97 @@
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(e,t){let n=`../client`;if(e&&t){let r=f.default.dirname(t),i=f.default.relative(r,e).replace(/\\/g,`/`).replace(/\.tsx?$/,``);n=i.startsWith(`.`)?i:`./${i}`}return`${y}
58
+ declare module "#arkenv/client-env" {
59
+ export { env } from "${n}";
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){let n=f.default.relative(e,t).replace(/\\/g,`/`);return n.startsWith(`.`)||(n=`./${n}`),n.replace(/\.tsx?$/,``)}function k(e,t){d.default.existsSync(e)||d.default.mkdirSync(e,{recursive:!0});let n=f.default.join(e,`index.ts`),r=O(e,t),i=`export * from ${JSON.stringify(r)};\nexport { default } from ${JSON.stringify(r)};\n`;d.default.existsSync(n)&&d.default.readFileSync(n,`utf-8`)===i||d.default.writeFileSync(n,i,`utf-8`)}function A(e){let t=f.default.dirname(e);if(f.default.basename(t)===`.arkenv`)return f.default.dirname(t)}function j(e,t,n,r,i,a){let{layout:o,baseDir:s}=(0,u.resolveLayout)(e,E(n,c.n(i))),l=``;if(o===`strict`){let e=f.default.join(s,`client.ts`),t=f.default.join(s,`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);l=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);l=o?x(i,a,n):S(i,a,n)}let p=f.default.dirname(t);d.default.existsSync(p)||d.default.mkdirSync(p,{recursive:!0});let m=!0;d.default.existsSync(t)&&d.default.readFileSync(t,`utf-8`)===l&&(m=!1),m&&d.default.writeFileSync(t,l,`utf-8`);let h=a??A(t);if(h&&k(f.default.join(h,`.arkenv`),t),o===`strict`&&s){let e=f.default.join(f.default.dirname(t),`arkenv-client-env.d.ts`),n=C(f.default.join(s,`client.ts`),t),r=!0;d.default.existsSync(e)&&d.default.readFileSync(e,`utf-8`)===n&&(r=!1),r&&d.default.writeFileSync(e,n,`utf-8`)}}function M(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 N(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=M(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 P(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 F(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 I(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 L(e,t){let n=c.n(e),r=e?.schemaPath?f.default.resolve(e.schemaPath):(0,u.findSchemaPath)();if(!r||!I(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));function s(e,t,n){if(n===`strict`&&t){let e=t;return f.default.basename(e)===`env`&&(e=f.default.dirname(e)),f.default.basename(e)===`src`&&(e=f.default.dirname(e)),e}let r=f.default.dirname(e);return f.default.basename(r)===`src`&&(r=f.default.dirname(r)),r}let h=s(r,a,i),g=f.default.join(h,`.arkenv`,`env.gen.ts`),_=e?.outputPath?f.default.resolve(e.outputPath):g,v=e?.codegen??!0;if(v)try{j(r,_,i,e?.standard,e,h)}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=P(c),h=F(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`)&&v&&(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],()=>{j(r,_,i,e?.standard,e,h)},c.t(e)),{resolvedLayout:i,baseDir:a,clientEnvPath:o,outputPath:_}}function R(e,t,n){let{resolvedLayout:r,clientEnvPath:i,outputPath:a}=n,o=e;r===`strict`&&i&&(o=N(o,i,l.t));let s=process.cwd(),c=a??(t?.outputPath?f.default.resolve(t.outputPath):f.default.join(s,`.arkenv`,`env.gen.ts`)),u=`./${f.default.relative(s,c).replace(/\\/g,`/`)}`,d={...o.turbopack,resolveAlias:{".arkenv/env.gen":u,".arkenv/env.gen.ts":u,".arkenv":u,".arkenv/index":u,".arkenv/index.ts":u,"#arkenv/env":u,"@/.arkenv":u,"@/.arkenv/env.gen":u,...o.turbopack?.resolveAlias}},p=o.webpack,m=(e,t)=>{let n=e;return n.resolve=n.resolve??{},n.resolve.alias={...n.resolve.alias,".arkenv/env.gen":c,".arkenv/env.gen.ts":c,".arkenv":c,".arkenv/index":c,".arkenv/index.ts":c,"#arkenv/env":c,"@/.arkenv":c,"@/.arkenv/env.gen":c},typeof p==`function`?p(n,t):n};return{...o,turbopack:d,webpack:m}}function z(e,t){return typeof e==`function`?async(n,r)=>{let i=L(t);return R(await e(n,r),t,i)}:e&&typeof e==`object`?R(e,t,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 z}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return L}});
97
+ //# sourceMappingURL=config-DNiuFUxj.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-DNiuFUxj.cjs","names":["path","path","fs","resolveBuildLog","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","import path from \"node:path\";\n\nfunction 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(\n\tclientPath?: string,\n\toutputPath?: string,\n): string {\n\tlet importTarget = \"../client\";\n\tif (clientPath && outputPath) {\n\t\tconst ambientDir = path.dirname(outputPath);\n\t\tconst rel = path.relative(ambientDir, clientPath).replace(/\\\\/g, \"/\");\n\t\tconst cleanRel = rel.replace(/\\.tsx?$/, \"\");\n\t\timportTarget = cleanRel.startsWith(\".\") ? cleanRel : `./${cleanRel}`;\n\t}\n\treturn `${GENERATED_HEADER}\ndeclare module \"#arkenv/client-env\" {\n\texport { env } from \"${importTarget}\";\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 * Convert a file path to a relative TypeScript module specifier from `fromDir`.\n *\n * @param fromDir Directory the import is written in\n * @param toFile Absolute path of the target module\n * @returns A relative specifier without a `.ts` / `.tsx` extension\n */\nfunction toModuleSpecifier(fromDir: string, toFile: string): string {\n\tlet rel = path.relative(fromDir, toFile).replace(/\\\\/g, \"/\");\n\tif (!rel.startsWith(\".\")) {\n\t\trel = `./${rel}`;\n\t}\n\treturn rel.replace(/\\.tsx?$/, \"\");\n}\n\n/**\n * Write `.arkenv/index.ts` so `tsc` can resolve `@/.arkenv` even when the\n * factory file lives at a custom `outputPath`.\n *\n * @param barrelDir Directory for the TypeScript entry (`<projectRoot>/.arkenv`)\n * @param factoryPath Absolute path of the generated factory file\n */\nfunction writeFactoryBarrel(barrelDir: string, factoryPath: string) {\n\tif (!fs.existsSync(barrelDir)) {\n\t\tfs.mkdirSync(barrelDir, { recursive: true });\n\t}\n\tconst barrelPath = path.join(barrelDir, \"index.ts\");\n\tconst spec = toModuleSpecifier(barrelDir, factoryPath);\n\tconst barrelCode = `export * from ${JSON.stringify(spec)};\\nexport { default } from ${JSON.stringify(spec)};\\n`;\n\tif (\n\t\tfs.existsSync(barrelPath) &&\n\t\tfs.readFileSync(barrelPath, \"utf-8\") === barrelCode\n\t) {\n\t\treturn;\n\t}\n\tfs.writeFileSync(barrelPath, barrelCode, \"utf-8\");\n}\n\n/**\n * Infer the app root from a factory path written into `<root>/.arkenv/`.\n *\n * @param outputPath Absolute path of the generated factory file\n * @returns The parent of `.arkenv`, or `undefined` when the file is elsewhere\n */\nfunction projectRootFromDefaultOutput(outputPath: string): string | undefined {\n\tconst outputDir = path.dirname(outputPath);\n\tif (path.basename(outputDir) !== \".arkenv\") return undefined;\n\treturn path.dirname(outputDir);\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 * @param logOptions Logger options forwarded to layout resolution\n * @param projectRoot App root used to keep `.arkenv/index.ts` as the `@/.arkenv` TypeScript entry\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\tprojectRoot?: string,\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\tconst tsEntryRoot = projectRoot ?? projectRootFromDefaultOutput(outputPath);\n\tif (tsEntryRoot) {\n\t\twriteFactoryBarrel(path.join(tsEntryRoot, \".arkenv\"), outputPath);\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 clientPath = path.join(baseDir, \"client.ts\");\n\t\tconst ambientCode = generateClientEnvAmbientDeclaration(\n\t\t\tclientPath,\n\t\t\toutputPath,\n\t\t);\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// Spread as a plain object. Callers must pass a resolved config object —\n\t// `withArkEnv` awaits function-form `next.config` before calling this.\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 {\n\tArkEnvConfigOptions,\n\tNextConfigContext,\n\tNextConfigFactory,\n} 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\toutputPath: string;\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\tfunction resolveProjectRoot(\n\t\tschema: string,\n\t\tbase?: string,\n\t\tlayout?: string,\n\t): string {\n\t\tif (layout === \"strict\" && base) {\n\t\t\tlet dir = base;\n\t\t\tif (path.basename(dir) === \"env\") {\n\t\t\t\tdir = path.dirname(dir);\n\t\t\t}\n\t\t\tif (path.basename(dir) === \"src\") {\n\t\t\t\tdir = path.dirname(dir);\n\t\t\t}\n\t\t\treturn dir;\n\t\t}\n\t\tlet dir = path.dirname(schema);\n\t\tif (path.basename(dir) === \"src\") {\n\t\t\tdir = path.dirname(dir);\n\t\t}\n\t\treturn dir;\n\t}\n\n\tconst projectRoot = resolveProjectRoot(schemaPath, baseDir, resolvedLayout);\n\tconst defaultOutputPath = path.join(projectRoot, \".arkenv\", \"env.gen.ts\");\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\tprojectRoot,\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\tprojectRoot,\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\toutputPath,\n\t};\n}\n\ntype AliasableNextConfig = Record<string, unknown> & {\n\tturbopack?: {\n\t\tresolveAlias?: Record<string, unknown>;\n\t\t[key: string]: unknown;\n\t};\n\twebpack?: (webpackConfig: never, context: never) => unknown;\n};\n\n/**\n * Apply strict-layout and virtual `.arkenv/` aliases to a resolved Next.js config object.\n *\n * @param configObj The resolved Next.js configuration object\n * @param options Optional configuration paths for schema and output files\n * @param setup Result of `setupArkEnv` for the current invocation\n * @returns The configuration object with webpack and Turbopack aliases\n */\nfunction applyArkEnvAliases<T extends object>(\n\tconfigObj: T,\n\toptions: ArkEnvConfigOptions | undefined,\n\tsetup: SetupResult,\n): T {\n\tconst { resolvedLayout, clientEnvPath, outputPath: targetGenPath } = setup;\n\tlet currentConfig = configObj as AliasableNextConfig;\n\n\tif (resolvedLayout === \"strict\" && clientEnvPath) {\n\t\tcurrentConfig = applyStrictLayoutAliases(\n\t\t\tcurrentConfig as never,\n\t\t\tclientEnvPath,\n\t\t\tCLIENT_ENV_SPECIFIER,\n\t\t) as AliasableNextConfig;\n\t}\n\n\tconst rootDir = process.cwd();\n\tconst targetGenPathToUse =\n\t\ttargetGenPath ??\n\t\t(options?.outputPath\n\t\t\t? path.resolve(options.outputPath)\n\t\t\t: path.join(rootDir, \".arkenv\", \"env.gen.ts\"));\n\tconst relativeGenPath = `./${path.relative(rootDir, targetGenPathToUse).replace(/\\\\/g, \"/\")}`;\n\n\tconst turbopack = {\n\t\t...currentConfig.turbopack,\n\t\tresolveAlias: {\n\t\t\t\".arkenv/env.gen\": relativeGenPath,\n\t\t\t\".arkenv/env.gen.ts\": relativeGenPath,\n\t\t\t\".arkenv\": relativeGenPath,\n\t\t\t\".arkenv/index\": relativeGenPath,\n\t\t\t\".arkenv/index.ts\": relativeGenPath,\n\t\t\t\"#arkenv/env\": relativeGenPath,\n\t\t\t\"@/.arkenv\": relativeGenPath,\n\t\t\t\"@/.arkenv/env.gen\": relativeGenPath,\n\t\t\t...currentConfig.turbopack?.resolveAlias,\n\t\t},\n\t};\n\n\tconst previousWebpack = currentConfig.webpack;\n\tconst webpack = (webpackConfig: never, context: never) => {\n\t\tconst resolvedConfig = webpackConfig as {\n\t\t\tresolve?: { alias?: Record<string, unknown> };\n\t\t};\n\t\tresolvedConfig.resolve = resolvedConfig.resolve ?? {};\n\t\tresolvedConfig.resolve.alias = {\n\t\t\t...resolvedConfig.resolve.alias,\n\t\t\t\".arkenv/env.gen\": targetGenPathToUse,\n\t\t\t\".arkenv/env.gen.ts\": targetGenPathToUse,\n\t\t\t\".arkenv\": targetGenPathToUse,\n\t\t\t\".arkenv/index\": targetGenPathToUse,\n\t\t\t\".arkenv/index.ts\": targetGenPathToUse,\n\t\t\t\"#arkenv/env\": targetGenPathToUse,\n\t\t\t\"@/.arkenv\": targetGenPathToUse,\n\t\t\t\"@/.arkenv/env.gen\": targetGenPathToUse,\n\t\t};\n\t\tif (typeof previousWebpack === \"function\") {\n\t\t\treturn previousWebpack(resolvedConfig as never, context);\n\t\t}\n\t\treturn resolvedConfig;\n\t};\n\n\treturn {\n\t\t...currentConfig,\n\t\tturbopack,\n\t\twebpack,\n\t} as unknown as T;\n}\n\n/**\n * Wrap a Next.js configuration object or function to generate `runtimeEnv` in\n * `env.gen.ts`, register `#arkenv/client-env` in strict layout for auto-extend,\n * and configure Turbopack/Webpack aliases for virtualized `.arkenv/` placement.\n *\n * Function-form configs (sync or async) are preserved: ArkEnv awaits the user's\n * factory, then applies aliases to the resolved object.\n *\n * @param nextConfig The Next.js configuration object or `(phase, context)` factory\n * @param options Optional configuration paths for schema and output files\n * @returns The Next.js configuration object, or an async factory that resolves to it\n * @throws An error if the schema file cannot be found or if code generation fails\n *\n * @example\n * ```ts\n * export default withArkEnv({ reactStrictMode: true });\n *\n * export default withArkEnv(async (phase, { defaultConfig }) => ({\n * ...defaultConfig,\n * reactStrictMode: phase !== \"phase-test\",\n * }));\n * ```\n */\nexport function withArkEnv<T extends object>(\n\tnextConfig: NextConfigFactory<T>,\n\toptions?: ArkEnvConfigOptions,\n): (phase: string, context: NextConfigContext) => Promise<T>;\nexport function withArkEnv<T extends object>(\n\tnextConfig: T,\n\toptions?: ArkEnvConfigOptions,\n): T;\nexport function withArkEnv<T extends object>(\n\tnextConfig: T | NextConfigFactory<T>,\n\toptions?: ArkEnvConfigOptions,\n): T | ((phase: string, context: NextConfigContext) => Promise<T>) {\n\tif (typeof nextConfig === \"function\") {\n\t\treturn async (phase: string, context: NextConfigContext) => {\n\t\t\tconst setup = setupArkEnv(options);\n\t\t\tconst resolved = await nextConfig(phase, context);\n\t\t\treturn applyArkEnvAliases(resolved, options, setup);\n\t\t};\n\t}\n\n\tif (nextConfig && typeof nextConfig === \"object\") {\n\t\tconst setup = setupArkEnv(options);\n\t\treturn applyArkEnvAliases(nextConfig, options, setup);\n\t}\n\n\treturn nextConfig;\n}\n"],"mappings":"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"}
@@ -62,12 +62,16 @@ type ArkEnvConfigOptions = {
62
62
  /**
63
63
  * Specify the path where the generated file (`env.gen.ts`) should be written.
64
64
  *
65
- * Defaults to `"generated/env.gen.ts"` in the same directory as the schema file.
65
+ * Defaults to `.arkenv/env.gen.ts` at the project root. Import the factory
66
+ * via `@/.arkenv`. Bundlers resolve that specifier through `withArkEnv`.
67
+ * `tsc --noEmit` resolves it through `.arkenv/index.ts`, which re-exports
68
+ * this file when it lives outside `.arkenv/`.
66
69
  *
67
- * @default "[schemaDirectory]/generated/env.gen.ts"
70
+ * @default "[projectRoot]/.arkenv/env.gen.ts"
68
71
  * @example
69
72
  * ```ts
70
73
  * export default withArkEnv(nextConfig, {
74
+ * outputPath: "src/generated/env.gen.ts",
71
75
  * });
72
76
  * ```
73
77
  */
@@ -130,9 +134,11 @@ type ArkEnvConfigOptions = {
130
134
  * @param outputPath The absolute path to the generated output file
131
135
  * @param layoutOption The explicit layout to use; auto-detected from the filesystem when omitted
132
136
  * @param forceStandard Force standard mode code generation
137
+ * @param logOptions Logger options forwarded to layout resolution
138
+ * @param projectRoot App root used to keep `.arkenv/index.ts` as the `@/.arkenv` TypeScript entry
133
139
  * @throws An error if strict layout files are missing when `layoutOption` is `"strict"`
134
140
  */
135
- declare function runCodegen(schemaPath: string, outputPath: string, layoutOption?: ArkEnvConfigOptions["layout"], forceStandard?: boolean, logOptions?: Pick<ArkEnvConfigOptions, "logger" | "logLevel">): void;
141
+ declare function runCodegen(schemaPath: string, outputPath: string, layoutOption?: ArkEnvConfigOptions["layout"], forceStandard?: boolean, logOptions?: Pick<ArkEnvConfigOptions, "logger" | "logLevel">, projectRoot?: string): void;
136
142
  //#endregion
137
143
  //#region src/config/extract.d.ts
138
144
  /**
@@ -192,4 +198,4 @@ declare function withArkEnv<T extends object>(nextConfig: NextConfigFactory<T>,
192
198
  declare function withArkEnv<T extends object>(nextConfig: T, options?: ArkEnvConfigOptions): T;
193
199
  //#endregion
194
200
  export { extractKeys as a, NextConfigContext as c, withArkEnv as i, NextConfigFactory as l, extractSharedKeys as n, runCodegen as o, setupArkEnv as r, ArkEnvConfigOptions as s, extractClientKeys as t };
195
- //# sourceMappingURL=index-RdYGBD_V.d.cts.map
201
+ //# sourceMappingURL=index-BIewRgpQ.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-RdYGBD_V.d.cts","names":["formatErrorCause","cause","logErrorWithCauseVia","message","log","header","LogLevel","Logger","debug","optionalParams","info","warn","error","LoggerConfig","level","BUILD_PREFIX","WATCHER_PREFIX","formatBuildError","BuildLogHelpers","logBuildWarning","logBuildError","logBuildErrorDetail","logBuildErrorBlankLine","logBuildErrorWithCause","logWatcherError","logWatcherErrorWithCause","createBuildLogHelpers","logger","resolveLogger","bindDefaultBuildLog","isNode","shouldDisableColors","createConsoleLogger","config","defaultLogger","configureDefaultLogger","ArkEnvLogOptions","logLevel","ArkEnvPluginConfig","T","Record","splitPluginConfig","pluginConfig","logOptions","resolveLoggerFromOptions","options","resolveBuildLog","parseLogLevel","value","readEnvLogLevel","resolveLogLevel","shouldLog","Exclude","configuredLevel","messageLevel"],"sources":["../../internal/log/dist/index.d.ts","../src/config/types.ts","../src/config/codegen.ts","../src/config/extract.ts","../src/config/setup.ts"],"mappings":";;;;;;;;KAgBKM,QAAAA;;;;KAIAC,MAAAA;EACHC,KAAAA,GAAQL,OAAAA,aAAoBM,cAAAA;EAC5BC,IAAAA,GAAOP,OAAAA,aAAoBM,cAAAA;EAC3BE,IAAAA,GAAOR,OAAAA,aAAoBM,cAAAA;EAC3BG,KAAAA,GAAQT,OAAAA,aAAoBM,cAAAA;AAAAA;;;;;;;;AAdsE;;;;KCFxF,iBAAA;EACX,aAAA;AAAA;;;;KAMW,iBAAA,+BACX,KAAA,UACA,OAAA,EAAS,iBAAA,KACL,CAAA,GAAI,OAAA,CAAQ,CAAA;;;;;;;;;;;KAYL,mBAAA;EDNgC;;;;AChB5C;;;;;AAOA;;;;EA6BC,UAAA;EA1BgB;;;;;;;;;;;;EAwChB,UAAA;EA5BW;;;;;;;;EAsCX,MAAA;EAgCA;;;EAAA;EAcW;;;;;;AChFZ;;;;EDoDC,QAAA;EC/Ca;;;;;EDsDb,QAAA;ECxDA;;;;;ED+DA,OAAA;EC7D6D;;;;AC2F9D;EFvBC,MAAA,GAAS,MAAA;;;;;;EAOT,QAAA,GAAW,QAAA;AAAA;;;;;ADxGwF;;;;;AAMvF;;iBEkBG,UAAA,CACf,UAAA,UACA,UAAA,UACA,YAAA,GAAe,mBAAA,YACf,aAAA,YACA,UAAA,GAAa,IAAA,CAAK,mBAAA;;;;;;AF7BiF;;;iBGwHpF,WAAA,CAAY,OAAA;EAC3B,UAAA;EACA,UAAA;EACA,QAAA;AAAA;;;KCjEI,WAAA;EACJ,cAAA;EACA,OAAA;EACA,aAAA;EACA,UAAA;AAAA;;AJxDY;;;;;;;iBImEG,WAAA,CACf,OAAA,GAAU,mBAAA,EACV,eAAA;EAAoB,YAAA,GAAe,MAAA;AAAA,IACjC,WAAA;;;;;;;;;;;;AH9EH;;;;;AAOA;;;;;;;iBGuWgB,UAAA,kBAAA,CACf,UAAA,EAAY,iBAAA,CAAkB,CAAA,GAC9B,OAAA,GAAU,mBAAA,IACP,KAAA,UAAe,OAAA,EAAS,iBAAA,KAAsB,OAAA,CAAQ,CAAA;AAAA,iBAC1C,UAAA,kBAAA,CACf,UAAA,EAAY,CAAA,EACZ,OAAA,GAAU,mBAAA,GACR,CAAA"}
1
+ {"version":3,"file":"index-BIewRgpQ.d.cts","names":["formatErrorCause","cause","logErrorWithCauseVia","message","log","header","LogLevel","Logger","debug","optionalParams","info","warn","error","LoggerConfig","level","BUILD_PREFIX","WATCHER_PREFIX","formatBuildError","BuildLogHelpers","logBuildWarning","logBuildError","logBuildErrorDetail","logBuildErrorBlankLine","logBuildErrorWithCause","logWatcherError","logWatcherErrorWithCause","createBuildLogHelpers","logger","resolveLogger","bindDefaultBuildLog","isNode","shouldDisableColors","createConsoleLogger","config","defaultLogger","configureDefaultLogger","ArkEnvLogOptions","logLevel","ArkEnvPluginConfig","T","Record","splitPluginConfig","pluginConfig","logOptions","resolveLoggerFromOptions","options","resolveBuildLog","parseLogLevel","value","readEnvLogLevel","resolveLogLevel","shouldLog","Exclude","configuredLevel","messageLevel"],"sources":["../../internal/log/dist/index.d.ts","../src/config/types.ts","../src/config/codegen.ts","../src/config/extract.ts","../src/config/setup.ts"],"mappings":";;;;;;;;KAgBKM,QAAAA;;;;KAIAC,MAAAA;EACHC,KAAAA,GAAQL,OAAAA,aAAoBM,cAAAA;EAC5BC,IAAAA,GAAOP,OAAAA,aAAoBM,cAAAA;EAC3BE,IAAAA,GAAOR,OAAAA,aAAoBM,cAAAA;EAC3BG,KAAAA,GAAQT,OAAAA,aAAoBM,cAAAA;AAAAA;;;;;;;;AAdsE;;;;KCFxF,iBAAA;EACX,aAAA;AAAA;;;;KAMW,iBAAA,+BACX,KAAA,UACA,OAAA,EAAS,iBAAA,KACL,CAAA,GAAI,OAAA,CAAQ,CAAA;;;;;;;;;;;KAYL,mBAAA;EDNgC;;;;AChB5C;;;;;AAOA;;;;EA6BC,UAAA;EA1BgB;;;;;;;;;;;;;AAYjB;;;EAgCC,UAAA;EAlBA;;;;;;;;EA4BA,MAAA;EA8CW;;;EAAA;;;AChCZ;;;;;;;;EDIC,QAAA;ECFA;;;;;EDSA,QAAA;ECNA;;;;;EDaA,OAAA;;AE0BD;;;;EFnBC,MAAA,GAAS,MAAA;EEoBT;;;;;EFbA,QAAA,GAAW,QAAA;AAAA;;;;;AD5GwF;;;;;AAMvF;;;;iBEsEG,UAAA,CACf,UAAA,UACA,UAAA,UACA,YAAA,GAAe,mBAAA,YACf,aAAA,YACA,UAAA,GAAa,IAAA,CAAK,mBAAA,0BAClB,WAAA;;;;;;AFlFmG;;;iBGwHpF,WAAA,CAAY,OAAA;EAC3B,UAAA;EACA,UAAA;EACA,QAAA;AAAA;;;KCjEI,WAAA;EACJ,cAAA;EACA,OAAA;EACA,aAAA;EACA,UAAA;AAAA;;AJxDY;;;;;;;iBImEG,WAAA,CACf,OAAA,GAAU,mBAAA,EACV,eAAA;EAAoB,YAAA,GAAe,MAAA;AAAA,IACjC,WAAA;;;;;;;;;;;;AH9EH;;;;;AAOA;;;;;;;iBGyWgB,UAAA,kBAAA,CACf,UAAA,EAAY,iBAAA,CAAkB,CAAA,GAC9B,OAAA,GAAU,mBAAA,IACP,KAAA,UAAe,OAAA,EAAS,iBAAA,KAAsB,OAAA,CAAQ,CAAA;AAAA,iBAC1C,UAAA,kBAAA,CACf,UAAA,EAAY,CAAA,EACZ,OAAA,GAAU,mBAAA,GACR,CAAA"}
@@ -62,12 +62,16 @@ type ArkEnvConfigOptions = {
62
62
  /**
63
63
  * Specify the path where the generated file (`env.gen.ts`) should be written.
64
64
  *
65
- * Defaults to `"generated/env.gen.ts"` in the same directory as the schema file.
65
+ * Defaults to `.arkenv/env.gen.ts` at the project root. Import the factory
66
+ * via `@/.arkenv`. Bundlers resolve that specifier through `withArkEnv`.
67
+ * `tsc --noEmit` resolves it through `.arkenv/index.ts`, which re-exports
68
+ * this file when it lives outside `.arkenv/`.
66
69
  *
67
- * @default "[schemaDirectory]/generated/env.gen.ts"
70
+ * @default "[projectRoot]/.arkenv/env.gen.ts"
68
71
  * @example
69
72
  * ```ts
70
73
  * export default withArkEnv(nextConfig, {
74
+ * outputPath: "src/generated/env.gen.ts",
71
75
  * });
72
76
  * ```
73
77
  */
@@ -130,9 +134,11 @@ type ArkEnvConfigOptions = {
130
134
  * @param outputPath The absolute path to the generated output file
131
135
  * @param layoutOption The explicit layout to use; auto-detected from the filesystem when omitted
132
136
  * @param forceStandard Force standard mode code generation
137
+ * @param logOptions Logger options forwarded to layout resolution
138
+ * @param projectRoot App root used to keep `.arkenv/index.ts` as the `@/.arkenv` TypeScript entry
133
139
  * @throws An error if strict layout files are missing when `layoutOption` is `"strict"`
134
140
  */
135
- declare function runCodegen(schemaPath: string, outputPath: string, layoutOption?: ArkEnvConfigOptions["layout"], forceStandard?: boolean, logOptions?: Pick<ArkEnvConfigOptions, "logger" | "logLevel">): void;
141
+ declare function runCodegen(schemaPath: string, outputPath: string, layoutOption?: ArkEnvConfigOptions["layout"], forceStandard?: boolean, logOptions?: Pick<ArkEnvConfigOptions, "logger" | "logLevel">, projectRoot?: string): void;
136
142
  //#endregion
137
143
  //#region src/config/extract.d.ts
138
144
  /**
@@ -192,4 +198,4 @@ declare function withArkEnv<T extends object>(nextConfig: NextConfigFactory<T>,
192
198
  declare function withArkEnv<T extends object>(nextConfig: T, options?: ArkEnvConfigOptions): T;
193
199
  //#endregion
194
200
  export { extractKeys as a, NextConfigContext as c, withArkEnv as i, NextConfigFactory as l, extractSharedKeys$1 as n, runCodegen as o, setupArkEnv as r, ArkEnvConfigOptions as s, extractClientKeys$1 as t };
195
- //# sourceMappingURL=index-CBjJM83X.d.ts.map
201
+ //# sourceMappingURL=index-U5bfcjNW.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CBjJM83X.d.ts","names":["formatErrorCause","cause","logErrorWithCauseVia","message","log","header","LogLevel","Logger","debug","optionalParams","info","warn","error","LoggerConfig","level","BUILD_PREFIX","WATCHER_PREFIX","formatBuildError","BuildLogHelpers","logBuildWarning","logBuildError","logBuildErrorDetail","logBuildErrorBlankLine","logBuildErrorWithCause","logWatcherError","logWatcherErrorWithCause","createBuildLogHelpers","logger","resolveLogger","bindDefaultBuildLog","isNode","shouldDisableColors","createConsoleLogger","config","defaultLogger","configureDefaultLogger","ArkEnvLogOptions","logLevel","ArkEnvPluginConfig","T","Record","splitPluginConfig","pluginConfig","logOptions","resolveLoggerFromOptions","options","resolveBuildLog","parseLogLevel","value","readEnvLogLevel","resolveLogLevel","shouldLog","Exclude","configuredLevel","messageLevel"],"sources":["../../internal/log/dist/index.d.ts","../src/config/types.ts","../src/config/codegen.ts","../src/config/extract.ts","../src/config/setup.ts"],"mappings":";;;;;;;;KAgBKM,QAAAA;;;;KAIAC,MAAAA;EACHC,KAAAA,GAAQL,OAAAA,aAAoBM,cAAAA;EAC5BC,IAAAA,GAAOP,OAAAA,aAAoBM,cAAAA;EAC3BE,IAAAA,GAAOR,OAAAA,aAAoBM,cAAAA;EAC3BG,KAAAA,GAAQT,OAAAA,aAAoBM,cAAAA;AAAAA;;;;;;;;AAdsE;;;;KCFxF,iBAAA;EACX,aAAA;AAAA;;;;KAMW,iBAAA,+BACX,KAAA,UACA,OAAA,EAAS,iBAAA,KACL,CAAA,GAAI,OAAA,CAAQ,CAAA;;;;;;;;;;;KAYL,mBAAA;EDNgC;;;;AChB5C;;;;;AAOA;;;;EA6BC,UAAA;EA1BgB;;;;;;;;;;;;EAwChB,UAAA;EA5BW;;;;;;;;EAsCX,MAAA;EAgCA;;;EAAA;EAcW;;;;;;AChFZ;;;;EDoDC,QAAA;EC/Ca;;;;;EDsDb,QAAA;ECxDA;;;;;ED+DA,OAAA;EC7D6D;;;;AC2F9D;EFvBC,MAAA,GAAS,MAAA;;;;;;EAOT,QAAA,GAAW,QAAA;AAAA;;;;;ADxGwF;;;;;AAMvF;;iBEkBG,UAAA,CACf,UAAA,UACA,UAAA,UACA,YAAA,GAAe,mBAAA,YACf,aAAA,YACA,UAAA,GAAa,IAAA,CAAK,mBAAA;;;;;;AF7BiF;;;iBGwHpF,WAAA,CAAY,OAAA;EAC3B,UAAA;EACA,UAAA;EACA,QAAA;AAAA;;;KCjEI,WAAA;EACJ,cAAA;EACA,OAAA;EACA,aAAA;EACA,UAAA;AAAA;;AJxDY;;;;;;;iBImEG,WAAA,CACf,OAAA,GAAU,mBAAA,EACV,eAAA;EAAoB,YAAA,GAAe,MAAA;AAAA,IACjC,WAAA;;;;;;;;;;;;AH9EH;;;;;AAOA;;;;;;;iBGuWgB,UAAA,kBAAA,CACf,UAAA,EAAY,iBAAA,CAAkB,CAAA,GAC9B,OAAA,GAAU,mBAAA,IACP,KAAA,UAAe,OAAA,EAAS,iBAAA,KAAsB,OAAA,CAAQ,CAAA;AAAA,iBAC1C,UAAA,kBAAA,CACf,UAAA,EAAY,CAAA,EACZ,OAAA,GAAU,mBAAA,GACR,CAAA"}
1
+ {"version":3,"file":"index-U5bfcjNW.d.ts","names":["formatErrorCause","cause","logErrorWithCauseVia","message","log","header","LogLevel","Logger","debug","optionalParams","info","warn","error","LoggerConfig","level","BUILD_PREFIX","WATCHER_PREFIX","formatBuildError","BuildLogHelpers","logBuildWarning","logBuildError","logBuildErrorDetail","logBuildErrorBlankLine","logBuildErrorWithCause","logWatcherError","logWatcherErrorWithCause","createBuildLogHelpers","logger","resolveLogger","bindDefaultBuildLog","isNode","shouldDisableColors","createConsoleLogger","config","defaultLogger","configureDefaultLogger","ArkEnvLogOptions","logLevel","ArkEnvPluginConfig","T","Record","splitPluginConfig","pluginConfig","logOptions","resolveLoggerFromOptions","options","resolveBuildLog","parseLogLevel","value","readEnvLogLevel","resolveLogLevel","shouldLog","Exclude","configuredLevel","messageLevel"],"sources":["../../internal/log/dist/index.d.ts","../src/config/types.ts","../src/config/codegen.ts","../src/config/extract.ts","../src/config/setup.ts"],"mappings":";;;;;;;;KAgBKM,QAAAA;;;;KAIAC,MAAAA;EACHC,KAAAA,GAAQL,OAAAA,aAAoBM,cAAAA;EAC5BC,IAAAA,GAAOP,OAAAA,aAAoBM,cAAAA;EAC3BE,IAAAA,GAAOR,OAAAA,aAAoBM,cAAAA;EAC3BG,KAAAA,GAAQT,OAAAA,aAAoBM,cAAAA;AAAAA;;;;;;;;AAdsE;;;;KCFxF,iBAAA;EACX,aAAA;AAAA;;;;KAMW,iBAAA,+BACX,KAAA,UACA,OAAA,EAAS,iBAAA,KACL,CAAA,GAAI,OAAA,CAAQ,CAAA;;;;;;;;;;;KAYL,mBAAA;EDNgC;;;;AChB5C;;;;;AAOA;;;;EA6BC,UAAA;EA1BgB;;;;;;;;;;;;;AAYjB;;;EAgCC,UAAA;EAlBA;;;;;;;;EA4BA,MAAA;EA8CW;;;EAAA;;;AChCZ;;;;;;;;EDIC,QAAA;ECFA;;;;;EDSA,QAAA;ECNA;;;;;EDaA,OAAA;;AE0BD;;;;EFnBC,MAAA,GAAS,MAAA;EEoBT;;;;;EFbA,QAAA,GAAW,QAAA;AAAA;;;;;AD5GwF;;;;;AAMvF;;;;iBEsEG,UAAA,CACf,UAAA,UACA,UAAA,UACA,YAAA,GAAe,mBAAA,YACf,aAAA,YACA,UAAA,GAAa,IAAA,CAAK,mBAAA,0BAClB,WAAA;;;;;;AFlFmG;;;iBGwHpF,WAAA,CAAY,OAAA;EAC3B,UAAA;EACA,UAAA;EACA,QAAA;AAAA;;;KCjEI,WAAA;EACJ,cAAA;EACA,OAAA;EACA,aAAA;EACA,UAAA;AAAA;;AJxDY;;;;;;;iBImEG,WAAA,CACf,OAAA,GAAU,mBAAA,EACV,eAAA;EAAoB,YAAA,GAAe,MAAA;AAAA,IACjC,WAAA;;;;;;;;;;;;AH9EH;;;;;AAOA;;;;;;;iBGyWgB,UAAA,kBAAA,CACf,UAAA,EAAY,iBAAA,CAAkB,CAAA,GAC9B,OAAA,GAAU,mBAAA,IACP,KAAA,UAAe,OAAA,EAAS,iBAAA,KAAsB,OAAA,CAAQ,CAAA;AAAA,iBAC1C,UAAA,kBAAA,CACf,UAAA,EAAY,CAAA,EACZ,OAAA,GAAU,mBAAA,GACR,CAAA"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`./config-Oq8dsEPM.cjs`);const e=require(`./arkenv-internal-QxkUlA5J.cjs`),t=require(`./script-DAdH4IEa.cjs`);let n=require(`@arkenv/core`);function r(t,r){return t&&typeof t==`object`&&(`runtimeEnv`in t||`server`in t||`client`in t||`shared`in t)?e.t(t,!1,void 0,n.arkenv,n.getSchemaKeys):e.t(t,r,{isServer:!1},n.arkenv,n.getSchemaKeys)}exports.ArkEnvScript=t.t,exports.arkenv=r,exports.default=r;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`./config-DNiuFUxj.cjs`);const e=require(`./arkenv-internal-QxkUlA5J.cjs`),t=require(`./script-iYGXywhf.cjs`);let n=require(`@arkenv/core`);function r(t,r){return t&&typeof t==`object`&&(`runtimeEnv`in t||`server`in t||`client`in t||`shared`in t)?e.t(t,!1,void 0,n.arkenv,n.getSchemaKeys):e.t(t,r,{isServer:!1},n.arkenv,n.getSchemaKeys)}exports.ArkEnvScript=t.t,exports.arkenv=r,exports.default=r;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`./config-Oq8dsEPM.cjs`);const e=require(`./arkenv-internal-QxkUlA5J.cjs`),t=require(`./script-DAdH4IEa.cjs`);let n=require(`@arkenv/core`);function r(t,r){return t&&typeof t==`object`&&(`runtimeEnv`in t||`server`in t||`client`in t||`shared`in t)?e.t(t,!0,void 0,n.arkenv,n.getSchemaKeys):e.t(t,r,{isServer:!0},n.arkenv,n.getSchemaKeys)}exports.ArkEnvScript=t.t,exports.arkenv=r,exports.default=r;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`./config-DNiuFUxj.cjs`);const e=require(`./arkenv-internal-QxkUlA5J.cjs`),t=require(`./script-iYGXywhf.cjs`);let n=require(`@arkenv/core`);function r(t,r){return t&&typeof t==`object`&&(`runtimeEnv`in t||`server`in t||`client`in t||`shared`in t)?e.t(t,!0,void 0,n.arkenv,n.getSchemaKeys):e.t(t,r,{isServer:!0},n.arkenv,n.getSchemaKeys)}exports.ArkEnvScript=t.t,exports.arkenv=r,exports.default=r;
2
2
  //# sourceMappingURL=react-server.cjs.map
@@ -1,2 +1,2 @@
1
- require(`./config-Oq8dsEPM.cjs`);let e=require(`react/jsx-runtime`);function t({env:t}={}){let n={};if(typeof process<`u`&&process.env)for(let e of Object.keys(process.env))e.startsWith(`NEXT_PUBLIC_`)&&(n[e]=process.env[e]);if(t)for(let e of Object.keys(t))e.startsWith(`NEXT_PUBLIC_`)&&(n[e]=t[e]);return(0,e.jsx)(`script`,{id:`arkenv-script`,dangerouslySetInnerHTML:{__html:`globalThis.__arkenv_env__ = ${JSON.stringify(n).replace(/</g,`\\u003c`)};`}})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
2
- //# sourceMappingURL=script-DAdH4IEa.cjs.map
1
+ require(`./config-DNiuFUxj.cjs`);let e=require(`react/jsx-runtime`);function t({env:t}={}){let n={};if(typeof process<`u`&&process.env)for(let e of Object.keys(process.env))e.startsWith(`NEXT_PUBLIC_`)&&(n[e]=process.env[e]);if(t)for(let e of Object.keys(t))e.startsWith(`NEXT_PUBLIC_`)&&(n[e]=t[e]);return(0,e.jsx)(`script`,{id:`arkenv-script`,dangerouslySetInnerHTML:{__html:`globalThis.__arkenv_env__ = ${JSON.stringify(n).replace(/</g,`\\u003c`)};`}})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
2
+ //# sourceMappingURL=script-iYGXywhf.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"script-DAdH4IEa.cjs","names":[],"sources":["../src/script.tsx"],"sourcesContent":["import type React from \"react\";\n\nexport type ArkEnvScriptProps = {\n\t/**\n\t * Optional custom environment variable map. If provided, any keys starting\n\t * with `NEXT_PUBLIC_` will be merged with public keys from `process.env`.\n\t */\n\tenv?: Record<string, string | undefined>;\n};\n\n/**\n * A React Component to serialize and inject NEXT_PUBLIC_* environment variables into the browser\n * during Server-Side Rendering (SSR). Placed in your root layout (layout.tsx), it sets\n * globalThis.__arkenv_env__ to ensure client-side components have access to runtime environment values.\n */\nexport function ArkEnvScript({\n\tenv,\n}: ArkEnvScriptProps = {}): React.ReactElement {\n\tconst publicEnv: Record<string, string | undefined> = {};\n\n\tif (typeof process !== \"undefined\" && process.env) {\n\t\tfor (const key of Object.keys(process.env)) {\n\t\t\tif (key.startsWith(\"NEXT_PUBLIC_\")) {\n\t\t\t\tpublicEnv[key] = process.env[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (env) {\n\t\tfor (const key of Object.keys(env)) {\n\t\t\tif (key.startsWith(\"NEXT_PUBLIC_\")) {\n\t\t\t\tpublicEnv[key] = env[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tconst scriptContent = `globalThis.__arkenv_env__ = ${JSON.stringify(publicEnv).replace(/</g, \"\\\\u003c\")};`;\n\n\treturn (\n\t\t<script\n\t\t\tid=\"arkenv-script\"\n\t\t\tdangerouslySetInnerHTML={{ __html: scriptContent }}\n\t\t/>\n\t);\n}\n"],"mappings":"oEAeA,SAAgB,EAAa,CAC5B,OACsB,EAAE,CAAsB,CAC9C,IAAM,EAAgD,EAAE,CAExD,GAAI,OAAO,QAAY,KAAe,QAAQ,QACxC,IAAM,KAAO,OAAO,KAAK,QAAQ,IAAI,CACrC,EAAI,WAAW,eAAe,GACjC,EAAU,GAAO,QAAQ,IAAI,IAKhC,GAAI,MACE,IAAM,KAAO,OAAO,KAAK,EAAI,CAC7B,EAAI,WAAW,eAAe,GACjC,EAAU,GAAO,EAAI,IAOxB,OACC,EAAA,EAAA,KAAC,SAAD,CACC,GAAG,gBACH,wBAAyB,CAAE,OAAQ,+BALgB,KAAK,UAAU,EAAU,CAAC,QAAQ,KAAM,UAAU,CAAC,GAKpD,CACjD,CAAA"}
1
+ {"version":3,"file":"script-iYGXywhf.cjs","names":[],"sources":["../src/script.tsx"],"sourcesContent":["import type React from \"react\";\n\nexport type ArkEnvScriptProps = {\n\t/**\n\t * Optional custom environment variable map. If provided, any keys starting\n\t * with `NEXT_PUBLIC_` will be merged with public keys from `process.env`.\n\t */\n\tenv?: Record<string, string | undefined>;\n};\n\n/**\n * A React Component to serialize and inject NEXT_PUBLIC_* environment variables into the browser\n * during Server-Side Rendering (SSR). Placed in your root layout (layout.tsx), it sets\n * globalThis.__arkenv_env__ to ensure client-side components have access to runtime environment values.\n */\nexport function ArkEnvScript({\n\tenv,\n}: ArkEnvScriptProps = {}): React.ReactElement {\n\tconst publicEnv: Record<string, string | undefined> = {};\n\n\tif (typeof process !== \"undefined\" && process.env) {\n\t\tfor (const key of Object.keys(process.env)) {\n\t\t\tif (key.startsWith(\"NEXT_PUBLIC_\")) {\n\t\t\t\tpublicEnv[key] = process.env[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (env) {\n\t\tfor (const key of Object.keys(env)) {\n\t\t\tif (key.startsWith(\"NEXT_PUBLIC_\")) {\n\t\t\t\tpublicEnv[key] = env[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tconst scriptContent = `globalThis.__arkenv_env__ = ${JSON.stringify(publicEnv).replace(/</g, \"\\\\u003c\")};`;\n\n\treturn (\n\t\t<script\n\t\t\tid=\"arkenv-script\"\n\t\t\tdangerouslySetInnerHTML={{ __html: scriptContent }}\n\t\t/>\n\t);\n}\n"],"mappings":"oEAeA,SAAgB,EAAa,CAC5B,OACsB,EAAE,CAAsB,CAC9C,IAAM,EAAgD,EAAE,CAExD,GAAI,OAAO,QAAY,KAAe,QAAQ,QACxC,IAAM,KAAO,OAAO,KAAK,QAAQ,IAAI,CACrC,EAAI,WAAW,eAAe,GACjC,EAAU,GAAO,QAAQ,IAAI,IAKhC,GAAI,MACE,IAAM,KAAO,OAAO,KAAK,EAAI,CAC7B,EAAI,WAAW,eAAe,GACjC,EAAU,GAAO,EAAI,IAOxB,OACC,EAAA,EAAA,KAAC,SAAD,CACC,GAAG,gBACH,wBAAyB,CAAE,OAAQ,+BALgB,KAAK,UAAU,EAAU,CAAC,QAAQ,KAAM,UAAU,CAAC,GAKpD,CACjD,CAAA"}
package/dist/server.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`./config-Oq8dsEPM.cjs`);const e=require(`./arkenv-internal-QxkUlA5J.cjs`),t=require(`./strict-client-env-MouPnkRr.cjs`),n=require(`./auto-extend-CYzZnEvT.cjs`);let r=require(`@arkenv/core`);require(`server-only`);let i=require(`#arkenv/client-env`);function a(a,o){if(a&&typeof a==`object`&&(`runtimeEnv`in a||`server`in a||`shared`in a)){if(`client`in a)throw Error(`server entry point only accepts 'server' and 'shared' schemas.`);return e.t(a,!0,void 0,r.arkenv,r.getSchemaKeys)}return e.t(a,n.t(o,()=>t.i(i.env)),{isServer:!0,strictLayout:`server`},r.arkenv,r.getSchemaKeys)}exports.arkenv=a,exports.default=a;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`./config-DNiuFUxj.cjs`);const e=require(`./arkenv-internal-QxkUlA5J.cjs`),t=require(`./strict-client-env-MouPnkRr.cjs`),n=require(`./auto-extend-CYzZnEvT.cjs`);let r=require(`@arkenv/core`);require(`server-only`);let i=require(`#arkenv/client-env`);function a(a,o){if(a&&typeof a==`object`&&(`runtimeEnv`in a||`server`in a||`shared`in a)){if(`client`in a)throw Error(`server entry point only accepts 'server' and 'shared' schemas.`);return e.t(a,!0,void 0,r.arkenv,r.getSchemaKeys)}return e.t(a,n.t(o,()=>t.i(i.env)),{isServer:!0,strictLayout:`server`},r.arkenv,r.getSchemaKeys)}exports.arkenv=a,exports.default=a;
2
2
  //# sourceMappingURL=server.cjs.map
@@ -1,2 +1,2 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../config-Oq8dsEPM.cjs`);const e=require(`../arkenv-internal-QxkUlA5J.cjs`);let t=require(`@arkenv/standard`);function n(n,r){if(n&&typeof n==`object`&&(`runtimeEnv`in n||`client`in n||`shared`in n)){if(`server`in n)throw Error(`client entry point only accepts 'client' and 'shared' schemas.`);return e.t(n,!1,void 0,t.arkenv,t.getSchemaKeys)}return e.t(n,r,{isServer:!1},t.arkenv,t.getSchemaKeys)}exports.arkenv=n,exports.default=n;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../config-DNiuFUxj.cjs`);const e=require(`../arkenv-internal-QxkUlA5J.cjs`);let t=require(`@arkenv/standard`);function n(n,r){if(n&&typeof n==`object`&&(`runtimeEnv`in n||`client`in n||`shared`in n)){if(`server`in n)throw Error(`client entry point only accepts 'client' and 'shared' schemas.`);return e.t(n,!1,void 0,t.arkenv,t.getSchemaKeys)}return e.t(n,r,{isServer:!1},t.arkenv,t.getSchemaKeys)}exports.arkenv=n,exports.default=n;
2
2
  //# sourceMappingURL=client.cjs.map
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../config-Oq8dsEPM.cjs`);function t(t,n){return e.n(t,{...n,standard:!0})}exports.withArkEnv=t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../config-DNiuFUxj.cjs`);function t(t,n){return e.n(t,{...n,standard:!0})}exports.withArkEnv=t;
2
2
  //# sourceMappingURL=config.cjs.map
@@ -1,4 +1,4 @@
1
- import { c as NextConfigContext, l as NextConfigFactory, s as ArkEnvConfigOptions } from "../index-RdYGBD_V.cjs";
1
+ import { c as NextConfigContext, l as NextConfigFactory, s as ArkEnvConfigOptions } from "../index-BIewRgpQ.cjs";
2
2
 
3
3
  //#region src/standard/config.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { c as NextConfigContext, l as NextConfigFactory, s as ArkEnvConfigOptions } from "../index-CBjJM83X.js";
1
+ import { c as NextConfigContext, l as NextConfigFactory, s as ArkEnvConfigOptions } from "../index-U5bfcjNW.js";
2
2
 
3
3
  //#region src/standard/config.d.ts
4
4
  /**
@@ -1,2 +1,2 @@
1
- import{i as e}from"../config-Deut5Vf8.js";function t(t,n){return e(t,{...n,standard:!0})}export{t as withArkEnv};
1
+ import{i as e}from"../config-B9BksrZQ.js";function t(t,n){return e(t,{...n,standard:!0})}export{t as withArkEnv};
2
2
  //# sourceMappingURL=config.js.map
@@ -1,2 +1,2 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../config-Oq8dsEPM.cjs`);const e=require(`../arkenv-internal-QxkUlA5J.cjs`);let t=require(`@arkenv/standard`);function n(n,r){return n&&typeof n==`object`&&(`runtimeEnv`in n||`server`in n||`client`in n||`shared`in n)?e.t(n,!1,void 0,t.arkenv,t.getSchemaKeys):e.t(n,r,{isServer:!1},t.arkenv,t.getSchemaKeys)}exports.arkenv=n,exports.default=n;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../config-DNiuFUxj.cjs`);const e=require(`../arkenv-internal-QxkUlA5J.cjs`);let t=require(`@arkenv/standard`);function n(n,r){return n&&typeof n==`object`&&(`runtimeEnv`in n||`server`in n||`client`in n||`shared`in n)?e.t(n,!1,void 0,t.arkenv,t.getSchemaKeys):e.t(n,r,{isServer:!1},t.arkenv,t.getSchemaKeys)}exports.arkenv=n,exports.default=n;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../config-Oq8dsEPM.cjs`);const e=require(`../arkenv-internal-QxkUlA5J.cjs`),t=require(`../strict-client-env-MouPnkRr.cjs`),n=require(`../auto-extend-CYzZnEvT.cjs`);require(`server-only`);let r=require(`#arkenv/client-env`),i=require(`@arkenv/standard`);function a(a,o){if(a&&typeof a==`object`&&(`runtimeEnv`in a||`server`in a||`shared`in a)){if(`client`in a)throw Error(`server entry point only accepts 'server' and 'shared' schemas.`);return e.t(a,!0,void 0,i.arkenv,i.getSchemaKeys)}return e.t(a,n.t(o,()=>t.i(r.env)),{isServer:!0,strictLayout:`server`},i.arkenv,i.getSchemaKeys)}exports.arkenv=a,exports.default=a;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../config-DNiuFUxj.cjs`);const e=require(`../arkenv-internal-QxkUlA5J.cjs`),t=require(`../strict-client-env-MouPnkRr.cjs`),n=require(`../auto-extend-CYzZnEvT.cjs`);require(`server-only`);let r=require(`#arkenv/client-env`),i=require(`@arkenv/standard`);function a(a,o){if(a&&typeof a==`object`&&(`runtimeEnv`in a||`server`in a||`shared`in a)){if(`client`in a)throw Error(`server entry point only accepts 'server' and 'shared' schemas.`);return e.t(a,!0,void 0,i.arkenv,i.getSchemaKeys)}return e.t(a,n.t(o,()=>t.i(r.env)),{isServer:!0,strictLayout:`server`},i.arkenv,i.getSchemaKeys)}exports.arkenv=a,exports.default=a;
2
2
  //# sourceMappingURL=server.cjs.map
@@ -1,2 +1,2 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../config-Oq8dsEPM.cjs`);const e=require(`../arkenv-internal-QxkUlA5J.cjs`);let t=require(`@arkenv/standard`);function n(n,r){return e.t(n,r,{isServer:typeof window>`u`,isShared:!0},t.arkenv,t.getSchemaKeys)}exports.arkenv=n,exports.default=n;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../config-DNiuFUxj.cjs`);const e=require(`../arkenv-internal-QxkUlA5J.cjs`);let t=require(`@arkenv/standard`);function n(n,r){return e.t(n,r,{isServer:typeof window>`u`,isShared:!0},t.arkenv,t.getSchemaKeys)}exports.arkenv=n,exports.default=n;
2
2
  //# sourceMappingURL=shared.cjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arkenv/nextjs",
3
- "version": "1.0.0-alpha.12",
3
+ "version": "1.0.0-alpha.13",
4
4
  "author": "Yam Borodetsky <yam@yam.codes>",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,8 +25,8 @@
25
25
  "tsdown": "0.21.10",
26
26
  "typescript": "6.0.3",
27
27
  "vitest": "4.1.5",
28
- "@arkenv/core": "1.0.0-alpha.6",
29
- "@arkenv/standard": "1.0.0-alpha.6",
28
+ "@arkenv/core": "1.0.0-alpha.7",
29
+ "@arkenv/standard": "1.0.0-alpha.7",
30
30
  "@repo/log": "0.0.1",
31
31
  "@repo/scope": "0.1.3",
32
32
  "@repo/types": "0.1.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-Deut5Vf8.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","import path from \"node:path\";\n\nfunction 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(\n\tclientPath?: string,\n\toutputPath?: string,\n): string {\n\tlet importTarget = \"../client\";\n\tif (clientPath && outputPath) {\n\t\tconst ambientDir = path.dirname(outputPath);\n\t\tconst rel = path.relative(ambientDir, clientPath).replace(/\\\\/g, \"/\");\n\t\tconst cleanRel = rel.replace(/\\.tsx?$/, \"\");\n\t\timportTarget = cleanRel.startsWith(\".\") ? cleanRel : `./${cleanRel}`;\n\t}\n\treturn `${GENERATED_HEADER}\ndeclare module \"#arkenv/client-env\" {\n\texport { env } from \"${importTarget}\";\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\tconst barrelPath = path.join(outputDir, \"index.ts\");\n\tconst barrelCode = `export * from \"./env.gen\";\\nexport { default } from \"./env.gen\";\\n`;\n\tif (path.basename(outputDir) === \".arkenv\" || !fs.existsSync(barrelPath)) {\n\t\tlet shouldWriteBarrel = true;\n\t\tif (fs.existsSync(barrelPath)) {\n\t\t\tif (fs.readFileSync(barrelPath, \"utf-8\") === barrelCode) {\n\t\t\t\tshouldWriteBarrel = false;\n\t\t\t}\n\t\t}\n\t\tif (shouldWriteBarrel) {\n\t\t\tfs.writeFileSync(barrelPath, barrelCode, \"utf-8\");\n\t\t}\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 clientPath = path.join(baseDir, \"client.ts\");\n\t\tconst ambientCode = generateClientEnvAmbientDeclaration(\n\t\t\tclientPath,\n\t\t\toutputPath,\n\t\t);\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// Spread as a plain object. Callers must pass a resolved config object —\n\t// `withArkEnv` awaits function-form `next.config` before calling this.\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 {\n\tArkEnvConfigOptions,\n\tNextConfigContext,\n\tNextConfigFactory,\n} 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\toutputPath: string;\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\tfunction resolveProjectRoot(\n\t\tschema: string,\n\t\tbase?: string,\n\t\tlayout?: string,\n\t): string {\n\t\tif (layout === \"strict\" && base) {\n\t\t\tlet dir = base;\n\t\t\tif (path.basename(dir) === \"env\") {\n\t\t\t\tdir = path.dirname(dir);\n\t\t\t}\n\t\t\tif (path.basename(dir) === \"src\") {\n\t\t\t\tdir = path.dirname(dir);\n\t\t\t}\n\t\t\treturn dir;\n\t\t}\n\t\tlet dir = path.dirname(schema);\n\t\tif (path.basename(dir) === \"src\") {\n\t\t\tdir = path.dirname(dir);\n\t\t}\n\t\treturn dir;\n\t}\n\n\tconst projectRoot = resolveProjectRoot(schemaPath, baseDir, resolvedLayout);\n\tconst defaultOutputPath = path.join(projectRoot, \".arkenv\", \"env.gen.ts\");\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\toutputPath,\n\t};\n}\n\ntype AliasableNextConfig = Record<string, unknown> & {\n\tturbopack?: {\n\t\tresolveAlias?: Record<string, unknown>;\n\t\t[key: string]: unknown;\n\t};\n\twebpack?: (webpackConfig: never, context: never) => unknown;\n};\n\n/**\n * Apply strict-layout and virtual `.arkenv/` aliases to a resolved Next.js config object.\n *\n * @param configObj The resolved Next.js configuration object\n * @param options Optional configuration paths for schema and output files\n * @param setup Result of `setupArkEnv` for the current invocation\n * @returns The configuration object with webpack and Turbopack aliases\n */\nfunction applyArkEnvAliases<T extends object>(\n\tconfigObj: T,\n\toptions: ArkEnvConfigOptions | undefined,\n\tsetup: SetupResult,\n): T {\n\tconst { resolvedLayout, clientEnvPath, outputPath: targetGenPath } = setup;\n\tlet currentConfig = configObj as AliasableNextConfig;\n\n\tif (resolvedLayout === \"strict\" && clientEnvPath) {\n\t\tcurrentConfig = applyStrictLayoutAliases(\n\t\t\tcurrentConfig as never,\n\t\t\tclientEnvPath,\n\t\t\tCLIENT_ENV_SPECIFIER,\n\t\t) as AliasableNextConfig;\n\t}\n\n\tconst rootDir = process.cwd();\n\tconst targetGenPathToUse =\n\t\ttargetGenPath ??\n\t\t(options?.outputPath\n\t\t\t? path.resolve(options.outputPath)\n\t\t\t: path.join(rootDir, \".arkenv\", \"env.gen.ts\"));\n\tconst relativeGenPath = `./${path.relative(rootDir, targetGenPathToUse).replace(/\\\\/g, \"/\")}`;\n\n\tconst turbopack = {\n\t\t...currentConfig.turbopack,\n\t\tresolveAlias: {\n\t\t\t\".arkenv/env.gen\": relativeGenPath,\n\t\t\t\".arkenv/env.gen.ts\": relativeGenPath,\n\t\t\t\".arkenv\": relativeGenPath,\n\t\t\t\".arkenv/index\": relativeGenPath,\n\t\t\t\".arkenv/index.ts\": relativeGenPath,\n\t\t\t\"#arkenv/env\": relativeGenPath,\n\t\t\t\"@/.arkenv\": relativeGenPath,\n\t\t\t\"@/.arkenv/env.gen\": relativeGenPath,\n\t\t\t...currentConfig.turbopack?.resolveAlias,\n\t\t},\n\t};\n\n\tconst previousWebpack = currentConfig.webpack;\n\tconst webpack = (webpackConfig: never, context: never) => {\n\t\tconst resolvedConfig = webpackConfig as {\n\t\t\tresolve?: { alias?: Record<string, unknown> };\n\t\t};\n\t\tresolvedConfig.resolve = resolvedConfig.resolve ?? {};\n\t\tresolvedConfig.resolve.alias = {\n\t\t\t...resolvedConfig.resolve.alias,\n\t\t\t\".arkenv/env.gen\": targetGenPathToUse,\n\t\t\t\".arkenv/env.gen.ts\": targetGenPathToUse,\n\t\t\t\".arkenv\": targetGenPathToUse,\n\t\t\t\".arkenv/index\": targetGenPathToUse,\n\t\t\t\".arkenv/index.ts\": targetGenPathToUse,\n\t\t\t\"#arkenv/env\": targetGenPathToUse,\n\t\t\t\"@/.arkenv\": targetGenPathToUse,\n\t\t\t\"@/.arkenv/env.gen\": targetGenPathToUse,\n\t\t};\n\t\tif (typeof previousWebpack === \"function\") {\n\t\t\treturn previousWebpack(resolvedConfig as never, context);\n\t\t}\n\t\treturn resolvedConfig;\n\t};\n\n\treturn {\n\t\t...currentConfig,\n\t\tturbopack,\n\t\twebpack,\n\t} as unknown as T;\n}\n\n/**\n * Wrap a Next.js configuration object or function to generate `runtimeEnv` in\n * `env.gen.ts`, register `#arkenv/client-env` in strict layout for auto-extend,\n * and configure Turbopack/Webpack aliases for virtualized `.arkenv/` placement.\n *\n * Function-form configs (sync or async) are preserved: ArkEnv awaits the user's\n * factory, then applies aliases to the resolved object.\n *\n * @param nextConfig The Next.js configuration object or `(phase, context)` factory\n * @param options Optional configuration paths for schema and output files\n * @returns The Next.js configuration object, or an async factory that resolves to it\n * @throws An error if the schema file cannot be found or if code generation fails\n *\n * @example\n * ```ts\n * export default withArkEnv({ reactStrictMode: true });\n *\n * export default withArkEnv(async (phase, { defaultConfig }) => ({\n * ...defaultConfig,\n * reactStrictMode: phase !== \"phase-test\",\n * }));\n * ```\n */\nexport function withArkEnv<T extends object>(\n\tnextConfig: NextConfigFactory<T>,\n\toptions?: ArkEnvConfigOptions,\n): (phase: string, context: NextConfigContext) => Promise<T>;\nexport function withArkEnv<T extends object>(\n\tnextConfig: T,\n\toptions?: ArkEnvConfigOptions,\n): T;\nexport function withArkEnv<T extends object>(\n\tnextConfig: T | NextConfigFactory<T>,\n\toptions?: ArkEnvConfigOptions,\n): T | ((phase: string, context: NextConfigContext) => Promise<T>) {\n\tif (typeof nextConfig === \"function\") {\n\t\treturn async (phase: string, context: NextConfigContext) => {\n\t\t\tconst setup = setupArkEnv(options);\n\t\t\tconst resolved = await nextConfig(phase, context);\n\t\t\treturn applyArkEnvAliases(resolved, options, setup);\n\t\t};\n\t}\n\n\tif (nextConfig && typeof nextConfig === \"object\") {\n\t\tconst setup = setupArkEnv(options);\n\t\treturn applyArkEnvAliases(nextConfig, options, setup);\n\t}\n\n\treturn nextConfig;\n}\n"],"mappings":"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"}
@@ -1,99 +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(e,t){let n=`../client`;if(e&&t){let r=f.default.dirname(t),i=f.default.relative(r,e).replace(/\\/g,`/`).replace(/\.tsx?$/,``);n=i.startsWith(`.`)?i:`./${i}`}return`${y}
58
- declare module "#arkenv/client-env" {
59
- export { env } from "${n}";
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;d.default.existsSync(t)&&d.default.readFileSync(t,`utf-8`)===s&&(p=!1),p&&d.default.writeFileSync(t,s,`utf-8`);let m=f.default.join(l,`index.ts`),h=`export * from "./env.gen";
97
- export { default } from "./env.gen";
98
- `;if(f.default.basename(l)===`.arkenv`||!d.default.existsSync(m)){let e=!0;d.default.existsSync(m)&&d.default.readFileSync(m,`utf-8`)===h&&(e=!1),e&&d.default.writeFileSync(m,h,`utf-8`)}if(a===`strict`&&o){let e=f.default.join(f.default.dirname(t),`arkenv-client-env.d.ts`),n=C(f.default.join(o,`client.ts`),t),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));function s(e,t,n){if(n===`strict`&&t){let e=t;return f.default.basename(e)===`env`&&(e=f.default.dirname(e)),f.default.basename(e)===`src`&&(e=f.default.dirname(e)),e}let r=f.default.dirname(e);return f.default.basename(r)===`src`&&(r=f.default.dirname(r)),r}let h=s(r,a,i),g=f.default.join(h,`.arkenv`,`env.gen.ts`),_=e?.outputPath?f.default.resolve(e.outputPath):g,v=e?.codegen??!0;if(v)try{O(r,_,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`)&&v&&(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,_,i,e?.standard,e)},c.t(e)),{resolvedLayout:i,baseDir:a,clientEnvPath:o,outputPath:_}}function F(e,t,n){let{resolvedLayout:r,clientEnvPath:i,outputPath:a}=n,o=e;r===`strict`&&i&&(o=A(o,i,l.t));let s=process.cwd(),c=a??(t?.outputPath?f.default.resolve(t.outputPath):f.default.join(s,`.arkenv`,`env.gen.ts`)),u=`./${f.default.relative(s,c).replace(/\\/g,`/`)}`,d={...o.turbopack,resolveAlias:{".arkenv/env.gen":u,".arkenv/env.gen.ts":u,".arkenv":u,".arkenv/index":u,".arkenv/index.ts":u,"#arkenv/env":u,"@/.arkenv":u,"@/.arkenv/env.gen":u,...o.turbopack?.resolveAlias}},p=o.webpack,m=(e,t)=>{let n=e;return n.resolve=n.resolve??{},n.resolve.alias={...n.resolve.alias,".arkenv/env.gen":c,".arkenv/env.gen.ts":c,".arkenv":c,".arkenv/index":c,".arkenv/index.ts":c,"#arkenv/env":c,"@/.arkenv":c,"@/.arkenv/env.gen":c},typeof p==`function`?p(n,t):n};return{...o,turbopack:d,webpack:m}}function I(e,t){return typeof e==`function`?async(n,r)=>{let i=P(t);return F(await e(n,r),t,i)}:e&&typeof e==`object`?F(e,t,P(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 I}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return P}});
99
- //# sourceMappingURL=config-Oq8dsEPM.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-Oq8dsEPM.cjs","names":["path","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","import path from \"node:path\";\n\nfunction 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(\n\tclientPath?: string,\n\toutputPath?: string,\n): string {\n\tlet importTarget = \"../client\";\n\tif (clientPath && outputPath) {\n\t\tconst ambientDir = path.dirname(outputPath);\n\t\tconst rel = path.relative(ambientDir, clientPath).replace(/\\\\/g, \"/\");\n\t\tconst cleanRel = rel.replace(/\\.tsx?$/, \"\");\n\t\timportTarget = cleanRel.startsWith(\".\") ? cleanRel : `./${cleanRel}`;\n\t}\n\treturn `${GENERATED_HEADER}\ndeclare module \"#arkenv/client-env\" {\n\texport { env } from \"${importTarget}\";\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\tconst barrelPath = path.join(outputDir, \"index.ts\");\n\tconst barrelCode = `export * from \"./env.gen\";\\nexport { default } from \"./env.gen\";\\n`;\n\tif (path.basename(outputDir) === \".arkenv\" || !fs.existsSync(barrelPath)) {\n\t\tlet shouldWriteBarrel = true;\n\t\tif (fs.existsSync(barrelPath)) {\n\t\t\tif (fs.readFileSync(barrelPath, \"utf-8\") === barrelCode) {\n\t\t\t\tshouldWriteBarrel = false;\n\t\t\t}\n\t\t}\n\t\tif (shouldWriteBarrel) {\n\t\t\tfs.writeFileSync(barrelPath, barrelCode, \"utf-8\");\n\t\t}\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 clientPath = path.join(baseDir, \"client.ts\");\n\t\tconst ambientCode = generateClientEnvAmbientDeclaration(\n\t\t\tclientPath,\n\t\t\toutputPath,\n\t\t);\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// Spread as a plain object. Callers must pass a resolved config object —\n\t// `withArkEnv` awaits function-form `next.config` before calling this.\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 {\n\tArkEnvConfigOptions,\n\tNextConfigContext,\n\tNextConfigFactory,\n} 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\toutputPath: string;\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\tfunction resolveProjectRoot(\n\t\tschema: string,\n\t\tbase?: string,\n\t\tlayout?: string,\n\t): string {\n\t\tif (layout === \"strict\" && base) {\n\t\t\tlet dir = base;\n\t\t\tif (path.basename(dir) === \"env\") {\n\t\t\t\tdir = path.dirname(dir);\n\t\t\t}\n\t\t\tif (path.basename(dir) === \"src\") {\n\t\t\t\tdir = path.dirname(dir);\n\t\t\t}\n\t\t\treturn dir;\n\t\t}\n\t\tlet dir = path.dirname(schema);\n\t\tif (path.basename(dir) === \"src\") {\n\t\t\tdir = path.dirname(dir);\n\t\t}\n\t\treturn dir;\n\t}\n\n\tconst projectRoot = resolveProjectRoot(schemaPath, baseDir, resolvedLayout);\n\tconst defaultOutputPath = path.join(projectRoot, \".arkenv\", \"env.gen.ts\");\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\toutputPath,\n\t};\n}\n\ntype AliasableNextConfig = Record<string, unknown> & {\n\tturbopack?: {\n\t\tresolveAlias?: Record<string, unknown>;\n\t\t[key: string]: unknown;\n\t};\n\twebpack?: (webpackConfig: never, context: never) => unknown;\n};\n\n/**\n * Apply strict-layout and virtual `.arkenv/` aliases to a resolved Next.js config object.\n *\n * @param configObj The resolved Next.js configuration object\n * @param options Optional configuration paths for schema and output files\n * @param setup Result of `setupArkEnv` for the current invocation\n * @returns The configuration object with webpack and Turbopack aliases\n */\nfunction applyArkEnvAliases<T extends object>(\n\tconfigObj: T,\n\toptions: ArkEnvConfigOptions | undefined,\n\tsetup: SetupResult,\n): T {\n\tconst { resolvedLayout, clientEnvPath, outputPath: targetGenPath } = setup;\n\tlet currentConfig = configObj as AliasableNextConfig;\n\n\tif (resolvedLayout === \"strict\" && clientEnvPath) {\n\t\tcurrentConfig = applyStrictLayoutAliases(\n\t\t\tcurrentConfig as never,\n\t\t\tclientEnvPath,\n\t\t\tCLIENT_ENV_SPECIFIER,\n\t\t) as AliasableNextConfig;\n\t}\n\n\tconst rootDir = process.cwd();\n\tconst targetGenPathToUse =\n\t\ttargetGenPath ??\n\t\t(options?.outputPath\n\t\t\t? path.resolve(options.outputPath)\n\t\t\t: path.join(rootDir, \".arkenv\", \"env.gen.ts\"));\n\tconst relativeGenPath = `./${path.relative(rootDir, targetGenPathToUse).replace(/\\\\/g, \"/\")}`;\n\n\tconst turbopack = {\n\t\t...currentConfig.turbopack,\n\t\tresolveAlias: {\n\t\t\t\".arkenv/env.gen\": relativeGenPath,\n\t\t\t\".arkenv/env.gen.ts\": relativeGenPath,\n\t\t\t\".arkenv\": relativeGenPath,\n\t\t\t\".arkenv/index\": relativeGenPath,\n\t\t\t\".arkenv/index.ts\": relativeGenPath,\n\t\t\t\"#arkenv/env\": relativeGenPath,\n\t\t\t\"@/.arkenv\": relativeGenPath,\n\t\t\t\"@/.arkenv/env.gen\": relativeGenPath,\n\t\t\t...currentConfig.turbopack?.resolveAlias,\n\t\t},\n\t};\n\n\tconst previousWebpack = currentConfig.webpack;\n\tconst webpack = (webpackConfig: never, context: never) => {\n\t\tconst resolvedConfig = webpackConfig as {\n\t\t\tresolve?: { alias?: Record<string, unknown> };\n\t\t};\n\t\tresolvedConfig.resolve = resolvedConfig.resolve ?? {};\n\t\tresolvedConfig.resolve.alias = {\n\t\t\t...resolvedConfig.resolve.alias,\n\t\t\t\".arkenv/env.gen\": targetGenPathToUse,\n\t\t\t\".arkenv/env.gen.ts\": targetGenPathToUse,\n\t\t\t\".arkenv\": targetGenPathToUse,\n\t\t\t\".arkenv/index\": targetGenPathToUse,\n\t\t\t\".arkenv/index.ts\": targetGenPathToUse,\n\t\t\t\"#arkenv/env\": targetGenPathToUse,\n\t\t\t\"@/.arkenv\": targetGenPathToUse,\n\t\t\t\"@/.arkenv/env.gen\": targetGenPathToUse,\n\t\t};\n\t\tif (typeof previousWebpack === \"function\") {\n\t\t\treturn previousWebpack(resolvedConfig as never, context);\n\t\t}\n\t\treturn resolvedConfig;\n\t};\n\n\treturn {\n\t\t...currentConfig,\n\t\tturbopack,\n\t\twebpack,\n\t} as unknown as T;\n}\n\n/**\n * Wrap a Next.js configuration object or function to generate `runtimeEnv` in\n * `env.gen.ts`, register `#arkenv/client-env` in strict layout for auto-extend,\n * and configure Turbopack/Webpack aliases for virtualized `.arkenv/` placement.\n *\n * Function-form configs (sync or async) are preserved: ArkEnv awaits the user's\n * factory, then applies aliases to the resolved object.\n *\n * @param nextConfig The Next.js configuration object or `(phase, context)` factory\n * @param options Optional configuration paths for schema and output files\n * @returns The Next.js configuration object, or an async factory that resolves to it\n * @throws An error if the schema file cannot be found or if code generation fails\n *\n * @example\n * ```ts\n * export default withArkEnv({ reactStrictMode: true });\n *\n * export default withArkEnv(async (phase, { defaultConfig }) => ({\n * ...defaultConfig,\n * reactStrictMode: phase !== \"phase-test\",\n * }));\n * ```\n */\nexport function withArkEnv<T extends object>(\n\tnextConfig: NextConfigFactory<T>,\n\toptions?: ArkEnvConfigOptions,\n): (phase: string, context: NextConfigContext) => Promise<T>;\nexport function withArkEnv<T extends object>(\n\tnextConfig: T,\n\toptions?: ArkEnvConfigOptions,\n): T;\nexport function withArkEnv<T extends object>(\n\tnextConfig: T | NextConfigFactory<T>,\n\toptions?: ArkEnvConfigOptions,\n): T | ((phase: string, context: NextConfigContext) => Promise<T>) {\n\tif (typeof nextConfig === \"function\") {\n\t\treturn async (phase: string, context: NextConfigContext) => {\n\t\t\tconst setup = setupArkEnv(options);\n\t\t\tconst resolved = await nextConfig(phase, context);\n\t\t\treturn applyArkEnvAliases(resolved, options, setup);\n\t\t};\n\t}\n\n\tif (nextConfig && typeof nextConfig === \"object\") {\n\t\tconst setup = setupArkEnv(options);\n\t\treturn applyArkEnvAliases(nextConfig, options, setup);\n\t}\n\n\treturn nextConfig;\n}\n"],"mappings":"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"}