@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,179 @@
1
+ /**
2
+ * Extension Registry
3
+ *
4
+ * Global registry for surface-specific manifest extensions.
5
+ * Extensions self-register on import from surface entry points.
6
+ */
7
+
8
+ import type { BaseRecord } from '../crud/types.ts';
9
+ import type { ExtensionSurface, ManifestSurfaceExtension, LoadedExtension } from './types.ts';
10
+
11
+ // Registry Storage
12
+
13
+ /**
14
+ * Global registry - maps "manifestId:surface" to extension
15
+ * Uses BaseRecord as the common type for storage
16
+ */
17
+ const extensions = new Map<string, ManifestSurfaceExtension<BaseRecord>>();
18
+
19
+ /**
20
+ * Cache for loaded extensions (with components resolved)
21
+ */
22
+ const loadedCache = new Map<string, LoadedExtension<BaseRecord>>();
23
+
24
+ // Registration
25
+
26
+ /**
27
+ * Build registry key from manifest ID and surface
28
+ */
29
+ function buildKey(manifestId: string, surface: ExtensionSurface): string {
30
+ return `${manifestId}:${surface}`;
31
+ }
32
+
33
+ /**
34
+ * Register a surface extension for a manifest
35
+ */
36
+ export function registerExtension<T extends BaseRecord = BaseRecord>(
37
+ extension: ManifestSurfaceExtension<T>
38
+ ): void {
39
+ const key = buildKey(extension.manifestId, extension.surface);
40
+
41
+ if (extensions.has(key)) {
42
+ console.warn(
43
+ `[ExtensionRegistry] Extension for "${extension.manifestId}" on "${extension.surface}" already registered. Skipping.`
44
+ );
45
+ return;
46
+ }
47
+
48
+ // Registry stores base type; callers retrieve with their specific generic
49
+ extensions.set(key, extension as unknown as ManifestSurfaceExtension<BaseRecord>);
50
+ }
51
+
52
+ // Retrieval
53
+
54
+ /**
55
+ * Get a registered extension (not yet loaded)
56
+ */
57
+ export function getExtension(
58
+ manifestId: string,
59
+ surface: ExtensionSurface
60
+ ): ManifestSurfaceExtension | null {
61
+ return extensions.get(buildKey(manifestId, surface)) ?? null;
62
+ }
63
+
64
+ /**
65
+ * Check if an extension exists
66
+ */
67
+ export function hasExtension(manifestId: string, surface: ExtensionSurface): boolean {
68
+ return extensions.has(buildKey(manifestId, surface));
69
+ }
70
+
71
+ /**
72
+ * Get all registered extension keys
73
+ */
74
+ export function getAllExtensionKeys(): string[] {
75
+ return Array.from(extensions.keys());
76
+ }
77
+
78
+ /**
79
+ * Get all extensions for a specific surface
80
+ */
81
+ export function getExtensionsForSurface(surface: ExtensionSurface): ManifestSurfaceExtension[] {
82
+ return Array.from(extensions.values()).filter((ext) => ext.surface === surface);
83
+ }
84
+
85
+ // Loading (Lazy Component Resolution)
86
+
87
+ /**
88
+ * Load an extension, resolving all lazy loaders
89
+ */
90
+ export async function loadExtension<T extends BaseRecord = BaseRecord>(
91
+ manifestId: string,
92
+ surface: ExtensionSurface
93
+ ): Promise<LoadedExtension<T> | null> {
94
+ const key = buildKey(manifestId, surface);
95
+
96
+ // Check cache first
97
+ const cached = loadedCache.get(key);
98
+ if (cached) {
99
+ // Cache stores base type; caller retrieves with their specific generic
100
+ return cached as unknown as LoadedExtension<T>;
101
+ }
102
+
103
+ // Get the raw extension
104
+ const extension = getExtension(manifestId, surface);
105
+ if (!extension) {
106
+ return null;
107
+ }
108
+
109
+ // Resolve all field override loaders in parallel
110
+ const loadedOverrides: LoadedExtension['fieldOverrides'] = {};
111
+
112
+ if (extension.fieldOverrides) {
113
+ const entries = Object.entries(extension.fieldOverrides);
114
+ const loadPromises = entries.map(async ([fieldKey, override]) => {
115
+ if (override.loader) {
116
+ const loaded = await override.loader();
117
+ return [
118
+ fieldKey,
119
+ {
120
+ component: loaded.component,
121
+ props: { ...override.props, ...loaded.props },
122
+ propsFactory: override.propsFactory,
123
+ hidden: override.hidden,
124
+ render: override.render
125
+ }
126
+ ] as const;
127
+ }
128
+ return [
129
+ fieldKey,
130
+ {
131
+ component: override.component,
132
+ props: override.props,
133
+ propsFactory: override.propsFactory,
134
+ hidden: override.hidden,
135
+ render: override.render
136
+ }
137
+ ] as const;
138
+ });
139
+
140
+ const results = await Promise.all(loadPromises);
141
+ for (const [fieldKey, override] of results) {
142
+ loadedOverrides[fieldKey] = override;
143
+ }
144
+ }
145
+
146
+ // Build loaded extension
147
+ const loaded: LoadedExtension<T> = {
148
+ manifestId: extension.manifestId,
149
+ surface: extension.surface,
150
+ fieldOverrides: loadedOverrides,
151
+ renderHeader: extension.renderHeader as LoadedExtension<T>['renderHeader'],
152
+ renderFooter: extension.renderFooter as LoadedExtension<T>['renderFooter'],
153
+ renderListRow: extension.renderListRow as LoadedExtension<T>['renderListRow'],
154
+ renderEmpty: extension.renderEmpty,
155
+ renderCreate: extension.renderCreate as LoadedExtension<T>['renderCreate'],
156
+ renderEdit: extension.renderEdit as LoadedExtension<T>['renderEdit']
157
+ };
158
+
159
+ // Cache and return
160
+ loadedCache.set(key, loaded as unknown as LoadedExtension<BaseRecord>);
161
+ return loaded;
162
+ }
163
+
164
+ // Cache Management
165
+
166
+ /**
167
+ * Clear the loaded extension cache
168
+ */
169
+ export function clearExtensionCache(): void {
170
+ loadedCache.clear();
171
+ }
172
+
173
+ /**
174
+ * Clear all registered extensions (for testing)
175
+ */
176
+ export function clearAllExtensions(): void {
177
+ extensions.clear();
178
+ loadedCache.clear();
179
+ }
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Surface-Specific Manifest Extensions
3
+ *
4
+ * Enables surface-specific (TUI/Web/CLI) component overrides for manifests.
5
+ * Extensions are loaded on-demand like the tools/manifests.ts pattern.
6
+ */
7
+
8
+ import type { ConfigFieldMeta } from '../manifest/types.ts';
9
+ import type { CRUDViewMode, BaseRecord } from '../crud/shared.ts';
10
+
11
+ // Re-export BaseRecord for convenience
12
+ export type { BaseRecord } from '../crud/shared.ts';
13
+
14
+ // Surface Types
15
+
16
+ /**
17
+ * Supported surface types
18
+ */
19
+ export type ExtensionSurface = 'tui' | 'web' | 'cli';
20
+
21
+ // Lazy Loading
22
+
23
+ /**
24
+ * Lazy component loader - returns component and optional props
25
+ */
26
+ export type LazyComponentLoader<T = unknown> = () => Promise<{
27
+ component: T;
28
+ props?: Record<string, unknown>;
29
+ }>;
30
+
31
+ /**
32
+ * Component override with lazy loading support
33
+ */
34
+ export interface LazyComponentOverride {
35
+ /** Lazy loader for the component */
36
+ loader?: LazyComponentLoader;
37
+ /** Pre-loaded component (alternative to loader) */
38
+ component?: unknown;
39
+ /** Factory to generate props from field and context */
40
+ propsFactory?: (
41
+ field: ConfigFieldMeta,
42
+ context: { values: Record<string, unknown>; mode: 'create' | 'edit' }
43
+ ) => Record<string, unknown>;
44
+ /** Additional static props */
45
+ props?: Record<string, unknown>;
46
+ /** Hide this field entirely */
47
+ hidden?: boolean;
48
+ /** Custom render function */
49
+ render?: (field: ConfigFieldMeta, defaultRender: () => unknown) => unknown;
50
+ }
51
+
52
+ // Extension Definition
53
+
54
+ /**
55
+ * View render context for custom create/edit views
56
+ */
57
+ export interface ViewRenderContext<T extends BaseRecord = BaseRecord> {
58
+ /** Current record (undefined for create mode) */
59
+ record?: T;
60
+ /** Submit handler */
61
+ onSubmit: (values: T) => void;
62
+ /** Cancel/back handler */
63
+ onCancel: () => void;
64
+ /** Whether a save operation is in progress */
65
+ isSubmitting?: boolean;
66
+ }
67
+
68
+ /**
69
+ * Surface-specific extension for a manifest
70
+ */
71
+ export interface ManifestSurfaceExtension<T extends BaseRecord = BaseRecord> {
72
+ /** Manifest ID this extension applies to */
73
+ manifestId: string;
74
+ /** Surface this extension is for */
75
+ surface: ExtensionSurface;
76
+ /** Field-level component overrides */
77
+ fieldOverrides?: Record<string, LazyComponentOverride>;
78
+ /** Custom header renderer */
79
+ renderHeader?: (mode: CRUDViewMode, record?: T) => unknown;
80
+ /** Custom footer renderer */
81
+ renderFooter?: (mode: CRUDViewMode, record?: T) => unknown;
82
+ /** Custom list row renderer */
83
+ renderListRow?: (record: T, defaultRender: () => unknown) => unknown;
84
+ /** Custom empty state renderer */
85
+ renderEmpty?: () => unknown;
86
+ /**
87
+ * Custom create view renderer.
88
+ * When provided, replaces the entire create form with a custom component.
89
+ * Use for wizard-style flows or complex template-based creation.
90
+ */
91
+ renderCreate?: (context: ViewRenderContext<T>) => unknown;
92
+ /**
93
+ * Custom edit view renderer.
94
+ * When provided, replaces the entire edit form with a custom component.
95
+ */
96
+ renderEdit?: (context: ViewRenderContext<T>) => unknown;
97
+ }
98
+
99
+ // Loaded Extension State
100
+
101
+ /**
102
+ * An extension with components already loaded
103
+ */
104
+ export interface LoadedExtension<T extends BaseRecord = BaseRecord> extends Omit<
105
+ ManifestSurfaceExtension<T>,
106
+ 'fieldOverrides'
107
+ > {
108
+ /** Loaded component overrides (loaders resolved) */
109
+ fieldOverrides: Record<
110
+ string,
111
+ {
112
+ component?: unknown;
113
+ props?: Record<string, unknown>;
114
+ propsFactory?: LazyComponentOverride['propsFactory'];
115
+ hidden?: boolean;
116
+ render?: LazyComponentOverride['render'];
117
+ }
118
+ >;
119
+ /** Custom create view renderer */
120
+ renderCreate?: ManifestSurfaceExtension<T>['renderCreate'];
121
+ /** Custom edit view renderer */
122
+ renderEdit?: ManifestSurfaceExtension<T>['renderEdit'];
123
+ }
@@ -0,0 +1,380 @@
1
+ /**
2
+ * Field Resolver
3
+ *
4
+ * Maps manifest field definitions to component types and resolves field state.
5
+ * Also provides default resolution based on context.
6
+ */
7
+ import type { z, ZodTypeAny, ZodObject } from 'zod/v4';
8
+ import type {
9
+ ConfigManifest,
10
+ ConfigFieldMeta,
11
+ FieldComponent,
12
+ ConfigContext
13
+ } from '../../manifest/types.ts';
14
+ import type { ResolvedField, ComponentOverride } from './types.ts';
15
+ import { getUIMeta } from '../../schema/extend-zod.ts';
16
+
17
+ /**
18
+ * Infer component type from field metadata
19
+ */
20
+ export function inferFieldComponent(fieldMeta: ConfigFieldMeta): FieldComponent {
21
+ // Explicit component takes precedence
22
+ if (fieldMeta.ui.component) {
23
+ return fieldMeta.ui.component;
24
+ }
25
+
26
+ // Infer from options presence
27
+ if (fieldMeta.options && fieldMeta.options.length > 0) {
28
+ // Few options = radio, many = select
29
+ return fieldMeta.options.length <= 4 ? 'radio-group' : 'select';
30
+ }
31
+
32
+ // Default to input
33
+ return 'input';
34
+ }
35
+
36
+ /**
37
+ * Get default value for a field considering context
38
+ */
39
+ export function getFieldDefault(
40
+ fieldMeta: ConfigFieldMeta,
41
+ context: { hardware?: string; environment?: string; surface?: string }
42
+ ): unknown {
43
+ const defaults = fieldMeta.defaults;
44
+ if (!defaults) return undefined;
45
+
46
+ // Check surface-specific default
47
+ if (context.surface && defaults.bySurface?.[context.surface as keyof typeof defaults.bySurface]) {
48
+ return defaults.bySurface[context.surface as keyof typeof defaults.bySurface];
49
+ }
50
+
51
+ // Check hardware-specific default
52
+ if (
53
+ context.hardware &&
54
+ defaults.byHardware?.[context.hardware as keyof typeof defaults.byHardware]
55
+ ) {
56
+ return defaults.byHardware[context.hardware as keyof typeof defaults.byHardware];
57
+ }
58
+
59
+ // Check environment-specific default
60
+ if (
61
+ context.environment &&
62
+ defaults.byEnvironment?.[context.environment as keyof typeof defaults.byEnvironment]
63
+ ) {
64
+ return defaults.byEnvironment[context.environment as keyof typeof defaults.byEnvironment];
65
+ }
66
+
67
+ // Return base default
68
+ return defaults.base;
69
+ }
70
+
71
+ /**
72
+ * Get a value at a dot-notation path from an object
73
+ * Supports both flat keys (e.g., obj['configuration.apiKey'])
74
+ * and nested objects (e.g., obj.configuration.apiKey)
75
+ */
76
+ function getValueAtPath(obj: Record<string, unknown>, path: string): unknown {
77
+ // First try direct key lookup (for flat form values)
78
+ if (path in obj) {
79
+ return obj[path];
80
+ }
81
+
82
+ // Then try dot-notation path lookup (for nested objects)
83
+ const parts = path.split('.');
84
+ let current: unknown = obj;
85
+ for (const part of parts) {
86
+ if (current == null || typeof current !== 'object') {
87
+ return undefined;
88
+ }
89
+ current = (current as Record<string, unknown>)[part];
90
+ }
91
+ return current;
92
+ }
93
+
94
+ /**
95
+ * Get a schema at a dot-notation path
96
+ * Drills down through nested ZodObject shapes
97
+ */
98
+ function getSchemaAtPath(rootSchema: ZodTypeAny, path: string): ZodTypeAny | undefined {
99
+ const parts = path.split('.');
100
+ let current: ZodTypeAny | undefined = rootSchema;
101
+
102
+ for (const part of parts) {
103
+ if (!current) return undefined;
104
+
105
+ // Try to get shape from current schema
106
+ const zodObj = current as ZodObject<Record<string, ZodTypeAny>>;
107
+ if (zodObj.shape && typeof zodObj.shape === 'object') {
108
+ current = zodObj.shape[part] as ZodTypeAny | undefined;
109
+ } else {
110
+ return undefined;
111
+ }
112
+ }
113
+
114
+ return current;
115
+ }
116
+
117
+ /**
118
+ * Type guard to check if a manifest has a recordSchema property
119
+ */
120
+ function hasRecordSchema(
121
+ manifest: ConfigManifest
122
+ ): manifest is ConfigManifest & { recordSchema: ZodTypeAny } {
123
+ return 'recordSchema' in manifest && manifest.recordSchema != null;
124
+ }
125
+
126
+ /**
127
+ * Extract field schemas from a manifest's Zod schema
128
+ * Handles dot-notation field keys for nested fields
129
+ */
130
+ function extractFieldSchemas(manifest: ConfigManifest): Record<string, ZodTypeAny> {
131
+ const schemas: Record<string, ZodTypeAny> = {};
132
+
133
+ // Use recordSchema if available (for RecordManifests), otherwise use schema
134
+ const baseSchema = hasRecordSchema(manifest) ? manifest.recordSchema : manifest.schema;
135
+ if (!baseSchema || typeof baseSchema !== 'object' || !('_zod' in baseSchema)) {
136
+ return schemas;
137
+ }
138
+
139
+ // For each field key in the manifest, try to find its schema
140
+ for (const key of Object.keys(manifest.fields)) {
141
+ if (key.includes('.')) {
142
+ // Dot-notation path - drill down into nested schemas
143
+ const fieldSchema = getSchemaAtPath(baseSchema, key);
144
+ if (fieldSchema) {
145
+ schemas[key] = fieldSchema;
146
+ }
147
+ } else {
148
+ // Top-level field - get directly from shape
149
+ const zodSchema = baseSchema as ZodObject<Record<string, ZodTypeAny>>;
150
+ if (zodSchema.shape && zodSchema.shape[key]) {
151
+ schemas[key] = zodSchema.shape[key] as ZodTypeAny;
152
+ }
153
+ }
154
+ }
155
+
156
+ return schemas;
157
+ }
158
+
159
+ /**
160
+ * Resolve all fields from a manifest
161
+ */
162
+ export function resolveFields(
163
+ manifest: ConfigManifest,
164
+ values: Record<string, unknown>,
165
+ overrides: Record<string, ComponentOverride> = {},
166
+ context: { hardware?: string; environment?: string; surface?: string } = {}
167
+ ): ResolvedField[] {
168
+ const fields: ResolvedField[] = [];
169
+ const fieldSchemas = extractFieldSchemas(manifest);
170
+
171
+ for (const [key, meta] of Object.entries(manifest.fields)) {
172
+ const override = overrides[key];
173
+ const fieldSchema = fieldSchemas[key];
174
+
175
+ // Skip if override says hidden
176
+ if (override?.hidden) continue;
177
+
178
+ // Check if schema has UI metadata that should override manifest meta
179
+ const schemaUIMeta = fieldSchema ? getUIMeta(fieldSchema) : undefined;
180
+ const enhancedMeta = schemaUIMeta ? mergeUIMeta(meta, schemaUIMeta) : meta;
181
+
182
+ const resolved: ResolvedField = {
183
+ key,
184
+ meta: enhancedMeta,
185
+ component: inferFieldComponent(enhancedMeta),
186
+ // Use path-based access for nested fields (e.g., configuration.apiKey)
187
+ value: getValueAtPath(values, key) ?? getFieldDefault(enhancedMeta, context),
188
+ visible: true, // Will be evaluated by visibility module
189
+ disabled: false, // Will be evaluated by visibility module
190
+ required: false, // Will be evaluated by visibility module
191
+ override,
192
+ fieldSchema
193
+ };
194
+
195
+ fields.push(resolved);
196
+ }
197
+
198
+ // Sort by order
199
+ fields.sort((a, b) => (a.meta.ui.order ?? 999) - (b.meta.ui.order ?? 999));
200
+
201
+ return fields;
202
+ }
203
+
204
+ /**
205
+ * Merge schema UI metadata into field meta
206
+ */
207
+ function mergeUIMeta(
208
+ meta: ConfigFieldMeta,
209
+ schemaUI: ReturnType<typeof getUIMeta>
210
+ ): ConfigFieldMeta {
211
+ if (!schemaUI) return meta;
212
+
213
+ return {
214
+ ...meta,
215
+ ui: {
216
+ ...meta.ui,
217
+ // Schema UI overrides manifest UI where defined
218
+ ...(schemaUI.label && { label: schemaUI.label }),
219
+ ...(schemaUI.description && { description: schemaUI.description }),
220
+ ...(schemaUI.helpText && { helpText: schemaUI.helpText }),
221
+ ...(schemaUI.placeholder && { placeholder: schemaUI.placeholder }),
222
+ ...(schemaUI.order !== undefined && { order: schemaUI.order }),
223
+ ...(schemaUI.group && { group: schemaUI.group }),
224
+ ...(schemaUI.component && { component: schemaUI.component as FieldComponent }),
225
+ ...(schemaUI.hidden !== undefined && { hidden: schemaUI.hidden })
226
+ }
227
+ };
228
+ }
229
+
230
+ /**
231
+ * Group resolved fields by their group ID
232
+ */
233
+ export function groupFields(
234
+ fields: ResolvedField[],
235
+ _groups: ConfigManifest['groups'] = []
236
+ ): Map<string | undefined, ResolvedField[]> {
237
+ const grouped = new Map<string | undefined, ResolvedField[]>();
238
+
239
+ for (const field of fields) {
240
+ const groupId = field.meta.ui.group;
241
+ if (!grouped.has(groupId)) {
242
+ grouped.set(groupId, []);
243
+ }
244
+ grouped.get(groupId)!.push(field);
245
+ }
246
+
247
+ return grouped;
248
+ }
249
+
250
+ // Default Resolution (formerly in registry/resolution.ts)
251
+
252
+ /**
253
+ * Get defaults from a Zod schema
254
+ */
255
+ function getSchemaDefaults(schema: ZodTypeAny): Record<string, unknown> {
256
+ const result: Record<string, unknown> = {};
257
+
258
+ // Handle ZodObject
259
+ const zodObj = schema as ZodObject<Record<string, ZodTypeAny>>;
260
+ if (zodObj.shape && typeof zodObj.shape === 'object') {
261
+ for (const [key, fieldSchema] of Object.entries(zodObj.shape)) {
262
+ const def = (fieldSchema as { _def?: { defaultValue?: unknown } })._def;
263
+ if (def?.defaultValue !== undefined) {
264
+ result[key] =
265
+ typeof def.defaultValue === 'function'
266
+ ? (def.defaultValue as () => unknown)()
267
+ : def.defaultValue;
268
+ }
269
+ }
270
+ }
271
+
272
+ return result;
273
+ }
274
+
275
+ /**
276
+ * Get nested value from object using dot notation
277
+ */
278
+ function getNestedValue(obj: Record<string, unknown>, path: string): unknown {
279
+ const parts = path.split('.');
280
+ let current: unknown = obj;
281
+ for (const part of parts) {
282
+ if (current == null || typeof current !== 'object') {
283
+ return undefined;
284
+ }
285
+ current = (current as Record<string, unknown>)[part];
286
+ }
287
+ return current;
288
+ }
289
+
290
+ /**
291
+ * Set nested value in object using dot notation
292
+ */
293
+ function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {
294
+ const parts = path.split('.');
295
+ let current = obj;
296
+ for (let i = 0; i < parts.length - 1; i++) {
297
+ const part = parts[i];
298
+ if (!(part in current) || typeof current[part] !== 'object') {
299
+ current[part] = {};
300
+ }
301
+ current = current[part] as Record<string, unknown>;
302
+ }
303
+ current[parts[parts.length - 1]] = value;
304
+ }
305
+
306
+ /**
307
+ * Resolve default value for a single field with full context
308
+ */
309
+ export function resolveFieldDefault(
310
+ _fieldPath: string,
311
+ fieldMeta: ConfigFieldMeta,
312
+ schemaDefault: unknown,
313
+ ctx: ConfigContext
314
+ ): unknown {
315
+ const defaults = fieldMeta.defaults;
316
+
317
+ if (!defaults) {
318
+ return schemaDefault;
319
+ }
320
+
321
+ // Check for custom resolver
322
+ if (defaults.resolver) {
323
+ return defaults.resolver(ctx);
324
+ }
325
+
326
+ // Check hardware-specific default
327
+ if (defaults.byHardware?.[ctx.hardware] !== undefined) {
328
+ return defaults.byHardware[ctx.hardware];
329
+ }
330
+
331
+ // Check environment-specific default
332
+ if (defaults.byEnvironment?.[ctx.environment] !== undefined) {
333
+ return defaults.byEnvironment[ctx.environment];
334
+ }
335
+
336
+ // Check surface-specific default
337
+ if (defaults.bySurface?.[ctx.surface] !== undefined) {
338
+ return defaults.bySurface[ctx.surface];
339
+ }
340
+
341
+ // Use base default
342
+ if (defaults.base !== undefined) {
343
+ return defaults.base;
344
+ }
345
+
346
+ // Fall back to schema default
347
+ return schemaDefault;
348
+ }
349
+
350
+ /**
351
+ * Resolve default values for a manifest based on context
352
+ */
353
+ export function resolveDefaults<T extends z.ZodTypeAny>(
354
+ manifest: ConfigManifest<T>,
355
+ ctx: ConfigContext
356
+ ): z.infer<T> {
357
+ const result: Record<string, unknown> = {};
358
+
359
+ // Get defaults from schema
360
+ const schemaDefaults = getSchemaDefaults(manifest.schema);
361
+
362
+ // Merge with field-specific defaults
363
+ for (const [fieldPath, fieldMeta] of Object.entries(manifest.fields)) {
364
+ const schemaDefault = getNestedValue(schemaDefaults, fieldPath);
365
+ const resolvedDefault = resolveFieldDefault(fieldPath, fieldMeta, schemaDefault, ctx);
366
+
367
+ if (resolvedDefault !== undefined) {
368
+ setNestedValue(result, fieldPath, resolvedDefault);
369
+ }
370
+ }
371
+
372
+ // Merge schema defaults for fields without explicit metadata
373
+ for (const [key, value] of Object.entries(schemaDefaults)) {
374
+ if (!(key in result) && value !== undefined) {
375
+ result[key] = value;
376
+ }
377
+ }
378
+
379
+ return result as z.infer<T>;
380
+ }