@vexcms/core 0.0.20 → 0.1.0-alpha.2

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 (323) hide show
  1. package/LICENSE +202 -0
  2. package/dist/.build +1 -0
  3. package/dist/access/buildChecks.d.ts +58 -0
  4. package/dist/access/buildChecks.d.ts.map +1 -0
  5. package/dist/access/canAccessAdminPanel.d.ts +53 -0
  6. package/dist/access/canAccessAdminPanel.d.ts.map +1 -0
  7. package/dist/access/compileConstraints.d.ts +155 -0
  8. package/dist/access/compileConstraints.d.ts.map +1 -0
  9. package/dist/access/config.d.ts +62 -0
  10. package/dist/access/config.d.ts.map +1 -0
  11. package/dist/access/constants.d.ts +95 -0
  12. package/dist/access/constants.d.ts.map +1 -0
  13. package/dist/access/constraintTypes.d.ts +337 -0
  14. package/dist/access/constraintTypes.d.ts.map +1 -0
  15. package/dist/access/createAccessQueryBuilder.d.ts +59 -0
  16. package/dist/access/createAccessQueryBuilder.d.ts.map +1 -0
  17. package/dist/access/createFilterConstraintBuilder.d.ts +26 -0
  18. package/dist/access/createFilterConstraintBuilder.d.ts.map +1 -0
  19. package/dist/access/createIndexConstraintBuilder.d.ts +40 -0
  20. package/dist/access/createIndexConstraintBuilder.d.ts.map +1 -0
  21. package/dist/access/hasPermission.d.ts +85 -0
  22. package/dist/access/hasPermission.d.ts.map +1 -0
  23. package/dist/access/index.d.ts +13 -0
  24. package/dist/access/index.d.ts.map +1 -0
  25. package/dist/access/pickQueryIndex.d.ts +42 -0
  26. package/dist/access/pickQueryIndex.d.ts.map +1 -0
  27. package/dist/access/resolveAccessRule.d.ts +85 -0
  28. package/dist/access/resolveAccessRule.d.ts.map +1 -0
  29. package/dist/access/types.d.ts +738 -0
  30. package/dist/access/types.d.ts.map +1 -0
  31. package/dist/access/validateAccessConstraints.d.ts +57 -0
  32. package/dist/access/validateAccessConstraints.d.ts.map +1 -0
  33. package/dist/api/client.d.ts +20 -0
  34. package/dist/api/client.d.ts.map +1 -0
  35. package/dist/api/client.js +117 -0
  36. package/dist/api/client.js.map +1 -0
  37. package/dist/api/convex.d.ts +296 -0
  38. package/dist/api/convex.d.ts.map +1 -0
  39. package/dist/api/create/client.d.ts +50 -0
  40. package/dist/api/create/client.d.ts.map +1 -0
  41. package/dist/api/create/server.d.ts +43 -0
  42. package/dist/api/create/server.d.ts.map +1 -0
  43. package/dist/api/depth.d.ts +39 -0
  44. package/dist/api/depth.d.ts.map +1 -0
  45. package/dist/api/find/client.d.ts +90 -0
  46. package/dist/api/find/client.d.ts.map +1 -0
  47. package/dist/api/find/server.d.ts +73 -0
  48. package/dist/api/find/server.d.ts.map +1 -0
  49. package/dist/api/get/client.d.ts +56 -0
  50. package/dist/api/get/client.d.ts.map +1 -0
  51. package/dist/api/get/server.d.ts +49 -0
  52. package/dist/api/get/server.d.ts.map +1 -0
  53. package/dist/api/globals/find.client.d.ts +20 -0
  54. package/dist/api/globals/find.client.d.ts.map +1 -0
  55. package/dist/api/globals/find.server.d.ts +29 -0
  56. package/dist/api/globals/find.server.d.ts.map +1 -0
  57. package/dist/api/globals/get.client.d.ts +46 -0
  58. package/dist/api/globals/get.client.d.ts.map +1 -0
  59. package/dist/api/globals/get.server.d.ts +55 -0
  60. package/dist/api/globals/get.server.d.ts.map +1 -0
  61. package/dist/api/globals/types.d.ts +65 -0
  62. package/dist/api/globals/types.d.ts.map +1 -0
  63. package/dist/api/globals/upsert.client.d.ts +24 -0
  64. package/dist/api/globals/upsert.client.d.ts.map +1 -0
  65. package/dist/api/globals/upsert.server.d.ts +47 -0
  66. package/dist/api/globals/upsert.server.d.ts.map +1 -0
  67. package/dist/api/populate.d.ts +23 -0
  68. package/dist/api/populate.d.ts.map +1 -0
  69. package/dist/api/remove/client.d.ts +58 -0
  70. package/dist/api/remove/client.d.ts.map +1 -0
  71. package/dist/api/remove/server.d.ts +65 -0
  72. package/dist/api/remove/server.d.ts.map +1 -0
  73. package/dist/api/search/client.d.ts +58 -0
  74. package/dist/api/search/client.d.ts.map +1 -0
  75. package/dist/api/search/server.d.ts +54 -0
  76. package/dist/api/search/server.d.ts.map +1 -0
  77. package/dist/api/server.d.ts +370 -0
  78. package/dist/api/server.d.ts.map +1 -0
  79. package/dist/api/server.js +33 -0
  80. package/dist/api/server.js.map +1 -0
  81. package/dist/api/types.d.ts +525 -0
  82. package/dist/api/types.d.ts.map +1 -0
  83. package/dist/api/update/client.d.ts +53 -0
  84. package/dist/api/update/client.d.ts.map +1 -0
  85. package/dist/api/update/server.d.ts +47 -0
  86. package/dist/api/update/server.d.ts.map +1 -0
  87. package/dist/api/utils.d.ts +57 -0
  88. package/dist/api/utils.d.ts.map +1 -0
  89. package/dist/auth/mergeCollections.d.ts +28 -0
  90. package/dist/auth/mergeCollections.d.ts.map +1 -0
  91. package/dist/auth/types.d.ts +84 -0
  92. package/dist/auth/types.d.ts.map +1 -0
  93. package/dist/chunk-2DU7JDEX.js +1877 -0
  94. package/dist/chunk-2DU7JDEX.js.map +1 -0
  95. package/dist/chunk-2IB2DCN7.js +75 -0
  96. package/dist/chunk-2IB2DCN7.js.map +1 -0
  97. package/dist/collections/config.d.ts +28 -0
  98. package/dist/collections/config.d.ts.map +1 -0
  99. package/dist/collections/constants.d.ts +27 -0
  100. package/dist/collections/constants.d.ts.map +1 -0
  101. package/dist/collections/index.d.ts +7 -0
  102. package/dist/collections/index.d.ts.map +1 -0
  103. package/dist/collections/indexFields.d.ts +20 -0
  104. package/dist/collections/indexFields.d.ts.map +1 -0
  105. package/dist/collections/interfaceGen.d.ts +59 -0
  106. package/dist/collections/interfaceGen.d.ts.map +1 -0
  107. package/dist/collections/internal/index.d.ts +2 -0
  108. package/dist/collections/internal/index.d.ts.map +1 -0
  109. package/dist/collections/types.d.ts +282 -0
  110. package/dist/collections/types.d.ts.map +1 -0
  111. package/dist/collections/utils.d.ts +71 -0
  112. package/dist/collections/utils.d.ts.map +1 -0
  113. package/dist/collections/validator.d.ts +73 -0
  114. package/dist/collections/validator.d.ts.map +1 -0
  115. package/dist/config/config.d.ts +43 -0
  116. package/dist/config/config.d.ts.map +1 -0
  117. package/dist/config/index.d.ts +5 -0
  118. package/dist/config/index.d.ts.map +1 -0
  119. package/dist/config/sanitizeConfig.d.ts +82 -0
  120. package/dist/config/sanitizeConfig.d.ts.map +1 -0
  121. package/dist/config/types.d.ts +316 -0
  122. package/dist/config/types.d.ts.map +1 -0
  123. package/dist/fields/array/config.d.ts +57 -0
  124. package/dist/fields/array/config.d.ts.map +1 -0
  125. package/dist/fields/array/index.d.ts +5 -0
  126. package/dist/fields/array/index.d.ts.map +1 -0
  127. package/dist/fields/array/inputSchema.d.ts +32 -0
  128. package/dist/fields/array/inputSchema.d.ts.map +1 -0
  129. package/dist/fields/array/types.d.ts +127 -0
  130. package/dist/fields/array/types.d.ts.map +1 -0
  131. package/dist/fields/array/validator.d.ts +30 -0
  132. package/dist/fields/array/validator.d.ts.map +1 -0
  133. package/dist/fields/baseTypes.d.ts +251 -0
  134. package/dist/fields/baseTypes.d.ts.map +1 -0
  135. package/dist/fields/blocks/config.d.ts +63 -0
  136. package/dist/fields/blocks/config.d.ts.map +1 -0
  137. package/dist/fields/blocks/index.d.ts +5 -0
  138. package/dist/fields/blocks/index.d.ts.map +1 -0
  139. package/dist/fields/blocks/inputSchema.d.ts +22 -0
  140. package/dist/fields/blocks/inputSchema.d.ts.map +1 -0
  141. package/dist/fields/blocks/types.d.ts +253 -0
  142. package/dist/fields/blocks/types.d.ts.map +1 -0
  143. package/dist/fields/blocks/validator.d.ts +32 -0
  144. package/dist/fields/blocks/validator.d.ts.map +1 -0
  145. package/dist/fields/checkbox/config.d.ts +46 -0
  146. package/dist/fields/checkbox/config.d.ts.map +1 -0
  147. package/dist/fields/checkbox/index.d.ts +5 -0
  148. package/dist/fields/checkbox/index.d.ts.map +1 -0
  149. package/dist/fields/checkbox/inputSchema.d.ts +27 -0
  150. package/dist/fields/checkbox/inputSchema.d.ts.map +1 -0
  151. package/dist/fields/checkbox/types.d.ts +67 -0
  152. package/dist/fields/checkbox/types.d.ts.map +1 -0
  153. package/dist/fields/checkbox/validator.d.ts +34 -0
  154. package/dist/fields/checkbox/validator.d.ts.map +1 -0
  155. package/dist/fields/color/config.d.ts +49 -0
  156. package/dist/fields/color/config.d.ts.map +1 -0
  157. package/dist/fields/color/convert.d.ts +72 -0
  158. package/dist/fields/color/convert.d.ts.map +1 -0
  159. package/dist/fields/color/formats.d.ts +38 -0
  160. package/dist/fields/color/formats.d.ts.map +1 -0
  161. package/dist/fields/color/index.d.ts +8 -0
  162. package/dist/fields/color/index.d.ts.map +1 -0
  163. package/dist/fields/color/inputSchema.d.ts +29 -0
  164. package/dist/fields/color/inputSchema.d.ts.map +1 -0
  165. package/dist/fields/color/types.d.ts +100 -0
  166. package/dist/fields/color/types.d.ts.map +1 -0
  167. package/dist/fields/color/utils.d.ts +100 -0
  168. package/dist/fields/color/utils.d.ts.map +1 -0
  169. package/dist/fields/color/validator.d.ts +27 -0
  170. package/dist/fields/color/validator.d.ts.map +1 -0
  171. package/dist/fields/constants.d.ts +108 -0
  172. package/dist/fields/constants.d.ts.map +1 -0
  173. package/dist/fields/date/config.d.ts +57 -0
  174. package/dist/fields/date/config.d.ts.map +1 -0
  175. package/dist/fields/date/index.d.ts +5 -0
  176. package/dist/fields/date/index.d.ts.map +1 -0
  177. package/dist/fields/date/inputSchema.d.ts +29 -0
  178. package/dist/fields/date/inputSchema.d.ts.map +1 -0
  179. package/dist/fields/date/types.d.ts +147 -0
  180. package/dist/fields/date/types.d.ts.map +1 -0
  181. package/dist/fields/date/validator.d.ts +34 -0
  182. package/dist/fields/date/validator.d.ts.map +1 -0
  183. package/dist/fields/group/config.d.ts +47 -0
  184. package/dist/fields/group/config.d.ts.map +1 -0
  185. package/dist/fields/group/index.d.ts +5 -0
  186. package/dist/fields/group/index.d.ts.map +1 -0
  187. package/dist/fields/group/inputSchema.d.ts +27 -0
  188. package/dist/fields/group/inputSchema.d.ts.map +1 -0
  189. package/dist/fields/group/types.d.ts +105 -0
  190. package/dist/fields/group/types.d.ts.map +1 -0
  191. package/dist/fields/group/validator.d.ts +41 -0
  192. package/dist/fields/group/validator.d.ts.map +1 -0
  193. package/dist/fields/index.d.ts +20 -0
  194. package/dist/fields/index.d.ts.map +1 -0
  195. package/dist/fields/inputSchemas/index.d.ts +23 -0
  196. package/dist/fields/inputSchemas/index.d.ts.map +1 -0
  197. package/dist/fields/inputSchemas/utils.d.ts +25 -0
  198. package/dist/fields/inputSchemas/utils.d.ts.map +1 -0
  199. package/dist/fields/interfaceGen.d.ts +15 -0
  200. package/dist/fields/interfaceGen.d.ts.map +1 -0
  201. package/dist/fields/number/config.d.ts +48 -0
  202. package/dist/fields/number/config.d.ts.map +1 -0
  203. package/dist/fields/number/index.d.ts +5 -0
  204. package/dist/fields/number/index.d.ts.map +1 -0
  205. package/dist/fields/number/inputSchema.d.ts +23 -0
  206. package/dist/fields/number/inputSchema.d.ts.map +1 -0
  207. package/dist/fields/number/types.d.ts +100 -0
  208. package/dist/fields/number/types.d.ts.map +1 -0
  209. package/dist/fields/number/validator.d.ts +39 -0
  210. package/dist/fields/number/validator.d.ts.map +1 -0
  211. package/dist/fields/relationship/config.d.ts +45 -0
  212. package/dist/fields/relationship/config.d.ts.map +1 -0
  213. package/dist/fields/relationship/index.d.ts +5 -0
  214. package/dist/fields/relationship/index.d.ts.map +1 -0
  215. package/dist/fields/relationship/inputSchema.d.ts +31 -0
  216. package/dist/fields/relationship/inputSchema.d.ts.map +1 -0
  217. package/dist/fields/relationship/types.d.ts +126 -0
  218. package/dist/fields/relationship/types.d.ts.map +1 -0
  219. package/dist/fields/relationship/validator.d.ts +27 -0
  220. package/dist/fields/relationship/validator.d.ts.map +1 -0
  221. package/dist/fields/select/config.d.ts +59 -0
  222. package/dist/fields/select/config.d.ts.map +1 -0
  223. package/dist/fields/select/index.d.ts +5 -0
  224. package/dist/fields/select/index.d.ts.map +1 -0
  225. package/dist/fields/select/inputSchema.d.ts +28 -0
  226. package/dist/fields/select/inputSchema.d.ts.map +1 -0
  227. package/dist/fields/select/types.d.ts +89 -0
  228. package/dist/fields/select/types.d.ts.map +1 -0
  229. package/dist/fields/select/validator.d.ts +31 -0
  230. package/dist/fields/select/validator.d.ts.map +1 -0
  231. package/dist/fields/text/config.d.ts +48 -0
  232. package/dist/fields/text/config.d.ts.map +1 -0
  233. package/dist/fields/text/index.d.ts +5 -0
  234. package/dist/fields/text/index.d.ts.map +1 -0
  235. package/dist/fields/text/inputSchema.d.ts +24 -0
  236. package/dist/fields/text/inputSchema.d.ts.map +1 -0
  237. package/dist/fields/text/types.d.ts +132 -0
  238. package/dist/fields/text/types.d.ts.map +1 -0
  239. package/dist/fields/text/validator.d.ts +39 -0
  240. package/dist/fields/text/validator.d.ts.map +1 -0
  241. package/dist/fields/types.d.ts +135 -0
  242. package/dist/fields/types.d.ts.map +1 -0
  243. package/dist/fields/upload/config.d.ts +24 -0
  244. package/dist/fields/upload/config.d.ts.map +1 -0
  245. package/dist/fields/upload/index.d.ts +5 -0
  246. package/dist/fields/upload/index.d.ts.map +1 -0
  247. package/dist/fields/upload/inputSchema.d.ts +17 -0
  248. package/dist/fields/upload/inputSchema.d.ts.map +1 -0
  249. package/dist/fields/upload/types.d.ts +78 -0
  250. package/dist/fields/upload/types.d.ts.map +1 -0
  251. package/dist/fields/upload/validator.d.ts +16 -0
  252. package/dist/fields/upload/validator.d.ts.map +1 -0
  253. package/dist/fields/url/config.d.ts +49 -0
  254. package/dist/fields/url/config.d.ts.map +1 -0
  255. package/dist/fields/url/index.d.ts +5 -0
  256. package/dist/fields/url/index.d.ts.map +1 -0
  257. package/dist/fields/url/inputSchema.d.ts +31 -0
  258. package/dist/fields/url/inputSchema.d.ts.map +1 -0
  259. package/dist/fields/url/types.d.ts +70 -0
  260. package/dist/fields/url/types.d.ts.map +1 -0
  261. package/dist/fields/url/validator.d.ts +37 -0
  262. package/dist/fields/url/validator.d.ts.map +1 -0
  263. package/dist/fields/utils.d.ts +47 -0
  264. package/dist/fields/utils.d.ts.map +1 -0
  265. package/dist/fields/validators/index.d.ts +23 -0
  266. package/dist/fields/validators/index.d.ts.map +1 -0
  267. package/dist/fields/validators/utils.d.ts +24 -0
  268. package/dist/fields/validators/utils.d.ts.map +1 -0
  269. package/dist/framework.d.ts +227 -0
  270. package/dist/framework.d.ts.map +1 -0
  271. package/dist/globals/config/config.d.ts +1 -0
  272. package/dist/globals/config/config.d.ts.map +1 -0
  273. package/dist/globals/config/types.d.ts +1 -0
  274. package/dist/globals/config/types.d.ts.map +1 -0
  275. package/dist/globals/config.d.ts +47 -0
  276. package/dist/globals/config.d.ts.map +1 -0
  277. package/dist/globals/index.d.ts +5 -0
  278. package/dist/globals/index.d.ts.map +1 -0
  279. package/dist/globals/interfaceGen.d.ts +33 -0
  280. package/dist/globals/interfaceGen.d.ts.map +1 -0
  281. package/dist/globals/types.d.ts +175 -0
  282. package/dist/globals/types.d.ts.map +1 -0
  283. package/dist/globals/utils.d.ts +37 -0
  284. package/dist/globals/utils.d.ts.map +1 -0
  285. package/dist/index.d.ts +15 -3165
  286. package/dist/index.d.ts.map +1 -0
  287. package/dist/index.js +2101 -3475
  288. package/dist/index.js.map +1 -1
  289. package/dist/media/api/index.d.ts +5 -0
  290. package/dist/media/api/index.d.ts.map +1 -0
  291. package/dist/media/api/mutations.d.ts +76 -0
  292. package/dist/media/api/mutations.d.ts.map +1 -0
  293. package/dist/media/api/queries.d.ts +28 -0
  294. package/dist/media/api/queries.d.ts.map +1 -0
  295. package/dist/media/api/server.d.ts +68 -0
  296. package/dist/media/api/server.d.ts.map +1 -0
  297. package/dist/media/api/types.d.ts +171 -0
  298. package/dist/media/api/types.d.ts.map +1 -0
  299. package/dist/media/config.d.ts +25 -0
  300. package/dist/media/config.d.ts.map +1 -0
  301. package/dist/media/index.d.ts +6 -0
  302. package/dist/media/index.d.ts.map +1 -0
  303. package/dist/media/types.d.ts +332 -0
  304. package/dist/media/types.d.ts.map +1 -0
  305. package/dist/media/utils.d.ts +35 -0
  306. package/dist/media/utils.d.ts.map +1 -0
  307. package/dist/media/validators.d.ts +61 -0
  308. package/dist/media/validators.d.ts.map +1 -0
  309. package/dist/schema/generateVexSchema.d.ts +36 -0
  310. package/dist/schema/generateVexSchema.d.ts.map +1 -0
  311. package/dist/schema/index.d.ts +3 -0
  312. package/dist/schema/index.d.ts.map +1 -0
  313. package/dist/schema/migrate.d.ts +73 -0
  314. package/dist/schema/migrate.d.ts.map +1 -0
  315. package/dist/types/generateVexTypes.d.ts +41 -0
  316. package/dist/types/generateVexTypes.d.ts.map +1 -0
  317. package/dist/types/generated.d.ts +382 -0
  318. package/dist/types/generated.d.ts.map +1 -0
  319. package/dist/types/index.d.ts +5 -0
  320. package/dist/types/index.d.ts.map +1 -0
  321. package/dist/utils.d.ts +57 -0
  322. package/dist/utils.d.ts.map +1 -0
  323. package/package.json +67 -24
@@ -0,0 +1,332 @@
1
+ import type { GenericDataModel, GenericMutationCtx, GenericQueryCtx } from "convex/server";
2
+ import type { CollectionConfig, CollectionConfigInput } from "../collections";
3
+ import type { BaseFieldMeta, ComponentHKT } from "../fields";
4
+ import type { MediaCollectionSlug, StorageAdapterSlug } from "../types";
5
+ /**
6
+ * Metadata attached to every media collection linking it to a specific storage adapter.
7
+ *
8
+ * Set by `defineMediaCollection()` and tagged onto each collection by the
9
+ * adapter when it processes its `mediaCollections` array. Core uses
10
+ * `storageAdapter` to route upload, delete, and URL operations to the
11
+ * correct adapter at runtime.
12
+ */
13
+ export type MediaCollectionMeta = {
14
+ /**
15
+ * Which storage adapter this collection is linked to specifically. "convex" supported by default
16
+ */
17
+ storageAdapter: StorageAdapterSlug;
18
+ };
19
+ /**
20
+ * Configuration input for a `defineMediaCollection()` call.
21
+ *
22
+ * Identical to `CollectionConfigInput` except `fields` is omitted — media
23
+ * collections have a fixed set of system fields (`alt`, `filename`, `mimeType`,
24
+ * `size`, `storageId`, `deleted`, `convexUrl`, `width`, `height`) that
25
+ * `defineMediaCollection()` always injects. Pass extra custom fields via the
26
+ * `fields` override on `defineMediaCollection()`.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * const images = defineMediaCollection({
31
+ * slug: "images",
32
+ * labels: { singular: "Image", plural: "Images" },
33
+ * });
34
+ * ```
35
+ *
36
+ * @see {@link MediaCollectionConfig} for the resolved type after defaults are applied
37
+ * @see {@link file-storage-convex/src!defineMediaCollection} from `@vexcms/file-storage-convex`
38
+ */
39
+ export type MediaCollectionConfigInput<TFieldMeta extends BaseFieldMeta = BaseFieldMeta, TCollectionMeta extends MediaCollectionMeta = MediaCollectionMeta, TCollectionSlug extends MediaCollectionSlug = MediaCollectionSlug, TFieldSlug extends string = string, TComponent extends ComponentHKT = ComponentHKT> = Omit<CollectionConfigInput<TFieldMeta, TCollectionMeta, TCollectionSlug, TFieldSlug, TComponent>, "fields">;
40
+ /**
41
+ * Resolved media collection configuration after `defineMediaCollection()` applies system fields and defaults.
42
+ *
43
+ * Structurally identical to `CollectionConfig` — all schema generation, admin
44
+ * panel rendering, and query helpers work against this type. Media collections
45
+ * are stored in `VexConfig.mediaCollections` separately from user-defined
46
+ * `collections` and appear under a dedicated "Media" section in the admin panel.
47
+ *
48
+ * @see {@link MediaCollectionConfigInput} for the user-facing input type
49
+ * @see {@link file-storage-convex/src!defineMediaCollection} from `@vexcms/file-storage-convex`
50
+ */
51
+ export type MediaCollectionConfig<TFieldMeta extends BaseFieldMeta = BaseFieldMeta, TCollectionMeta extends MediaCollectionMeta = MediaCollectionMeta, TCollectionSlug extends MediaCollectionSlug = MediaCollectionSlug, TFieldSlug extends string = string, TComponent extends ComponentHKT = ComponentHKT> = CollectionConfig<TFieldMeta, TCollectionMeta, TCollectionSlug, TFieldSlug, TComponent>;
52
+ /**
53
+ * Error thrown when storage configuration is invalid.
54
+ *
55
+ * Covers: missing required fields on media collections, slug collisions
56
+ * (between collections and media collections, or across adapters), upload
57
+ * fields referencing non-existent media collections, or `upload()` used
58
+ * without a configured storage adapter.
59
+ */
60
+ export declare class VexStorageConfigError extends Error {
61
+ /**
62
+ * @param message — Human-readable description of the configuration error.
63
+ */
64
+ constructor(message: string);
65
+ }
66
+ /** Protocol type for file upload methods. */
67
+ export declare const STORAGE_ADAPTER_PROTOCOLS: {
68
+ readonly presignedUrl: "presigned-url";
69
+ };
70
+ /** Protocol type for file upload methods. */
71
+ export type StorageAdapterProtocol = (typeof STORAGE_ADAPTER_PROTOCOLS)[keyof typeof STORAGE_ADAPTER_PROTOCOLS];
72
+ /**
73
+ * Return type for `getUrl` — either a resolved URL or an error message, never both.
74
+ */
75
+ export type GetUrlReturn = {
76
+ url: string;
77
+ error?: never;
78
+ } | {
79
+ url?: never;
80
+ error: string;
81
+ };
82
+ /**
83
+ * Shared interface implemented by all storage adapters.
84
+ *
85
+ * Defines the minimum contract — `name`, `type`, `mediaCollections`, and the
86
+ * four lifecycle methods (`createMediaDocument`, `deleteMedia`, `getUrl`,
87
+ * `uploadFile`) — that every adapter must satisfy regardless of protocol.
88
+ *
89
+ * @see {@link StorageAdapterPresignedUrlInterface} for the presigned-URL sub-interface
90
+ * @see {@link StorageAdapterPresignedUrl} for the abstract base class
91
+ */
92
+ export interface StorageAdapterBaseInterface {
93
+ /** Protocol name — tells the admin panel what the identifier of this storage adapter is. */
94
+ readonly name: StorageAdapterSlug;
95
+ /** Protocol type — tells the admin panel how to upload files. */
96
+ readonly type: StorageAdapterProtocol;
97
+ /**
98
+ * Processed media collections ready for schema generation and admin panel.
99
+ *
100
+ * The adapter validates, augments, and returns these collections. Each
101
+ * collection is tagged with `meta.storageAdapterName` equal to this adapter's
102
+ * `name`. Core merges all collections from all adapters into
103
+ * `VexConfig.mediaCollections` — separate from user-defined `collections`.
104
+ */
105
+ mediaCollections: MediaCollectionConfig[];
106
+ admin: {
107
+ /**
108
+ * When `true`, delete operations set `deleted: true` on the media document
109
+ * instead of physically removing the file. The file remains in storage until
110
+ * a scheduled cleanup job purges it.
111
+ *
112
+ * @default false
113
+ */
114
+ softDelete: boolean;
115
+ };
116
+ /**
117
+ * Creates a media document in Convex after the file is uploaded.
118
+ * All adapters must use this exact signature.
119
+ */
120
+ createMediaDocument<TDataModel extends GenericDataModel = GenericDataModel>(ctx: GenericMutationCtx<TDataModel>, args: {
121
+ collectionSlug: string;
122
+ storageId: string;
123
+ filename: string;
124
+ mimeType: string;
125
+ size: number;
126
+ alt?: string;
127
+ adapterFields?: Record<string, unknown>;
128
+ }): Promise<string>;
129
+ /**
130
+ * Deletes a media document and its file from storage.
131
+ * All adapters must use this exact signature.
132
+ */
133
+ deleteMedia<TDataModel extends GenericDataModel = GenericDataModel>(ctx: GenericMutationCtx<TDataModel>, args: {
134
+ collectionSlug: string;
135
+ mediaId: string;
136
+ softDelete?: boolean;
137
+ }): Promise<boolean>;
138
+ /**
139
+ * Returns a URL for a media file.
140
+ * All adapters must use this exact signature.
141
+ */
142
+ getUrl<TDataModel extends GenericDataModel = GenericDataModel>(ctx: GenericQueryCtx<TDataModel>, args: {
143
+ collectionSlug: string;
144
+ mediaId: string;
145
+ }): Promise<GetUrlReturn>;
146
+ /**
147
+ * Uploads a file to the storage backend and returns the storage ID.
148
+ *
149
+ * This is a pure JS function that can be called from any framework
150
+ * (React, Next.js, Svelte, etc.) or even directly in the browser.
151
+ *
152
+ * @param file - The file to upload
153
+ * @param uploadUrl - The presigned URL from generateUploadUrl
154
+ * @returns Promise resolving to { storageId, url, ... } with adapter-specific fields
155
+ *
156
+ * @example
157
+ * ```ts
158
+ * // React component
159
+ * const { storageId } = await adapter.uploadFile(file, uploadUrl);
160
+ * await createMediaDocument({ storageId, ... });
161
+ * ```
162
+ */
163
+ uploadFile(file: any, uploadUrl: string): Promise<{
164
+ storageId: string;
165
+ url?: string;
166
+ [key: string]: unknown;
167
+ }>;
168
+ }
169
+ /**
170
+ * Return type for `generateUploadUrl` — the upload URL and an optional adapter-assigned storage ID.
171
+ */
172
+ export type GenerateUploadUrlReturn = {
173
+ url: string;
174
+ storageId?: string;
175
+ };
176
+ /**
177
+ * Return type for `uploadFile` — the adapter-assigned storage ID, an optional public URL,
178
+ * and any adapter-specific fields (e.g. Cloudinary `public_id`, S3 `key`).
179
+ */
180
+ export type UploadFileReturn = {
181
+ storageId: string;
182
+ url?: string;
183
+ [key: string]: unknown;
184
+ };
185
+ /**
186
+ * Storage adapter interface for the presigned-URL upload protocol.
187
+ *
188
+ * Extends `StorageAdapterBaseInterface` with `generateUploadUrl` — the client
189
+ * requests a short-lived URL from the server, POSTs the file directly to
190
+ * storage, then calls `createMediaDocument` with the returned `storageId`.
191
+ *
192
+ * @see {@link StorageAdapterBaseInterface} for the shared base contract
193
+ * @see {@link StorageAdapterPresignedUrl} for the abstract base class to extend
194
+ */
195
+ export interface StorageAdapterPresignedUrlInterface extends StorageAdapterBaseInterface {
196
+ readonly type: (typeof STORAGE_ADAPTER_PROTOCOLS)["presignedUrl"];
197
+ /**
198
+ * Generates a URL to upload a file to. Returns different shapes per protocol:
199
+ * - presigned-url: `{ url: string }` — POST the file to this URL
200
+ * - direct-upload: `{ url: string; storageId?: string }` — PUT the file to this URL
201
+ * - streaming: `{ url: string; storageId?: string }` — resumable upload session
202
+ */
203
+ generateUploadUrl<TDataModel extends GenericDataModel = GenericDataModel>(ctx: GenericMutationCtx<TDataModel>): Promise<GenerateUploadUrlReturn>;
204
+ /**
205
+ * Uploads a file to the storage backend and returns the storage ID.
206
+ *
207
+ * This is a pure JS function that can be called from any framework
208
+ * (React, Next.js, Svelte, etc.) or even directly in the browser.
209
+ *
210
+ * @param file - The file to upload
211
+ * @param uploadUrl - The presigned URL from generateUploadUrl
212
+ * @returns Promise resolving to { storageId, url, ... } with adapter-specific fields
213
+ *
214
+ * @example
215
+ * ```ts
216
+ * // React component
217
+ * const { storageId } = await adapter.uploadFile(file, uploadUrl);
218
+ * await createMediaDocument({ storageId, ... });
219
+ * ```
220
+ */
221
+ uploadFile(file: any, uploadUrl: string): Promise<UploadFileReturn>;
222
+ }
223
+ /**
224
+ * Base class for storage adapters.
225
+ *
226
+ * All file storage adapters must extend this class to ensure consistent
227
+ * behavior in the admin panel. Adapters override methods to implement
228
+ * adapter-specific logic (e.g., different storage backends).
229
+ *
230
+ * @example
231
+ * ```ts
232
+ * // In file-storage-convex/src/adapter/index.ts
233
+ * import { BaseStorageAdapter } from "@vexcms/core";
234
+ *
235
+ * export class ConvexStorageAdapter extends BaseStorageAdapter {
236
+ * readonly name = "convex";
237
+ *
238
+ * async generateUploadUrl(ctx) {
239
+ * const url = await ctx.storage.generateUploadUrl();
240
+ * return { url };
241
+ * }
242
+ *
243
+ * // Override other methods as needed...
244
+ * }
245
+ * ```
246
+ */
247
+ export declare abstract class StorageAdapterPresignedUrl implements StorageAdapterPresignedUrlInterface {
248
+ /** Protocol name — tells the admin panel what the identifier of this storage adapter is. */
249
+ abstract readonly name: StorageAdapterSlug;
250
+ /** Protocol type — tells the admin panel how to upload files. */
251
+ abstract readonly type: StorageAdapterProtocol;
252
+ abstract mediaCollections: MediaCollectionConfig[];
253
+ abstract admin: {
254
+ softDelete: boolean;
255
+ };
256
+ /**
257
+ * Generates a URL to upload a file to.
258
+ * Override in subclass for adapter-specific implementation.
259
+ */
260
+ abstract generateUploadUrl<TDataModel extends GenericDataModel = GenericDataModel>(ctx: GenericMutationCtx<TDataModel>): Promise<{
261
+ url: string;
262
+ storageId?: string;
263
+ }>;
264
+ /**
265
+ * Creates a media document in Convex after the file is uploaded.
266
+ * Override in subclass for adapter-specific implementation.
267
+ */
268
+ abstract createMediaDocument<TDataModel extends GenericDataModel = GenericDataModel>(ctx: GenericMutationCtx<TDataModel>, args: {
269
+ collectionSlug: string;
270
+ storageId: string;
271
+ filename: string;
272
+ mimeType: string;
273
+ size: number;
274
+ alt?: string;
275
+ adapterFields?: Record<string, unknown>;
276
+ }): Promise<string>;
277
+ /**
278
+ * Deletes a media document and its file from storage.
279
+ * Override in subclass for adapter-specific implementation.
280
+ */
281
+ abstract deleteMedia<TDataModel extends GenericDataModel = GenericDataModel>(ctx: GenericMutationCtx<TDataModel>, args: {
282
+ collectionSlug: string;
283
+ mediaId: string;
284
+ softDelete?: boolean;
285
+ }): Promise<boolean>;
286
+ /**
287
+ * Returns a URL for a media file.
288
+ * Override in subclass for adapter-specific implementation.
289
+ */
290
+ abstract getUrl<TDataModel extends GenericDataModel = GenericDataModel>(ctx: GenericQueryCtx<TDataModel>, args: {
291
+ collectionSlug: string;
292
+ mediaId: string;
293
+ }): Promise<{
294
+ url: string;
295
+ error?: never;
296
+ } | {
297
+ url?: never;
298
+ error: string;
299
+ }>;
300
+ /**
301
+ * Uploads a file to the storage backend and returns the storage ID.
302
+ *
303
+ * This is a pure JS function that can be called from any framework
304
+ * (React, Next.js, Svelte, etc.) or even directly in the browser.
305
+ *
306
+ * @param file - The file to upload
307
+ * @param uploadUrl - The presigned URL from generateUploadUrl
308
+ * @returns Promise resolving to { storageId, url, ... } with adapter-specific fields
309
+ *
310
+ * @example
311
+ * ```ts
312
+ * // React component
313
+ * const { storageId } = await adapter.uploadFile(file, uploadUrl);
314
+ * await createMediaDocument({ storageId, ... });
315
+ * ```
316
+ */
317
+ abstract uploadFile(file: any, uploadUrl: string): Promise<{
318
+ storageId: string;
319
+ url?: string;
320
+ [key: string]: unknown;
321
+ }>;
322
+ }
323
+ /**
324
+ * Union of all supported storage adapter interface types.
325
+ *
326
+ * Currently only presigned-URL adapters are supported. Extend this union
327
+ * as new upload protocols are added.
328
+ *
329
+ * @see {@link StorageAdapterPresignedUrlInterface}
330
+ */
331
+ export type VexStorageAdapter = StorageAdapterPresignedUrlInterface;
332
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/media/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Formats byte count into human-readable file size.
3
+ *
4
+ * Converts raw byte count into appropriate units (B, KB, MB, GB, TB)
5
+ * with sensible precision for each scale.
6
+ *
7
+ * @param bytes - File size in bytes
8
+ * @returns Formatted string with unit (e.g. "248 KB", "1.4 MB")
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * formatBytes(1024) // "1 KB"
13
+ * formatBytes(1536) // "1.5 KB"
14
+ * formatBytes(1048576) // "1 MB"
15
+ * formatBytes(248000) // "242.2 KB"
16
+ * ```
17
+ */
18
+ export declare function formatBytes(bytes: number): string;
19
+ /**
20
+ * Formats MIME type into short display name.
21
+ *
22
+ * Extracts the subtype from a MIME type and normalizes common variants.
23
+ *
24
+ * @param mimeType - Full MIME type (e.g. "image/jpeg")
25
+ * @returns Uppercase short name (e.g. "JPG")
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * formatMimeType("image/jpeg") // "JPG"
30
+ * formatMimeType("image/svg+xml") // "SVG"
31
+ * formatMimeType("application/pdf") // "PDF"
32
+ * ```
33
+ */
34
+ export declare function formatMimeType(mimeType: string): string;
35
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/media/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKvD"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Convex validator for `createMediaDocument` arguments.
3
+ * Every storage adapter must use this in its `createMediaDocument` mutation.
4
+ */
5
+ export declare const createMediaDocumentArgs: import("convex/values").VObject<{
6
+ alt?: string | undefined;
7
+ adapterFields?: Record<string, any> | undefined;
8
+ storageId: string;
9
+ collectionSlug: string;
10
+ fileName: string;
11
+ mimeType: string;
12
+ size: number;
13
+ }, {
14
+ collectionSlug: import("convex/values").VString<string, "required">;
15
+ storageId: import("convex/values").VString<string, "required">;
16
+ fileName: import("convex/values").VString<string, "required">;
17
+ mimeType: import("convex/values").VString<string, "required">;
18
+ size: import("convex/values").VFloat64<number, "required">;
19
+ alt: import("convex/values").VString<string | undefined, "optional">;
20
+ adapterFields: import("convex/values").VRecord<Record<string, any> | undefined, import("convex/values").VString<string, "required">, import("convex/values").VAny<any, "required", string>, "optional", string>;
21
+ }, "required", "storageId" | "collectionSlug" | "fileName" | "mimeType" | "size" | "alt" | "adapterFields" | `adapterFields.${string}`>;
22
+ /**
23
+ * Convex validator for `createMediaDocument` return value.
24
+ * Returns the created media document ID.
25
+ */
26
+ export declare const createMediaDocumentReturn: import("convex/values").VString<string, "required">;
27
+ /**
28
+ * Convex validator for `deleteMedia` arguments.
29
+ * Every storage adapter must use this in its `deleteMedia` mutation.
30
+ */
31
+ export declare const deleteMediaArgs: import("convex/values").VObject<{
32
+ collectionSlug: string;
33
+ mediaId: string;
34
+ }, {
35
+ collectionSlug: import("convex/values").VString<string, "required">;
36
+ mediaId: import("convex/values").VString<string, "required">;
37
+ }, "required", "collectionSlug" | "mediaId">;
38
+ /**
39
+ * Convex validator for `deleteMedia` return value.
40
+ */
41
+ export declare const deleteMediaReturn: import("convex/values").VBoolean<boolean, "required">;
42
+ /**
43
+ * Convex validator for `getUrl` arguments.
44
+ * Every storage adapter must use this in its `getUrl` query.
45
+ */
46
+ export declare const getUrlArgs: import("convex/values").VObject<{
47
+ collectionSlug: string;
48
+ mediaId: string;
49
+ }, {
50
+ collectionSlug: import("convex/values").VString<string, "required">;
51
+ mediaId: import("convex/values").VString<string, "required">;
52
+ }, "required", "collectionSlug" | "mediaId">;
53
+ /**
54
+ * Convex validator for `getUrl` return value.
55
+ */
56
+ export declare const getUrlReturn: import("convex/values").VObject<{
57
+ url: string;
58
+ }, {
59
+ url: import("convex/values").VString<string, "required">;
60
+ }, "required", "url">;
61
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/media/validators.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;uIAQlC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,yBAAyB,qDAAa,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;4CAG1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,uDAAc,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;4CAGrB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;qBAEvB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { VexConfig } from "../config/types";
2
+ /**
3
+ * Generates the full contents of `vex.schema.ts` from a resolved `VexConfig`.
4
+ *
5
+ * Returns `{ update: false, contents }` when there are no collections — the output
6
+ * contains only the auto-generated header and no imports or table declarations.
7
+ * Returns `{ update: true, contents }` when collections are present — the output
8
+ * includes the header, `convex/server` and `convex/values` imports, and one
9
+ * `export const` block per collection.
10
+ *
11
+ * @param props - Input props.
12
+ * @param props.config - The fully resolved Vex configuration.
13
+ * @returns An object with `update` (whether the file should be written to disk) and `contents` (the file string).
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const config = defineConfig({
18
+ * collections: [
19
+ * defineCollection({ slug: "posts", fields: { title: text() } }),
20
+ * ],
21
+ * });
22
+ * const { update, contents } = generateVexSchema({ config });
23
+ * // update → true
24
+ * // contents → '// ⚠️ AUTO-GENERATED BY VEX CMS ...\nimport { defineTable } from "convex/server"\n...'
25
+ * ```
26
+ *
27
+ * @see {@link collectionConfigToVexSchema} for the per-collection string builder
28
+ * @see {@link VexConfig} for the resolved config shape
29
+ */
30
+ export declare function generateVexSchema(props: {
31
+ config: VexConfig;
32
+ }): {
33
+ update: boolean;
34
+ contents: string;
35
+ };
36
+ //# sourceMappingURL=generateVexSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateVexSchema.d.ts","sourceRoot":"","sources":["../../src/schema/generateVexSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAWjD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG;IAC/D,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CA+BA"}
@@ -0,0 +1,3 @@
1
+ export * from "./generateVexSchema";
2
+ export * from "./migrate";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,WAAW,CAAA"}
@@ -0,0 +1,73 @@
1
+ import type { VexConfig } from "../config/types";
2
+ /** A field that needs migration when its schema changes. */
3
+ export interface NeedsMigrationField {
4
+ table: string;
5
+ field: string;
6
+ isOptional: boolean;
7
+ }
8
+ /** Metadata about a field that was removed from the config. */
9
+ export interface RemovedFieldInfo {
10
+ table: string;
11
+ field: string;
12
+ }
13
+ /** Diff result between two schema strings. */
14
+ export interface SchemaDiff {
15
+ needsMigration: NeedsMigrationField[];
16
+ removedFields: RemovedFieldInfo[];
17
+ }
18
+ /** A single field backfill operation produced by `planMigration`. */
19
+ export type MigrationOp = {
20
+ table: string;
21
+ field: string;
22
+ defaultValue: unknown;
23
+ };
24
+ /**
25
+ * Computes a diff between two schema strings, identifying fields that now
26
+ * need migration and fields that were removed. Stub — always returns an
27
+ * empty diff; schema-string diffing is not yet implemented.
28
+ *
29
+ * @param _previous - The prior schema source string. Currently unused;
30
+ * placeholder for the not-yet-implemented diffing logic.
31
+ * @param _next - The new schema source string. Currently unused;
32
+ * placeholder for the not-yet-implemented diffing logic.
33
+ * @returns An empty {@link SchemaDiff} until diffing is implemented.
34
+ */
35
+ export declare function diffSchema(_previous: string, _next: string): SchemaDiff;
36
+ /**
37
+ * Returns a copy of the schema string with the given fields made optional.
38
+ * Stub — currently returns `schema` unchanged; the rewrite is not yet
39
+ * implemented.
40
+ *
41
+ * @param schema - The schema source string to rewrite.
42
+ * @param _fields - The fields that should be made optional. Currently
43
+ * unused; placeholder for the not-yet-implemented rewrite.
44
+ * @returns The schema string, unchanged until this is implemented.
45
+ */
46
+ export declare function makeFieldsOptional(schema: string, _fields: NeedsMigrationField[]): string;
47
+ /**
48
+ * Returns a copy of the schema string with previously removed fields
49
+ * re-added as optional. Stub — currently returns `schema` unchanged; the
50
+ * rewrite is not yet implemented.
51
+ *
52
+ * @param schema - The schema source string to rewrite.
53
+ * @param _removedFields - The fields that were removed from the config and
54
+ * should be re-added as optional. Currently unused; placeholder for the
55
+ * not-yet-implemented rewrite.
56
+ * @returns The schema string, unchanged until this is implemented.
57
+ */
58
+ export declare function addRemovedFieldsAsOptional(schema: string, _removedFields: RemovedFieldInfo[]): string;
59
+ /**
60
+ * Plans backfill operations from a schema diff. Stub — always returns an
61
+ * empty array; migration planning is not yet implemented.
62
+ *
63
+ * @param _props - The schema diff and resolved config to plan backfills
64
+ * from. Currently unused; placeholder for the not-yet-implemented
65
+ * planning logic.
66
+ * @returns An empty list of {@link MigrationOp}s until planning is
67
+ * implemented.
68
+ */
69
+ export declare function planMigration(_props: {
70
+ diff: SchemaDiff;
71
+ config: VexConfig;
72
+ }): MigrationOp[];
73
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/schema/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,+DAA+D;AAC/D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,aAAa,EAAE,gBAAgB,EAAE,CAAC;CACnC;AAED,qEAAqE;AACrE,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAEvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,mBAAmB,EAAE,GAC7B,MAAM,CAER;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,gBAAgB,EAAE,GACjC,MAAM,CAER;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;CACnB,GAAG,WAAW,EAAE,CAEhB"}
@@ -0,0 +1,41 @@
1
+ import type { VexConfig } from "../config/types";
2
+ /**
3
+ * Generates the full contents of `vex.types.ts` from a resolved `VexConfig`.
4
+ *
5
+ * When there are no collections, returns only the auto-generated header.
6
+ * When collections are present, the output contains:
7
+ * - Imports for `Id` (from `@convex/_generated/dataModel`) and `VexDocument` (from `@vexcms/core`)
8
+ * - One `export interface` per collection, extending `VexDocument` with a branded `Id<"slug">` for `_id`
9
+ * - `export type CollectionSlug` — union of all collection slugs
10
+ * - `export type DocumentBySlug` — map of slug to document interface
11
+ * - `declare module '@vexcms/core'` block that augments `GeneratedVexTypes`, narrowing
12
+ * `CollectionSlug` and `DocumentBySlug` inside `@vexcms/core` itself
13
+ *
14
+ * @param props - Input props.
15
+ * @param props.config - The fully resolved Vex configuration.
16
+ * @returns The complete TypeScript source string to write to `vex.types.ts`.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const config = defineConfig({
21
+ * collections: [
22
+ * defineCollection({ slug: "posts", fields: { title: text({ required: true }) } }),
23
+ * ],
24
+ * });
25
+ * const contents = generateVexTypes({ config });
26
+ * // Writes to vex.types.ts:
27
+ * // import type { Id } from "@convex/_generated/dataModel"
28
+ * // import type { VexDocument } from "@vexcms/core"
29
+ * // export interface PostsDocument extends VexDocument { _id: Id<"posts">; title: string }
30
+ * // export type CollectionSlug = "posts"
31
+ * // export type DocumentBySlug = { posts: PostsDocument }
32
+ * // declare module "@vexcms/core" { interface GeneratedVexTypes { ... } }
33
+ * ```
34
+ *
35
+ * @see {@link collectionConfigToInterface} for the per-collection interface builder
36
+ * @see {@link VexConfig} for the resolved config shape
37
+ */
38
+ export declare function generateVexTypes(props: {
39
+ config: VexConfig;
40
+ }): string;
41
+ //# sourceMappingURL=generateVexTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateVexTypes.d.ts","sourceRoot":"","sources":["../../src/types/generateVexTypes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA2CjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,CA8HrE"}