@ontrails/config 1.0.0-beta.12

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 (159) hide show
  1. package/.turbo/turbo-build.log +1 -0
  2. package/.turbo/turbo-lint.log +3 -0
  3. package/.turbo/turbo-typecheck.log +1 -0
  4. package/CHANGELOG.md +19 -0
  5. package/dist/app-config.d.ts +65 -0
  6. package/dist/app-config.d.ts.map +1 -0
  7. package/dist/app-config.js +172 -0
  8. package/dist/app-config.js.map +1 -0
  9. package/dist/collect.d.ts +11 -0
  10. package/dist/collect.d.ts.map +1 -0
  11. package/dist/collect.js +81 -0
  12. package/dist/collect.js.map +1 -0
  13. package/dist/compose.d.ts +26 -0
  14. package/dist/compose.d.ts.map +1 -0
  15. package/dist/compose.js +19 -0
  16. package/dist/compose.js.map +1 -0
  17. package/dist/config-layer.d.ts +11 -0
  18. package/dist/config-layer.d.ts.map +1 -0
  19. package/dist/config-layer.js +6 -0
  20. package/dist/config-layer.js.map +1 -0
  21. package/dist/config-service.d.ts +3 -0
  22. package/dist/config-service.d.ts.map +1 -0
  23. package/dist/config-service.js +26 -0
  24. package/dist/config-service.js.map +1 -0
  25. package/dist/define-config.d.ts +61 -0
  26. package/dist/define-config.d.ts.map +1 -0
  27. package/dist/define-config.js +90 -0
  28. package/dist/define-config.js.map +1 -0
  29. package/dist/describe.d.ts +25 -0
  30. package/dist/describe.d.ts.map +1 -0
  31. package/dist/describe.js +147 -0
  32. package/dist/describe.js.map +1 -0
  33. package/dist/doctor.d.ts +27 -0
  34. package/dist/doctor.d.ts.map +1 -0
  35. package/dist/doctor.js +167 -0
  36. package/dist/doctor.js.map +1 -0
  37. package/dist/explain.d.ts +30 -0
  38. package/dist/explain.d.ts.map +1 -0
  39. package/dist/explain.js +114 -0
  40. package/dist/explain.js.map +1 -0
  41. package/dist/extensions.d.ts +38 -0
  42. package/dist/extensions.d.ts.map +1 -0
  43. package/dist/extensions.js +35 -0
  44. package/dist/extensions.js.map +1 -0
  45. package/dist/generate/env.d.ts +15 -0
  46. package/dist/generate/env.d.ts.map +1 -0
  47. package/dist/generate/env.js +65 -0
  48. package/dist/generate/env.js.map +1 -0
  49. package/dist/generate/example.d.ts +16 -0
  50. package/dist/generate/example.d.ts.map +1 -0
  51. package/dist/generate/example.js +136 -0
  52. package/dist/generate/example.js.map +1 -0
  53. package/dist/generate/helpers.d.ts +35 -0
  54. package/dist/generate/helpers.d.ts.map +1 -0
  55. package/dist/generate/helpers.js +116 -0
  56. package/dist/generate/helpers.js.map +1 -0
  57. package/dist/generate/index.d.ts +4 -0
  58. package/dist/generate/index.d.ts.map +1 -0
  59. package/dist/generate/index.js +4 -0
  60. package/dist/generate/index.js.map +1 -0
  61. package/dist/generate/json-schema.d.ts +18 -0
  62. package/dist/generate/json-schema.d.ts.map +1 -0
  63. package/dist/generate/json-schema.js +97 -0
  64. package/dist/generate/json-schema.js.map +1 -0
  65. package/dist/index.d.ts +21 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +21 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/merge.d.ts +16 -0
  70. package/dist/merge.d.ts.map +1 -0
  71. package/dist/merge.js +34 -0
  72. package/dist/merge.js.map +1 -0
  73. package/dist/ref.d.ts +24 -0
  74. package/dist/ref.d.ts.map +1 -0
  75. package/dist/ref.js +25 -0
  76. package/dist/ref.js.map +1 -0
  77. package/dist/registry.d.ts +24 -0
  78. package/dist/registry.d.ts.map +1 -0
  79. package/dist/registry.js +12 -0
  80. package/dist/registry.js.map +1 -0
  81. package/dist/resolve.d.ts +21 -0
  82. package/dist/resolve.d.ts.map +1 -0
  83. package/dist/resolve.js +174 -0
  84. package/dist/resolve.js.map +1 -0
  85. package/dist/secret-heuristics.d.ts +10 -0
  86. package/dist/secret-heuristics.d.ts.map +1 -0
  87. package/dist/secret-heuristics.js +11 -0
  88. package/dist/secret-heuristics.js.map +1 -0
  89. package/dist/trails/config-check.d.ts +11 -0
  90. package/dist/trails/config-check.d.ts.map +1 -0
  91. package/dist/trails/config-check.js +53 -0
  92. package/dist/trails/config-check.js.map +1 -0
  93. package/dist/trails/config-describe.d.ts +12 -0
  94. package/dist/trails/config-describe.d.ts.map +1 -0
  95. package/dist/trails/config-describe.js +41 -0
  96. package/dist/trails/config-describe.js.map +1 -0
  97. package/dist/trails/config-explain.d.ts +8 -0
  98. package/dist/trails/config-explain.d.ts.map +1 -0
  99. package/dist/trails/config-explain.js +74 -0
  100. package/dist/trails/config-explain.js.map +1 -0
  101. package/dist/trails/config-init.d.ts +9 -0
  102. package/dist/trails/config-init.d.ts.map +1 -0
  103. package/dist/trails/config-init.js +78 -0
  104. package/dist/trails/config-init.js.map +1 -0
  105. package/dist/workspace.d.ts +9 -0
  106. package/dist/workspace.d.ts.map +1 -0
  107. package/dist/workspace.js +44 -0
  108. package/dist/workspace.js.map +1 -0
  109. package/dist/zod-utils.d.ts +14 -0
  110. package/dist/zod-utils.d.ts.map +1 -0
  111. package/dist/zod-utils.js +41 -0
  112. package/dist/zod-utils.js.map +1 -0
  113. package/package.json +20 -0
  114. package/src/__tests__/app-config.test.ts +329 -0
  115. package/src/__tests__/compose.test.ts +59 -0
  116. package/src/__tests__/config-check.test.ts +171 -0
  117. package/src/__tests__/config-describe.test.ts +154 -0
  118. package/src/__tests__/config-explain.test.ts +167 -0
  119. package/src/__tests__/config-init.test.ts +210 -0
  120. package/src/__tests__/config-layer.test.ts +53 -0
  121. package/src/__tests__/config-service.test.ts +87 -0
  122. package/src/__tests__/define-config.test.ts +263 -0
  123. package/src/__tests__/describe.test.ts +158 -0
  124. package/src/__tests__/doctor.test.ts +172 -0
  125. package/src/__tests__/explain.test.ts +139 -0
  126. package/src/__tests__/extensions.test.ts +134 -0
  127. package/src/__tests__/generate.test.ts +269 -0
  128. package/src/__tests__/ref.test.ts +35 -0
  129. package/src/__tests__/resolve.test.ts +246 -0
  130. package/src/__tests__/workspace.test.ts +64 -0
  131. package/src/app-config.ts +307 -0
  132. package/src/collect.ts +118 -0
  133. package/src/compose.ts +46 -0
  134. package/src/config-layer.ts +15 -0
  135. package/src/config-service.ts +32 -0
  136. package/src/define-config.ts +134 -0
  137. package/src/describe.ts +252 -0
  138. package/src/doctor.ts +219 -0
  139. package/src/explain.ts +176 -0
  140. package/src/extensions.ts +51 -0
  141. package/src/generate/env.ts +104 -0
  142. package/src/generate/example.ts +222 -0
  143. package/src/generate/helpers.ts +158 -0
  144. package/src/generate/index.ts +3 -0
  145. package/src/generate/json-schema.ts +137 -0
  146. package/src/index.ts +44 -0
  147. package/src/merge.ts +43 -0
  148. package/src/ref.ts +38 -0
  149. package/src/registry.ts +33 -0
  150. package/src/resolve.ts +279 -0
  151. package/src/secret-heuristics.ts +13 -0
  152. package/src/trails/config-check.ts +60 -0
  153. package/src/trails/config-describe.ts +44 -0
  154. package/src/trails/config-explain.ts +93 -0
  155. package/src/trails/config-init.ts +96 -0
  156. package/src/workspace.ts +51 -0
  157. package/src/zod-utils.ts +53 -0
  158. package/tsconfig.json +9 -0
  159. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/generate/json-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export { appConfig, type AppConfig, type AppConfigExplainOptions, type AppConfigOptions, type ConfigFormat, type ResolveOptions, } from './app-config.js';
2
+ export { collectConfigMeta } from './collect.js';
3
+ export { collectServiceConfigs, type ServiceConfigEntry } from './compose.js';
4
+ export { defineConfig, type DefineConfigOptions } from './define-config.js';
5
+ export { describeConfig, type FieldDescription } from './describe.js';
6
+ export { checkConfig, type CheckResult, type ConfigDiagnostic, } from './doctor.js';
7
+ export { env, secret, deprecated, type ConfigFieldMeta } from './extensions.js';
8
+ export { explainConfig, type ExplainConfigOptions, type ProvenanceEntry, } from './explain.js';
9
+ export { generateEnvExample, generateExample, generateJsonSchema, } from './generate/index.js';
10
+ export { configLayer } from './config-layer.js';
11
+ export { configService } from './config-service.js';
12
+ export { clearConfigState, type ConfigState, getConfigState, registerConfigState, } from './registry.js';
13
+ export { deepMerge } from './merge.js';
14
+ export { configRef, isConfigRef, type ConfigRef } from './ref.js';
15
+ export { resolveConfig, type ResolveConfigOptions } from './resolve.js';
16
+ export { configCheck } from './trails/config-check.js';
17
+ export { configDescribe } from './trails/config-describe.js';
18
+ export { configExplain } from './trails/config-explain.js';
19
+ export { configInit } from './trails/config-init.js';
20
+ export { ensureWorkspace } from './workspace.js';
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,SAAS,EACd,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EACL,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,KAAK,WAAW,EAChB,cAAc,EACd,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ export { appConfig, } from './app-config.js';
2
+ export { collectConfigMeta } from './collect.js';
3
+ export { collectServiceConfigs } from './compose.js';
4
+ export { defineConfig } from './define-config.js';
5
+ export { describeConfig } from './describe.js';
6
+ export { checkConfig, } from './doctor.js';
7
+ export { env, secret, deprecated } from './extensions.js';
8
+ export { explainConfig, } from './explain.js';
9
+ export { generateEnvExample, generateExample, generateJsonSchema, } from './generate/index.js';
10
+ export { configLayer } from './config-layer.js';
11
+ export { configService } from './config-service.js';
12
+ export { clearConfigState, getConfigState, registerConfigState, } from './registry.js';
13
+ export { deepMerge } from './merge.js';
14
+ export { configRef, isConfigRef } from './ref.js';
15
+ export { resolveConfig } from './resolve.js';
16
+ export { configCheck } from './trails/config-check.js';
17
+ export { configDescribe } from './trails/config-describe.js';
18
+ export { configExplain } from './trails/config-explain.js';
19
+ export { configInit } from './trails/config-init.js';
20
+ export { ensureWorkspace } from './workspace.js';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,GAMV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAA2B,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,YAAY,EAA4B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAyB,MAAM,eAAe,CAAC;AACtE,OAAO,EACL,WAAW,GAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAC;AAChF,OAAO,EACL,aAAa,GAGd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAEhB,cAAc,EACd,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,aAAa,EAA6B,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Simple recursive deep merge for config objects.
3
+ *
4
+ * - Objects merge recursively
5
+ * - Arrays replace (no concatenation)
6
+ * - Primitives replace
7
+ * - `undefined` values in source are skipped
8
+ */
9
+ /**
10
+ * Deep-merge `source` into `target`, returning a new object.
11
+ *
12
+ * Does not mutate either input. Undefined values in source are skipped,
13
+ * preserving the target's value at that key.
14
+ */
15
+ export declare const deepMerge: (target: Record<string, unknown>, source: Record<string, unknown>) => Record<string, unknown>;
16
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GACpB,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAiBxB,CAAC"}
package/dist/merge.js ADDED
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Simple recursive deep merge for config objects.
3
+ *
4
+ * - Objects merge recursively
5
+ * - Arrays replace (no concatenation)
6
+ * - Primitives replace
7
+ * - `undefined` values in source are skipped
8
+ */
9
+ /** Check whether a value is a plain object (not array, null, or class instance). */
10
+ const isPlainObject = (value) => typeof value === 'object' &&
11
+ value !== null &&
12
+ !Array.isArray(value) &&
13
+ Object.getPrototypeOf(value) === Object.prototype;
14
+ /**
15
+ * Deep-merge `source` into `target`, returning a new object.
16
+ *
17
+ * Does not mutate either input. Undefined values in source are skipped,
18
+ * preserving the target's value at that key.
19
+ */
20
+ export const deepMerge = (target, source) => {
21
+ const result = { ...target };
22
+ for (const [key, sourceValue] of Object.entries(source)) {
23
+ if (sourceValue === undefined) {
24
+ continue;
25
+ }
26
+ const targetValue = result[key];
27
+ result[key] =
28
+ isPlainObject(targetValue) && isPlainObject(sourceValue)
29
+ ? deepMerge(targetValue, sourceValue)
30
+ : sourceValue;
31
+ }
32
+ return result;
33
+ };
34
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oFAAoF;AACpF,MAAM,aAAa,GAAG,CAAC,KAAc,EAAoC,EAAE,CACzE,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IACrB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,MAA+B,EAC/B,MAA+B,EACN,EAAE;IAC3B,MAAM,MAAM,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IAEtD,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAEhC,MAAM,CAAC,GAAG,CAAC;YACT,aAAa,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC,WAAW,CAAC;gBACtD,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;gBACrC,CAAC,CAAC,WAAW,CAAC;IACpB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
package/dist/ref.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Lazy config reference markers for trail input defaults.
3
+ *
4
+ * A `ConfigRef` is a marker object that can be embedded as a trail input
5
+ * default. The resolution stack detects it at invocation time and replaces
6
+ * it with the live config value at the given path.
7
+ */
8
+ /** Marker object representing a lazy reference to a config field. */
9
+ export interface ConfigRef {
10
+ readonly __configRef: true;
11
+ readonly path: string;
12
+ }
13
+ /**
14
+ * Create a lazy reference to a config field for use as a trail input default.
15
+ *
16
+ * The reference is resolved at invocation time, not at declaration time.
17
+ *
18
+ */
19
+ export declare const configRef: (path: string) => ConfigRef;
20
+ /**
21
+ * Type guard: detect whether an unknown value is a `ConfigRef` marker.
22
+ */
23
+ export declare const isConfigRef: (value?: unknown) => value is ConfigRef;
24
+ //# sourceMappingURL=ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../src/ref.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,SAGvC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,OAAO,KAAG,KAAK,IAAI,SAIK,CAAC"}
package/dist/ref.js ADDED
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Lazy config reference markers for trail input defaults.
3
+ *
4
+ * A `ConfigRef` is a marker object that can be embedded as a trail input
5
+ * default. The resolution stack detects it at invocation time and replaces
6
+ * it with the live config value at the given path.
7
+ */
8
+ /**
9
+ * Create a lazy reference to a config field for use as a trail input default.
10
+ *
11
+ * The reference is resolved at invocation time, not at declaration time.
12
+ *
13
+ */
14
+ export const configRef = (path) => ({
15
+ __configRef: true,
16
+ path,
17
+ });
18
+ /**
19
+ * Type guard: detect whether an unknown value is a `ConfigRef` marker.
20
+ */
21
+ export const isConfigRef = (value) => typeof value === 'object' &&
22
+ value !== null &&
23
+ '__configRef' in value &&
24
+ value['__configRef'] === true;
25
+ //# sourceMappingURL=ref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ref.js","sourceRoot":"","sources":["../src/ref.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAa,EAAE,CAAC,CAAC;IACrD,WAAW,EAAE,IAAI;IACjB,IAAI;CACL,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAe,EAAsB,EAAE,CACjE,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,aAAa,IAAI,KAAK;IACrB,KAAiC,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Module-level config state registry.
3
+ *
4
+ * Config is resolved once at bootstrap (two-phase init per ADR-010) and
5
+ * registered here so `configService` can surface it to trails. This is
6
+ * a process-level singleton — config resolution is inherently global.
7
+ */
8
+ import type { z } from 'zod';
9
+ /** Resolved config state carrying the schema and all layer values. */
10
+ export interface ConfigState {
11
+ readonly schema: z.ZodObject<Record<string, z.ZodType>>;
12
+ readonly resolved: Record<string, unknown>;
13
+ readonly base?: Record<string, unknown>;
14
+ readonly loadout?: Record<string, unknown>;
15
+ readonly local?: Record<string, unknown>;
16
+ readonly env?: Record<string, string | undefined>;
17
+ }
18
+ /** Register resolved config state at bootstrap. */
19
+ export declare const registerConfigState: (state: ConfigState) => void;
20
+ /** Read the registered config state. Returns `undefined` before registration. */
21
+ export declare const getConfigState: () => ConfigState | undefined;
22
+ /** Clear registered state. Primarily useful in tests. */
23
+ export declare const clearConfigState: () => void;
24
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACnD;AAID,mDAAmD;AACnD,eAAO,MAAM,mBAAmB,GAAI,OAAO,WAAW,KAAG,IAExD,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,cAAc,QAAO,WAAW,GAAG,SAAoB,CAAC;AAErE,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,QAAO,IAEnC,CAAC"}
@@ -0,0 +1,12 @@
1
+ let current;
2
+ /** Register resolved config state at bootstrap. */
3
+ export const registerConfigState = (state) => {
4
+ current = state;
5
+ };
6
+ /** Read the registered config state. Returns `undefined` before registration. */
7
+ export const getConfigState = () => current;
8
+ /** Clear registered state. Primarily useful in tests. */
9
+ export const clearConfigState = () => {
10
+ current = undefined;
11
+ };
12
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAmBA,IAAI,OAAgC,CAAC;AAErC,mDAAmD;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAkB,EAAQ,EAAE;IAC9D,OAAO,GAAG,KAAK,CAAC;AAClB,CAAC,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,cAAc,GAAG,GAA4B,EAAE,CAAC,OAAO,CAAC;AAErE,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAS,EAAE;IACzC,OAAO,GAAG,SAAS,CAAC;AACtB,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Config resolution engine — merges config from multiple sources through
3
+ * a deterministic stack: defaults → base → loadout → local → env.
4
+ */
5
+ import type { z } from 'zod';
6
+ import { Result } from '@ontrails/core';
7
+ /** Options for resolving config through the full stack. */
8
+ export interface ResolveConfigOptions<T extends z.ZodType> {
9
+ readonly schema: T;
10
+ readonly base?: Record<string, unknown> | undefined;
11
+ readonly loadouts?: Record<string, Record<string, unknown>> | undefined;
12
+ readonly loadout?: string | undefined;
13
+ readonly localOverrides?: Record<string, unknown> | undefined;
14
+ readonly env?: Record<string, string | undefined> | undefined;
15
+ }
16
+ /**
17
+ * Resolve config through the full stack: defaults → base → loadout → local → env.
18
+ * Returns `Result.ok` with the validated config, or `Result.err` on validation failure.
19
+ */
20
+ export declare const resolveConfig: <T extends z.ZodType>(options: ResolveConfigOptions<T>) => Result<z.infer<T>, Error>;
21
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAUxC,2DAA2D;AAC3D,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO;IACvD,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC9D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;CAC/D;AAkOD;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAC/C,SAAS,oBAAoB,CAAC,CAAC,CAAC,KAC/B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAkB1B,CAAC"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Config resolution engine — merges config from multiple sources through
3
+ * a deterministic stack: defaults → base → loadout → local → env.
4
+ */
5
+ import { Result } from '@ontrails/core';
6
+ import { collectConfigMeta } from './collect.js';
7
+ import { deepMerge } from './merge.js';
8
+ import { zodDef } from './zod-utils.js';
9
+ // ---------------------------------------------------------------------------
10
+ // Env coercion helpers (defined before consumers)
11
+ // ---------------------------------------------------------------------------
12
+ /** Boolean string values we accept from environment variables. */
13
+ const BOOL_TRUE = new Set(['true', '1']);
14
+ const BOOL_FALSE = new Set(['false', '0']);
15
+ /** Primitive type names we can coerce env strings into. */
16
+ const PRIMITIVE_TYPES = new Set(['number', 'boolean', 'string']);
17
+ /** Try to advance one level through a Zod wrapper, returning the inner type or undefined. */
18
+ const unwrapOne = (schema) => {
19
+ const def = zodDef(schema);
20
+ return {
21
+ inner: def['innerType'],
22
+ typeName: def['type'],
23
+ };
24
+ };
25
+ /** Unwrap ZodDefault / ZodOptional / ZodNullable to find the base type name. */
26
+ const resolveBaseTypeName = (schema) => {
27
+ let current = schema;
28
+ for (let depth = 0; depth < 10; depth += 1) {
29
+ const { typeName, inner } = unwrapOne(current);
30
+ if (typeName && PRIMITIVE_TYPES.has(typeName)) {
31
+ return typeName;
32
+ }
33
+ if (!inner) {
34
+ break;
35
+ }
36
+ current = inner;
37
+ }
38
+ return 'string';
39
+ };
40
+ /** Coerce a boolean env string. Returns the original string if unrecognized. */
41
+ const coerceBooleanEnv = (raw) => {
42
+ if (BOOL_TRUE.has(raw)) {
43
+ return true;
44
+ }
45
+ if (BOOL_FALSE.has(raw)) {
46
+ return false;
47
+ }
48
+ return raw;
49
+ };
50
+ /** Coerce env var lookup table keyed by base type name. */
51
+ const ENV_COERCERS = {
52
+ boolean: coerceBooleanEnv,
53
+ number: Number,
54
+ };
55
+ /** Coerce a string env value to the type expected by the schema field. */
56
+ const coerceEnvValue = (raw, schema) => {
57
+ const coercer = ENV_COERCERS[resolveBaseTypeName(schema)];
58
+ return coercer ? coercer(raw) : raw;
59
+ };
60
+ // ---------------------------------------------------------------------------
61
+ // Path utilities
62
+ // ---------------------------------------------------------------------------
63
+ /** Navigate one step of a nested object, creating an intermediate if needed. */
64
+ const navigateOrCreate = (current, key) => {
65
+ const next = current[key];
66
+ if (typeof next === 'object' && next !== null && !Array.isArray(next)) {
67
+ return next;
68
+ }
69
+ const nested = {};
70
+ current[key] = nested;
71
+ return nested;
72
+ };
73
+ /** Ensure a nested path exists in an object, creating intermediates as needed. */
74
+ const ensurePath = (obj, parts) => {
75
+ let current = obj;
76
+ for (const part of parts) {
77
+ current = navigateOrCreate(current, part);
78
+ }
79
+ return current;
80
+ };
81
+ /** Set a value at a dot-separated path in a plain object. */
82
+ const setAtPath = (obj, path, value) => {
83
+ const parts = path.split('.');
84
+ const parent = ensurePath(obj, parts.slice(0, -1));
85
+ parent[parts.at(-1)] = value;
86
+ };
87
+ /** Resolve one step of a Zod shape walk: find the field schema for a key. */
88
+ const resolveShapeStep = (current, key) => {
89
+ const shape = zodDef(current)['shape'];
90
+ return shape?.[key];
91
+ };
92
+ /** Walk a Zod schema shape to find the field at a dot-separated path. */
93
+ const getFieldSchema = (schema, path) => {
94
+ let current = schema;
95
+ for (const part of path.split('.')) {
96
+ const next = resolveShapeStep(current, part);
97
+ if (!next) {
98
+ return undefined;
99
+ }
100
+ current = next;
101
+ }
102
+ return current;
103
+ };
104
+ // ---------------------------------------------------------------------------
105
+ // Env overlay
106
+ // ---------------------------------------------------------------------------
107
+ /** Coerce and set a single env override into the result object. */
108
+ const applyOneEnvOverride = (result, schema, path, envValue) => {
109
+ const fieldSchema = getFieldSchema(schema, path);
110
+ const coerced = fieldSchema
111
+ ? coerceEnvValue(envValue, fieldSchema)
112
+ : envValue;
113
+ setAtPath(result, path, coerced);
114
+ };
115
+ /** Resolve a single env binding: look up the var, apply if present. */
116
+ const resolveEnvBinding = (result, schema, path, envVar, envVars) => {
117
+ const envValue = envVars[envVar];
118
+ if (envValue !== undefined) {
119
+ applyOneEnvOverride(result, schema, path, envValue);
120
+ }
121
+ };
122
+ /** Apply env var overrides based on schema metadata. */
123
+ const applyEnvOverrides = (merged, schema, envVars) => {
124
+ if (zodDef(schema)['type'] !== 'object') {
125
+ return merged;
126
+ }
127
+ const meta = collectConfigMeta(schema);
128
+ const result = deepMerge({}, merged);
129
+ for (const [path, fieldMeta] of meta) {
130
+ if (fieldMeta.env) {
131
+ resolveEnvBinding(result, schema, path, fieldMeta.env, envVars);
132
+ }
133
+ }
134
+ return result;
135
+ };
136
+ // ---------------------------------------------------------------------------
137
+ // Merge pipeline
138
+ // ---------------------------------------------------------------------------
139
+ /** Apply the layered merge: base → loadout → local overrides. */
140
+ const mergeLayers = (base, loadouts, loadout, localOverrides) => {
141
+ let merged = {};
142
+ if (base) {
143
+ merged = deepMerge(merged, base);
144
+ }
145
+ const selected = loadout && loadouts ? loadouts[loadout] : undefined;
146
+ if (selected) {
147
+ merged = deepMerge(merged, selected);
148
+ }
149
+ if (localOverrides) {
150
+ merged = deepMerge(merged, localOverrides);
151
+ }
152
+ return merged;
153
+ };
154
+ /** Format Zod issues into a human-readable error message. */
155
+ const formatValidationError = (issues) => `Config validation failed: ${issues.map((i) => `${String(i.path.join('.'))}: ${i.message}`).join(', ')}`;
156
+ // ---------------------------------------------------------------------------
157
+ // Public API
158
+ // ---------------------------------------------------------------------------
159
+ /**
160
+ * Resolve config through the full stack: defaults → base → loadout → local → env.
161
+ * Returns `Result.ok` with the validated config, or `Result.err` on validation failure.
162
+ */
163
+ export const resolveConfig = (options) => {
164
+ let merged = mergeLayers(options.base, options.loadouts, options.loadout, options.localOverrides);
165
+ if (options.env) {
166
+ merged = applyEnvOverrides(merged, options.schema, options.env);
167
+ }
168
+ const parsed = options.schema.safeParse(merged);
169
+ if (parsed.success) {
170
+ return Result.ok(parsed.data);
171
+ }
172
+ return Result.err(new Error(formatValidationError(parsed.error.issues)));
173
+ };
174
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Heuristic detection of secret env var names.
3
+ *
4
+ * Matches common suffixes like `_SECRET`, `_TOKEN`, `_KEY`, `_PASSWORD`,
5
+ * and `_CREDENTIALS` so that generated `.env.example` files and provenance
6
+ * output can redact likely-secret values even without explicit `secret()`.
7
+ */
8
+ /** Return true when `envName` looks like it holds a secret value. */
9
+ export declare const isLikelySecret: (envName: string) => boolean;
10
+ //# sourceMappingURL=secret-heuristics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-heuristics.d.ts","sourceRoot":"","sources":["../src/secret-heuristics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,qEAAqE;AACrE,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,OACnB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Heuristic detection of secret env var names.
3
+ *
4
+ * Matches common suffixes like `_SECRET`, `_TOKEN`, `_KEY`, `_PASSWORD`,
5
+ * and `_CREDENTIALS` so that generated `.env.example` files and provenance
6
+ * output can redact likely-secret values even without explicit `secret()`.
7
+ */
8
+ const SECRET_PATTERN = /_SECRET$|_TOKEN$|_KEY$|_PASSWORD$|_CREDENTIALS$/i;
9
+ /** Return true when `envName` looks like it holds a secret value. */
10
+ export const isLikelySecret = (envName) => SECRET_PATTERN.test(envName);
11
+ //# sourceMappingURL=secret-heuristics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-heuristics.js","sourceRoot":"","sources":["../src/secret-heuristics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,cAAc,GAAG,kDAAkD,CAAC;AAE1E,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAe,EAAW,EAAE,CACzD,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare const configCheck: import("@ontrails/core").Trail<{
2
+ values: Record<string, unknown>;
3
+ }, {
4
+ diagnostics: {
5
+ message: string;
6
+ path: string;
7
+ status: "default" | "deprecated" | "valid" | "missing" | "invalid";
8
+ }[];
9
+ valid: boolean;
10
+ }>;
11
+ //# sourceMappingURL=config-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-check.d.ts","sourceRoot":"","sources":["../../src/trails/config-check.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,WAAW;;;;;;;;;EA0BtB,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Infrastructure trail that validates config values against a schema.
3
+ *
4
+ * Returns structured diagnostics indicating which fields are valid,
5
+ * missing, invalid, deprecated, or using defaults.
6
+ */
7
+ import { Result, trail } from '@ontrails/core';
8
+ import { z } from 'zod';
9
+ import { configService } from '../config-service.js';
10
+ import { checkConfig } from '../doctor.js';
11
+ import { deepMerge } from '../merge.js';
12
+ const diagnosticSchema = z.object({
13
+ message: z.string(),
14
+ path: z.string(),
15
+ status: z.enum(['valid', 'missing', 'invalid', 'deprecated', 'default']),
16
+ });
17
+ const outputSchema = z.object({
18
+ diagnostics: z.array(diagnosticSchema),
19
+ valid: z.boolean(),
20
+ });
21
+ /** Merge input values on top of resolved config values. */
22
+ const mergeValues = (resolved, overrides) => {
23
+ const hasOverrides = Object.keys(overrides).length > 0;
24
+ return hasOverrides ? deepMerge(resolved, overrides) : resolved;
25
+ };
26
+ export const configCheck = trail('config.check', {
27
+ examples: [
28
+ {
29
+ input: {},
30
+ name: 'Check current config',
31
+ },
32
+ ],
33
+ input: z.object({
34
+ values: z
35
+ .record(z.string(), z.unknown())
36
+ .describe('Config values to check (merged with resolved)')
37
+ .default({}),
38
+ }),
39
+ intent: 'read',
40
+ metadata: { category: 'infrastructure' },
41
+ output: outputSchema,
42
+ run: (input, ctx) => {
43
+ const state = configService.from(ctx);
44
+ const effective = mergeValues(state.resolved, input.values);
45
+ const checked = checkConfig(state.schema, effective);
46
+ return Result.ok({
47
+ diagnostics: [...checked.diagnostics],
48
+ valid: checked.valid,
49
+ });
50
+ },
51
+ services: [configService],
52
+ });
53
+ //# sourceMappingURL=config-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-check.js","sourceRoot":"","sources":["../../src/trails/config-check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;CACzE,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;CACnB,CAAC,CAAC;AAEH,2DAA2D;AAC3D,MAAM,WAAW,GAAG,CAClB,QAAiC,EACjC,SAAkC,EACT,EAAE;IAC3B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACvD,OAAO,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,EAAE;IAC/C,QAAQ,EAAE;QACR;YACE,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,sBAAsB;SAC7B;KACF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,CAAC;aACN,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;aAC/B,QAAQ,CAAC,+CAA+C,CAAC;aACzD,OAAO,CAAC,EAAE,CAAC;KACf,CAAC;IACF,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;IACxC,MAAM,EAAE,YAAY;IACpB,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC,EAAE,CAAC;YACf,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;YACrC,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IACD,QAAQ,EAAE,CAAC,aAAa,CAAC;CAC1B,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const configDescribe: import("@ontrails/core").Trail<Record<string, never>, {
2
+ fields: {
3
+ path: string;
4
+ required: boolean;
5
+ type: string;
6
+ deprecated?: string | undefined;
7
+ description?: string | undefined;
8
+ env?: string | undefined;
9
+ secret?: boolean | undefined;
10
+ }[];
11
+ }>;
12
+ //# sourceMappingURL=config-describe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-describe.d.ts","sourceRoot":"","sources":["../../src/trails/config-describe.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,cAAc;;;;;;;;;;EAiBzB,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Infrastructure trail that describes all config fields in a schema.
3
+ *
4
+ * Returns a structured catalog of field definitions suitable for
5
+ * CLI rendering or agent inspection.
6
+ */
7
+ import { Result, trail } from '@ontrails/core';
8
+ import { z } from 'zod';
9
+ import { configService } from '../config-service.js';
10
+ import { describeConfig } from '../describe.js';
11
+ const fieldSchema = z.object({
12
+ deprecated: z.string().optional(),
13
+ description: z.string().optional(),
14
+ env: z.string().optional(),
15
+ path: z.string(),
16
+ required: z.boolean(),
17
+ secret: z.boolean().optional(),
18
+ type: z.string(),
19
+ });
20
+ const outputSchema = z.object({
21
+ fields: z.array(fieldSchema),
22
+ });
23
+ export const configDescribe = trail('config.describe', {
24
+ examples: [
25
+ {
26
+ input: {},
27
+ name: 'Describe all config fields',
28
+ },
29
+ ],
30
+ input: z.object({}),
31
+ intent: 'read',
32
+ metadata: { category: 'infrastructure' },
33
+ output: outputSchema,
34
+ run: (_input, ctx) => {
35
+ const state = configService.from(ctx);
36
+ const fields = describeConfig(state.schema);
37
+ return Result.ok({ fields: [...fields] });
38
+ },
39
+ services: [configService],
40
+ });
41
+ //# sourceMappingURL=config-describe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-describe.js","sourceRoot":"","sources":["../../src/trails/config-describe.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACrB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,iBAAiB,EAAE;IACrD,QAAQ,EAAE;QACR;YACE,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,4BAA4B;SACnC;KACF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;IACxC,MAAM,EAAE,YAAY;IACpB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,QAAQ,EAAE,CAAC,aAAa,CAAC;CAC1B,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const configExplain: import("@ontrails/core").Trail<{
2
+ path: string;
3
+ }, {
4
+ entries: {
5
+ readonly path: string;
6
+ }[];
7
+ }>;
8
+ //# sourceMappingURL=config-explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-explain.d.ts","sourceRoot":"","sources":["../../src/trails/config-explain.ts"],"names":[],"mappings":"AAoEA,eAAO,MAAM,aAAa;;;;uBAvCG,MAAM;;EA+DjC,CAAC"}