@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,105 @@
1
+ /**
2
+ * Discriminated Routing System
3
+ *
4
+ * Provides discriminated field routing for manifests - where a discriminator
5
+ * field value dynamically loads variant-specific fields, schemas, and overrides.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Define a base manifest with routing
10
+ * const widgetManifest: RecordManifest = {
11
+ * id: 'example.widgets',
12
+ * // ... base fields ...
13
+ * routing: {
14
+ * discriminator: 'widgetType',
15
+ * variants: () => import('./registry.js').then(m => m.getAllWidgetVariants())
16
+ * }
17
+ * };
18
+ *
19
+ * // In form hook, resolve variant based on selected widget type
20
+ * const variant = await resolveVariant('example.widgets', manifest.routing, 'circle');
21
+ * const mergedManifest = mergeManifestWithVariant(widgetManifest, variant);
22
+ * ```
23
+ */
24
+
25
+ // Types
26
+ export type {
27
+ ManifestVariant,
28
+ ManifestRouting,
29
+ VariantLoader,
30
+ VariantSurfaceOverrides,
31
+ ResolvedVariant,
32
+ GetVariantOverridesOptions,
33
+ ProviderModule,
34
+ ProviderMeta,
35
+ ProviderAdapter,
36
+ ProviderClient,
37
+ ProviderClientFactory,
38
+ ProviderAuthType,
39
+ ProviderCategory,
40
+ // Nested routing types
41
+ NestedRouting,
42
+ ActiveNestedVariant,
43
+ ResolvedNestedVariant
44
+ } from './types.ts';
45
+
46
+ export {
47
+ hasLazyVariants,
48
+ hasEagerVariants,
49
+ isManifestVariant,
50
+ isProviderModule,
51
+ // Nested routing type guards and helpers
52
+ hasNestedLazyVariants,
53
+ hasNestedEagerVariants,
54
+ isNestedRouting,
55
+ getNestedDiscriminatorPath,
56
+ getNestedEnablePath
57
+ } from './types.ts';
58
+
59
+ // Registry
60
+ export {
61
+ registerVariant,
62
+ registerVariants,
63
+ getVariant,
64
+ getAllVariants,
65
+ hasVariant,
66
+ clearVariants,
67
+ clearRegistry,
68
+ loadVariantsFromRouting,
69
+ resolveVariant,
70
+ resolveVariantSync,
71
+ getRegistryStatus,
72
+ areVariantsLoaded,
73
+ // Nested routing registry functions
74
+ loadNestedVariantsFromRouting,
75
+ resolveNestedVariant,
76
+ resolveAllNestedVariants,
77
+ getActiveNestedVariants,
78
+ resolveNestedVariantSync,
79
+ areNestedVariantsLoaded,
80
+ getAllNestedVariants
81
+ } from './registry.ts';
82
+
83
+ // Merging utilities
84
+ export {
85
+ mergeFields,
86
+ mergeGroups,
87
+ mergeFormConfig,
88
+ mergeManifestWithVariant,
89
+ injectVariantFieldsIntoSteps,
90
+ getVariantOverrides,
91
+ hasVariantOverrides,
92
+ getAllFieldKeys,
93
+ getVisibleFieldsWithVariant,
94
+ mergeDefaults,
95
+ // Nested variant merging
96
+ prefixVariantFields,
97
+ prefixVariantGroups,
98
+ mergeNestedVariantFields,
99
+ mergeNestedVariantGroups,
100
+ mergeManifestWithNestedVariants,
101
+ getVisibleFieldsWithNestedVariants,
102
+ mergeNestedDefaults
103
+ } from './merge.ts';
104
+
105
+ export type { MergeManifestOptions } from './merge.ts';
@@ -0,0 +1,589 @@
1
+ /**
2
+ * Manifest Merging Utilities
3
+ *
4
+ * Functions for merging base manifests with variants to create
5
+ * a complete manifest with variant-specific fields, groups, and steps.
6
+ */
7
+
8
+ import type { z } from 'zod/v4';
9
+ import type { ConfigFieldGroup, ConfigFieldMeta } from '../manifest/types.ts';
10
+ import type { RecordManifest, FormViewConfig, FormStep } from '../crud/types.ts';
11
+ import type { ManifestVariant, ActiveNestedVariant } from './types.ts';
12
+ import type { ExtensionSurface } from '../extensions/types.ts';
13
+
14
+ /**
15
+ * Type guard to check if a schema is a ZodObject with merge capability
16
+ */
17
+ function isZodObjectWithMerge(schema: unknown): schema is z.ZodObject<z.ZodRawShape> & {
18
+ merge: (other: z.ZodObject<z.ZodRawShape>) => z.ZodObject<z.ZodRawShape>;
19
+ } {
20
+ return (
21
+ schema !== null &&
22
+ typeof schema === 'object' &&
23
+ 'merge' in schema &&
24
+ typeof (schema as { merge: unknown }).merge === 'function'
25
+ );
26
+ }
27
+
28
+ // Field Merging
29
+
30
+ /**
31
+ * Merge base manifest fields with variant fields
32
+ * Variant fields override/extend base fields
33
+ *
34
+ * @param baseFields - Fields from the base manifest
35
+ * @param variantFields - Fields from the variant
36
+ * @returns Merged fields
37
+ */
38
+ export function mergeFields(
39
+ baseFields: Record<string, ConfigFieldMeta>,
40
+ variantFields: Record<string, ConfigFieldMeta>
41
+ ): Record<string, ConfigFieldMeta> {
42
+ return {
43
+ ...baseFields,
44
+ ...variantFields
45
+ };
46
+ }
47
+
48
+ // Group Merging
49
+
50
+ /**
51
+ * Merge base manifest groups with variant groups
52
+ * Variant groups override by ID or are added
53
+ *
54
+ * @param baseGroups - Groups from the base manifest
55
+ * @param variantGroups - Groups from the variant
56
+ * @returns Merged groups sorted by order
57
+ */
58
+ export function mergeGroups(
59
+ baseGroups: ConfigFieldGroup[] = [],
60
+ variantGroups: ConfigFieldGroup[] = []
61
+ ): ConfigFieldGroup[] {
62
+ const groupMap = new Map<string, ConfigFieldGroup>();
63
+
64
+ // Add base groups
65
+ for (const group of baseGroups) {
66
+ groupMap.set(group.id, group);
67
+ }
68
+
69
+ // Override/add variant groups
70
+ for (const group of variantGroups) {
71
+ const existing = groupMap.get(group.id);
72
+ if (existing) {
73
+ // Merge with existing
74
+ groupMap.set(group.id, {
75
+ ...existing,
76
+ ...group
77
+ });
78
+ } else {
79
+ groupMap.set(group.id, group);
80
+ }
81
+ }
82
+
83
+ // Sort by order
84
+ return Array.from(groupMap.values()).sort((a, b) => (a.order ?? 100) - (b.order ?? 100));
85
+ }
86
+
87
+ // Form Step Merging
88
+
89
+ /**
90
+ * Get the group ID a field belongs to
91
+ */
92
+ function getFieldGroup(
93
+ fields: Record<string, ConfigFieldMeta>,
94
+ fieldKey: string
95
+ ): string | undefined {
96
+ return fields[fieldKey]?.ui?.group;
97
+ }
98
+
99
+ /**
100
+ * Inject variant fields into form steps by matching group IDs
101
+ *
102
+ * For each step, finds variant fields whose group matches:
103
+ * 1. The step ID itself
104
+ * 2. The group of any field already in the step
105
+ *
106
+ * @param baseSteps - Form steps from base manifest
107
+ * @param variantFields - Fields from the variant
108
+ * @param allFields - All merged fields (base + variant)
109
+ * @returns Enhanced steps with variant fields injected
110
+ */
111
+ export function injectVariantFieldsIntoSteps(
112
+ baseSteps: FormStep[],
113
+ variantFields: Record<string, ConfigFieldMeta>,
114
+ allFields: Record<string, ConfigFieldMeta>
115
+ ): FormStep[] {
116
+ return baseSteps.map((step) => {
117
+ // Collect groups that this step is associated with
118
+ const stepGroups = new Set<string>();
119
+
120
+ // The step ID itself might be a group
121
+ stepGroups.add(step.id);
122
+
123
+ // Add groups from existing step fields
124
+ for (const fieldKey of step.fields) {
125
+ const group = getFieldGroup(allFields, fieldKey);
126
+ if (group) {
127
+ stepGroups.add(group);
128
+ }
129
+ }
130
+
131
+ // Find variant fields that should be added to this step
132
+ const variantFieldsForStep = Object.entries(variantFields)
133
+ .filter(([_, meta]) => {
134
+ const fieldGroup = meta.ui?.group;
135
+ return fieldGroup && stepGroups.has(fieldGroup);
136
+ })
137
+ .sort((a, b) => (a[1].ui?.order ?? 100) - (b[1].ui?.order ?? 100))
138
+ .map(([key]) => key);
139
+
140
+ // Only add fields that aren't already in the step
141
+ const existingFields = new Set(step.fields);
142
+ const newFields = variantFieldsForStep.filter((f) => !existingFields.has(f));
143
+
144
+ if (newFields.length === 0) {
145
+ return step;
146
+ }
147
+
148
+ return {
149
+ ...step,
150
+ fields: [...step.fields, ...newFields]
151
+ };
152
+ });
153
+ }
154
+
155
+ /**
156
+ * Merge form configuration with variant
157
+ *
158
+ * If variant has explicit step overrides, uses those.
159
+ * Otherwise, auto-injects variant fields by group matching.
160
+ *
161
+ * @param baseForm - Form config from base manifest
162
+ * @param variant - The variant to merge
163
+ * @param allFields - All merged fields
164
+ * @returns Merged form configuration
165
+ */
166
+ export function mergeFormConfig(
167
+ baseForm: FormViewConfig | undefined,
168
+ variant: ManifestVariant,
169
+ allFields: Record<string, ConfigFieldMeta>
170
+ ): FormViewConfig | undefined {
171
+ if (!baseForm) return baseForm;
172
+
173
+ // If variant has explicit step overrides, use them
174
+ if (variant.stepOverrides) {
175
+ return {
176
+ ...baseForm,
177
+ steps: variant.stepOverrides
178
+ };
179
+ }
180
+
181
+ // If no steps in base, nothing to merge
182
+ if (!baseForm.steps) {
183
+ return baseForm;
184
+ }
185
+
186
+ // Auto-inject variant fields into steps by group
187
+ const enhancedSteps = injectVariantFieldsIntoSteps(baseForm.steps, variant.fields, allFields);
188
+
189
+ return {
190
+ ...baseForm,
191
+ steps: enhancedSteps
192
+ };
193
+ }
194
+
195
+ // Full Manifest Merging
196
+
197
+ import type { MergeManifestOptions } from './schemas/merge.schema.ts';
198
+
199
+ export type { MergeManifestOptions } from './schemas/merge.schema.ts';
200
+
201
+ const DEFAULT_MERGE_OPTIONS: MergeManifestOptions = {
202
+ mergeSchemas: true,
203
+ injectIntoSteps: true
204
+ };
205
+
206
+ /**
207
+ * Merge a base manifest with a variant to create a complete manifest
208
+ *
209
+ * @param base - The base record manifest
210
+ * @param variant - The variant to merge
211
+ * @param options - Merge options
212
+ * @returns The merged manifest
213
+ */
214
+ export function mergeManifestWithVariant<T extends Record<string, unknown>>(
215
+ base: RecordManifest<T>,
216
+ variant: ManifestVariant,
217
+ options: MergeManifestOptions = {}
218
+ ): RecordManifest<T> {
219
+ const opts = { ...DEFAULT_MERGE_OPTIONS, ...options };
220
+
221
+ // Merge fields
222
+ const mergedFields = mergeFields(base.fields, variant.fields);
223
+
224
+ // Merge groups
225
+ const mergedGroups = mergeGroups(base.groups, variant.groups);
226
+
227
+ // Build merged manifest
228
+ const merged: RecordManifest<T> = {
229
+ ...base,
230
+ fields: mergedFields,
231
+ groups: mergedGroups
232
+ };
233
+
234
+ // Merge schema if requested and variant has schema
235
+ if (opts.mergeSchemas && variant.schema) {
236
+ // For Zod schemas, we can use .merge() if they're both objects
237
+ // This is a simplified approach - complex schema merging may need more logic
238
+ try {
239
+ // Check if both schemas have merge capability (ZodObject)
240
+ if (isZodObjectWithMerge(base.schema) && isZodObjectWithMerge(variant.schema)) {
241
+ merged.schema = base.schema.merge(variant.schema) as typeof base.schema;
242
+ } else {
243
+ // Fall back to using variant schema for validation
244
+ // This is a limitation - complex schemas need manual handling
245
+ merged.schema = variant.schema as typeof base.schema;
246
+ }
247
+ } catch {
248
+ // If merge fails, keep base schema
249
+ // Variant schema validation should happen separately
250
+ }
251
+ }
252
+
253
+ // Merge CRUD form config if present
254
+ if (base.crud?.form && opts.injectIntoSteps) {
255
+ merged.crud = {
256
+ ...base.crud,
257
+ form: mergeFormConfig(base.crud.form, variant, mergedFields)
258
+ };
259
+ }
260
+
261
+ return merged;
262
+ }
263
+
264
+ // Surface Override Helpers
265
+
266
+ /**
267
+ * Get surface-specific overrides from a variant
268
+ *
269
+ * @param variant - The variant to get overrides from
270
+ * @param surface - Target surface
271
+ * @returns Field overrides for the surface, or empty object
272
+ */
273
+ export function getVariantOverrides(
274
+ variant: ManifestVariant,
275
+ surface: ExtensionSurface
276
+ ): Record<string, unknown> {
277
+ return variant.overrides?.[surface] ?? {};
278
+ }
279
+
280
+ /**
281
+ * Check if a variant has overrides for a specific surface
282
+ */
283
+ export function hasVariantOverrides(variant: ManifestVariant, surface: ExtensionSurface): boolean {
284
+ const overrides = variant.overrides?.[surface];
285
+ return overrides !== undefined && Object.keys(overrides).length > 0;
286
+ }
287
+
288
+ // Field Visibility with Variants
289
+
290
+ /**
291
+ * Get all field keys from a merged manifest (base + variant)
292
+ *
293
+ * @param base - Base manifest
294
+ * @param variant - Optional variant
295
+ * @returns Array of all field keys
296
+ */
297
+ export function getAllFieldKeys(base: RecordManifest<any>, variant?: ManifestVariant): string[] {
298
+ const fields = new Set<string>(Object.keys(base.fields));
299
+
300
+ if (variant) {
301
+ for (const key of Object.keys(variant.fields)) {
302
+ fields.add(key);
303
+ }
304
+ }
305
+
306
+ return Array.from(fields);
307
+ }
308
+
309
+ /**
310
+ * Determine which fields should be visible based on variant
311
+ *
312
+ * With routing, base fields are always visible (unless hidden by rules),
313
+ * and variant fields are only visible when their variant is active.
314
+ *
315
+ * @param baseFields - Fields from base manifest
316
+ * @param activeVariant - Currently active variant (or undefined)
317
+ * @returns Set of visible field keys
318
+ */
319
+ export function getVisibleFieldsWithVariant(
320
+ baseFields: Record<string, ConfigFieldMeta>,
321
+ activeVariant?: ManifestVariant
322
+ ): Set<string> {
323
+ const visible = new Set<string>();
324
+
325
+ // Base fields are always potentially visible
326
+ // (actual visibility determined by rules)
327
+ for (const key of Object.keys(baseFields)) {
328
+ visible.add(key);
329
+ }
330
+
331
+ // Add variant fields when variant is active
332
+ if (activeVariant) {
333
+ for (const key of Object.keys(activeVariant.fields)) {
334
+ visible.add(key);
335
+ }
336
+ }
337
+
338
+ return visible;
339
+ }
340
+
341
+ // Default Value Merging
342
+
343
+ /**
344
+ * Merge default values from base and variant
345
+ * Variant defaults win on conflict
346
+ *
347
+ * @param baseDefaults - Defaults from base manifest/schema
348
+ * @param variantDefaults - Defaults from variant
349
+ * @returns Merged defaults
350
+ */
351
+ export function mergeDefaults<T extends Record<string, unknown>>(
352
+ baseDefaults: Partial<T>,
353
+ variantDefaults?: Partial<T>
354
+ ): Partial<T> {
355
+ if (!variantDefaults) {
356
+ return baseDefaults;
357
+ }
358
+
359
+ return {
360
+ ...baseDefaults,
361
+ ...variantDefaults
362
+ };
363
+ }
364
+
365
+ // Nested Variant Merging
366
+
367
+ /**
368
+ * Prefix all field keys in a variant with a path prefix
369
+ * Used for nested routing where variant fields need to be namespaced
370
+ *
371
+ * @param variant - The variant to prefix
372
+ * @param pathPrefix - The dot-notation prefix (e.g., 'agents.orchestration')
373
+ * @returns Fields with prefixed keys
374
+ */
375
+ export function prefixVariantFields(
376
+ variant: ManifestVariant,
377
+ pathPrefix: string
378
+ ): Record<string, ConfigFieldMeta> {
379
+ const prefixed: Record<string, ConfigFieldMeta> = {};
380
+ for (const [key, meta] of Object.entries(variant.fields)) {
381
+ const prefixedKey = `${pathPrefix}.${key}`;
382
+ prefixed[prefixedKey] = {
383
+ ...meta,
384
+ ui: {
385
+ ...meta.ui,
386
+ // Also prefix the group if it exists
387
+ group: meta.ui.group ? `${pathPrefix}.${meta.ui.group}` : meta.ui.group
388
+ }
389
+ };
390
+ }
391
+ return prefixed;
392
+ }
393
+
394
+ /**
395
+ * Prefix all groups in a variant with a path prefix
396
+ *
397
+ * @param groups - The groups to prefix
398
+ * @param pathPrefix - The dot-notation prefix
399
+ * @returns Groups with prefixed IDs
400
+ */
401
+ export function prefixVariantGroups(
402
+ groups: ConfigFieldGroup[] | undefined,
403
+ pathPrefix: string
404
+ ): ConfigFieldGroup[] {
405
+ if (!groups) return [];
406
+ return groups.map((group) => ({
407
+ ...group,
408
+ id: `${pathPrefix}.${group.id}`
409
+ }));
410
+ }
411
+
412
+ /**
413
+ * Merge multiple nested variants into base fields
414
+ * Each active variant's fields are prefixed with their path
415
+ *
416
+ * @param baseFields - Fields from the base manifest
417
+ * @param activeVariants - Map of active nested variants keyed by path
418
+ * @returns Merged fields with nested variant fields prefixed by path
419
+ */
420
+ export function mergeNestedVariantFields(
421
+ baseFields: Record<string, ConfigFieldMeta>,
422
+ activeVariants: Map<string, ActiveNestedVariant>
423
+ ): Record<string, ConfigFieldMeta> {
424
+ let merged = { ...baseFields };
425
+
426
+ for (const [path, activeVariant] of activeVariants) {
427
+ if (activeVariant.enabled && activeVariant.variant) {
428
+ const prefixedFields = prefixVariantFields(activeVariant.variant, path);
429
+ merged = { ...merged, ...prefixedFields };
430
+ }
431
+ }
432
+
433
+ return merged;
434
+ }
435
+
436
+ /**
437
+ * Merge multiple nested variants' groups into base groups
438
+ *
439
+ * @param baseGroups - Groups from the base manifest
440
+ * @param activeVariants - Map of active nested variants keyed by path
441
+ * @returns Merged groups sorted by order
442
+ */
443
+ export function mergeNestedVariantGroups(
444
+ baseGroups: ConfigFieldGroup[] | undefined,
445
+ activeVariants: Map<string, ActiveNestedVariant>
446
+ ): ConfigFieldGroup[] {
447
+ const groupMap = new Map<string, ConfigFieldGroup>();
448
+
449
+ // Add base groups
450
+ for (const group of baseGroups ?? []) {
451
+ groupMap.set(group.id, group);
452
+ }
453
+
454
+ // Add variant groups (prefixed)
455
+ for (const [path, activeVariant] of activeVariants) {
456
+ if (activeVariant.enabled && activeVariant.variant?.groups) {
457
+ const prefixedGroups = prefixVariantGroups(activeVariant.variant.groups, path);
458
+ for (const group of prefixedGroups) {
459
+ const existing = groupMap.get(group.id);
460
+ if (existing) {
461
+ groupMap.set(group.id, { ...existing, ...group });
462
+ } else {
463
+ groupMap.set(group.id, group);
464
+ }
465
+ }
466
+ }
467
+ }
468
+
469
+ return Array.from(groupMap.values()).sort((a, b) => (a.order ?? 100) - (b.order ?? 100));
470
+ }
471
+
472
+ /**
473
+ * Merge a manifest with multiple active nested variants
474
+ *
475
+ * @param base - The base record manifest
476
+ * @param activeVariants - Map of active nested variants keyed by path
477
+ * @param options - Merge options
478
+ * @returns The merged manifest
479
+ */
480
+ export function mergeManifestWithNestedVariants<T extends Record<string, unknown>>(
481
+ base: RecordManifest<T>,
482
+ activeVariants: Map<string, ActiveNestedVariant>,
483
+ options: MergeManifestOptions = {}
484
+ ): RecordManifest<T> {
485
+ const _opts = { ...DEFAULT_MERGE_OPTIONS, ...options };
486
+
487
+ // Merge fields from all active variants
488
+ const mergedFields = mergeNestedVariantFields(base.fields, activeVariants);
489
+
490
+ // Merge groups from all active variants
491
+ const mergedGroups = mergeNestedVariantGroups(base.groups, activeVariants);
492
+
493
+ // Build merged manifest
494
+ const merged: RecordManifest<T> = {
495
+ ...base,
496
+ fields: mergedFields,
497
+ groups: mergedGroups
498
+ };
499
+
500
+ // Nested-variant schemas are not merged; validation stays at base schema + per-path.
501
+ return merged;
502
+ }
503
+
504
+ /**
505
+ * Get all field keys visible based on active nested variants
506
+ *
507
+ * @param baseFields - Fields from base manifest
508
+ * @param activeVariants - Map of active nested variants
509
+ * @returns Set of visible field keys
510
+ */
511
+ export function getVisibleFieldsWithNestedVariants(
512
+ baseFields: Record<string, ConfigFieldMeta>,
513
+ activeVariants: Map<string, ActiveNestedVariant>
514
+ ): Set<string> {
515
+ const visible = new Set<string>();
516
+
517
+ // Base fields are always potentially visible
518
+ for (const key of Object.keys(baseFields)) {
519
+ visible.add(key);
520
+ }
521
+
522
+ // Add variant fields when their section is enabled
523
+ for (const [path, activeVariant] of activeVariants) {
524
+ if (activeVariant.enabled && activeVariant.variant) {
525
+ for (const key of Object.keys(activeVariant.variant.fields)) {
526
+ visible.add(`${path}.${key}`);
527
+ }
528
+ }
529
+ }
530
+
531
+ return visible;
532
+ }
533
+
534
+ /**
535
+ * Merge default values from base and multiple nested variants
536
+ *
537
+ * @param baseDefaults - Defaults from base manifest
538
+ * @param activeVariants - Map of active nested variants
539
+ * @returns Merged defaults with nested values
540
+ */
541
+ export function mergeNestedDefaults<T extends Record<string, unknown>>(
542
+ baseDefaults: Partial<T>,
543
+ activeVariants: Map<string, ActiveNestedVariant>
544
+ ): Partial<T> {
545
+ const merged = { ...baseDefaults } as Record<string, unknown>;
546
+
547
+ for (const [path, activeVariant] of activeVariants) {
548
+ if (activeVariant.enabled && activeVariant.variant?.defaults) {
549
+ // Set nested defaults at the path
550
+ setValueAtPath(merged, path, {
551
+ ...((getValueAtPath(merged, path) as Record<string, unknown> | undefined) ?? {}),
552
+ ...activeVariant.variant.defaults
553
+ });
554
+ }
555
+ }
556
+
557
+ return merged as Partial<T>;
558
+ }
559
+
560
+ /**
561
+ * Helper to get a value at a dot-notation path
562
+ */
563
+ function getValueAtPath(obj: Record<string, unknown>, path: string): unknown {
564
+ const parts = path.split('.');
565
+ let current: unknown = obj;
566
+ for (const part of parts) {
567
+ if (current == null || typeof current !== 'object') {
568
+ return undefined;
569
+ }
570
+ current = (current as Record<string, unknown>)[part];
571
+ }
572
+ return current;
573
+ }
574
+
575
+ /**
576
+ * Helper to set a value at a dot-notation path
577
+ */
578
+ function setValueAtPath(obj: Record<string, unknown>, path: string, value: unknown): void {
579
+ const parts = path.split('.');
580
+ let current = obj;
581
+ for (let i = 0; i < parts.length - 1; i++) {
582
+ const part = parts[i];
583
+ if (!(part in current) || typeof current[part] !== 'object') {
584
+ current[part] = {};
585
+ }
586
+ current = current[part] as Record<string, unknown>;
587
+ }
588
+ current[parts[parts.length - 1]] = value;
589
+ }