@deltabox/toolchain 1.11.3 → 2.0.0

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 (222) hide show
  1. package/CHANGELOG.md +316 -4
  2. package/README.md +21 -14
  3. package/dist/_virtual/_rolldown/runtime.js +1 -1
  4. package/dist/changelog.d.ts +7 -6
  5. package/dist/changelog.js +1 -1
  6. package/dist/cli/commands/index.js +1 -1
  7. package/dist/cli/commands/providers.js +1 -1
  8. package/dist/cli/commands/reset.js +1 -1
  9. package/dist/cli/commands/shared.js +1 -1
  10. package/dist/cli/commands/sync.js +1 -1
  11. package/dist/cli/commands/watch.js +1 -1
  12. package/dist/cli/config-selection.d.ts +23 -0
  13. package/dist/cli/config-selection.js +1 -0
  14. package/dist/cli/context.js +1 -1
  15. package/dist/cli/index.d.ts +5 -3
  16. package/dist/cli/index.js +1 -1
  17. package/dist/cli/register.js +1 -1
  18. package/dist/config.d.ts +8 -8
  19. package/dist/config.js +1 -1
  20. package/dist/core.d.ts +7 -6
  21. package/dist/core.js +1 -1
  22. package/dist/globals.d.ts +31 -0
  23. package/dist/globals.js +1 -0
  24. package/dist/index.d.ts +32 -11
  25. package/dist/index.js +1 -1
  26. package/dist/migrate.d.ts +3 -2
  27. package/dist/migrate.js +1 -1
  28. package/dist/package.js +1 -1
  29. package/dist/packages/biome/src/index.d.ts +2 -1
  30. package/dist/packages/biome/src/index.js +1 -1
  31. package/dist/packages/changelog/src/cli/index.js +1 -1
  32. package/dist/packages/changelog/src/index.d.ts +8 -7
  33. package/dist/packages/changelog/src/index.js +1 -1
  34. package/dist/packages/changelog/src/run-workflows.d.ts +19 -4
  35. package/dist/packages/changelog/src/run-workflows.js +1 -1
  36. package/dist/packages/changelog/src/run.d.ts +3 -3
  37. package/dist/packages/changelog/src/run.js +1 -1
  38. package/dist/packages/changelog/src/sync.d.ts +7 -4
  39. package/dist/packages/changelog/src/sync.js +1 -1
  40. package/dist/packages/changelog/src/utils/format.d.ts +2 -1
  41. package/dist/packages/changelog/src/utils/format.js +5 -5
  42. package/dist/packages/changelog/src/utils/git.js +1 -1
  43. package/dist/packages/changelog/src/utils/reformat.d.ts +2 -1
  44. package/dist/packages/changelog/src/utils/reformat.js +3 -3
  45. package/dist/packages/changelog/src/utils/summary.d.ts +25 -2
  46. package/dist/packages/changelog/src/utils/summary.js +3 -1
  47. package/dist/packages/changelog/src/utils/types.d.ts +34 -2
  48. package/dist/packages/changelog/src/utils/version.d.ts +1 -0
  49. package/dist/packages/changelog/src/utils/versioning.d.ts +25 -4
  50. package/dist/packages/changelog/src/utils/versioning.js +1 -1
  51. package/dist/packages/changelog/src/utils/write.js +1 -1
  52. package/dist/packages/changelog/src/workflows.d.ts +27 -7
  53. package/dist/packages/changelog/src/workflows.js +5 -5
  54. package/dist/packages/config/src/cli/index.js +1 -1
  55. package/dist/packages/config/src/collect.d.ts +10 -8
  56. package/dist/packages/config/src/collect.js +1 -1
  57. package/dist/packages/config/src/config-json.d.ts +4 -4
  58. package/dist/packages/config/src/config-json.js +1 -1
  59. package/dist/packages/config/src/engine.d.ts +14 -25
  60. package/dist/packages/config/src/engine.js +1 -1
  61. package/dist/packages/config/src/env-file.d.ts +4 -4
  62. package/dist/packages/config/src/env-file.js +2 -2
  63. package/dist/packages/config/src/env.d.ts +4 -6
  64. package/dist/packages/config/src/env.js +1 -1
  65. package/dist/packages/config/src/generators/cli.d.ts +6 -6
  66. package/dist/packages/config/src/generators/cli.js +1 -1
  67. package/dist/packages/config/src/generators/env.d.ts +9 -9
  68. package/dist/packages/config/src/generators/env.js +2 -2
  69. package/dist/packages/config/src/generators/index.d.ts +4 -4
  70. package/dist/packages/config/src/generators/index.js +1 -1
  71. package/dist/packages/config/src/generators/json.d.ts +5 -7
  72. package/dist/packages/config/src/generators/json.js +1 -1
  73. package/dist/packages/config/src/generators/markdown.d.ts +57 -35
  74. package/dist/packages/config/src/generators/markdown.js +18 -19
  75. package/dist/packages/config/src/generators/types.d.ts +28 -23
  76. package/dist/packages/config/src/generators/types.js +3 -3
  77. package/dist/packages/config/src/index.d.ts +9 -9
  78. package/dist/packages/config/src/index.js +1 -1
  79. package/dist/packages/config/src/schema.d.ts +31 -3
  80. package/dist/packages/config/src/schema.js +1 -1
  81. package/dist/packages/config/src/types.d.ts +134 -28
  82. package/dist/packages/core/src/editor-config.d.ts +14 -0
  83. package/dist/packages/core/src/editor-config.js +1 -0
  84. package/dist/packages/core/src/graph.js +1 -1
  85. package/dist/packages/core/src/index.d.ts +8 -7
  86. package/dist/packages/core/src/index.js +1 -1
  87. package/dist/packages/core/src/loader.d.ts +20 -2
  88. package/dist/packages/core/src/loader.js +1 -1
  89. package/dist/packages/core/src/manifest.d.ts +20 -1
  90. package/dist/packages/core/src/manifest.js +1 -1
  91. package/dist/packages/core/src/provider-registry.d.ts +48 -3
  92. package/dist/packages/core/src/provider-registry.js +1 -1
  93. package/dist/packages/core/src/reset.d.ts +15 -0
  94. package/dist/packages/core/src/reset.js +1 -1
  95. package/dist/packages/core/src/sync.d.ts +10 -0
  96. package/dist/packages/core/src/sync.js +1 -1
  97. package/dist/packages/core/src/watch.d.ts +9 -0
  98. package/dist/packages/core/src/watch.js +1 -1
  99. package/dist/packages/migrate/src/cli/index.js +1 -1
  100. package/dist/packages/migrate/src/index.d.ts +3 -2
  101. package/dist/packages/migrate/src/index.js +1 -1
  102. package/dist/packages/migrate/src/oxc.d.ts +13 -0
  103. package/dist/packages/migrate/src/oxc.js +1 -0
  104. package/dist/packages/migrate/src/registry.js +1 -1
  105. package/dist/packages/migrate/src/vite-target.js +1 -1
  106. package/dist/packages/migrate/src/vite.d.ts +25 -3
  107. package/dist/packages/migrate/src/vite.js +7 -2
  108. package/dist/packages/project/src/catalogs.d.ts +7 -0
  109. package/dist/packages/project/src/catalogs.js +1 -1
  110. package/dist/packages/project/src/cli/index.js +1 -1
  111. package/dist/packages/project/src/config.d.ts +6 -0
  112. package/dist/packages/project/src/config.js +1 -1
  113. package/dist/packages/project/src/index.d.ts +5 -4
  114. package/dist/packages/project/src/index.js +1 -1
  115. package/dist/packages/project/src/sync.js +1 -1
  116. package/dist/packages/project/src/typescript.d.ts +64 -12
  117. package/dist/packages/project/src/typescript.js +12 -7
  118. package/dist/packages/shared/src/changelog-groups.d.ts +59 -0
  119. package/dist/packages/shared/src/config-schema/biome.d.ts +10 -0
  120. package/dist/packages/shared/src/config-schema/biome.js +1 -0
  121. package/dist/packages/shared/src/config-schema/catalogs.d.ts +14 -0
  122. package/dist/packages/shared/src/config-schema/catalogs.js +1 -0
  123. package/dist/packages/shared/src/config-schema/changelog.d.ts +245 -0
  124. package/dist/packages/shared/src/config-schema/changelog.js +1 -0
  125. package/dist/packages/shared/src/config-schema/ci.d.ts +389 -0
  126. package/dist/packages/shared/src/config-schema/ci.js +1 -0
  127. package/dist/packages/shared/src/config-schema/format.d.ts +38 -0
  128. package/dist/packages/shared/src/config-schema/format.js +1 -0
  129. package/dist/packages/shared/src/config-schema/index.d.ts +1648 -0
  130. package/dist/packages/shared/src/config-schema/index.js +1 -0
  131. package/dist/packages/shared/src/config-schema/logger.d.ts +19 -0
  132. package/dist/packages/shared/src/config-schema/logger.js +1 -0
  133. package/dist/packages/shared/src/config-schema/meta.d.ts +16 -0
  134. package/dist/packages/shared/src/config-schema/meta.js +1 -0
  135. package/dist/packages/shared/src/config-schema/project.d.ts +35 -0
  136. package/dist/packages/shared/src/config-schema/project.js +1 -0
  137. package/dist/packages/shared/src/config-schema/providers.d.ts +9 -0
  138. package/dist/packages/shared/src/config-schema/providers.js +1 -0
  139. package/dist/packages/shared/src/config-schema/registry.d.ts +21 -0
  140. package/dist/packages/shared/src/config-schema/registry.js +1 -0
  141. package/dist/packages/shared/src/config-schema/templates.d.ts +81 -0
  142. package/dist/packages/shared/src/config-schema/templates.js +1 -0
  143. package/dist/packages/shared/src/config-schema/tsconfig.d.ts +30 -0
  144. package/dist/packages/shared/src/config-schema/tsconfig.js +1 -0
  145. package/dist/packages/shared/src/config-schema/vite.d.ts +26 -0
  146. package/dist/packages/shared/src/config-schema/vite.js +1 -0
  147. package/dist/packages/shared/src/config-schema/watch.d.ts +11 -0
  148. package/dist/packages/shared/src/config-schema/watch.js +1 -0
  149. package/dist/packages/shared/src/config-schema/workflow.d.ts +590 -0
  150. package/dist/packages/shared/src/config-schema/workflow.js +1 -0
  151. package/dist/packages/shared/src/config-types.d.ts +290 -90
  152. package/dist/packages/shared/src/fs-utils.js +1 -1
  153. package/dist/packages/shared/src/index.d.ts +26 -7
  154. package/dist/packages/shared/src/index.js +1 -1
  155. package/dist/packages/shared/src/logger.d.ts +26 -3
  156. package/dist/packages/shared/src/logger.js +1 -1
  157. package/dist/packages/shared/src/messages.d.ts +36 -0
  158. package/dist/packages/shared/src/messages.js +1 -0
  159. package/dist/packages/shared/src/object-utils.d.ts +5 -0
  160. package/dist/packages/shared/src/object-utils.js +1 -1
  161. package/dist/packages/shared/src/registry-policy.d.ts +17 -0
  162. package/dist/packages/shared/src/registry-policy.js +1 -0
  163. package/dist/packages/shared/src/toolchain.d.ts +90 -11
  164. package/dist/packages/shared/src/toolchain.js +1 -1
  165. package/dist/packages/shared/src/types.d.ts +6 -0
  166. package/dist/packages/shared/src/vite-defaults.d.ts +29 -0
  167. package/dist/packages/shared/src/vite-defaults.js +1 -0
  168. package/dist/packages/template/src/builtin.js +1 -1
  169. package/dist/packages/template/src/cli/index.js +1 -1
  170. package/dist/packages/template/src/global.d.ts +130 -0
  171. package/dist/packages/template/src/global.js +3 -0
  172. package/dist/packages/template/src/index.d.ts +3 -2
  173. package/dist/packages/template/src/index.js +1 -1
  174. package/dist/packages/template/src/online.d.ts +13 -4
  175. package/dist/packages/template/src/online.js +1 -1
  176. package/dist/packages/template/src/registry.d.ts +2 -1
  177. package/dist/packages/template/src/registry.js +1 -1
  178. package/dist/packages/template/src/scaffold.d.ts +5 -1
  179. package/dist/packages/template/src/scaffold.js +1 -1
  180. package/dist/packages/tsconfig/src/cli/generate/index.d.ts +3 -0
  181. package/dist/packages/tsconfig/src/cli/generate/index.js +1 -1
  182. package/dist/packages/tsconfig/src/cli/generate/utils.d.ts +10 -1
  183. package/dist/packages/tsconfig/src/cli/generate/utils.js +1 -1
  184. package/dist/packages/tsconfig/src/cli/index.js +1 -1
  185. package/dist/packages/tsconfig/src/index.d.ts +7 -4
  186. package/dist/packages/tsconfig/src/index.js +1 -1
  187. package/dist/packages/tsconfig/src/overrides.d.ts +74 -0
  188. package/dist/packages/tsconfig/src/overrides.js +1 -0
  189. package/dist/packages/tsconfig/src/resolve.d.ts +62 -0
  190. package/dist/packages/tsconfig/src/resolve.js +3 -0
  191. package/dist/packages/tsconfig/src/snapshots.d.ts +50 -0
  192. package/dist/packages/tsconfig/src/snapshots.js +1 -0
  193. package/dist/packages/tsconfig/src/sync.d.ts +14 -5
  194. package/dist/packages/tsconfig/src/sync.js +1 -1
  195. package/dist/packages/tsconfig/src/templates/tsconfig.default.js +1 -1
  196. package/dist/packages/tsconfig/src/templates.d.ts +12 -4
  197. package/dist/packages/tsconfig/src/templates.js +1 -1
  198. package/dist/packages/vite/src/index.d.ts +2 -2
  199. package/dist/packages/vite/src/index.js +1 -1
  200. package/dist/packages/vite/src/resolve.d.ts +13 -3
  201. package/dist/packages/vite/src/resolve.js +1 -1
  202. package/dist/packages/vite/src/sync.d.ts +46 -5
  203. package/dist/packages/vite/src/sync.js +5 -2
  204. package/dist/project.d.ts +4 -3
  205. package/dist/project.js +1 -1
  206. package/dist/providers.d.ts +11 -4
  207. package/dist/providers.js +1 -1
  208. package/dist/shared.d.ts +25 -6
  209. package/dist/shared.js +1 -1
  210. package/dist/sync.js +1 -1
  211. package/dist/template.d.ts +3 -2
  212. package/dist/template.js +1 -1
  213. package/dist/tooling.d.ts +21 -0
  214. package/dist/tooling.js +1 -0
  215. package/dist/tsconfig.d.ts +6 -3
  216. package/dist/tsconfig.js +1 -1
  217. package/dist/vite.d.ts +2 -2
  218. package/dist/vite.js +1 -1
  219. package/package.json +28 -23
  220. package/dist/packages/config/src/types.js +0 -1
  221. package/dist/packages/shared/src/config-schema.d.ts +0 -3928
  222. package/dist/packages/shared/src/config-schema.js +0 -1
@@ -1,13 +1,10 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
- import { ConfigScopes } from "../types.js";
4
- import { Schema } from "untyped";
3
+ import { ConfigEngineOptions, ConfigSchema } from "../types.js";
5
4
  //#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;
5
+ export interface GenerateTypesOptions extends Pick<ConfigEngineOptions, 'baseGroup'> {
6
+ /** Output directory. `false` (or omitted) disables writing. */
7
+ outputDir?: string | false;
11
8
  /**
12
9
  * Per-scope main interface name. Defaults to `<PascalScope>Config`.
13
10
  */
@@ -28,21 +25,29 @@ export interface GenerateTypesOptions {
28
25
  extension?: string;
29
26
  /** A raw (verbatim) header prepended to every generated file. */
30
27
  header?: string;
28
+ /** Emit `@required` JSDoc tags (default true). */
29
+ includeRequired?: boolean;
30
+ /** Emit `@deprecated` JSDoc tags (default true). */
31
+ includeDeprecated?: boolean;
32
+ /** Emit `@example` JSDoc tags (default true). */
33
+ includeExamples?: boolean;
34
+ /** Emit `@since` JSDoc tags (default true). */
35
+ includeSince?: boolean;
36
+ /** Emit `@see` JSDoc tags (default true). */
37
+ includeSee?: boolean;
38
+ /** Emit `@remarks` JSDoc tags (default true). */
39
+ includeRemarks?: boolean;
40
+ /** Emit `@experimental` JSDoc tags (default true). */
41
+ includeExperimental?: boolean;
42
+ /** Emit `@alpha` JSDoc tags (default true). */
43
+ includeAlpha?: boolean;
44
+ /** Emit `@beta` JSDoc tags (default true). */
45
+ includeBeta?: boolean;
46
+ /** Show the env var equivalent in JSDoc (default true). */
47
+ includeEnv?: boolean;
48
+ /** Show the CLI flag equivalent in JSDoc (default true). */
49
+ includeCli?: boolean;
31
50
  }
32
- /** The resolved schema for a scope (from a precomputed schema or the Zod one). */
33
- export declare function resolveScopeSchema(schema: Schema | undefined, zodSchema: unknown): Schema;
34
- /** Render the generated type file content for one scope. */
35
- export declare function renderConfigTypes(scopeName: string, schema: Schema, options?: GenerateTypesOptions): string;
36
- /**
37
- * Render the import block for the generated file (empty when none are
38
- * configured). Emitted once at the top of the file, after the header, so a
39
- * hand-written override can reference imported types.
40
- */
41
- export declare function renderConfigImports(options?: GenerateTypesOptions): string;
42
- /** Render every config type file, keyed by scope name. */
43
- export declare function renderAllConfigTypes(scopes: ConfigScopes, options?: GenerateTypesOptions): Record<string, string>;
44
- /** Generate the config type files into `outputDir`. Returns the paths written. */
45
- export declare function generateConfigTypes(scopes: ConfigScopes, options: GenerateTypesOptions & {
46
- outputDir: string;
47
- }): string[];
51
+ /** Generate config type file contents (and optionally write them). */
52
+ export declare function generateConfigTypes(schema: ConfigSchema, options?: GenerateTypesOptions): Record<string, string>;
48
53
  //#endregion
@@ -1,4 +1,4 @@
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){let t=[],n=0,r=!1;for(let i of e.split(`
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{isZodSchema as n,metaOf as r,normalizeConfigSchema as i,splitBaseSchema as a,zodToSchemaMap as o}from"../schema.js";import s from"node:fs";import{generateTypes as c}from"untyped";const l={addExport:!0,partial:!0};function u(e){let t=[],n=0,r=!1;for(let i of e.split(`
2
2
  `)){let e=i.trim();if(r)t.push(i),e.endsWith(`*/`)&&(r=!1);else if(e.startsWith(`/*`))t.push(i),e.endsWith(`*/`)||(r=!0);else if(!(e===``&&n>0)){t.push(i);for(let e of i)e===`{`||e===`(`||e===`[`?n++:(e===`}`||e===`)`||e===`]`)&&n>0&&n--}}return t.join(`
3
- `)}function l(e,t){return c(a(e,{...o,interfaceName:t}))}function u(e){let t=e.lastIndexOf(`}`);return t===-1?e:`${e.slice(0,t)} [key: string]: unknown;\n${e.slice(t)}`}function d(e,r,i={}){let a=i.baseGroup??`base`,o=i.interfaceNames?.[e]??`${t(e)}Config`,s=i.aliases?.[e]??``,c=e=>i.header?`${i.header}\n\n${e}`:e,d=i.overrides?.[e];if(d!==void 0)return c(`${d.trimEnd()}\n${s}`.trimEnd());let f=r.allowExtraKeys===!0;if(!r.properties)return c(`export type ${o} = ${r.tsType??`unknown`};\n${s}`);let{base:p,groups:m,hasBase:h}=n(r,a),g=Object.keys(m.properties??{});if(!h){let e=l(r,o);return c(`${f?u(e):e}\n${s}`)}let _=l(p,`${o}Base`),v;return v=g.length>0?l(m,o).replace(`export interface ${o} {`,`export interface ${o} extends ${o}Base {`):`export interface ${o} extends ${o}Base {}\n`,f&&(v=u(v)),c(`${_}\n${v}\n${s}`)}function f(e={}){return(e.imports??[]).join(`
4
- `)}function p(e,t={}){return Object.fromEntries(Object.entries(e).map(([e,n])=>[e,d(e,s(n.jsonSchema,n.zodSchema),t)]))}function m(t,n){let r=n.extension??`ts`,a=[];for(let[o,s]of Object.entries(p(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{m as generateConfigTypes,p as renderAllConfigTypes,f as renderConfigImports,d as renderConfigTypes,s as resolveScopeSchema};
3
+ `)}function d(e,t){return u(c(e,{...l,interfaceName:t}))}function f(e){let t=e.lastIndexOf(`}`);return t===-1?e:`${e.slice(0,t)} [key: string]: unknown;\n${e.slice(t)}`}function p(e){return e==null?[]:(Array.isArray(e)?e:[e]).map(e=>String(e)).filter(Boolean)}function m(e,t){let n=[];if(t.includeRequired!==!1&&e.required===!0&&n.push(`@required`),t.includeDeprecated!==!1&&e.deprecated!==void 0&&e.deprecated!==!1){let t=typeof e.deprecationMessage==`string`?e.deprecationMessage.trim():``;n.push(t?`@deprecated ${t}`:`@deprecated`)}if(t.includeExamples!==!1)for(let t of p(e.example))n.push(`@example ${t}`);if(t.includeSince!==!1&&typeof e.since==`string`&&e.since.trim()&&n.push(`@since ${e.since.trim()}`),t.includeSee!==!1)for(let t of p(e.see))n.push(`@see ${t}`);return t.includeRemarks!==!1&&typeof e.remarks==`string`&&e.remarks.trim()&&n.push(`@remarks ${e.remarks.trim()}`),t.includeExperimental!==!1&&e.experimental===!0&&n.push(`@experimental`),t.includeAlpha!==!1&&e.alpha===!0&&n.push(`@alpha`),t.includeBeta!==!1&&e.beta===!0&&n.push(`@beta`),n}function h(e,t){let n=e,{deprecated:r,deprecationMessage:i,example:a,since:o,see:s,remarks:c,experimental:l,alpha:u,beta:d,tags:f,...p}=n,g=n.required===!0,_=(Array.isArray(f)?f:[]).filter(e=>!(t.includeRequired===!1&&e===`@required`||t.includeDeprecated===!1&&e.startsWith(`@deprecated`)||t.includeExamples===!1&&e.startsWith(`@example`)||t.includeSince===!1&&e.startsWith(`@since`)||t.includeSee===!1&&e.startsWith(`@see`)||t.includeRemarks===!1&&e.startsWith(`@remarks`)||t.includeExperimental===!1&&e.startsWith(`@experimental`)||t.includeAlpha===!1&&e.startsWith(`@alpha`)||t.includeBeta===!1&&e.startsWith(`@beta`))),v=[.../* @__PURE__ */ new Set([..._,...m({required:g,deprecated:r,deprecationMessage:i,example:a,since:o,see:s,remarks:c,experimental:l,alpha:u,beta:d},t)])],y=typeof n.envName==`string`?n.envName:typeof n.env==`string`?n.env:``;t.includeEnv!==!1&&y&&v.push(`@env ${y}`),t.includeCli!==!1&&typeof n.cliFlag==`string`&&v.push(`@cli ${n.cliFlag}`);let b={...p};return g&&delete b.required,v.length>0&&(b.tags=v),b.properties&&typeof b.properties==`object`&&(b.properties=Object.fromEntries(Object.entries(b.properties).map(([e,n])=>[e,h(n,t)]))),b.items&&typeof b.items==`object`&&(b.items=h(b.items,t)),b}function g(e,t,n){let r=t,i=m({required:r.required,deprecated:r.deprecated,deprecationMessage:r.deprecationMessage,example:r.example,since:r.since,see:r.see,remarks:r.remarks,experimental:r.experimental,alpha:r.alpha,beta:r.beta},n);return i.length===0?e:`${[`/**`,...i.map(e=>` * ${e}`),` */`].join(`
4
+ `)}\n${e}`}function _(e,n,i={}){let o=Array.isArray(i.baseGroup)?String(i.baseGroup[0]??`base`):String(i.baseGroup??`base`),s=r(n),c=i.interfaceNames?.[e]??s?.typeName??s?.id??`${t(e)}Config`,l=i.aliases?.[e]??``,u=e=>i.header?`${i.header}\n\n${e}`:e,p=i.overrides?.[e];if(p!==void 0)return u(`${p.trimEnd()}\n${l}`.trimEnd());let m=n.allowExtraKeys===!0;if(!n.properties)return u(`${g(`export type ${c} = ${n.tsType??`unknown`};`,n,i)}\n${l}`);let _=h(n,i),{base:v,groups:y,hasBase:b}=a(_,o),x=Object.keys(y.properties??{});if(!b){let e=g(d(_,c),n,i);return m&&(e=f(e)),u(`${e}\n${l}`)}let S=d(v,`${c}Base`),C;return C=x.length>0?d(y,c).replace(`export interface ${c} {`,`export interface ${c} extends ${c}Base {`):`export interface ${c} extends ${c}Base {}\n`,C=g(C,n,i),m&&(C=f(C)),u(`${S}\n${C}\n${l}`)}function v(e,t={}){return n(e)?Object.fromEntries(Object.entries(o(e)).map(([e,n])=>[e,_(e,n,{...t,interfaceNames:{[e]:e,...t.interfaceNames}})])):Object.fromEntries(Object.entries(i(e)).map(([e,n])=>[e,_(e,n,t)]))}function y(t,n={}){let r=n.extension??`ts`,i=v(t,n);if(typeof n.outputDir==`string`)for(let[t,a]of Object.entries(i)){let i=e.join(n.outputDir,`${t}.${r}`);s.mkdirSync(e.dirname(i),{recursive:!0}),s.writeFileSync(i,a,`utf-8`)}return i}export{y as generateConfigTypes};
@@ -1,22 +1,22 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
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";
3
+ import { ConfigBaseMeta, ConfigCliMeta, ConfigDef, ConfigEngineFlatten, ConfigEngineOptions, ConfigEnvMeta, ConfigGroup, ConfigMeta, ConfigSchema, ConfigSchemaInput, ConfigSchemaMap, ConfigSchemaType, ConfigScope, ConfigScopes, ConfigTypeMeta, ConfigValueType } from "./types.js";
4
+ import { CollectVarsOptions, DEFAULT_ENV_PREFIX, collectRequired, collectVars, pathOf } from "./collect.js";
5
5
  import { BuildConfigJsonOptions, ConfigJsonDoc, ConfigJsonEntry, buildConfigJson } from "./config-json.js";
6
6
  import { EnvFileOptions, generateEnvFile } from "./env-file.js";
7
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";
8
+ import { GenerateEnvTypesOptions, generateConfigEnv, generateEnv, generateEnvDts, generateEnvTypes } from "./generators/env.js";
9
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, renderConfigImports, renderConfigTypes, resolveScopeSchema } from "./generators/types.js";
10
+ import { GenerateMarkdownOptions, RenderConfigFileOptions, RenderMarkdownFrontmatter, RenderMarkdownOptions, generateConfigMarkdown } from "./generators/markdown.js";
11
+ import { GenerateTypesOptions, generateConfigTypes } from "./generators/types.js";
12
12
  import { ConfigEngine, createConfigEngine } from "./engine.js";
13
- import { EnvSource, EnvTree, applyOverrides, envBool, envInt, envList, envMap, envString, parseEnvTree, readEnvPath, trimTrailingSlashes } from "./env.js";
13
+ import { EnvSource, EnvTree, envBool, envInt, envList, envMap, envPathOf, envString, parseEnvTree, readEnvPath } from "./env.js";
14
14
  import { FormatGeneratedOptions, GENERATED_FORMAT_OPTIONS, formatGenerated } from "./generated-format.js";
15
15
  import "./generators/index.js";
16
16
  import { findProjectRoot, monorepoRoot } from "./root.js";
17
- import { SplitSchema, compileZodSchema, envMetaOf, flattenBaseSchema, renderTsType, resolveUntypedSchema, splitBaseSchema, zodToJsonSchema, zodToUntypedDefinition } from "./schema.js";
17
+ import { SplitSchema, compileZodSchema, flattenBaseSchema, isSchemaType, isZodSchema, metaOf, normalizeConfigSchema, normalizeJsonSchemaMetadata, renderTsType, resolveUntypedSchema, splitBaseSchema, toSchemaType, zodToJsonSchema, zodToSchemaMap, zodToUntypedDefinition } from "./schema.js";
18
18
  declare namespace index_d_exports {
19
- 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, FormatGeneratedOptions, GENERATED_FORMAT_OPTIONS, 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, formatGenerated, generateCliArgsOptions, generateCliOptions, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, monorepoRoot, parseEnvTree, readEnvPath, renderAllConfigTypes, renderConfigFileMarkdown, renderConfigImports, renderConfigIndex, renderConfigTypes, renderScopeMarkdown, renderTsType, resolveScopeSchema, resolveUntypedSchema, splitBaseSchema, trimTrailingSlashes, zodToJsonSchema, zodToUntypedDefinition };
19
+ export { BuildConfigJsonOptions, CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, CollectVarsOptions, ConfigBaseMeta, ConfigCliMeta, ConfigDef, ConfigEngine, ConfigEngineFlatten, ConfigEngineOptions, ConfigEnvMeta, ConfigGroup, ConfigJsonDoc, ConfigJsonEntry, ConfigMeta, ConfigSchema, ConfigSchemaInput, ConfigSchemaMap, ConfigSchemaType, ConfigScope, ConfigScopes, ConfigTypeMeta, ConfigValueType, DEFAULT_ENV_PREFIX, EnvFileOptions, EnvSource, EnvTree, FormatGeneratedOptions, GENERATED_FORMAT_OPTIONS, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownFrontmatter, RenderMarkdownOptions, SplitSchema, buildConfigJson, cliFlagLabel, cliFlagOf, cliShortOf, collectRequired, collectVars, compileZodSchema, createCliArgsParser, createConfigEngine, envBool, envInt, envList, envMap, envPathOf, envString, findProjectRoot, flagOf, flattenBaseSchema, formatGenerated, generateCliArgsOptions, generateCliOptions, generateConfigEnv, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, isSchemaType, isZodSchema, metaOf, monorepoRoot, normalizeConfigSchema, normalizeJsonSchemaMetadata, parseEnvTree, pathOf, readEnvPath, renderTsType, resolveUntypedSchema, splitBaseSchema, toSchemaType, zodToJsonSchema, zodToSchemaMap, zodToUntypedDefinition };
20
20
  }
21
21
  //#endregion
22
- 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, FormatGeneratedOptions, GENERATED_FORMAT_OPTIONS, 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, formatGenerated, generateCliArgsOptions, generateCliOptions, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, index_d_exports, monorepoRoot, parseEnvTree, readEnvPath, renderAllConfigTypes, renderConfigFileMarkdown, renderConfigImports, renderConfigIndex, renderConfigTypes, renderScopeMarkdown, renderTsType, resolveScopeSchema, resolveUntypedSchema, splitBaseSchema, trimTrailingSlashes, zodToJsonSchema, zodToUntypedDefinition };
22
+ export { BuildConfigJsonOptions, CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, CollectVarsOptions, ConfigBaseMeta, ConfigCliMeta, ConfigDef, ConfigEngine, ConfigEngineFlatten, ConfigEngineOptions, ConfigEnvMeta, ConfigGroup, ConfigJsonDoc, ConfigJsonEntry, ConfigMeta, ConfigSchema, ConfigSchemaInput, ConfigSchemaMap, ConfigSchemaType, ConfigScope, ConfigScopes, ConfigTypeMeta, ConfigValueType, DEFAULT_ENV_PREFIX, EnvFileOptions, EnvSource, EnvTree, FormatGeneratedOptions, GENERATED_FORMAT_OPTIONS, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownFrontmatter, RenderMarkdownOptions, SplitSchema, buildConfigJson, cliFlagLabel, cliFlagOf, cliShortOf, collectRequired, collectVars, compileZodSchema, createCliArgsParser, createConfigEngine, envBool, envInt, envList, envMap, envPathOf, envString, findProjectRoot, flagOf, flattenBaseSchema, formatGenerated, generateCliArgsOptions, generateCliOptions, generateConfigEnv, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, index_d_exports, isSchemaType, isZodSchema, metaOf, monorepoRoot, normalizeConfigSchema, normalizeJsonSchemaMetadata, parseEnvTree, pathOf, readEnvPath, renderTsType, resolveUntypedSchema, splitBaseSchema, toSchemaType, zodToJsonSchema, zodToSchemaMap, zodToUntypedDefinition };
@@ -1 +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,renderTsType as i,resolveUntypedSchema as a,splitBaseSchema as o,zodToJsonSchema as s,zodToUntypedDefinition as c}from"./schema.js";import{envPathOf as l}from"./types.js";import{DEFAULT_ENV_PREFIX as u,collectEnvVars as d,collectRequiredEnvVars as f}from"./collect.js";import{buildConfigJson as p}from"./config-json.js";import{generateEnvFile as m}from"./env-file.js";import{cliFlagLabel as h,cliFlagOf as g,cliShortOf as _,createCliArgsParser as v,flagOf as y,generateCliArgsOptions as b,generateCliOptions as x}from"./generators/cli.js";import{generateEnv as S,generateEnvDts as C,generateEnvTypes as w}from"./generators/env.js";import{generateConfigJsonSchema as T,generateJsonSchemaFile as E}from"./generators/json.js";import{generateConfigMarkdown as D,renderConfigFileMarkdown as O,renderConfigIndex as k,renderScopeMarkdown as A}from"./generators/markdown.js";import{generateConfigTypes as j,renderAllConfigTypes as M,renderConfigImports as N,renderConfigTypes as P,resolveScopeSchema as F}from"./generators/types.js";import{findProjectRoot as I,monorepoRoot as L}from"./root.js";import{createConfigEngine as R}from"./engine.js";import{applyOverrides as z,envBool as B,envInt as V,envList as H,envMap as U,envString as W,parseEnvTree as G,readEnvPath as K,trimTrailingSlashes as q}from"./env.js";import{GENERATED_FORMAT_OPTIONS as J,formatGenerated as Y}from"./generated-format.js";import"./generators/index.js";var X=/* @__PURE__ */ e({DEFAULT_ENV_PREFIX:()=>u,GENERATED_FORMAT_OPTIONS:()=>J,applyOverrides:()=>z,buildConfigJson:()=>p,cliFlagLabel:()=>h,cliFlagOf:()=>g,cliShortOf:()=>_,collectEnvVars:()=>d,collectRequiredEnvVars:()=>f,compileZodSchema:()=>t,createCliArgsParser:()=>v,createConfigEngine:()=>R,envBool:()=>B,envInt:()=>V,envList:()=>H,envMap:()=>U,envMetaOf:()=>n,envPathOf:()=>l,envString:()=>W,findProjectRoot:()=>I,flagOf:()=>y,flattenBaseSchema:()=>r,formatGenerated:()=>Y,generateCliArgsOptions:()=>b,generateCliOptions:()=>x,generateConfigJsonSchema:()=>T,generateConfigMarkdown:()=>D,generateConfigTypes:()=>j,generateEnv:()=>S,generateEnvDts:()=>C,generateEnvFile:()=>m,generateEnvTypes:()=>w,generateJsonSchemaFile:()=>E,monorepoRoot:()=>L,parseEnvTree:()=>G,readEnvPath:()=>K,renderAllConfigTypes:()=>M,renderConfigFileMarkdown:()=>O,renderConfigImports:()=>N,renderConfigIndex:()=>k,renderConfigTypes:()=>P,renderScopeMarkdown:()=>A,renderTsType:()=>i,resolveScopeSchema:()=>F,resolveUntypedSchema:()=>a,splitBaseSchema:()=>o,trimTrailingSlashes:()=>q,zodToJsonSchema:()=>s,zodToUntypedDefinition:()=>c});export{u as DEFAULT_ENV_PREFIX,J as GENERATED_FORMAT_OPTIONS,z as applyOverrides,p as buildConfigJson,h as cliFlagLabel,g as cliFlagOf,_ as cliShortOf,d as collectEnvVars,f as collectRequiredEnvVars,t as compileZodSchema,v as createCliArgsParser,R as createConfigEngine,B as envBool,V as envInt,H as envList,U as envMap,n as envMetaOf,l as envPathOf,W as envString,I as findProjectRoot,y as flagOf,r as flattenBaseSchema,Y as formatGenerated,b as generateCliArgsOptions,x as generateCliOptions,T as generateConfigJsonSchema,D as generateConfigMarkdown,j as generateConfigTypes,S as generateEnv,C as generateEnvDts,m as generateEnvFile,w as generateEnvTypes,E as generateJsonSchemaFile,L as monorepoRoot,G as parseEnvTree,K as readEnvPath,M as renderAllConfigTypes,O as renderConfigFileMarkdown,N as renderConfigImports,k as renderConfigIndex,P as renderConfigTypes,A as renderScopeMarkdown,i as renderTsType,F as resolveScopeSchema,a as resolveUntypedSchema,o as splitBaseSchema,X as src_exports,q as trimTrailingSlashes,s as zodToJsonSchema,c as zodToUntypedDefinition};
1
+ import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{compileZodSchema as t,flattenBaseSchema as n,isSchemaType as r,isZodSchema as i,metaOf as a,normalizeConfigSchema as o,normalizeJsonSchemaMetadata as s,renderTsType as c,resolveUntypedSchema as l,splitBaseSchema as u,toSchemaType as d,zodToJsonSchema as f,zodToSchemaMap as p,zodToUntypedDefinition as m}from"./schema.js";import{DEFAULT_ENV_PREFIX as h,collectRequired as g,collectVars as _,pathOf as v}from"./collect.js";import{buildConfigJson as y}from"./config-json.js";import{generateEnvFile as b}from"./env-file.js";import{cliFlagLabel as x,cliFlagOf as S,cliShortOf as C,createCliArgsParser as w,flagOf as T,generateCliArgsOptions as E,generateCliOptions as D}from"./generators/cli.js";import{generateConfigEnv as O,generateEnv as k,generateEnvDts as A,generateEnvTypes as j}from"./generators/env.js";import{generateConfigJsonSchema as M,generateJsonSchemaFile as N}from"./generators/json.js";import{generateConfigMarkdown as P}from"./generators/markdown.js";import{generateConfigTypes as F}from"./generators/types.js";import{findProjectRoot as I,monorepoRoot as L}from"./root.js";import{createConfigEngine as R}from"./engine.js";import{envBool as z,envInt as B,envList as V,envMap as H,envPathOf as U,envString as W,parseEnvTree as G,readEnvPath as K}from"./env.js";import{GENERATED_FORMAT_OPTIONS as q,formatGenerated as J}from"./generated-format.js";import"./generators/index.js";var Y=/* @__PURE__ */ e({DEFAULT_ENV_PREFIX:()=>h,GENERATED_FORMAT_OPTIONS:()=>q,buildConfigJson:()=>y,cliFlagLabel:()=>x,cliFlagOf:()=>S,cliShortOf:()=>C,collectRequired:()=>g,collectVars:()=>_,compileZodSchema:()=>t,createCliArgsParser:()=>w,createConfigEngine:()=>R,envBool:()=>z,envInt:()=>B,envList:()=>V,envMap:()=>H,envPathOf:()=>U,envString:()=>W,findProjectRoot:()=>I,flagOf:()=>T,flattenBaseSchema:()=>n,formatGenerated:()=>J,generateCliArgsOptions:()=>E,generateCliOptions:()=>D,generateConfigEnv:()=>O,generateConfigJsonSchema:()=>M,generateConfigMarkdown:()=>P,generateConfigTypes:()=>F,generateEnv:()=>k,generateEnvDts:()=>A,generateEnvFile:()=>b,generateEnvTypes:()=>j,generateJsonSchemaFile:()=>N,isSchemaType:()=>r,isZodSchema:()=>i,metaOf:()=>a,monorepoRoot:()=>L,normalizeConfigSchema:()=>o,normalizeJsonSchemaMetadata:()=>s,parseEnvTree:()=>G,pathOf:()=>v,readEnvPath:()=>K,renderTsType:()=>c,resolveUntypedSchema:()=>l,splitBaseSchema:()=>u,toSchemaType:()=>d,zodToJsonSchema:()=>f,zodToSchemaMap:()=>p,zodToUntypedDefinition:()=>m});export{h as DEFAULT_ENV_PREFIX,q as GENERATED_FORMAT_OPTIONS,y as buildConfigJson,x as cliFlagLabel,S as cliFlagOf,C as cliShortOf,g as collectRequired,_ as collectVars,t as compileZodSchema,w as createCliArgsParser,R as createConfigEngine,z as envBool,B as envInt,V as envList,H as envMap,U as envPathOf,W as envString,I as findProjectRoot,T as flagOf,n as flattenBaseSchema,J as formatGenerated,E as generateCliArgsOptions,D as generateCliOptions,O as generateConfigEnv,M as generateConfigJsonSchema,P as generateConfigMarkdown,F as generateConfigTypes,k as generateEnv,A as generateEnvDts,b as generateEnvFile,j as generateEnvTypes,N as generateJsonSchemaFile,r as isSchemaType,i as isZodSchema,a as metaOf,L as monorepoRoot,o as normalizeConfigSchema,s as normalizeJsonSchemaMetadata,G as parseEnvTree,v as pathOf,K as readEnvPath,c as renderTsType,l as resolveUntypedSchema,u as splitBaseSchema,Y as src_exports,d as toSchemaType,f as zodToJsonSchema,p as zodToSchemaMap,m as zodToUntypedDefinition};
@@ -1,6 +1,6 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
- import { EnvVarMeta } from "./types.js";
3
+ import { ConfigMeta, ConfigSchema, ConfigSchemaInput, ConfigSchemaMap, ConfigSchemaType } from "./types.js";
4
4
  import { ZodType } from "zod";
5
5
  import { Schema } from "untyped";
6
6
  //#region packages/config/src/schema.d.ts
@@ -22,12 +22,36 @@ interface JsonSchemaNode {
22
22
  additionalProperties?: JsonSchemaNode | boolean;
23
23
  propertyNames?: JsonSchemaNode;
24
24
  env?: string;
25
+ envName?: string;
26
+ envPath?: string;
27
+ path?: string;
28
+ cliFlag?: string;
29
+ cliFlagShort?: string;
30
+ typeName?: string;
31
+ id?: string;
25
32
  scope?: string;
26
33
  secret?: boolean;
27
34
  public?: boolean;
35
+ deprecated?: boolean;
36
+ deprecationMessage?: string;
37
+ example?: string | string[];
38
+ since?: string;
39
+ see?: string | string[];
40
+ remarks?: string;
41
+ experimental?: boolean;
42
+ alpha?: boolean;
43
+ beta?: boolean;
28
44
  }
29
- /** Read the env metadata attached to a Zod leaf via `.meta()`. */
30
- export declare function envMetaOf(schema: ZodType): EnvVarMeta | undefined;
45
+ /** Whether a value is a Zod schema. */
46
+ export declare function isZodSchema(value: unknown): value is ZodType;
47
+ /** Whether a value is a resolved untyped schema. */
48
+ export declare function isSchemaType(value: unknown): value is ConfigSchemaType;
49
+ /** Read the config metadata attached to a Zod leaf or an untyped schema node. */
50
+ export declare function metaOf(schema: ZodType | Schema): ConfigMeta | undefined;
51
+ /** Convert a Zod schema or untyped schema to the untyped representation. */
52
+ export declare function toSchemaType(schema: ConfigSchemaInput): ConfigSchemaType;
53
+ /** Normalize any supported schema shape into scoped untyped schemas. */
54
+ export declare function normalizeConfigSchema(schema: ConfigSchema): ConfigSchemaMap;
31
55
  /**
32
56
  * Render a JSON Schema node as a TypeScript type string. Nested `$defs` are
33
57
  * referenced by name, unions become `A | B`, records become `Record<...>` and
@@ -43,6 +67,10 @@ export declare function compileZodSchema<T extends ZodType>(schema: T): T;
43
67
  * `resolveSchema` synchronously.
44
68
  */
45
69
  export declare function resolveUntypedSchema(input: Record<string, unknown>): Schema;
70
+ /** Normalize Zod's JSON Schema metadata into standard JSON Schema fields. */
71
+ export declare function normalizeJsonSchemaMetadata(node: unknown): void;
72
+ /** Lower a Zod schema and every named `$defs` entry into resolved schemas. */
73
+ export declare function zodToSchemaMap(zodSchema: ZodType): Record<string, ConfigSchemaType>;
46
74
  /** Build the resolved untyped JSON Schema directly from a Zod config schema. */
47
75
  export declare function zodToJsonSchema(zodSchema: ZodType): Schema;
48
76
  /** A resolved untyped schema split into its base group and the remaining groups. */
@@ -1 +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||Object.keys(e).length===0}function i(e){return`'${String(e).replace(/\\/g,`\\\\`).replace(/'/g,`\\'`)}'`}function a(e,n={}){if(!e||r(e))return`unknown`;if(e.$ref){let t=e.$ref.split(`/`).pop()??`unknown`;return n[t]?t:`unknown`}if(e.const!==void 0)return typeof e.const==`string`?i(e.const):String(e.const);if(Array.isArray(e.enum)&&e.enum.length>0)return e.enum.map(i).join(` | `);let o=e.anyOf??e.oneOf;if(Array.isArray(o)&&o.length>0)return o.map(e=>a(e,n)).join(` | `);if(e.properties){let t=Array.isArray(e.required)?e.required:[];return`{ ${Object.entries(e.properties).map(([e,r])=>`${e}${t.includes(e)?``:`?`}: ${a(r,n)}`).join(`; `)} }`}let s=Array.isArray(e.type)?e.type:e.type?[e.type]:[];if(s.includes(`array`))return`Array<${a(e.items,n)}>`;if(s.includes(`object`)){let t=e.additionalProperties;return t===void 0||t===!1?`Record<string, unknown>`:`Record<string, ${t===!0||r(t)?`unknown`:a(t,n)}>`}return s.length===0?`unknown`:s.map(e=>t[e]??`unknown`).join(` | `)}function o(e){return e.$ref?`any`:e.const===void 0?e.anyOf||e.oneOf?`any`:e.enum?`string`:Array.isArray(e.type)?e.type.find(e=>e!==`null`)??`string`:e.type??`string`:typeof e.const==`string`?`string`:typeof e.const}function s(e,t=!1,n={}){if(e.$ref)return{$schema:{type:`any`,tsType:e.$ref.split(`/`).pop()??`unknown`,...t?{tags:[`@required`]}:{}}};if(e.properties){let r=t?{$schema:{tags:[`@required`]}}:{};for(let[t,i]of Object.entries(e.properties))r[t]=s(i,e.required?.includes(t)??!1,n);return e.additionalProperties!==void 0&&e.additionalProperties!==!1&&(r.$schema={...r.$schema??{},allowExtraKeys:!0}),r}let r=o(e),i={};return e.defaultValue===void 0?e.default!==void 0&&(i.$default=e.default):i.$default=e.defaultValue,i.$schema={type:r,tsType:a(e,n),...r===`array`?{items:{type:o(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}:{}},i}function c(e){let t=e.toJSONSchema();if(!t)return{};let n=t.$defs??{},r=t.$ref?.split(`/`).pop();return s(r&&n[r]?n[r]:t,!1,n)}function l(t){try{return e.compile(t)}catch{return t}}function u(e){return e!==null&&!Array.isArray(e)&&typeof e==`object`}function d(e){let t=typeof e;if(t!==`undefined`&&e!==null)return Array.isArray(e)?`array`:t}function f(e,t,n=`.`){return e?`${e}${n}${t}`:t}function p(e){return[...new Set(e.filter(e=>!!e))]}function m(e){if(e.type===`array`&&!(`items`in e)){let t=p((e.default??[]).map(e=>d(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 h(e,t,n){if(n.cache.has(t))return n.cache.get(t);let r=`#${t.replace(/\./g,`/`)}`;if(!u(e)){let i=Array.isArray(e)?[...e]:e,a={type:d(e),id:r,default:i};return m(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]=h(e[o],f(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||=d(i.default)||(i.properties?`object`:`any`),m(i),i}function g(e){return h(e,``,{root:e,cache:/* @__PURE__ */ new Map})}function _(e){return g(c(e))}function v(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 y(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{l as compileZodSchema,n as envMetaOf,y as flattenBaseSchema,a as renderTsType,g as resolveUntypedSchema,v as splitBaseSchema,_ as zodToJsonSchema,c as zodToUntypedDefinition};
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){return typeof e==`object`&&!!e&&`safeParse`in e}function r(e){return typeof e!=`object`||!e||Array.isArray(e)||n(e)?!1:`type`in e||`properties`in e||`tsType`in e||`id`in e}const i=[`id`,`description`,`required`,`deprecated`,`deprecationMessage`,`example`,`since`,`see`,`remarks`,`experimental`,`alpha`,`beta`,`secret`,`scope`,`public`,`defaultValue`,`envName`,`env`,`envPath`,`path`,`typeName`,`cliFlag`,`cliFlagShort`];function a(e){if(n(e)){let t=e.meta?.();return t&&typeof t==`object`?t:void 0}let t=e,r={};for(let e of i)e===`id`&&typeof t.id==`string`&&t.id.startsWith(`#`)||t[e]!==void 0&&(r[e]=t[e]);return Object.keys(r).length>0?r:void 0}function o(e){return n(e)?E(e):e}function s(e){let t={},n=/* @__PURE__ */ new Set,r={type:`object`,properties:t};for(let i of e){let a=i;if(a.properties&&Object.assign(t,a.properties),Array.isArray(a.required))for(let e of a.required)n.add(e);e.length===1&&(r=i)}return{...r,type:`object`,properties:t,...n.size>0?{required:[...n]}:{}}}function c(e){if(Array.isArray(e)){let t=s(e.map(o));return{[a(t)?.id??`config`]:t}}if(n(e)||r(e)){let t=o(e);return{[a(t)?.id??`config`]:t}}let t={};for(let[n,r]of Object.entries(e))t[n]=Array.isArray(r)?s(r.map(o)):o(r);return t}function l(e){return!e||Object.keys(e).length===0}function u(e){return`'${String(e).replace(/\\/g,`\\\\`).replace(/'/g,`\\'`)}'`}function d(e,n={}){if(!e||l(e))return`unknown`;if(e.$ref){let t=e.$ref.split(`/`).pop()??`unknown`;return n[t]?t:`unknown`}if(e.const!==void 0)return typeof e.const==`string`?u(e.const):String(e.const);if(Array.isArray(e.enum)&&e.enum.length>0)return e.enum.map(u).join(` | `);let r=e.anyOf??e.oneOf;if(Array.isArray(r)&&r.length>0)return r.map(e=>d(e,n)).join(` | `);if(e.properties){let t=Array.isArray(e.required)?e.required:[];return`{ ${Object.entries(e.properties).map(([e,r])=>`${e}${t.includes(e)?``:`?`}: ${d(r,n)}`).join(`; `)} }`}let i=Array.isArray(e.type)?e.type:e.type?[e.type]:[];if(i.includes(`array`))return`Array<${d(e.items,n)}>`;if(i.includes(`object`)){let t=e.additionalProperties;return t===void 0||t===!1?`Record<string, unknown>`:`Record<string, ${t===!0||l(t)?`unknown`:d(t,n)}>`}return i.length===0?`unknown`:i.map(e=>t[e]??`unknown`).join(` | `)}function f(e){return e.$ref?`any`:e.const===void 0?e.anyOf||e.oneOf?`any`:e.enum?`string`:Array.isArray(e.type)?e.type.find(e=>e!==`null`)??`string`:e.type??`string`:typeof e.const==`string`?`string`:typeof e.const}function p(e,t={}){if(!e)return{};let n=e.$ref?.split(`/`).pop(),r=n?t[n]:void 0,i=e.required===!0||r?.required===!0||void 0,a=e.env??r?.env,o=e.envName??r?.envName,s=e.envPath??r?.envPath,c=e.path??r?.path,l=e.cliFlag??r?.cliFlag,u=e.cliFlagShort??r?.cliFlagShort,d=e.typeName??r?.typeName,f=e.id??r?.id,p=e.deprecated??r?.deprecated,m=e.deprecationMessage??r?.deprecationMessage,h=e.example??r?.example,g=e.since??r?.since,_=e.see??r?.see,v=e.remarks??r?.remarks,y=e.experimental??r?.experimental,b=e.alpha??r?.alpha,x=e.beta??r?.beta;for(let n of[...e.anyOf??[],...e.oneOf??[]]){let e=n.$ref?.split(`/`).pop(),r=e?t[e]:void 0;i??=n.required===!0||r?.required===!0||void 0,a??=n.env??r?.env,o??=n.envName??r?.envName,s??=n.envPath??r?.envPath,c??=n.path??r?.path,l??=n.cliFlag??r?.cliFlag,u??=n.cliFlagShort??r?.cliFlagShort,d??=n.typeName??r?.typeName,f??=n.id??r?.id,p??=n.deprecated??r?.deprecated,m??=n.deprecationMessage??r?.deprecationMessage,h??=n.example??r?.example,g??=n.since??r?.since,_??=n.see??r?.see,v??=n.remarks??r?.remarks,y??=n.experimental??r?.experimental,b??=n.alpha??r?.alpha,x??=n.beta??r?.beta}return{...a===void 0?{}:{env:a},...o===void 0?{}:{envName:o},...s===void 0?{}:{envPath:s},...c===void 0?{}:{path:c},...l===void 0?{}:{cliFlag:l},...u===void 0?{}:{cliFlagShort:u},...d===void 0?{}:{typeName:d},...f===void 0?{}:{id:f},...i===void 0?{}:{required:i},...p===void 0?{}:{deprecated:p},...m===void 0?{}:{deprecationMessage:m},...h===void 0?{}:{example:h},...g===void 0?{}:{since:g},..._===void 0?{}:{see:_},...v===void 0?{}:{remarks:v},...y===void 0?{}:{experimental:y},...b===void 0?{}:{alpha:b},...x===void 0?{}:{beta:x}}}function m(e,t=!1,n={}){if(e.$ref){let r=e.$ref.split(`/`).pop()??`unknown`,i=n[r],a=e.description??i?.description;return{$schema:{type:`any`,tsType:r,...t?{tags:[`@required`]}:{},...a?{description:a}:{},...p(e,n)}}}if(e.properties){let r=t?{$schema:{tags:[`@required`]}}:{};e.description&&(r.$schema={...r.$schema,description:e.description});let i=p(e,n);(i.deprecated!==void 0||i.example!==void 0)&&(r.$schema={...r.$schema,...i});for(let[t,i]of Object.entries(e.properties))r[t]=m(i,e.required?.includes(t)??!1,n);return e.additionalProperties!==void 0&&e.additionalProperties!==!1&&(r.$schema={...r.$schema,allowExtraKeys:!0}),r}let r=f(e),i={};return e.defaultValue===void 0?e.default!==void 0&&(i.$default=e.default):i.$default=e.defaultValue,i.$schema={type:r,tsType:d(e,n),...r===`array`?{items:{type:f(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}:{},...p(e,n),...e.defaultValue!==void 0&&e.default!==void 0?{envDefault:e.default}:{}},i}function h(e){let t=e.toJSONSchema();if(!t)return{};let n=t.$defs??{},r=t.$ref?.split(`/`).pop();return m(r&&n[r]?n[r]:t,!1,n)}function g(t){try{return e.compile(t)}catch{return t}}function _(e){return e!==null&&!Array.isArray(e)&&typeof e==`object`}function v(e){let t=typeof e;if(t!==`undefined`&&e!==null)return Array.isArray(e)?`array`:t}function y(e,t,n=`.`){return e?`${e}${n}${t}`:t}function b(e){return[...new Set(e.filter(e=>!!e))]}function x(e){if(e.type===`array`&&!(`items`in e)){let t=b((e.default??[]).map(e=>v(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 S(e,t,n){if(n.cache.has(t))return n.cache.get(t);let r=`#${t.replace(/\./g,`/`)}`;if(!_(e)){let i=Array.isArray(e)?[...e]:e,a={type:v(e),id:r,default:i};return x(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]=S(e[o],y(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||=v(i.default)||(i.properties?`object`:`any`),x(i),i}function C(e){return S(e,``,{root:e,cache:/* @__PURE__ */ new Map})}function w(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e;if(typeof t.deprecated==`string`&&(t.deprecationMessage=t.deprecated,t.deprecated=!0),`example`in t){let e=t.example;delete t.example,t.examples=Array.isArray(e)?e:[e]}for(let e of[`properties`,`$defs`]){let n=t[e];if(n&&typeof n==`object`&&!Array.isArray(n))for(let e of Object.values(n))w(e)}for(let e of[`items`,`additionalProperties`])w(t[e]);for(let e of[`anyOf`,`oneOf`,`allOf`]){let n=t[e];if(Array.isArray(n))for(let e of n)w(e)}}function T(e){let t=e.toJSONSchema();if(!t)return{};let n=t.$defs??{},r={};for(let[e,t]of Object.entries(n))r[e]=C(m(t,!1,n));let i=t.$ref?.split(`/`).pop()??t.id??a(e)?.id??`config`;return r[i]||(r[i]=C(m(t,!1,n))),r}function E(e){return C(h(e))}function D(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 O(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{g as compileZodSchema,O as flattenBaseSchema,r as isSchemaType,n as isZodSchema,a as metaOf,c as normalizeConfigSchema,w as normalizeJsonSchemaMetadata,d as renderTsType,C as resolveUntypedSchema,D as splitBaseSchema,o as toSchemaType,E as zodToJsonSchema,T as zodToSchemaMap,h as zodToUntypedDefinition};
@@ -3,21 +3,36 @@ import __tsdown_shims_url from 'node:url';
3
3
  import { ZodType } from "zod";
4
4
  import { Schema } from "untyped";
5
5
  //#region packages/config/src/types.d.ts
6
- /** The value type an env var resolves to. */
7
- export type EnvValueType = 'string' | 'number' | 'boolean' | 'array' | 'object';
6
+ export type ConfigMeta = ConfigBaseMeta & ConfigEnvMeta & ConfigTypeMeta & ConfigCliMeta;
8
7
  /**
9
- * The metadata a consumer attaches to a Zod leaf via `.meta()` to describe the
10
- * environment variable that backs a configuration value.
8
+ * The metadata attached to a Zod leaf via `.meta()` to describe the
9
+ * generated config that backs the config value.
11
10
  */
12
- export interface EnvVarMeta {
13
- /** The env var name, e.g. `MYAPP_AUTH_PASSWORD`. */
14
- env: string;
15
- /** The dotted config path, e.g. `auth.password`. */
16
- path?: string;
17
- /** Human-readable description (used by `.env.example` + the docs). */
11
+ export interface ConfigBaseMeta {
12
+ /** Identifier for this config eg. `ToolchainLoggerConfig`. */
13
+ id?: string;
14
+ /** Human-readable description (added to the generated types' JSDocs, generated .env and markdown files). */
18
15
  description?: string;
19
16
  /** Whether the var has no safe default and must be set. */
20
17
  required?: boolean;
18
+ /** Mark this config as deprecated (`@deprecated` in the generated types). */
19
+ deprecated?: boolean;
20
+ /** Optional deprecation message shown after `@deprecated` / `**Deprecated**`. */
21
+ deprecationMessage?: string;
22
+ /** Add custom example(s) that will be added to the generated documentation. */
23
+ example?: string[] | string;
24
+ /** Version or date this option was introduced (`@since`). */
25
+ since?: string;
26
+ /** Related link(s) for the option (`@see`). */
27
+ see?: string[] | string;
28
+ /** Extra notes shown after the description (`@remarks`). */
29
+ remarks?: string;
30
+ /** Mark the option as experimental (`@experimental`). */
31
+ experimental?: boolean;
32
+ /** Mark the option as alpha (`@alpha`). */
33
+ alpha?: boolean;
34
+ /** Mark the option as beta (`@beta`). */
35
+ beta?: boolean;
21
36
  /** Whether the value is a secret (never emitted/logged). */
22
37
  secret?: boolean;
23
38
  /** The scope the variable belongs to. */
@@ -26,42 +41,135 @@ export interface EnvVarMeta {
26
41
  public?: boolean;
27
42
  /**
28
43
  * The resolved-config default, when it differs from the raw env default
29
- * (e.g. the positive field behind a negative-named env flag).
44
+ * (e.g. the positive field behind a negative-named CLI flag).
30
45
  */
31
46
  defaultValue?: unknown;
32
47
  }
33
- /** A collected env-var definition. */
34
- export interface EnvVarDef {
35
- name: string;
48
+ /**
49
+ * The metadata attached to a Zod leaf via `.meta()` to describe the
50
+ * generated environment variable that backs the config value.
51
+ */
52
+ export interface ConfigEnvMeta {
53
+ /** The env var name, e.g. `MYAPP_AUTH_PASSWORD` (optional for non-env configs). */
54
+ envName?: string;
55
+ /**
56
+ * The env var name, e.g. `MYAPP_AUTH_PASSWORD` (optional for non-env configs).
57
+ * @deprecated use `envName` instead.
58
+ */
59
+ env?: string;
60
+ /** Use a different dotted config path, e.g. `auth.password` instead of the resolved one. */
61
+ envPath?: string;
62
+ /**
63
+ * Use a different dotted config path, e.g. `auth.password` instead of the resolved one.
64
+ * @deprecated use `envPath` instead.
65
+ */
66
+ path?: string;
67
+ }
68
+ /**
69
+ * The metadata attached to a Zod leaf via `.meta()` to describe the
70
+ * generated type that backs the config value.
71
+ */
72
+ export interface ConfigTypeMeta {
73
+ /**
74
+ * The generated type/interface name eg. `ToolchainTsconfigConfig`.
75
+ *
76
+ * Defaults to the zod schema's `.meta({ id: <value> })` ({@link ConfigBaseMeta.id})
77
+ * and falls back to `<PascalScope>Config`.
78
+ */
79
+ typeName?: string;
80
+ }
81
+ /**
82
+ * The metadata attached to a Zod leaf via `.meta()` to describe the
83
+ * generated cli flag that backs the config value.
84
+ */
85
+ export interface ConfigCliMeta {
86
+ /** Use a different CLI flag, e.g. CLI flag, e.g. `--base-url` instead of the resolved one. */
87
+ cliFlag?: string;
88
+ /** Shorthand CLI flag, e.g. `-u`. */
89
+ cliFlagShort?: string;
90
+ }
91
+ /** The value type a config value resolves to. */
92
+ export type ConfigValueType = 'string' | 'number' | 'boolean' | 'array' | 'object';
93
+ /** A collected config definition (env/cli metadata is optional). */
94
+ export interface ConfigDef {
95
+ /** The env var name, when the value is env-backed. */
96
+ name?: string;
97
+ /** The dotted config path. */
36
98
  path: string;
99
+ /** The CLI flag, when the value is CLI-backed or derives from an env var. */
100
+ cliFlag?: string;
37
101
  description?: string;
38
102
  default?: unknown;
39
103
  required?: boolean;
40
104
  secret?: boolean;
41
105
  public?: boolean;
42
106
  scope: string;
43
- envType?: EnvValueType;
44
- }
45
- /** One configuration scope: its Zod schema and an optional resolved schema. */
46
- export interface ConfigScopeDef {
47
- /** The Zod schema (the single source of truth). */
48
- zodSchema: ZodType;
49
- /** A pre-resolved untyped schema (resolved from the Zod schema if omitted). */
50
- jsonSchema?: Schema;
107
+ type?: ConfigValueType;
108
+ /** The raw config metadata attached to the schema leaf. */
109
+ meta?: ConfigMeta;
51
110
  }
111
+ /**
112
+ * The schema's object key that holds the config fields.
113
+ */
114
+ export type ConfigGroup = 'base' | (string & {}) | ConfigGroup[];
115
+ /** A config scope. */
116
+ export type ConfigScope = string;
117
+ /** A resolved untyped schema carrying the toolchain's config metadata. */
118
+ export type ConfigSchemaType = Schema & ConfigMeta;
119
+ /** A Zod schema or a resolved untyped schema. */
120
+ export type ConfigSchemaInput = ZodType | ConfigSchemaType;
121
+ /** A single schema, a list of schemas, or scoped schemas keyed by scope name. */
122
+ export type ConfigSchema<Scope extends ConfigScope = ConfigScope> = ConfigSchemaInput | ConfigSchemaInput[] | Record<Scope, ConfigSchemaInput | ConfigSchemaInput[]>;
123
+ /** Normalized schemas, keyed by scope name. */
124
+ export type ConfigSchemaMap = Record<string, ConfigSchemaType>;
52
125
  /** The scopes registered with an engine, keyed by scope name. */
53
- export type ConfigScopes = Record<string, ConfigScopeDef>;
126
+ export type ConfigScopes = Record<string, ConfigSchema | ConfigSchema[]>;
127
+ /**
128
+ * Flatten the schema by `n` levels.
129
+ *
130
+ * - When `true` the `baseGroup` will be ignored
131
+ * and the schema will flatten all top-level keys (for objects).
132
+ *
133
+ * - When defined as `{ level: <number> }` the `baseGroup` will be ignored
134
+ * and the schema will flatten keys `n` levels deep (for objects).
135
+ *
136
+ * - When defined as `{ maxDepth: <number> }` the `baseGroup` will be ignored
137
+ * and the schema will flatten keys `n` levels deep and stops at `maxDepth` (for objects).
138
+ */
139
+ export type ConfigEngineFlatten = boolean | {
140
+ level: number;
141
+ maxDepth?: never;
142
+ } | {
143
+ maxDepth: number;
144
+ level?: never;
145
+ };
54
146
  /** Options shared by every generator. */
55
147
  export interface ConfigEngineOptions {
56
148
  /** The scopes to walk, keyed by scope name (eg. `{ server, frontend, cli }`). */
57
- scopes: ConfigScopes;
149
+ schema: ConfigSchema;
58
150
  /** The env-var prefix (eg. `MYAPP_`). Kept as a replacement token in code. */
59
151
  envPrefix?: string;
60
152
  /**
61
- * The object key that holds the "flat" base config fields, hoisted out of
153
+ * The schema's object key that holds the "flat" base config fields, hoisted out of
62
154
  * the nested groups in the generated types/docs (default `base`).
63
155
  */
64
- baseGroup?: string;
156
+ baseGroup?: ConfigGroup;
157
+ /**
158
+ * Flattens the schema by `n` levels.
159
+ *
160
+ * - When `true` the `baseGroup` will be ignored
161
+ * and the schema will flatten all top-level keys (for objects).
162
+ *
163
+ * - When defined as `{ level: <number> }` the `baseGroup` will be ignored
164
+ * and the schema will flatten keys `n` levels deep (for objects).
165
+ */
166
+ flatten?: boolean | {
167
+ level: number;
168
+ maxLevel?: never;
169
+ } | {
170
+ maxLevel: number;
171
+ level?: never;
172
+ };
65
173
  /** The monorepo/project root used for default output paths. */
66
174
  root?: string;
67
175
  /**
@@ -70,6 +178,4 @@ export interface ConfigEngineOptions {
70
178
  */
71
179
  envPathOf?: (env: string) => string;
72
180
  }
73
- /** Derive the dotted config path from an env var name + prefix. */
74
- export declare function envPathOf(env: string, prefix?: string): string;
75
181
  //#endregion
@@ -0,0 +1,14 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { SyncTask } from "../../shared/src/toolchain.js";
4
+ import "../../shared/src/index.js";
5
+ //#region packages/core/src/editor-config.d.ts
6
+ /**
7
+ * Emit centralized config warnings: tool precedence conflicts and deprecated
8
+ * sections. Runs even when editor defaults are off so CLI/extension users still
9
+ * see the notices.
10
+ */
11
+ export declare function toolingConfigTask(): SyncTask;
12
+ /** Add project-scoped VS Code defaults when `fmt.vscode` / `lint.vscode` is on. */
13
+ export declare function editorConfigSyncTask(): SyncTask;
14
+ //#endregion
@@ -0,0 +1 @@
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{deepMerge as t,isPlainObject as n}from"../../shared/src/object-utils.js";import{errorMessage as r,warningMessage as i}from"../../shared/src/messages.js";import{FORMATTER_PRECEDENCE as a,LINTER_PRECEDENCE as o,resolveFmtTool as s,resolveFmtTools as c,resolveLintTool as l,resolveLintTools as u,sectionConfig as d,sectionEnabled as f}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import p from"node:fs";const m={oxc:`oxc.oxc-vscode`,biome:`biomejs.biome`,prettier:`esbenp.prettier-vscode`,dprint:`dprint.dprint`},h={oxc:{"source.fixAll.oxc":`explicit`},biome:{"quickfix.biome":`explicit`,"source.organizeImports.biome":`explicit`},eslint:{"source.fixAll.eslint":`explicit`}},g=[`javascript`,`javascriptreact`,`typescript`,`typescriptreact`];function _(e){let t=m[e];return t?{"editor.defaultFormatter":t,...Object.fromEntries(g.map(e=>[`[${e}]`,{"editor.defaultFormatter":t}]))}:{}}function v(e,t){for(let[r,i]of Object.entries(t)){let t=e[r];t===void 0?e[r]=i:n(t)&&n(i)&&v(t,i)}}function y(e){return e===!0||n(e)}function b(e,r){if(!n(r))return e;let i=r,a=i.overrides?t(e,i.overrides):e;for(let e of i.exclude??[]){let{[e]:t,...n}=a;a=n}return a}function x(){return{name:`tooling`,enabled:e=>f(e.fmt)||f(e.lint)||f(e.biome),run:e=>{let t=f(e.config.biome),n=c(e.config),s=u(e.config),l=t?a.filter(e=>e===`biome`||n.includes(e)):n,d=t?o.filter(e=>e===`biome`||s.includes(e)):s;return l.length>1&&e.warn(i(`fmt.conflict`,{tools:l.join(`, `),winner:l[0]}),`fmt.conflict`),d.length>1&&e.warn(i(`lint.conflict`,{tools:d.join(`, `),winner:d[0]}),`lint.conflict`),t&&e.warn(r(`deprecated.section.biome`),`deprecated.section.biome`),[]}}}function S(){return{name:`editor-config`,projectTypes:[`monorepo-root`,`project`],enabled:e=>y(f(e.fmt)?d(e.fmt)?.vscode:void 0)||y(f(e.lint)?d(e.lint)?.vscode:void 0),run:t=>{let r=s(t.config),i=l(t.config),a=f(t.config.fmt)?d(t.config.fmt)?.vscode:void 0,o=f(t.config.lint)?d(t.config.lint)?.vscode:void 0,c={};if(y(a)&&r&&Object.assign(c,b(_(r),a)),y(o)&&i&&Object.assign(c,b({"editor.codeActionsOnSave":h[i]??{}},o)),Object.keys(c).length===0)return[];let u=e.join(t.cwd,`.vscode`,`settings.json`),m={};if(p.existsSync(u))try{let e=JSON.parse(p.readFileSync(u,`utf-8`).replace(/^\uFEFF/,``));if(!n(e))return t.warn(`cannot add editor defaults: ${u} is not a JSON object.`,`vscode.settings-invalid`),[];m=e}catch{return t.warn(`cannot add editor defaults: ${u} is not valid JSON.`,`vscode.settings-invalid`),[]}if(t.check)return[];let g=JSON.stringify(m);return v(m,c),JSON.stringify(m)!==g&&(p.mkdirSync(e.dirname(u),{recursive:!0}),p.writeFileSync(u,`${JSON.stringify(m,null,4)}\n`,`utf-8`)),[]}}}export{S as editorConfigSyncTask,x as toolingConfigTask};
@@ -1 +1 @@
1
- import{default as e}from"node:path";import"node:url";import.meta.url;import{readJsonAt as t,toJson as n}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";import{findConfigFile as r}from"./loader.js";import i from"node:fs";const a=/* @__PURE__ */ new Set([`node_modules`,`dist`,`build`,`out`,`coverage`,`tmp`,`temp`,`vendor`,`jspm_packages`,`web_modules`]);function o(e){return e.startsWith(`.`)||a.has(e)}function s(t){try{return i.readdirSync(t,{withFileTypes:!0}).filter(e=>e.isDirectory()&&!e.isSymbolicLink()&&!o(e.name)).map(n=>e.join(t,n.name))}catch{return[]}}function c(t,n){return e.relative(t,n).replace(/\\/g,`/`)||`.`}function l(t){let n=n=>i.existsSync(e.join(t,n));if(n(`yarn.lock`))return`yarn`;if(n(`pnpm-lock.yaml`))return`pnpm`;if(n(`package-lock.json`))return`npm`;if(n(`bun.lock`)||n(`bun.lockb`))return`bun`}const u=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`];function d(e,n={}){let i=n.maxDepth??5,a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Map,d=(n,l)=>{let u=t(n,`package.json`),f=r(n);if(u||f){let t={...u?.name?{name:u.name}:{},dir:c(e,n),hasConfig:!!f,...f?{config:c(e,f)}:{},dependencies:[]};a.set(n,t),u?.name&&o.set(u.name,n)}if(!(l>=i))for(let e of s(n))d(e,l+1)};d(e,0);for(let[e,n]of a){let r=t(e,`package.json`);if(!r)continue;let i=/* @__PURE__ */ new Set;for(let t of u){let n=r[t];if(n&&typeof n==`object`)for(let t of Object.keys(n)){let n=o.get(t);n&&n!==e&&i.add(t)}}n.dependencies=[...i].sort()}let p=[...a.values()].sort((e,t)=>e.dir.localeCompare(t.dir)),m=p.filter(e=>e.hasConfig);return{root:e,packageManager:l(e),generatedAt:(/* @__PURE__ */ new Date()).toISOString(),projects:p,dbxProjects:m,order:f(m)}}function f(e){let t=/* @__PURE__ */ new Map;for(let n of e)n.name&&t.set(n.name,n.dir);let n=new Map(e.map(e=>[e.dir,e])),r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set,a=[],o=e=>{if(r.has(e)||i.has(e))return;i.add(e);let s=n.get(e);for(let e of s?.dependencies??[]){let r=t.get(e);r&&n.has(r)&&o(r)}i.delete(e),r.add(e),a.push(e)};for(let t of e)o(t.dir);return a}function p(t){return e.join(t,`.dbx`,`toolchain`,`projects.json`)}function m(t,r){let a=p(t);return i.mkdirSync(e.dirname(a),{recursive:!0}),i.writeFileSync(a,n(r??d(t)),`utf-8`),a}function h(e){try{return JSON.parse(i.readFileSync(p(e),`utf-8`))}catch{return}}export{a as IGNORED_DIRS,d as buildProjectGraph,l as detectPackageManager,f as orderProjects,p as projectGraphPath,h as readProjectGraph,m as writeProjectGraph};
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{readJsonAt as t,toJson as n}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";import{findConfigFile as r}from"./loader.js";import i from"node:fs";const a=/* @__PURE__ */ new Set([`node_modules`,`dist`,`build`,`out`,`coverage`,`tmp`,`temp`,`vendor`,`jspm_packages`,`web_modules`]);function o(e){return e.startsWith(`.`)||a.has(e)}function s(t){try{return i.readdirSync(t,{withFileTypes:!0}).filter(e=>e.isDirectory()&&!e.isSymbolicLink()&&!o(e.name)).map(n=>e.join(t,n.name))}catch{return[]}}function c(t,n){return e.relative(t,n).replace(/\\/g,`/`)||`.`}function l(t){let n=n=>i.existsSync(e.join(t,n));if(n(`yarn.lock`))return`yarn`;if(n(`pnpm-lock.yaml`))return`pnpm`;if(n(`package-lock.json`))return`npm`;if(n(`bun.lock`)||n(`bun.lockb`))return`bun`}const u=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`];function d(e,n={}){let i=n.maxDepth??5,a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Map,d=(n,l)=>{let u=t(n,`package.json`),f=r(n);if(u||f){let t={...u?.name?{name:u.name}:{},dir:c(e,n),hasConfig:!!f,...f?{config:c(e,f)}:{},dependencies:[]};a.set(n,t),u?.name&&o.set(u.name,n)}if(!(l>=i))for(let e of s(n))d(e,l+1)};d(e,0);for(let[e,n]of a){let r=t(e,`package.json`);if(!r)continue;let i=/* @__PURE__ */ new Set;for(let t of u){let n=r[t];if(n&&typeof n==`object`)for(let t of Object.keys(n)){let n=o.get(t);n&&n!==e&&i.add(t)}}n.dependencies=[...i].sort()}let p=[...a.values()].sort((e,t)=>e.dir.localeCompare(t.dir)),m=p.filter(e=>e.hasConfig);return{root:e,packageManager:l(e),generatedAt:(/* @__PURE__ */ new Date()).toISOString(),projects:p,dbxProjects:m,order:f(m)}}function f(e){let t=/* @__PURE__ */ new Map;for(let n of e)n.name&&t.set(n.name,n.dir);let n=new Map(e.map(e=>[e.dir,e])),r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set,a=[],o=e=>{if(r.has(e)||i.has(e))return;i.add(e);let s=n.get(e);for(let e of s?.dependencies??[]){let r=t.get(e);r&&n.has(r)&&o(r)}i.delete(e),r.add(e),a.push(e)};for(let t of e)o(t.dir);return a}function p(t){return e.join(t,`.dbx`,`toolchain`,`projects.json`)}function m(t,r){let a=p(t);return i.mkdirSync(e.dirname(a),{recursive:!0}),i.writeFileSync(a,n(r??d(t)),`utf-8`),a}function h(e){try{return JSON.parse(i.readFileSync(p(e),`utf-8`).replace(/^\uFEFF/,``))}catch{return}}export{a as IGNORED_DIRS,d as buildProjectGraph,l as detectPackageManager,f as orderProjects,p as projectGraphPath,h as readProjectGraph,m as writeProjectGraph};
@@ -1,18 +1,19 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
+ import { editorConfigSyncTask, toolingConfigTask } from "./editor-config.js";
3
4
  import { DBX_GITIGNORE_BLOCK, ensureDbxGitignore } from "./gitignore.js";
4
5
  import { BuildProjectGraphOptions, IGNORED_DIRS, PackageManager, ProjectGraph, ProjectNode, buildProjectGraph, detectPackageManager, orderProjects, projectGraphPath, readProjectGraph, writeProjectGraph } from "./graph.js";
5
6
  import { LoadToolchainConfigOptions, LoadedConfig, findConfigFile, findParentConfigFile, loadToolchainConfig, mergeToolchainConfig } from "./loader.js";
6
- import { MANIFEST_DIR, MANIFEST_FILE, Manifest, TIMESTAMPS_FILE, readManifest, readSyncedAt, writeManifest } from "./manifest.js";
7
+ import { FileOrigin, MANIFEST_DIR, MANIFEST_FILE, Manifest, TIMESTAMPS_FILE, readManifest, readSyncedAt, writeManifest } from "./manifest.js";
7
8
  import { TsconfigFileNames, detectProjectType, resolveProjectType } from "./project-type.js";
8
- import { providerRegistryPath, readProviderRegistry, writeProviderRegistry } from "./provider-registry.js";
9
+ import { ProviderRegistryPath, addGlobalProviderRegistry, addProjectProviderRegistry, defaultGlobalProvidersDir, globalProviderRegistryPath, legacyProviderRegistryPath, providerRegistryPath, providerRegistryPaths, readAllProviders, readAllProvidersSync, readGlobalProviders, readProviderRegistry, removeGlobalProviderRegistry, removeProjectProviderRegistry, setGlobalProviderRegistries, setProjectProviderRegistries, writeGlobalProviders, writeProviderRegistry } from "./provider-registry.js";
9
10
  import { SelectProjectsOptions, SelectedProject, selectProjects } from "./select.js";
10
- import { ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, resetProjects, resetToolchain } from "./reset.js";
11
- import { RunSyncOptions, SyncResult, runSync } from "./sync.js";
11
+ import { ResetProjectsOptions, ResetProjectsResult, ResetRestore, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, resetProjects, resetToolchain } from "./reset.js";
12
+ import { RemovedFile, RunSyncOptions, SyncResult, runSync } from "./sync.js";
12
13
  import { VscodeSyncOptions, vscodeSyncTask } from "./vscode.js";
13
- import { RunWatchOptions, runWatch } from "./watch.js";
14
+ import { RunWatchOptions, resolveWatchGlobs, runWatch } from "./watch.js";
14
15
  declare namespace index_d_exports {
15
- export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, buildProjectGraph, detectPackageManager, detectProjectType, ensureDbxGitignore, findConfigFile, findParentConfigFile, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, resetProjects, resetToolchain, resolveProjectType, runSync, runWatch, selectProjects, vscodeSyncTask, writeManifest, writeProjectGraph, writeProviderRegistry };
16
+ export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, FileOrigin, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ProviderRegistryPath, RemovedFile, ResetProjectsOptions, ResetProjectsResult, ResetRestore, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, addGlobalProviderRegistry, addProjectProviderRegistry, buildProjectGraph, defaultGlobalProvidersDir, detectPackageManager, detectProjectType, editorConfigSyncTask, ensureDbxGitignore, findConfigFile, findParentConfigFile, globalProviderRegistryPath, legacyProviderRegistryPath, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, providerRegistryPaths, readAllProviders, readAllProvidersSync, readGlobalProviders, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, removeGlobalProviderRegistry, removeProjectProviderRegistry, resetProjects, resetToolchain, resolveProjectType, resolveWatchGlobs, runSync, runWatch, selectProjects, setGlobalProviderRegistries, setProjectProviderRegistries, toolingConfigTask, vscodeSyncTask, writeGlobalProviders, writeManifest, writeProjectGraph, writeProviderRegistry };
16
17
  }
17
18
  //#endregion
18
- export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, buildProjectGraph, detectPackageManager, detectProjectType, ensureDbxGitignore, findConfigFile, findParentConfigFile, index_d_exports, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, resetProjects, resetToolchain, resolveProjectType, runSync, runWatch, selectProjects, vscodeSyncTask, writeManifest, writeProjectGraph, writeProviderRegistry };
19
+ export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, FileOrigin, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ProviderRegistryPath, RemovedFile, ResetProjectsOptions, ResetProjectsResult, ResetRestore, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, addGlobalProviderRegistry, addProjectProviderRegistry, buildProjectGraph, defaultGlobalProvidersDir, detectPackageManager, detectProjectType, editorConfigSyncTask, ensureDbxGitignore, findConfigFile, findParentConfigFile, globalProviderRegistryPath, index_d_exports, legacyProviderRegistryPath, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, providerRegistryPaths, readAllProviders, readAllProvidersSync, readGlobalProviders, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, removeGlobalProviderRegistry, removeProjectProviderRegistry, resetProjects, resetToolchain, resolveProjectType, resolveWatchGlobs, runSync, runWatch, selectProjects, setGlobalProviderRegistries, setProjectProviderRegistries, toolingConfigTask, vscodeSyncTask, writeGlobalProviders, writeManifest, writeProjectGraph, writeProviderRegistry };
@@ -1 +1 @@
1
- import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{DBX_GITIGNORE_BLOCK as t,ensureDbxGitignore as n}from"./gitignore.js";import{detectProjectType as r,resolveProjectType as i}from"./project-type.js";import{findConfigFile as a,findParentConfigFile as o,loadToolchainConfig as s,mergeToolchainConfig as c}from"./loader.js";import{IGNORED_DIRS as l,buildProjectGraph as u,detectPackageManager as d,orderProjects as f,projectGraphPath as p,readProjectGraph as m,writeProjectGraph as h}from"./graph.js";import{MANIFEST_DIR as g,MANIFEST_FILE as _,TIMESTAMPS_FILE as v,readManifest as y,readSyncedAt as b,writeManifest as x}from"./manifest.js";import{providerRegistryPath as S,readProviderRegistry as C,writeProviderRegistry as w}from"./provider-registry.js";import{selectProjects as T}from"./select.js";import{resetProjects as E,resetToolchain as D}from"./reset.js";import{runSync as O}from"./sync.js";import{vscodeSyncTask as k}from"./vscode.js";import{runWatch as A}from"./watch.js";var j=/* @__PURE__ */ e({DBX_GITIGNORE_BLOCK:()=>t,IGNORED_DIRS:()=>l,MANIFEST_DIR:()=>g,MANIFEST_FILE:()=>_,TIMESTAMPS_FILE:()=>v,buildProjectGraph:()=>u,detectPackageManager:()=>d,detectProjectType:()=>r,ensureDbxGitignore:()=>n,findConfigFile:()=>a,findParentConfigFile:()=>o,loadToolchainConfig:()=>s,mergeToolchainConfig:()=>c,orderProjects:()=>f,projectGraphPath:()=>p,providerRegistryPath:()=>S,readManifest:()=>y,readProjectGraph:()=>m,readProviderRegistry:()=>C,readSyncedAt:()=>b,resetProjects:()=>E,resetToolchain:()=>D,resolveProjectType:()=>i,runSync:()=>O,runWatch:()=>A,selectProjects:()=>T,vscodeSyncTask:()=>k,writeManifest:()=>x,writeProjectGraph:()=>h,writeProviderRegistry:()=>w});export{t as DBX_GITIGNORE_BLOCK,l as IGNORED_DIRS,g as MANIFEST_DIR,_ as MANIFEST_FILE,v as TIMESTAMPS_FILE,u as buildProjectGraph,d as detectPackageManager,r as detectProjectType,n as ensureDbxGitignore,a as findConfigFile,o as findParentConfigFile,s as loadToolchainConfig,c as mergeToolchainConfig,f as orderProjects,p as projectGraphPath,S as providerRegistryPath,y as readManifest,m as readProjectGraph,C as readProviderRegistry,b as readSyncedAt,E as resetProjects,D as resetToolchain,i as resolveProjectType,O as runSync,A as runWatch,T as selectProjects,j as src_exports,k as vscodeSyncTask,x as writeManifest,h as writeProjectGraph,w as writeProviderRegistry};
1
+ import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{editorConfigSyncTask as t,toolingConfigTask as n}from"./editor-config.js";import{DBX_GITIGNORE_BLOCK as r,ensureDbxGitignore as i}from"./gitignore.js";import{detectProjectType as a,resolveProjectType as o}from"./project-type.js";import{findConfigFile as s,findParentConfigFile as c,loadToolchainConfig as l,mergeToolchainConfig as u}from"./loader.js";import{IGNORED_DIRS as d,buildProjectGraph as f,detectPackageManager as p,orderProjects as m,projectGraphPath as h,readProjectGraph as g,writeProjectGraph as _}from"./graph.js";import{MANIFEST_DIR as v,MANIFEST_FILE as y,TIMESTAMPS_FILE as b,readManifest as x,readSyncedAt as S,writeManifest as C}from"./manifest.js";import{addGlobalProviderRegistry as w,addProjectProviderRegistry as T,defaultGlobalProvidersDir as E,globalProviderRegistryPath as D,legacyProviderRegistryPath as O,providerRegistryPath as k,providerRegistryPaths as A,readAllProviders as j,readAllProvidersSync as M,readGlobalProviders as N,readProviderRegistry as P,removeGlobalProviderRegistry as F,removeProjectProviderRegistry as I,setGlobalProviderRegistries as L,setProjectProviderRegistries as R,writeGlobalProviders as z,writeProviderRegistry as B}from"./provider-registry.js";import{selectProjects as V}from"./select.js";import{resetProjects as H,resetToolchain as U}from"./reset.js";import{runSync as W}from"./sync.js";import{vscodeSyncTask as G}from"./vscode.js";import{resolveWatchGlobs as K,runWatch as q}from"./watch.js";var J=/* @__PURE__ */ e({DBX_GITIGNORE_BLOCK:()=>r,IGNORED_DIRS:()=>d,MANIFEST_DIR:()=>v,MANIFEST_FILE:()=>y,TIMESTAMPS_FILE:()=>b,addGlobalProviderRegistry:()=>w,addProjectProviderRegistry:()=>T,buildProjectGraph:()=>f,defaultGlobalProvidersDir:()=>E,detectPackageManager:()=>p,detectProjectType:()=>a,editorConfigSyncTask:()=>t,ensureDbxGitignore:()=>i,findConfigFile:()=>s,findParentConfigFile:()=>c,globalProviderRegistryPath:()=>D,legacyProviderRegistryPath:()=>O,loadToolchainConfig:()=>l,mergeToolchainConfig:()=>u,orderProjects:()=>m,projectGraphPath:()=>h,providerRegistryPath:()=>k,providerRegistryPaths:()=>A,readAllProviders:()=>j,readAllProvidersSync:()=>M,readGlobalProviders:()=>N,readManifest:()=>x,readProjectGraph:()=>g,readProviderRegistry:()=>P,readSyncedAt:()=>S,removeGlobalProviderRegistry:()=>F,removeProjectProviderRegistry:()=>I,resetProjects:()=>H,resetToolchain:()=>U,resolveProjectType:()=>o,resolveWatchGlobs:()=>K,runSync:()=>W,runWatch:()=>q,selectProjects:()=>V,setGlobalProviderRegistries:()=>L,setProjectProviderRegistries:()=>R,toolingConfigTask:()=>n,vscodeSyncTask:()=>G,writeGlobalProviders:()=>z,writeManifest:()=>C,writeProjectGraph:()=>_,writeProviderRegistry:()=>B});export{r as DBX_GITIGNORE_BLOCK,d as IGNORED_DIRS,v as MANIFEST_DIR,y as MANIFEST_FILE,b as TIMESTAMPS_FILE,w as addGlobalProviderRegistry,T as addProjectProviderRegistry,f as buildProjectGraph,E as defaultGlobalProvidersDir,p as detectPackageManager,a as detectProjectType,t as editorConfigSyncTask,i as ensureDbxGitignore,s as findConfigFile,c as findParentConfigFile,D as globalProviderRegistryPath,O as legacyProviderRegistryPath,l as loadToolchainConfig,u as mergeToolchainConfig,m as orderProjects,h as projectGraphPath,k as providerRegistryPath,A as providerRegistryPaths,j as readAllProviders,M as readAllProvidersSync,N as readGlobalProviders,x as readManifest,g as readProjectGraph,P as readProviderRegistry,S as readSyncedAt,F as removeGlobalProviderRegistry,I as removeProjectProviderRegistry,H as resetProjects,U as resetToolchain,o as resolveProjectType,K as resolveWatchGlobs,W as runSync,q as runWatch,V as selectProjects,L as setGlobalProviderRegistries,R as setProjectProviderRegistries,J as src_exports,n as toolingConfigTask,G as vscodeSyncTask,z as writeGlobalProviders,C as writeManifest,_ as writeProjectGraph,B as writeProviderRegistry};
@@ -8,6 +8,8 @@ import "../../shared/src/index.js";
8
8
  /** A loaded tooling config plus its resolved path + replacement tokens. */
9
9
  export interface LoadedConfig {
10
10
  config: ToolchainConfig;
11
+ /** The config from this project's own file (not the inherited parent). */
12
+ ownConfig: ToolchainConfig;
11
13
  /** The config file that was loaded (undefined when none was found). */
12
14
  path?: string;
13
15
  /** The inherited ancestor config, when the loaded config overrides one. */
@@ -30,6 +32,17 @@ export interface LoadToolchainConfigOptions {
30
32
  * VS Code tree views that drive them). Default: `false` (throw).
31
33
  */
32
34
  tolerant?: boolean;
35
+ /** Load this config file instead of discovering `dbx.config.*`. */
36
+ config?: string;
37
+ /** Ignore every config file and use defaults / CLI flags only. */
38
+ noConfig?: boolean;
39
+ /** Skip the config's `hooks.afterLoad` callback (metadata-only loads). */
40
+ skipHooks?: boolean;
41
+ /**
42
+ * Bypass the ESM/CJS module cache. Long-running callers (eg. `dbx watch`)
43
+ * must set this so an edited config is actually re-evaluated.
44
+ */
45
+ fresh?: boolean;
33
46
  }
34
47
  /** Find the first `dbx.config.*` file at `cwd`, if any. */
35
48
  export declare function findConfigFile(cwd?: string): string | undefined;
@@ -46,13 +59,18 @@ export declare function findParentConfigFile(cwd?: string): string | undefined;
46
59
  * **replace** the ancestor's value — so a non-root `dbx.config` can override
47
60
  * individual options of the root config (and keep the rest).
48
61
  *
62
+ * Some sections are workspace-scoped and are **never inherited**:
63
+ * - `ci` / the `changelog` section: workflows are repository-level;
64
+ * - `tsconfig`: the root task expands every workspace tsconfig;
65
+ * - `vite.test` and `vite.run`: they describe how that workspace runs;
66
+ * - `hooks`: a parent's hooks are code and must not run for a nested sync.
67
+ *
49
68
  * `project` is inherited **except the identity fields** (`name`, `scope`,
50
69
  * `description`, `type`): a workspace keeps its own name/description (or falls
51
70
  * back to its `package.json`), and is still detected from its own files — so a
52
71
  * root `project` never renames a workspace. The shared fields (author, license,
53
72
  * homepage, `repo`, `packageManager`, ...) flow down. `project.inherit: false`
54
- * disables project inheritance entirely. `hooks` are **not** inherited either —
55
- * a parent's hooks are code and must not run for a nested project's sync.
73
+ * disables project inheritance entirely.
56
74
  */
57
75
  export declare function mergeToolchainConfig(parent: ToolchainConfig, child: ToolchainConfig): ToolchainConfig;
58
76
  /**