@vexcms/core 0.0.20 → 0.1.0-alpha.3

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,382 @@
1
+ import { VexDocument } from "../api/convex";
2
+ /**
3
+ * Empty interface augmented by the generated `vex.types.ts` file.
4
+ *
5
+ * When `vex generate` has been run, this interface gains two properties:
6
+ * - `CollectionSlug` — the specific union of collection slugs in the project
7
+ * - `DocumentBySlug` — a map of slug → document interface
8
+ *
9
+ * When empty (before generation), all derived types fall back to their widest
10
+ * safe variants (`string`, `Record<string, unknown>`).
11
+ *
12
+ * Do not populate this interface manually. It is populated by the
13
+ * `declare module '@vexcms/core'` block emitted at the bottom of
14
+ * the generated `vex.types.ts` file.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * // After running `vex generate`, this interface is augmented to:
19
+ * interface GeneratedVexTypes {
20
+ * CollectionSlug: "posts" | "authors";
21
+ * DocumentBySlug: { posts: PostsDocument; authors: AuthorsDocument };
22
+ * CollectionsFieldTypeMap: {
23
+ * posts: {
24
+ * text: "title" | "slug" | "body";
25
+ * relationship: "author" | "category";
26
+ * select: "status";
27
+ * date: "publishedAt";
28
+ * };
29
+ * authors: {
30
+ * text: "name" | "email";
31
+ * };
32
+ * };
33
+ * }
34
+ * ```
35
+ */
36
+ export interface GeneratedVexTypes {
37
+ }
38
+ /**
39
+ * Union of all collection slugs registered in this project's VexCMS config.
40
+ *
41
+ * - **Before `vex generate`:** resolves to `string` — any string is accepted.
42
+ * - **After `vex generate`:** resolves to a specific union, e.g. `"posts" | "authors"`.
43
+ *
44
+ * Used by `RelationshipFieldInput.collection` so that invalid slugs are caught
45
+ * at compile time without the user passing explicit generic parameters.
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * // After generation — type is "posts" | "authors" | "tags"
50
+ * import type { CollectionSlug } from "@vexcms/core"
51
+ *
52
+ * relationship({ collection: "nonexistent" }) // ✗ Type error after generation
53
+ * relationship({ collection: "posts" }) // ✓
54
+ * ```
55
+ *
56
+ * @see {@link GeneratedVexTypes} for the augmentation interface
57
+ * @see {@link RelationshipFieldInput} for the primary consumer of this type
58
+ */
59
+ export type CollectionSlug = GeneratedVexTypes extends {
60
+ CollectionSlug: infer S extends string;
61
+ } ? S : string;
62
+ /**
63
+ * Maps each collection slug to its generated document interface.
64
+ *
65
+ * - **Before `vex generate`:** resolves to `Record<string, unknown>`.
66
+ * - **After `vex generate`:** resolves to a typed map, e.g.
67
+ * `{ posts: PostsDocument; authors: AuthorsDocument }`.
68
+ *
69
+ * Used by `useCollectionForm` to type the `document` prop per collection.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * // After generation:
74
+ * import type { DocumentBySlug } from "@vexcms/core"
75
+ * type Post = DocumentBySlug["posts"] // → PostsDocument
76
+ * type Author = DocumentBySlug["authors"] // → AuthorsDocument
77
+ * ```
78
+ *
79
+ * @see {@link GeneratedVexTypes} for the augmentation interface
80
+ */
81
+ export type DocumentBySlug = GeneratedVexTypes extends {
82
+ DocumentBySlug: infer D extends Record<string, unknown>;
83
+ } ? D : Record<string, unknown>;
84
+ /**
85
+ * Custom query/mutation actions per subject slug, as declared in the project's
86
+ * `defineAccess({ customActions })` and emitted by `vex generate`.
87
+ *
88
+ * - **Before `vex generate`:** resolves to `{}` — no slug has declared custom
89
+ * actions, and {@link QueryCallActionFor} falls back to accepting any string.
90
+ * - **After `vex generate`:** e.g.
91
+ * `{ articles: { query: "listFeatured"; mutation: "publish" } }`. A missing
92
+ * list emits `never`, so single-list declarations stay exact.
93
+ */
94
+ export type CustomActionsBySlug = GeneratedVexTypes extends {
95
+ CustomActionsBySlug: infer C extends Record<string, {
96
+ query: string;
97
+ mutation: string;
98
+ }>;
99
+ } ? C : {};
100
+ /**
101
+ * Maps each collection slug to its declared Convex indexes, each as a
102
+ * `readonly` tuple of field names in declaration order (`.index(name,
103
+ * [...])` — search indexes excluded, since `withIndex` never targets
104
+ * those). Field order is exactly what `ConstraintBuilder`
105
+ * (`access/constraintTypes.ts`) narrows against, so this registry is the
106
+ * sole source of truth both the constraint builder and `IndexNameFor`
107
+ * resolve through — no parallel name-union map (supersedes the old
108
+ * `IndexesBySlug`).
109
+ *
110
+ * - **Before `vex generate`:** resolves to
111
+ * `Record<string, Record<string, readonly string[]>>`.
112
+ * - **After `vex generate`:** e.g.
113
+ * `{ pages: { by_author_category: readonly ["authorId", "categoryId"] } }`.
114
+ * A collection with NO indexed fields maps to `{}`, never `never` — see
115
+ * {@link IndexNameFor}.
116
+ */
117
+ export type IndexFieldsBySlug = GeneratedVexTypes extends {
118
+ IndexFieldsBySlug: infer I extends Record<string, Record<string, readonly string[]>>;
119
+ } ? I : Record<string, Record<string, readonly string[]>>;
120
+ /**
121
+ * Index-name union for one slug — the keys of its {@link IndexFieldsBySlug}
122
+ * entry. Widens to `string` pre-generation. An index-less slug's entry is
123
+ * `{}`, and `keyof {}` is `never`, so this still correctly yields `never`
124
+ * for that slug post-generation — the same result the old name-union form
125
+ * gave by emitting `never` directly, reached here through an empty object
126
+ * instead (an empty object stays a well-typed `keyof` target; a bare
127
+ * `never` union would not, if `IndexFieldsFor` ever needed to index into
128
+ * it).
129
+ *
130
+ * @internal
131
+ */
132
+ export type IndexNameFor<S extends string> = S extends keyof IndexFieldsBySlug ? keyof IndexFieldsBySlug[S] : string;
133
+ /**
134
+ * The field tuple for one slug + index name, in declaration order — what
135
+ * `ConstraintBuilder<TFields, TDoc>` (`access/constraintTypes.ts`) is
136
+ * instantiated with.
137
+ *
138
+ * @typeParam S - Collection slug.
139
+ * @typeParam N - Index name declared on `S` (a member of `IndexNameFor<S>`).
140
+ * @see {@link IndexFieldsBySlug}
141
+ */
142
+ export type IndexFieldsFor<S extends keyof IndexFieldsBySlug, N extends keyof IndexFieldsBySlug[S]> = IndexFieldsBySlug[S][N] extends readonly string[] ? IndexFieldsBySlug[S][N] : never;
143
+ /**
144
+ * Union of all media collection slugs registered by storage adapters.
145
+ *
146
+ * - **Before `vex generate`:** resolves to `string` — any string is accepted.
147
+ * - **After `vex generate`:** resolves to a specific union, e.g. `"images" | "videos"`.
148
+ *
149
+ * Used by `upload({ to: ... })` so that invalid media collection slugs are
150
+ * caught at compile time after generation.
151
+ *
152
+ * @see {@link GeneratedVexTypes} for the augmentation interface
153
+ */
154
+ export type MediaCollectionSlug = GeneratedVexTypes extends {
155
+ MediaCollectionSlug: infer S extends string;
156
+ } ? S : string;
157
+ /**
158
+ * Union of all storage adapter names registered in this project's VexCMS config.
159
+ *
160
+ * - **Before `vex generate`:** resolves to `string` — any string is accepted.
161
+ * - **After `vex generate`:** resolves to a specific union, e.g. `"convex"`.
162
+ *
163
+ * Only adapters whose `type` is `"presigned-url"` (i.e. those implementing
164
+ * `StorageAdapterPresignedUrlInterface`) are included. Adapters using other
165
+ * protocols (e.g. `"direct-upload"`, `"streaming"`) are excluded because
166
+ * they require different client-side upload logic.
167
+ *
168
+ * Used by `VexConfig.storage.clientUploads` and `StorageAdapterMap` so that
169
+ * only adapters actually registered in `defineConfig({ storage: { adapters: [...] } })`
170
+ * can be referenced. Invalid adapter names are caught at compile time after
171
+ * generation.
172
+ *
173
+ * @example
174
+ * ```ts
175
+ * // After generation — type is "convex"
176
+ * import type { StorageAdapterSlug } from "@vexcms/core"
177
+ *
178
+ * const registry: StorageAdapterMap = {
179
+ * convex: { uploadFile: convexUploadFile }, // ✓
180
+ * s3: { uploadFile: s3UploadFile }, // ✗ Type error — "s3" not registered
181
+ * fake: { uploadFile: fakeUploadFile }, // ✗ Type error — not a registered adapter
182
+ * };
183
+ * ```
184
+ *
185
+ * @see {@link GeneratedVexTypes} for the augmentation interface
186
+ * @see {@link StorageAdapterPresignedUrlInterface} for the protocol requirement
187
+ * @see {@link VexConfig} for the `storage.clientUploads` consumer
188
+ */
189
+ export type StorageAdapterSlug = GeneratedVexTypes extends {
190
+ StorageAdapterSlug: infer S extends string;
191
+ } ? S : string;
192
+ /**
193
+ * Per-collection field-type map. Augmented by `vex generate` from the user's
194
+ * collection configs. Powers all per-field-type helper types (`RelationshipKeysOf`,
195
+ * `TextKeysOf`, `SortableKeysOf`, etc.).
196
+ *
197
+ * Keyed: collection slug → field type → union of field keys with that type.
198
+ *
199
+ * Empty by default; the user's `vex.types.ts` augments it via `declare module
200
+ * "@vexcms/core"`. Helper types in `packages/core/src/api/types.ts` resolve to
201
+ * `never` until augmentation runs, which is the intended behaviour for fresh
202
+ * projects (no collections registered yet).
203
+ *
204
+ * @example Generated content after running vex generate
205
+ * ```ts
206
+ * declare module "@vexcms/core" {
207
+ * interface GeneratedVexTypes {
208
+ * CollectionSlug: "posts" | "authors";
209
+ * DocumentBySlug: { posts: PostsDocument; authors: AuthorsDocument };
210
+ * CollectionsFieldTypeMap: {
211
+ * posts: {
212
+ * text: "title" | "slug" | "body";
213
+ * relationship: "author" | "category";
214
+ * select: "status";
215
+ * date: "publishedAt";
216
+ * };
217
+ * authors: {
218
+ * text: "name" | "email";
219
+ * };
220
+ * };
221
+ * }
222
+ * }
223
+ * ```
224
+ */
225
+ export type CollectionsFieldTypeMap = GeneratedVexTypes extends {
226
+ CollectionsFieldTypeMap: infer M extends Record<string, Record<string, string>>;
227
+ } ? M : Record<string, Record<string, never>>;
228
+ /**
229
+ * Union of all global slugs registered in this project's VexCMS config.
230
+ *
231
+ * - **Before `vex generate`:** resolves to `string`.
232
+ * - **After `vex generate`:** resolves to e.g. `"siteSettings" | "navigationConfig"`.
233
+ *
234
+ * @see {@link GeneratedVexTypes} for the augmentation interface
235
+ */
236
+ export type GlobalSlug = GeneratedVexTypes extends {
237
+ GlobalSlug: infer S extends string;
238
+ } ? S : string;
239
+ /**
240
+ * Maps each global slug to its generated flat document interface.
241
+ *
242
+ * Each value type extends `VexDocumentGlobal<TSlug>` (which extends `VexDocument`)
243
+ * and adds user fields at root level — identical ergonomics to `DocumentBySlug`.
244
+ *
245
+ * - **Before `vex generate`:** resolves to `Record<string, unknown>`.
246
+ * - **After:** e.g. `{ siteSettings: SiteSettingsGlobal; nav: NavigationConfigGlobal }`.
247
+ *
248
+ * @see {@link GeneratedVexTypes} for the augmentation interface
249
+ */
250
+ export type GlobalDocumentBySlug = GeneratedVexTypes extends {
251
+ GlobalDocumentBySlug: infer D extends Record<string, unknown>;
252
+ } ? D : Record<string, unknown>;
253
+ /**
254
+ * Per-global field-type map. Augmented by `vex generate`. Powers
255
+ * `GlobalRelationshipKeysOf<TGlobalSlug>` for populate type narrowing.
256
+ *
257
+ * Structure: `{ globalSlug: { fieldType: "fieldKey1" | "fieldKey2" } }`.
258
+ */
259
+ export type GlobalsFieldTypeMap = GeneratedVexTypes extends {
260
+ GlobalsFieldTypeMap: infer M extends Record<string, Record<string, string>>;
261
+ } ? M : Record<string, Record<string, never>>;
262
+ /**
263
+ * Flat global document returned by `globals.get` and `globals.find`.
264
+ *
265
+ * Extends `VexDocument` (inheriting `_id: string` and `_creationTime: number`)
266
+ * and adds `_slug: TSlug` as the discriminator field. The generated per-global
267
+ * interfaces (e.g. `SiteSettingsGlobal`) extend this type and add user fields.
268
+ *
269
+ * When called with a typed `TSlug`, `globals.get` returns
270
+ * `GlobalDocumentBySlug[TSlug]` (the concrete generated interface), not this
271
+ * base type. This type is the fallback for unnarrowed contexts (e.g. the return
272
+ * of `findGlobals`).
273
+ *
274
+ * @typeParam TSlug - The global slug. Defaults to `GlobalSlug` (all slugs).
275
+ *
276
+ * @example
277
+ * ```ts
278
+ * const doc: VexDocumentGlobal<"siteSettings"> = ...;
279
+ * doc._slug; // "siteSettings"
280
+ * doc._id; // string (from VexDocument)
281
+ * doc._creationTime; // number (from VexDocument)
282
+ * // user fields are accessible via the index signature: doc["siteName"]
283
+ * ```
284
+ *
285
+ * @see {@link VexDocument} for the base type
286
+ */
287
+ export interface VexDocumentGlobal<TSlug extends GlobalSlug = GlobalSlug> extends VexDocument {
288
+ /**
289
+ * The global slug — uniquely identifies which global this document is.
290
+ * Renamed from `slug` (the DB column name) at the API layer to avoid
291
+ * collisions with user-defined field keys.
292
+ */
293
+ _slug: TSlug;
294
+ }
295
+ /**
296
+ * Relationship field keys on `TGlobalSlug`. Reads `GlobalsFieldTypeMap`.
297
+ * Used to narrow the `populate` arg of `globals.get` / `globals.find`.
298
+ *
299
+ * @typeParam TGlobalSlug - The global slug.
300
+ */
301
+ export type GlobalRelationshipKeysOf<TGlobalSlug extends GlobalSlug> = TGlobalSlug extends keyof GlobalsFieldTypeMap ? "relationship" extends keyof GlobalsFieldTypeMap[TGlobalSlug] ? GlobalsFieldTypeMap[TGlobalSlug]["relationship"] & string : never : never;
302
+ /**
303
+ * Populate options for a global — keys restricted to relationship fields via
304
+ * `GlobalRelationshipKeysOf<TGlobalSlug>`. Mirrors `PopulateShape` for
305
+ * collections; nested populate resolves to collection populate shapes since
306
+ * globals relate to collections, not to other globals.
307
+ *
308
+ * @typeParam TGlobalSlug - The global slug.
309
+ */
310
+ export type GlobalPopulateShape<TGlobalSlug extends GlobalSlug = GlobalSlug> = {
311
+ [K in GlobalRelationshipKeysOf<TGlobalSlug>]?: true | {
312
+ populate: Record<string, unknown>;
313
+ };
314
+ };
315
+ /**
316
+ * Return type of `globals.get` when `populate` is provided. Maps over
317
+ * `GlobalDocumentBySlug[TGlobalSlug]` replacing each populated relationship
318
+ * field's `string` type with `Doc<TargetSlug>[]`.
319
+ *
320
+ * Mirrors `Populated<TCollectionSlug, TPopulate>` from the collection API;
321
+ * operates on `GlobalDocumentBySlug` instead of `DocumentBySlug`.
322
+ *
323
+ * @typeParam TGlobalSlug - The global slug.
324
+ * @typeParam TPopulate - The populate options object.
325
+ */
326
+ export type GlobalPopulated<TGlobalSlug extends GlobalSlug, TPopulate extends GlobalPopulateShape<TGlobalSlug>> = TGlobalSlug extends keyof GlobalDocumentBySlug ? {
327
+ [K in keyof GlobalDocumentBySlug[TGlobalSlug]]: K extends keyof TPopulate ? K extends string ? GlobalDocumentBySlug[TGlobalSlug][K] extends string | undefined ? TPopulate[K] extends {
328
+ populate: infer _NestedPopulate;
329
+ } ? Record<string, unknown>[] : Record<string, unknown>[] : GlobalDocumentBySlug[TGlobalSlug][K] : GlobalDocumentBySlug[TGlobalSlug][K] : GlobalDocumentBySlug[TGlobalSlug][K];
330
+ } : never;
331
+ /**
332
+ * The collection slugs `defineAccess` was configured with, as emitted by
333
+ * `vex generate` from `vex.config.ts`.
334
+ *
335
+ * - **Before `vex generate`:** both resolve to `never`.
336
+ * - **After:** e.g. `{ user: "user"; organization: "organization" }`.
337
+ *
338
+ * This exists so core can resolve the project's user and organization DOCUMENT types
339
+ * without a project passing them in. It is what lets `AccessCheck<S>` take one type
340
+ * parameter instead of three, so a project's composable access checks need no local
341
+ * type aliases at all.
342
+ *
343
+ * @see {@link GeneratedVexTypes} for the augmentation interface
344
+ */
345
+ export type AuthSlugs = GeneratedVexTypes extends {
346
+ AuthSlugs: infer A extends {
347
+ organization: string;
348
+ user: string;
349
+ };
350
+ } ? A : {
351
+ organization: never;
352
+ user: never;
353
+ };
354
+ /**
355
+ * Document type for slug `S`, or `TFallback` when `S` is not a registered collection.
356
+ *
357
+ * `S` is a naked type parameter on purpose: TypeScript narrows a conditional's checked
358
+ * type only when it is a bare parameter, so writing the lookup inline as
359
+ * `AuthSlugs["user"] extends keyof DocumentBySlug ? DocumentBySlug[AuthSlugs["user"]]`
360
+ * fails with "Type 'never' cannot be used as an index type".
361
+ *
362
+ * @typeParam S - Collection slug to resolve.
363
+ * @typeParam TFallback - Resolved type when `S` is not registered.
364
+ */
365
+ type DocumentForSlug<S, TFallback> = S extends keyof DocumentBySlug ? DocumentBySlug[S] : TFallback;
366
+ /**
367
+ * The project's user document type, resolved through {@link AuthSlugs}.
368
+ *
369
+ * Falls back to the wide `Record<string, unknown>` when the registry is unaugmented or
370
+ * no user collection is configured — the same widening every other pre-generation
371
+ * lookup uses, so a check stays writable before `vex generate` has run.
372
+ */
373
+ export type AuthUserDocument = [AuthSlugs["user"]] extends [never] ? Record<string, unknown> : DocumentForSlug<AuthSlugs["user"], Record<string, unknown>>;
374
+ /**
375
+ * The project's organization document type, resolved through {@link AuthSlugs}.
376
+ *
377
+ * Resolves to `never` when no organization collection is configured, which is how
378
+ * `ConstraintsCallbackProps` already signals "no `organization` key on the props".
379
+ */
380
+ export type AuthOrgDocument = [AuthSlugs["organization"]] extends [never] ? never : DocumentForSlug<AuthSlugs["organization"], never>;
381
+ export {};
382
+ //# sourceMappingURL=generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/types/generated.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from "./generateVexTypes";
2
+ export * from "./generated";
3
+ export * from "../auth/types";
4
+ export * from "../collections/types";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAE5B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { icons } from "lucide-react";
2
+ /**
3
+ * Valid Lucide icon name string (e.g. `"FileText"`, `"Users"`, `"Settings"`).
4
+ *
5
+ * Derived from the `icons` map exported by `lucide-react` — the same map the
6
+ * `Icon` component in `@vexcms/react` indexes at render time. This is
7
+ * deliberately narrower than the set of names `lucide-react` exports as
8
+ * components: alias exports (`AlertCircle` → `CircleAlert`), the `*Icon`
9
+ * suffixed duplicates (`UsersIcon`), and non-icon exports (`createLucideIcon`,
10
+ * `icons`, `Icon`) are absent from the map and would render nothing.
11
+ *
12
+ * Use the canonical PascalCase name as listed on the Lucide site.
13
+ * @see https://lucide.dev/icons
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const icon: LucideIconName = "CircleAlert"; // ✅ canonical, renders
18
+ * const alias: LucideIconName = "AlertCircle"; // ❌ alias export, not in `icons`
19
+ * const bad: LucideIconName = "NotAnIcon"; // ❌ not an icon at all
20
+ * ```
21
+ *
22
+ * @see the `Icon` component from `@vexcms/react` that renders a `LucideIconName`
23
+ */
24
+ export type LucideIconName = keyof typeof icons;
25
+ /**
26
+ * Converts a string to title case, handling camelCase, snake_case, and kebab-case inputs.
27
+ * Minor words (e.g. "a", "and", "the") are lowercased unless they appear at the start.
28
+ *
29
+ * @param input - The string to convert.
30
+ * @returns The title-cased string.
31
+ */
32
+ export declare function toTitleCase(input: string): string;
33
+ /**
34
+ * Returns the plural form of an English word using common suffix rules.
35
+ *
36
+ * Handles the most common cases: words ending in s/x/z/ch/sh, consonant+y,
37
+ * and f/fe. Falls back to appending "s" for everything else.
38
+ *
39
+ * @param word - The singular word to pluralise (e.g. `"Post"`, `"Category"`)
40
+ * @returns The pluralised word (e.g. `"Posts"`, `"Categories"`)
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * plural("Post") // "Posts"
45
+ * plural("Category") // "Categories"
46
+ * plural("Leaf") // "Leaves"
47
+ * ```
48
+ */
49
+ export declare function plural(word: string): string;
50
+ /**
51
+ * Ensures a string starts with a `/`, prepending one if it is absent.
52
+ *
53
+ * @param text - The path string to normalise.
54
+ * @returns The path with a guaranteed leading slash (e.g. `"admin"` → `"/admin"`).
55
+ */
56
+ export declare function addLeadingSlash(text: string): string;
57
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,KAAK,CAAC;AAwBhD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAcjD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAW3C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKpD"}
package/package.json CHANGED
@@ -1,44 +1,87 @@
1
1
  {
2
2
  "name": "@vexcms/core",
3
- "version": "0.0.20",
3
+ "version": "0.1.0-alpha.3",
4
+ "description": "Convex-native headless CMS core: field factories, schema generation, and typed collection APIs",
5
+ "keywords": [
6
+ "cms",
7
+ "headless-cms",
8
+ "convex",
9
+ "typescript"
10
+ ],
11
+ "license": "Apache-2.0",
12
+ "author": "Isaiah Anyimi",
13
+ "homepage": "https://docs.vexcms.dev",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/ianyimi/vex.git",
17
+ "directory": "packages/core"
18
+ },
19
+ "sideEffects": false,
20
+ "files": [
21
+ "dist"
22
+ ],
4
23
  "type": "module",
24
+ "main": "./dist/index.js",
25
+ "types": "./dist/index.d.ts",
5
26
  "exports": {
6
27
  ".": {
28
+ "source": "./src/index.ts",
7
29
  "types": "./dist/index.d.ts",
8
30
  "import": "./dist/index.js"
31
+ },
32
+ "./server": {
33
+ "source": "./src/api/server.ts",
34
+ "types": "./dist/api/server.d.ts",
35
+ "import": "./dist/api/server.js"
36
+ },
37
+ "./client": {
38
+ "source": "./src/api/client.ts",
39
+ "types": "./dist/api/client.d.ts",
40
+ "import": "./dist/api/client.js"
41
+ },
42
+ "./convex": {
43
+ "source": "./src/api/server.ts",
44
+ "types": "./dist/api/server.d.ts",
45
+ "import": "./dist/api/server.js"
9
46
  }
10
47
  },
11
- "main": "./dist/index.js",
12
- "types": "./dist/index.d.ts",
13
- "files": [
14
- "dist"
15
- ],
16
- "dependencies": {
17
- "zod": "^3.24.0"
48
+ "publishConfig": {
49
+ "access": "public",
50
+ "tag": "alpha"
18
51
  },
19
- "peerDependencies": {
20
- "@tanstack/react-table": "8.21.3",
21
- "convex": "^1.31.5",
22
- "react": ">=18.0.0"
52
+ "dependencies": {
53
+ "nanoid": "5.1.16",
54
+ "zod": "4.4.3"
23
55
  },
24
56
  "devDependencies": {
57
+ "@convex-dev/react-query": "0.1.0",
58
+ "@edge-runtime/vm": "5.0.0",
59
+ "@tanstack/react-query": "5.101.2",
25
60
  "@tanstack/react-table": "8.21.3",
26
- "@types/node": "^20.19.33",
27
- "@types/react": "^19.2.14",
28
- "@vitest/coverage-v8": "^4.0.18",
29
- "convex": "^1.31.5",
30
- "react": "^19.2.4",
31
- "tsup": "^8.5.1",
32
- "typescript": "^5.9.3",
33
- "vitest": "^4.0.0",
61
+ "@types/node": "20.19.43",
62
+ "@types/react": "19.2.17",
63
+ "@vitest/coverage-v8": "4.1.10",
64
+ "convex": "1.44.0",
65
+ "convex-helpers": "0.1.120",
66
+ "convex-test": "0.0.38",
67
+ "lucide-react": "0.577.0",
68
+ "react": "19.2.7",
69
+ "tsup": "8.5.1",
70
+ "typescript": "6.0.3",
71
+ "vitest": "4.1.10",
34
72
  "@vexcms/tsconfig": "0.0.0"
35
73
  },
36
- "publishConfig": {
37
- "access": "public"
74
+ "peerDependencies": {
75
+ "@convex-dev/react-query": ">=0.1.0 <0.2.0",
76
+ "@tanstack/react-query": ">=5.0.0 <6",
77
+ "@tanstack/react-table": ">=8.0.0 <9",
78
+ "convex": ">=1.44.0 <2",
79
+ "lucide-react": ">=0.577.0 <1",
80
+ "react": ">=18.0.0"
38
81
  },
39
82
  "scripts": {
40
- "build": "tsup",
41
- "dev": "tsup --watch",
83
+ "build": "tsup && tsc -p tsconfig.build.json --emitDeclarationOnly",
84
+ "dev": "node --watch-path src watch.mjs",
42
85
  "clean": "rm -rf dist",
43
86
  "typecheck": "tsc --noEmit -p tsconfig.check.json",
44
87
  "test": "vitest run",