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,221 @@
1
+ /**
2
+ * Content Type Schema Definition
3
+ *
4
+ * The `defineContentType` function creates type-safe content type definitions
5
+ * using Convex validators. Types are automatically inferred via Convex's
6
+ * native `Infer<typeof validator>` pattern.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { v } from "convex/values";
11
+ * import { defineContentType } from "@convex-cms/core";
12
+ *
13
+ * export const blogPost = defineContentType({
14
+ * name: "blog_post",
15
+ * validator: v.object({
16
+ * title: v.string(),
17
+ * slug: v.string(),
18
+ * content: v.string(),
19
+ * author: v.id("contentEntries"),
20
+ * category: v.optional(v.union(v.literal("tech"), v.literal("news"))),
21
+ * publishedAt: v.optional(v.number()),
22
+ * }),
23
+ * meta: {
24
+ * displayName: "Blog Post",
25
+ * titleField: "title",
26
+ * slugField: "slug",
27
+ * fields: {
28
+ * title: { label: "Title", maxLength: 200 },
29
+ * content: { label: "Content", renderAs: "richText", searchable: true },
30
+ * author: { label: "Author", renderAs: "reference" },
31
+ * category: { label: "Category", renderAs: "select" },
32
+ * },
33
+ * },
34
+ * });
35
+ * ```
36
+ */
37
+ import type { Validator } from "convex/values";
38
+ import type { ContentTypeConfig, ContentTypeDefinition } from "./types.js";
39
+ /**
40
+ * Creates a type-safe content type definition.
41
+ *
42
+ * This function accepts a Convex validator and CMS metadata, returning a
43
+ * definition object that can be used for:
44
+ * 1. **Type inference**: `Infer<typeof definition.validator>` gives the data type
45
+ * 2. **Runtime validation**: The validator is used to validate content at runtime
46
+ * 3. **Admin UI configuration**: Metadata provides display hints and field labels
47
+ *
48
+ * ## Why Convex Validators?
49
+ *
50
+ * Using Convex validators directly (instead of custom schema builders) provides:
51
+ * - **Native type inference** via `Infer<typeof>` - no custom type machinery
52
+ * - **Familiarity** - same validators used in Convex functions
53
+ * - **Full power** - supports unions, literals, nested objects, arrays, IDs
54
+ * - **Maintenance-free** - types are maintained by Convex
55
+ *
56
+ * ## Example: Basic Blog Post
57
+ *
58
+ * ```typescript
59
+ * import { v, Infer } from "convex/values";
60
+ * import { defineContentType } from "@convex-cms/core";
61
+ *
62
+ * export const blogPost = defineContentType({
63
+ * name: "blog_post",
64
+ * validator: v.object({
65
+ * title: v.string(),
66
+ * content: v.string(),
67
+ * publishedAt: v.optional(v.number()),
68
+ * }),
69
+ * meta: {
70
+ * displayName: "Blog Post",
71
+ * titleField: "title",
72
+ * },
73
+ * });
74
+ *
75
+ * // Type is automatically inferred
76
+ * type BlogPostData = Infer<typeof blogPost.validator>;
77
+ * // { title: string; content: string; publishedAt?: number }
78
+ * ```
79
+ *
80
+ * ## Example: Product with Variants
81
+ *
82
+ * ```typescript
83
+ * export const product = defineContentType({
84
+ * name: "product",
85
+ * validator: v.object({
86
+ * name: v.string(),
87
+ * price: v.number(),
88
+ * description: v.optional(v.string()),
89
+ * variants: v.array(v.object({
90
+ * sku: v.string(),
91
+ * name: v.string(),
92
+ * price: v.number(),
93
+ * attributes: v.record(v.string(), v.string()),
94
+ * })),
95
+ * seo: v.optional(v.object({
96
+ * title: v.string(),
97
+ * description: v.string(),
98
+ * keywords: v.array(v.string()),
99
+ * })),
100
+ * }),
101
+ * meta: {
102
+ * displayName: "Product",
103
+ * titleField: "name",
104
+ * fields: {
105
+ * name: { label: "Product Name", searchable: true },
106
+ * price: { label: "Base Price" },
107
+ * variants: { label: "Variants", renderAs: "json" },
108
+ * seo: { label: "SEO Settings", renderAs: "json" },
109
+ * },
110
+ * },
111
+ * });
112
+ * ```
113
+ *
114
+ * @param config - The content type configuration
115
+ * @returns A frozen content type definition object
116
+ *
117
+ * @typeParam TName - The literal string type of the content type name
118
+ * @typeParam TValidator - The Convex validator type
119
+ */
120
+ export declare function defineContentType<const TName extends string, TValidator extends Validator<Record<string, unknown>, "required", string>>(config: ContentTypeConfig<TValidator> & {
121
+ name: TName;
122
+ }): ContentTypeDefinition<TName, TValidator>;
123
+ /**
124
+ * Creates a content schema from multiple content type definitions.
125
+ *
126
+ * This is a convenience function that validates the schema and provides
127
+ * runtime utilities for working with multiple content types.
128
+ *
129
+ * @example
130
+ * ```typescript
131
+ * import { createContentSchema } from "@convex-cms/core";
132
+ *
133
+ * export const contentSchema = createContentSchema({
134
+ * blogPost,
135
+ * author,
136
+ * product,
137
+ * });
138
+ *
139
+ * // Get a specific definition
140
+ * const blogDef = contentSchema.getDefinition("blog_post");
141
+ *
142
+ * // List all content type names
143
+ * const names = contentSchema.getContentTypeNames();
144
+ * // ["blog_post", "author", "product"]
145
+ * ```
146
+ *
147
+ * @param definitions - An object containing content type definitions
148
+ * @returns A schema object with utility methods
149
+ */
150
+ export declare function createContentSchema<T extends Record<string, ContentTypeDefinition>>(definitions: T): ContentSchemaInstance<T>;
151
+ /**
152
+ * A content schema instance with utility methods.
153
+ */
154
+ export interface ContentSchemaInstance<T extends Record<string, ContentTypeDefinition>> {
155
+ /**
156
+ * The raw definitions object.
157
+ */
158
+ readonly definitions: T;
159
+ /**
160
+ * Get a content type definition by its name.
161
+ *
162
+ * @param name - The content type name (e.g., "blog_post")
163
+ * @returns The definition or undefined if not found
164
+ */
165
+ getDefinition(name: string): ContentTypeDefinition | undefined;
166
+ /**
167
+ * Get all content type names in the schema.
168
+ *
169
+ * @returns Array of content type names
170
+ */
171
+ getContentTypeNames(): string[];
172
+ /**
173
+ * Check if a content type exists in the schema.
174
+ *
175
+ * @param name - The content type name to check
176
+ * @returns true if the content type exists
177
+ */
178
+ hasContentType(name: string): boolean;
179
+ /**
180
+ * Get a content type definition by its key in the definitions object.
181
+ *
182
+ * @param key - The key used in the definitions object
183
+ * @returns The definition
184
+ */
185
+ getDefinitionByKey<K extends keyof T>(key: K): T[K];
186
+ }
187
+ /**
188
+ * Field definition format expected by the CMS database.
189
+ * This is the format stored in contentTypes.fields.
190
+ */
191
+ export interface DatabaseFieldDefinition {
192
+ name: string;
193
+ label: string;
194
+ type: string;
195
+ required: boolean;
196
+ searchable?: boolean;
197
+ localized?: boolean;
198
+ description?: string;
199
+ defaultValue?: unknown;
200
+ options?: Record<string, unknown>;
201
+ }
202
+ /**
203
+ * Converts a content type definition to the database field format.
204
+ *
205
+ * This bridges the gap between the code-defined schema and the
206
+ * database format used by the CMS component.
207
+ *
208
+ * @param definition - The content type definition
209
+ * @returns An array of field definitions for the database
210
+ *
211
+ * @example
212
+ * ```typescript
213
+ * const fields = toFieldDefinitions(blogPost);
214
+ * // [
215
+ * // { name: "title", label: "Title", type: "text", required: true, ... },
216
+ * // { name: "content", label: "Content", type: "richText", required: true, ... },
217
+ * // ]
218
+ * ```
219
+ */
220
+ export declare function toFieldDefinitions(definition: ContentTypeDefinition): DatabaseFieldDefinition[];
221
+ //# sourceMappingURL=defineContentType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineContentType.d.ts","sourceRoot":"","sources":["../../../src/client/schema/defineContentType.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AAsCpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,CAAC,KAAK,SAAS,MAAM,EAC1B,UAAU,SAAS,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAEzE,MAAM,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACtD,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAc1C;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC/C,WAAW,EAAE,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAmC1C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CACpC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAE/C;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAExB;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAC;IAE/D;;;;OAIG;IACH,mBAAmB,IAAI,MAAM,EAAE,CAAC;IAEhC;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAEtC;;;;;OAKG;IACH,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CACrD;AAMD;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,qBAAqB,GAChC,uBAAuB,EAAE,CAoB3B"}
@@ -0,0 +1,380 @@
1
+ /**
2
+ * Content Type Schema Definition
3
+ *
4
+ * The `defineContentType` function creates type-safe content type definitions
5
+ * using Convex validators. Types are automatically inferred via Convex's
6
+ * native `Infer<typeof validator>` pattern.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { v } from "convex/values";
11
+ * import { defineContentType } from "@convex-cms/core";
12
+ *
13
+ * export const blogPost = defineContentType({
14
+ * name: "blog_post",
15
+ * validator: v.object({
16
+ * title: v.string(),
17
+ * slug: v.string(),
18
+ * content: v.string(),
19
+ * author: v.id("contentEntries"),
20
+ * category: v.optional(v.union(v.literal("tech"), v.literal("news"))),
21
+ * publishedAt: v.optional(v.number()),
22
+ * }),
23
+ * meta: {
24
+ * displayName: "Blog Post",
25
+ * titleField: "title",
26
+ * slugField: "slug",
27
+ * fields: {
28
+ * title: { label: "Title", maxLength: 200 },
29
+ * content: { label: "Content", renderAs: "richText", searchable: true },
30
+ * author: { label: "Author", renderAs: "reference" },
31
+ * category: { label: "Category", renderAs: "select" },
32
+ * },
33
+ * },
34
+ * });
35
+ * ```
36
+ */
37
+ // =============================================================================
38
+ // Content Type Name Validation
39
+ // =============================================================================
40
+ /**
41
+ * Pattern for valid content type names.
42
+ * - Lowercase letters, numbers, and underscores only
43
+ * - Must start with a letter
44
+ * - 1-50 characters
45
+ */
46
+ const CONTENT_TYPE_NAME_PATTERN = /^[a-z][a-z0-9_]{0,49}$/;
47
+ /**
48
+ * Validates a content type name.
49
+ *
50
+ * @param name - The name to validate
51
+ * @throws Error if the name is invalid
52
+ */
53
+ function validateContentTypeName(name) {
54
+ if (!name) {
55
+ throw new Error("Content type name is required");
56
+ }
57
+ if (!CONTENT_TYPE_NAME_PATTERN.test(name)) {
58
+ throw new Error(`Invalid content type name "${name}". ` +
59
+ "Names must start with a lowercase letter and contain only " +
60
+ "lowercase letters, numbers, and underscores (1-50 characters).");
61
+ }
62
+ }
63
+ // =============================================================================
64
+ // Define Content Type
65
+ // =============================================================================
66
+ /**
67
+ * Creates a type-safe content type definition.
68
+ *
69
+ * This function accepts a Convex validator and CMS metadata, returning a
70
+ * definition object that can be used for:
71
+ * 1. **Type inference**: `Infer<typeof definition.validator>` gives the data type
72
+ * 2. **Runtime validation**: The validator is used to validate content at runtime
73
+ * 3. **Admin UI configuration**: Metadata provides display hints and field labels
74
+ *
75
+ * ## Why Convex Validators?
76
+ *
77
+ * Using Convex validators directly (instead of custom schema builders) provides:
78
+ * - **Native type inference** via `Infer<typeof>` - no custom type machinery
79
+ * - **Familiarity** - same validators used in Convex functions
80
+ * - **Full power** - supports unions, literals, nested objects, arrays, IDs
81
+ * - **Maintenance-free** - types are maintained by Convex
82
+ *
83
+ * ## Example: Basic Blog Post
84
+ *
85
+ * ```typescript
86
+ * import { v, Infer } from "convex/values";
87
+ * import { defineContentType } from "@convex-cms/core";
88
+ *
89
+ * export const blogPost = defineContentType({
90
+ * name: "blog_post",
91
+ * validator: v.object({
92
+ * title: v.string(),
93
+ * content: v.string(),
94
+ * publishedAt: v.optional(v.number()),
95
+ * }),
96
+ * meta: {
97
+ * displayName: "Blog Post",
98
+ * titleField: "title",
99
+ * },
100
+ * });
101
+ *
102
+ * // Type is automatically inferred
103
+ * type BlogPostData = Infer<typeof blogPost.validator>;
104
+ * // { title: string; content: string; publishedAt?: number }
105
+ * ```
106
+ *
107
+ * ## Example: Product with Variants
108
+ *
109
+ * ```typescript
110
+ * export const product = defineContentType({
111
+ * name: "product",
112
+ * validator: v.object({
113
+ * name: v.string(),
114
+ * price: v.number(),
115
+ * description: v.optional(v.string()),
116
+ * variants: v.array(v.object({
117
+ * sku: v.string(),
118
+ * name: v.string(),
119
+ * price: v.number(),
120
+ * attributes: v.record(v.string(), v.string()),
121
+ * })),
122
+ * seo: v.optional(v.object({
123
+ * title: v.string(),
124
+ * description: v.string(),
125
+ * keywords: v.array(v.string()),
126
+ * })),
127
+ * }),
128
+ * meta: {
129
+ * displayName: "Product",
130
+ * titleField: "name",
131
+ * fields: {
132
+ * name: { label: "Product Name", searchable: true },
133
+ * price: { label: "Base Price" },
134
+ * variants: { label: "Variants", renderAs: "json" },
135
+ * seo: { label: "SEO Settings", renderAs: "json" },
136
+ * },
137
+ * },
138
+ * });
139
+ * ```
140
+ *
141
+ * @param config - The content type configuration
142
+ * @returns A frozen content type definition object
143
+ *
144
+ * @typeParam TName - The literal string type of the content type name
145
+ * @typeParam TValidator - The Convex validator type
146
+ */
147
+ export function defineContentType(config) {
148
+ // Validate the content type name at definition time
149
+ validateContentTypeName(config.name);
150
+ // Create the definition object
151
+ const definition = {
152
+ name: config.name,
153
+ validator: config.validator,
154
+ meta: config.meta,
155
+ _type: "content_type_definition",
156
+ };
157
+ // Freeze to prevent accidental mutation
158
+ return Object.freeze(definition);
159
+ }
160
+ // =============================================================================
161
+ // Schema Collection Utilities
162
+ // =============================================================================
163
+ /**
164
+ * Creates a content schema from multiple content type definitions.
165
+ *
166
+ * This is a convenience function that validates the schema and provides
167
+ * runtime utilities for working with multiple content types.
168
+ *
169
+ * @example
170
+ * ```typescript
171
+ * import { createContentSchema } from "@convex-cms/core";
172
+ *
173
+ * export const contentSchema = createContentSchema({
174
+ * blogPost,
175
+ * author,
176
+ * product,
177
+ * });
178
+ *
179
+ * // Get a specific definition
180
+ * const blogDef = contentSchema.getDefinition("blog_post");
181
+ *
182
+ * // List all content type names
183
+ * const names = contentSchema.getContentTypeNames();
184
+ * // ["blog_post", "author", "product"]
185
+ * ```
186
+ *
187
+ * @param definitions - An object containing content type definitions
188
+ * @returns A schema object with utility methods
189
+ */
190
+ export function createContentSchema(definitions) {
191
+ // Build a map of name -> definition for quick lookup
192
+ const byName = new Map();
193
+ const names = [];
194
+ for (const [_key, def] of Object.entries(definitions)) {
195
+ if (byName.has(def.name)) {
196
+ throw new Error(`Duplicate content type name "${def.name}" in schema. ` +
197
+ `Content type names must be unique.`);
198
+ }
199
+ byName.set(def.name, def);
200
+ names.push(def.name);
201
+ }
202
+ return Object.freeze({
203
+ definitions,
204
+ getDefinition(name) {
205
+ return byName.get(name);
206
+ },
207
+ getContentTypeNames() {
208
+ return [...names];
209
+ },
210
+ hasContentType(name) {
211
+ return byName.has(name);
212
+ },
213
+ getDefinitionByKey(key) {
214
+ return definitions[key];
215
+ },
216
+ });
217
+ }
218
+ /**
219
+ * Converts a content type definition to the database field format.
220
+ *
221
+ * This bridges the gap between the code-defined schema and the
222
+ * database format used by the CMS component.
223
+ *
224
+ * @param definition - The content type definition
225
+ * @returns An array of field definitions for the database
226
+ *
227
+ * @example
228
+ * ```typescript
229
+ * const fields = toFieldDefinitions(blogPost);
230
+ * // [
231
+ * // { name: "title", label: "Title", type: "text", required: true, ... },
232
+ * // { name: "content", label: "Content", type: "richText", required: true, ... },
233
+ * // ]
234
+ * ```
235
+ */
236
+ export function toFieldDefinitions(definition) {
237
+ // Extract field information from the validator
238
+ // This requires introspecting the validator structure
239
+ const validatorFields = extractValidatorFields(definition.validator);
240
+ const fieldMeta = definition.meta.fields || {};
241
+ return validatorFields.map((field) => {
242
+ const meta = fieldMeta[field.name] || {};
243
+ return {
244
+ name: field.name,
245
+ label: meta.label || field.name,
246
+ type: meta.renderAs || inferFieldType(field.validatorType),
247
+ required: field.required,
248
+ searchable: meta.searchable,
249
+ localized: meta.localized,
250
+ description: meta.description,
251
+ options: buildFieldOptions(field, meta),
252
+ };
253
+ });
254
+ }
255
+ /**
256
+ * Extract field information from a Convex object validator.
257
+ *
258
+ * @internal
259
+ */
260
+ function extractValidatorFields(validator) {
261
+ const fields = [];
262
+ // Convex validators have internal structure we can introspect
263
+ // The validator has a `fields` property for object validators
264
+ const validatorAny = validator;
265
+ // Try to access the validator's internal field definitions
266
+ if (validatorAny.fields) {
267
+ for (const [name, fieldInfo] of Object.entries(validatorAny.fields)) {
268
+ const innerValidator = fieldInfo.validator;
269
+ const isOptional = innerValidator?.isOptional === "optional";
270
+ fields.push({
271
+ name,
272
+ validatorType: innerValidator?.type || innerValidator?.kind || "unknown",
273
+ required: !isOptional,
274
+ innerValidator,
275
+ });
276
+ }
277
+ }
278
+ return fields;
279
+ }
280
+ /**
281
+ * Infer a CMS field type from a Convex validator type.
282
+ *
283
+ * @internal
284
+ */
285
+ function inferFieldType(validatorType) {
286
+ const typeMap = {
287
+ string: "text",
288
+ number: "number",
289
+ boolean: "boolean",
290
+ id: "reference",
291
+ array: "json",
292
+ object: "json",
293
+ union: "select",
294
+ literal: "select",
295
+ bytes: "media",
296
+ };
297
+ return typeMap[validatorType] || "text";
298
+ }
299
+ /**
300
+ * Build field options from extracted field info and metadata.
301
+ *
302
+ * This function maps all FieldMeta options to the database field options format.
303
+ * The options object is stored in contentTypes.fields[].options and is used
304
+ * for validation and UI rendering.
305
+ *
306
+ * @internal
307
+ */
308
+ function buildFieldOptions(field, meta) {
309
+ const options = {};
310
+ // ==========================================================================
311
+ // Text Field Options
312
+ // ==========================================================================
313
+ if (meta.minLength !== undefined)
314
+ options.minLength = meta.minLength;
315
+ if (meta.maxLength !== undefined)
316
+ options.maxLength = meta.maxLength;
317
+ if (meta.pattern !== undefined)
318
+ options.pattern = meta.pattern;
319
+ // Note: patternMessage and multiline are UI hints, not stored in component schema
320
+ // They could be stored in a separate UI hints field if needed
321
+ // ==========================================================================
322
+ // Number Field Options
323
+ // ==========================================================================
324
+ if (meta.min !== undefined)
325
+ options.min = meta.min;
326
+ if (meta.max !== undefined)
327
+ options.max = meta.max;
328
+ if (meta.step !== undefined)
329
+ options.step = meta.step;
330
+ if (meta.precision !== undefined)
331
+ options.precision = meta.precision;
332
+ // Note: prefix/suffix are UI hints, not stored in component schema
333
+ // ==========================================================================
334
+ // Reference Field Options
335
+ // ==========================================================================
336
+ if (meta.allowedContentTypes !== undefined)
337
+ options.allowedContentTypes = meta.allowedContentTypes;
338
+ if (meta.multiple !== undefined)
339
+ options.multiple = meta.multiple;
340
+ if (meta.minItems !== undefined)
341
+ options.minItems = meta.minItems;
342
+ // Note: maxItems maps to minItems in the component (for validation purposes)
343
+ // The component schema has minItems but not maxItems - we'll add it anyway
344
+ // for forward compatibility
345
+ // ==========================================================================
346
+ // Media Field Options
347
+ // ==========================================================================
348
+ if (meta.allowedMimeTypes !== undefined)
349
+ options.allowedMimeTypes = meta.allowedMimeTypes;
350
+ if (meta.maxFileSize !== undefined)
351
+ options.maxFileSize = meta.maxFileSize;
352
+ // ==========================================================================
353
+ // Select/MultiSelect Field Options
354
+ // ==========================================================================
355
+ if (meta.options !== undefined)
356
+ options.options = meta.options;
357
+ // Note: minSelections/maxSelections could be mapped to minItems/maxItems
358
+ // ==========================================================================
359
+ // Rich Text Field Options
360
+ // ==========================================================================
361
+ if (meta.allowedBlocks !== undefined)
362
+ options.allowedBlocks = meta.allowedBlocks;
363
+ if (meta.allowedMarks !== undefined)
364
+ options.allowedMarks = meta.allowedMarks;
365
+ // ==========================================================================
366
+ // Taxonomy Field Options (tags/category)
367
+ // ==========================================================================
368
+ if (meta.taxonomyId !== undefined)
369
+ options.taxonomyId = meta.taxonomyId;
370
+ if (meta.allowCreate !== undefined)
371
+ options.allowCreate = meta.allowCreate;
372
+ if (meta.maxTags !== undefined)
373
+ options.maxTags = meta.maxTags;
374
+ if (meta.minTags !== undefined)
375
+ options.minTags = meta.minTags;
376
+ if (meta.allowMultiple !== undefined)
377
+ options.allowMultiple = meta.allowMultiple;
378
+ return Object.keys(options).length > 0 ? options : undefined;
379
+ }
380
+ //# sourceMappingURL=defineContentType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineContentType.js","sourceRoot":"","sources":["../../../src/client/schema/defineContentType.ts"],"names":[],"mappings":"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"}