@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,289 @@
1
+ /**
2
+ * Zod Schema Extensions for Config Fields
3
+ *
4
+ * Provides a fluent builder pattern to attach reference and UI metadata
5
+ * to Zod schemas. This enables schema-driven form generation with
6
+ * dynamic option resolution.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const schema = z.object({
11
+ * widgetId: configField(z.string())
12
+ * .references('example.widgets', { labelField: 'name' })
13
+ * .label('Widget')
14
+ * .emptyState({ message: 'No widgets configured' })
15
+ * .build()
16
+ * });
17
+ * ```
18
+ */
19
+
20
+ import type { ZodTypeAny } from 'zod/v4';
21
+ import type {
22
+ ReferenceMeta,
23
+ ConfigReference,
24
+ NestedReference,
25
+ ComputedReference,
26
+ EnumReference,
27
+ EmptyStateConfig
28
+ } from './references.ts';
29
+
30
+ // Symbols for storing metadata on schemas (non-enumerable)
31
+ const REFERENCE_META = Symbol.for('vibes.config.referenceMeta');
32
+ const UI_META = Symbol.for('vibes.config.uiMeta');
33
+
34
+ import type { UIMeta, ConfigFieldMeta } from './schemas/extend-zod.schema.ts';
35
+
36
+ export type { UIMeta, ConfigFieldMeta } from './schemas/extend-zod.schema.ts';
37
+
38
+ /**
39
+ * Fluent builder for config-aware schemas
40
+ */
41
+ export class ConfigFieldBuilder<T extends ZodTypeAny> {
42
+ private _schema: T;
43
+ private _referenceMeta?: ReferenceMeta;
44
+ private _uiMeta: UIMeta = {};
45
+
46
+ constructor(schema: T) {
47
+ this._schema = schema;
48
+ }
49
+
50
+ /**
51
+ * Reference another config collection
52
+ * @example .references('example.things')
53
+ * @example .references('example.widgets', { labelField: 'name', filter: 'isActive' })
54
+ */
55
+ references(path: string, options?: Omit<ConfigReference, 'type' | 'path'>): this {
56
+ this._referenceMeta = {
57
+ source: { type: 'config', path, ...options },
58
+ as: 'select'
59
+ };
60
+ return this;
61
+ }
62
+
63
+ /**
64
+ * Reference nested data within a parent config item
65
+ * @example .referencesNested('example.widgets', 'widgetId', 'parts')
66
+ */
67
+ referencesNested(
68
+ parentPath: string,
69
+ parentField: string,
70
+ nestedPath: string,
71
+ options?: Omit<NestedReference, 'type' | 'parentPath' | 'parentField' | 'nestedPath'>
72
+ ): this {
73
+ this._referenceMeta = {
74
+ source: { type: 'nested', parentPath, parentField, nestedPath, ...options },
75
+ as: 'select'
76
+ };
77
+ return this;
78
+ }
79
+
80
+ /**
81
+ * Resolve options via async function
82
+ * @example .computed('fetchWidgetParts', { dependsOn: ['widgetId'] })
83
+ */
84
+ computed(resolver: string, options?: Omit<ComputedReference, 'type' | 'resolver'>): this {
85
+ this._referenceMeta = {
86
+ source: { type: 'computed', resolver, ...options },
87
+ as: 'select'
88
+ };
89
+ return this;
90
+ }
91
+
92
+ /**
93
+ * Static enum options
94
+ * @example .options([{ value: 'a', label: 'Option A' }])
95
+ */
96
+ options(values: EnumReference['values']): this {
97
+ this._referenceMeta = {
98
+ source: { type: 'enum', values },
99
+ as: 'select'
100
+ };
101
+ return this;
102
+ }
103
+
104
+ /**
105
+ * UI rendering style
106
+ */
107
+ as(style: NonNullable<ReferenceMeta['as']>): this {
108
+ if (this._referenceMeta) {
109
+ this._referenceMeta.as = style;
110
+ }
111
+ return this;
112
+ }
113
+
114
+ /**
115
+ * Allow multiple selection
116
+ */
117
+ multiple(allow: boolean = true): this {
118
+ if (this._referenceMeta) {
119
+ this._referenceMeta.multiple = allow;
120
+ }
121
+ return this;
122
+ }
123
+
124
+ /**
125
+ * Configure empty state
126
+ */
127
+ emptyState(config: EmptyStateConfig): this {
128
+ if (this._referenceMeta) {
129
+ this._referenceMeta.emptyState = config;
130
+ }
131
+ return this;
132
+ }
133
+
134
+ /**
135
+ * Set UI label
136
+ */
137
+ label(text: string): this {
138
+ this._uiMeta.label = text;
139
+ return this;
140
+ }
141
+
142
+ /**
143
+ * Set UI description (shown as subtitle)
144
+ */
145
+ description(text: string): this {
146
+ this._uiMeta.description = text;
147
+ return this;
148
+ }
149
+
150
+ /**
151
+ * Set help text (shown as tooltip or hint)
152
+ */
153
+ helpText(text: string): this {
154
+ this._uiMeta.helpText = text;
155
+ return this;
156
+ }
157
+
158
+ /**
159
+ * Set placeholder text
160
+ */
161
+ placeholder(text: string): this {
162
+ this._uiMeta.placeholder = text;
163
+ if (this._referenceMeta) {
164
+ this._referenceMeta.placeholder = text;
165
+ }
166
+ return this;
167
+ }
168
+
169
+ /**
170
+ * Set field order (lower = earlier)
171
+ */
172
+ order(n: number): this {
173
+ this._uiMeta.order = n;
174
+ return this;
175
+ }
176
+
177
+ /**
178
+ * Set field group for sectioning
179
+ */
180
+ group(id: string): this {
181
+ this._uiMeta.group = id;
182
+ return this;
183
+ }
184
+
185
+ /**
186
+ * Hide field from UI
187
+ */
188
+ hidden(hide: boolean = true): this {
189
+ this._uiMeta.hidden = hide;
190
+ return this;
191
+ }
192
+
193
+ /**
194
+ * Mark field as read-only
195
+ */
196
+ readOnly(ro: boolean = true): this {
197
+ this._uiMeta.readOnly = ro;
198
+ return this;
199
+ }
200
+
201
+ /**
202
+ * Set component type hint
203
+ */
204
+ component(type: NonNullable<UIMeta['component']>): this {
205
+ this._uiMeta.component = type;
206
+ return this;
207
+ }
208
+
209
+ /**
210
+ * Build the final schema with metadata attached
211
+ */
212
+ build(): T {
213
+ // Attach metadata to schema using symbols (non-enumerable)
214
+ Object.defineProperty(this._schema, REFERENCE_META, {
215
+ value: this._referenceMeta,
216
+ enumerable: false,
217
+ writable: false,
218
+ configurable: true
219
+ });
220
+ Object.defineProperty(this._schema, UI_META, {
221
+ value: this._uiMeta,
222
+ enumerable: false,
223
+ writable: false,
224
+ configurable: true
225
+ });
226
+ return this._schema;
227
+ }
228
+ }
229
+
230
+ /**
231
+ * Create a config-aware field builder
232
+ *
233
+ * @example
234
+ * ```typescript
235
+ * const widgetId = configField(z.string())
236
+ * .references('example.widgets')
237
+ * .label('Widget')
238
+ * .build();
239
+ * ```
240
+ */
241
+ export function configField<T extends ZodTypeAny>(schema: T): ConfigFieldBuilder<T> {
242
+ return new ConfigFieldBuilder(schema);
243
+ }
244
+
245
+ /**
246
+ * Extract reference metadata from schema
247
+ */
248
+ export function getReferenceMeta(schema: ZodTypeAny): ReferenceMeta | undefined {
249
+ // Cast through unknown to access symbol-keyed metadata
250
+ const schemaWithMeta = schema as unknown as Record<symbol, unknown>;
251
+ return schemaWithMeta[REFERENCE_META] as ReferenceMeta | undefined;
252
+ }
253
+
254
+ /**
255
+ * Extract UI metadata from schema
256
+ */
257
+ export function getUIMeta(schema: ZodTypeAny): UIMeta | undefined {
258
+ // Cast through unknown to access symbol-keyed metadata
259
+ const schemaWithMeta = schema as unknown as Record<symbol, unknown>;
260
+ return schemaWithMeta[UI_META] as UIMeta | undefined;
261
+ }
262
+
263
+ /**
264
+ * Extract all config field metadata from schema
265
+ */
266
+ export function getConfigFieldMeta(schema: ZodTypeAny): ConfigFieldMeta {
267
+ return {
268
+ referenceMeta: getReferenceMeta(schema),
269
+ uiMeta: getUIMeta(schema)
270
+ };
271
+ }
272
+
273
+ /**
274
+ * Check if schema has reference metadata
275
+ */
276
+ export function hasReference(schema: ZodTypeAny): boolean {
277
+ return getReferenceMeta(schema) !== undefined;
278
+ }
279
+
280
+ /**
281
+ * Check if schema has any config field metadata
282
+ */
283
+ export function hasConfigFieldMeta(schema: ZodTypeAny): boolean {
284
+ const meta = getConfigFieldMeta(schema);
285
+ return (
286
+ meta.referenceMeta !== undefined ||
287
+ (meta.uiMeta !== undefined && Object.keys(meta.uiMeta).length > 0)
288
+ );
289
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Config Schema Extensions
3
+ *
4
+ * Schema-driven references and metadata for config fields.
5
+ */
6
+
7
+ // Reference types
8
+ export type {
9
+ ReferenceSource,
10
+ ConfigReference,
11
+ NestedReference,
12
+ ComputedReference,
13
+ EnumReference,
14
+ EmptyStateConfig,
15
+ ReferenceMeta,
16
+ ResolvedOption,
17
+ ResolutionResult,
18
+ ResolutionContext,
19
+ ComputedResolverFn
20
+ } from './references.ts';
21
+
22
+ // Zod extension builder
23
+ export {
24
+ configField,
25
+ ConfigFieldBuilder,
26
+ getReferenceMeta,
27
+ getUIMeta,
28
+ getConfigFieldMeta,
29
+ hasReference,
30
+ hasConfigFieldMeta,
31
+ type UIMeta,
32
+ type ConfigFieldMeta
33
+ } from './extend-zod.ts';
34
+
35
+ // Option resolver
36
+ export {
37
+ resolveOptions,
38
+ resolveOptionsSync,
39
+ registerResolver,
40
+ unregisterResolver,
41
+ getRegisteredResolvers,
42
+ createResolutionContext,
43
+ getDependencyFields
44
+ } from './resolver.ts';
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Config Reference Types
3
+ *
4
+ * Defines types for schema-driven references between config entities.
5
+ * Enables fields to dynamically reference other config collections,
6
+ * nested data, or computed values.
7
+ */
8
+
9
+ export type {
10
+ ReferenceSource,
11
+ ConfigReference,
12
+ NestedReference,
13
+ ComputedReference,
14
+ EnumReference,
15
+ EmptyStateConfig,
16
+ ReferenceMeta,
17
+ ResolvedOption,
18
+ ResolutionResult,
19
+ ResolutionContext,
20
+ ComputedResolverFn
21
+ } from './schemas/references.schema.ts';
@@ -0,0 +1,343 @@
1
+ /**
2
+ * Config Reference Option Resolver
3
+ *
4
+ * Resolves options for reference fields at runtime by fetching
5
+ * from config stores, nested data, or computed functions.
6
+ */
7
+
8
+ import type {
9
+ ReferenceMeta,
10
+ ConfigReference,
11
+ NestedReference,
12
+ ComputedReference,
13
+ ResolvedOption,
14
+ ResolutionResult,
15
+ ResolutionContext,
16
+ ComputedResolverFn
17
+ } from './references.ts';
18
+
19
+ /**
20
+ * Registry for computed resolvers
21
+ */
22
+ const computedResolvers = new Map<string, ComputedResolverFn>();
23
+
24
+ /**
25
+ * Register a computed resolver function
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * registerResolver('fetchWidgetParts', async (deps, ctx) => {
30
+ * const widget = ctx.getConfig<Widget>(`example.widgets.${deps.widgetId}`);
31
+ * return widget?.parts?.map(p => ({ value: p.id, label: p.name })) ?? [];
32
+ * });
33
+ * ```
34
+ */
35
+ export function registerResolver(name: string, fn: ComputedResolverFn): void {
36
+ computedResolvers.set(name, fn);
37
+ }
38
+
39
+ /**
40
+ * Unregister a computed resolver
41
+ */
42
+ export function unregisterResolver(name: string): boolean {
43
+ return computedResolvers.delete(name);
44
+ }
45
+
46
+ /**
47
+ * Get all registered resolver names
48
+ */
49
+ export function getRegisteredResolvers(): string[] {
50
+ return Array.from(computedResolvers.keys());
51
+ }
52
+
53
+ /**
54
+ * Resolve options for a reference field
55
+ */
56
+ export async function resolveOptions(
57
+ meta: ReferenceMeta,
58
+ context: ResolutionContext
59
+ ): Promise<ResolutionResult> {
60
+ const { source } = meta;
61
+
62
+ try {
63
+ switch (source.type) {
64
+ case 'config':
65
+ return resolveConfigReference(source, context);
66
+
67
+ case 'nested':
68
+ return resolveNestedReference(source, context);
69
+
70
+ case 'computed':
71
+ return await resolveComputedReference(source, context);
72
+
73
+ case 'enum':
74
+ return {
75
+ options: source.values.map((v) => ({
76
+ value: v.value,
77
+ label: v.label ?? v.value,
78
+ description: v.description,
79
+ icon: v.icon
80
+ })),
81
+ isLoading: false,
82
+ isEmpty: source.values.length === 0
83
+ };
84
+
85
+ default:
86
+ return { options: [], isLoading: false, isEmpty: true };
87
+ }
88
+ } catch (error) {
89
+ return {
90
+ options: [],
91
+ isLoading: false,
92
+ isEmpty: true,
93
+ error: error instanceof Error ? error.message : 'Failed to resolve options'
94
+ };
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Resolve options synchronously (for enum types only, returns empty for async types)
100
+ */
101
+ export function resolveOptionsSync(
102
+ meta: ReferenceMeta,
103
+ context: ResolutionContext
104
+ ): ResolutionResult {
105
+ const { source } = meta;
106
+
107
+ if (source.type === 'enum') {
108
+ return {
109
+ options: source.values.map((v) => ({
110
+ value: v.value,
111
+ label: v.label ?? v.value,
112
+ description: v.description,
113
+ icon: v.icon
114
+ })),
115
+ isLoading: false,
116
+ isEmpty: source.values.length === 0
117
+ };
118
+ }
119
+
120
+ if (source.type === 'config') {
121
+ return resolveConfigReference(source, context);
122
+ }
123
+
124
+ if (source.type === 'nested') {
125
+ return resolveNestedReference(source, context);
126
+ }
127
+
128
+ // Computed requires async - return loading state
129
+ return { options: [], isLoading: true, isEmpty: true };
130
+ }
131
+
132
+ /**
133
+ * Resolve config reference - fetches from a config collection
134
+ */
135
+ function resolveConfigReference(
136
+ ref: ConfigReference,
137
+ context: ResolutionContext
138
+ ): ResolutionResult {
139
+ const configData = context.getConfig<Record<string, unknown>>(ref.path);
140
+
141
+ if (!configData || typeof configData !== 'object') {
142
+ return { options: [], isLoading: false, isEmpty: true };
143
+ }
144
+
145
+ // Handle both object (keyed by id) and array formats
146
+ const items = Array.isArray(configData) ? configData : Object.values(configData);
147
+ const valueField = ref.valueField ?? 'id';
148
+ const labelField = ref.labelField ?? 'name';
149
+
150
+ let filteredItems = items;
151
+
152
+ // Apply filter
153
+ if (ref.filter) {
154
+ if (typeof ref.filter === 'string') {
155
+ filteredItems = items.filter(
156
+ (item) =>
157
+ item &&
158
+ typeof item === 'object' &&
159
+ (item as Record<string, unknown>)[ref.filter as string]
160
+ );
161
+ } else {
162
+ filteredItems = items.filter(ref.filter);
163
+ }
164
+ }
165
+
166
+ const options: ResolvedOption[] = filteredItems
167
+ .filter((item): item is Record<string, unknown> => item !== null && typeof item === 'object')
168
+ .map((item) => ({
169
+ value: String(item[valueField] ?? ''),
170
+ label: String(item[labelField] ?? item[valueField] ?? ''),
171
+ description: ref.descriptionField ? String(item[ref.descriptionField] ?? '') : undefined,
172
+ icon: ref.iconField ? String(item[ref.iconField] ?? '') : undefined
173
+ }))
174
+ .filter((opt) => opt.value !== ''); // Filter out empty values
175
+
176
+ return {
177
+ options,
178
+ isLoading: false,
179
+ isEmpty: options.length === 0
180
+ };
181
+ }
182
+
183
+ /**
184
+ * Resolve nested reference - fetches from nested data within a parent config item
185
+ */
186
+ function resolveNestedReference(
187
+ ref: NestedReference,
188
+ context: ResolutionContext
189
+ ): ResolutionResult {
190
+ // Get the parent field value from form (supports nested paths like 'configuration.providerId')
191
+ const parentId = getValueAtPath(context.formValues, ref.parentField);
192
+
193
+ if (!parentId) {
194
+ return { options: [], isLoading: false, isEmpty: true };
195
+ }
196
+
197
+ // Get the parent config collection
198
+ const parentConfig = context.getConfig<Record<string, unknown>>(ref.parentPath);
199
+
200
+ if (!parentConfig) {
201
+ return { options: [], isLoading: false, isEmpty: true };
202
+ }
203
+
204
+ // Find the parent item - handle both keyed object and array formats
205
+ let parentItem: Record<string, unknown> | undefined;
206
+
207
+ if (Array.isArray(parentConfig)) {
208
+ parentItem = parentConfig.find(
209
+ (item) =>
210
+ item && typeof item === 'object' && (item as Record<string, unknown>).id === parentId
211
+ ) as Record<string, unknown> | undefined;
212
+ } else {
213
+ parentItem = parentConfig[String(parentId)] as Record<string, unknown> | undefined;
214
+ }
215
+
216
+ if (!parentItem || typeof parentItem !== 'object') {
217
+ return { options: [], isLoading: false, isEmpty: true };
218
+ }
219
+
220
+ // Navigate to nested path (uses the same path-based access)
221
+ const nestedData = getValueAtPath(parentItem, ref.nestedPath);
222
+
223
+ if (!nestedData) {
224
+ return { options: [], isLoading: false, isEmpty: true };
225
+ }
226
+
227
+ // Convert to array if needed
228
+ const items = Array.isArray(nestedData)
229
+ ? nestedData
230
+ : Object.values(nestedData as Record<string, unknown>);
231
+
232
+ const valueField = ref.valueField ?? 'id';
233
+ const labelField = ref.labelField ?? 'name';
234
+
235
+ const options: ResolvedOption[] = items
236
+ .filter((item): item is Record<string, unknown> => item !== null && typeof item === 'object')
237
+ .map((item) => ({
238
+ value: String(item[valueField] ?? ''),
239
+ label: String(item[labelField] ?? item[valueField] ?? ''),
240
+ description: ref.descriptionField ? String(item[ref.descriptionField] ?? '') : undefined
241
+ }))
242
+ .filter((opt) => opt.value !== '');
243
+
244
+ return {
245
+ options,
246
+ isLoading: false,
247
+ isEmpty: options.length === 0
248
+ };
249
+ }
250
+
251
+ /**
252
+ * Resolve computed reference - calls registered resolver function
253
+ */
254
+ async function resolveComputedReference(
255
+ ref: ComputedReference,
256
+ context: ResolutionContext
257
+ ): Promise<ResolutionResult> {
258
+ const resolver = computedResolvers.get(ref.resolver);
259
+
260
+ if (!resolver) {
261
+ return {
262
+ options: [],
263
+ isLoading: false,
264
+ isEmpty: true,
265
+ error: `Unknown resolver: ${ref.resolver}`
266
+ };
267
+ }
268
+
269
+ // Collect dependency values (supports nested paths)
270
+ const deps: Record<string, unknown> = {};
271
+ for (const field of ref.dependsOn ?? []) {
272
+ deps[field] = getValueAtPath(context.formValues, field);
273
+ }
274
+
275
+ try {
276
+ const options = await resolver(deps, context);
277
+
278
+ return {
279
+ options,
280
+ isLoading: false,
281
+ isEmpty: options.length === 0
282
+ };
283
+ } catch (error) {
284
+ return {
285
+ options: [],
286
+ isLoading: false,
287
+ isEmpty: true,
288
+ error: error instanceof Error ? error.message : 'Resolver failed'
289
+ };
290
+ }
291
+ }
292
+
293
+ /**
294
+ * Get value at path from object
295
+ * Supports both flat keys (e.g., obj['configuration.apiKey'])
296
+ * and nested objects (e.g., obj.configuration.apiKey)
297
+ */
298
+ function getValueAtPath(obj: Record<string, unknown>, path: string): unknown {
299
+ // First try direct key lookup (for flat form values)
300
+ if (path in obj) {
301
+ return obj[path];
302
+ }
303
+
304
+ // Then try dot-notation path lookup (for nested objects)
305
+ return path.split('.').reduce<unknown>((acc, key) => {
306
+ if (acc && typeof acc === 'object') {
307
+ return (acc as Record<string, unknown>)[key];
308
+ }
309
+ return undefined;
310
+ }, obj);
311
+ }
312
+
313
+ /**
314
+ * Create a resolution context from common parameters
315
+ */
316
+ export function createResolutionContext(
317
+ getConfig: <T = unknown>(path: string) => T | undefined,
318
+ formValues: Record<string, unknown>,
319
+ runtimeContext: Record<string, unknown> = {}
320
+ ): ResolutionContext {
321
+ return {
322
+ getConfig,
323
+ formValues,
324
+ runtimeContext
325
+ };
326
+ }
327
+
328
+ /**
329
+ * Get dependency fields from reference metadata
330
+ * Useful for determining when to re-resolve options
331
+ */
332
+ export function getDependencyFields(meta: ReferenceMeta): string[] {
333
+ const { source } = meta;
334
+
335
+ switch (source.type) {
336
+ case 'nested':
337
+ return [source.parentField];
338
+ case 'computed':
339
+ return source.dependsOn ?? [];
340
+ default:
341
+ return [];
342
+ }
343
+ }
@@ -0,0 +1,16 @@
1
+ export interface UIMeta {
2
+ label?: string;
3
+ description?: string;
4
+ helpText?: string;
5
+ placeholder?: string;
6
+ order?: number;
7
+ group?: string;
8
+ hidden?: boolean;
9
+ readOnly?: boolean;
10
+ component?: 'input' | 'textarea' | 'select' | 'checkbox' | 'radio-group' | 'number' | 'password' | 'code' | 'json';
11
+ }
12
+
13
+ export interface ConfigFieldMeta {
14
+ referenceMeta?: unknown;
15
+ uiMeta?: UIMeta;
16
+ }