convex-cms 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 (379) hide show
  1. package/dist/cli/commands/admin.d.ts +16 -0
  2. package/dist/cli/commands/admin.d.ts.map +1 -0
  3. package/dist/cli/commands/admin.js +88 -0
  4. package/dist/cli/commands/admin.js.map +1 -0
  5. package/dist/cli/index.d.ts +3 -0
  6. package/dist/cli/index.d.ts.map +1 -0
  7. package/dist/cli/index.js +18 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/cli/utils/detectConvexUrl.d.ts +13 -0
  10. package/dist/cli/utils/detectConvexUrl.d.ts.map +1 -0
  11. package/dist/cli/utils/detectConvexUrl.js +48 -0
  12. package/dist/cli/utils/detectConvexUrl.js.map +1 -0
  13. package/dist/cli/utils/openBrowser.d.ts +7 -0
  14. package/dist/cli/utils/openBrowser.d.ts.map +1 -0
  15. package/dist/cli/utils/openBrowser.js +17 -0
  16. package/dist/cli/utils/openBrowser.js.map +1 -0
  17. package/dist/client/admin-config.d.ts +126 -0
  18. package/dist/client/admin-config.d.ts.map +1 -0
  19. package/dist/client/admin-config.js +117 -0
  20. package/dist/client/admin-config.js.map +1 -0
  21. package/dist/client/adminApi.d.ts +2273 -0
  22. package/dist/client/adminApi.d.ts.map +1 -0
  23. package/dist/client/adminApi.js +716 -0
  24. package/dist/client/adminApi.js.map +1 -0
  25. package/dist/client/agentTools.d.ts +933 -0
  26. package/dist/client/agentTools.d.ts.map +1 -0
  27. package/dist/client/agentTools.js +1004 -0
  28. package/dist/client/agentTools.js.map +1 -0
  29. package/dist/client/argTypes.d.ts +212 -0
  30. package/dist/client/argTypes.d.ts.map +1 -0
  31. package/dist/client/argTypes.js +5 -0
  32. package/dist/client/argTypes.js.map +1 -0
  33. package/dist/client/field-types.d.ts +55 -0
  34. package/dist/client/field-types.d.ts.map +1 -0
  35. package/dist/client/field-types.js +152 -0
  36. package/dist/client/field-types.js.map +1 -0
  37. package/dist/client/index.d.ts +189 -0
  38. package/dist/client/index.d.ts.map +1 -0
  39. package/dist/client/index.js +668 -0
  40. package/dist/client/index.js.map +1 -0
  41. package/dist/client/queryBuilder.d.ts +765 -0
  42. package/dist/client/queryBuilder.d.ts.map +1 -0
  43. package/dist/client/queryBuilder.js +970 -0
  44. package/dist/client/queryBuilder.js.map +1 -0
  45. package/dist/client/schema/codegen.d.ts +128 -0
  46. package/dist/client/schema/codegen.d.ts.map +1 -0
  47. package/dist/client/schema/codegen.js +318 -0
  48. package/dist/client/schema/codegen.js.map +1 -0
  49. package/dist/client/schema/defineContentType.d.ts +221 -0
  50. package/dist/client/schema/defineContentType.d.ts.map +1 -0
  51. package/dist/client/schema/defineContentType.js +380 -0
  52. package/dist/client/schema/defineContentType.js.map +1 -0
  53. package/dist/client/schema/index.d.ts +85 -0
  54. package/dist/client/schema/index.d.ts.map +1 -0
  55. package/dist/client/schema/index.js +92 -0
  56. package/dist/client/schema/index.js.map +1 -0
  57. package/dist/client/schema/schemaDrift.d.ts +199 -0
  58. package/dist/client/schema/schemaDrift.d.ts.map +1 -0
  59. package/dist/client/schema/schemaDrift.js +340 -0
  60. package/dist/client/schema/schemaDrift.js.map +1 -0
  61. package/dist/client/schema/typedClient.d.ts +401 -0
  62. package/dist/client/schema/typedClient.d.ts.map +1 -0
  63. package/dist/client/schema/typedClient.js +269 -0
  64. package/dist/client/schema/typedClient.js.map +1 -0
  65. package/dist/client/schema/types.d.ts +477 -0
  66. package/dist/client/schema/types.d.ts.map +1 -0
  67. package/dist/client/schema/types.js +39 -0
  68. package/dist/client/schema/types.js.map +1 -0
  69. package/dist/client/types.d.ts +449 -0
  70. package/dist/client/types.d.ts.map +1 -0
  71. package/dist/client/types.js +149 -0
  72. package/dist/client/types.js.map +1 -0
  73. package/dist/client/workflows.d.ts +51 -0
  74. package/dist/client/workflows.d.ts.map +1 -0
  75. package/dist/client/workflows.js +103 -0
  76. package/dist/client/workflows.js.map +1 -0
  77. package/dist/client/wrapper.d.ts +2198 -0
  78. package/dist/client/wrapper.d.ts.map +1 -0
  79. package/dist/client/wrapper.js +2651 -0
  80. package/dist/client/wrapper.js.map +1 -0
  81. package/dist/component/_generated/api.d.ts +124 -0
  82. package/dist/component/_generated/api.d.ts.map +1 -0
  83. package/dist/component/_generated/api.js +31 -0
  84. package/dist/component/_generated/api.js.map +1 -0
  85. package/dist/component/_generated/component.d.ts +4321 -0
  86. package/dist/component/_generated/component.d.ts.map +1 -0
  87. package/dist/component/_generated/component.js +11 -0
  88. package/dist/component/_generated/component.js.map +1 -0
  89. package/dist/component/_generated/dataModel.d.ts +46 -0
  90. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  91. package/dist/component/_generated/dataModel.js +11 -0
  92. package/dist/component/_generated/dataModel.js.map +1 -0
  93. package/dist/component/_generated/server.d.ts +121 -0
  94. package/dist/component/_generated/server.d.ts.map +1 -0
  95. package/dist/component/_generated/server.js +78 -0
  96. package/dist/component/_generated/server.js.map +1 -0
  97. package/dist/component/auditLog.d.ts +410 -0
  98. package/dist/component/auditLog.d.ts.map +1 -0
  99. package/dist/component/auditLog.js +607 -0
  100. package/dist/component/auditLog.js.map +1 -0
  101. package/dist/component/authorization.d.ts +323 -0
  102. package/dist/component/authorization.d.ts.map +1 -0
  103. package/dist/component/authorization.js +464 -0
  104. package/dist/component/authorization.js.map +1 -0
  105. package/dist/component/authorizationHooks.d.ts +184 -0
  106. package/dist/component/authorizationHooks.d.ts.map +1 -0
  107. package/dist/component/authorizationHooks.js +521 -0
  108. package/dist/component/authorizationHooks.js.map +1 -0
  109. package/dist/component/bulkOperations.d.ts +200 -0
  110. package/dist/component/bulkOperations.d.ts.map +1 -0
  111. package/dist/component/bulkOperations.js +568 -0
  112. package/dist/component/bulkOperations.js.map +1 -0
  113. package/dist/component/contentEntries.d.ts +719 -0
  114. package/dist/component/contentEntries.d.ts.map +1 -0
  115. package/dist/component/contentEntries.js +1617 -0
  116. package/dist/component/contentEntries.js.map +1 -0
  117. package/dist/component/contentEntryMutations.d.ts +505 -0
  118. package/dist/component/contentEntryMutations.d.ts.map +1 -0
  119. package/dist/component/contentEntryMutations.js +1009 -0
  120. package/dist/component/contentEntryMutations.js.map +1 -0
  121. package/dist/component/contentEntryValidation.d.ts +115 -0
  122. package/dist/component/contentEntryValidation.d.ts.map +1 -0
  123. package/dist/component/contentEntryValidation.js +546 -0
  124. package/dist/component/contentEntryValidation.js.map +1 -0
  125. package/dist/component/contentLock.d.ts +328 -0
  126. package/dist/component/contentLock.d.ts.map +1 -0
  127. package/dist/component/contentLock.js +471 -0
  128. package/dist/component/contentLock.js.map +1 -0
  129. package/dist/component/contentTypeMigration.d.ts +411 -0
  130. package/dist/component/contentTypeMigration.d.ts.map +1 -0
  131. package/dist/component/contentTypeMigration.js +805 -0
  132. package/dist/component/contentTypeMigration.js.map +1 -0
  133. package/dist/component/contentTypeMutations.d.ts +975 -0
  134. package/dist/component/contentTypeMutations.d.ts.map +1 -0
  135. package/dist/component/contentTypeMutations.js +768 -0
  136. package/dist/component/contentTypeMutations.js.map +1 -0
  137. package/dist/component/contentTypes.d.ts +538 -0
  138. package/dist/component/contentTypes.d.ts.map +1 -0
  139. package/dist/component/contentTypes.js +304 -0
  140. package/dist/component/contentTypes.js.map +1 -0
  141. package/dist/component/convex.config.d.ts +42 -0
  142. package/dist/component/convex.config.d.ts.map +1 -0
  143. package/dist/component/convex.config.js +43 -0
  144. package/dist/component/convex.config.js.map +1 -0
  145. package/dist/component/documentTypes.d.ts +186 -0
  146. package/dist/component/documentTypes.d.ts.map +1 -0
  147. package/dist/component/documentTypes.js +23 -0
  148. package/dist/component/documentTypes.js.map +1 -0
  149. package/dist/component/eventEmitter.d.ts +281 -0
  150. package/dist/component/eventEmitter.d.ts.map +1 -0
  151. package/dist/component/eventEmitter.js +300 -0
  152. package/dist/component/eventEmitter.js.map +1 -0
  153. package/dist/component/exportImport.d.ts +1120 -0
  154. package/dist/component/exportImport.d.ts.map +1 -0
  155. package/dist/component/exportImport.js +931 -0
  156. package/dist/component/exportImport.js.map +1 -0
  157. package/dist/component/index.d.ts +28 -0
  158. package/dist/component/index.d.ts.map +1 -0
  159. package/dist/component/index.js +142 -0
  160. package/dist/component/index.js.map +1 -0
  161. package/dist/component/lib/deepReferenceResolver.d.ts +252 -0
  162. package/dist/component/lib/deepReferenceResolver.d.ts.map +1 -0
  163. package/dist/component/lib/deepReferenceResolver.js +601 -0
  164. package/dist/component/lib/deepReferenceResolver.js.map +1 -0
  165. package/dist/component/lib/errors.d.ts +306 -0
  166. package/dist/component/lib/errors.d.ts.map +1 -0
  167. package/dist/component/lib/errors.js +407 -0
  168. package/dist/component/lib/errors.js.map +1 -0
  169. package/dist/component/lib/index.d.ts +10 -0
  170. package/dist/component/lib/index.d.ts.map +1 -0
  171. package/dist/component/lib/index.js +33 -0
  172. package/dist/component/lib/index.js.map +1 -0
  173. package/dist/component/lib/mediaReferenceResolver.d.ts +217 -0
  174. package/dist/component/lib/mediaReferenceResolver.d.ts.map +1 -0
  175. package/dist/component/lib/mediaReferenceResolver.js +326 -0
  176. package/dist/component/lib/mediaReferenceResolver.js.map +1 -0
  177. package/dist/component/lib/metadataExtractor.d.ts +245 -0
  178. package/dist/component/lib/metadataExtractor.d.ts.map +1 -0
  179. package/dist/component/lib/metadataExtractor.js +548 -0
  180. package/dist/component/lib/metadataExtractor.js.map +1 -0
  181. package/dist/component/lib/mutationAuth.d.ts +95 -0
  182. package/dist/component/lib/mutationAuth.d.ts.map +1 -0
  183. package/dist/component/lib/mutationAuth.js +146 -0
  184. package/dist/component/lib/mutationAuth.js.map +1 -0
  185. package/dist/component/lib/queries.d.ts +17 -0
  186. package/dist/component/lib/queries.d.ts.map +1 -0
  187. package/dist/component/lib/queries.js +49 -0
  188. package/dist/component/lib/queries.js.map +1 -0
  189. package/dist/component/lib/ragContentChunker.d.ts +423 -0
  190. package/dist/component/lib/ragContentChunker.d.ts.map +1 -0
  191. package/dist/component/lib/ragContentChunker.js +897 -0
  192. package/dist/component/lib/ragContentChunker.js.map +1 -0
  193. package/dist/component/lib/referenceResolver.d.ts +175 -0
  194. package/dist/component/lib/referenceResolver.d.ts.map +1 -0
  195. package/dist/component/lib/referenceResolver.js +293 -0
  196. package/dist/component/lib/referenceResolver.js.map +1 -0
  197. package/dist/component/lib/slugGenerator.d.ts +71 -0
  198. package/dist/component/lib/slugGenerator.d.ts.map +1 -0
  199. package/dist/component/lib/slugGenerator.js +207 -0
  200. package/dist/component/lib/slugGenerator.js.map +1 -0
  201. package/dist/component/lib/slugUniqueness.d.ts +131 -0
  202. package/dist/component/lib/slugUniqueness.d.ts.map +1 -0
  203. package/dist/component/lib/slugUniqueness.js +229 -0
  204. package/dist/component/lib/slugUniqueness.js.map +1 -0
  205. package/dist/component/lib/softDelete.d.ts +18 -0
  206. package/dist/component/lib/softDelete.d.ts.map +1 -0
  207. package/dist/component/lib/softDelete.js +29 -0
  208. package/dist/component/lib/softDelete.js.map +1 -0
  209. package/dist/component/localeFallbackChain.d.ts +410 -0
  210. package/dist/component/localeFallbackChain.d.ts.map +1 -0
  211. package/dist/component/localeFallbackChain.js +467 -0
  212. package/dist/component/localeFallbackChain.js.map +1 -0
  213. package/dist/component/localeFields.d.ts +508 -0
  214. package/dist/component/localeFields.d.ts.map +1 -0
  215. package/dist/component/localeFields.js +592 -0
  216. package/dist/component/localeFields.js.map +1 -0
  217. package/dist/component/mediaAssetMutations.d.ts +235 -0
  218. package/dist/component/mediaAssetMutations.d.ts.map +1 -0
  219. package/dist/component/mediaAssetMutations.js +558 -0
  220. package/dist/component/mediaAssetMutations.js.map +1 -0
  221. package/dist/component/mediaAssets.d.ts +168 -0
  222. package/dist/component/mediaAssets.d.ts.map +1 -0
  223. package/dist/component/mediaAssets.js +618 -0
  224. package/dist/component/mediaAssets.js.map +1 -0
  225. package/dist/component/mediaFolderMutations.d.ts +642 -0
  226. package/dist/component/mediaFolderMutations.d.ts.map +1 -0
  227. package/dist/component/mediaFolderMutations.js +849 -0
  228. package/dist/component/mediaFolderMutations.js.map +1 -0
  229. package/dist/component/mediaUploadMutations.d.ts +136 -0
  230. package/dist/component/mediaUploadMutations.d.ts.map +1 -0
  231. package/dist/component/mediaUploadMutations.js +205 -0
  232. package/dist/component/mediaUploadMutations.js.map +1 -0
  233. package/dist/component/mediaVariantMutations.d.ts +468 -0
  234. package/dist/component/mediaVariantMutations.d.ts.map +1 -0
  235. package/dist/component/mediaVariantMutations.js +737 -0
  236. package/dist/component/mediaVariantMutations.js.map +1 -0
  237. package/dist/component/mediaVariants.d.ts +525 -0
  238. package/dist/component/mediaVariants.d.ts.map +1 -0
  239. package/dist/component/mediaVariants.js +661 -0
  240. package/dist/component/mediaVariants.js.map +1 -0
  241. package/dist/component/ragContentIndexer.d.ts +595 -0
  242. package/dist/component/ragContentIndexer.d.ts.map +1 -0
  243. package/dist/component/ragContentIndexer.js +794 -0
  244. package/dist/component/ragContentIndexer.js.map +1 -0
  245. package/dist/component/rateLimitHooks.d.ts +266 -0
  246. package/dist/component/rateLimitHooks.d.ts.map +1 -0
  247. package/dist/component/rateLimitHooks.js +412 -0
  248. package/dist/component/rateLimitHooks.js.map +1 -0
  249. package/dist/component/roles.d.ts +649 -0
  250. package/dist/component/roles.d.ts.map +1 -0
  251. package/dist/component/roles.js +884 -0
  252. package/dist/component/roles.js.map +1 -0
  253. package/dist/component/scheduledPublish.d.ts +182 -0
  254. package/dist/component/scheduledPublish.d.ts.map +1 -0
  255. package/dist/component/scheduledPublish.js +304 -0
  256. package/dist/component/scheduledPublish.js.map +1 -0
  257. package/dist/component/schema.d.ts +4114 -0
  258. package/dist/component/schema.d.ts.map +1 -0
  259. package/dist/component/schema.js +469 -0
  260. package/dist/component/schema.js.map +1 -0
  261. package/dist/component/taxonomies.d.ts +476 -0
  262. package/dist/component/taxonomies.d.ts.map +1 -0
  263. package/dist/component/taxonomies.js +785 -0
  264. package/dist/component/taxonomies.js.map +1 -0
  265. package/dist/component/taxonomyMutations.d.ts +206 -0
  266. package/dist/component/taxonomyMutations.d.ts.map +1 -0
  267. package/dist/component/taxonomyMutations.js +1001 -0
  268. package/dist/component/taxonomyMutations.js.map +1 -0
  269. package/dist/component/trash.d.ts +265 -0
  270. package/dist/component/trash.d.ts.map +1 -0
  271. package/dist/component/trash.js +621 -0
  272. package/dist/component/trash.js.map +1 -0
  273. package/dist/component/types.d.ts +4 -0
  274. package/dist/component/types.d.ts.map +1 -0
  275. package/dist/component/types.js +2 -0
  276. package/dist/component/types.js.map +1 -0
  277. package/dist/component/userContext.d.ts +508 -0
  278. package/dist/component/userContext.d.ts.map +1 -0
  279. package/dist/component/userContext.js +615 -0
  280. package/dist/component/userContext.js.map +1 -0
  281. package/dist/component/validation.d.ts +387 -0
  282. package/dist/component/validation.d.ts.map +1 -0
  283. package/dist/component/validation.js +1052 -0
  284. package/dist/component/validation.js.map +1 -0
  285. package/dist/component/validators.d.ts +4645 -0
  286. package/dist/component/validators.d.ts.map +1 -0
  287. package/dist/component/validators.js +641 -0
  288. package/dist/component/validators.js.map +1 -0
  289. package/dist/component/versionMutations.d.ts +216 -0
  290. package/dist/component/versionMutations.d.ts.map +1 -0
  291. package/dist/component/versionMutations.js +321 -0
  292. package/dist/component/versionMutations.js.map +1 -0
  293. package/dist/component/webhookTrigger.d.ts +770 -0
  294. package/dist/component/webhookTrigger.d.ts.map +1 -0
  295. package/dist/component/webhookTrigger.js +1413 -0
  296. package/dist/component/webhookTrigger.js.map +1 -0
  297. package/dist/react/index.d.ts +316 -0
  298. package/dist/react/index.d.ts.map +1 -0
  299. package/dist/react/index.js +558 -0
  300. package/dist/react/index.js.map +1 -0
  301. package/dist/test.d.ts +2230 -0
  302. package/dist/test.d.ts.map +1 -0
  303. package/dist/test.js +1107 -0
  304. package/dist/test.js.map +1 -0
  305. package/package.json +95 -0
  306. package/src/cli/commands/admin.ts +104 -0
  307. package/src/cli/index.ts +21 -0
  308. package/src/cli/utils/detectConvexUrl.ts +54 -0
  309. package/src/cli/utils/openBrowser.ts +16 -0
  310. package/src/client/admin-config.ts +138 -0
  311. package/src/client/adminApi.ts +942 -0
  312. package/src/client/agentTools.ts +1311 -0
  313. package/src/client/argTypes.ts +316 -0
  314. package/src/client/field-types.ts +187 -0
  315. package/src/client/index.ts +1301 -0
  316. package/src/client/queryBuilder.ts +1100 -0
  317. package/src/client/schema/codegen.ts +500 -0
  318. package/src/client/schema/defineContentType.ts +501 -0
  319. package/src/client/schema/index.ts +169 -0
  320. package/src/client/schema/schemaDrift.ts +574 -0
  321. package/src/client/schema/typedClient.ts +688 -0
  322. package/src/client/schema/types.ts +666 -0
  323. package/src/client/types.ts +723 -0
  324. package/src/client/workflows.ts +141 -0
  325. package/src/client/wrapper.ts +4304 -0
  326. package/src/component/_generated/api.ts +140 -0
  327. package/src/component/_generated/component.ts +5029 -0
  328. package/src/component/_generated/dataModel.ts +60 -0
  329. package/src/component/_generated/server.ts +156 -0
  330. package/src/component/authorization.ts +647 -0
  331. package/src/component/authorizationHooks.ts +668 -0
  332. package/src/component/bulkOperations.ts +687 -0
  333. package/src/component/contentEntries.ts +1976 -0
  334. package/src/component/contentEntryMutations.ts +1223 -0
  335. package/src/component/contentEntryValidation.ts +707 -0
  336. package/src/component/contentLock.ts +550 -0
  337. package/src/component/contentTypeMigration.ts +1064 -0
  338. package/src/component/contentTypeMutations.ts +969 -0
  339. package/src/component/contentTypes.ts +346 -0
  340. package/src/component/convex.config.ts +44 -0
  341. package/src/component/documentTypes.ts +240 -0
  342. package/src/component/eventEmitter.ts +485 -0
  343. package/src/component/exportImport.ts +1169 -0
  344. package/src/component/index.ts +491 -0
  345. package/src/component/lib/deepReferenceResolver.ts +999 -0
  346. package/src/component/lib/errors.ts +816 -0
  347. package/src/component/lib/index.ts +145 -0
  348. package/src/component/lib/mediaReferenceResolver.ts +495 -0
  349. package/src/component/lib/metadataExtractor.ts +792 -0
  350. package/src/component/lib/mutationAuth.ts +199 -0
  351. package/src/component/lib/queries.ts +79 -0
  352. package/src/component/lib/ragContentChunker.ts +1371 -0
  353. package/src/component/lib/referenceResolver.ts +430 -0
  354. package/src/component/lib/slugGenerator.ts +262 -0
  355. package/src/component/lib/slugUniqueness.ts +333 -0
  356. package/src/component/lib/softDelete.ts +44 -0
  357. package/src/component/localeFallbackChain.ts +673 -0
  358. package/src/component/localeFields.ts +896 -0
  359. package/src/component/mediaAssetMutations.ts +725 -0
  360. package/src/component/mediaAssets.ts +932 -0
  361. package/src/component/mediaFolderMutations.ts +1046 -0
  362. package/src/component/mediaUploadMutations.ts +224 -0
  363. package/src/component/mediaVariantMutations.ts +900 -0
  364. package/src/component/mediaVariants.ts +793 -0
  365. package/src/component/ragContentIndexer.ts +1067 -0
  366. package/src/component/rateLimitHooks.ts +572 -0
  367. package/src/component/roles.ts +1360 -0
  368. package/src/component/scheduledPublish.ts +358 -0
  369. package/src/component/schema.ts +617 -0
  370. package/src/component/taxonomies.ts +949 -0
  371. package/src/component/taxonomyMutations.ts +1210 -0
  372. package/src/component/trash.ts +724 -0
  373. package/src/component/userContext.ts +898 -0
  374. package/src/component/validation.ts +1388 -0
  375. package/src/component/validators.ts +949 -0
  376. package/src/component/versionMutations.ts +392 -0
  377. package/src/component/webhookTrigger.ts +1922 -0
  378. package/src/react/index.ts +898 -0
  379. package/src/test.ts +1580 -0
@@ -0,0 +1,558 @@
1
+ /**
2
+ * @convex-cms/core/react
3
+ *
4
+ * React hooks and utilities for using Convex CMS in React applications.
5
+ * These hooks provide convenient wrappers around Convex's React hooks
6
+ * specifically designed for CMS use cases.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * import { useContentEntries, useContentEntry, useMediaAssets } from "@convex-cms/core/react";
11
+ * import { api } from "../convex/_generated/api";
12
+ *
13
+ * function BlogList() {
14
+ * const { entries, isLoading, loadMore, hasMore } = useContentEntries(
15
+ * api.example.listBlogPosts,
16
+ * { status: "published" }
17
+ * );
18
+ *
19
+ * return (
20
+ * <div>
21
+ * {entries.map(entry => <BlogCard key={entry._id} entry={entry} />)}
22
+ * {hasMore && <button onClick={loadMore}>Load More</button>}
23
+ * </div>
24
+ * );
25
+ * }
26
+ * ```
27
+ */
28
+ // Re-export core Convex React hooks for convenience
29
+ export { useQuery, useMutation, useAction, usePaginatedQuery, useConvex, useConvexAuth, Authenticated, Unauthenticated, AuthLoading, } from "convex/react";
30
+ // Re-export Convex React provider
31
+ export { ConvexProvider, ConvexProviderWithAuth } from "convex/react";
32
+ import { useMemo, useCallback, useState, useRef, useReducer, useEffect } from "react";
33
+ import { useQuery, usePaginatedQuery, useMutation } from "convex/react";
34
+ // =============================================================================
35
+ // Upload Utilities
36
+ // =============================================================================
37
+ function generateUploadId() {
38
+ return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
39
+ }
40
+ function getImageDimensions(file, timeoutMs = 5000) {
41
+ if (!file.type.startsWith("image/"))
42
+ return Promise.resolve(undefined);
43
+ return new Promise((resolve) => {
44
+ const img = new Image();
45
+ let objectUrl = null;
46
+ const timeoutId = setTimeout(() => {
47
+ if (objectUrl)
48
+ URL.revokeObjectURL(objectUrl);
49
+ resolve(undefined);
50
+ }, timeoutMs);
51
+ img.onload = () => {
52
+ clearTimeout(timeoutId);
53
+ if (objectUrl)
54
+ URL.revokeObjectURL(objectUrl);
55
+ resolve({ width: img.naturalWidth, height: img.naturalHeight });
56
+ };
57
+ img.onerror = () => {
58
+ clearTimeout(timeoutId);
59
+ if (objectUrl)
60
+ URL.revokeObjectURL(objectUrl);
61
+ resolve(undefined);
62
+ };
63
+ objectUrl = URL.createObjectURL(file);
64
+ img.src = objectUrl;
65
+ });
66
+ }
67
+ function uploadWithXHR(url, file, signal, onProgress) {
68
+ return new Promise((resolve, reject) => {
69
+ const xhr = new XMLHttpRequest();
70
+ const abortHandler = () => {
71
+ xhr.abort();
72
+ reject(new DOMException("Upload aborted", "AbortError"));
73
+ };
74
+ signal.addEventListener("abort", abortHandler);
75
+ xhr.upload.onprogress = (event) => {
76
+ if (event.lengthComputable) {
77
+ const percent = Math.round((event.loaded / event.total) * 80);
78
+ onProgress(10 + percent);
79
+ }
80
+ };
81
+ xhr.onload = () => {
82
+ signal.removeEventListener("abort", abortHandler);
83
+ if (xhr.status >= 200 && xhr.status < 300) {
84
+ try {
85
+ const response = JSON.parse(xhr.responseText);
86
+ resolve(response.storageId);
87
+ }
88
+ catch {
89
+ reject(new Error("Invalid response from upload server"));
90
+ }
91
+ }
92
+ else {
93
+ reject(new Error(`Upload failed: ${xhr.statusText || `HTTP ${xhr.status}`}`));
94
+ }
95
+ };
96
+ xhr.onerror = () => {
97
+ signal.removeEventListener("abort", abortHandler);
98
+ reject(new Error("Network error during upload"));
99
+ };
100
+ xhr.ontimeout = () => {
101
+ signal.removeEventListener("abort", abortHandler);
102
+ reject(new Error("Upload timed out"));
103
+ };
104
+ xhr.open("POST", url);
105
+ xhr.setRequestHeader("Content-Type", file.type);
106
+ xhr.send(file);
107
+ });
108
+ }
109
+ // =============================================================================
110
+ // Content Entry Hooks
111
+ // =============================================================================
112
+ /**
113
+ * Hook for fetching paginated content entries with automatic cursor management.
114
+ *
115
+ * @param queryFn - The Convex query function for listing entries
116
+ * @param args - Arguments to pass to the query (excluding pagination)
117
+ * @param options - Hook options like page size
118
+ * @returns Paginated entries with loading state and load more function
119
+ *
120
+ * @example
121
+ * ```tsx
122
+ * const { entries, isLoading, loadMore, hasMore } = useContentEntries(
123
+ * api.example.listBlogPosts,
124
+ * { contentTypeId: blogTypeId, status: "published" },
125
+ * { pageSize: 10 }
126
+ * );
127
+ * ```
128
+ */
129
+ export function useContentEntries(queryFn, args, options = {}) {
130
+ const { pageSize = 20 } = options;
131
+ const result = usePaginatedQuery(queryFn, args, { initialNumItems: pageSize });
132
+ const entries = useMemo(() => {
133
+ if (!result.results)
134
+ return [];
135
+ return result.results;
136
+ }, [result.results]);
137
+ const loadMore = useCallback((numItems) => {
138
+ result.loadMore(numItems ?? pageSize);
139
+ }, [result, pageSize]);
140
+ return {
141
+ entries,
142
+ isLoading: result.status === "LoadingFirstPage",
143
+ isLoadingMore: result.status === "LoadingMore",
144
+ loadMore,
145
+ hasMore: result.status === "CanLoadMore",
146
+ status: result.status,
147
+ };
148
+ }
149
+ /**
150
+ * Hook for fetching a single content entry.
151
+ *
152
+ * @param queryFn - The Convex query function for getting an entry
153
+ * @param args - Arguments to pass to the query (typically entry ID)
154
+ * @returns The entry with loading state
155
+ *
156
+ * @example
157
+ * ```tsx
158
+ * const { entry, isLoading } = useContentEntry(
159
+ * api.example.getBlogPost,
160
+ * { id: postId, locale: "en-US" }
161
+ * );
162
+ * ```
163
+ */
164
+ export function useContentEntry(queryFn, args) {
165
+ const result = useQuery(queryFn, args);
166
+ return {
167
+ entry: result,
168
+ isLoading: result === undefined,
169
+ };
170
+ }
171
+ // =============================================================================
172
+ // Media Asset Hooks
173
+ // =============================================================================
174
+ /**
175
+ * Hook for fetching paginated media assets.
176
+ *
177
+ * @param queryFn - The Convex query function for listing media
178
+ * @param args - Arguments to pass to the query (folder, type filters, etc.)
179
+ * @param options - Hook options like page size
180
+ * @returns Paginated assets with loading state and load more function
181
+ *
182
+ * @example
183
+ * ```tsx
184
+ * const { assets, isLoading, loadMore, hasMore } = useMediaAssets(
185
+ * api.example.listMedia,
186
+ * { folderId: currentFolder, type: "image" },
187
+ * { pageSize: 24 }
188
+ * );
189
+ * ```
190
+ */
191
+ export function useMediaAssets(queryFn, args, options = {}) {
192
+ const { pageSize = 24 } = options;
193
+ const result = usePaginatedQuery(queryFn, args, { initialNumItems: pageSize });
194
+ const assets = useMemo(() => {
195
+ if (!result.results)
196
+ return [];
197
+ return result.results;
198
+ }, [result.results]);
199
+ const loadMore = useCallback((numItems) => {
200
+ result.loadMore(numItems ?? pageSize);
201
+ }, [result, pageSize]);
202
+ return {
203
+ assets,
204
+ isLoading: result.status === "LoadingFirstPage",
205
+ isLoadingMore: result.status === "LoadingMore",
206
+ loadMore,
207
+ hasMore: result.status === "CanLoadMore",
208
+ status: result.status,
209
+ };
210
+ }
211
+ /**
212
+ * Hook for CMS mutations with loading and error state tracking.
213
+ *
214
+ * @param mutationFn - The Convex mutation function
215
+ * @returns Mutation function with state tracking
216
+ *
217
+ * @example
218
+ * ```tsx
219
+ * const { mutate: createEntry, isPending, error } = useCmsMutation(
220
+ * api.example.createBlogPost
221
+ * );
222
+ *
223
+ * const handleSubmit = async (data) => {
224
+ * try {
225
+ * await createEntry(data);
226
+ * toast.success("Post created!");
227
+ * } catch (e) {
228
+ * // Error is also available via the error state
229
+ * }
230
+ * };
231
+ * ```
232
+ */
233
+ export function useCmsMutation(mutationFn) {
234
+ const mutation = useMutation(mutationFn);
235
+ const [isPending, setIsPending] = useState(false);
236
+ const [error, setError] = useState(null);
237
+ const mutate = useCallback(async (args) => {
238
+ setIsPending(true);
239
+ setError(null);
240
+ try {
241
+ const result = await mutation(args);
242
+ return result;
243
+ }
244
+ catch (e) {
245
+ const err = e instanceof Error ? e : new Error(String(e));
246
+ setError(err);
247
+ throw err;
248
+ }
249
+ finally {
250
+ setIsPending(false);
251
+ }
252
+ }, [mutation]);
253
+ const resetError = useCallback(() => {
254
+ setError(null);
255
+ }, []);
256
+ return {
257
+ mutate,
258
+ isPending,
259
+ error,
260
+ resetError,
261
+ };
262
+ }
263
+ /**
264
+ * Hook for uploading files to Convex storage with CMS media asset creation.
265
+ * Includes real-time progress tracking, cancellation support, and error handling.
266
+ *
267
+ * @param getUploadUrl - Mutation to get a storage upload URL
268
+ * @param createAsset - Mutation to create the media asset record
269
+ * @returns Upload function with progress tracking, cancellation, and error state
270
+ *
271
+ * @example
272
+ * ```tsx
273
+ * const { upload, cancel, isUploading, progress, error } = useMediaUpload(
274
+ * api.example.generateUploadUrl,
275
+ * api.example.createMediaAsset
276
+ * );
277
+ *
278
+ * const handleUpload = async (file: File) => {
279
+ * try {
280
+ * const asset = await upload(file, { parentId: folderId });
281
+ * console.log("Uploaded:", asset);
282
+ * } catch (e) {
283
+ * if (e.name !== "AbortError") {
284
+ * console.error("Upload failed:", e);
285
+ * }
286
+ * }
287
+ * };
288
+ *
289
+ * // Cancel button
290
+ * <button onClick={cancel} disabled={!isUploading}>Cancel</button>
291
+ * ```
292
+ */
293
+ export function useMediaUpload(getUploadUrl, createAsset) {
294
+ const generateUrl = useMutation(getUploadUrl);
295
+ const create = useMutation(createAsset);
296
+ const [isUploading, setIsUploading] = useState(false);
297
+ const [progress, setProgress] = useState(0);
298
+ const [error, setError] = useState(null);
299
+ const abortControllerRef = useRef(null);
300
+ const upload = useCallback(async (file, metadata) => {
301
+ abortControllerRef.current = new AbortController();
302
+ setIsUploading(true);
303
+ setProgress(0);
304
+ setError(null);
305
+ try {
306
+ const uploadUrl = await generateUrl({});
307
+ setProgress(5);
308
+ const storageId = await uploadWithXHR(uploadUrl, file, abortControllerRef.current.signal, setProgress);
309
+ setProgress(90);
310
+ const dimensions = await getImageDimensions(file);
311
+ const asset = await create({
312
+ storageId,
313
+ name: file.name,
314
+ mimeType: file.type,
315
+ size: file.size,
316
+ ...dimensions,
317
+ ...metadata,
318
+ });
319
+ setProgress(100);
320
+ return asset;
321
+ }
322
+ catch (e) {
323
+ const err = e instanceof Error ? e : new Error(String(e));
324
+ if (err.name !== "AbortError") {
325
+ setError(err.message);
326
+ }
327
+ throw err;
328
+ }
329
+ finally {
330
+ setIsUploading(false);
331
+ abortControllerRef.current = null;
332
+ }
333
+ }, [generateUrl, create]);
334
+ const cancel = useCallback(() => {
335
+ abortControllerRef.current?.abort();
336
+ }, []);
337
+ const reset = useCallback(() => {
338
+ setProgress(0);
339
+ setError(null);
340
+ setIsUploading(false);
341
+ }, []);
342
+ return {
343
+ upload,
344
+ cancel,
345
+ isUploading,
346
+ progress,
347
+ error,
348
+ reset,
349
+ };
350
+ }
351
+ function queueReducer(state, action) {
352
+ switch (action.type) {
353
+ case "ADD_FILES": {
354
+ const newFiles = action.files.map((file) => ({
355
+ id: generateUploadId(),
356
+ file,
357
+ status: "pending",
358
+ progress: 0,
359
+ }));
360
+ return [...state, ...newFiles];
361
+ }
362
+ case "UPDATE_FILE":
363
+ return state.map((f) => f.id === action.id ? { ...f, ...action.updates } : f);
364
+ case "RETRY_FILE":
365
+ return state.map((f) => f.id === action.id
366
+ ? { ...f, status: "pending", progress: 0, error: undefined }
367
+ : f);
368
+ case "REMOVE_FILE":
369
+ return state.filter((f) => f.id !== action.id);
370
+ case "CLEAR_COMPLETED":
371
+ return state.filter((f) => f.status === "pending" || f.status === "uploading");
372
+ case "CLEAR_ALL":
373
+ return [];
374
+ case "CANCEL_FILE":
375
+ return state.map((f) => f.id === action.id && (f.status === "pending" || f.status === "uploading")
376
+ ? { ...f, status: "cancelled", error: "Upload cancelled" }
377
+ : f);
378
+ case "CANCEL_ALL":
379
+ return state.map((f) => f.status === "pending" || f.status === "uploading"
380
+ ? { ...f, status: "cancelled", error: "Upload cancelled" }
381
+ : f);
382
+ default:
383
+ return state;
384
+ }
385
+ }
386
+ /**
387
+ * Hook for uploading multiple files with queue management, concurrency control,
388
+ * and progress tracking. Uses a reducer for state management to avoid closure issues.
389
+ *
390
+ * @param options - Configuration options
391
+ * @returns Queue state and control functions
392
+ *
393
+ * @example
394
+ * ```tsx
395
+ * const queue = useMediaUploadQueue({
396
+ * getUploadUrl: api.media.generateUploadUrl,
397
+ * createAsset: api.media.createAsset,
398
+ * maxConcurrent: 3,
399
+ * metadata: { parentId: folderId },
400
+ * onComplete: (results) => console.log("All done!", results),
401
+ * });
402
+ *
403
+ * // In your dropzone handler:
404
+ * const handleDrop = (files: File[]) => {
405
+ * queue.addFiles(files);
406
+ * };
407
+ *
408
+ * // Display progress:
409
+ * {queue.files.map(f => (
410
+ * <div key={f.id}>
411
+ * {f.file.name}: {f.status} ({f.progress}%)
412
+ * {f.status === "uploading" && <button onClick={() => queue.cancelFile(f.id)}>Cancel</button>}
413
+ * {f.status === "error" && <button onClick={() => queue.retryFile(f.id)}>Retry</button>}
414
+ * </div>
415
+ * ))}
416
+ * ```
417
+ */
418
+ export function useMediaUploadQueue(options) {
419
+ const { maxConcurrent = 3, metadata, onComplete, onError } = options;
420
+ const [files, dispatch] = useReducer(queueReducer, []);
421
+ const generateUrl = useMutation(options.getUploadUrl);
422
+ const create = useMutation(options.createAsset);
423
+ const activeUploadsRef = useRef(0);
424
+ const abortControllersRef = useRef(new Map());
425
+ const processingRef = useRef(false);
426
+ const uploadFile = useCallback(async (queueFile) => {
427
+ const abortController = new AbortController();
428
+ abortControllersRef.current.set(queueFile.id, abortController);
429
+ dispatch({
430
+ type: "UPDATE_FILE",
431
+ id: queueFile.id,
432
+ updates: { status: "uploading", progress: 0 },
433
+ });
434
+ try {
435
+ const uploadUrl = await generateUrl({});
436
+ dispatch({
437
+ type: "UPDATE_FILE",
438
+ id: queueFile.id,
439
+ updates: { progress: 5 },
440
+ });
441
+ const storageId = await uploadWithXHR(uploadUrl, queueFile.file, abortController.signal, (progress) => {
442
+ dispatch({
443
+ type: "UPDATE_FILE",
444
+ id: queueFile.id,
445
+ updates: { progress },
446
+ });
447
+ });
448
+ dispatch({
449
+ type: "UPDATE_FILE",
450
+ id: queueFile.id,
451
+ updates: { progress: 90 },
452
+ });
453
+ const dimensions = await getImageDimensions(queueFile.file);
454
+ const result = await create({
455
+ storageId,
456
+ name: queueFile.file.name,
457
+ mimeType: queueFile.file.type,
458
+ size: queueFile.file.size,
459
+ ...dimensions,
460
+ ...metadata,
461
+ });
462
+ dispatch({
463
+ type: "UPDATE_FILE",
464
+ id: queueFile.id,
465
+ updates: { status: "complete", progress: 100, result },
466
+ });
467
+ }
468
+ catch (e) {
469
+ const err = e instanceof Error ? e : new Error(String(e));
470
+ if (err.name === "AbortError") {
471
+ dispatch({
472
+ type: "UPDATE_FILE",
473
+ id: queueFile.id,
474
+ updates: { status: "cancelled", error: "Upload cancelled" },
475
+ });
476
+ }
477
+ else {
478
+ const updatedFile = {
479
+ ...queueFile,
480
+ status: "error",
481
+ error: err.message,
482
+ };
483
+ dispatch({
484
+ type: "UPDATE_FILE",
485
+ id: queueFile.id,
486
+ updates: { status: "error", error: err.message },
487
+ });
488
+ onError?.(updatedFile);
489
+ }
490
+ }
491
+ finally {
492
+ abortControllersRef.current.delete(queueFile.id);
493
+ activeUploadsRef.current--;
494
+ }
495
+ }, [generateUrl, create, metadata, onError]);
496
+ const processQueue = useCallback(() => {
497
+ if (processingRef.current)
498
+ return;
499
+ processingRef.current = true;
500
+ const pending = files.filter((f) => f.status === "pending");
501
+ while (activeUploadsRef.current < maxConcurrent && pending.length > 0) {
502
+ const next = pending.shift();
503
+ activeUploadsRef.current++;
504
+ uploadFile(next);
505
+ }
506
+ processingRef.current = false;
507
+ if (activeUploadsRef.current === 0 &&
508
+ files.length > 0 &&
509
+ files.every((f) => f.status !== "pending" && f.status !== "uploading")) {
510
+ onComplete?.(files);
511
+ }
512
+ }, [files, maxConcurrent, uploadFile, onComplete]);
513
+ useEffect(() => {
514
+ if (files.some((f) => f.status === "pending") && activeUploadsRef.current < maxConcurrent) {
515
+ processQueue();
516
+ }
517
+ }, [files, maxConcurrent, processQueue]);
518
+ const addFiles = useCallback((newFiles) => {
519
+ dispatch({ type: "ADD_FILES", files: newFiles });
520
+ }, []);
521
+ const cancelFile = useCallback((id) => {
522
+ const controller = abortControllersRef.current.get(id);
523
+ if (controller) {
524
+ controller.abort();
525
+ }
526
+ dispatch({ type: "CANCEL_FILE", id });
527
+ }, []);
528
+ const cancelAll = useCallback(() => {
529
+ abortControllersRef.current.forEach((controller) => controller.abort());
530
+ dispatch({ type: "CANCEL_ALL" });
531
+ }, []);
532
+ const retryFile = useCallback((id) => {
533
+ dispatch({ type: "RETRY_FILE", id });
534
+ }, []);
535
+ const clearCompleted = useCallback(() => {
536
+ dispatch({ type: "CLEAR_COMPLETED" });
537
+ }, []);
538
+ const clearAll = useCallback(() => {
539
+ abortControllersRef.current.forEach((controller) => controller.abort());
540
+ dispatch({ type: "CLEAR_ALL" });
541
+ }, []);
542
+ const isUploading = files.some((f) => f.status === "uploading");
543
+ const overallProgress = files.length > 0
544
+ ? Math.round(files.reduce((sum, f) => sum + f.progress, 0) / files.length)
545
+ : 0;
546
+ return {
547
+ files,
548
+ addFiles,
549
+ cancelFile,
550
+ cancelAll,
551
+ retryFile,
552
+ clearCompleted,
553
+ clearAll,
554
+ isUploading,
555
+ overallProgress,
556
+ };
557
+ }
558
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}