convex-cms 0.0.2 → 0.0.5-alpha.0

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 (311) hide show
  1. package/README.md +109 -13
  2. package/admin-dist/nitro.json +15 -0
  3. package/admin-dist/public/assets/CmsEmptyState-CiMQwSQV.js +5 -0
  4. package/admin-dist/public/assets/CmsPageHeader-ohOq0luT.js +1 -0
  5. package/admin-dist/public/assets/CmsStatusBadge-BdNf0V9v.js +1 -0
  6. package/admin-dist/public/assets/CmsSurface-CWup6Jh7.js +1 -0
  7. package/admin-dist/public/assets/CmsToolbar-cEBlCHa3.js +1 -0
  8. package/admin-dist/public/assets/ContentEntryEditor-BY5ypfUs.js +4 -0
  9. package/admin-dist/public/assets/ErrorState-C4nJ-ml4.js +1 -0
  10. package/admin-dist/public/assets/TaxonomyFilter-BgE_SR_O.js +1 -0
  11. package/admin-dist/public/assets/_contentTypeId-DtZectcC.js +1 -0
  12. package/admin-dist/public/assets/_entryId-BpSmrfAm.js +1 -0
  13. package/admin-dist/public/assets/alert-Bf2l8kxw.js +1 -0
  14. package/admin-dist/public/assets/badge-qPrc4AUM.js +1 -0
  15. package/admin-dist/public/assets/circle-check-big-Dgozy3vV.js +1 -0
  16. package/admin-dist/public/assets/command-QOmNhlb0.js +1 -0
  17. package/admin-dist/public/assets/content-OEBGlxg1.js +1 -0
  18. package/admin-dist/public/assets/content-types-CjQliqVV.js +2 -0
  19. package/admin-dist/public/assets/globals-hAmgC66w.css +1 -0
  20. package/admin-dist/public/assets/index-BH_ECMhv.js +1 -0
  21. package/admin-dist/public/assets/label-DCsUdvFh.js +1 -0
  22. package/admin-dist/public/assets/link-2-Czw1N61H.js +1 -0
  23. package/admin-dist/public/assets/list-DtCsXj8-.js +1 -0
  24. package/admin-dist/public/assets/main-CXgkZMhe.js +97 -0
  25. package/admin-dist/public/assets/media-DTJ3-ViE.js +1 -0
  26. package/admin-dist/public/assets/new._contentTypeId-CoTDxKzf.js +1 -0
  27. package/admin-dist/public/assets/plus-xCFJK0RC.js +1 -0
  28. package/admin-dist/public/assets/rotate-ccw-DIqK63wY.js +1 -0
  29. package/admin-dist/public/assets/scroll-area-B-yrE66a.js +1 -0
  30. package/admin-dist/public/assets/search-CbCbboeU.js +1 -0
  31. package/admin-dist/public/assets/select-Co3TZFJb.js +1 -0
  32. package/admin-dist/public/assets/settings-BspTTv_o.js +1 -0
  33. package/admin-dist/public/assets/switch-CfavASmR.js +1 -0
  34. package/admin-dist/public/assets/tabs-CN5s5u2W.js +1 -0
  35. package/admin-dist/public/assets/tanstack-adapter-npeE3RdY.js +1 -0
  36. package/admin-dist/public/assets/taxonomies-CgG46fIF.js +1 -0
  37. package/admin-dist/public/assets/textarea-BJ0XFZpT.js +1 -0
  38. package/admin-dist/public/assets/trash-B3daldm5.js +1 -0
  39. package/admin-dist/public/assets/triangle-alert-BZRcqsUg.js +1 -0
  40. package/admin-dist/public/assets/useBreadcrumbLabel-DwZlwvFF.js +1 -0
  41. package/admin-dist/public/assets/usePermissions-C1JQhfqb.js +1 -0
  42. package/admin-dist/public/favicon.ico +0 -0
  43. package/admin-dist/server/_chunks/_libs/@date-fns/tz.mjs +217 -0
  44. package/admin-dist/server/_chunks/_libs/@floating-ui/core.mjs +719 -0
  45. package/admin-dist/server/_chunks/_libs/@floating-ui/dom.mjs +622 -0
  46. package/admin-dist/server/_chunks/_libs/@floating-ui/react-dom.mjs +292 -0
  47. package/admin-dist/server/_chunks/_libs/@floating-ui/utils.mjs +320 -0
  48. package/admin-dist/server/_chunks/_libs/@radix-ui/number.mjs +6 -0
  49. package/admin-dist/server/_chunks/_libs/@radix-ui/primitive.mjs +11 -0
  50. package/admin-dist/server/_chunks/_libs/@radix-ui/react-arrow.mjs +23 -0
  51. package/admin-dist/server/_chunks/_libs/@radix-ui/react-avatar.mjs +119 -0
  52. package/admin-dist/server/_chunks/_libs/@radix-ui/react-checkbox.mjs +270 -0
  53. package/admin-dist/server/_chunks/_libs/@radix-ui/react-collection.mjs +69 -0
  54. package/admin-dist/server/_chunks/_libs/@radix-ui/react-compose-refs.mjs +39 -0
  55. package/admin-dist/server/_chunks/_libs/@radix-ui/react-context.mjs +137 -0
  56. package/admin-dist/server/_chunks/_libs/@radix-ui/react-dialog.mjs +325 -0
  57. package/admin-dist/server/_chunks/_libs/@radix-ui/react-direction.mjs +9 -0
  58. package/admin-dist/server/_chunks/_libs/@radix-ui/react-dismissable-layer.mjs +210 -0
  59. package/admin-dist/server/_chunks/_libs/@radix-ui/react-dropdown-menu.mjs +253 -0
  60. package/admin-dist/server/_chunks/_libs/@radix-ui/react-focus-guards.mjs +29 -0
  61. package/admin-dist/server/_chunks/_libs/@radix-ui/react-focus-scope.mjs +206 -0
  62. package/admin-dist/server/_chunks/_libs/@radix-ui/react-id.mjs +14 -0
  63. package/admin-dist/server/_chunks/_libs/@radix-ui/react-label.mjs +23 -0
  64. package/admin-dist/server/_chunks/_libs/@radix-ui/react-menu.mjs +812 -0
  65. package/admin-dist/server/_chunks/_libs/@radix-ui/react-popover.mjs +300 -0
  66. package/admin-dist/server/_chunks/_libs/@radix-ui/react-popper.mjs +286 -0
  67. package/admin-dist/server/_chunks/_libs/@radix-ui/react-portal.mjs +16 -0
  68. package/admin-dist/server/_chunks/_libs/@radix-ui/react-presence.mjs +128 -0
  69. package/admin-dist/server/_chunks/_libs/@radix-ui/react-primitive.mjs +141 -0
  70. package/admin-dist/server/_chunks/_libs/@radix-ui/react-roving-focus.mjs +224 -0
  71. package/admin-dist/server/_chunks/_libs/@radix-ui/react-scroll-area.mjs +721 -0
  72. package/admin-dist/server/_chunks/_libs/@radix-ui/react-select.mjs +1163 -0
  73. package/admin-dist/server/_chunks/_libs/@radix-ui/react-separator.mjs +28 -0
  74. package/admin-dist/server/_chunks/_libs/@radix-ui/react-slot.mjs +601 -0
  75. package/admin-dist/server/_chunks/_libs/@radix-ui/react-switch.mjs +152 -0
  76. package/admin-dist/server/_chunks/_libs/@radix-ui/react-tabs.mjs +189 -0
  77. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-callback-ref.mjs +11 -0
  78. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-controllable-state.mjs +69 -0
  79. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-effect-event.mjs +1 -0
  80. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-escape-keydown.mjs +17 -0
  81. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-is-hydrated.mjs +15 -0
  82. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-layout-effect.mjs +6 -0
  83. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-previous.mjs +14 -0
  84. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-size.mjs +39 -0
  85. package/admin-dist/server/_chunks/_libs/@radix-ui/react-visually-hidden.mjs +33 -0
  86. package/admin-dist/server/_chunks/_libs/@tanstack/history.mjs +409 -0
  87. package/admin-dist/server/_chunks/_libs/@tanstack/react-router.mjs +1718 -0
  88. package/admin-dist/server/_chunks/_libs/@tanstack/react-store.mjs +56 -0
  89. package/admin-dist/server/_chunks/_libs/@tanstack/router-core.mjs +4829 -0
  90. package/admin-dist/server/_chunks/_libs/@tanstack/store.mjs +134 -0
  91. package/admin-dist/server/_chunks/_libs/react-dom.mjs +10781 -0
  92. package/admin-dist/server/_chunks/_libs/react.mjs +513 -0
  93. package/admin-dist/server/_libs/aria-hidden.mjs +122 -0
  94. package/admin-dist/server/_libs/class-variance-authority.mjs +44 -0
  95. package/admin-dist/server/_libs/clsx.mjs +16 -0
  96. package/admin-dist/server/_libs/cmdk.mjs +315 -0
  97. package/admin-dist/server/_libs/convex.mjs +4841 -0
  98. package/admin-dist/server/_libs/cookie-es.mjs +58 -0
  99. package/admin-dist/server/_libs/croner.mjs +1 -0
  100. package/admin-dist/server/_libs/crossws.mjs +1 -0
  101. package/admin-dist/server/_libs/date-fns.mjs +1716 -0
  102. package/admin-dist/server/_libs/detect-node-es.mjs +1 -0
  103. package/admin-dist/server/_libs/get-nonce.mjs +9 -0
  104. package/admin-dist/server/_libs/h3-v2.mjs +277 -0
  105. package/admin-dist/server/_libs/h3.mjs +401 -0
  106. package/admin-dist/server/_libs/hookable.mjs +1 -0
  107. package/admin-dist/server/_libs/isbot.mjs +20 -0
  108. package/admin-dist/server/_libs/lucide-react.mjs +850 -0
  109. package/admin-dist/server/_libs/ohash.mjs +1 -0
  110. package/admin-dist/server/_libs/react-day-picker.mjs +2201 -0
  111. package/admin-dist/server/_libs/react-remove-scroll-bar.mjs +82 -0
  112. package/admin-dist/server/_libs/react-remove-scroll.mjs +328 -0
  113. package/admin-dist/server/_libs/react-style-singleton.mjs +69 -0
  114. package/admin-dist/server/_libs/rou3.mjs +8 -0
  115. package/admin-dist/server/_libs/seroval-plugins.mjs +58 -0
  116. package/admin-dist/server/_libs/seroval.mjs +1765 -0
  117. package/admin-dist/server/_libs/srvx.mjs +719 -0
  118. package/admin-dist/server/_libs/tailwind-merge.mjs +3010 -0
  119. package/admin-dist/server/_libs/tiny-invariant.mjs +12 -0
  120. package/admin-dist/server/_libs/tiny-warning.mjs +5 -0
  121. package/admin-dist/server/_libs/tslib.mjs +39 -0
  122. package/admin-dist/server/_libs/ufo.mjs +54 -0
  123. package/admin-dist/server/_libs/unctx.mjs +1 -0
  124. package/admin-dist/server/_libs/unstorage.mjs +1 -0
  125. package/admin-dist/server/_libs/use-callback-ref.mjs +66 -0
  126. package/admin-dist/server/_libs/use-sidecar.mjs +106 -0
  127. package/admin-dist/server/_libs/use-sync-external-store.mjs +139 -0
  128. package/admin-dist/server/_libs/zod.mjs +4223 -0
  129. package/admin-dist/server/_ssr/CmsButton-B45JAKR1.mjs +125 -0
  130. package/admin-dist/server/_ssr/CmsEmptyState-D_BQFAVR.mjs +290 -0
  131. package/admin-dist/server/_ssr/CmsPageHeader-CrUZA59A.mjs +24 -0
  132. package/admin-dist/server/_ssr/CmsStatusBadge-B-sj6yaj.mjs +127 -0
  133. package/admin-dist/server/_ssr/CmsSurface-DKJZhpjk.mjs +44 -0
  134. package/admin-dist/server/_ssr/CmsToolbar-ByaW5iXf.mjs +49 -0
  135. package/admin-dist/server/_ssr/ContentEntryEditor-D3_Jb1dq.mjs +3720 -0
  136. package/admin-dist/server/_ssr/ErrorState-cI-bKLez.mjs +89 -0
  137. package/admin-dist/server/_ssr/TaxonomyFilter-BRJkuCtA.mjs +188 -0
  138. package/admin-dist/server/_ssr/_contentTypeId-B9kA6CaM.mjs +379 -0
  139. package/admin-dist/server/_ssr/_entryId-BddcMkZN.mjs +161 -0
  140. package/admin-dist/server/_ssr/_tanstack-start-manifest_v-Dd7AmelK.mjs +4 -0
  141. package/admin-dist/server/_ssr/command-CGtVr8Gb.mjs +128 -0
  142. package/admin-dist/server/_ssr/config.server-D7JHDcDv.mjs +117 -0
  143. package/admin-dist/server/_ssr/content-D1tbeOd0.mjs +647 -0
  144. package/admin-dist/server/_ssr/content-types-BZqY_BER.mjs +1342 -0
  145. package/admin-dist/server/_ssr/index-BIdq4xaC.mjs +264 -0
  146. package/admin-dist/server/_ssr/index.mjs +1275 -0
  147. package/admin-dist/server/_ssr/label-T-QNKAr6.mjs +22 -0
  148. package/admin-dist/server/_ssr/media-C-xqjBrl.mjs +1832 -0
  149. package/admin-dist/server/_ssr/new._contentTypeId-DWic9cRq.mjs +144 -0
  150. package/admin-dist/server/_ssr/router-D1BMAMJT.mjs +1556 -0
  151. package/admin-dist/server/_ssr/scroll-area-C0pic_WA.mjs +59 -0
  152. package/admin-dist/server/_ssr/select-CqmuN2F6.mjs +142 -0
  153. package/admin-dist/server/_ssr/settings-CAkncGGV.mjs +430 -0
  154. package/admin-dist/server/_ssr/start-HYkvq4Ni.mjs +4 -0
  155. package/admin-dist/server/_ssr/switch-CgmuJkT9.mjs +31 -0
  156. package/admin-dist/server/_ssr/tabs-CnMj0aRy.mjs +630 -0
  157. package/admin-dist/server/_ssr/tanstack-adapter-BXZrMauE.mjs +119 -0
  158. package/admin-dist/server/_ssr/taxonomies-thl3BfVm.mjs +1015 -0
  159. package/admin-dist/server/_ssr/textarea-4K5OJgeh.mjs +18 -0
  160. package/admin-dist/server/_ssr/trash-B40Gx5zP.mjs +411 -0
  161. package/admin-dist/server/_ssr/useBreadcrumbLabel-rn-fL4zV.mjs +16 -0
  162. package/admin-dist/server/_ssr/usePermissions-CKeM6_Vw.mjs +68 -0
  163. package/admin-dist/server/favicon.ico +0 -0
  164. package/admin-dist/server/index.mjs +641 -0
  165. package/dist/cli/commands/init.d.ts +6 -0
  166. package/dist/cli/commands/init.d.ts.map +1 -0
  167. package/dist/cli/commands/init.js +156 -0
  168. package/dist/cli/commands/init.js.map +1 -0
  169. package/dist/cli/index.js +6 -0
  170. package/dist/cli/index.js.map +1 -1
  171. package/dist/client/admin-config.d.ts +2 -3
  172. package/dist/client/admin-config.d.ts.map +1 -1
  173. package/dist/client/admin-config.js +2 -3
  174. package/dist/client/admin-config.js.map +1 -1
  175. package/dist/client/adminApi.d.ts +1877 -1851
  176. package/dist/client/adminApi.d.ts.map +1 -1
  177. package/dist/client/adminApi.js +649 -629
  178. package/dist/client/adminApi.js.map +1 -1
  179. package/dist/client/agentTools.d.ts +1231 -139
  180. package/dist/client/agentTools.d.ts.map +1 -1
  181. package/dist/client/agentTools.js +37 -13
  182. package/dist/client/agentTools.js.map +1 -1
  183. package/dist/client/index.d.ts +5 -5
  184. package/dist/client/index.d.ts.map +1 -1
  185. package/dist/client/index.js +4 -4
  186. package/dist/client/index.js.map +1 -1
  187. package/dist/client/schema/codegen.d.ts +2 -2
  188. package/dist/client/schema/codegen.d.ts.map +1 -1
  189. package/dist/client/schema/codegen.js +3 -3
  190. package/dist/client/schema/codegen.js.map +1 -1
  191. package/dist/client/schema/defineContentType.d.ts +3 -3
  192. package/dist/client/schema/defineContentType.js +3 -3
  193. package/dist/client/schema/index.d.ts +7 -7
  194. package/dist/client/schema/index.d.ts.map +1 -1
  195. package/dist/client/schema/index.js +5 -5
  196. package/dist/client/schema/index.js.map +1 -1
  197. package/dist/client/schema/schemaDrift.d.ts +1 -1
  198. package/dist/client/schema/schemaDrift.js +1 -1
  199. package/dist/client/schema/typedClient.d.ts +2 -2
  200. package/dist/client/schema/typedClient.js +2 -2
  201. package/dist/client/schema/types.d.ts +1 -1
  202. package/dist/client/schema/types.js +1 -1
  203. package/dist/client/wrapper.d.ts +108 -65
  204. package/dist/client/wrapper.d.ts.map +1 -1
  205. package/dist/client/wrapper.js +22 -22
  206. package/dist/client/wrapper.js.map +1 -1
  207. package/dist/component/_generated/component.d.ts +9 -0
  208. package/dist/component/_generated/component.d.ts.map +1 -1
  209. package/dist/component/convex.config.d.ts +2 -2
  210. package/dist/component/convex.config.js +2 -2
  211. package/dist/component/index.d.ts +1 -1
  212. package/dist/component/index.js +1 -1
  213. package/dist/component/lib/ragContentChunker.d.ts +1 -1
  214. package/dist/component/lib/ragContentChunker.js +1 -1
  215. package/dist/component/mediaAssets.d.ts +35 -0
  216. package/dist/component/mediaAssets.d.ts.map +1 -1
  217. package/dist/component/mediaAssets.js +81 -0
  218. package/dist/component/mediaAssets.js.map +1 -1
  219. package/dist/component/roles.d.ts +1 -1
  220. package/dist/component/roles.js +1 -1
  221. package/dist/react/index.d.ts +2 -2
  222. package/dist/react/index.d.ts.map +1 -1
  223. package/dist/react/index.js +13 -7
  224. package/dist/react/index.js.map +1 -1
  225. package/dist/test.d.ts +2 -2
  226. package/dist/test.d.ts.map +1 -1
  227. package/dist/test.js +4 -3
  228. package/dist/test.js.map +1 -1
  229. package/package.json +37 -13
  230. package/dist/component/auditLog.d.ts +0 -410
  231. package/dist/component/auditLog.d.ts.map +0 -1
  232. package/dist/component/auditLog.js +0 -607
  233. package/dist/component/auditLog.js.map +0 -1
  234. package/dist/component/types.d.ts +0 -4
  235. package/dist/component/types.d.ts.map +0 -1
  236. package/dist/component/types.js +0 -2
  237. package/dist/component/types.js.map +0 -1
  238. package/src/cli/commands/admin.ts +0 -104
  239. package/src/cli/index.ts +0 -21
  240. package/src/cli/utils/detectConvexUrl.ts +0 -54
  241. package/src/cli/utils/openBrowser.ts +0 -16
  242. package/src/client/admin-config.ts +0 -138
  243. package/src/client/adminApi.ts +0 -942
  244. package/src/client/agentTools.ts +0 -1311
  245. package/src/client/argTypes.ts +0 -316
  246. package/src/client/field-types.ts +0 -187
  247. package/src/client/index.ts +0 -1301
  248. package/src/client/queryBuilder.ts +0 -1100
  249. package/src/client/schema/codegen.ts +0 -500
  250. package/src/client/schema/defineContentType.ts +0 -501
  251. package/src/client/schema/index.ts +0 -169
  252. package/src/client/schema/schemaDrift.ts +0 -574
  253. package/src/client/schema/typedClient.ts +0 -688
  254. package/src/client/schema/types.ts +0 -666
  255. package/src/client/types.ts +0 -723
  256. package/src/client/workflows.ts +0 -141
  257. package/src/client/wrapper.ts +0 -4304
  258. package/src/component/_generated/api.ts +0 -140
  259. package/src/component/_generated/component.ts +0 -5029
  260. package/src/component/_generated/dataModel.ts +0 -60
  261. package/src/component/_generated/server.ts +0 -156
  262. package/src/component/authorization.ts +0 -647
  263. package/src/component/authorizationHooks.ts +0 -668
  264. package/src/component/bulkOperations.ts +0 -687
  265. package/src/component/contentEntries.ts +0 -1976
  266. package/src/component/contentEntryMutations.ts +0 -1223
  267. package/src/component/contentEntryValidation.ts +0 -707
  268. package/src/component/contentLock.ts +0 -550
  269. package/src/component/contentTypeMigration.ts +0 -1064
  270. package/src/component/contentTypeMutations.ts +0 -969
  271. package/src/component/contentTypes.ts +0 -346
  272. package/src/component/convex.config.ts +0 -44
  273. package/src/component/documentTypes.ts +0 -240
  274. package/src/component/eventEmitter.ts +0 -485
  275. package/src/component/exportImport.ts +0 -1169
  276. package/src/component/index.ts +0 -491
  277. package/src/component/lib/deepReferenceResolver.ts +0 -999
  278. package/src/component/lib/errors.ts +0 -816
  279. package/src/component/lib/index.ts +0 -145
  280. package/src/component/lib/mediaReferenceResolver.ts +0 -495
  281. package/src/component/lib/metadataExtractor.ts +0 -792
  282. package/src/component/lib/mutationAuth.ts +0 -199
  283. package/src/component/lib/queries.ts +0 -79
  284. package/src/component/lib/ragContentChunker.ts +0 -1371
  285. package/src/component/lib/referenceResolver.ts +0 -430
  286. package/src/component/lib/slugGenerator.ts +0 -262
  287. package/src/component/lib/slugUniqueness.ts +0 -333
  288. package/src/component/lib/softDelete.ts +0 -44
  289. package/src/component/localeFallbackChain.ts +0 -673
  290. package/src/component/localeFields.ts +0 -896
  291. package/src/component/mediaAssetMutations.ts +0 -725
  292. package/src/component/mediaAssets.ts +0 -932
  293. package/src/component/mediaFolderMutations.ts +0 -1046
  294. package/src/component/mediaUploadMutations.ts +0 -224
  295. package/src/component/mediaVariantMutations.ts +0 -900
  296. package/src/component/mediaVariants.ts +0 -793
  297. package/src/component/ragContentIndexer.ts +0 -1067
  298. package/src/component/rateLimitHooks.ts +0 -572
  299. package/src/component/roles.ts +0 -1360
  300. package/src/component/scheduledPublish.ts +0 -358
  301. package/src/component/schema.ts +0 -617
  302. package/src/component/taxonomies.ts +0 -949
  303. package/src/component/taxonomyMutations.ts +0 -1210
  304. package/src/component/trash.ts +0 -724
  305. package/src/component/userContext.ts +0 -898
  306. package/src/component/validation.ts +0 -1388
  307. package/src/component/validators.ts +0 -949
  308. package/src/component/versionMutations.ts +0 -392
  309. package/src/component/webhookTrigger.ts +0 -1922
  310. package/src/react/index.ts +0 -898
  311. package/src/test.ts +0 -1580
@@ -1,145 +0,0 @@
1
- /**
2
- * Library utilities for the CMS component
3
- */
4
-
5
- export {
6
- generateSlug,
7
- isValidSlug,
8
- generateUniqueSlug,
9
- type SlugOptions,
10
- } from "./slugGenerator.js";
11
-
12
- // Error handling exports
13
- export {
14
- // Error class and types
15
- CMSError,
16
- isCMSError,
17
- hasErrorCode,
18
- isErrorCategory,
19
- // Error codes
20
- ErrorCodes,
21
- ContentTypeErrorCodes,
22
- ContentEntryErrorCodes,
23
- MediaAssetErrorCodes,
24
- MediaFolderErrorCodes,
25
- VersionErrorCodes,
26
- GeneralErrorCodes,
27
- // Error factory functions - Content Types
28
- contentTypeNotFound,
29
- contentTypeDeleted,
30
- contentTypeInactive,
31
- contentTypeNameInvalid,
32
- contentTypeNameDuplicate,
33
- contentTypeFieldValidationFailed,
34
- contentTypeSlugFieldInvalid,
35
- contentTypeTitleFieldInvalid,
36
- contentTypeHasEntries,
37
- contentTypeBreakingChange,
38
- // Error factory functions - Content Entries
39
- contentEntryNotFound,
40
- contentEntryDeleted,
41
- contentEntryNotDeleted,
42
- contentEntryAlreadyPublished,
43
- contentEntryNotPublished,
44
- contentEntryArchived,
45
- contentEntryValidationFailed,
46
- contentEntryLocked,
47
- contentEntryCreateFailed,
48
- contentEntryUpdateFailed,
49
- // Error factory functions - Media Assets
50
- mediaAssetNotFound,
51
- mediaAssetDeleted,
52
- mediaAssetNotDeleted,
53
- mediaAssetHasReferences,
54
- mediaAssetCreateFailed,
55
- mediaAssetUpdateFailed,
56
- // Error factory functions - Media Folders
57
- mediaFolderNotFound,
58
- mediaFolderDeleted,
59
- mediaFolderNotDeleted,
60
- mediaFolderNameInvalid,
61
- mediaFolderNameDuplicate,
62
- mediaFolderDepthExceeded,
63
- mediaFolderPathTooLong,
64
- mediaFolderHasContents,
65
- mediaFolderCircularMove,
66
- mediaFolderParentDeleted,
67
- mediaFolderCreateFailed,
68
- // Error factory functions - Versions
69
- versionNotFound,
70
- versionEntryNotFound,
71
- versionEntryDeleted,
72
- versionMismatch,
73
- versionRollbackFailed,
74
- // Error factory functions - General
75
- batchSizeExceeded,
76
- permissionDenied,
77
- internalError,
78
- // Types
79
- type ErrorCode,
80
- type ErrorCategory,
81
- type CMSErrorContext,
82
- type ResourceErrorContext,
83
- type ValidationErrorContext,
84
- type LockErrorContext,
85
- type ReferenceErrorContext,
86
- } from "./errors.js";
87
-
88
- export {
89
- checkSlugUniqueness,
90
- ensureUniqueSlug,
91
- findNextAvailableSlug,
92
- validateSlugFormat,
93
- type SlugUniquenessOptions,
94
- type SlugCheckResult,
95
- type SlugEntry,
96
- type SlugQueryFn,
97
- type SlugPrefixQueryFn,
98
- } from "./slugUniqueness.js";
99
-
100
- export {
101
- isDeleted,
102
- isActive,
103
- filterActive,
104
- filterDeleted,
105
- requireNotDeleted,
106
- requireDeleted,
107
- type SoftDeletable,
108
- } from "./softDelete.js";
109
-
110
- export {
111
- getContentTypeByName,
112
- getTaxonomyByName,
113
- contentTypeExists,
114
- taxonomyExists,
115
- getActiveById,
116
- type GetByIdOptions,
117
- } from "./queries.js";
118
-
119
- export {
120
- // Main API functions
121
- chunkContentEntry,
122
- extractContent,
123
- chunkText,
124
- chunkMultipleEntries,
125
- estimateChunkingStats,
126
- // Text extraction utilities
127
- extractTextFromRichText,
128
- extractTextFromJson,
129
- extractTextFromSelect,
130
- stripHtmlTags,
131
- // Configuration defaults
132
- DEFAULT_CHUNK_OPTIONS,
133
- DEFAULT_EXTRACTION_OPTIONS,
134
- // Types
135
- type ContentChunk,
136
- type ChunkMetadata,
137
- type ChunkSemanticType,
138
- type ChunkOptions,
139
- type RagExtractionOptions,
140
- type ExtractedContent,
141
- type ContentTypeInfo,
142
- type ContentEntryInfo,
143
- type ResolvedReferenceInfo,
144
- type FieldDefinition as RagFieldDefinition,
145
- } from "./ragContentChunker.js";
@@ -1,495 +0,0 @@
1
- /**
2
- * Media Reference Resolution Utilities
3
- *
4
- * Provides functions for resolving and validating media asset references.
5
- * These utilities help with fetching referenced media assets and validating
6
- * MIME type constraints for media fields.
7
- */
8
-
9
- import { Id } from "../_generated/dataModel.js";
10
- import { isDeleted } from "./softDelete.js";
11
- import { QueryCtx } from "../_generated/server.js";
12
- import { classifyMimeType } from "./metadataExtractor.js";
13
-
14
- // =============================================================================
15
- // Types
16
- // =============================================================================
17
-
18
- /**
19
- * A single media reference value (media asset ID as string)
20
- */
21
- export type SingleMediaReference = string;
22
-
23
- /**
24
- * Multiple media reference values (array of media asset IDs) - used for galleries
25
- */
26
- export type MultipleMediaReferences = string[];
27
-
28
- /**
29
- * Media field value - either single or multiple based on field configuration
30
- */
31
- export type MediaReferenceValue =
32
- | SingleMediaReference
33
- | MultipleMediaReferences;
34
-
35
- /**
36
- * A resolved media reference with full asset data
37
- */
38
- export interface ResolvedMediaReference {
39
- /** The media asset ID */
40
- id: string;
41
- /** The storage ID for the file */
42
- storageId: string;
43
- /** The resolved public URL for the asset */
44
- url: string | null;
45
- /** Original filename (name field) */
46
- name: string;
47
- /** MIME type of the file */
48
- mimeType: string;
49
- /** File size in bytes */
50
- size: number;
51
- /** Classified media type */
52
- type: "image" | "video" | "audio" | "document" | "other";
53
- /** Human-readable title */
54
- title?: string;
55
- /** Description/caption */
56
- description?: string;
57
- /** Alt text for accessibility */
58
- altText?: string;
59
- /** Image dimensions (if applicable) */
60
- width?: number;
61
- height?: number;
62
- /** Duration in seconds (for video/audio) */
63
- duration?: number;
64
- /** Whether the asset exists and is not deleted */
65
- exists: boolean;
66
- }
67
-
68
- /**
69
- * Options for resolving media references
70
- */
71
- export interface MediaResolveOptions {
72
- /** Include soft-deleted assets (default: false) */
73
- includeDeleted?: boolean;
74
- }
75
-
76
- /**
77
- * Result of a media resolution operation
78
- */
79
- export interface MediaResolveResult {
80
- /** Successfully resolved media references */
81
- resolved: ResolvedMediaReference[];
82
- /** IDs that could not be resolved (not found or deleted) */
83
- unresolved: string[];
84
- }
85
-
86
- /**
87
- * Result of validating a media reference
88
- */
89
- export interface MediaValidationResult {
90
- /** Whether the reference is valid */
91
- valid: boolean;
92
- /** Error message if not valid */
93
- error?: string;
94
- /** The MIME type of the referenced asset (if found) */
95
- mimeType?: string;
96
- }
97
-
98
- // =============================================================================
99
- // Core Resolution Functions
100
- // =============================================================================
101
-
102
- /**
103
- * Resolve a single media reference to its full asset data.
104
- *
105
- * @param ctx - Convex query context
106
- * @param mediaId - The media asset ID to resolve
107
- * @param options - Resolution options
108
- * @returns The resolved media reference or null if not found
109
- *
110
- * @example
111
- * ```typescript
112
- * // In a query handler:
113
- * const image = await resolveMediaReference(ctx, entry.data.featuredImage);
114
- * if (image) {
115
- * console.log("Image URL:", image.url);
116
- * console.log("Alt text:", image.altText);
117
- * }
118
- * ```
119
- */
120
- export async function resolveMediaReference(
121
- ctx: QueryCtx,
122
- mediaId: string,
123
- options: MediaResolveOptions = {},
124
- ): Promise<ResolvedMediaReference | null> {
125
- const { includeDeleted = false } = options;
126
-
127
- try {
128
- // Get the media item
129
- const item = await ctx.db.get(mediaId as Id<"mediaItems">);
130
-
131
- if (!item) {
132
- return null;
133
- }
134
-
135
- // Only assets can be resolved as media references
136
- if (item.kind !== "asset") {
137
- return null;
138
- }
139
-
140
- // Check soft-delete status
141
- if (!includeDeleted && isDeleted(item)) {
142
- return null;
143
- }
144
-
145
- // Resolve the storage URL
146
- const url = await ctx.storage.getUrl(item.storageId);
147
-
148
- return {
149
- id: mediaId,
150
- storageId: item.storageId as string,
151
- url,
152
- name: item.name,
153
- mimeType: item.mimeType,
154
- size: item.size ?? 0,
155
- type: classifyMimeType(item.mimeType),
156
- title: item.title,
157
- description: item.description,
158
- altText: item.altText,
159
- width: item.width,
160
- height: item.height,
161
- duration: item.duration,
162
- exists: true,
163
- };
164
- } catch {
165
- // Invalid ID format or other error
166
- return null;
167
- }
168
- }
169
-
170
- /**
171
- * Resolve multiple media references to their full asset data.
172
- *
173
- * @param ctx - Convex query context
174
- * @param mediaIds - Array of media asset IDs to resolve
175
- * @param options - Resolution options
176
- * @returns Result with resolved references and unresolved IDs
177
- *
178
- * @example
179
- * ```typescript
180
- * // In a query handler - resolving a gallery:
181
- * const result = await resolveMediaReferences(ctx, entry.data.galleryImages);
182
- *
183
- * console.log("Found:", result.resolved.length, "images");
184
- * console.log("Missing:", result.unresolved);
185
- *
186
- * for (const image of result.resolved) {
187
- * console.log(image.url, image.width, "x", image.height);
188
- * }
189
- * ```
190
- */
191
- export async function resolveMediaReferences(
192
- ctx: QueryCtx,
193
- mediaIds: string[],
194
- options: MediaResolveOptions = {},
195
- ): Promise<MediaResolveResult> {
196
- const resolved: ResolvedMediaReference[] = [];
197
- const unresolved: string[] = [];
198
-
199
- // Resolve each reference in parallel for efficiency
200
- const promises = mediaIds.map(async (id) => {
201
- const result = await resolveMediaReference(ctx, id, options);
202
- return { id, result };
203
- });
204
-
205
- const results = await Promise.all(promises);
206
-
207
- for (const { id, result } of results) {
208
- if (result) {
209
- resolved.push(result);
210
- } else {
211
- unresolved.push(id);
212
- }
213
- }
214
-
215
- return { resolved, unresolved };
216
- }
217
-
218
- // =============================================================================
219
- // Validation Functions
220
- // =============================================================================
221
-
222
- /**
223
- * Check if a media reference ID points to a valid, existing media asset.
224
- *
225
- * @param ctx - Convex query context
226
- * @param mediaId - The media asset ID to check
227
- * @param allowedMimeTypes - Optional array of allowed MIME types
228
- * @returns Object with validity status and optional error message
229
- *
230
- * @example
231
- * ```typescript
232
- * // Validate a media reference before saving:
233
- * const check = await isValidMediaReference(ctx, imageId, ["image/jpeg", "image/png"]);
234
- * if (!check.valid) {
235
- * throw new Error(check.error);
236
- * }
237
- * ```
238
- */
239
- export async function isValidMediaReference(
240
- ctx: QueryCtx,
241
- mediaId: string,
242
- allowedMimeTypes?: string[],
243
- ): Promise<MediaValidationResult> {
244
- try {
245
- // Get the media item
246
- const item = await ctx.db.get(mediaId as Id<"mediaItems">);
247
-
248
- if (!item) {
249
- return { valid: false, error: `Media asset not found: ${mediaId}` };
250
- }
251
-
252
- // Only assets can be validated as media references
253
- if (item.kind !== "asset") {
254
- return {
255
- valid: false,
256
- error: `Media reference is a folder, not an asset: ${mediaId}`,
257
- };
258
- }
259
-
260
- // Check soft-delete status
261
- if (isDeleted(item)) {
262
- return {
263
- valid: false,
264
- error: `Media asset has been deleted: ${mediaId}`,
265
- };
266
- }
267
-
268
- // If MIME type constraints specified, check them
269
- if (allowedMimeTypes && allowedMimeTypes.length > 0) {
270
- // Support wildcard patterns like "image/*"
271
- const isAllowed = allowedMimeTypes.some((pattern) => {
272
- if (pattern.endsWith("/*")) {
273
- // Wildcard pattern: "image/*" matches "image/jpeg", "image/png", etc.
274
- const prefix = pattern.slice(0, -1); // Remove the trailing "*"
275
- return item.mimeType.startsWith(prefix);
276
- }
277
- return item.mimeType === pattern;
278
- });
279
-
280
- if (!isAllowed) {
281
- return {
282
- valid: false,
283
- error: `Media asset MIME type "${
284
- item.mimeType
285
- }" is not allowed. Expected: ${allowedMimeTypes.join(", ")}`,
286
- mimeType: item.mimeType,
287
- };
288
- }
289
- }
290
-
291
- return { valid: true, mimeType: item.mimeType };
292
- } catch {
293
- return { valid: false, error: `Invalid media asset ID format: ${mediaId}` };
294
- }
295
- }
296
-
297
- /**
298
- * Validate all media references in a content entry's data.
299
- *
300
- * Iterates through all media fields and validates that each reference
301
- * points to a valid, existing media asset with an allowed MIME type.
302
- *
303
- * @param ctx - Convex query context
304
- * @param data - The content entry data containing media fields
305
- * @param fields - Array of field definitions (to identify media fields)
306
- * @returns Object with overall validity and array of errors
307
- *
308
- * @example
309
- * ```typescript
310
- * // Validate all media references before creating/updating an entry:
311
- * const validation = await validateAllMediaReferences(ctx, data, contentType.fields);
312
- * if (!validation.valid) {
313
- * throw new Error(validation.errors.join(", "));
314
- * }
315
- * ```
316
- */
317
- export async function validateAllMediaReferences(
318
- ctx: QueryCtx,
319
- data: Record<string, unknown>,
320
- fields: Array<{
321
- name: string;
322
- type: string;
323
- options?: {
324
- allowedMimeTypes?: string[];
325
- multiple?: boolean;
326
- };
327
- }>,
328
- ): Promise<{ valid: boolean; errors: string[] }> {
329
- const errors: string[] = [];
330
-
331
- // Find all media fields
332
- const mediaFields = fields.filter((f) => f.type === "media");
333
-
334
- for (const field of mediaFields) {
335
- const value = data[field.name];
336
-
337
- if (value === null || value === undefined) {
338
- continue; // Skip empty values (required validation is separate)
339
- }
340
-
341
- const allowedMimeTypes = field.options?.allowedMimeTypes;
342
- const multiple = field.options?.multiple ?? false;
343
-
344
- if (multiple) {
345
- // Validate array of media references (gallery)
346
- if (!Array.isArray(value)) {
347
- errors.push(`${field.name}: Expected array of media asset IDs`);
348
- continue;
349
- }
350
-
351
- for (const mediaId of value) {
352
- if (typeof mediaId !== "string") {
353
- errors.push(`${field.name}: Invalid media asset ID type`);
354
- continue;
355
- }
356
-
357
- const check = await isValidMediaReference(
358
- ctx,
359
- mediaId,
360
- allowedMimeTypes,
361
- );
362
- if (!check.valid) {
363
- errors.push(`${field.name}: ${check.error}`);
364
- }
365
- }
366
- } else {
367
- // Validate single media reference
368
- if (typeof value !== "string") {
369
- errors.push(`${field.name}: Expected string media asset ID`);
370
- continue;
371
- }
372
-
373
- const check = await isValidMediaReference(ctx, value, allowedMimeTypes);
374
- if (!check.valid) {
375
- errors.push(`${field.name}: ${check.error}`);
376
- }
377
- }
378
- }
379
-
380
- return {
381
- valid: errors.length === 0,
382
- errors,
383
- };
384
- }
385
-
386
- // =============================================================================
387
- // Utility Functions
388
- // =============================================================================
389
-
390
- /**
391
- * Extract all media asset IDs from a content entry's data.
392
- *
393
- * @param data - The content entry data
394
- * @param fields - Array of field definitions
395
- * @returns Array of all media asset IDs found in the data
396
- */
397
- export function extractMediaIds(
398
- data: Record<string, unknown>,
399
- fields: Array<{
400
- name: string;
401
- type: string;
402
- options?: { multiple?: boolean };
403
- }>,
404
- ): string[] {
405
- const ids: string[] = [];
406
-
407
- const mediaFields = fields.filter((f) => f.type === "media");
408
-
409
- for (const field of mediaFields) {
410
- const value = data[field.name];
411
-
412
- if (value === null || value === undefined) {
413
- continue;
414
- }
415
-
416
- const multiple = field.options?.multiple ?? false;
417
-
418
- if (multiple && Array.isArray(value)) {
419
- for (const id of value) {
420
- if (typeof id === "string") {
421
- ids.push(id);
422
- }
423
- }
424
- } else if (typeof value === "string") {
425
- ids.push(value);
426
- }
427
- }
428
-
429
- return ids;
430
- }
431
-
432
- /**
433
- * Get the MIME type for a media asset ID.
434
- *
435
- * This is a helper function for validation purposes.
436
- *
437
- * @param ctx - Convex query context
438
- * @param mediaId - The media asset ID
439
- * @returns The MIME type or null if not found
440
- */
441
- export async function getMediaMimeType(
442
- ctx: QueryCtx,
443
- mediaId: string,
444
- ): Promise<string | null> {
445
- try {
446
- const item = await ctx.db.get(mediaId as Id<"mediaItems">);
447
-
448
- if (!item || item.kind !== "asset" || isDeleted(item)) {
449
- return null;
450
- }
451
-
452
- return item.mimeType;
453
- } catch {
454
- return null;
455
- }
456
- }
457
-
458
- /**
459
- * Check if a MIME type matches a pattern (supports wildcards like "image/*").
460
- *
461
- * @param mimeType - The MIME type to check
462
- * @param pattern - The pattern to match against (e.g., "image/*", "image/jpeg")
463
- * @returns Whether the MIME type matches the pattern
464
- *
465
- * @example
466
- * ```typescript
467
- * matchesMimeTypePattern("image/jpeg", "image/*"); // true
468
- * matchesMimeTypePattern("image/jpeg", "image/jpeg"); // true
469
- * matchesMimeTypePattern("image/jpeg", "video/*"); // false
470
- * ```
471
- */
472
- export function matchesMimeTypePattern(
473
- mimeType: string,
474
- pattern: string,
475
- ): boolean {
476
- if (pattern.endsWith("/*")) {
477
- const prefix = pattern.slice(0, -1);
478
- return mimeType.startsWith(prefix);
479
- }
480
- return mimeType === pattern;
481
- }
482
-
483
- /**
484
- * Check if a MIME type matches any of the given patterns.
485
- *
486
- * @param mimeType - The MIME type to check
487
- * @param patterns - Array of patterns to match against
488
- * @returns Whether the MIME type matches any pattern
489
- */
490
- export function matchesAnyMimeTypePattern(
491
- mimeType: string,
492
- patterns: string[],
493
- ): boolean {
494
- return patterns.some((pattern) => matchesMimeTypePattern(mimeType, pattern));
495
- }