@deltabox/toolchain 0.0.0-stage → 1.0.7

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.
Files changed (235) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/LICENSE +373 -0
  3. package/README.md +235 -2
  4. package/dist/_virtual/_rolldown/runtime.js +1 -0
  5. package/dist/biome.d.ts +4 -0
  6. package/dist/biome.js +1 -0
  7. package/dist/changelog.d.ts +17 -0
  8. package/dist/changelog.js +1 -0
  9. package/dist/cli/commands/index.js +1 -0
  10. package/dist/cli/commands/projects.js +1 -0
  11. package/dist/cli/commands/providers.js +1 -0
  12. package/dist/cli/commands/reset.js +1 -0
  13. package/dist/cli/commands/shared.js +1 -0
  14. package/dist/cli/commands/sync.js +1 -0
  15. package/dist/cli/commands/watch.js +1 -0
  16. package/dist/cli/context.js +1 -0
  17. package/dist/cli/index.d.ts +15 -0
  18. package/dist/cli/index.js +2 -0
  19. package/dist/cli/options.js +1 -0
  20. package/dist/cli/register.d.ts +14 -0
  21. package/dist/cli/register.js +1 -0
  22. package/dist/config.d.ts +18 -0
  23. package/dist/config.js +1 -0
  24. package/dist/core.d.ts +13 -0
  25. package/dist/core.js +1 -0
  26. package/dist/index.d.ts +31 -0
  27. package/dist/index.js +1 -0
  28. package/dist/migrate.d.ts +15 -0
  29. package/dist/migrate.js +1 -0
  30. package/dist/package.js +1 -0
  31. package/dist/packages/biome/src/config.js +1 -0
  32. package/dist/packages/biome/src/index.d.ts +34 -0
  33. package/dist/packages/biome/src/index.js +1 -0
  34. package/dist/packages/biome/src/vscode-settings.js +1 -0
  35. package/dist/packages/changelog/src/cli/index.d.ts +8 -0
  36. package/dist/packages/changelog/src/cli/index.js +1 -0
  37. package/dist/packages/changelog/src/index.d.ts +19 -0
  38. package/dist/packages/changelog/src/index.js +1 -0
  39. package/dist/packages/changelog/src/run-workflows.d.ts +35 -0
  40. package/dist/packages/changelog/src/run-workflows.js +1 -0
  41. package/dist/packages/changelog/src/run.d.ts +14 -0
  42. package/dist/packages/changelog/src/run.js +1 -0
  43. package/dist/packages/changelog/src/sync.d.ts +18 -0
  44. package/dist/packages/changelog/src/sync.js +1 -0
  45. package/dist/packages/changelog/src/templates.d.ts +27 -0
  46. package/dist/packages/changelog/src/templates.js +27 -0
  47. package/dist/packages/changelog/src/utils/args.d.ts +7 -0
  48. package/dist/packages/changelog/src/utils/args.js +1 -0
  49. package/dist/packages/changelog/src/utils/format.d.ts +27 -0
  50. package/dist/packages/changelog/src/utils/format.js +5 -0
  51. package/dist/packages/changelog/src/utils/git.d.ts +9 -0
  52. package/dist/packages/changelog/src/utils/git.js +1 -0
  53. package/dist/packages/changelog/src/utils/packages.js +4 -0
  54. package/dist/packages/changelog/src/utils/reformat.d.ts +9 -0
  55. package/dist/packages/changelog/src/utils/reformat.js +6 -0
  56. package/dist/packages/changelog/src/utils/repo.js +1 -0
  57. package/dist/packages/changelog/src/utils/summary.d.ts +7 -0
  58. package/dist/packages/changelog/src/utils/summary.js +1 -0
  59. package/dist/packages/changelog/src/utils/types.d.ts +58 -0
  60. package/dist/packages/changelog/src/utils/version.d.ts +6 -0
  61. package/dist/packages/changelog/src/utils/version.js +14 -0
  62. package/dist/packages/changelog/src/utils/write.js +1 -0
  63. package/dist/packages/changelog/src/workflows.d.ts +51 -0
  64. package/dist/packages/changelog/src/workflows.js +5 -0
  65. package/dist/packages/config/src/cli/index.d.ts +28 -0
  66. package/dist/packages/config/src/cli/index.js +1 -0
  67. package/dist/packages/config/src/collect.d.ts +19 -0
  68. package/dist/packages/config/src/collect.js +1 -0
  69. package/dist/packages/config/src/config-json.d.ts +33 -0
  70. package/dist/packages/config/src/config-json.js +1 -0
  71. package/dist/packages/config/src/engine.d.ts +56 -0
  72. package/dist/packages/config/src/engine.js +1 -0
  73. package/dist/packages/config/src/env-file.d.ts +33 -0
  74. package/dist/packages/config/src/env-file.js +3 -0
  75. package/dist/packages/config/src/env.d.ts +31 -0
  76. package/dist/packages/config/src/env.js +1 -0
  77. package/dist/packages/config/src/generators/cli.d.ts +78 -0
  78. package/dist/packages/config/src/generators/cli.js +1 -0
  79. package/dist/packages/config/src/generators/env.d.ts +42 -0
  80. package/dist/packages/config/src/generators/env.js +23 -0
  81. package/dist/packages/config/src/generators/index.d.ts +8 -0
  82. package/dist/packages/config/src/generators/index.js +1 -0
  83. package/dist/packages/config/src/generators/json.d.ts +24 -0
  84. package/dist/packages/config/src/generators/json.js +1 -0
  85. package/dist/packages/config/src/generators/markdown.d.ts +77 -0
  86. package/dist/packages/config/src/generators/markdown.js +27 -0
  87. package/dist/packages/config/src/generators/types.d.ts +32 -0
  88. package/dist/packages/config/src/generators/types.js +1 -0
  89. package/dist/packages/config/src/index.d.ts +21 -0
  90. package/dist/packages/config/src/index.js +1 -0
  91. package/dist/packages/config/src/root.d.ts +11 -0
  92. package/dist/packages/config/src/root.js +1 -0
  93. package/dist/packages/config/src/schema.d.ts +34 -0
  94. package/dist/packages/config/src/schema.js +1 -0
  95. package/dist/packages/config/src/types.d.ts +75 -0
  96. package/dist/packages/config/src/types.js +1 -0
  97. package/dist/packages/core/src/graph.d.ts +55 -0
  98. package/dist/packages/core/src/graph.js +1 -0
  99. package/dist/packages/core/src/index.d.ts +16 -0
  100. package/dist/packages/core/src/index.js +1 -0
  101. package/dist/packages/core/src/loader.d.ts +27 -0
  102. package/dist/packages/core/src/loader.js +1 -0
  103. package/dist/packages/core/src/manifest.d.ts +17 -0
  104. package/dist/packages/core/src/manifest.js +1 -0
  105. package/dist/packages/core/src/project-type.d.ts +14 -0
  106. package/dist/packages/core/src/project-type.js +1 -0
  107. package/dist/packages/core/src/reset.d.ts +51 -0
  108. package/dist/packages/core/src/reset.js +1 -0
  109. package/dist/packages/core/src/select.d.ts +32 -0
  110. package/dist/packages/core/src/select.js +1 -0
  111. package/dist/packages/core/src/sync.d.ts +42 -0
  112. package/dist/packages/core/src/sync.js +1 -0
  113. package/dist/packages/core/src/vscode.d.ts +27 -0
  114. package/dist/packages/core/src/vscode.js +1 -0
  115. package/dist/packages/core/src/watch.d.ts +17 -0
  116. package/dist/packages/core/src/watch.js +1 -0
  117. package/dist/packages/migrate/src/biome.d.ts +18 -0
  118. package/dist/packages/migrate/src/biome.js +2 -0
  119. package/dist/packages/migrate/src/check.d.ts +14 -0
  120. package/dist/packages/migrate/src/check.js +1 -0
  121. package/dist/packages/migrate/src/cli/index.d.ts +12 -0
  122. package/dist/packages/migrate/src/cli/index.js +1 -0
  123. package/dist/packages/migrate/src/dprint.d.ts +18 -0
  124. package/dist/packages/migrate/src/dprint.js +1 -0
  125. package/dist/packages/migrate/src/eslint.d.ts +24 -0
  126. package/dist/packages/migrate/src/eslint.js +1 -0
  127. package/dist/packages/migrate/src/index.d.ts +14 -0
  128. package/dist/packages/migrate/src/index.js +1 -0
  129. package/dist/packages/migrate/src/oxfmt-map.d.ts +28 -0
  130. package/dist/packages/migrate/src/oxfmt-map.js +1 -0
  131. package/dist/packages/migrate/src/oxlint-map.d.ts +22 -0
  132. package/dist/packages/migrate/src/oxlint-map.js +1 -0
  133. package/dist/packages/migrate/src/prettier.d.ts +20 -0
  134. package/dist/packages/migrate/src/prettier.js +2 -0
  135. package/dist/packages/migrate/src/registry.d.ts +26 -0
  136. package/dist/packages/migrate/src/registry.js +1 -0
  137. package/dist/packages/migrate/src/types.d.ts +75 -0
  138. package/dist/packages/migrate/src/vite-target.d.ts +31 -0
  139. package/dist/packages/migrate/src/vite-target.js +5 -0
  140. package/dist/packages/project/src/cli/index.d.ts +8 -0
  141. package/dist/packages/project/src/cli/index.js +1 -0
  142. package/dist/packages/project/src/config.d.ts +55 -0
  143. package/dist/packages/project/src/config.js +1 -0
  144. package/dist/packages/project/src/index.d.ts +10 -0
  145. package/dist/packages/project/src/index.js +1 -0
  146. package/dist/packages/project/src/typescript.d.ts +66 -0
  147. package/dist/packages/project/src/typescript.js +22 -0
  148. package/dist/packages/shared/src/config-schema.d.ts +2039 -0
  149. package/dist/packages/shared/src/config-schema.js +1 -0
  150. package/dist/packages/shared/src/fs-utils.d.ts +18 -0
  151. package/dist/packages/shared/src/fs-utils.js +1 -0
  152. package/dist/packages/shared/src/index.d.ts +17 -0
  153. package/dist/packages/shared/src/index.js +1 -0
  154. package/dist/packages/shared/src/object-utils.d.ts +15 -0
  155. package/dist/packages/shared/src/object-utils.js +1 -0
  156. package/dist/packages/shared/src/provider.d.ts +66 -0
  157. package/dist/packages/shared/src/provider.js +1 -0
  158. package/dist/packages/shared/src/run.d.ts +26 -0
  159. package/dist/packages/shared/src/run.js +1 -0
  160. package/dist/packages/shared/src/string-utils.d.ts +52 -0
  161. package/dist/packages/shared/src/string-utils.js +3 -0
  162. package/dist/packages/shared/src/template.d.ts +53 -0
  163. package/dist/packages/shared/src/template.js +1 -0
  164. package/dist/packages/shared/src/toolchain.d.ts +159 -0
  165. package/dist/packages/shared/src/toolchain.js +1 -0
  166. package/dist/packages/shared/src/types.d.ts +100 -0
  167. package/dist/packages/shared/src/yaml.d.ts +17 -0
  168. package/dist/packages/shared/src/yaml.js +5 -0
  169. package/dist/packages/template/src/builtin.d.ts +10 -0
  170. package/dist/packages/template/src/builtin.js +1 -0
  171. package/dist/packages/template/src/cli/index.d.ts +8 -0
  172. package/dist/packages/template/src/cli/index.js +1 -0
  173. package/dist/packages/template/src/index.d.ts +10 -0
  174. package/dist/packages/template/src/index.js +1 -0
  175. package/dist/packages/template/src/local.d.ts +20 -0
  176. package/dist/packages/template/src/local.js +1 -0
  177. package/dist/packages/template/src/online.d.ts +17 -0
  178. package/dist/packages/template/src/online.js +1 -0
  179. package/dist/packages/template/src/registry.d.ts +48 -0
  180. package/dist/packages/template/src/registry.js +1 -0
  181. package/dist/packages/template/src/scaffold.d.ts +25 -0
  182. package/dist/packages/template/src/scaffold.js +1 -0
  183. package/dist/packages/template/src/types.d.ts +59 -0
  184. package/dist/packages/tsconfig/src/cli/generate/index.d.ts +35 -0
  185. package/dist/packages/tsconfig/src/cli/generate/index.js +1 -0
  186. package/dist/packages/tsconfig/src/cli/generate/utils.d.ts +43 -0
  187. package/dist/packages/tsconfig/src/cli/generate/utils.js +1 -0
  188. package/dist/packages/tsconfig/src/cli/index.d.ts +11 -0
  189. package/dist/packages/tsconfig/src/cli/index.js +1 -0
  190. package/dist/packages/tsconfig/src/index.d.ts +10 -0
  191. package/dist/packages/tsconfig/src/index.js +1 -0
  192. package/dist/packages/tsconfig/src/sync.d.ts +15 -0
  193. package/dist/packages/tsconfig/src/sync.js +1 -0
  194. package/dist/packages/tsconfig/src/templates/tsconfig.base.js +1 -0
  195. package/dist/packages/tsconfig/src/templates/tsconfig.build.js +1 -0
  196. package/dist/packages/tsconfig/src/templates/tsconfig.default.js +1 -0
  197. package/dist/packages/tsconfig/src/templates.d.ts +38 -0
  198. package/dist/packages/tsconfig/src/templates.js +1 -0
  199. package/dist/packages/tsdown/src/cleanup.d.ts +17 -0
  200. package/dist/packages/tsdown/src/cleanup.js +1 -0
  201. package/dist/packages/tsdown/src/cli/index.d.ts +11 -0
  202. package/dist/packages/tsdown/src/cli/index.js +1 -0
  203. package/dist/packages/tsdown/src/config/node.d.ts +37 -0
  204. package/dist/packages/tsdown/src/config/node.js +3 -0
  205. package/dist/packages/tsdown/src/index.d.ts +9 -0
  206. package/dist/packages/tsdown/src/index.js +1 -0
  207. package/dist/packages/vite/src/cli/index.d.ts +8 -0
  208. package/dist/packages/vite/src/cli/index.js +1 -0
  209. package/dist/packages/vite/src/commands.d.ts +29 -0
  210. package/dist/packages/vite/src/commands.js +1 -0
  211. package/dist/packages/vite/src/index.d.ts +8 -0
  212. package/dist/packages/vite/src/index.js +1 -0
  213. package/dist/packages/vite/src/provider.d.ts +11 -0
  214. package/dist/packages/vite/src/provider.js +1 -0
  215. package/dist/packages/vite/src/sync.d.ts +25 -0
  216. package/dist/packages/vite/src/sync.js +2 -0
  217. package/dist/packages/vite/src/vp.d.ts +59 -0
  218. package/dist/packages/vite/src/vp.js +1 -0
  219. package/dist/project.d.ts +7 -0
  220. package/dist/project.js +1 -0
  221. package/dist/providers.d.ts +11 -0
  222. package/dist/providers.js +1 -0
  223. package/dist/shared.d.ts +14 -0
  224. package/dist/shared.js +1 -0
  225. package/dist/sync.d.ts +12 -0
  226. package/dist/sync.js +1 -0
  227. package/dist/template.d.ts +11 -0
  228. package/dist/template.js +1 -0
  229. package/dist/tsconfig.d.ts +8 -0
  230. package/dist/tsconfig.js +1 -0
  231. package/dist/tsdown.d.ts +7 -0
  232. package/dist/tsdown.js +1 -0
  233. package/dist/vite.d.ts +9 -0
  234. package/dist/vite.js +1 -0
  235. package/package.json +114 -3
@@ -0,0 +1,56 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ConfigEngineOptions, ConfigScopes, EnvVarDef } from "./types.js";
4
+ import { BuildConfigJsonOptions, ConfigJsonDoc } from "./config-json.js";
5
+ import { EnvFileOptions } from "./env-file.js";
6
+ import { CliOptionDef, GenerateCliOptionsOptions } from "./generators/cli.js";
7
+ import { GenerateEnvTypesOptions } from "./generators/env.js";
8
+ import { GenerateJsonSchemaOptions } from "./generators/json.js";
9
+ import { GenerateMarkdownOptions } from "./generators/markdown.js";
10
+ import { GenerateTypesOptions } from "./generators/types.js";
11
+ //#region packages/config/src/engine.d.ts
12
+ /** The bound, reusable config engine. */
13
+ export interface ConfigEngine {
14
+ readonly scopes: ConfigScopes;
15
+ readonly envPrefix: string;
16
+ readonly baseGroup: string;
17
+ readonly root: string;
18
+ /** Every env-var-backed leaf across the registered scopes. */
19
+ collectEnvVars(): EnvVarDef[];
20
+ /** The names of the required env vars for a scope. */
21
+ requiredEnvVars(scope: string): string[];
22
+ /** Render `.env` content. */
23
+ renderEnvFile(options?: EnvFileOptions): string;
24
+ /** Write a `.env` file. Returns the path written. */
25
+ writeEnvFile(options: EnvFileOptions & {
26
+ output: string;
27
+ }): string;
28
+ /** Build the config metadata JSON document. */
29
+ buildConfigJson(options?: BuildConfigJsonOptions): ConfigJsonDoc;
30
+ /** Build (and optionally write) the untyped JSON Schema document. */
31
+ generateJsonSchema(options?: GenerateJsonSchemaOptions): Promise<Record<string, unknown>>;
32
+ /** Write the JSON Schema document. Returns the path written. */
33
+ writeJsonSchema(options: GenerateJsonSchemaOptions & {
34
+ output: string;
35
+ }): Promise<string>;
36
+ /** Render every config type file, keyed by scope name. */
37
+ renderConfigTypes(options?: GenerateTypesOptions): Record<string, string>;
38
+ /** Write the config type files into `outputDir`. */
39
+ writeConfigTypes(options: GenerateTypesOptions & {
40
+ outputDir: string;
41
+ }): string[];
42
+ /** Write the env type files into `outputDir`. */
43
+ writeEnvTypes(options: GenerateEnvTypesOptions & {
44
+ outputDir: string;
45
+ }): string[];
46
+ /** Write the markdown reference into `outDir`. */
47
+ writeMarkdown(options: GenerateMarkdownOptions & {
48
+ outDir: string;
49
+ }): string[];
50
+ /** Generate (and optionally write) the CLI option definitions. */
51
+ generateCliOptions(options?: GenerateCliOptionsOptions): CliOptionDef[];
52
+ }
53
+ /** Create a reusable config engine. */
54
+ export declare function createConfigEngine(options: ConfigEngineOptions): ConfigEngine;
55
+ //#endregion
56
+ export type { ConfigEngineOptions, ConfigScopes };
@@ -0,0 +1 @@
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{collectEnvVars as t,collectRequiredEnvVars as n}from"./collect.js";import{buildConfigJson as r}from"./config-json.js";import{generateEnvFile as i}from"./env-file.js";import{generateCliOptions as a}from"./generators/cli.js";import{generateEnvTypes as o}from"./generators/env.js";import{generateConfigJsonSchema as s,generateJsonSchemaFile as c}from"./generators/json.js";import{generateConfigMarkdown as l}from"./generators/markdown.js";import{generateConfigTypes as u,renderAllConfigTypes as d}from"./generators/types.js";import{findProjectRoot as f}from"./root.js";import p from"node:fs";function m(m){let h=m.scopes,g=m.envPrefix??`APP_`,_=m.baseGroup??`base`,v=m.root??f(),y=m.envPathOf;return{scopes:h,envPrefix:g,baseGroup:_,root:v,collectEnvVars:()=>t(h,g,{envPathOf:y}),requiredEnvVars:e=>n(h,e,g,{envPathOf:y}),renderEnvFile:(e={})=>i(h,{envPrefix:g,envPathOf:y,...e}),writeEnvFile:t=>{let n=i(h,{envPrefix:g,envPathOf:y,...t});return p.mkdirSync(e.dirname(t.output),{recursive:!0}),p.writeFileSync(t.output,n,`utf-8`),t.output},buildConfigJson:(e={})=>r(h,{envPrefix:g,envPathOf:y,...e}),generateJsonSchema:(e={})=>s(h,{baseGroup:_,...e}),writeJsonSchema:e=>c(h,{baseGroup:_,...e}),renderConfigTypes:(e={})=>d(h,{baseGroup:_,...e}),writeConfigTypes:e=>u(h,{baseGroup:_,...e}),writeEnvTypes:e=>o(h,{envPrefix:g,envPathOf:y,...e}),writeMarkdown:e=>l(h,{baseGroup:_,envPrefix:g,envPathOf:y,...e}),generateCliOptions:(e={})=>a(h,{envPrefix:g,envPathOf:y,...e})}}export{m as createConfigEngine};
@@ -0,0 +1,33 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ConfigScopes } from "./types.js";
4
+ import { CollectEnvVarsOptions } from "./collect.js";
5
+ //#region packages/config/src/env-file.d.ts
6
+ export interface EnvFileOptions {
7
+ /** Env vars to include (defaults to all). */
8
+ include?: string[];
9
+ /** Env vars to exclude. */
10
+ exclude?: string[];
11
+ /** Default values to inject (overrides the schema defaults). */
12
+ values?: Record<string, string>;
13
+ /** Comment banner placed at the top of the file. */
14
+ header?: string;
15
+ /** Only emit these scopes (defaults to every registered scope). */
16
+ scopes?: string[];
17
+ /** The env-var prefix (default `APP_`). */
18
+ envPrefix?: string;
19
+ /** Omit descriptions (emit bare assignments). */
20
+ bare?: boolean;
21
+ /** Extra raw `NAME=value` lines appended after the schema vars. */
22
+ extra?: Record<string, string>;
23
+ /** The characters wrapping a scope's section header (default `----`). */
24
+ scopeSeparator?: string;
25
+ /** Custom env-name -> dotted-path derivation. */
26
+ envPathOf?: CollectEnvVarsOptions['envPathOf'];
27
+ }
28
+ /**
29
+ * Generate `.env` content from the config schemas. Secrets and required-without-
30
+ * default vars are emitted blank so operators fill them in.
31
+ */
32
+ export declare function generateEnvFile(scopes: ConfigScopes, options?: EnvFileOptions): string;
33
+ //#endregion
@@ -0,0 +1,3 @@
1
+ import"node:path";import"node:url";import.meta.url;import{collectEnvVars as e}from"./collect.js";function t(e){let t=e.default;return Array.isArray(t)?t.join(`,`):typeof t==`boolean`?t?`true`:`false`:typeof t==`number`?String(t):typeof t==`object`&&t?JSON.stringify(t):t===void 0?``:String(t)}function n(n,r={}){let i=r.envPrefix??`APP_`,a=r.scopeSeparator??`----`,o=e(n,i,{envPathOf:r.envPathOf}),s=r.scopes??Object.keys(n),c=o.filter(e=>s.includes(e.scope)&&(!r.include||r.include.includes(e.name))&&!r.exclude?.includes(e.name)),l=[];r.header&&l.push(r.header,``);let u;for(let e of c){if(e.scope!==u&&(u!==void 0&&l.push(``),l.push(`# ${a} ${e.scope.toUpperCase()} ${a}`),u=e.scope),!r.bare&&e.description)for(let t of e.description.split(`
2
+ `))l.push(`# ${t}`);let n=r.values?.[e.name];e.secret&&n===void 0?l.push(`# ${e.name}=`):l.push(`${e.name}=${n??t(e)}`)}if(r.extra){let e=Object.entries(r.extra).filter(([e])=>!c.some(t=>t.name===e)).map(([e,t])=>`${e}=${t}`);e.length&&l.push(``,`# ${a} EXTRA ${a}`,...e)}return`${l.join(`
3
+ `)}\n`}export{n as generateEnvFile};
@@ -0,0 +1,31 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ //#region packages/config/src/env.d.ts
4
+ /**
5
+ * Low-level configuration helpers: env-tree parsing, typed accessors and
6
+ * override merging. Free of Node builtins so browser consumers can import the
7
+ * frontend resolver without pulling `node:path` / `node:url` into a bundle.
8
+ */
9
+ /** A flat env source (process.env, import.meta.env or a plain object). */
10
+ export type EnvSource = Record<string, string | undefined>;
11
+ /** A nested tree produced by folding `PREFIX_*` vars on `_`. */
12
+ export type EnvTree = Record<string, unknown>;
13
+ /** Parse a flat env source into the nested `PREFIX_*` tree. */
14
+ export declare function parseEnvTree(env?: EnvSource, prefix?: string): EnvTree;
15
+ /** Read a dotted path out of an env tree. */
16
+ export declare function readEnvPath(tree: EnvTree, path: string): unknown;
17
+ /** Read a string value, falling back when unset or empty. */
18
+ export declare function envString(tree: EnvTree, path: string, fallback?: string): string;
19
+ /** Read an integer value, falling back when unset or not a number. */
20
+ export declare function envInt(tree: EnvTree, path: string, fallback: number): number;
21
+ /** Read a boolean value. Accepts true/false/1/0/yes/no/on/off. */
22
+ export declare function envBool(tree: EnvTree, path: string, fallback: boolean): boolean;
23
+ /** Read a comma-separated list, filtering empty entries. */
24
+ export declare function envList(tree: EnvTree, path: string, fallback?: string[]): string[];
25
+ /** Read `Header=value,...` into a lowercase-keyed record. */
26
+ export declare function envMap(tree: EnvTree, path: string): Record<string, string>;
27
+ /** Recursively merge typed overrides over a base object (shallow per level). */
28
+ export declare function applyOverrides<T extends object>(base: T, overrides?: Partial<T>): T;
29
+ /** Trim trailing slashes from a URL-ish string. */
30
+ export declare function trimTrailingSlashes(value: string): string;
31
+ //#endregion
@@ -0,0 +1 @@
1
+ import"node:path";import"node:url";import.meta.url;function e(e={},t=`APP_`){let n={};for(let[r,i]of Object.entries(e)){if(!r.startsWith(t)||i===void 0)continue;let e=r.slice(t.length).toLowerCase().split(`_`),a=n;for(let t=0;t<e.length-1;t+=1){let n=e[t]??``;(typeof a[n]!=`object`||a[n]===null)&&(a[n]={}),a=a[n]}a[e[e.length-1]??``]=i}return n}function t(e,t){let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n)return;n=n[e]}return n}function n(e,n,r=``){let i=t(e,n);return typeof i==`string`&&i.trim()!==``?i:r}function r(e,n,r){let i=t(e,n);if(typeof i!=`string`||i.trim()===``)return r;let a=Number.parseInt(i,10);return Number.isFinite(a)?a:r}function i(e,n,r){let i=t(e,n);if(typeof i!=`string`||i.trim()===``)return r;let a=i.trim().toLowerCase();return[`true`,`1`,`yes`,`on`].includes(a)?!0:![`false`,`0`,`no`,`off`].includes(a)&&r}function a(e,n,r=[]){let i=t(e,n);return typeof i!=`string`||i.trim()===``?r:i.split(`,`).map(e=>e.trim()).filter(Boolean)}function o(e,t){let n={};for(let r of a(e,t,[])){let e=r.indexOf(`=`);e!==-1&&(n[r.slice(0,e).trim().toLowerCase()]=r.slice(e+1).trim())}return n}function s(e,t){if(!t)return e;let n={...e};for(let[r,i]of Object.entries(t)){if(i===void 0)continue;let t=e[r];n[r]=t&&typeof t==`object`&&!Array.isArray(t)&&i&&typeof i==`object`&&!Array.isArray(i)?s(t,i):i}return n}function c(e){return e.replace(/\/+$/,``)}export{s as applyOverrides,i as envBool,r as envInt,a as envList,o as envMap,n as envString,e as parseEnvTree,t as readEnvPath,c as trimTrailingSlashes};
@@ -0,0 +1,78 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ConfigScopes } from "../types.js";
4
+ import { CollectEnvVarsOptions } from "../collect.js";
5
+ import { ParseArgsOptionsConfig } from "node:util";
6
+ //#region packages/config/src/generators/cli.d.ts
7
+ /** Flag-shaping options shared by every CLI helper. */
8
+ export interface CliFlagOptions {
9
+ /** The env-var prefix (default `APP_`). */
10
+ envPrefix?: string;
11
+ /** Shorthand flags keyed by env var name (eg. `{ APP_TOKEN: 't' }`). */
12
+ shortFlags?: Record<string, string>;
13
+ /** Custom env-name -> dotted-path derivation. */
14
+ envPathOf?: CollectEnvVarsOptions['envPathOf'];
15
+ }
16
+ /** A generated CLI option definition for one env var. */
17
+ export interface CliOptionDef {
18
+ /** CLI flag, e.g. `--base-url`. */
19
+ flag: string;
20
+ /** Shorthand flag, e.g. `-u`. */
21
+ short?: string;
22
+ /** The env var the flag reads, e.g. `APP_CLI_BASE_URL`. */
23
+ env: string;
24
+ /** The resolved value type (`string`, `number`, `boolean`, ...). */
25
+ type: string;
26
+ /** Human-readable description. */
27
+ description?: string;
28
+ /** Never echo a real value for this option (secrets). */
29
+ secret?: boolean;
30
+ /** The resolved default value, when one is configured. */
31
+ default?: string;
32
+ }
33
+ /** The long flag name (without dashes) for an env var. */
34
+ export declare function flagOf(env: string, options?: CliFlagOptions): string;
35
+ /** The long flag (e.g. `--base-url`) for an env var. */
36
+ export declare function cliFlagOf(env: string, options?: CliFlagOptions): string;
37
+ /** The shorthand flag (e.g. `-u`) for an env var, when configured. */
38
+ export declare function cliShortOf(env: string, options?: CliFlagOptions): string | undefined;
39
+ /** A flag label such as `-u, --base-url`. */
40
+ export declare function cliFlagLabel(env: string, options?: CliFlagOptions): string;
41
+ export interface GenerateCliOptionsOptions extends CliFlagOptions {
42
+ /** The scope whose env vars become flags (default `cli`). */
43
+ scope?: string;
44
+ /** Output file path to write the options as JSON. */
45
+ output?: string;
46
+ }
47
+ /** Generate the CLI option definitions for a scope's env vars. */
48
+ export declare function generateCliOptions(scopes: ConfigScopes, options?: GenerateCliOptionsOptions): CliOptionDef[];
49
+ /** The typed `values` of a parsed CLI args result. */
50
+ export type CliArgsValues = Record<string, string | undefined>;
51
+ /** A parsed CLI args result (node `parseArgs` output). */
52
+ export interface CliArgsResult {
53
+ values: CliArgsValues;
54
+ positionals: string[];
55
+ }
56
+ /** A generated `node:util` `parseArgs` option entry. */
57
+ export interface CliArgsOptionConfig {
58
+ type: 'string';
59
+ short?: string;
60
+ default?: string;
61
+ }
62
+ /** Build the `options` config for `node:util`'s `parseArgs`. */
63
+ export declare function generateCliArgsOptions(defs: CliOptionDef[]): Record<string, CliArgsOptionConfig>;
64
+ /** A generated CLI args parser bound to a set of option definitions. */
65
+ export interface CliArgsParser {
66
+ options: ParseArgsOptionsConfig;
67
+ parse: (args?: string[]) => CliArgsResult;
68
+ /** Map a parsed result into a `{ [flag]: value }` record of provided flags. */
69
+ toConfig: (result?: CliArgsResult) => CliArgsValues;
70
+ }
71
+ /**
72
+ * Create a CLI args parser from generated option definitions. The generated
73
+ * `parse` uses `node:util`'s `parseArgs` and returns a typed result.
74
+ */
75
+ export declare function createCliArgsParser(defs: CliOptionDef[], parseOptions?: {
76
+ strict?: boolean;
77
+ }): CliArgsParser;
78
+ //#endregion
@@ -0,0 +1 @@
1
+ import"node:path";import"node:url";import.meta.url;import{formatCliFlag as e}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{collectEnvVars as t}from"../collect.js";import n from"node:fs";import{parseArgs as r}from"node:util";function i(t,n={}){return e(t,n.envPrefix??`APP_`)}function a(e,t={}){return`--${i(e,t)}`}function o(e,t={}){let n=t.shortFlags?.[e];return n?`-${n}`:void 0}function s(e,t={}){let n=a(e,t),r=o(e,t);return r?`${r}, ${n}`:n}function c(e,r={}){let i=r.scope??`cli`,s=[];for(let n of t(e,r.envPrefix,{envPathOf:r.envPathOf}).filter(e=>e.scope===i)){let e=o(n.name,r);s.push({flag:a(n.name,r),env:n.name,type:n.envType??`string`,...e?{short:e}:{},...n.description?{description:n.description}:{},...n.secret?{secret:!0}:{},...n.default!==void 0&&!n.secret?{default:String(n.default)}:{}})}return r.output&&n.writeFileSync(r.output,`${JSON.stringify(s,null,4)}\n`,`utf-8`),s}function l(e){return Object.fromEntries(e.map(e=>[e.flag.replace(/^--/,``),{type:`string`,...e.short?{short:e.short.replace(/^-/,``)}:{},...e.default?{default:e.default}:{}}]))}function u(e,t){let n=l(e);return{options:n,parse:(e=process.argv.slice(2))=>r({args:e,options:n,strict:t?.strict??!0}),toConfig:e=>{let t=e?.values??{},n={};for(let[e,r]of Object.entries(t))r!==void 0&&(n[e]=r);return n}}}export{s as cliFlagLabel,a as cliFlagOf,o as cliShortOf,u as createCliArgsParser,i as flagOf,l as generateCliArgsOptions,c as generateCliOptions};
@@ -0,0 +1,42 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ConfigScopes } from "../types.js";
4
+ import { CollectEnvVarsOptions } from "../collect.js";
5
+ //#region packages/config/src/generators/env.d.ts
6
+ export interface GenerateEnvTypesOptions {
7
+ /** Output directory. When omitted, nothing is written. */
8
+ outputDir?: string;
9
+ /** The env-var prefix (default `APP_`). */
10
+ envPrefix?: string;
11
+ /** The `process.env` interface name (default `AppEnv`). */
12
+ envInterfaceName?: string;
13
+ /** The `import.meta.env` interface name (default `AppViteEnv`). */
14
+ viteEnvInterfaceName?: string;
15
+ /** The generated types file name (default `env.ts`). */
16
+ envFile?: string;
17
+ /** The generated ambient file name (default `env.d.ts`). */
18
+ dtsFile?: string;
19
+ /** The import specifier the `.d.ts` uses for the env types. */
20
+ importPath?: string;
21
+ /** A header comment prepended to both files. */
22
+ header?: string;
23
+ /** A raw (verbatim) header replacing the generated one in `env.ts`. */
24
+ envHeader?: string;
25
+ /** A raw (verbatim) header replacing the generated one in the `.d.ts`. */
26
+ dtsHeader?: string;
27
+ /** The doc comment above the `process.env` interface. */
28
+ envComment?: string;
29
+ /** Add a `declare module 'vite'` augmentation to the `.d.ts`. */
30
+ augmentVite?: boolean;
31
+ /** Custom env-name -> dotted-path derivation. */
32
+ envPathOf?: CollectEnvVarsOptions['envPathOf'];
33
+ }
34
+ /** Render the `env.ts` content (the env + vite-env interfaces). */
35
+ export declare function generateEnv(scopes: ConfigScopes, options?: GenerateEnvTypesOptions): string;
36
+ /** Render the ambient `.d.ts` content. */
37
+ export declare function generateEnvDts(options?: GenerateEnvTypesOptions): string;
38
+ /** Generate `env.ts` + the ambient `.d.ts` into `outputDir`. Returns the paths. */
39
+ export declare function generateEnvTypes(scopes: ConfigScopes, options: GenerateEnvTypesOptions & {
40
+ outputDir: string;
41
+ }): string[];
42
+ //#endregion
@@ -0,0 +1,23 @@
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{collectEnvVars as t}from"../collect.js";import n from"node:fs";function r(e){return e??`Generated env typing — DO NOT EDIT.`}function i(e,n={}){let i=n.envPrefix??`APP_`,a=n.envInterfaceName??`AppEnv`,o=n.viteEnvInterfaceName??`AppViteEnv`,s=t(e,i,{envPathOf:n.envPathOf}),c=s.filter(e=>e.scope!==`frontend`),l=s.filter(e=>e.public),u=n.envHeader?[n.envHeader,``]:[`/**`,` * ${r(n.header)}`,` */`,``];u.push(`/** ${n.envComment??"Environment variables typed on `process.env`."} */`,`export interface ${a} {`);for(let e of c)u.push(` /** ${(e.description??``).replace(/\n/g,` `)} */`),u.push(` ${e.name}?: string;`);u.push(`}`),u.push(``),u.push("/** Public frontend environment variables typed on `import.meta.env`. */"),u.push(`export interface ${o} {`);for(let e of l)u.push(` /** ${(e.description??``).replace(/\n/g,` `)} */`),u.push(` ${e.name}?: string;`);return u.push(`}`),`${u.join(`
2
+ `).trimEnd()}\n`}function a(e={}){let t=e.envInterfaceName??`AppEnv`,n=e.viteEnvInterfaceName??`AppViteEnv`,i=e.importPath??`./env.js`;return`${e.dtsHeader?`${e.dtsHeader}\n`:`/**
3
+ * ${r(e.header)}
4
+ *
5
+ * Re-exports the generated env types onto \`process.env\` and
6
+ * \`import.meta.env\` so environment variables type-check everywhere.
7
+ */
8
+ `}import type { ${t}, ${n} } from '${i}';
9
+
10
+ declare global {
11
+ namespace NodeJS {
12
+ interface ProcessEnv extends ${t} {}
13
+ }
14
+
15
+ interface ImportMetaEnv extends ${n} {}
16
+ }${e.augmentVite?`
17
+
18
+ declare module 'vite' {
19
+ interface ImportMetaEnv extends ${n} {}
20
+ }`:``}
21
+
22
+ export {};
23
+ `}function o(t,r){let o=e.join(r.outputDir,r.envFile??`env.ts`),s=e.join(r.outputDir,r.dtsFile??`env.d.ts`);return n.mkdirSync(r.outputDir,{recursive:!0}),n.writeFileSync(o,i(t,r),`utf-8`),n.writeFileSync(s,a(r),`utf-8`),[o,s]}export{i as generateEnv,a as generateEnvDts,o as generateEnvTypes};
@@ -0,0 +1,8 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, GenerateCliOptionsOptions, cliFlagLabel, cliFlagOf, cliShortOf, createCliArgsParser, flagOf, generateCliArgsOptions, generateCliOptions } from "./cli.js";
4
+ import { GenerateEnvTypesOptions, generateEnv, generateEnvDts, generateEnvTypes } from "./env.js";
5
+ import { GenerateJsonSchemaOptions, generateConfigJsonSchema, generateJsonSchemaFile } from "./json.js";
6
+ import { ConfigFileSection, GenerateMarkdownOptions, RenderConfigFileOptions, RenderMarkdownOptions, generateConfigMarkdown, renderConfigFileMarkdown, renderConfigIndex, renderScopeMarkdown } from "./markdown.js";
7
+ import { GenerateTypesOptions, generateConfigTypes, renderAllConfigTypes, renderConfigTypes, resolveScopeSchema } from "./types.js";
8
+ export { CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, ConfigFileSection, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownOptions, cliFlagLabel, cliFlagOf, cliShortOf, createCliArgsParser, flagOf, generateCliArgsOptions, generateCliOptions, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvTypes, generateJsonSchemaFile, renderAllConfigTypes, renderConfigFileMarkdown, renderConfigIndex, renderConfigTypes, renderScopeMarkdown, resolveScopeSchema };
@@ -0,0 +1 @@
1
+ import"node:path";import"node:url";import.meta.url;import{cliFlagLabel as e,cliFlagOf as t,cliShortOf as n,createCliArgsParser as r,flagOf as i,generateCliArgsOptions as a,generateCliOptions as o}from"./cli.js";import{generateEnv as s,generateEnvDts as c,generateEnvTypes as l}from"./env.js";import{generateConfigJsonSchema as u,generateJsonSchemaFile as d}from"./json.js";import{generateConfigMarkdown as f,renderConfigFileMarkdown as p,renderConfigIndex as m,renderScopeMarkdown as h}from"./markdown.js";import{generateConfigTypes as g,renderAllConfigTypes as _,renderConfigTypes as v,resolveScopeSchema as y}from"./types.js";export{e as cliFlagLabel,t as cliFlagOf,n as cliShortOf,r as createCliArgsParser,i as flagOf,a as generateCliArgsOptions,o as generateCliOptions,u as generateConfigJsonSchema,f as generateConfigMarkdown,g as generateConfigTypes,s as generateEnv,c as generateEnvDts,l as generateEnvTypes,d as generateJsonSchemaFile,_ as renderAllConfigTypes,p as renderConfigFileMarkdown,m as renderConfigIndex,v as renderConfigTypes,h as renderScopeMarkdown,y as resolveScopeSchema};
@@ -0,0 +1,24 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ConfigScopes } from "../types.js";
4
+ //#region packages/config/src/generators/json.d.ts
5
+ export interface GenerateJsonSchemaOptions {
6
+ /** Output file path. When omitted, nothing is written. */
7
+ output?: string;
8
+ /** The base group hoisted to the top level (default `base`). */
9
+ baseGroup?: string;
10
+ /** Document metadata overrides. */
11
+ id?: string;
12
+ title?: string;
13
+ description?: string;
14
+ }
15
+ /**
16
+ * Build the combined untyped JSON Schema document covering every scope, using
17
+ * untyped's `resolveSchema` on the definitions lowered from the Zod schemas.
18
+ */
19
+ export declare function generateConfigJsonSchema(scopes: ConfigScopes, options?: GenerateJsonSchemaOptions): Promise<Record<string, unknown>>;
20
+ /** Generate the JSON Schema document into `output`. Returns the path written. */
21
+ export declare function generateJsonSchemaFile(scopes: ConfigScopes, options: GenerateJsonSchemaOptions & {
22
+ output: string;
23
+ }): Promise<string>;
24
+ //#endregion
@@ -0,0 +1 @@
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{flattenBaseSchema as t,zodToUntypedDefinition as n}from"../schema.js";import r from"node:fs";import{resolveSchema as i}from"untyped";async function a(a,o={}){let s={};for(let[e,r]of Object.entries(a))s[e]=t(await i(n(r.zodSchema)),o.baseGroup);let c={$schema:`https://json-schema.org/draft/2020-12/schema`,$id:o.id??`https://example.com/schemas/config.json`,title:o.title??`Configuration`,description:o.description??`Every env-var-backed configuration value across all scopes.`,type:`object`,properties:s,required:Object.keys(a)};return o.output&&(r.mkdirSync(e.dirname(o.output),{recursive:!0}),r.writeFileSync(o.output,`${JSON.stringify(c,null,4)}\n`,`utf-8`)),c}async function o(e,t){return await a(e,t),t.output}export{a as generateConfigJsonSchema,o as generateJsonSchemaFile};
@@ -0,0 +1,77 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ConfigScopes } from "../types.js";
4
+ import { CollectEnvVarsOptions } from "../collect.js";
5
+ import { ZodType } from "zod";
6
+ import { Schema } from "untyped";
7
+ //#region packages/config/src/generators/markdown.d.ts
8
+ export interface RenderMarkdownOptions {
9
+ /** Output directory. When omitted, nothing is written. */
10
+ outDir?: string;
11
+ /** Page outline (defaults to `[2, 3, 4]`). */
12
+ outline?: number[];
13
+ /** The base group hoisted out of the nested groups (default `base`). */
14
+ baseGroup?: string;
15
+ /** The scope whose env vars render as CLI flags (default `cli`). */
16
+ cliScope?: string;
17
+ /** Env-var prefix (default `APP_`). */
18
+ envPrefix?: string;
19
+ /** Label overrides for the index page. */
20
+ labels?: {
21
+ required?: string;
22
+ core?: string;
23
+ title?: string;
24
+ };
25
+ /** A raw intro paragraph for the index page (replaces the default one). */
26
+ intro?: string;
27
+ /** A note shown above the required table (default: the standard sentence). */
28
+ requiredNote?: string;
29
+ /** A note shown above the core table (default: the standard sentence). */
30
+ coreNote?: string;
31
+ /** A "References" list appended to the index page. */
32
+ references?: {
33
+ label: string;
34
+ href: string;
35
+ }[];
36
+ /** Shorthand flags keyed by env var name (for the CLI scope). */
37
+ shortFlags?: Record<string, string>;
38
+ /** Custom env-name -> dotted-path derivation. */
39
+ envPathOf?: CollectEnvVarsOptions['envPathOf'];
40
+ }
41
+ export interface GenerateMarkdownOptions extends RenderMarkdownOptions {
42
+ /** Index file name (defaults to `index.md`). */
43
+ indexFilename?: string;
44
+ }
45
+ /** Render the markdown reference for a single scope (base + grouped configs). */
46
+ export declare function renderScopeMarkdown(scope: string, schema: Schema, options?: RenderMarkdownOptions): string;
47
+ /** Render the index file: explains the env convention + lists required/core. */
48
+ export declare function renderConfigIndex(scopes: ConfigScopes, options?: RenderMarkdownOptions): string;
49
+ /** Generate the markdown reference (per-scope files + index) into `outDir`. */
50
+ export declare function generateConfigMarkdown(scopes: ConfigScopes, options: GenerateMarkdownOptions & {
51
+ outDir: string;
52
+ }): string[];
53
+ /** A section of a config-file reference (its key + options schema). */
54
+ export interface ConfigFileSection {
55
+ /** The config key, eg. `project`. */
56
+ key: string;
57
+ /** A short description shown under the heading. */
58
+ description?: string;
59
+ /** The section's options-object schema. */
60
+ schema: ZodType;
61
+ }
62
+ export interface RenderConfigFileOptions {
63
+ /** Document title (default `Configuration`). */
64
+ title?: string;
65
+ /** Intro paragraph under the title. */
66
+ intro?: string;
67
+ /** Page outline (default `[2, 3, 4]`). */
68
+ outline?: number[];
69
+ }
70
+ /**
71
+ * Render a single markdown reference for a config **file** (no environment-var
72
+ * language): one `## \`key\`` section per schema, with its fields, types,
73
+ * defaults and descriptions. This is what a `dbx.config.ts`-style
74
+ * reference is generated from.
75
+ */
76
+ export declare function renderConfigFileMarkdown(sections: ConfigFileSection[], options?: RenderConfigFileOptions): string;
77
+ //#endregion
@@ -0,0 +1,27 @@
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{titleCase as t}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{splitBaseSchema as n,zodToJsonSchema as r}from"../schema.js";import{collectEnvVars as i}from"../collect.js";import{cliFlagLabel as a}from"./cli.js";import o from"node:fs";function s(e,t,n,r){let i=[`${n} ${t}`];return e.type===`object`&&e.properties?(i.push(...c(e,`${n}#`,r)),i):(e.env&&i.push(`- **Env**: \`${e.env}\``),i.push(`- **Type**: \`${e.tsType??(Array.isArray(e.type)?e.type.join(` | `):e.type)??`any`}\``),e.default!==void 0&&i.push(`- **Default**: \`${JSON.stringify(e.default)}\``),e.description&&i.push(``,e.description),i)}function c(e,t,n){let r=[];for(let[i,o]of Object.entries(e.properties??{})){let e=n.useFlags&&o.env?a(o.env,n):`\`${i}\``;r.push(``,...s(o,e,t,n))}return r}function l(e,r,i={}){let a=i.outline??[2,3,4],o={useFlags:e===(i.cliScope??`cli`),baseGroup:i.baseGroup??`base`,...i.envPrefix?{envPrefix:i.envPrefix}:{},...i.shortFlags?{shortFlags:i.shortFlags}:{}},{base:s,groups:l}=n(r,o.baseGroup),u=[`---`,`title: ${t(e)} Configuration`,`outline: ${JSON.stringify(a)}`,`---`,``,`# ${t(e)} Configuration`,``,`Every setting below is configured through an environment variable.`,``,`## Base`,``,...c(s,`###`,o)];for(let[e,n]of Object.entries(l.properties??{}))u.push(``,`## ${t(e)}`,``,...c(n,`###`,o));return`${u.join(`
2
+ `).trim()}\n`}function u(e){return e===void 0?`—`:Array.isArray(e)?`\`${e.join(`,`)}\``:typeof e==`object`?`\`${JSON.stringify(e)}\``:`\`${String(e)}\``}function d(e,t,n){for(let r of Object.values(e.properties??{})){let e=r;if(e.type===`object`&&e.properties)d(r,t,n);else if(e.env){let r=e.envDefault??e.default;n.push({name:e.env,scope:t,...e.description?{description:e.description}:{},...r===void 0?{}:{default:r},...e.required===!0?{required:!0}:{},...e.secret?{secret:!0}:{},...e.public?{public:!0}:{}})}}}function f(e,t={}){let a=t.outline??[2,3,4],o=t.baseGroup??`base`,s=t.labels??{},c=[],l=[];for(let[t,i]of Object.entries(e)){let e=i.jsonSchema??r(i.zodSchema);d(n(e,o).base,t,l)}for(let n of i(e,t.envPrefix??`APP_`,{envPathOf:t.envPathOf}))n.required&&c.push({name:n.name,scope:n.scope,...n.description?{description:n.description}:{},...n.default===void 0?{}:{default:n.default}});let f=e=>[`| Variable | Default | Description |`,`| -------- | ------- | ----------- |`,...e.map(e=>`| \`${e.name}\` | ${u(e.default)} | ${(e.description??``).replace(/\n/g,` `).replace(/\|/g,`\\|`)} |`)].join(`
3
+ `),p=s.title??`Environment variables`,m=t.intro??`Environment variables are prefixed with \`${t.envPrefix??`APP_`}\`.
4
+ The underscore is a path separator, so every config value has an environment
5
+ variable equivalent.`,h=t.requiredNote??`These variables have no safe default and **must** be set:`,g=t.coreNote??`The core (base) config values:`,_=t.references&&t.references.length?`\n## References\n\n${t.references.map(e=>`- [${e.label}](${e.href})`).join(`
6
+ `)}\n`:``;return`---
7
+ title: ${p}
8
+ outline: ${JSON.stringify(a)}
9
+ ---
10
+
11
+ # ${p}
12
+
13
+ ${m}
14
+
15
+ ## ${s.required??`Required`}
16
+
17
+ ${h}
18
+
19
+ ${f(c)}
20
+
21
+ ## ${s.core??`Core`}
22
+
23
+ ${g}
24
+
25
+ ${f(l)}
26
+ ${_}`}function p(t,n){let i=n.outline??[2,3,4],a=Object.entries(t).map(([t,a])=>[e.resolve(n.outDir,`${t}.md`),l(t,a.jsonSchema??r(a.zodSchema),{...n,outline:i})]);a.push([e.resolve(n.outDir,n.indexFilename??`index.md`),f(t,{...n,outline:i})]);for(let[t,n]of a)o.mkdirSync(e.dirname(t),{recursive:!0}),o.writeFileSync(t,n,`utf-8`);return a.map(([e])=>e)}function m(e,t={}){let n={baseGroup:`base`},i=t.title??`Configuration`,a=[`---`,`title: ${i}`,`outline: ${JSON.stringify(t.outline??[2,3,4])}`,`---`,``,`# ${i}`,``];t.intro&&a.push(t.intro,``);for(let t of e){a.push(`## \`${t.key}\``,``),t.description&&a.push(t.description,``);let e=r(t.schema);a.push(...c(e,`###`,n),``)}return`${a.join(`
27
+ `).trim()}\n`}export{p as generateConfigMarkdown,m as renderConfigFileMarkdown,f as renderConfigIndex,l as renderScopeMarkdown};
@@ -0,0 +1,32 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ConfigScopes } from "../types.js";
4
+ import { Schema } from "untyped";
5
+ //#region packages/config/src/generators/types.d.ts
6
+ export interface GenerateTypesOptions {
7
+ /** Output directory. When omitted, nothing is written. */
8
+ outputDir?: string;
9
+ /** The base group hoisted into `<Name>Base` (default `base`). */
10
+ baseGroup?: string;
11
+ /**
12
+ * Per-scope main interface name. Defaults to `<PascalScope>Config`.
13
+ */
14
+ interfaceNames?: Record<string, string>;
15
+ /** Per-scope extra aliases appended after the generated interface. */
16
+ aliases?: Record<string, string>;
17
+ /** File extension for generated files (default `ts`). */
18
+ extension?: string;
19
+ /** A raw (verbatim) header prepended to every generated file. */
20
+ header?: string;
21
+ }
22
+ /** The resolved schema for a scope (from a precomputed schema or the Zod one). */
23
+ export declare function resolveScopeSchema(schema: Schema | undefined, zodSchema: unknown): Schema;
24
+ /** Render the generated type file content for one scope. */
25
+ export declare function renderConfigTypes(scopeName: string, schema: Schema, options?: GenerateTypesOptions): string;
26
+ /** Render every config type file, keyed by scope name. */
27
+ export declare function renderAllConfigTypes(scopes: ConfigScopes, options?: GenerateTypesOptions): Record<string, string>;
28
+ /** Generate the config type files into `outputDir`. Returns the paths written. */
29
+ export declare function generateConfigTypes(scopes: ConfigScopes, options: GenerateTypesOptions & {
30
+ outputDir: string;
31
+ }): string[];
32
+ //#endregion
@@ -0,0 +1 @@
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{pascalCase as t}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{splitBaseSchema as n,zodToJsonSchema as r}from"../schema.js";import i from"node:fs";import{generateTypes as a}from"untyped";const o={addExport:!0,partial:!0};function s(e,t){return e??r(t)}function c(e,r,i={}){let s=i.baseGroup??`base`,c=i.interfaceNames?.[e]??`${t(e)}Config`,l=i.aliases?.[e]??``,{base:u,groups:d,hasBase:f}=n(r,s),p=Object.keys(d.properties??{}),m=a(u,{...o,interfaceName:`${c}Base`}),h;h=f&&p.length>0?a(d,{...o,interfaceName:c}).replace(`export interface ${c} {`,`export interface ${c} extends ${c}Base {`):f?`export interface ${c} extends ${c}Base {}\n`:a(d,{...o,interfaceName:c});let g=`${m}\n${h}\n${l}`;return i.header?`${i.header}\n\n${g}`:g}function l(e,t={}){return Object.fromEntries(Object.entries(e).map(([e,n])=>[e,c(e,s(n.jsonSchema,n.zodSchema),t)]))}function u(t,n){let r=n.extension??`ts`,a=[];for(let[o,s]of Object.entries(l(t,n))){let t=e.join(n.outputDir,`${o}.${r}`);i.mkdirSync(e.dirname(t),{recursive:!0}),i.writeFileSync(t,s,`utf-8`),a.push(t)}return a}export{u as generateConfigTypes,l as renderAllConfigTypes,c as renderConfigTypes,s as resolveScopeSchema};
@@ -0,0 +1,21 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ConfigEngineOptions, ConfigScopeDef, ConfigScopes, EnvValueType, EnvVarDef, EnvVarMeta, envPathOf } from "./types.js";
4
+ import { CollectEnvVarsOptions, DEFAULT_ENV_PREFIX, collectEnvVars, collectRequiredEnvVars } from "./collect.js";
5
+ import { BuildConfigJsonOptions, ConfigJsonDoc, ConfigJsonEntry, buildConfigJson } from "./config-json.js";
6
+ import { EnvFileOptions, generateEnvFile } from "./env-file.js";
7
+ import { CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, GenerateCliOptionsOptions, cliFlagLabel, cliFlagOf, cliShortOf, createCliArgsParser, flagOf, generateCliArgsOptions, generateCliOptions } from "./generators/cli.js";
8
+ import { GenerateEnvTypesOptions, generateEnv, generateEnvDts, generateEnvTypes } from "./generators/env.js";
9
+ import { GenerateJsonSchemaOptions, generateConfigJsonSchema, generateJsonSchemaFile } from "./generators/json.js";
10
+ import { ConfigFileSection, GenerateMarkdownOptions, RenderConfigFileOptions, RenderMarkdownOptions, generateConfigMarkdown, renderConfigFileMarkdown, renderConfigIndex, renderScopeMarkdown } from "./generators/markdown.js";
11
+ import { GenerateTypesOptions, generateConfigTypes, renderAllConfigTypes, renderConfigTypes, resolveScopeSchema } from "./generators/types.js";
12
+ import { ConfigEngine, createConfigEngine } from "./engine.js";
13
+ import { EnvSource, EnvTree, applyOverrides, envBool, envInt, envList, envMap, envString, parseEnvTree, readEnvPath, trimTrailingSlashes } from "./env.js";
14
+ import "./generators/index.js";
15
+ import { findProjectRoot, monorepoRoot } from "./root.js";
16
+ import { SplitSchema, compileZodSchema, envMetaOf, flattenBaseSchema, resolveUntypedSchema, splitBaseSchema, zodToJsonSchema, zodToUntypedDefinition } from "./schema.js";
17
+ declare namespace index_d_exports {
18
+ export { BuildConfigJsonOptions, CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, CollectEnvVarsOptions, ConfigEngine, ConfigEngineOptions, ConfigFileSection, ConfigJsonDoc, ConfigJsonEntry, ConfigScopeDef, ConfigScopes, DEFAULT_ENV_PREFIX, EnvFileOptions, EnvSource, EnvTree, EnvValueType, EnvVarDef, EnvVarMeta, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownOptions, SplitSchema, applyOverrides, buildConfigJson, cliFlagLabel, cliFlagOf, cliShortOf, collectEnvVars, collectRequiredEnvVars, compileZodSchema, createCliArgsParser, createConfigEngine, envBool, envInt, envList, envMap, envMetaOf, envPathOf, envString, findProjectRoot, flagOf, flattenBaseSchema, generateCliArgsOptions, generateCliOptions, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, monorepoRoot, parseEnvTree, readEnvPath, renderAllConfigTypes, renderConfigFileMarkdown, renderConfigIndex, renderConfigTypes, renderScopeMarkdown, resolveScopeSchema, resolveUntypedSchema, splitBaseSchema, trimTrailingSlashes, zodToJsonSchema, zodToUntypedDefinition };
19
+ }
20
+ //#endregion
21
+ export { BuildConfigJsonOptions, CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, CollectEnvVarsOptions, ConfigEngine, ConfigEngineOptions, ConfigFileSection, ConfigJsonDoc, ConfigJsonEntry, ConfigScopeDef, ConfigScopes, DEFAULT_ENV_PREFIX, EnvFileOptions, EnvSource, EnvTree, EnvValueType, EnvVarDef, EnvVarMeta, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownOptions, SplitSchema, applyOverrides, buildConfigJson, cliFlagLabel, cliFlagOf, cliShortOf, collectEnvVars, collectRequiredEnvVars, compileZodSchema, createCliArgsParser, createConfigEngine, envBool, envInt, envList, envMap, envMetaOf, envPathOf, envString, findProjectRoot, flagOf, flattenBaseSchema, generateCliArgsOptions, generateCliOptions, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, index_d_exports, monorepoRoot, parseEnvTree, readEnvPath, renderAllConfigTypes, renderConfigFileMarkdown, renderConfigIndex, renderConfigTypes, renderScopeMarkdown, resolveScopeSchema, resolveUntypedSchema, splitBaseSchema, trimTrailingSlashes, zodToJsonSchema, zodToUntypedDefinition };
@@ -0,0 +1 @@
1
+ import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{compileZodSchema as t,envMetaOf as n,flattenBaseSchema as r,resolveUntypedSchema as i,splitBaseSchema as a,zodToJsonSchema as o,zodToUntypedDefinition as s}from"./schema.js";import{envPathOf as c}from"./types.js";import{DEFAULT_ENV_PREFIX as l,collectEnvVars as u,collectRequiredEnvVars as d}from"./collect.js";import{buildConfigJson as f}from"./config-json.js";import{generateEnvFile as p}from"./env-file.js";import{cliFlagLabel as m,cliFlagOf as h,cliShortOf as g,createCliArgsParser as _,flagOf as v,generateCliArgsOptions as y,generateCliOptions as b}from"./generators/cli.js";import{generateEnv as x,generateEnvDts as S,generateEnvTypes as C}from"./generators/env.js";import{generateConfigJsonSchema as w,generateJsonSchemaFile as T}from"./generators/json.js";import{generateConfigMarkdown as E,renderConfigFileMarkdown as D,renderConfigIndex as O,renderScopeMarkdown as k}from"./generators/markdown.js";import{generateConfigTypes as A,renderAllConfigTypes as j,renderConfigTypes as M,resolveScopeSchema as N}from"./generators/types.js";import{findProjectRoot as P,monorepoRoot as F}from"./root.js";import{createConfigEngine as I}from"./engine.js";import{applyOverrides as L,envBool as R,envInt as z,envList as B,envMap as V,envString as H,parseEnvTree as U,readEnvPath as W,trimTrailingSlashes as G}from"./env.js";import"./generators/index.js";var K=/* @__PURE__ */ e({DEFAULT_ENV_PREFIX:()=>l,applyOverrides:()=>L,buildConfigJson:()=>f,cliFlagLabel:()=>m,cliFlagOf:()=>h,cliShortOf:()=>g,collectEnvVars:()=>u,collectRequiredEnvVars:()=>d,compileZodSchema:()=>t,createCliArgsParser:()=>_,createConfigEngine:()=>I,envBool:()=>R,envInt:()=>z,envList:()=>B,envMap:()=>V,envMetaOf:()=>n,envPathOf:()=>c,envString:()=>H,findProjectRoot:()=>P,flagOf:()=>v,flattenBaseSchema:()=>r,generateCliArgsOptions:()=>y,generateCliOptions:()=>b,generateConfigJsonSchema:()=>w,generateConfigMarkdown:()=>E,generateConfigTypes:()=>A,generateEnv:()=>x,generateEnvDts:()=>S,generateEnvFile:()=>p,generateEnvTypes:()=>C,generateJsonSchemaFile:()=>T,monorepoRoot:()=>F,parseEnvTree:()=>U,readEnvPath:()=>W,renderAllConfigTypes:()=>j,renderConfigFileMarkdown:()=>D,renderConfigIndex:()=>O,renderConfigTypes:()=>M,renderScopeMarkdown:()=>k,resolveScopeSchema:()=>N,resolveUntypedSchema:()=>i,splitBaseSchema:()=>a,trimTrailingSlashes:()=>G,zodToJsonSchema:()=>o,zodToUntypedDefinition:()=>s});export{l as DEFAULT_ENV_PREFIX,L as applyOverrides,f as buildConfigJson,m as cliFlagLabel,h as cliFlagOf,g as cliShortOf,u as collectEnvVars,d as collectRequiredEnvVars,t as compileZodSchema,_ as createCliArgsParser,I as createConfigEngine,R as envBool,z as envInt,B as envList,V as envMap,n as envMetaOf,c as envPathOf,H as envString,P as findProjectRoot,v as flagOf,r as flattenBaseSchema,y as generateCliArgsOptions,b as generateCliOptions,w as generateConfigJsonSchema,E as generateConfigMarkdown,A as generateConfigTypes,x as generateEnv,S as generateEnvDts,p as generateEnvFile,C as generateEnvTypes,T as generateJsonSchemaFile,F as monorepoRoot,U as parseEnvTree,W as readEnvPath,j as renderAllConfigTypes,D as renderConfigFileMarkdown,O as renderConfigIndex,M as renderConfigTypes,k as renderScopeMarkdown,N as resolveScopeSchema,i as resolveUntypedSchema,a as splitBaseSchema,K as src_exports,G as trimTrailingSlashes,o as zodToJsonSchema,s as zodToUntypedDefinition};
@@ -0,0 +1,11 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ //#region packages/config/src/root.d.ts
4
+ /**
5
+ * Walk up from a starting directory until a `package.json` is found. Falls back
6
+ * to the module's own directory when nothing matches.
7
+ */
8
+ export declare function findProjectRoot(start?: string): string;
9
+ /** Resolve the monorepo root from a module location by walking up. */
10
+ export declare function monorepoRoot(from?: string): string;
11
+ //#endregion
@@ -0,0 +1 @@
1
+ import{default as e}from"node:path";import{fileURLToPath as t}from"node:url";import.meta.url;import n from"node:fs";function r(r){let i=r??e.dirname(t(import.meta.url));for(let t=0;t<12;t++){if(n.existsSync(e.join(i,`package.json`)))return i;let t=e.resolve(i,`..`);if(t===i)break;i=t}return r??e.dirname(t(import.meta.url))}function i(e){return r(e)}export{r as findProjectRoot,i as monorepoRoot};
@@ -0,0 +1,34 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { EnvVarMeta } from "./types.js";
4
+ import { ZodType } from "zod";
5
+ import { Schema } from "untyped";
6
+ //#region packages/config/src/schema.d.ts
7
+ /** Read the env metadata attached to a Zod leaf via `.meta()`. */
8
+ export declare function envMetaOf(schema: ZodType): EnvVarMeta | undefined;
9
+ /** Lower a Zod config schema into an untyped definition object. */
10
+ export declare function zodToUntypedDefinition(zodSchema: ZodType): Record<string, unknown>;
11
+ /** Compile a Zod schema to a fast native parse function, falling back on error. */
12
+ export declare function compileZodSchema<T extends ZodType>(schema: T): T;
13
+ /**
14
+ * Resolve an untyped definition into a `Schema`, mirroring untyped's
15
+ * `resolveSchema` synchronously.
16
+ */
17
+ export declare function resolveUntypedSchema(input: Record<string, unknown>): Schema;
18
+ /** Build the resolved untyped JSON Schema directly from a Zod config schema. */
19
+ export declare function zodToJsonSchema(zodSchema: ZodType): Schema;
20
+ /** A resolved untyped schema split into its base group and the remaining groups. */
21
+ export interface SplitSchema {
22
+ base: Schema;
23
+ groups: Schema;
24
+ hasBase: boolean;
25
+ }
26
+ /**
27
+ * Split a resolved untyped schema into its base group (flat config fields) and
28
+ * the remaining nested groups. Schemas without the base property treat the whole
29
+ * schema as the base group.
30
+ */
31
+ export declare function splitBaseSchema(schema: Schema, baseGroup?: string): SplitSchema;
32
+ /** Flatten the base group of a resolved schema into the top level. */
33
+ export declare function flattenBaseSchema(schema: Schema, baseGroup?: string): Schema;
34
+ //#endregion
@@ -0,0 +1 @@
1
+ import"node:path";import"node:url";import.meta.url;import{z as e}from"zod";const t={string:`string`,number:`number`,integer:`number`,boolean:`boolean`,null:`null`};function n(e){let t=e.meta?.();return t&&typeof t==`object`&&`env`in t?t:void 0}function r(e){return e.enum?`string`:Array.isArray(e.type)?e.type.find(e=>e!==`null`)??`string`:e.type??`string`}function i(e){let n=typeof e?.type==`string`?e.type:`string`;return t[n]??`string`}function a(e){if(e.enum&&Array.isArray(e.enum))return`'${e.enum.join(`' | '`)}'`;let n=Array.isArray(e.type)?e.type:[e.type??`string`];return n.includes(`array`)?`Array<${i(e.items)}>`:n.includes(`object`)?`Record<string, ${i(e.additionalProperties)}>`:n.map(e=>t[e]??e).join(` | `)}function o(e,t=!1){if(e.properties){let n=t?{$schema:{tags:[`@required`]}}:{};for(let[t,r]of Object.entries(e.properties))n[t]=o(r,e.required?.includes(t)??!1);return n}let n={};return e.defaultValue===void 0?e.default!==void 0&&(n.$default=e.default):n.$default=e.defaultValue,n.$schema={type:r(e),tsType:a(e),...r(e)===`array`?{items:{type:i(e.items)}}:{},...t?{tags:[`@required`]}:{},...e.description?{description:e.description}:{},...e.env?{env:e.env}:{},...e.scope?{scope:e.scope}:{},...e.secret?{secret:!0}:{},...e.public?{public:!0}:{},...e.required===!0?{required:!0}:{},...e.defaultValue!==void 0&&e.default!==void 0?{envDefault:e.default}:{}},n}function s(e){return o(e.toJSONSchema())}function c(t){try{return e.compile(t)}catch{return t}}function l(e){return e!==null&&!Array.isArray(e)&&typeof e==`object`}function u(e){let t=typeof e;if(t!==`undefined`&&e!==null)return Array.isArray(e)?`array`:t}function d(e,t,n=`.`){return e?`${e}${n}${t}`:t}function f(e){return[...new Set(e.filter(e=>!!e))]}function p(e){if(e.type===`array`&&!(`items`in e)){let t=f((e.default??[]).map(e=>u(e)));e.items={type:t.length===0?`any`:t.length===1?t[0]:t}}if(e.default===void 0&&(`properties`in e||e.type===`object`||e.type===`any`)){let t=e.properties??{};e.default=Object.fromEntries(Object.entries(t).filter(([,e])=>`default`in e).map(([e,t])=>[e,t.default]))}}function m(e,t,n){if(n.cache.has(t))return n.cache.get(t);let r=`#${t.replace(/\./g,`/`)}`;if(!l(e)){let i=Array.isArray(e)?[...e]:e,a={type:u(e),id:r,default:i};return p(a),n.cache.set(t,a),a}let i={...e.$schema??{},id:r};n.cache.set(t,i);let a=Object.keys(e).filter(e=>e!==`$resolve`&&e!==`$schema`&&e!==`$default`);if(a.length>0){let r={};i.properties=r;for(let o of a)if(!r[o]){let a=r[o]=m(e[o],d(t,o),n);Array.isArray(a.tags)&&a.tags.includes(`@required`)&&(i.required=i.required||[],i.required.includes(o)||i.required.push(o))}}return i.default===void 0&&`$default`in e&&(i.default=e.$default),i.type||=u(i.default)||(i.properties?`object`:`any`),p(i),i}function h(e){return m(e,``,{root:e,cache:/* @__PURE__ */ new Map})}function g(e){return h(s(e))}function _(e,t=`base`){let n=e.properties??{},r=n[t];if(r&&r.type===`object`&&r.properties){let{[t]:i,...a}=n,o=(e.required??[]).filter(e=>e!==t);return{base:r,groups:{...e,properties:a,...o.length>0?{required:o}:{}},hasBase:!0}}return{base:e,groups:{...e,properties:{}},hasBase:!1}}function v(e,t=`base`){let n=e.properties??{},r=n[t];if(r?.type!==`object`)return e;let i=r.properties;if(!i)return e;let{[t]:a,...o}=n;return{...e,properties:{...i,...o},required:[...(e.required??[]).filter(e=>e!==t),...r.required??[]]}}export{c as compileZodSchema,n as envMetaOf,v as flattenBaseSchema,h as resolveUntypedSchema,_ as splitBaseSchema,g as zodToJsonSchema,s as zodToUntypedDefinition};