@vibesdotdev/config 0.0.1

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 (620) hide show
  1. package/README.md +85 -0
  2. package/SPEC.md +71 -0
  3. package/dist/adapters/cli/flags.d.ts +75 -0
  4. package/dist/adapters/cli/flags.d.ts.map +1 -0
  5. package/dist/adapters/cli/flags.js +221 -0
  6. package/dist/adapters/cli/flags.js.map +1 -0
  7. package/dist/adapters/cli/index.d.ts +12 -0
  8. package/dist/adapters/cli/index.d.ts.map +1 -0
  9. package/dist/adapters/cli/index.js +9 -0
  10. package/dist/adapters/cli/index.js.map +1 -0
  11. package/dist/adapters/cli/mappings.d.ts +17 -0
  12. package/dist/adapters/cli/mappings.d.ts.map +1 -0
  13. package/dist/adapters/cli/mappings.js +32 -0
  14. package/dist/adapters/cli/mappings.js.map +1 -0
  15. package/dist/adapters/cli/prompts.d.ts +28 -0
  16. package/dist/adapters/cli/prompts.d.ts.map +1 -0
  17. package/dist/adapters/cli/prompts.js +55 -0
  18. package/dist/adapters/cli/prompts.js.map +1 -0
  19. package/dist/adapters/cli/schemas/flags.schema.d.ts +8 -0
  20. package/dist/adapters/cli/schemas/flags.schema.d.ts.map +1 -0
  21. package/dist/adapters/cli/schemas/flags.schema.js +2 -0
  22. package/dist/adapters/cli/schemas/flags.schema.js.map +1 -0
  23. package/dist/adapters/cli/schemas/mappings.schema.d.ts +2 -0
  24. package/dist/adapters/cli/schemas/mappings.schema.d.ts.map +1 -0
  25. package/dist/adapters/cli/schemas/mappings.schema.js +2 -0
  26. package/dist/adapters/cli/schemas/mappings.schema.js.map +1 -0
  27. package/dist/adapters/cli/schemas/prompts.schema.d.ts +5 -0
  28. package/dist/adapters/cli/schemas/prompts.schema.d.ts.map +1 -0
  29. package/dist/adapters/cli/schemas/prompts.schema.js +2 -0
  30. package/dist/adapters/cli/schemas/prompts.schema.js.map +1 -0
  31. package/dist/adapters/cli/schemas/wizard.schema.d.ts +19 -0
  32. package/dist/adapters/cli/schemas/wizard.schema.d.ts.map +1 -0
  33. package/dist/adapters/cli/schemas/wizard.schema.js +2 -0
  34. package/dist/adapters/cli/schemas/wizard.schema.js.map +1 -0
  35. package/dist/adapters/cli/wizard.d.ts +33 -0
  36. package/dist/adapters/cli/wizard.d.ts.map +1 -0
  37. package/dist/adapters/cli/wizard.js +77 -0
  38. package/dist/adapters/cli/wizard.js.map +1 -0
  39. package/dist/browser/index.d.ts +7 -0
  40. package/dist/browser/index.d.ts.map +1 -0
  41. package/dist/browser/index.js +4 -0
  42. package/dist/browser/index.js.map +1 -0
  43. package/dist/cli/settings.descriptor.d.ts +9 -0
  44. package/dist/cli/settings.descriptor.d.ts.map +1 -0
  45. package/dist/cli/settings.descriptor.js +18 -0
  46. package/dist/cli/settings.descriptor.js.map +1 -0
  47. package/dist/cli/types.d.ts +57 -0
  48. package/dist/cli/types.d.ts.map +1 -0
  49. package/dist/cli/types.js +9 -0
  50. package/dist/cli/types.js.map +1 -0
  51. package/dist/client/index.d.ts +19 -0
  52. package/dist/client/index.d.ts.map +1 -0
  53. package/dist/client/index.js +145 -0
  54. package/dist/client/index.js.map +1 -0
  55. package/dist/client/storage.d.ts +48 -0
  56. package/dist/client/storage.d.ts.map +1 -0
  57. package/dist/client/storage.js +46 -0
  58. package/dist/client/storage.js.map +1 -0
  59. package/dist/collection/collection.d.ts +46 -0
  60. package/dist/collection/collection.d.ts.map +1 -0
  61. package/dist/collection/collection.js +93 -0
  62. package/dist/collection/collection.js.map +1 -0
  63. package/dist/collection/index.d.ts +6 -0
  64. package/dist/collection/index.d.ts.map +1 -0
  65. package/dist/collection/index.js +5 -0
  66. package/dist/collection/index.js.map +1 -0
  67. package/dist/common/index.d.ts +7 -0
  68. package/dist/common/index.d.ts.map +1 -0
  69. package/dist/common/index.js +4 -0
  70. package/dist/common/index.js.map +1 -0
  71. package/dist/config.context.descriptor.d.ts +21 -0
  72. package/dist/config.context.descriptor.d.ts.map +1 -0
  73. package/dist/config.context.descriptor.js +11 -0
  74. package/dist/config.context.descriptor.js.map +1 -0
  75. package/dist/config.plugin.d.ts +15 -0
  76. package/dist/config.plugin.d.ts.map +1 -0
  77. package/dist/config.plugin.js +166 -0
  78. package/dist/config.plugin.js.map +1 -0
  79. package/dist/crud/base-types.d.ts +10 -0
  80. package/dist/crud/base-types.d.ts.map +1 -0
  81. package/dist/crud/base-types.js +10 -0
  82. package/dist/crud/base-types.js.map +1 -0
  83. package/dist/crud/index.d.ts +4 -0
  84. package/dist/crud/index.d.ts.map +1 -0
  85. package/dist/crud/index.js +2 -0
  86. package/dist/crud/index.js.map +1 -0
  87. package/dist/crud/schemas/base-types.schema.d.ts +19 -0
  88. package/dist/crud/schemas/base-types.schema.d.ts.map +1 -0
  89. package/dist/crud/schemas/base-types.schema.js +2 -0
  90. package/dist/crud/schemas/base-types.schema.js.map +1 -0
  91. package/dist/crud/schemas/shared.schema.d.ts +13 -0
  92. package/dist/crud/schemas/shared.schema.d.ts.map +1 -0
  93. package/dist/crud/schemas/shared.schema.js +2 -0
  94. package/dist/crud/schemas/shared.schema.js.map +1 -0
  95. package/dist/crud/shared.d.ts +8 -0
  96. package/dist/crud/shared.d.ts.map +1 -0
  97. package/dist/crud/shared.js +8 -0
  98. package/dist/crud/shared.js.map +1 -0
  99. package/dist/crud/types.d.ts +250 -0
  100. package/dist/crud/types.d.ts.map +1 -0
  101. package/dist/crud/types.js +22 -0
  102. package/dist/crud/types.js.map +1 -0
  103. package/dist/docs/environment.docs.descriptor.d.ts +4 -0
  104. package/dist/docs/environment.docs.descriptor.d.ts.map +1 -0
  105. package/dist/docs/environment.docs.descriptor.js +383 -0
  106. package/dist/docs/environment.docs.descriptor.js.map +1 -0
  107. package/dist/docs/manifests.docs.descriptor.d.ts +4 -0
  108. package/dist/docs/manifests.docs.descriptor.d.ts.map +1 -0
  109. package/dist/docs/manifests.docs.descriptor.js +503 -0
  110. package/dist/docs/manifests.docs.descriptor.js.map +1 -0
  111. package/dist/docs/validation.docs.descriptor.d.ts +4 -0
  112. package/dist/docs/validation.docs.descriptor.d.ts.map +1 -0
  113. package/dist/docs/validation.docs.descriptor.js +441 -0
  114. package/dist/docs/validation.docs.descriptor.js.map +1 -0
  115. package/dist/doctor.d.ts +42 -0
  116. package/dist/doctor.d.ts.map +1 -0
  117. package/dist/doctor.js +119 -0
  118. package/dist/doctor.js.map +1 -0
  119. package/dist/env.d.ts +28 -0
  120. package/dist/env.d.ts.map +1 -0
  121. package/dist/env.js +75 -0
  122. package/dist/env.js.map +1 -0
  123. package/dist/env.runtime.d.ts +19 -0
  124. package/dist/env.runtime.d.ts.map +1 -0
  125. package/dist/env.runtime.js +37 -0
  126. package/dist/env.runtime.js.map +1 -0
  127. package/dist/environment/current.d.ts +32 -0
  128. package/dist/environment/current.d.ts.map +1 -0
  129. package/dist/environment/current.js +91 -0
  130. package/dist/environment/current.js.map +1 -0
  131. package/dist/environment/environment.config.descriptor.d.ts +11 -0
  132. package/dist/environment/environment.config.descriptor.d.ts.map +1 -0
  133. package/dist/environment/environment.config.descriptor.js +51 -0
  134. package/dist/environment/environment.config.descriptor.js.map +1 -0
  135. package/dist/environment/environment.config.schema.d.ts +47 -0
  136. package/dist/environment/environment.config.schema.d.ts.map +1 -0
  137. package/dist/environment/environment.config.schema.js +19 -0
  138. package/dist/environment/environment.config.schema.js.map +1 -0
  139. package/dist/environment/environment.local.descriptor.d.ts +11 -0
  140. package/dist/environment/environment.local.descriptor.d.ts.map +1 -0
  141. package/dist/environment/environment.local.descriptor.js +42 -0
  142. package/dist/environment/environment.local.descriptor.js.map +1 -0
  143. package/dist/environment/environment.plugin.d.ts +9 -0
  144. package/dist/environment/environment.plugin.d.ts.map +1 -0
  145. package/dist/environment/environment.plugin.js +27 -0
  146. package/dist/environment/environment.plugin.js.map +1 -0
  147. package/dist/environment/environment.production.descriptor.d.ts +10 -0
  148. package/dist/environment/environment.production.descriptor.d.ts.map +1 -0
  149. package/dist/environment/environment.production.descriptor.js +37 -0
  150. package/dist/environment/environment.production.descriptor.js.map +1 -0
  151. package/dist/environment/environment.staging.descriptor.d.ts +11 -0
  152. package/dist/environment/environment.staging.descriptor.d.ts.map +1 -0
  153. package/dist/environment/environment.staging.descriptor.js +22 -0
  154. package/dist/environment/environment.staging.descriptor.js.map +1 -0
  155. package/dist/environment/index.d.ts +8 -0
  156. package/dist/environment/index.d.ts.map +1 -0
  157. package/dist/environment/index.js +9 -0
  158. package/dist/environment/index.js.map +1 -0
  159. package/dist/environment/kinds/environment.default.d.ts +23 -0
  160. package/dist/environment/kinds/environment.default.d.ts.map +1 -0
  161. package/dist/environment/kinds/environment.default.js +49 -0
  162. package/dist/environment/kinds/environment.default.js.map +1 -0
  163. package/dist/environment/kinds/environment.interface.d.ts +7 -0
  164. package/dist/environment/kinds/environment.interface.d.ts.map +1 -0
  165. package/dist/environment/kinds/environment.interface.js +7 -0
  166. package/dist/environment/kinds/environment.interface.js.map +1 -0
  167. package/dist/environment/kinds/environment.kind.d.ts +10 -0
  168. package/dist/environment/kinds/environment.kind.d.ts.map +1 -0
  169. package/dist/environment/kinds/environment.kind.js +57 -0
  170. package/dist/environment/kinds/environment.kind.js.map +1 -0
  171. package/dist/environment/kinds/environment.schema.d.ts +34 -0
  172. package/dist/environment/kinds/environment.schema.d.ts.map +1 -0
  173. package/dist/environment/kinds/environment.schema.js +46 -0
  174. package/dist/environment/kinds/environment.schema.js.map +1 -0
  175. package/dist/environment/kinds/index.d.ts +8 -0
  176. package/dist/environment/kinds/index.d.ts.map +1 -0
  177. package/dist/environment/kinds/index.js +7 -0
  178. package/dist/environment/kinds/index.js.map +1 -0
  179. package/dist/environment/kinds/schemas/environment.interface.schema.d.ts +11 -0
  180. package/dist/environment/kinds/schemas/environment.interface.schema.d.ts.map +1 -0
  181. package/dist/environment/kinds/schemas/environment.interface.schema.js +2 -0
  182. package/dist/environment/kinds/schemas/environment.interface.schema.js.map +1 -0
  183. package/dist/environment/kinds/schemas/environment.schema.d.ts +30 -0
  184. package/dist/environment/kinds/schemas/environment.schema.d.ts.map +1 -0
  185. package/dist/environment/kinds/schemas/environment.schema.js +2 -0
  186. package/dist/environment/kinds/schemas/environment.schema.js.map +1 -0
  187. package/dist/environment/schemas/current.schema.d.ts +20 -0
  188. package/dist/environment/schemas/current.schema.d.ts.map +1 -0
  189. package/dist/environment/schemas/current.schema.js +2 -0
  190. package/dist/environment/schemas/current.schema.js.map +1 -0
  191. package/dist/environment/schemas/environment.config.schema.d.ts +4 -0
  192. package/dist/environment/schemas/environment.config.schema.d.ts.map +1 -0
  193. package/dist/environment/schemas/environment.config.schema.js +2 -0
  194. package/dist/environment/schemas/environment.config.schema.js.map +1 -0
  195. package/dist/extensions/index.d.ts +8 -0
  196. package/dist/extensions/index.d.ts.map +1 -0
  197. package/dist/extensions/index.js +8 -0
  198. package/dist/extensions/index.js.map +1 -0
  199. package/dist/extensions/registry.d.ts +41 -0
  200. package/dist/extensions/registry.d.ts.map +1 -0
  201. package/dist/extensions/registry.js +142 -0
  202. package/dist/extensions/registry.js.map +1 -0
  203. package/dist/extensions/types.d.ts +101 -0
  204. package/dist/extensions/types.d.ts.map +1 -0
  205. package/dist/extensions/types.js +8 -0
  206. package/dist/extensions/types.js.map +1 -0
  207. package/dist/form/core/field-resolver.d.ts +42 -0
  208. package/dist/form/core/field-resolver.d.ts.map +1 -0
  209. package/dist/form/core/field-resolver.js +293 -0
  210. package/dist/form/core/field-resolver.js.map +1 -0
  211. package/dist/form/core/groups.d.ts +20 -0
  212. package/dist/form/core/groups.d.ts.map +1 -0
  213. package/dist/form/core/groups.js +69 -0
  214. package/dist/form/core/groups.js.map +1 -0
  215. package/dist/form/core/index.d.ts +8 -0
  216. package/dist/form/core/index.d.ts.map +1 -0
  217. package/dist/form/core/index.js +6 -0
  218. package/dist/form/core/index.js.map +1 -0
  219. package/dist/form/core/nested-utils.d.ts +40 -0
  220. package/dist/form/core/nested-utils.d.ts.map +1 -0
  221. package/dist/form/core/nested-utils.js +98 -0
  222. package/dist/form/core/nested-utils.js.map +1 -0
  223. package/dist/form/core/schemas/validation.schema.d.ts +9 -0
  224. package/dist/form/core/schemas/validation.schema.d.ts.map +1 -0
  225. package/dist/form/core/schemas/validation.schema.js +2 -0
  226. package/dist/form/core/schemas/validation.schema.js.map +1 -0
  227. package/dist/form/core/types.d.ts +103 -0
  228. package/dist/form/core/types.d.ts.map +1 -0
  229. package/dist/form/core/types.js +2 -0
  230. package/dist/form/core/types.js.map +1 -0
  231. package/dist/form/core/validation.d.ts +23 -0
  232. package/dist/form/core/validation.d.ts.map +1 -0
  233. package/dist/form/core/validation.js +103 -0
  234. package/dist/form/core/validation.js.map +1 -0
  235. package/dist/form/core/visibility.d.ts +37 -0
  236. package/dist/form/core/visibility.d.ts.map +1 -0
  237. package/dist/form/core/visibility.js +128 -0
  238. package/dist/form/core/visibility.js.map +1 -0
  239. package/dist/form/index.d.ts +8 -0
  240. package/dist/form/index.d.ts.map +1 -0
  241. package/dist/form/index.js +2 -0
  242. package/dist/form/index.js.map +1 -0
  243. package/dist/index.d.ts +18 -0
  244. package/dist/index.d.ts.map +1 -0
  245. package/dist/index.js +18 -0
  246. package/dist/index.js.map +1 -0
  247. package/dist/loader/cli/index.d.ts +61 -0
  248. package/dist/loader/cli/index.d.ts.map +1 -0
  249. package/dist/loader/cli/index.js +263 -0
  250. package/dist/loader/cli/index.js.map +1 -0
  251. package/dist/loader/cli/loaders.d.ts +13 -0
  252. package/dist/loader/cli/loaders.d.ts.map +1 -0
  253. package/dist/loader/cli/loaders.js +132 -0
  254. package/dist/loader/cli/loaders.js.map +1 -0
  255. package/dist/loader/cli/types.d.ts +152 -0
  256. package/dist/loader/cli/types.d.ts.map +1 -0
  257. package/dist/loader/cli/types.js +5 -0
  258. package/dist/loader/cli/types.js.map +1 -0
  259. package/dist/loader/cli/utils.d.ts +53 -0
  260. package/dist/loader/cli/utils.d.ts.map +1 -0
  261. package/dist/loader/cli/utils.js +198 -0
  262. package/dist/loader/cli/utils.js.map +1 -0
  263. package/dist/loader/client.d.ts +18 -0
  264. package/dist/loader/client.d.ts.map +1 -0
  265. package/dist/loader/client.js +109 -0
  266. package/dist/loader/client.js.map +1 -0
  267. package/dist/loader/discovery.d.ts +48 -0
  268. package/dist/loader/discovery.d.ts.map +1 -0
  269. package/dist/loader/discovery.js +253 -0
  270. package/dist/loader/discovery.js.map +1 -0
  271. package/dist/loader/file-loader.d.ts +17 -0
  272. package/dist/loader/file-loader.d.ts.map +1 -0
  273. package/dist/loader/file-loader.js +237 -0
  274. package/dist/loader/file-loader.js.map +1 -0
  275. package/dist/loader/index.d.ts +9 -0
  276. package/dist/loader/index.d.ts.map +1 -0
  277. package/dist/loader/index.js +8 -0
  278. package/dist/loader/index.js.map +1 -0
  279. package/dist/loader/index.server.d.ts +66 -0
  280. package/dist/loader/index.server.d.ts.map +1 -0
  281. package/dist/loader/index.server.js +256 -0
  282. package/dist/loader/index.server.js.map +1 -0
  283. package/dist/loader/merge.d.ts +88 -0
  284. package/dist/loader/merge.d.ts.map +1 -0
  285. package/dist/loader/merge.js +301 -0
  286. package/dist/loader/merge.js.map +1 -0
  287. package/dist/loader/schemas/merge.schema.d.ts +8 -0
  288. package/dist/loader/schemas/merge.schema.d.ts.map +1 -0
  289. package/dist/loader/schemas/merge.schema.js +2 -0
  290. package/dist/loader/schemas/merge.schema.js.map +1 -0
  291. package/dist/loader/schemas/validation.schema.d.ts +17 -0
  292. package/dist/loader/schemas/validation.schema.d.ts.map +1 -0
  293. package/dist/loader/schemas/validation.schema.js +2 -0
  294. package/dist/loader/schemas/validation.schema.js.map +1 -0
  295. package/dist/loader/server.d.ts +3 -0
  296. package/dist/loader/server.d.ts.map +1 -0
  297. package/dist/loader/server.js +2 -0
  298. package/dist/loader/server.js.map +1 -0
  299. package/dist/loader/types.d.ts +136 -0
  300. package/dist/loader/types.d.ts.map +1 -0
  301. package/dist/loader/types.js +24 -0
  302. package/dist/loader/types.js.map +1 -0
  303. package/dist/loader/validation.d.ts +59 -0
  304. package/dist/loader/validation.d.ts.map +1 -0
  305. package/dist/loader/validation.js +218 -0
  306. package/dist/loader/validation.js.map +1 -0
  307. package/dist/manifest/builder.d.ts +172 -0
  308. package/dist/manifest/builder.d.ts.map +1 -0
  309. package/dist/manifest/builder.js +336 -0
  310. package/dist/manifest/builder.js.map +1 -0
  311. package/dist/manifest/config-manifest.d.ts +199 -0
  312. package/dist/manifest/config-manifest.d.ts.map +1 -0
  313. package/dist/manifest/config-manifest.js +388 -0
  314. package/dist/manifest/config-manifest.js.map +1 -0
  315. package/dist/manifest/index.d.ts +10 -0
  316. package/dist/manifest/index.d.ts.map +1 -0
  317. package/dist/manifest/index.js +20 -0
  318. package/dist/manifest/index.js.map +1 -0
  319. package/dist/manifest/schema.d.ts +460 -0
  320. package/dist/manifest/schema.d.ts.map +1 -0
  321. package/dist/manifest/schema.js +187 -0
  322. package/dist/manifest/schema.js.map +1 -0
  323. package/dist/manifest/schemas/builder.schema.d.ts +20 -0
  324. package/dist/manifest/schemas/builder.schema.d.ts.map +1 -0
  325. package/dist/manifest/schemas/builder.schema.js +2 -0
  326. package/dist/manifest/schemas/builder.schema.js.map +1 -0
  327. package/dist/manifest/schemas/config-manifest.schema.d.ts +2 -0
  328. package/dist/manifest/schemas/config-manifest.schema.d.ts.map +1 -0
  329. package/dist/manifest/schemas/config-manifest.schema.js +2 -0
  330. package/dist/manifest/schemas/config-manifest.schema.js.map +1 -0
  331. package/dist/manifest/schemas/schema.schema.d.ts +83 -0
  332. package/dist/manifest/schemas/schema.schema.d.ts.map +1 -0
  333. package/dist/manifest/schemas/schema.schema.js +2 -0
  334. package/dist/manifest/schemas/schema.schema.js.map +1 -0
  335. package/dist/manifest/types.d.ts +563 -0
  336. package/dist/manifest/types.d.ts.map +1 -0
  337. package/dist/manifest/types.js +9 -0
  338. package/dist/manifest/types.js.map +1 -0
  339. package/dist/routing/index.d.ts +29 -0
  340. package/dist/routing/index.d.ts.map +1 -0
  341. package/dist/routing/index.js +35 -0
  342. package/dist/routing/index.js.map +1 -0
  343. package/dist/routing/merge.d.ts +164 -0
  344. package/dist/routing/merge.d.ts.map +1 -0
  345. package/dist/routing/merge.js +460 -0
  346. package/dist/routing/merge.js.map +1 -0
  347. package/dist/routing/registry.d.ts +145 -0
  348. package/dist/routing/registry.d.ts.map +1 -0
  349. package/dist/routing/registry.js +459 -0
  350. package/dist/routing/registry.js.map +1 -0
  351. package/dist/routing/schemas/merge.schema.d.ts +5 -0
  352. package/dist/routing/schemas/merge.schema.d.ts.map +1 -0
  353. package/dist/routing/schemas/merge.schema.js +2 -0
  354. package/dist/routing/schemas/merge.schema.js.map +1 -0
  355. package/dist/routing/types.d.ts +358 -0
  356. package/dist/routing/types.d.ts.map +1 -0
  357. package/dist/routing/types.js +89 -0
  358. package/dist/routing/types.js.map +1 -0
  359. package/dist/schema/extend-zod.d.ts +137 -0
  360. package/dist/schema/extend-zod.d.ts.map +1 -0
  361. package/dist/schema/extend-zod.js +243 -0
  362. package/dist/schema/extend-zod.js.map +1 -0
  363. package/dist/schema/index.d.ts +9 -0
  364. package/dist/schema/index.d.ts.map +1 -0
  365. package/dist/schema/index.js +10 -0
  366. package/dist/schema/index.js.map +1 -0
  367. package/dist/schema/references.d.ts +9 -0
  368. package/dist/schema/references.d.ts.map +1 -0
  369. package/dist/schema/references.js +9 -0
  370. package/dist/schema/references.js.map +1 -0
  371. package/dist/schema/resolver.d.ts +45 -0
  372. package/dist/schema/resolver.d.ts.map +1 -0
  373. package/dist/schema/resolver.js +267 -0
  374. package/dist/schema/resolver.js.map +1 -0
  375. package/dist/schema/schemas/extend-zod.schema.d.ts +16 -0
  376. package/dist/schema/schemas/extend-zod.schema.d.ts.map +1 -0
  377. package/dist/schema/schemas/extend-zod.schema.js +2 -0
  378. package/dist/schema/schemas/extend-zod.schema.js.map +1 -0
  379. package/dist/schema/schemas/references.schema.d.ts +70 -0
  380. package/dist/schema/schemas/references.schema.d.ts.map +1 -0
  381. package/dist/schema/schemas/references.schema.js +2 -0
  382. package/dist/schema/schemas/references.schema.js.map +1 -0
  383. package/dist/schemas/collection.d.ts +31 -0
  384. package/dist/schemas/collection.d.ts.map +1 -0
  385. package/dist/schemas/collection.js +22 -0
  386. package/dist/schemas/collection.js.map +1 -0
  387. package/dist/schemas/config-manifest-descriptor.d.ts +495 -0
  388. package/dist/schemas/config-manifest-descriptor.d.ts.map +1 -0
  389. package/dist/schemas/config-manifest-descriptor.js +210 -0
  390. package/dist/schemas/config-manifest-descriptor.js.map +1 -0
  391. package/dist/schemas/config-registry-state.d.ts +8 -0
  392. package/dist/schemas/config-registry-state.d.ts.map +1 -0
  393. package/dist/schemas/config-registry-state.js +6 -0
  394. package/dist/schemas/config-registry-state.js.map +1 -0
  395. package/dist/schemas/doctor.schema.d.ts +25 -0
  396. package/dist/schemas/doctor.schema.d.ts.map +1 -0
  397. package/dist/schemas/doctor.schema.js +2 -0
  398. package/dist/schemas/doctor.schema.js.map +1 -0
  399. package/dist/schemas/index.d.ts +8 -0
  400. package/dist/schemas/index.d.ts.map +1 -0
  401. package/dist/schemas/index.js +21 -0
  402. package/dist/schemas/index.js.map +1 -0
  403. package/dist/server/index.d.ts +5 -0
  404. package/dist/server/index.d.ts.map +1 -0
  405. package/dist/server/index.js +4 -0
  406. package/dist/server/index.js.map +1 -0
  407. package/dist/services/config-accessor.d.ts +40 -0
  408. package/dist/services/config-accessor.d.ts.map +1 -0
  409. package/dist/services/config-accessor.js +180 -0
  410. package/dist/services/config-accessor.js.map +1 -0
  411. package/dist/services/config-storage/index.d.ts +8 -0
  412. package/dist/services/config-storage/index.d.ts.map +1 -0
  413. package/dist/services/config-storage/index.js +7 -0
  414. package/dist/services/config-storage/index.js.map +1 -0
  415. package/dist/services/config-storage/service.d.ts +63 -0
  416. package/dist/services/config-storage/service.d.ts.map +1 -0
  417. package/dist/services/config-storage/service.js +234 -0
  418. package/dist/services/config-storage/service.js.map +1 -0
  419. package/dist/services/config.d.ts +3 -0
  420. package/dist/services/config.d.ts.map +1 -0
  421. package/dist/services/config.js +30 -0
  422. package/dist/services/config.js.map +1 -0
  423. package/dist/services/encryption.d.ts +114 -0
  424. package/dist/services/encryption.d.ts.map +1 -0
  425. package/dist/services/encryption.js +232 -0
  426. package/dist/services/encryption.js.map +1 -0
  427. package/dist/services/index.d.ts +12 -0
  428. package/dist/services/index.d.ts.map +1 -0
  429. package/dist/services/index.js +16 -0
  430. package/dist/services/index.js.map +1 -0
  431. package/dist/services/loader/loader.descriptor.d.ts +103 -0
  432. package/dist/services/loader/loader.descriptor.d.ts.map +1 -0
  433. package/dist/services/loader/loader.descriptor.js +60 -0
  434. package/dist/services/loader/loader.descriptor.js.map +1 -0
  435. package/dist/services/loader/loader.impl.cloud.d.ts +55 -0
  436. package/dist/services/loader/loader.impl.cloud.d.ts.map +1 -0
  437. package/dist/services/loader/loader.impl.cloud.js +182 -0
  438. package/dist/services/loader/loader.impl.cloud.js.map +1 -0
  439. package/dist/services/loader/loader.impl.consumer.d.ts +48 -0
  440. package/dist/services/loader/loader.impl.consumer.d.ts.map +1 -0
  441. package/dist/services/loader/loader.impl.consumer.js +175 -0
  442. package/dist/services/loader/loader.impl.consumer.js.map +1 -0
  443. package/dist/services/loader/loader.impl.consumer.local-first.d.ts +59 -0
  444. package/dist/services/loader/loader.impl.consumer.local-first.d.ts.map +1 -0
  445. package/dist/services/loader/loader.impl.consumer.local-first.js +347 -0
  446. package/dist/services/loader/loader.impl.consumer.local-first.js.map +1 -0
  447. package/dist/services/manifest-utils.d.ts +47 -0
  448. package/dist/services/manifest-utils.d.ts.map +1 -0
  449. package/dist/services/manifest-utils.js +105 -0
  450. package/dist/services/manifest-utils.js.map +1 -0
  451. package/dist/services/schemas/config-accessor.schema.d.ts +10 -0
  452. package/dist/services/schemas/config-accessor.schema.d.ts.map +1 -0
  453. package/dist/services/schemas/config-accessor.schema.js +2 -0
  454. package/dist/services/schemas/config-accessor.schema.js.map +1 -0
  455. package/dist/services/schemas/encryption.schema.d.ts +22 -0
  456. package/dist/services/schemas/encryption.schema.d.ts.map +1 -0
  457. package/dist/services/schemas/encryption.schema.js +2 -0
  458. package/dist/services/schemas/encryption.schema.js.map +1 -0
  459. package/dist/services/schemas/manifest-utils.schema.d.ts +4 -0
  460. package/dist/services/schemas/manifest-utils.schema.d.ts.map +1 -0
  461. package/dist/services/schemas/manifest-utils.schema.js +2 -0
  462. package/dist/services/schemas/manifest-utils.schema.js.map +1 -0
  463. package/dist/settings/assemble.d.ts +28 -0
  464. package/dist/settings/assemble.d.ts.map +1 -0
  465. package/dist/settings/assemble.js +30 -0
  466. package/dist/settings/assemble.js.map +1 -0
  467. package/dist/settings/index.d.ts +10 -0
  468. package/dist/settings/index.d.ts.map +1 -0
  469. package/dist/settings/index.js +10 -0
  470. package/dist/settings/index.js.map +1 -0
  471. package/dist/settings/settings-section.schema.d.ts +49 -0
  472. package/dist/settings/settings-section.schema.d.ts.map +1 -0
  473. package/dist/settings/settings-section.schema.js +70 -0
  474. package/dist/settings/settings-section.schema.js.map +1 -0
  475. package/dist/storage/adapter.d.ts +11 -0
  476. package/dist/storage/adapter.d.ts.map +1 -0
  477. package/dist/storage/adapter.js +8 -0
  478. package/dist/storage/adapter.js.map +1 -0
  479. package/dist/storage/index.d.ts +8 -0
  480. package/dist/storage/index.d.ts.map +1 -0
  481. package/dist/storage/index.js +8 -0
  482. package/dist/storage/index.js.map +1 -0
  483. package/dist/storage/schemas.d.ts +257 -0
  484. package/dist/storage/schemas.d.ts.map +1 -0
  485. package/dist/storage/schemas.js +179 -0
  486. package/dist/storage/schemas.js.map +1 -0
  487. package/dist/storage/types.d.ts +74 -0
  488. package/dist/storage/types.d.ts.map +1 -0
  489. package/dist/storage/types.js +7 -0
  490. package/dist/storage/types.js.map +1 -0
  491. package/dist/system-constants.d.ts +95 -0
  492. package/dist/system-constants.d.ts.map +1 -0
  493. package/dist/system-constants.js +110 -0
  494. package/dist/system-constants.js.map +1 -0
  495. package/package.json +417 -0
  496. package/src/adapters/cli/flags.ts +260 -0
  497. package/src/adapters/cli/index.ts +24 -0
  498. package/src/adapters/cli/mappings.ts +43 -0
  499. package/src/adapters/cli/prompts.ts +70 -0
  500. package/src/adapters/cli/schemas/flags.schema.ts +8 -0
  501. package/src/adapters/cli/schemas/mappings.schema.ts +3 -0
  502. package/src/adapters/cli/schemas/prompts.schema.ts +4 -0
  503. package/src/adapters/cli/schemas/wizard.schema.ts +21 -0
  504. package/src/adapters/cli/wizard.ts +106 -0
  505. package/src/adapters/web/components/ManifestForm.svelte +817 -0
  506. package/src/browser/index.ts +86 -0
  507. package/src/cli/settings.descriptor.ts +23 -0
  508. package/src/cli/types.ts +59 -0
  509. package/src/client/index.ts +169 -0
  510. package/src/client/storage.ts +76 -0
  511. package/src/collection/collection.ts +121 -0
  512. package/src/collection/index.ts +6 -0
  513. package/src/common/index.ts +86 -0
  514. package/src/config.context.descriptor.ts +12 -0
  515. package/src/config.plugin.ts +214 -0
  516. package/src/crud/base-types.ts +10 -0
  517. package/src/crud/index.ts +15 -0
  518. package/src/crud/schemas/base-types.schema.ts +20 -0
  519. package/src/crud/schemas/shared.schema.ts +14 -0
  520. package/src/crud/shared.ts +8 -0
  521. package/src/crud/types.ts +299 -0
  522. package/src/docs/environment.docs.descriptor.ts +385 -0
  523. package/src/docs/manifests.docs.descriptor.ts +505 -0
  524. package/src/docs/validation.docs.descriptor.ts +443 -0
  525. package/src/doctor.ts +143 -0
  526. package/src/env.runtime.ts +49 -0
  527. package/src/env.ts +91 -0
  528. package/src/environment/current.ts +108 -0
  529. package/src/environment/environment.config.descriptor.ts +60 -0
  530. package/src/environment/environment.config.schema.ts +24 -0
  531. package/src/environment/environment.local.descriptor.ts +45 -0
  532. package/src/environment/environment.plugin.ts +31 -0
  533. package/src/environment/environment.production.descriptor.ts +40 -0
  534. package/src/environment/environment.staging.descriptor.ts +25 -0
  535. package/src/environment/index.ts +22 -0
  536. package/src/environment/kinds/environment.default.ts +57 -0
  537. package/src/environment/kinds/environment.interface.ts +10 -0
  538. package/src/environment/kinds/environment.kind.ts +69 -0
  539. package/src/environment/kinds/environment.schema.ts +57 -0
  540. package/src/environment/kinds/index.ts +8 -0
  541. package/src/environment/kinds/schemas/environment.interface.schema.ts +11 -0
  542. package/src/environment/kinds/schemas/environment.schema.ts +24 -0
  543. package/src/environment/schemas/current.schema.ts +21 -0
  544. package/src/environment/schemas/environment.config.schema.ts +3 -0
  545. package/src/extensions/index.ts +26 -0
  546. package/src/extensions/registry.ts +179 -0
  547. package/src/extensions/types.ts +123 -0
  548. package/src/form/core/field-resolver.ts +380 -0
  549. package/src/form/core/groups.ts +96 -0
  550. package/src/form/core/index.ts +41 -0
  551. package/src/form/core/nested-utils.ts +115 -0
  552. package/src/form/core/schemas/validation.schema.ts +9 -0
  553. package/src/form/core/types.ts +115 -0
  554. package/src/form/core/validation.ts +137 -0
  555. package/src/form/core/visibility.ts +172 -0
  556. package/src/form/index.ts +36 -0
  557. package/src/index.ts +69 -0
  558. package/src/js-yaml.d.ts +4 -0
  559. package/src/loader/cli/index.ts +386 -0
  560. package/src/loader/cli/loaders.ts +153 -0
  561. package/src/loader/cli/types.ts +181 -0
  562. package/src/loader/cli/utils.ts +236 -0
  563. package/src/loader/client.ts +140 -0
  564. package/src/loader/discovery.ts +291 -0
  565. package/src/loader/file-loader.ts +262 -0
  566. package/src/loader/index.server.ts +389 -0
  567. package/src/loader/index.ts +18 -0
  568. package/src/loader/merge.ts +366 -0
  569. package/src/loader/schemas/merge.schema.ts +8 -0
  570. package/src/loader/schemas/validation.schema.ts +18 -0
  571. package/src/loader/server.ts +15 -0
  572. package/src/loader/types.ts +142 -0
  573. package/src/loader/validation.ts +261 -0
  574. package/src/manifest/builder.ts +452 -0
  575. package/src/manifest/config-manifest.ts +482 -0
  576. package/src/manifest/index.ts +92 -0
  577. package/src/manifest/schema.ts +249 -0
  578. package/src/manifest/schemas/builder.schema.ts +33 -0
  579. package/src/manifest/schemas/config-manifest.schema.ts +1 -0
  580. package/src/manifest/schemas/schema.schema.ts +99 -0
  581. package/src/manifest/types.ts +726 -0
  582. package/src/routing/index.ts +105 -0
  583. package/src/routing/merge.ts +589 -0
  584. package/src/routing/registry.ts +595 -0
  585. package/src/routing/schemas/merge.schema.ts +6 -0
  586. package/src/routing/types.ts +470 -0
  587. package/src/schema/extend-zod.ts +289 -0
  588. package/src/schema/index.ts +44 -0
  589. package/src/schema/references.ts +21 -0
  590. package/src/schema/resolver.ts +343 -0
  591. package/src/schema/schemas/extend-zod.schema.ts +16 -0
  592. package/src/schema/schemas/references.schema.ts +86 -0
  593. package/src/schemas/collection.ts +38 -0
  594. package/src/schemas/config-manifest-descriptor.ts +259 -0
  595. package/src/schemas/config-registry-state.ts +13 -0
  596. package/src/schemas/doctor.schema.ts +27 -0
  597. package/src/schemas/index.ts +53 -0
  598. package/src/server/index.ts +4 -0
  599. package/src/services/config-accessor.ts +218 -0
  600. package/src/services/config-storage/index.ts +8 -0
  601. package/src/services/config-storage/service.ts +355 -0
  602. package/src/services/config.ts +37 -0
  603. package/src/services/encryption.ts +260 -0
  604. package/src/services/index.ts +34 -0
  605. package/src/services/loader/loader.descriptor.ts +96 -0
  606. package/src/services/loader/loader.impl.cloud.ts +214 -0
  607. package/src/services/loader/loader.impl.consumer.local-first.ts +417 -0
  608. package/src/services/loader/loader.impl.consumer.ts +213 -0
  609. package/src/services/manifest-utils.ts +119 -0
  610. package/src/services/schemas/config-accessor.schema.ts +11 -0
  611. package/src/services/schemas/encryption.schema.ts +23 -0
  612. package/src/services/schemas/manifest-utils.schema.ts +4 -0
  613. package/src/settings/assemble.ts +46 -0
  614. package/src/settings/index.ts +19 -0
  615. package/src/settings/settings-section.schema.ts +84 -0
  616. package/src/storage/adapter.ts +12 -0
  617. package/src/storage/index.ts +48 -0
  618. package/src/storage/schemas.ts +215 -0
  619. package/src/storage/types.ts +88 -0
  620. package/src/system-constants.ts +121 -0
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Field Grouping
3
+ *
4
+ * Organize fields into groups for UI rendering
5
+ */
6
+ import type { ConfigManifest, ConfigFieldGroup, ConfigContext } from '../../manifest/types.ts';
7
+ import type { ResolvedField, ResolvedGroup } from './types.ts';
8
+ import { evaluateRule } from './visibility.ts';
9
+
10
+ /**
11
+ * Resolve groups with their fields and visibility
12
+ */
13
+ export function resolveGroups(
14
+ manifest: ConfigManifest,
15
+ fields: ResolvedField[],
16
+ values: Record<string, unknown>,
17
+ context: ConfigContext
18
+ ): ResolvedGroup[] {
19
+ const groups = manifest.groups || [];
20
+ const fieldsByGroup = new Map<string | undefined, ResolvedField[]>();
21
+
22
+ // Group fields by group ID
23
+ for (const field of fields) {
24
+ const groupId = field.meta.ui.group;
25
+ if (!fieldsByGroup.has(groupId)) {
26
+ fieldsByGroup.set(groupId, []);
27
+ }
28
+ fieldsByGroup.get(groupId)!.push(field);
29
+ }
30
+
31
+ const resolved: ResolvedGroup[] = [];
32
+
33
+ // Process defined groups first (in order)
34
+ const sortedGroups = [...groups].sort((a, b) => (a.order ?? 999) - (b.order ?? 999));
35
+
36
+ for (const group of sortedGroups) {
37
+ const groupFields = fieldsByGroup.get(group.id) || [];
38
+
39
+ // Only include groups that have visible fields
40
+ const visibleFields = groupFields.filter((f) => f.visible);
41
+ if (visibleFields.length === 0) continue;
42
+
43
+ const visible = evaluateRule(group.visibleWhen, values, context);
44
+
45
+ resolved.push({
46
+ group,
47
+ fields: visibleFields,
48
+ visible
49
+ });
50
+
51
+ // Remove processed fields
52
+ fieldsByGroup.delete(group.id);
53
+ }
54
+
55
+ // Add ungrouped fields (no group ID)
56
+ const ungroupedFields = fieldsByGroup.get(undefined) || [];
57
+ if (ungroupedFields.length > 0) {
58
+ const visibleUngrouped = ungroupedFields.filter((f) => f.visible);
59
+ if (visibleUngrouped.length > 0) {
60
+ resolved.push({
61
+ group: {
62
+ id: '_ungrouped',
63
+ label: 'Other Settings',
64
+ order: 9999
65
+ },
66
+ fields: visibleUngrouped,
67
+ visible: true
68
+ });
69
+ }
70
+ }
71
+
72
+ return resolved;
73
+ }
74
+
75
+ /**
76
+ * Get fields for a specific group
77
+ */
78
+ export function getGroupFields(groupId: string, fields: ResolvedField[]): ResolvedField[] {
79
+ return fields.filter((f) => f.meta.ui.group === groupId);
80
+ }
81
+
82
+ /**
83
+ * Check if a group should be collapsed by default
84
+ */
85
+ export function isGroupCollapsed(
86
+ group: ConfigFieldGroup,
87
+ userPreferences?: Record<string, boolean>
88
+ ): boolean {
89
+ // Check user preference first
90
+ if (userPreferences && group.id in userPreferences) {
91
+ return userPreferences[group.id];
92
+ }
93
+
94
+ // Fall back to group default
95
+ return group.defaultCollapsed ?? false;
96
+ }
@@ -0,0 +1,41 @@
1
+
2
+ export type {
3
+ RenderContext,
4
+ ComponentOverride,
5
+ FormRenderOptions,
6
+ ResolvedField,
7
+ ResolvedGroup,
8
+ FormState,
9
+ FormActions
10
+ } from './types.ts';
11
+ export {
12
+ inferFieldComponent,
13
+ getFieldDefault,
14
+ resolveFields,
15
+ groupFields,
16
+ resolveFieldDefault,
17
+ resolveDefaults
18
+ } from './field-resolver.ts';
19
+ export type { FieldValidationResult, FormValidationResult } from './validation.ts';
20
+ export {
21
+ validateField,
22
+ validateForm,
23
+ getFieldSchema
24
+ } from './validation.ts';
25
+ export {
26
+ evaluateRule,
27
+ isFieldVisible,
28
+ isFieldDisabled,
29
+ isFieldRequired
30
+ } from './visibility.ts';
31
+ export {
32
+ resolveGroups,
33
+ getGroupFields,
34
+ isGroupCollapsed
35
+ } from './groups.ts';
36
+ export {
37
+ getNestedValue,
38
+ setNestedValue,
39
+ buildNestedObject,
40
+ flattenNestedObject
41
+ } from './nested-utils.ts';
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Nested Path Utilities
3
+ *
4
+ * Helpers for working with dot-notation paths in nested objects
5
+ */
6
+
7
+ /**
8
+ * Get a value at a dot-notation path from an object
9
+ * Supports both flat keys (e.g., obj['configuration.apiKey'])
10
+ * and nested objects (e.g., obj.configuration.apiKey)
11
+ *
12
+ * @example
13
+ * getNestedValue({ a: { b: 1 } }, 'a.b') // => 1
14
+ * getNestedValue({ 'a.b': 1 }, 'a.b') // => 1
15
+ */
16
+ export function getNestedValue(obj: Record<string, unknown>, path: string): unknown {
17
+ // First try direct key lookup (for flat form values)
18
+ if (path in obj) {
19
+ return obj[path];
20
+ }
21
+
22
+ // Then try dot-notation path lookup (for nested objects)
23
+ const parts = path.split('.');
24
+ let current: unknown = obj;
25
+ for (const part of parts) {
26
+ if (current == null || typeof current !== 'object') {
27
+ return undefined;
28
+ }
29
+ current = (current as Record<string, unknown>)[part];
30
+ }
31
+ return current;
32
+ }
33
+
34
+ /**
35
+ * Set a value at a dot-notation path in an object
36
+ * Creates nested objects as needed
37
+ *
38
+ * @example
39
+ * setNestedValue({}, 'a.b.c', 1) // => { a: { b: { c: 1 } } }
40
+ */
41
+ export function setNestedValue(
42
+ obj: Record<string, unknown>,
43
+ path: string,
44
+ value: unknown
45
+ ): Record<string, unknown> {
46
+ const parts = path.split('.');
47
+
48
+ if (parts.length === 1) {
49
+ // Simple key, just set it
50
+ obj[path] = value;
51
+ return obj;
52
+ }
53
+
54
+ // Navigate/create nested structure
55
+ let current: Record<string, unknown> = obj;
56
+ for (let i = 0; i < parts.length - 1; i++) {
57
+ const part = parts[i];
58
+ if (!(part in current) || typeof current[part] !== 'object' || current[part] === null) {
59
+ current[part] = {};
60
+ }
61
+ current = current[part] as Record<string, unknown>;
62
+ }
63
+
64
+ // Set the final value
65
+ current[parts[parts.length - 1]] = value;
66
+ return obj;
67
+ }
68
+
69
+ /**
70
+ * Build a nested object from flat dot-notation keys
71
+ *
72
+ * @example
73
+ * buildNestedObject({ 'a.b': 1, 'a.c': 2, d: 3 })
74
+ * // => { a: { b: 1, c: 2 }, d: 3 }
75
+ */
76
+ export function buildNestedObject(flat: Record<string, unknown>): Record<string, unknown> {
77
+ const result: Record<string, unknown> = {};
78
+
79
+ for (const [key, value] of Object.entries(flat)) {
80
+ if (key.includes('.')) {
81
+ setNestedValue(result, key, value);
82
+ } else {
83
+ result[key] = value;
84
+ }
85
+ }
86
+
87
+ return result;
88
+ }
89
+
90
+ /**
91
+ * Flatten a nested object to dot-notation keys
92
+ *
93
+ * @example
94
+ * flattenNestedObject({ a: { b: 1, c: 2 }, d: 3 })
95
+ * // => { 'a.b': 1, 'a.c': 2, d: 3 }
96
+ */
97
+ export function flattenNestedObject(
98
+ nested: Record<string, unknown>,
99
+ prefix = ''
100
+ ): Record<string, unknown> {
101
+ const result: Record<string, unknown> = {};
102
+
103
+ for (const [key, value] of Object.entries(nested)) {
104
+ const fullKey = prefix ? `${prefix}.${key}` : key;
105
+
106
+ if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
107
+ // Recurse into nested objects
108
+ Object.assign(result, flattenNestedObject(value as Record<string, unknown>, fullKey));
109
+ } else {
110
+ result[fullKey] = value;
111
+ }
112
+ }
113
+
114
+ return result;
115
+ }
@@ -0,0 +1,9 @@
1
+ export interface FieldValidationResult {
2
+ valid: boolean;
3
+ error?: string;
4
+ }
5
+
6
+ export interface FormValidationResult {
7
+ valid: boolean;
8
+ errors: Record<string, string | undefined>;
9
+ }
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Form Renderer Core Types
3
+ */
4
+ import type { ZodTypeAny } from 'zod/v4';
5
+ import type {
6
+ ConfigManifest,
7
+ ConfigFieldMeta,
8
+ ConfigFieldGroup,
9
+ ConfigContext,
10
+ FieldComponent
11
+ } from '../../manifest/types.ts';
12
+
13
+ /**
14
+ * Context available during form rendering
15
+ */
16
+ export interface RenderContext {
17
+ manifest: ConfigManifest;
18
+ values: Record<string, unknown>;
19
+ errors: Record<string, string | undefined>;
20
+ touched: Record<string, boolean>;
21
+ context: ConfigContext;
22
+ onChange: (field: string, value: unknown) => void;
23
+ onBlur: (field: string) => void;
24
+ }
25
+
26
+ /**
27
+ * Override for a specific field's rendering
28
+ */
29
+ export interface ComponentOverride {
30
+ /** Replace with custom component */
31
+ component?: unknown; // Component type varies by surface
32
+ /** Additional props to pass */
33
+ props?: Record<string, unknown>;
34
+ /** Custom render function */
35
+ render?: (field: ConfigFieldMeta, defaultRender: () => unknown) => unknown;
36
+ /** Hide this field entirely */
37
+ hidden?: boolean;
38
+ /** Render in a named slot instead of inline */
39
+ slot?: string;
40
+ }
41
+
42
+ /**
43
+ * Options for form rendering
44
+ */
45
+ export interface FormRenderOptions {
46
+ /** Current field values */
47
+ values: Record<string, unknown>;
48
+ /** Field change handler */
49
+ onChange: (field: string, value: unknown) => void;
50
+ /** Form submission handler */
51
+ onSubmit: () => void;
52
+ /** Field-level overrides */
53
+ overrides?: Record<string, ComponentOverride>;
54
+ /** Form layout */
55
+ layout?: 'vertical' | 'horizontal' | 'grid';
56
+ /** Runtime context */
57
+ context?: Partial<ConfigContext>;
58
+ /** Whether form is disabled */
59
+ disabled?: boolean;
60
+ /** Whether form is loading */
61
+ loading?: boolean;
62
+ }
63
+
64
+ /**
65
+ * Result of field resolution
66
+ */
67
+ export interface ResolvedField {
68
+ key: string;
69
+ meta: ConfigFieldMeta;
70
+ component: FieldComponent;
71
+ value: unknown;
72
+ error?: string;
73
+ visible: boolean;
74
+ disabled: boolean;
75
+ required: boolean;
76
+ override?: ComponentOverride;
77
+ /** Field's Zod schema (if available) for reference metadata extraction */
78
+ fieldSchema?: ZodTypeAny;
79
+ }
80
+
81
+ /**
82
+ * Result of group resolution
83
+ */
84
+ export interface ResolvedGroup {
85
+ group: ConfigFieldGroup;
86
+ fields: ResolvedField[];
87
+ visible: boolean;
88
+ }
89
+
90
+ /**
91
+ * Form state returned by form hooks/stores
92
+ */
93
+ export interface FormState<T = Record<string, unknown>> {
94
+ values: T;
95
+ errors: Record<string, string | undefined>;
96
+ touched: Record<string, boolean>;
97
+ isDirty: boolean;
98
+ isValid: boolean;
99
+ isSubmitting: boolean;
100
+ }
101
+
102
+ /**
103
+ * Form actions returned by form hooks/stores
104
+ */
105
+ export interface FormActions<T = Record<string, unknown>> {
106
+ setValue: (field: keyof T, value: unknown) => void;
107
+ setValues: (values: Partial<T>) => void;
108
+ /** Apply values and update dirty baseline — form stays clean after call */
109
+ resetTo: (values: Partial<T>) => void;
110
+ setError: (field: keyof T, error: string | undefined) => void;
111
+ setTouched: (field: keyof T, touched: boolean) => void;
112
+ reset: () => void;
113
+ submit: () => Promise<void>;
114
+ validate: () => Promise<boolean>;
115
+ }
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Form Validation
3
+ *
4
+ * Runtime validation using manifest schemas
5
+ */
6
+ import type { z } from 'zod/v4';
7
+ import type { ConfigManifest } from '../../manifest/types.ts';
8
+
9
+ import type { FieldValidationResult, FormValidationResult } from './schemas/validation.schema.ts';
10
+
11
+ export type { FieldValidationResult, FormValidationResult } from './schemas/validation.schema.ts';
12
+
13
+ /**
14
+ * Type guard to check if a schema is a ZodObject with a shape property
15
+ */
16
+ function isZodObjectWithShape(schema: z.ZodTypeAny): schema is z.ZodObject<z.ZodRawShape> {
17
+ return (
18
+ schema !== null &&
19
+ typeof schema === 'object' &&
20
+ 'shape' in schema &&
21
+ typeof schema.shape === 'object' &&
22
+ schema.shape !== null
23
+ );
24
+ }
25
+
26
+ /**
27
+ * Get the shape from a ZodObject schema
28
+ */
29
+ function getObjectShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> | undefined {
30
+ if (isZodObjectWithShape(schema)) {
31
+ return schema.shape as Record<string, z.ZodTypeAny>;
32
+ }
33
+ return undefined;
34
+ }
35
+
36
+ /**
37
+ * Get schema at a dot-notation path
38
+ */
39
+ function getSchemaAtPath(rootSchema: z.ZodTypeAny, path: string): z.ZodTypeAny | undefined {
40
+ const parts = path.split('.');
41
+ let current: z.ZodTypeAny | undefined = rootSchema;
42
+
43
+ for (const part of parts) {
44
+ if (!current) return undefined;
45
+
46
+ const shape = getObjectShape(current);
47
+ if (shape) {
48
+ current = shape[part];
49
+ } else {
50
+ return undefined;
51
+ }
52
+ }
53
+
54
+ return current;
55
+ }
56
+
57
+ /**
58
+ * Validate a single field value against its schema
59
+ * Supports dot-notation paths for nested fields
60
+ */
61
+ export function validateField(
62
+ manifest: ConfigManifest,
63
+ fieldKey: string,
64
+ value: unknown
65
+ ): FieldValidationResult {
66
+ try {
67
+ const schema = manifest.schema;
68
+
69
+ // Handle nested paths (e.g., 'configuration.apiKey')
70
+ const fieldSchema = fieldKey.includes('.')
71
+ ? getSchemaAtPath(schema, fieldKey)
72
+ : getTopLevelFieldSchema(schema, fieldKey);
73
+
74
+ if (fieldSchema) {
75
+ const result = fieldSchema.safeParse(value);
76
+ if (!result.success) {
77
+ const firstError = result.error.issues[0];
78
+ return { valid: false, error: firstError?.message || 'Invalid value' };
79
+ }
80
+ }
81
+
82
+ return { valid: true };
83
+ } catch {
84
+ return { valid: true }; // If we can't validate, assume valid
85
+ }
86
+ }
87
+
88
+ /**
89
+ * Get schema for a top-level field
90
+ */
91
+ function getTopLevelFieldSchema(schema: z.ZodTypeAny, fieldKey: string): z.ZodTypeAny | undefined {
92
+ const shape = getObjectShape(schema);
93
+ if (shape) {
94
+ return shape[fieldKey];
95
+ }
96
+ return undefined;
97
+ }
98
+
99
+ /**
100
+ * Validate all form values against manifest schema
101
+ */
102
+ export function validateForm(
103
+ manifest: ConfigManifest,
104
+ values: Record<string, unknown>
105
+ ): FormValidationResult {
106
+ const errors: Record<string, string | undefined> = {};
107
+
108
+ try {
109
+ const result = manifest.schema.safeParse(values);
110
+
111
+ if (!result.success) {
112
+ for (const issue of result.error.issues) {
113
+ const path = issue.path.join('.');
114
+ errors[path] = issue.message;
115
+ }
116
+ return { valid: false, errors };
117
+ }
118
+
119
+ return { valid: true, errors };
120
+ } catch {
121
+ return { valid: true, errors };
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Get validation schema for a field (for client-side use)
127
+ */
128
+ export function getFieldSchema(
129
+ manifest: ConfigManifest,
130
+ fieldKey: string
131
+ ): z.ZodTypeAny | undefined {
132
+ const shape = getObjectShape(manifest.schema);
133
+ if (shape) {
134
+ return shape[fieldKey];
135
+ }
136
+ return undefined;
137
+ }
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Visibility and Rule Evaluation
3
+ *
4
+ * Evaluates ConfigRules to determine field visibility, disabled state, etc.
5
+ */
6
+ import type {
7
+ ConfigRule,
8
+ ConfigFieldRule,
9
+ ConfigContextRule,
10
+ ConfigAndRule,
11
+ ConfigOrRule,
12
+ ConfigNotRule,
13
+ ConfigFunctionRule,
14
+ ConfigContext
15
+ } from '../../manifest/types.ts';
16
+
17
+ /**
18
+ * Evaluate a configuration rule
19
+ */
20
+ export function evaluateRule(
21
+ rule: ConfigRule | undefined,
22
+ values: Record<string, unknown>,
23
+ context: ConfigContext
24
+ ): boolean {
25
+ if (!rule) return true;
26
+
27
+ // Field-based rule
28
+ if ('field' in rule) {
29
+ return evaluateFieldRule(rule as ConfigFieldRule, values);
30
+ }
31
+
32
+ // Context-based rule
33
+ if ('context' in rule) {
34
+ return evaluateContextRule(rule as ConfigContextRule, context);
35
+ }
36
+
37
+ // AND rule
38
+ if ('and' in rule) {
39
+ return (rule as ConfigAndRule).and.every((r) => evaluateRule(r, values, context));
40
+ }
41
+
42
+ // OR rule
43
+ if ('or' in rule) {
44
+ return (rule as ConfigOrRule).or.some((r) => evaluateRule(r, values, context));
45
+ }
46
+
47
+ // NOT rule
48
+ if ('not' in rule) {
49
+ return !evaluateRule((rule as ConfigNotRule).not, values, context);
50
+ }
51
+
52
+ // Function rule
53
+ if ('fn' in rule) {
54
+ return (rule as ConfigFunctionRule).fn(context, values);
55
+ }
56
+
57
+ return true;
58
+ }
59
+
60
+ /**
61
+ * Get a value at a dot-notation path from an object
62
+ */
63
+ function getValueAtPath(obj: Record<string, unknown>, path: string): unknown {
64
+ // First try direct key lookup (for flat form values)
65
+ if (path in obj) {
66
+ return obj[path];
67
+ }
68
+
69
+ // Then try dot-notation path lookup (for nested objects)
70
+ const parts = path.split('.');
71
+ let current: unknown = obj;
72
+ for (const part of parts) {
73
+ if (current == null || typeof current !== 'object') {
74
+ return undefined;
75
+ }
76
+ current = (current as Record<string, unknown>)[part];
77
+ }
78
+ return current;
79
+ }
80
+
81
+ /**
82
+ * Evaluate a field-based rule
83
+ */
84
+ function evaluateFieldRule(rule: ConfigFieldRule, values: Record<string, unknown>): boolean {
85
+ const fieldValue = getValueAtPath(values, rule.field);
86
+
87
+ switch (rule.operator) {
88
+ case 'equals':
89
+ return fieldValue === rule.value;
90
+ case 'notEquals':
91
+ return fieldValue !== rule.value;
92
+ case 'in':
93
+ return Array.isArray(rule.value) && rule.value.includes(fieldValue);
94
+ case 'notIn':
95
+ return Array.isArray(rule.value) && !rule.value.includes(fieldValue);
96
+ case 'exists':
97
+ return fieldValue !== undefined && fieldValue !== null;
98
+ case 'isEmpty':
99
+ return fieldValue === undefined || fieldValue === null || fieldValue === '';
100
+ default:
101
+ return true;
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Evaluate a context-based rule
107
+ */
108
+ function evaluateContextRule(rule: ConfigContextRule, context: ConfigContext): boolean {
109
+ let contextValue: unknown;
110
+
111
+ // Handle custom context paths
112
+ if (rule.context.startsWith('custom.')) {
113
+ const customKey = rule.context.slice(7);
114
+ contextValue = context.custom[customKey];
115
+ } else {
116
+ contextValue = context[rule.context as keyof Omit<ConfigContext, 'get' | 'custom'>];
117
+ }
118
+
119
+ switch (rule.operator) {
120
+ case 'equals':
121
+ return contextValue === rule.value;
122
+ case 'notEquals':
123
+ return contextValue !== rule.value;
124
+ case 'in':
125
+ return Array.isArray(rule.value) && rule.value.includes(contextValue);
126
+ case 'notIn':
127
+ return Array.isArray(rule.value) && !rule.value.includes(contextValue);
128
+ case 'exists':
129
+ return contextValue !== undefined && contextValue !== null;
130
+ default:
131
+ return true;
132
+ }
133
+ }
134
+
135
+ /**
136
+ * Check if a field should be visible
137
+ */
138
+ export function isFieldVisible(
139
+ fieldMeta: { rules?: { visibleWhen?: ConfigRule } },
140
+ values: Record<string, unknown>,
141
+ context: ConfigContext
142
+ ): boolean {
143
+ return evaluateRule(fieldMeta.rules?.visibleWhen, values, context);
144
+ }
145
+
146
+ /**
147
+ * Check if a field should be disabled
148
+ * Returns false if no disabledWhen rule is defined (field is enabled by default)
149
+ */
150
+ export function isFieldDisabled(
151
+ fieldMeta: { rules?: { disabledWhen?: ConfigRule } },
152
+ values: Record<string, unknown>,
153
+ context: ConfigContext
154
+ ): boolean {
155
+ // No rule = not disabled (enabled by default)
156
+ if (!fieldMeta.rules?.disabledWhen) return false;
157
+ return evaluateRule(fieldMeta.rules.disabledWhen, values, context);
158
+ }
159
+
160
+ /**
161
+ * Check if a field is required (beyond schema)
162
+ * Returns false if no requiredWhen rule is defined (not required by default)
163
+ */
164
+ export function isFieldRequired(
165
+ fieldMeta: { rules?: { requiredWhen?: ConfigRule } },
166
+ values: Record<string, unknown>,
167
+ context: ConfigContext
168
+ ): boolean {
169
+ // No rule = not required (optional by default)
170
+ if (!fieldMeta.rules?.requiredWhen) return false;
171
+ return evaluateRule(fieldMeta.rules.requiredWhen, values, context);
172
+ }