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,719 @@
1
+ /**
2
+ * Content Entry Query Functions
3
+ *
4
+ * Provides query functions for retrieving content entries from the CMS.
5
+ * Content entries are instances of content types that hold the actual content data.
6
+ *
7
+ * Uses convex-helpers paginator for robust cursor-based pagination.
8
+ */
9
+ import { type Infer } from "convex/values";
10
+ /**
11
+ * Comparison operators for field filtering.
12
+ *
13
+ * - `eq`: Exact equality (works with all field types)
14
+ * - `ne`: Not equal (works with all field types)
15
+ * - `gt`: Greater than (numbers, dates)
16
+ * - `gte`: Greater than or equal (numbers, dates)
17
+ * - `lt`: Less than (numbers, dates)
18
+ * - `lte`: Less than or equal (numbers, dates)
19
+ * - `contains`: String contains substring, or array contains value
20
+ * - `startsWith`: String starts with prefix
21
+ * - `endsWith`: String ends with suffix
22
+ * - `in`: Value is in array of allowed values
23
+ * - `notIn`: Value is not in array of disallowed values
24
+ */
25
+ export declare const filterOperatorValidator: import("convex/values").VUnion<"endsWith" | "startsWith" | "in" | "eq" | "ne" | "gt" | "gte" | "lt" | "lte" | "contains" | "notIn", [import("convex/values").VLiteral<"eq", "required">, import("convex/values").VLiteral<"ne", "required">, import("convex/values").VLiteral<"gt", "required">, import("convex/values").VLiteral<"gte", "required">, import("convex/values").VLiteral<"lt", "required">, import("convex/values").VLiteral<"lte", "required">, import("convex/values").VLiteral<"contains", "required">, import("convex/values").VLiteral<"startsWith", "required">, import("convex/values").VLiteral<"endsWith", "required">, import("convex/values").VLiteral<"in", "required">, import("convex/values").VLiteral<"notIn", "required">], "required", never>;
26
+ export type FilterOperator = Infer<typeof filterOperatorValidator>;
27
+ /**
28
+ * A single field filter condition.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * // Filter by exact title match
33
+ * { field: "title", operator: "eq", value: "My Post" }
34
+ *
35
+ * // Filter by price range
36
+ * { field: "price", operator: "gte", value: 100 }
37
+ *
38
+ * // Filter by category (in list)
39
+ * { field: "category", operator: "in", value: ["tech", "science"] }
40
+ *
41
+ * // Filter by tag contains
42
+ * { field: "tags", operator: "contains", value: "javascript" }
43
+ * ```
44
+ */
45
+ export declare const fieldFilterValidator: import("convex/values").VObject<{
46
+ value: any;
47
+ field: string;
48
+ operator: "endsWith" | "startsWith" | "in" | "eq" | "ne" | "gt" | "gte" | "lt" | "lte" | "contains" | "notIn";
49
+ }, {
50
+ /** The name of the field in the content entry's data object */
51
+ field: import("convex/values").VString<string, "required">;
52
+ /** The comparison operator to use */
53
+ operator: import("convex/values").VUnion<"endsWith" | "startsWith" | "in" | "eq" | "ne" | "gt" | "gte" | "lt" | "lte" | "contains" | "notIn", [import("convex/values").VLiteral<"eq", "required">, import("convex/values").VLiteral<"ne", "required">, import("convex/values").VLiteral<"gt", "required">, import("convex/values").VLiteral<"gte", "required">, import("convex/values").VLiteral<"lt", "required">, import("convex/values").VLiteral<"lte", "required">, import("convex/values").VLiteral<"contains", "required">, import("convex/values").VLiteral<"startsWith", "required">, import("convex/values").VLiteral<"endsWith", "required">, import("convex/values").VLiteral<"in", "required">, import("convex/values").VLiteral<"notIn", "required">], "required", never>;
54
+ /** The value to compare against (type depends on field type and operator) */
55
+ value: import("convex/values").VAny<any, "required", string>;
56
+ }, "required", "value" | "field" | "operator" | `value.${string}`>;
57
+ export type FieldFilter = Infer<typeof fieldFilterValidator>;
58
+ /**
59
+ * Sort direction for query results.
60
+ */
61
+ export declare const sortDirectionValidator: import("convex/values").VUnion<"asc" | "desc", [import("convex/values").VLiteral<"asc", "required">, import("convex/values").VLiteral<"desc", "required">], "required", never>;
62
+ export type SortDirection = Infer<typeof sortDirectionValidator>;
63
+ /**
64
+ * Sortable system fields for content entries.
65
+ * These are fields that exist on all content entries.
66
+ */
67
+ export declare const systemSortFieldValidator: import("convex/values").VUnion<"_creationTime" | "version" | "scheduledPublishAt" | "firstPublishedAt" | "lastPublishedAt" | "_id", [import("convex/values").VLiteral<"_creationTime", "required">, import("convex/values").VLiteral<"_id", "required">, import("convex/values").VLiteral<"firstPublishedAt", "required">, import("convex/values").VLiteral<"lastPublishedAt", "required">, import("convex/values").VLiteral<"scheduledPublishAt", "required">, import("convex/values").VLiteral<"version", "required">], "required", never>;
68
+ export type SystemSortField = Infer<typeof systemSortFieldValidator>;
69
+ /**
70
+ * Sort field can be a system field or a custom data field (prefixed with "data.").
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // System field sorting
75
+ * sortField: "_creationTime"
76
+ * sortField: "firstPublishedAt"
77
+ *
78
+ * // Custom data field sorting (prefix with "data.")
79
+ * sortField: "data.title"
80
+ * sortField: "data.price"
81
+ * sortField: "data.sortOrder"
82
+ * ```
83
+ */
84
+ export declare const sortFieldValidator: import("convex/values").VString<string, "required">;
85
+ export type SortField = string;
86
+ /**
87
+ * Sort options for content entry queries.
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * // Sort by creation time (newest first)
92
+ * { sortField: "_creationTime", sortDirection: "desc" }
93
+ *
94
+ * // Sort by publish date (oldest published first)
95
+ * { sortField: "firstPublishedAt", sortDirection: "asc" }
96
+ *
97
+ * // Sort by custom field (e.g., price low to high)
98
+ * { sortField: "data.price", sortDirection: "asc" }
99
+ * ```
100
+ */
101
+ export declare const sortOptionsValidator: import("convex/values").VObject<{
102
+ sortField: string;
103
+ sortDirection: "asc" | "desc";
104
+ }, {
105
+ /** The field to sort by (system field or "data.fieldName" for custom fields) */
106
+ sortField: import("convex/values").VString<string, "required">;
107
+ /** The sort direction ("asc" for ascending, "desc" for descending) */
108
+ sortDirection: import("convex/values").VUnion<"asc" | "desc", [import("convex/values").VLiteral<"asc", "required">, import("convex/values").VLiteral<"desc", "required">], "required", never>;
109
+ }, "required", "sortField" | "sortDirection">;
110
+ export type SortOptions = Infer<typeof sortOptionsValidator>;
111
+ /**
112
+ * Apply a single field filter to a content entry.
113
+ *
114
+ * @param entryData - The content entry's data object
115
+ * @param filter - The filter condition to apply
116
+ * @returns true if the entry matches the filter, false otherwise
117
+ */
118
+ export declare function matchesFieldFilter(entryData: Record<string, unknown>, filter: FieldFilter): boolean;
119
+ /**
120
+ * Apply multiple field filters to a content entry.
121
+ * All filters must match (AND logic).
122
+ *
123
+ * @param entryData - The content entry's data object
124
+ * @param filters - Array of filter conditions
125
+ * @returns true if the entry matches all filters, false otherwise
126
+ */
127
+ export declare function matchesAllFieldFilters(entryData: Record<string, unknown>, filters: FieldFilter[]): boolean;
128
+ /**
129
+ * Query to retrieve a single content entry by ID.
130
+ *
131
+ * Returns full content data including metadata and status.
132
+ * Optionally includes the latest version info when `includeVersion` is true.
133
+ *
134
+ * @param id - The content entry ID to retrieve
135
+ * @param includeVersion - Whether to include version info (default: false)
136
+ * @returns The content entry document, or null if not found or deleted
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * // Basic usage - get entry by ID
141
+ * const entry = await ctx.runQuery(api.contentEntries.get, {
142
+ * id: entryId,
143
+ * });
144
+ *
145
+ * // With version info
146
+ * const entryWithVersion = await ctx.runQuery(api.contentEntries.get, {
147
+ * id: entryId,
148
+ * includeVersion: true,
149
+ * });
150
+ * if (entryWithVersion?.latestVersion) {
151
+ * console.log("Current version:", entryWithVersion.latestVersion.versionNumber);
152
+ * }
153
+ * ```
154
+ */
155
+ export declare const get: import("convex/server").RegisteredQuery<"public", {
156
+ includeVersion?: boolean | undefined;
157
+ id: import("convex/values").GenericId<"contentEntries">;
158
+ }, Promise<{
159
+ latestVersion: {
160
+ _id: import("convex/values").GenericId<"contentVersions">;
161
+ _creationTime: number;
162
+ createdBy?: string | undefined;
163
+ changeDescription?: string | undefined;
164
+ publishedAt?: number | undefined;
165
+ slug: string;
166
+ status: string;
167
+ data: any;
168
+ entryId: import("convex/values").GenericId<"contentEntries">;
169
+ versionNumber: number;
170
+ wasPublished: boolean;
171
+ } | undefined;
172
+ _id: import("convex/values").GenericId<"contentEntries">;
173
+ _creationTime: number;
174
+ deletedAt?: number | undefined;
175
+ createdBy?: string | undefined;
176
+ updatedBy?: string | undefined;
177
+ searchText?: string | undefined;
178
+ locale?: string | undefined;
179
+ primaryEntryId?: import("convex/values").GenericId<"contentEntries"> | undefined;
180
+ scheduledPublishAt?: number | undefined;
181
+ firstPublishedAt?: number | undefined;
182
+ lastPublishedAt?: number | undefined;
183
+ lockedBy?: string | undefined;
184
+ lockExpiresAt?: number | undefined;
185
+ contentTypeId: import("convex/values").GenericId<"contentTypes">;
186
+ slug: string;
187
+ status: string;
188
+ data: any;
189
+ version: number;
190
+ } | null>>;
191
+ /**
192
+ * Query to retrieve a content entry by its slug and content type ID.
193
+ *
194
+ * This is the primary lookup function for frontend routing and SEO-friendly URLs.
195
+ * It uses the `by_content_type_and_slug` index for efficient O(1) lookups.
196
+ *
197
+ * @param contentTypeId - The ID of the content type to search within
198
+ * @param slug - The URL-friendly slug to look up
199
+ * @param status - Optional status filter (defaults to returning any status)
200
+ * @param includeDeleted - Whether to include soft-deleted entries (defaults to false)
201
+ *
202
+ * @returns The content entry if found, or null if not found
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * // From parent app - basic usage:
207
+ * const blogPost = await ctx.runQuery(components.convexCms.contentEntries.getBySlug, {
208
+ * contentTypeId: blogTypeId,
209
+ * slug: "my-first-post",
210
+ * });
211
+ *
212
+ * // With status filter for published content only (common for public sites):
213
+ * const publishedPost = await ctx.runQuery(components.convexCms.contentEntries.getBySlug, {
214
+ * contentTypeId: blogTypeId,
215
+ * slug: "my-first-post",
216
+ * status: "published",
217
+ * });
218
+ *
219
+ * // Frontend routing example:
220
+ * // URL: /blog/my-first-post
221
+ * // -> Extract slug "my-first-post" from URL
222
+ * // -> Query: getBySlug({ contentTypeId: blogTypeId, slug: "my-first-post", status: "published" })
223
+ * ```
224
+ */
225
+ export declare const getBySlug: import("convex/server").RegisteredQuery<"public", {
226
+ status?: string | undefined;
227
+ includeDeleted?: boolean | undefined;
228
+ contentTypeId: import("convex/values").GenericId<"contentTypes">;
229
+ slug: string;
230
+ }, Promise<{
231
+ _id: import("convex/values").GenericId<"contentEntries">;
232
+ _creationTime: number;
233
+ deletedAt?: number | undefined;
234
+ createdBy?: string | undefined;
235
+ updatedBy?: string | undefined;
236
+ searchText?: string | undefined;
237
+ locale?: string | undefined;
238
+ primaryEntryId?: import("convex/values").GenericId<"contentEntries"> | undefined;
239
+ scheduledPublishAt?: number | undefined;
240
+ firstPublishedAt?: number | undefined;
241
+ lastPublishedAt?: number | undefined;
242
+ lockedBy?: string | undefined;
243
+ lockExpiresAt?: number | undefined;
244
+ contentTypeId: import("convex/values").GenericId<"contentTypes">;
245
+ slug: string;
246
+ status: string;
247
+ data: any;
248
+ version: number;
249
+ } | null>>;
250
+ /**
251
+ * Query to retrieve a content entry by its slug and content type name.
252
+ *
253
+ * This is a convenience function that looks up the content type by name first,
254
+ * then retrieves the entry by slug. Useful when you have the content type name
255
+ * (e.g., "blog_post") but not its ID.
256
+ *
257
+ * Note: This performs two index lookups (content type by name, then entry by slug),
258
+ * so `getBySlug` is more efficient if you already have the content type ID cached.
259
+ *
260
+ * @param contentTypeName - The machine-readable name of the content type (e.g., "blog_post")
261
+ * @param slug - The URL-friendly slug to look up
262
+ * @param status - Optional status filter (defaults to returning any status)
263
+ * @param includeDeleted - Whether to include soft-deleted entries (defaults to false)
264
+ *
265
+ * @returns The content entry if found, or null if not found (including if content type doesn't exist)
266
+ *
267
+ * @example
268
+ * ```typescript
269
+ * // From parent app - using content type name instead of ID:
270
+ * const blogPost = await ctx.runQuery(components.convexCms.contentEntries.getBySlugAndTypeName, {
271
+ * contentTypeName: "blog_post",
272
+ * slug: "my-first-post",
273
+ * status: "published",
274
+ * });
275
+ *
276
+ * // Useful for static routes where content type is known at build time:
277
+ * // /blog/[slug] -> contentTypeName: "blog_post"
278
+ * // /products/[slug] -> contentTypeName: "product"
279
+ * // /pages/[slug] -> contentTypeName: "page"
280
+ * ```
281
+ */
282
+ export declare const getBySlugAndTypeName: import("convex/server").RegisteredQuery<"public", {
283
+ status?: string | undefined;
284
+ includeDeleted?: boolean | undefined;
285
+ slug: string;
286
+ contentTypeName: string;
287
+ }, Promise<{
288
+ _id: import("convex/values").GenericId<"contentEntries">;
289
+ _creationTime: number;
290
+ deletedAt?: number | undefined;
291
+ createdBy?: string | undefined;
292
+ updatedBy?: string | undefined;
293
+ searchText?: string | undefined;
294
+ locale?: string | undefined;
295
+ primaryEntryId?: import("convex/values").GenericId<"contentEntries"> | undefined;
296
+ scheduledPublishAt?: number | undefined;
297
+ firstPublishedAt?: number | undefined;
298
+ lastPublishedAt?: number | undefined;
299
+ lockedBy?: string | undefined;
300
+ lockExpiresAt?: number | undefined;
301
+ contentTypeId: import("convex/values").GenericId<"contentTypes">;
302
+ slug: string;
303
+ status: string;
304
+ data: any;
305
+ version: number;
306
+ } | null>>;
307
+ /**
308
+ * Query to list content entries with filtering, search, and cursor-based pagination.
309
+ *
310
+ * This is the primary function for retrieving multiple content entries.
311
+ * It uses the convex-helpers paginator for robust cursor-based pagination that
312
+ * integrates seamlessly with Convex's usePaginatedQuery hook.
313
+ *
314
+ * The query intelligently selects the most efficient index based on the
315
+ * provided filters:
316
+ * - Full-text search: Uses the `search_content` search index
317
+ * - Type + Status filter: Uses the `by_content_type_and_status` index
318
+ * - Type only: Uses the `by_content_type` index
319
+ * - Status only: Uses the `by_status` index
320
+ * - Locale filter: Uses the `by_locale` index
321
+ * - Field filters: Applied as post-processing filters on entry data
322
+ *
323
+ * @param contentTypeId - Optional content type ID to filter by
324
+ * @param contentTypeName - Optional content type name (resolved to ID internally)
325
+ * @param status - Optional status filter (draft, published, archived, scheduled)
326
+ * @param statusIn - Optional array of statuses to filter by (for admin views)
327
+ * @param locale - Optional locale code to filter by
328
+ * @param search - Optional full-text search query
329
+ * @param fieldFilters - Optional array of field filters (combined with AND logic)
330
+ * @param includeDeleted - Whether to include soft-deleted entries (default: false)
331
+ * @param paginationOpts - Standard Convex pagination options (numItems, cursor)
332
+ *
333
+ * @returns PaginationResult with page, continueCursor, and isDone
334
+ *
335
+ * @example
336
+ * ```typescript
337
+ * // List all published blog posts (frontend use case)
338
+ * const { page, continueCursor, isDone } = await ctx.runQuery(
339
+ * components.convexCms.contentEntries.list,
340
+ * {
341
+ * contentTypeName: "blog_post",
342
+ * status: "published",
343
+ * paginationOpts: { numItems: 10 },
344
+ * }
345
+ * );
346
+ *
347
+ * // List entries with multiple statuses (admin use case)
348
+ * // Shows draft and scheduled content for editorial workflow
349
+ * const editorialContent = await ctx.runQuery(
350
+ * components.convexCms.contentEntries.list,
351
+ * {
352
+ * contentTypeName: "blog_post",
353
+ * statusIn: ["draft", "scheduled"],
354
+ * paginationOpts: { numItems: 20 },
355
+ * }
356
+ * );
357
+ *
358
+ * // Filter by field values (e.g., category)
359
+ * const techPosts = await ctx.runQuery(
360
+ * components.convexCms.contentEntries.list,
361
+ * {
362
+ * contentTypeName: "blog_post",
363
+ * status: "published",
364
+ * fieldFilters: [
365
+ * { field: "category", operator: "eq", value: "tech" }
366
+ * ],
367
+ * paginationOpts: { numItems: 10 },
368
+ * }
369
+ * );
370
+ *
371
+ * // Filter by numeric range (e.g., price)
372
+ * const affordableProducts = await ctx.runQuery(
373
+ * components.convexCms.contentEntries.list,
374
+ * {
375
+ * contentTypeName: "product",
376
+ * status: "published",
377
+ * fieldFilters: [
378
+ * { field: "price", operator: "gte", value: 10 },
379
+ * { field: "price", operator: "lte", value: 100 }
380
+ * ],
381
+ * paginationOpts: { numItems: 20 },
382
+ * }
383
+ * );
384
+ *
385
+ * // Filter by array contains (e.g., tags)
386
+ * const featuredPosts = await ctx.runQuery(
387
+ * components.convexCms.contentEntries.list,
388
+ * {
389
+ * contentTypeName: "blog_post",
390
+ * fieldFilters: [
391
+ * { field: "tags", operator: "contains", value: "featured" }
392
+ * ],
393
+ * paginationOpts: { numItems: 10 },
394
+ * }
395
+ * );
396
+ *
397
+ * // Paginate through results using continueCursor
398
+ * const page2 = await ctx.runQuery(
399
+ * components.convexCms.contentEntries.list,
400
+ * {
401
+ * contentTypeName: "blog_post",
402
+ * paginationOpts: {
403
+ * numItems: 10,
404
+ * cursor: previousResult.continueCursor,
405
+ * },
406
+ * }
407
+ * );
408
+ *
409
+ * // Full-text search with pagination
410
+ * const results = await ctx.runQuery(
411
+ * components.convexCms.contentEntries.list,
412
+ * {
413
+ * search: "typescript tutorial",
414
+ * status: "published",
415
+ * paginationOpts: { numItems: 10 },
416
+ * }
417
+ * );
418
+ *
419
+ * // Use with usePaginatedQuery React hook
420
+ * const { results, status, loadMore } = usePaginatedQuery(
421
+ * api.contentEntries.list,
422
+ * { contentTypeName: "blog_post", status: "published" },
423
+ * { initialNumItems: 10 }
424
+ * );
425
+ * ```
426
+ */
427
+ export declare const list: import("convex/server").RegisteredQuery<"public", {
428
+ contentTypeId?: import("convex/values").GenericId<"contentTypes"> | undefined;
429
+ status?: string | undefined;
430
+ locale?: string | undefined;
431
+ includeDeleted?: boolean | undefined;
432
+ search?: string | undefined;
433
+ contentTypeName?: string | undefined;
434
+ statusIn?: string[] | undefined;
435
+ sortField?: string | undefined;
436
+ sortDirection?: "asc" | "desc" | undefined;
437
+ fieldFilters?: {
438
+ value: any;
439
+ field: string;
440
+ operator: "endsWith" | "startsWith" | "in" | "eq" | "ne" | "gt" | "gte" | "lt" | "lte" | "contains" | "notIn";
441
+ }[] | undefined;
442
+ paginationOpts: {
443
+ id?: number;
444
+ endCursor?: string | null;
445
+ maximumRowsRead?: number;
446
+ maximumBytesRead?: number;
447
+ numItems: number;
448
+ cursor: string | null;
449
+ };
450
+ }, Promise<ContentEntryPaginationResult>>;
451
+ interface ContentEntryPaginationResult {
452
+ page: any[];
453
+ continueCursor: string | null;
454
+ isDone: boolean;
455
+ }
456
+ /**
457
+ * Query to retrieve version history for a content entry.
458
+ *
459
+ * Returns a paginated list of version snapshots ordered by version number
460
+ * descending (newest versions first). Each version includes:
461
+ * - versionNumber: The version at the time of the snapshot
462
+ * - data: Snapshot of the content data
463
+ * - slug: Snapshot of the slug
464
+ * - status: Status when the version was created
465
+ * - changeDescription: Optional description of changes
466
+ * - createdBy: User who created this version
467
+ * - wasPublished: Whether this version was published
468
+ * - publishedAt: When this version was published (if ever)
469
+ *
470
+ * @param entryId - The content entry ID to get version history for
471
+ * @param paginationOpts - Standard Convex pagination options (numItems, cursor)
472
+ *
473
+ * @returns PaginationResult with version documents, or null if entry not found
474
+ *
475
+ * @example
476
+ * ```typescript
477
+ * // Get first page of version history
478
+ * const history = await ctx.runQuery(
479
+ * components.convexCms.contentEntries.getVersionHistory,
480
+ * {
481
+ * entryId: entryId,
482
+ * paginationOpts: { numItems: 10 },
483
+ * }
484
+ * );
485
+ *
486
+ * // Get published versions only
487
+ * const publishedVersions = history?.page.filter(v => v.wasPublished);
488
+ *
489
+ * // Paginate through history
490
+ * if (!history.isDone) {
491
+ * const nextPage = await ctx.runQuery(
492
+ * components.convexCms.contentEntries.getVersionHistory,
493
+ * {
494
+ * entryId: entryId,
495
+ * paginationOpts: {
496
+ * numItems: 10,
497
+ * cursor: history.continueCursor,
498
+ * },
499
+ * }
500
+ * );
501
+ * }
502
+ *
503
+ * // Compare versions
504
+ * const [current, previous] = history.page;
505
+ * console.log("Changes from v" + previous.versionNumber + " to v" + current.versionNumber);
506
+ * ```
507
+ */
508
+ export declare const getVersionHistory: import("convex/server").RegisteredQuery<"public", {
509
+ entryId: import("convex/values").GenericId<"contentEntries">;
510
+ paginationOpts: {
511
+ id?: number;
512
+ endCursor?: string | null;
513
+ maximumRowsRead?: number;
514
+ maximumBytesRead?: number;
515
+ numItems: number;
516
+ cursor: string | null;
517
+ };
518
+ }, Promise<{
519
+ page: {
520
+ _id: import("convex/values").GenericId<"contentVersions">;
521
+ _creationTime: number;
522
+ createdBy?: string | undefined;
523
+ changeDescription?: string | undefined;
524
+ publishedAt?: number | undefined;
525
+ slug: string;
526
+ status: string;
527
+ data: any;
528
+ entryId: import("convex/values").GenericId<"contentEntries">;
529
+ versionNumber: number;
530
+ wasPublished: boolean;
531
+ }[];
532
+ continueCursor: string;
533
+ isDone: boolean;
534
+ } | null>>;
535
+ /**
536
+ * Retrieve a specific version of a content entry by version ID or number.
537
+ *
538
+ * This query allows fetching the complete content state at a specific version,
539
+ * which is useful for:
540
+ * - Version comparison/diff views
541
+ * - Previewing historical content states
542
+ * - Rollback preparation (viewing what content looked like)
543
+ * - Audit trail investigation
544
+ *
545
+ * ## Lookup Methods
546
+ *
547
+ * You can retrieve a version by either:
548
+ * 1. **Version ID** (`versionId`): Direct document lookup using the `_id` field
549
+ * 2. **Version Number** (`versionNumber`): Uses the compound index for efficient lookup
550
+ *
551
+ * At least one of `versionId` or `versionNumber` must be provided.
552
+ * If both are provided, `versionId` takes precedence.
553
+ *
554
+ * ## Security
555
+ *
556
+ * - Returns `null` if the parent entry doesn't exist or has been soft-deleted
557
+ * - Validates that the version belongs to the specified entry (prevents cross-entry access)
558
+ *
559
+ * ## Example Usage
560
+ *
561
+ * ```typescript
562
+ * // Get version by version number
563
+ * const versionByNumber = await ctx.runQuery(
564
+ * api.contentEntries.getVersion,
565
+ * {
566
+ * entryId: entryId,
567
+ * versionNumber: 3
568
+ * }
569
+ * );
570
+ *
571
+ * // Get version by version ID
572
+ * const versionById = await ctx.runQuery(
573
+ * api.contentEntries.getVersion,
574
+ * {
575
+ * entryId: entryId,
576
+ * versionId: someVersionId
577
+ * }
578
+ * );
579
+ *
580
+ * // Access version data
581
+ * if (versionByNumber) {
582
+ * console.log("Content at v3:", versionByNumber.data);
583
+ * console.log("Slug at v3:", versionByNumber.slug);
584
+ * console.log("Status at v3:", versionByNumber.status);
585
+ * console.log("Was published:", versionByNumber.wasPublished);
586
+ * }
587
+ * ```
588
+ */
589
+ export declare const getVersion: import("convex/server").RegisteredQuery<"public", {
590
+ versionNumber?: number | undefined;
591
+ versionId?: import("convex/values").GenericId<"contentVersions"> | undefined;
592
+ entryId: import("convex/values").GenericId<"contentEntries">;
593
+ }, Promise<{
594
+ _id: import("convex/values").GenericId<"contentVersions">;
595
+ _creationTime: number;
596
+ createdBy?: string | undefined;
597
+ changeDescription?: string | undefined;
598
+ publishedAt?: number | undefined;
599
+ slug: string;
600
+ status: string;
601
+ data: any;
602
+ entryId: import("convex/values").GenericId<"contentEntries">;
603
+ versionNumber: number;
604
+ wasPublished: boolean;
605
+ } | null>>;
606
+ /**
607
+ * Compare two versions of a content entry and return field-level differences.
608
+ *
609
+ * This query retrieves two version snapshots by version number and computes
610
+ * a detailed diff showing which fields changed, what the before/after values
611
+ * are, and whether metadata like slug and status also changed.
612
+ *
613
+ * @example
614
+ * ```typescript
615
+ * // Compare version 2 to version 5 of an entry
616
+ * const diff = await ctx.runQuery(api.contentEntries.compareVersions, {
617
+ * entryId: entryId,
618
+ * fromVersionNumber: 2,
619
+ * toVersionNumber: 5,
620
+ * });
621
+ *
622
+ * if (diff.hasChanges) {
623
+ * console.log("Changes:", diff.changeSummary);
624
+ * for (const fieldDiff of diff.fieldDiffs) {
625
+ * console.log(`Field: ${fieldDiff.field}`);
626
+ * console.log(` Change type: ${fieldDiff.changeType}`);
627
+ * console.log(` From: ${JSON.stringify(fieldDiff.fromValue)}`);
628
+ * console.log(` To: ${JSON.stringify(fieldDiff.toValue)}`);
629
+ * }
630
+ * }
631
+ * ```
632
+ *
633
+ * @param entryId - The ID of the content entry to compare versions for
634
+ * @param fromVersionNumber - The version number of the "from" (older/base) version
635
+ * @param toVersionNumber - The version number of the "to" (newer/target) version
636
+ * @returns Detailed comparison result or null if entry is deleted or versions don't exist
637
+ */
638
+ export declare const compareVersions: import("convex/server").RegisteredQuery<"public", {
639
+ entryId: import("convex/values").GenericId<"contentEntries">;
640
+ fromVersionNumber: number;
641
+ toVersionNumber: number;
642
+ }, Promise<{
643
+ hasChanges: boolean;
644
+ fromVersion: {
645
+ versionNumber: number;
646
+ status: string;
647
+ slug: string;
648
+ wasPublished: boolean;
649
+ createdAt: number;
650
+ };
651
+ toVersion: {
652
+ versionNumber: number;
653
+ status: string;
654
+ slug: string;
655
+ wasPublished: boolean;
656
+ createdAt: number;
657
+ };
658
+ changedFields: string[];
659
+ fieldDiffs: {
660
+ fromValue?: any;
661
+ toValue?: any;
662
+ field: string;
663
+ changeType: "added" | "removed" | "modified";
664
+ }[];
665
+ slugChanged: boolean;
666
+ statusChanged: boolean;
667
+ changeSummary: string;
668
+ } | null>>;
669
+ /**
670
+ * Query to count content entries matching the given filters.
671
+ *
672
+ * This query efficiently counts entries without loading all entry data.
673
+ * It uses database indexes for filtering and iterates through matching
674
+ * entries to provide an accurate count regardless of the number of entries.
675
+ *
676
+ * Unlike the `list` query which is limited by pagination, this query
677
+ * counts ALL matching entries and returns the total.
678
+ *
679
+ * @param contentTypeId - Optional content type ID to filter by
680
+ * @param contentTypeName - Optional content type name (resolved to ID internally)
681
+ * @param status - Optional single status filter
682
+ * @param statusIn - Optional array of statuses to filter by
683
+ * @param includeDeleted - Whether to include soft-deleted entries (default: false)
684
+ *
685
+ * @returns Object containing the count of matching entries
686
+ *
687
+ * @example
688
+ * ```typescript
689
+ * // Count all entries for a content type
690
+ * const { count } = await ctx.runQuery(
691
+ * components.convexCms.contentEntries.count,
692
+ * { contentTypeId: blogTypeId }
693
+ * );
694
+ * console.log(`Blog posts: ${count}`);
695
+ *
696
+ * // Count published entries only
697
+ * const { count: publishedCount } = await ctx.runQuery(
698
+ * components.convexCms.contentEntries.count,
699
+ * { contentTypeId: blogTypeId, status: "published" }
700
+ * );
701
+ *
702
+ * // Count entries by content type name
703
+ * const { count: productCount } = await ctx.runQuery(
704
+ * components.convexCms.contentEntries.count,
705
+ * { contentTypeName: "product" }
706
+ * );
707
+ * ```
708
+ */
709
+ export declare const count: import("convex/server").RegisteredQuery<"public", {
710
+ contentTypeId?: import("convex/values").GenericId<"contentTypes"> | undefined;
711
+ status?: string | undefined;
712
+ includeDeleted?: boolean | undefined;
713
+ contentTypeName?: string | undefined;
714
+ statusIn?: string[] | undefined;
715
+ }, Promise<{
716
+ count: number;
717
+ }>>;
718
+ export {};
719
+ //# sourceMappingURL=contentEntries.d.ts.map