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,601 @@
1
+ /**
2
+ * Deep Reference Resolution Utilities
3
+ *
4
+ * Provides functions for recursively resolving content and media references
5
+ * within content entries. Supports depth limiting and circular reference
6
+ * prevention to avoid infinite loops.
7
+ *
8
+ * This module extends the basic reference resolution with:
9
+ * - Recursive resolution of nested references
10
+ * - Configurable maximum depth
11
+ * - Circular reference detection and prevention
12
+ * - Combined content and media reference resolution
13
+ * - Selective field resolution
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // Resolve a blog post with author and related posts
18
+ * const resolvedEntry = await resolveEntryReferences(ctx, entry, contentType.fields, {
19
+ * maxDepth: 2,
20
+ * resolveMedia: true,
21
+ * publishedOnly: true,
22
+ * });
23
+ *
24
+ * // The resolved entry will have:
25
+ * // - entry.data.author resolved to full author entry
26
+ * // - entry.data.author.data.profileImage resolved to media URL
27
+ * // - entry.data.relatedPosts resolved to array of entries (depth 1)
28
+ * // - entry.data.relatedPosts[].author NOT resolved (depth limit reached)
29
+ * ```
30
+ */
31
+ import { isDeleted } from "./softDelete.js";
32
+ import { resolveReference,
33
+ // resolveReferences,
34
+ // ResolvedReference,
35
+ // ResolveOptions,
36
+ } from "./referenceResolver.js";
37
+ import { resolveMediaReference, } from "./mediaReferenceResolver.js";
38
+ // =============================================================================
39
+ // Core Resolution Functions
40
+ // =============================================================================
41
+ /**
42
+ * Resolve all references within a content entry's data.
43
+ *
44
+ * This function recursively resolves reference and media fields up to
45
+ * the specified depth, while preventing circular references.
46
+ *
47
+ * @param ctx - Convex query context
48
+ * @param entry - The content entry to resolve references for
49
+ * @param fields - Field definitions from the content type
50
+ * @param options - Resolution options
51
+ * @returns The entry with resolved references
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * // Basic usage - resolve one level deep
56
+ * const resolved = await resolveEntryReferences(ctx, blogPost, contentType.fields);
57
+ *
58
+ * // Resolve two levels deep with only published entries
59
+ * const resolved = await resolveEntryReferences(ctx, blogPost, contentType.fields, {
60
+ * maxDepth: 2,
61
+ * publishedOnly: true,
62
+ * });
63
+ *
64
+ * // Resolve only specific fields
65
+ * const resolved = await resolveEntryReferences(ctx, blogPost, contentType.fields, {
66
+ * onlyFields: ["author", "featuredImage"],
67
+ * });
68
+ * ```
69
+ */
70
+ export async function resolveEntryReferences(ctx, entry, fields, options = {}) {
71
+ const { maxDepth = 1, resolveMedia = true, resolveContent = true, publishedOnly = false, includeDeleted = false, fields: selectFields, onlyFields, excludeFields, preserveOriginalIds = false, } = options;
72
+ // Get content type info
73
+ let contentTypeName = "";
74
+ let contentTypeDisplayName = "";
75
+ if (entry.contentTypeId) {
76
+ try {
77
+ const contentType = await ctx.db.get(entry.contentTypeId);
78
+ if (contentType) {
79
+ contentTypeName = contentType.name;
80
+ contentTypeDisplayName = contentType.displayName;
81
+ }
82
+ }
83
+ catch {
84
+ // Content type not found, continue with empty names
85
+ }
86
+ }
87
+ // If maxDepth is 0, return without resolving
88
+ if (maxDepth === 0) {
89
+ return {
90
+ id: entry._id,
91
+ contentTypeName,
92
+ contentTypeDisplayName,
93
+ slug: entry.slug,
94
+ status: entry.status,
95
+ data: entry.data,
96
+ exists: true,
97
+ locale: entry.locale,
98
+ version: entry.version,
99
+ ...(preserveOriginalIds && { _originalId: entry._id }),
100
+ };
101
+ }
102
+ // Initialize resolution context
103
+ const resolutionCtx = {
104
+ visitedEntries: new Set([entry._id]),
105
+ visitedMedia: new Set(),
106
+ currentDepth: 0,
107
+ maxDepth,
108
+ resolvedCache: new Map(),
109
+ mediaCache: new Map(),
110
+ circularReferences: [],
111
+ unresolvedReferences: {},
112
+ };
113
+ // Filter fields to resolve based on options
114
+ const fieldsToResolve = filterFieldsToResolve(fields, onlyFields, excludeFields);
115
+ // Resolve the entry data
116
+ const resolvedData = await resolveDataFields(ctx, entry.data, fieldsToResolve, resolutionCtx, {
117
+ resolveMedia,
118
+ resolveContent,
119
+ publishedOnly,
120
+ includeDeleted,
121
+ selectFields,
122
+ preserveOriginalIds,
123
+ });
124
+ const result = {
125
+ id: entry._id,
126
+ contentTypeName,
127
+ contentTypeDisplayName,
128
+ slug: entry.slug,
129
+ status: entry.status,
130
+ data: resolvedData,
131
+ exists: true,
132
+ locale: entry.locale,
133
+ version: entry.version,
134
+ };
135
+ // Add metadata about resolution issues
136
+ if (resolutionCtx.circularReferences.length > 0) {
137
+ result._circularReferences = resolutionCtx.circularReferences;
138
+ }
139
+ if (Object.keys(resolutionCtx.unresolvedReferences).length > 0) {
140
+ result._unresolvedReferences = resolutionCtx.unresolvedReferences;
141
+ }
142
+ if (preserveOriginalIds) {
143
+ result._originalId = entry._id;
144
+ }
145
+ return result;
146
+ }
147
+ /**
148
+ * Resolve references for multiple content entries in batch.
149
+ *
150
+ * More efficient than calling resolveEntryReferences multiple times
151
+ * as it shares caches across entries.
152
+ *
153
+ * @param ctx - Convex query context
154
+ * @param entries - Array of content entries to resolve
155
+ * @param fields - Field definitions from the content type
156
+ * @param options - Resolution options
157
+ * @returns Batch result with resolved entries and unresolved IDs
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * const { page } = await cms.contentEntries.list(ctx, { ... });
162
+ * const result = await resolveEntryReferencesBatch(ctx, page, contentType.fields, {
163
+ * maxDepth: 1,
164
+ * publishedOnly: true,
165
+ * });
166
+ * ```
167
+ */
168
+ export async function resolveEntryReferencesBatch(ctx, entries, fields, options = {}) {
169
+ const resolved = [];
170
+ const unresolved = [];
171
+ let circularReferencesDetected = 0;
172
+ // Resolve each entry in parallel
173
+ const promises = entries.map(async (entry) => {
174
+ try {
175
+ const result = await resolveEntryReferences(ctx, entry, fields, options);
176
+ if (result._circularReferences) {
177
+ circularReferencesDetected += result._circularReferences.length;
178
+ }
179
+ return { success: true, result, id: entry._id };
180
+ }
181
+ catch {
182
+ return { success: false, result: null, id: entry._id };
183
+ }
184
+ });
185
+ const results = await Promise.all(promises);
186
+ for (const { success, result, id } of results) {
187
+ if (success && result) {
188
+ resolved.push(result);
189
+ }
190
+ else {
191
+ unresolved.push(id);
192
+ }
193
+ }
194
+ return {
195
+ resolved,
196
+ unresolved,
197
+ circularReferencesDetected,
198
+ };
199
+ }
200
+ // =============================================================================
201
+ // Internal Resolution Functions
202
+ // =============================================================================
203
+ /**
204
+ * Filter fields based on onlyFields and excludeFields options.
205
+ */
206
+ function filterFieldsToResolve(fields, onlyFields, excludeFields) {
207
+ let filtered = fields.filter((f) => f.type === "reference" || f.type === "media");
208
+ if (onlyFields && onlyFields.length > 0) {
209
+ filtered = filtered.filter((f) => onlyFields.includes(f.name));
210
+ }
211
+ if (excludeFields && excludeFields.length > 0) {
212
+ filtered = filtered.filter((f) => !excludeFields.includes(f.name));
213
+ }
214
+ return filtered;
215
+ }
216
+ /**
217
+ * Resolve all reference and media fields in a data object.
218
+ */
219
+ async function resolveDataFields(ctx, data, fields, resolutionCtx, options) {
220
+ const resolvedData = { ...data };
221
+ // Process each resolvable field
222
+ for (const field of fields) {
223
+ const value = data[field.name];
224
+ if (value === null || value === undefined) {
225
+ continue;
226
+ }
227
+ if (field.type === "reference" && options.resolveContent) {
228
+ const resolved = await resolveReferenceField(ctx, field, value, resolutionCtx, options);
229
+ resolvedData[field.name] = resolved;
230
+ }
231
+ else if (field.type === "media" && options.resolveMedia) {
232
+ const resolved = await resolveMediaField(ctx, field, value, resolutionCtx, options);
233
+ resolvedData[field.name] = resolved;
234
+ }
235
+ }
236
+ return resolvedData;
237
+ }
238
+ /**
239
+ * Resolve a reference field value (single or multiple).
240
+ */
241
+ async function resolveReferenceField(ctx, field, value, resolutionCtx, options) {
242
+ const isMultiple = field.options?.multiple ?? false;
243
+ if (isMultiple) {
244
+ // Resolve array of references
245
+ if (!Array.isArray(value)) {
246
+ return value; // Invalid, return as-is
247
+ }
248
+ const resolvedArray = [];
249
+ const unresolvedIds = [];
250
+ for (const refId of value) {
251
+ if (typeof refId !== "string") {
252
+ resolvedArray.push(refId);
253
+ continue;
254
+ }
255
+ const resolved = await resolveNestedReference(ctx, refId, field.name, resolutionCtx, options);
256
+ if (resolved) {
257
+ resolvedArray.push(resolved);
258
+ }
259
+ else {
260
+ unresolvedIds.push(refId);
261
+ // Keep the original ID for unresolved references
262
+ if (options.preserveOriginalIds) {
263
+ resolvedArray.push({ _unresolvedId: refId });
264
+ }
265
+ }
266
+ }
267
+ if (unresolvedIds.length > 0) {
268
+ resolutionCtx.unresolvedReferences[field.name] = unresolvedIds;
269
+ }
270
+ return resolvedArray;
271
+ }
272
+ else {
273
+ // Resolve single reference
274
+ if (typeof value !== "string") {
275
+ return value; // Invalid, return as-is
276
+ }
277
+ const resolved = await resolveNestedReference(ctx, value, field.name, resolutionCtx, options);
278
+ if (!resolved) {
279
+ resolutionCtx.unresolvedReferences[field.name] = [value];
280
+ if (options.preserveOriginalIds) {
281
+ return { _unresolvedId: value };
282
+ }
283
+ }
284
+ return resolved ?? value;
285
+ }
286
+ }
287
+ /**
288
+ * Resolve a nested content reference with circular detection.
289
+ */
290
+ async function resolveNestedReference(ctx, refId, fieldName, resolutionCtx, options) {
291
+ // Check cache first
292
+ if (resolutionCtx.resolvedCache.has(refId)) {
293
+ return resolutionCtx.resolvedCache.get(refId) ?? null;
294
+ }
295
+ // Check for circular reference
296
+ if (resolutionCtx.visitedEntries.has(refId)) {
297
+ resolutionCtx.circularReferences.push(`${fieldName}:${refId}`);
298
+ return null;
299
+ }
300
+ // Check depth limit
301
+ if (resolutionCtx.currentDepth >= resolutionCtx.maxDepth) {
302
+ // At max depth, just return the basic resolved reference without recursing
303
+ const basicRef = await resolveReference(ctx, refId, {
304
+ publishedOnly: options.publishedOnly,
305
+ includeDeleted: options.includeDeleted,
306
+ fields: options.selectFields,
307
+ });
308
+ if (!basicRef) {
309
+ return null;
310
+ }
311
+ const result = {
312
+ id: basicRef.id,
313
+ contentTypeName: basicRef.contentTypeName,
314
+ contentTypeDisplayName: basicRef.contentTypeDisplayName,
315
+ slug: basicRef.slug,
316
+ status: basicRef.status,
317
+ data: basicRef.data,
318
+ exists: basicRef.exists,
319
+ ...(options.preserveOriginalIds && { _originalId: refId }),
320
+ };
321
+ resolutionCtx.resolvedCache.set(refId, result);
322
+ return result;
323
+ }
324
+ // Mark as visiting
325
+ resolutionCtx.visitedEntries.add(refId);
326
+ resolutionCtx.currentDepth++;
327
+ try {
328
+ // Get the referenced entry
329
+ const entry = await ctx.db.get(refId);
330
+ if (!entry) {
331
+ resolutionCtx.resolvedCache.set(refId, null);
332
+ return null;
333
+ }
334
+ // Check soft-delete
335
+ if (!options.includeDeleted && isDeleted(entry)) {
336
+ resolutionCtx.resolvedCache.set(refId, null);
337
+ return null;
338
+ }
339
+ // Check published status
340
+ if (options.publishedOnly && entry.status !== "published") {
341
+ resolutionCtx.resolvedCache.set(refId, null);
342
+ return null;
343
+ }
344
+ // Get content type for field definitions
345
+ const contentType = await ctx.db.get(entry.contentTypeId);
346
+ if (!contentType || isDeleted(contentType)) {
347
+ resolutionCtx.resolvedCache.set(refId, null);
348
+ return null;
349
+ }
350
+ // Recursively resolve this entry's references
351
+ const nestedFields = contentType.fields.filter((f) => f.type === "reference" || f.type === "media");
352
+ const resolvedData = await resolveDataFields(ctx, entry.data, nestedFields, resolutionCtx, {
353
+ resolveMedia: true,
354
+ resolveContent: true,
355
+ publishedOnly: options.publishedOnly,
356
+ includeDeleted: options.includeDeleted,
357
+ selectFields: options.selectFields,
358
+ preserveOriginalIds: options.preserveOriginalIds,
359
+ });
360
+ // Filter fields if specified
361
+ let finalData = resolvedData;
362
+ if (options.selectFields && options.selectFields.length > 0) {
363
+ finalData = {};
364
+ for (const field of options.selectFields) {
365
+ if (field in resolvedData) {
366
+ finalData[field] = resolvedData[field];
367
+ }
368
+ }
369
+ }
370
+ const result = {
371
+ id: refId,
372
+ contentTypeName: contentType.name,
373
+ contentTypeDisplayName: contentType.displayName,
374
+ slug: entry.slug,
375
+ status: entry.status,
376
+ data: finalData,
377
+ exists: true,
378
+ locale: entry.locale,
379
+ version: entry.version,
380
+ ...(options.preserveOriginalIds && { _originalId: refId }),
381
+ };
382
+ resolutionCtx.resolvedCache.set(refId, result);
383
+ return result;
384
+ }
385
+ finally {
386
+ // Unmark as visiting (allow visiting again from different paths)
387
+ resolutionCtx.visitedEntries.delete(refId);
388
+ resolutionCtx.currentDepth--;
389
+ }
390
+ }
391
+ /**
392
+ * Resolve a media field value (single or multiple).
393
+ */
394
+ async function resolveMediaField(ctx, field, value, resolutionCtx, options) {
395
+ const isMultiple = field.options?.multiple ?? false;
396
+ const mediaOptions = {
397
+ includeDeleted: options.includeDeleted,
398
+ };
399
+ if (isMultiple) {
400
+ // Resolve array of media references
401
+ if (!Array.isArray(value)) {
402
+ return value;
403
+ }
404
+ const resolvedArray = [];
405
+ const unresolvedIds = [];
406
+ for (const mediaId of value) {
407
+ if (typeof mediaId !== "string") {
408
+ resolvedArray.push(mediaId);
409
+ continue;
410
+ }
411
+ // Check cache
412
+ if (resolutionCtx.mediaCache.has(mediaId)) {
413
+ const cached = resolutionCtx.mediaCache.get(mediaId);
414
+ if (cached) {
415
+ resolvedArray.push(options.preserveOriginalIds
416
+ ? { ...cached, _originalId: mediaId }
417
+ : cached);
418
+ }
419
+ else {
420
+ unresolvedIds.push(mediaId);
421
+ }
422
+ continue;
423
+ }
424
+ const resolved = await resolveMediaReference(ctx, mediaId, mediaOptions);
425
+ if (resolved) {
426
+ resolutionCtx.mediaCache.set(mediaId, resolved);
427
+ resolvedArray.push(options.preserveOriginalIds
428
+ ? { ...resolved, _originalId: mediaId }
429
+ : resolved);
430
+ }
431
+ else {
432
+ resolutionCtx.mediaCache.set(mediaId, null);
433
+ unresolvedIds.push(mediaId);
434
+ if (options.preserveOriginalIds) {
435
+ resolvedArray.push({ _unresolvedId: mediaId });
436
+ }
437
+ }
438
+ }
439
+ if (unresolvedIds.length > 0) {
440
+ resolutionCtx.unresolvedReferences[field.name] = unresolvedIds;
441
+ }
442
+ return resolvedArray;
443
+ }
444
+ else {
445
+ // Resolve single media reference
446
+ if (typeof value !== "string") {
447
+ return value;
448
+ }
449
+ // Check cache
450
+ if (resolutionCtx.mediaCache.has(value)) {
451
+ const cached = resolutionCtx.mediaCache.get(value);
452
+ if (cached) {
453
+ return options.preserveOriginalIds
454
+ ? { ...cached, _originalId: value }
455
+ : cached;
456
+ }
457
+ resolutionCtx.unresolvedReferences[field.name] = [value];
458
+ return options.preserveOriginalIds ? { _unresolvedId: value } : value;
459
+ }
460
+ const resolved = await resolveMediaReference(ctx, value, mediaOptions);
461
+ if (resolved) {
462
+ resolutionCtx.mediaCache.set(value, resolved);
463
+ return options.preserveOriginalIds
464
+ ? { ...resolved, _originalId: value }
465
+ : resolved;
466
+ }
467
+ resolutionCtx.mediaCache.set(value, null);
468
+ resolutionCtx.unresolvedReferences[field.name] = [value];
469
+ return options.preserveOriginalIds ? { _unresolvedId: value } : value;
470
+ }
471
+ }
472
+ // =============================================================================
473
+ // Utility Functions
474
+ // =============================================================================
475
+ /**
476
+ * Check if a value contains circular reference markers.
477
+ *
478
+ * @param data - Data object to check
479
+ * @returns Array of field paths with circular references
480
+ */
481
+ export function findCircularReferenceMarkers(data) {
482
+ const markers = [];
483
+ function traverse(obj, path) {
484
+ if (obj === null || obj === undefined) {
485
+ return;
486
+ }
487
+ if (typeof obj === "object") {
488
+ if (Array.isArray(obj)) {
489
+ obj.forEach((item, index) => traverse(item, `${path}[${index}]`));
490
+ }
491
+ else {
492
+ const record = obj;
493
+ if ("_circularReferences" in record) {
494
+ markers.push(path);
495
+ }
496
+ for (const [key, value] of Object.entries(record)) {
497
+ traverse(value, path ? `${path}.${key}` : key);
498
+ }
499
+ }
500
+ }
501
+ }
502
+ traverse(data, "");
503
+ return markers;
504
+ }
505
+ /**
506
+ * Flatten resolved references to a simple lookup map.
507
+ * Useful for deduplicating references across multiple entries.
508
+ *
509
+ * @param entries - Array of resolved entries
510
+ * @returns Map of entry ID to resolved entry
511
+ */
512
+ export function flattenResolvedReferences(entries) {
513
+ const map = new Map();
514
+ function extractReferences(data) {
515
+ for (const value of Object.values(data)) {
516
+ if (value === null || value === undefined) {
517
+ continue;
518
+ }
519
+ if (typeof value === "object") {
520
+ if (Array.isArray(value)) {
521
+ for (const item of value) {
522
+ if (isResolvedContentEntry(item)) {
523
+ map.set(item.id, item);
524
+ extractReferences(item.data);
525
+ }
526
+ }
527
+ }
528
+ else if (isResolvedContentEntry(value)) {
529
+ const entry = value;
530
+ map.set(entry.id, entry);
531
+ extractReferences(entry.data);
532
+ }
533
+ }
534
+ }
535
+ }
536
+ for (const entry of entries) {
537
+ map.set(entry.id, entry);
538
+ extractReferences(entry.data);
539
+ }
540
+ return map;
541
+ }
542
+ /**
543
+ * Type guard to check if a value is a resolved content entry.
544
+ */
545
+ function isResolvedContentEntry(value) {
546
+ if (typeof value !== "object" || value === null) {
547
+ return false;
548
+ }
549
+ const obj = value;
550
+ return ("id" in obj &&
551
+ "contentTypeName" in obj &&
552
+ "slug" in obj &&
553
+ "status" in obj &&
554
+ "data" in obj &&
555
+ "exists" in obj);
556
+ }
557
+ /**
558
+ * Count the total number of references resolved in an entry.
559
+ *
560
+ * @param entry - Resolved entry to count
561
+ * @returns Object with counts of content and media references
562
+ */
563
+ export function countResolvedReferences(entry) {
564
+ let content = 0;
565
+ let media = 0;
566
+ function count(value) {
567
+ if (value === null || value === undefined) {
568
+ return;
569
+ }
570
+ if (typeof value === "object") {
571
+ if (Array.isArray(value)) {
572
+ for (const item of value) {
573
+ count(item);
574
+ }
575
+ }
576
+ else {
577
+ const record = value;
578
+ // Check if it's a resolved content entry
579
+ if (isResolvedContentEntry(record)) {
580
+ content++;
581
+ count(record.data);
582
+ }
583
+ // Check if it's a resolved media reference
584
+ else if ("storageId" in record &&
585
+ "url" in record &&
586
+ "mimeType" in record) {
587
+ media++;
588
+ }
589
+ // Otherwise recurse into nested objects
590
+ else {
591
+ for (const val of Object.values(record)) {
592
+ count(val);
593
+ }
594
+ }
595
+ }
596
+ }
597
+ }
598
+ count(entry.data);
599
+ return { content, media, total: content + media };
600
+ }
601
+ //# sourceMappingURL=deepReferenceResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepReferenceResolver.js","sourceRoot":"","sources":["../../../src/component/lib/deepReferenceResolver.ts"],"names":[],"mappings":"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"}