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,568 @@
1
+ /**
2
+ * Bulk Operations for Content Entries
3
+ *
4
+ * Provides mutations for performing bulk operations on content entries:
5
+ * - bulkPublish: Publish multiple entries at once
6
+ * - bulkUnpublish: Revert multiple entries to draft
7
+ * - bulkDelete: Delete multiple entries (soft or hard)
8
+ * - bulkUpdate: Update multiple entries with the same changes
9
+ *
10
+ * All operations process entries in a single transaction for atomicity,
11
+ * respecting Convex limits (max 16,000 documents written per transaction).
12
+ * The BULK_OPERATION_BATCH_SIZE constant defines the maximum entries per call.
13
+ *
14
+ * For larger datasets, callers should batch IDs into chunks of BULK_OPERATION_BATCH_SIZE
15
+ * and call the appropriate bulk operation for each batch.
16
+ */
17
+ import { v } from "convex/values";
18
+ import { mutation } from "./_generated/server.js";
19
+ import { bulkPublishArgs, bulkUnpublishArgs, bulkDeleteArgs, bulkUpdateArgs, bulkOperationResult, BULK_OPERATION_BATCH_SIZE, } from "./validators.js";
20
+ import { validateContentData, } from "./validation.js";
21
+ import { isDeleted } from "./lib/softDelete.js";
22
+ // =============================================================================
23
+ // Bulk Publish Mutation
24
+ // =============================================================================
25
+ /**
26
+ * Mutation to publish multiple content entries in a single transaction.
27
+ *
28
+ * Publishes entries that are in draft or scheduled status. Already published
29
+ * entries are skipped with a success status. Deleted or archived entries
30
+ * will fail with an error message.
31
+ *
32
+ * For each entry published:
33
+ * - Status is set to "published"
34
+ * - firstPublishedAt is set (if first publication)
35
+ * - lastPublishedAt is updated
36
+ * - Version is incremented
37
+ * - A version snapshot is created
38
+ *
39
+ * @param ids - Array of content entry IDs to publish (max BULK_OPERATION_BATCH_SIZE)
40
+ * @param changeDescription - Optional description for version history
41
+ * @param updatedBy - User ID for audit trail
42
+ *
43
+ * @returns BulkOperationResult with success/failure details for each entry
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * const result = await ctx.runMutation(api.bulkOperations.bulkPublish, {
48
+ * ids: [entry1._id, entry2._id, entry3._id],
49
+ * changeDescription: "Publishing launch content",
50
+ * updatedBy: currentUserId,
51
+ * });
52
+ * console.log(`Published ${result.succeeded} of ${result.total} entries`);
53
+ * ```
54
+ */
55
+ export const bulkPublish = mutation({
56
+ args: bulkPublishArgs.fields,
57
+ returns: bulkOperationResult,
58
+ handler: async (ctx, args) => {
59
+ const { ids, changeDescription, updatedBy } = args;
60
+ // Validate batch size
61
+ if (ids.length > BULK_OPERATION_BATCH_SIZE) {
62
+ throw new Error(`Batch size exceeds limit. Maximum ${BULK_OPERATION_BATCH_SIZE} entries per operation, got ${ids.length}.`);
63
+ }
64
+ if (ids.length === 0) {
65
+ return { total: 0, succeeded: 0, failed: 0, results: [] };
66
+ }
67
+ const results = [];
68
+ const now = Date.now();
69
+ for (const id of ids) {
70
+ try {
71
+ const entry = await ctx.db.get(id);
72
+ if (!entry) {
73
+ results.push({ id, success: false, error: "Entry not found" });
74
+ continue;
75
+ }
76
+ if (isDeleted(entry)) {
77
+ results.push({ id, success: false, error: "Entry has been deleted" });
78
+ continue;
79
+ }
80
+ if (entry.status === "published") {
81
+ // Already published - treat as success (idempotent)
82
+ results.push({ id, success: true });
83
+ continue;
84
+ }
85
+ if (entry.status === "archived") {
86
+ results.push({
87
+ id,
88
+ success: false,
89
+ error: "Cannot publish archived content. Restore it first.",
90
+ });
91
+ continue;
92
+ }
93
+ // Create version snapshot before publishing
94
+ await ctx.db.insert("contentVersions", {
95
+ entryId: id,
96
+ versionNumber: entry.version,
97
+ data: entry.data,
98
+ slug: entry.slug,
99
+ status: entry.status,
100
+ changeDescription,
101
+ createdBy: updatedBy,
102
+ wasPublished: true,
103
+ publishedAt: now,
104
+ });
105
+ // Build the update object
106
+ const updates = {
107
+ status: "published",
108
+ lastPublishedAt: now,
109
+ version: entry.version + 1,
110
+ updatedBy,
111
+ scheduledPublishAt: undefined,
112
+ };
113
+ // Set firstPublishedAt only on first publication
114
+ if (entry.firstPublishedAt === undefined) {
115
+ updates.firstPublishedAt = now;
116
+ }
117
+ await ctx.db.patch(id, updates);
118
+ results.push({ id, success: true });
119
+ }
120
+ catch (error) {
121
+ results.push({
122
+ id,
123
+ success: false,
124
+ error: error instanceof Error ? error.message : "Unknown error",
125
+ });
126
+ }
127
+ }
128
+ const succeeded = results.filter((r) => r.success).length;
129
+ return {
130
+ total: ids.length,
131
+ succeeded,
132
+ failed: ids.length - succeeded,
133
+ results,
134
+ };
135
+ },
136
+ });
137
+ // =============================================================================
138
+ // Bulk Unpublish Mutation
139
+ // =============================================================================
140
+ /**
141
+ * Mutation to unpublish multiple content entries in a single transaction.
142
+ *
143
+ * Reverts published entries to draft status. Non-published entries are
144
+ * skipped with a success status (idempotent behavior). Deleted entries
145
+ * will fail with an error message.
146
+ *
147
+ * For each entry unpublished:
148
+ * - Status is set to "draft"
149
+ * - Version is incremented
150
+ * - Publication timestamps are preserved for history
151
+ *
152
+ * @param ids - Array of content entry IDs to unpublish (max BULK_OPERATION_BATCH_SIZE)
153
+ * @param updatedBy - User ID for audit trail
154
+ *
155
+ * @returns BulkOperationResult with success/failure details for each entry
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * const result = await ctx.runMutation(api.bulkOperations.bulkUnpublish, {
160
+ * ids: [entry1._id, entry2._id],
161
+ * updatedBy: currentUserId,
162
+ * });
163
+ * ```
164
+ */
165
+ export const bulkUnpublish = mutation({
166
+ args: bulkUnpublishArgs.fields,
167
+ returns: bulkOperationResult,
168
+ handler: async (ctx, args) => {
169
+ const { ids, updatedBy } = args;
170
+ // Validate batch size
171
+ if (ids.length > BULK_OPERATION_BATCH_SIZE) {
172
+ throw new Error(`Batch size exceeds limit. Maximum ${BULK_OPERATION_BATCH_SIZE} entries per operation, got ${ids.length}.`);
173
+ }
174
+ if (ids.length === 0) {
175
+ return { total: 0, succeeded: 0, failed: 0, results: [] };
176
+ }
177
+ const results = [];
178
+ for (const id of ids) {
179
+ try {
180
+ const entry = await ctx.db.get(id);
181
+ if (!entry) {
182
+ results.push({ id, success: false, error: "Entry not found" });
183
+ continue;
184
+ }
185
+ if (isDeleted(entry)) {
186
+ results.push({ id, success: false, error: "Entry has been deleted" });
187
+ continue;
188
+ }
189
+ if (entry.status !== "published") {
190
+ // Not published - treat as success (idempotent)
191
+ results.push({ id, success: true });
192
+ continue;
193
+ }
194
+ await ctx.db.patch(id, {
195
+ status: "draft",
196
+ version: entry.version + 1,
197
+ updatedBy,
198
+ });
199
+ results.push({ id, success: true });
200
+ }
201
+ catch (error) {
202
+ results.push({
203
+ id,
204
+ success: false,
205
+ error: error instanceof Error ? error.message : "Unknown error",
206
+ });
207
+ }
208
+ }
209
+ const succeeded = results.filter((r) => r.success).length;
210
+ return {
211
+ total: ids.length,
212
+ succeeded,
213
+ failed: ids.length - succeeded,
214
+ results,
215
+ };
216
+ },
217
+ });
218
+ // =============================================================================
219
+ // Bulk Delete Mutation
220
+ // =============================================================================
221
+ /**
222
+ * Mutation to delete multiple content entries in a single transaction.
223
+ *
224
+ * By default, performs soft delete by setting deletedAt timestamp.
225
+ * When hardDelete is true, permanently removes entries and all versions.
226
+ *
227
+ * Soft Delete:
228
+ * - Sets deletedAt timestamp
229
+ * - Entries can be restored later
230
+ * - Already deleted entries are skipped
231
+ *
232
+ * Hard Delete:
233
+ * - Permanently removes entry document
234
+ * - Deletes all version snapshots
235
+ * - Cannot be undone
236
+ *
237
+ * @param ids - Array of content entry IDs to delete (max BULK_OPERATION_BATCH_SIZE)
238
+ * @param deletedBy - User ID for audit trail
239
+ * @param hardDelete - If true, permanently delete entries and versions
240
+ *
241
+ * @returns BulkOperationResult with success/failure details for each entry
242
+ *
243
+ * @example
244
+ * ```typescript
245
+ * // Soft delete (default)
246
+ * const result = await ctx.runMutation(api.bulkOperations.bulkDelete, {
247
+ * ids: [entry1._id, entry2._id],
248
+ * deletedBy: currentUserId,
249
+ * });
250
+ *
251
+ * // Hard delete
252
+ * const result = await ctx.runMutation(api.bulkOperations.bulkDelete, {
253
+ * ids: [entry1._id, entry2._id],
254
+ * deletedBy: currentUserId,
255
+ * hardDelete: true,
256
+ * });
257
+ * ```
258
+ */
259
+ export const bulkDelete = mutation({
260
+ args: bulkDeleteArgs.fields,
261
+ returns: bulkOperationResult,
262
+ handler: async (ctx, args) => {
263
+ const { ids, deletedBy, hardDelete = false } = args;
264
+ // Validate batch size
265
+ if (ids.length > BULK_OPERATION_BATCH_SIZE) {
266
+ throw new Error(`Batch size exceeds limit. Maximum ${BULK_OPERATION_BATCH_SIZE} entries per operation, got ${ids.length}.`);
267
+ }
268
+ if (ids.length === 0) {
269
+ return { total: 0, succeeded: 0, failed: 0, results: [] };
270
+ }
271
+ const results = [];
272
+ const now = Date.now();
273
+ for (const id of ids) {
274
+ try {
275
+ const entry = await ctx.db.get(id);
276
+ if (!entry) {
277
+ results.push({ id, success: false, error: "Entry not found" });
278
+ continue;
279
+ }
280
+ // For soft delete, skip already deleted entries
281
+ if (!hardDelete && isDeleted(entry)) {
282
+ // Already deleted - treat as success (idempotent)
283
+ results.push({ id, success: true });
284
+ continue;
285
+ }
286
+ if (hardDelete) {
287
+ // Hard delete: remove all versions first
288
+ const versions = await ctx.db
289
+ .query("contentVersions")
290
+ .withIndex("by_entry", (q) => q.eq("entryId", id))
291
+ .collect();
292
+ for (const version of versions) {
293
+ await ctx.db.delete(version._id);
294
+ }
295
+ // Delete the entry itself
296
+ await ctx.db.delete(id);
297
+ }
298
+ else {
299
+ // Soft delete: set deletedAt timestamp
300
+ await ctx.db.patch(id, {
301
+ deletedAt: now,
302
+ updatedBy: deletedBy,
303
+ });
304
+ }
305
+ results.push({ id, success: true });
306
+ }
307
+ catch (error) {
308
+ results.push({
309
+ id,
310
+ success: false,
311
+ error: error instanceof Error ? error.message : "Unknown error",
312
+ });
313
+ }
314
+ }
315
+ const succeeded = results.filter((r) => r.success).length;
316
+ return {
317
+ total: ids.length,
318
+ succeeded,
319
+ failed: ids.length - succeeded,
320
+ results,
321
+ };
322
+ },
323
+ });
324
+ // =============================================================================
325
+ // Bulk Update Mutation
326
+ // =============================================================================
327
+ /**
328
+ * Mutation to update multiple content entries with the same changes.
329
+ *
330
+ * Applies the same data updates and/or status change to all specified entries.
331
+ * Each entry is validated against its content type schema before updating.
332
+ *
333
+ * Data is merged with existing data for each entry (partial updates).
334
+ * Status can be changed independently of data updates.
335
+ *
336
+ * @param ids - Array of content entry IDs to update (max BULK_OPERATION_BATCH_SIZE)
337
+ * @param data - Data to merge into each entry
338
+ * @param status - New status to apply to all entries
339
+ * @param updatedBy - User ID for audit trail
340
+ *
341
+ * @returns BulkOperationResult with success/failure details for each entry
342
+ *
343
+ * @example
344
+ * ```typescript
345
+ * // Update data for multiple entries
346
+ * const result = await ctx.runMutation(api.bulkOperations.bulkUpdate, {
347
+ * ids: [entry1._id, entry2._id, entry3._id],
348
+ * data: { featured: true, category: "news" },
349
+ * updatedBy: currentUserId,
350
+ * });
351
+ *
352
+ * // Change status for multiple entries
353
+ * const result = await ctx.runMutation(api.bulkOperations.bulkUpdate, {
354
+ * ids: [entry1._id, entry2._id],
355
+ * status: "archived",
356
+ * updatedBy: currentUserId,
357
+ * });
358
+ * ```
359
+ */
360
+ export const bulkUpdate = mutation({
361
+ args: bulkUpdateArgs.fields,
362
+ returns: bulkOperationResult,
363
+ handler: async (ctx, args) => {
364
+ const { ids, data, status, updatedBy } = args;
365
+ // Validate batch size
366
+ if (ids.length > BULK_OPERATION_BATCH_SIZE) {
367
+ throw new Error(`Batch size exceeds limit. Maximum ${BULK_OPERATION_BATCH_SIZE} entries per operation, got ${ids.length}.`);
368
+ }
369
+ if (ids.length === 0) {
370
+ return { total: 0, succeeded: 0, failed: 0, results: [] };
371
+ }
372
+ // Check that at least one update field is provided
373
+ if (data === undefined && status === undefined) {
374
+ throw new Error("At least one of 'data' or 'status' must be provided for bulk update");
375
+ }
376
+ const results = [];
377
+ // Cache content types to avoid repeated lookups
378
+ const contentTypeCache = new Map();
379
+ for (const id of ids) {
380
+ try {
381
+ const entry = await ctx.db.get(id);
382
+ if (!entry) {
383
+ results.push({ id, success: false, error: "Entry not found" });
384
+ continue;
385
+ }
386
+ if (isDeleted(entry)) {
387
+ results.push({ id, success: false, error: "Entry has been deleted" });
388
+ continue;
389
+ }
390
+ // Build updates object
391
+ const updates = {
392
+ updatedBy,
393
+ version: entry.version + 1,
394
+ };
395
+ // Handle data update with validation
396
+ if (data !== undefined) {
397
+ // Get content type (from cache or database)
398
+ const contentTypeId = entry.contentTypeId.toString();
399
+ let contentType = contentTypeCache.get(contentTypeId);
400
+ if (!contentType) {
401
+ const dbContentType = await ctx.db.get(entry.contentTypeId);
402
+ if (!dbContentType) {
403
+ results.push({
404
+ id,
405
+ success: false,
406
+ error: "Content type not found",
407
+ });
408
+ continue;
409
+ }
410
+ if (isDeleted(dbContentType)) {
411
+ results.push({
412
+ id,
413
+ success: false,
414
+ error: "Content type has been deleted",
415
+ });
416
+ continue;
417
+ }
418
+ contentType = {
419
+ name: dbContentType.name,
420
+ displayName: dbContentType.displayName,
421
+ description: dbContentType.description,
422
+ fields: dbContentType.fields,
423
+ titleField: dbContentType.titleField,
424
+ slugField: dbContentType.slugField,
425
+ singleton: dbContentType.singleton,
426
+ };
427
+ contentTypeCache.set(contentTypeId, contentType);
428
+ }
429
+ // Merge data with existing
430
+ const mergedData = {
431
+ ...entry.data,
432
+ ...data,
433
+ };
434
+ // Validate merged data against schema
435
+ const schema = {
436
+ name: contentType.name,
437
+ displayName: contentType.displayName,
438
+ description: contentType.description,
439
+ fields: contentType.fields,
440
+ titleField: contentType.titleField,
441
+ slugField: contentType.slugField,
442
+ singleton: contentType.singleton,
443
+ };
444
+ const validationResult = validateContentData(mergedData, schema);
445
+ if (!validationResult.valid) {
446
+ const errorMessages = validationResult.errors
447
+ .map((e) => `${e.field}: ${e.message}`)
448
+ .join("; ");
449
+ results.push({
450
+ id,
451
+ success: false,
452
+ error: `Validation failed: ${errorMessages}`,
453
+ });
454
+ continue;
455
+ }
456
+ updates.data = mergedData;
457
+ // Regenerate searchText from searchable fields
458
+ let searchText = "";
459
+ for (const field of contentType.fields) {
460
+ if (field.searchable && mergedData[field.name]) {
461
+ const value = mergedData[field.name];
462
+ if (typeof value === "string") {
463
+ searchText += ` ${value}`;
464
+ }
465
+ }
466
+ }
467
+ updates.searchText = searchText.trim() || undefined;
468
+ }
469
+ // Handle status update
470
+ if (status !== undefined) {
471
+ updates.status = status;
472
+ }
473
+ await ctx.db.patch(id, updates);
474
+ results.push({ id, success: true });
475
+ }
476
+ catch (error) {
477
+ results.push({
478
+ id,
479
+ success: false,
480
+ error: error instanceof Error ? error.message : "Unknown error",
481
+ });
482
+ }
483
+ }
484
+ const succeeded = results.filter((r) => r.success).length;
485
+ return {
486
+ total: ids.length,
487
+ succeeded,
488
+ failed: ids.length - succeeded,
489
+ results,
490
+ };
491
+ },
492
+ });
493
+ // =============================================================================
494
+ // Bulk Restore Mutation
495
+ // =============================================================================
496
+ /**
497
+ * Mutation to restore multiple soft-deleted content entries.
498
+ *
499
+ * Removes the deletedAt marker from entries, making them active again.
500
+ * Only works for soft-deleted entries. Non-deleted entries are skipped
501
+ * with a success status (idempotent behavior).
502
+ *
503
+ * @param ids - Array of content entry IDs to restore (max BULK_OPERATION_BATCH_SIZE)
504
+ * @param restoredBy - User ID for audit trail
505
+ *
506
+ * @returns BulkOperationResult with success/failure details for each entry
507
+ *
508
+ * @example
509
+ * ```typescript
510
+ * const result = await ctx.runMutation(api.bulkOperations.bulkRestore, {
511
+ * ids: [deletedEntry1._id, deletedEntry2._id],
512
+ * restoredBy: currentUserId,
513
+ * });
514
+ * ```
515
+ */
516
+ export const bulkRestore = mutation({
517
+ args: {
518
+ ids: v.array(v.id("contentEntries")),
519
+ restoredBy: v.optional(v.string()),
520
+ },
521
+ returns: bulkOperationResult,
522
+ handler: async (ctx, args) => {
523
+ const { ids, restoredBy } = args;
524
+ // Validate batch size
525
+ if (ids.length > BULK_OPERATION_BATCH_SIZE) {
526
+ throw new Error(`Batch size exceeds limit. Maximum ${BULK_OPERATION_BATCH_SIZE} entries per operation, got ${ids.length}.`);
527
+ }
528
+ if (ids.length === 0) {
529
+ return { total: 0, succeeded: 0, failed: 0, results: [] };
530
+ }
531
+ const results = [];
532
+ for (const id of ids) {
533
+ try {
534
+ const entry = await ctx.db.get(id);
535
+ if (!entry) {
536
+ results.push({ id, success: false, error: "Entry not found" });
537
+ continue;
538
+ }
539
+ if (!isDeleted(entry)) {
540
+ // Not deleted - treat as success (idempotent)
541
+ results.push({ id, success: true });
542
+ continue;
543
+ }
544
+ // Restore the entry
545
+ await ctx.db.patch(id, {
546
+ deletedAt: undefined,
547
+ updatedBy: restoredBy,
548
+ });
549
+ results.push({ id, success: true });
550
+ }
551
+ catch (error) {
552
+ results.push({
553
+ id,
554
+ success: false,
555
+ error: error instanceof Error ? error.message : "Unknown error",
556
+ });
557
+ }
558
+ }
559
+ const succeeded = results.filter((r) => r.success).length;
560
+ return {
561
+ total: ids.length,
562
+ succeeded,
563
+ failed: ids.length - succeeded,
564
+ results,
565
+ };
566
+ },
567
+ });
568
+ //# sourceMappingURL=bulkOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulkOperations.js","sourceRoot":"","sources":["../../src/component/bulkOperations.ts"],"names":[],"mappings":"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"}