convex-cms 0.0.2 → 0.0.3

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 (265) hide show
  1. package/admin-dist/nitro.json +15 -0
  2. package/admin-dist/public/assets/CmsEmptyState-CRswfTzk.js +5 -0
  3. package/admin-dist/public/assets/CmsPageHeader-CirpXndm.js +1 -0
  4. package/admin-dist/public/assets/CmsStatusBadge-CbEUpQu-.js +1 -0
  5. package/admin-dist/public/assets/CmsToolbar-BI2nZOXp.js +1 -0
  6. package/admin-dist/public/assets/ContentEntryEditor-CBeCyK_m.js +4 -0
  7. package/admin-dist/public/assets/ErrorState-BIVaWmom.js +1 -0
  8. package/admin-dist/public/assets/TaxonomyFilter-ChaY6Y_x.js +1 -0
  9. package/admin-dist/public/assets/_contentTypeId-DQ8k_Rvw.js +1 -0
  10. package/admin-dist/public/assets/_entryId-CKU_glsK.js +1 -0
  11. package/admin-dist/public/assets/alert-BXjTqrwQ.js +1 -0
  12. package/admin-dist/public/assets/badge-hvUOzpVZ.js +1 -0
  13. package/admin-dist/public/assets/circle-check-big-CF_pR17r.js +1 -0
  14. package/admin-dist/public/assets/command-DU82cJlt.js +1 -0
  15. package/admin-dist/public/assets/content-_LXl3pp7.js +1 -0
  16. package/admin-dist/public/assets/content-types-KjxaXGxY.js +2 -0
  17. package/admin-dist/public/assets/globals-CS6BZ0zp.css +1 -0
  18. package/admin-dist/public/assets/index-DNGIZHL-.js +1 -0
  19. package/admin-dist/public/assets/label-KNtpL71g.js +1 -0
  20. package/admin-dist/public/assets/link-2-Bw2aI4V4.js +1 -0
  21. package/admin-dist/public/assets/list-sYepHjt_.js +1 -0
  22. package/admin-dist/public/assets/main-CKj5yfEi.js +97 -0
  23. package/admin-dist/public/assets/media-Bkrkffm7.js +1 -0
  24. package/admin-dist/public/assets/new._contentTypeId-C3LstjNs.js +1 -0
  25. package/admin-dist/public/assets/plus-DUn8v_Xf.js +1 -0
  26. package/admin-dist/public/assets/rotate-ccw-DJEoHcRI.js +1 -0
  27. package/admin-dist/public/assets/scroll-area-DfIlT0in.js +1 -0
  28. package/admin-dist/public/assets/search-MuAUDJKR.js +1 -0
  29. package/admin-dist/public/assets/select-BD29IXCI.js +1 -0
  30. package/admin-dist/public/assets/settings-DmMyn_6A.js +1 -0
  31. package/admin-dist/public/assets/switch-h3Rrnl5i.js +1 -0
  32. package/admin-dist/public/assets/tabs-imc8h-Dp.js +1 -0
  33. package/admin-dist/public/assets/taxonomies-dAsrT65H.js +1 -0
  34. package/admin-dist/public/assets/textarea-BTy7nwzR.js +1 -0
  35. package/admin-dist/public/assets/trash-SAWKZZHv.js +1 -0
  36. package/admin-dist/public/assets/triangle-alert-E52Vfeuh.js +1 -0
  37. package/admin-dist/public/assets/useBreadcrumbLabel-BECBMCzM.js +1 -0
  38. package/admin-dist/public/assets/usePermissions-Basjs9BT.js +1 -0
  39. package/admin-dist/public/favicon.ico +0 -0
  40. package/admin-dist/server/_chunks/_libs/@date-fns/tz.mjs +217 -0
  41. package/admin-dist/server/_chunks/_libs/@floating-ui/core.mjs +719 -0
  42. package/admin-dist/server/_chunks/_libs/@floating-ui/dom.mjs +622 -0
  43. package/admin-dist/server/_chunks/_libs/@floating-ui/react-dom.mjs +292 -0
  44. package/admin-dist/server/_chunks/_libs/@floating-ui/utils.mjs +320 -0
  45. package/admin-dist/server/_chunks/_libs/@radix-ui/number.mjs +6 -0
  46. package/admin-dist/server/_chunks/_libs/@radix-ui/primitive.mjs +11 -0
  47. package/admin-dist/server/_chunks/_libs/@radix-ui/react-arrow.mjs +23 -0
  48. package/admin-dist/server/_chunks/_libs/@radix-ui/react-avatar.mjs +119 -0
  49. package/admin-dist/server/_chunks/_libs/@radix-ui/react-checkbox.mjs +270 -0
  50. package/admin-dist/server/_chunks/_libs/@radix-ui/react-collection.mjs +69 -0
  51. package/admin-dist/server/_chunks/_libs/@radix-ui/react-compose-refs.mjs +39 -0
  52. package/admin-dist/server/_chunks/_libs/@radix-ui/react-context.mjs +137 -0
  53. package/admin-dist/server/_chunks/_libs/@radix-ui/react-dialog.mjs +325 -0
  54. package/admin-dist/server/_chunks/_libs/@radix-ui/react-direction.mjs +9 -0
  55. package/admin-dist/server/_chunks/_libs/@radix-ui/react-dismissable-layer.mjs +210 -0
  56. package/admin-dist/server/_chunks/_libs/@radix-ui/react-dropdown-menu.mjs +253 -0
  57. package/admin-dist/server/_chunks/_libs/@radix-ui/react-focus-guards.mjs +29 -0
  58. package/admin-dist/server/_chunks/_libs/@radix-ui/react-focus-scope.mjs +206 -0
  59. package/admin-dist/server/_chunks/_libs/@radix-ui/react-id.mjs +14 -0
  60. package/admin-dist/server/_chunks/_libs/@radix-ui/react-label.mjs +23 -0
  61. package/admin-dist/server/_chunks/_libs/@radix-ui/react-menu.mjs +812 -0
  62. package/admin-dist/server/_chunks/_libs/@radix-ui/react-popover.mjs +300 -0
  63. package/admin-dist/server/_chunks/_libs/@radix-ui/react-popper.mjs +286 -0
  64. package/admin-dist/server/_chunks/_libs/@radix-ui/react-portal.mjs +16 -0
  65. package/admin-dist/server/_chunks/_libs/@radix-ui/react-presence.mjs +128 -0
  66. package/admin-dist/server/_chunks/_libs/@radix-ui/react-primitive.mjs +141 -0
  67. package/admin-dist/server/_chunks/_libs/@radix-ui/react-roving-focus.mjs +224 -0
  68. package/admin-dist/server/_chunks/_libs/@radix-ui/react-scroll-area.mjs +721 -0
  69. package/admin-dist/server/_chunks/_libs/@radix-ui/react-select.mjs +1163 -0
  70. package/admin-dist/server/_chunks/_libs/@radix-ui/react-separator.mjs +28 -0
  71. package/admin-dist/server/_chunks/_libs/@radix-ui/react-slot.mjs +601 -0
  72. package/admin-dist/server/_chunks/_libs/@radix-ui/react-switch.mjs +152 -0
  73. package/admin-dist/server/_chunks/_libs/@radix-ui/react-tabs.mjs +189 -0
  74. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-callback-ref.mjs +11 -0
  75. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-controllable-state.mjs +69 -0
  76. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-effect-event.mjs +1 -0
  77. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-escape-keydown.mjs +17 -0
  78. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-is-hydrated.mjs +15 -0
  79. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-layout-effect.mjs +6 -0
  80. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-previous.mjs +14 -0
  81. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-size.mjs +39 -0
  82. package/admin-dist/server/_chunks/_libs/@radix-ui/react-visually-hidden.mjs +33 -0
  83. package/admin-dist/server/_chunks/_libs/@tanstack/history.mjs +409 -0
  84. package/admin-dist/server/_chunks/_libs/@tanstack/react-router.mjs +1711 -0
  85. package/admin-dist/server/_chunks/_libs/@tanstack/react-store.mjs +56 -0
  86. package/admin-dist/server/_chunks/_libs/@tanstack/router-core.mjs +4829 -0
  87. package/admin-dist/server/_chunks/_libs/@tanstack/store.mjs +134 -0
  88. package/admin-dist/server/_chunks/_libs/react-dom.mjs +10781 -0
  89. package/admin-dist/server/_chunks/_libs/react.mjs +513 -0
  90. package/admin-dist/server/_libs/aria-hidden.mjs +122 -0
  91. package/admin-dist/server/_libs/class-variance-authority.mjs +44 -0
  92. package/admin-dist/server/_libs/clsx.mjs +16 -0
  93. package/admin-dist/server/_libs/cmdk.mjs +315 -0
  94. package/admin-dist/server/_libs/convex.mjs +4841 -0
  95. package/admin-dist/server/_libs/cookie-es.mjs +58 -0
  96. package/admin-dist/server/_libs/croner.mjs +1 -0
  97. package/admin-dist/server/_libs/crossws.mjs +1 -0
  98. package/admin-dist/server/_libs/date-fns.mjs +1716 -0
  99. package/admin-dist/server/_libs/detect-node-es.mjs +1 -0
  100. package/admin-dist/server/_libs/get-nonce.mjs +9 -0
  101. package/admin-dist/server/_libs/h3-v2.mjs +277 -0
  102. package/admin-dist/server/_libs/h3.mjs +401 -0
  103. package/admin-dist/server/_libs/hookable.mjs +1 -0
  104. package/admin-dist/server/_libs/isbot.mjs +20 -0
  105. package/admin-dist/server/_libs/lucide-react.mjs +850 -0
  106. package/admin-dist/server/_libs/ohash.mjs +1 -0
  107. package/admin-dist/server/_libs/react-day-picker.mjs +2201 -0
  108. package/admin-dist/server/_libs/react-remove-scroll-bar.mjs +82 -0
  109. package/admin-dist/server/_libs/react-remove-scroll.mjs +328 -0
  110. package/admin-dist/server/_libs/react-style-singleton.mjs +69 -0
  111. package/admin-dist/server/_libs/rou3.mjs +8 -0
  112. package/admin-dist/server/_libs/seroval-plugins.mjs +58 -0
  113. package/admin-dist/server/_libs/seroval.mjs +1765 -0
  114. package/admin-dist/server/_libs/srvx.mjs +719 -0
  115. package/admin-dist/server/_libs/tailwind-merge.mjs +3010 -0
  116. package/admin-dist/server/_libs/tiny-invariant.mjs +12 -0
  117. package/admin-dist/server/_libs/tiny-warning.mjs +5 -0
  118. package/admin-dist/server/_libs/tslib.mjs +39 -0
  119. package/admin-dist/server/_libs/ufo.mjs +54 -0
  120. package/admin-dist/server/_libs/unctx.mjs +1 -0
  121. package/admin-dist/server/_libs/unstorage.mjs +1 -0
  122. package/admin-dist/server/_libs/use-callback-ref.mjs +66 -0
  123. package/admin-dist/server/_libs/use-sidecar.mjs +106 -0
  124. package/admin-dist/server/_libs/use-sync-external-store.mjs +139 -0
  125. package/admin-dist/server/_libs/zod.mjs +4223 -0
  126. package/admin-dist/server/_ssr/CmsEmptyState-DU7-7-mV.mjs +290 -0
  127. package/admin-dist/server/_ssr/CmsPageHeader-CseW0AHm.mjs +24 -0
  128. package/admin-dist/server/_ssr/CmsStatusBadge-B_pi4KCp.mjs +127 -0
  129. package/admin-dist/server/_ssr/CmsToolbar-X75ex6ek.mjs +49 -0
  130. package/admin-dist/server/_ssr/ContentEntryEditor-CepusRsA.mjs +3720 -0
  131. package/admin-dist/server/_ssr/ErrorState-cI-bKLez.mjs +89 -0
  132. package/admin-dist/server/_ssr/TaxonomyFilter-Bwrq0-cz.mjs +188 -0
  133. package/admin-dist/server/_ssr/_contentTypeId-BqYKEcLr.mjs +379 -0
  134. package/admin-dist/server/_ssr/_entryId-CRfnqeDf.mjs +161 -0
  135. package/admin-dist/server/_ssr/_tanstack-start-manifest_v-BwDlABVk.mjs +4 -0
  136. package/admin-dist/server/_ssr/alert-CVt45UUP.mjs +92 -0
  137. package/admin-dist/server/_ssr/badge-6BsP37vG.mjs +125 -0
  138. package/admin-dist/server/_ssr/command-fy8epIKf.mjs +128 -0
  139. package/admin-dist/server/_ssr/config.server-D7JHDcDv.mjs +117 -0
  140. package/admin-dist/server/_ssr/content-B5RhL7uW.mjs +532 -0
  141. package/admin-dist/server/_ssr/content-types-BIOqCQYN.mjs +1166 -0
  142. package/admin-dist/server/_ssr/index-DHSHDPt1.mjs +193 -0
  143. package/admin-dist/server/_ssr/index.mjs +1275 -0
  144. package/admin-dist/server/_ssr/label-C8Dko1j7.mjs +22 -0
  145. package/admin-dist/server/_ssr/media-CSx3XttC.mjs +1832 -0
  146. package/admin-dist/server/_ssr/new._contentTypeId-DzanEZQM.mjs +144 -0
  147. package/admin-dist/server/_ssr/router-DDWcF-kt.mjs +1556 -0
  148. package/admin-dist/server/_ssr/scroll-area-bjPYwhXN.mjs +59 -0
  149. package/admin-dist/server/_ssr/select-BUhDDf4T.mjs +142 -0
  150. package/admin-dist/server/_ssr/settings-DAsxnw2q.mjs +348 -0
  151. package/admin-dist/server/_ssr/start-HYkvq4Ni.mjs +4 -0
  152. package/admin-dist/server/_ssr/switch-BgyRtQ1Z.mjs +31 -0
  153. package/admin-dist/server/_ssr/tabs-DzMdRB1A.mjs +628 -0
  154. package/admin-dist/server/_ssr/taxonomies-C8j8g5Q5.mjs +915 -0
  155. package/admin-dist/server/_ssr/textarea-9jNeYJSc.mjs +18 -0
  156. package/admin-dist/server/_ssr/trash-DYMxwhZB.mjs +291 -0
  157. package/admin-dist/server/_ssr/useBreadcrumbLabel-FNSAr2Ha.mjs +16 -0
  158. package/admin-dist/server/_ssr/usePermissions-BJGGahrJ.mjs +68 -0
  159. package/admin-dist/server/favicon.ico +0 -0
  160. package/admin-dist/server/index.mjs +627 -0
  161. package/dist/cli/index.js +0 -0
  162. package/dist/client/admin-config.d.ts +0 -1
  163. package/dist/client/admin-config.d.ts.map +1 -1
  164. package/dist/client/admin-config.js +0 -1
  165. package/dist/client/admin-config.js.map +1 -1
  166. package/dist/client/adminApi.d.ts.map +1 -1
  167. package/dist/client/agentTools.d.ts +1237 -135
  168. package/dist/client/agentTools.d.ts.map +1 -1
  169. package/dist/client/agentTools.js +33 -9
  170. package/dist/client/agentTools.js.map +1 -1
  171. package/dist/client/index.d.ts +1 -1
  172. package/dist/client/index.d.ts.map +1 -1
  173. package/dist/client/index.js.map +1 -1
  174. package/dist/component/_generated/component.d.ts +9 -0
  175. package/dist/component/_generated/component.d.ts.map +1 -1
  176. package/dist/component/mediaAssets.d.ts +35 -0
  177. package/dist/component/mediaAssets.d.ts.map +1 -1
  178. package/dist/component/mediaAssets.js +81 -0
  179. package/dist/component/mediaAssets.js.map +1 -1
  180. package/dist/test.d.ts.map +1 -1
  181. package/dist/test.js +2 -1
  182. package/dist/test.js.map +1 -1
  183. package/package.json +9 -5
  184. package/dist/component/auditLog.d.ts +0 -410
  185. package/dist/component/auditLog.d.ts.map +0 -1
  186. package/dist/component/auditLog.js +0 -607
  187. package/dist/component/auditLog.js.map +0 -1
  188. package/dist/component/types.d.ts +0 -4
  189. package/dist/component/types.d.ts.map +0 -1
  190. package/dist/component/types.js +0 -2
  191. package/dist/component/types.js.map +0 -1
  192. package/src/cli/commands/admin.ts +0 -104
  193. package/src/cli/index.ts +0 -21
  194. package/src/cli/utils/detectConvexUrl.ts +0 -54
  195. package/src/cli/utils/openBrowser.ts +0 -16
  196. package/src/client/admin-config.ts +0 -138
  197. package/src/client/adminApi.ts +0 -942
  198. package/src/client/agentTools.ts +0 -1311
  199. package/src/client/argTypes.ts +0 -316
  200. package/src/client/field-types.ts +0 -187
  201. package/src/client/index.ts +0 -1301
  202. package/src/client/queryBuilder.ts +0 -1100
  203. package/src/client/schema/codegen.ts +0 -500
  204. package/src/client/schema/defineContentType.ts +0 -501
  205. package/src/client/schema/index.ts +0 -169
  206. package/src/client/schema/schemaDrift.ts +0 -574
  207. package/src/client/schema/typedClient.ts +0 -688
  208. package/src/client/schema/types.ts +0 -666
  209. package/src/client/types.ts +0 -723
  210. package/src/client/workflows.ts +0 -141
  211. package/src/client/wrapper.ts +0 -4304
  212. package/src/component/_generated/api.ts +0 -140
  213. package/src/component/_generated/component.ts +0 -5029
  214. package/src/component/_generated/dataModel.ts +0 -60
  215. package/src/component/_generated/server.ts +0 -156
  216. package/src/component/authorization.ts +0 -647
  217. package/src/component/authorizationHooks.ts +0 -668
  218. package/src/component/bulkOperations.ts +0 -687
  219. package/src/component/contentEntries.ts +0 -1976
  220. package/src/component/contentEntryMutations.ts +0 -1223
  221. package/src/component/contentEntryValidation.ts +0 -707
  222. package/src/component/contentLock.ts +0 -550
  223. package/src/component/contentTypeMigration.ts +0 -1064
  224. package/src/component/contentTypeMutations.ts +0 -969
  225. package/src/component/contentTypes.ts +0 -346
  226. package/src/component/convex.config.ts +0 -44
  227. package/src/component/documentTypes.ts +0 -240
  228. package/src/component/eventEmitter.ts +0 -485
  229. package/src/component/exportImport.ts +0 -1169
  230. package/src/component/index.ts +0 -491
  231. package/src/component/lib/deepReferenceResolver.ts +0 -999
  232. package/src/component/lib/errors.ts +0 -816
  233. package/src/component/lib/index.ts +0 -145
  234. package/src/component/lib/mediaReferenceResolver.ts +0 -495
  235. package/src/component/lib/metadataExtractor.ts +0 -792
  236. package/src/component/lib/mutationAuth.ts +0 -199
  237. package/src/component/lib/queries.ts +0 -79
  238. package/src/component/lib/ragContentChunker.ts +0 -1371
  239. package/src/component/lib/referenceResolver.ts +0 -430
  240. package/src/component/lib/slugGenerator.ts +0 -262
  241. package/src/component/lib/slugUniqueness.ts +0 -333
  242. package/src/component/lib/softDelete.ts +0 -44
  243. package/src/component/localeFallbackChain.ts +0 -673
  244. package/src/component/localeFields.ts +0 -896
  245. package/src/component/mediaAssetMutations.ts +0 -725
  246. package/src/component/mediaAssets.ts +0 -932
  247. package/src/component/mediaFolderMutations.ts +0 -1046
  248. package/src/component/mediaUploadMutations.ts +0 -224
  249. package/src/component/mediaVariantMutations.ts +0 -900
  250. package/src/component/mediaVariants.ts +0 -793
  251. package/src/component/ragContentIndexer.ts +0 -1067
  252. package/src/component/rateLimitHooks.ts +0 -572
  253. package/src/component/roles.ts +0 -1360
  254. package/src/component/scheduledPublish.ts +0 -358
  255. package/src/component/schema.ts +0 -617
  256. package/src/component/taxonomies.ts +0 -949
  257. package/src/component/taxonomyMutations.ts +0 -1210
  258. package/src/component/trash.ts +0 -724
  259. package/src/component/userContext.ts +0 -898
  260. package/src/component/validation.ts +0 -1388
  261. package/src/component/validators.ts +0 -949
  262. package/src/component/versionMutations.ts +0 -392
  263. package/src/component/webhookTrigger.ts +0 -1922
  264. package/src/react/index.ts +0 -898
  265. 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
- }