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,621 @@
1
+ /**
2
+ * Trash Management Functions
3
+ *
4
+ * Provides functionality for managing soft-deleted content entries in a "trash" system:
5
+ * - List deleted entries with pagination and filtering
6
+ * - Configure retention period for automatic cleanup
7
+ * - Manually empty trash (permanent deletion)
8
+ * - Automatic scheduled cleanup of old deleted items
9
+ *
10
+ * Soft Delete Workflow:
11
+ * 1. User deletes an entry -> `deletedAt` timestamp is set (soft delete)
12
+ * 2. Entry is hidden from normal queries but visible in trash
13
+ * 3. User can restore the entry using `restoreEntry` mutation
14
+ * 4. After retention period, entry is permanently deleted (hard delete)
15
+ *
16
+ * Configuration:
17
+ * - `retentionDays`: How long items stay in trash (default: 30 days)
18
+ * - `autoCleanupEnabled`: Whether to run automatic cleanup (default: true)
19
+ * - Setting `retentionDays` to 0 disables automatic cleanup
20
+ */
21
+ import { v } from "convex/values";
22
+ import { isDeleted } from "./lib/softDelete.js";
23
+ import { stream } from "convex-helpers/server/stream";
24
+ import { query, mutation, internalMutation } from "./_generated/server.js";
25
+ import { internal } from "./_generated/api.js";
26
+ import {
27
+ // contentEntryDoc,
28
+ trashConfigDoc, updateTrashConfigArgs, listTrashArgs, emptyTrashArgs, emptyTrashResult, trashItemDoc, DEFAULT_TRASH_RETENTION_DAYS, } from "./validators.js";
29
+ import schema from "./schema.js";
30
+ // =============================================================================
31
+ // Constants
32
+ // =============================================================================
33
+ /** Default pagination size for trash listing */
34
+ const DEFAULT_NUM_ITEMS = 50;
35
+ /** Maximum items per page */
36
+ const MAX_NUM_ITEMS = 250;
37
+ /** Milliseconds in a day */
38
+ const MS_PER_DAY = 24 * 60 * 60 * 1000;
39
+ // =============================================================================
40
+ // Trash Configuration
41
+ // =============================================================================
42
+ /**
43
+ * Query to get the current trash configuration.
44
+ *
45
+ * If no configuration exists, returns default values.
46
+ * This is useful for displaying settings in the admin UI.
47
+ *
48
+ * @returns Current trash configuration
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const config = await ctx.runQuery(api.trash.getTrashConfig, {});
53
+ * console.log(`Retention: ${config.retentionDays} days`);
54
+ * console.log(`Auto-cleanup: ${config.autoCleanupEnabled}`);
55
+ * ```
56
+ */
57
+ export const getTrashConfig = query({
58
+ args: {},
59
+ returns: v.object({
60
+ retentionDays: v.number(),
61
+ autoCleanupEnabled: v.boolean(),
62
+ lastCleanupAt: v.optional(v.number()),
63
+ lastCleanupCount: v.optional(v.number()),
64
+ }),
65
+ handler: async (ctx) => {
66
+ // Get the singleton config record
67
+ const config = await ctx.db.query("trashConfig").first();
68
+ if (config) {
69
+ return {
70
+ retentionDays: config.retentionDays,
71
+ autoCleanupEnabled: config.autoCleanupEnabled,
72
+ lastCleanupAt: config.lastCleanupAt,
73
+ lastCleanupCount: config.lastCleanupCount,
74
+ };
75
+ }
76
+ // Return defaults if no config exists
77
+ return {
78
+ retentionDays: DEFAULT_TRASH_RETENTION_DAYS,
79
+ autoCleanupEnabled: true,
80
+ lastCleanupAt: undefined,
81
+ lastCleanupCount: undefined,
82
+ };
83
+ },
84
+ });
85
+ /**
86
+ * Mutation to update trash configuration settings.
87
+ *
88
+ * Creates the config record if it doesn't exist.
89
+ * Use this to customize retention period or disable auto-cleanup.
90
+ *
91
+ * @param retentionDays - Days to keep items in trash (0 to disable auto-cleanup)
92
+ * @param autoCleanupEnabled - Whether to enable automatic cleanup
93
+ * @param updatedBy - User ID for audit trail
94
+ *
95
+ * @returns Updated configuration
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * // Set 7-day retention period
100
+ * await ctx.runMutation(api.trash.updateTrashConfig, {
101
+ * retentionDays: 7,
102
+ * updatedBy: currentUserId,
103
+ * });
104
+ *
105
+ * // Disable auto-cleanup (keep items forever until manually deleted)
106
+ * await ctx.runMutation(api.trash.updateTrashConfig, {
107
+ * autoCleanupEnabled: false,
108
+ * updatedBy: currentUserId,
109
+ * });
110
+ * ```
111
+ */
112
+ export const updateTrashConfig = mutation({
113
+ args: updateTrashConfigArgs.fields,
114
+ returns: trashConfigDoc,
115
+ handler: async (ctx, args) => {
116
+ const { retentionDays, autoCleanupEnabled, updatedBy } = args;
117
+ // Validate retention days
118
+ if (retentionDays !== undefined) {
119
+ if (retentionDays < 0 || retentionDays > 365) {
120
+ throw new Error("Retention days must be between 0 and 365");
121
+ }
122
+ }
123
+ // Get existing config
124
+ const existingConfig = await ctx.db.query("trashConfig").first();
125
+ if (existingConfig) {
126
+ // Update existing config
127
+ const updates = { updatedBy };
128
+ if (retentionDays !== undefined)
129
+ updates.retentionDays = retentionDays;
130
+ if (autoCleanupEnabled !== undefined)
131
+ updates.autoCleanupEnabled = autoCleanupEnabled;
132
+ await ctx.db.patch(existingConfig._id, updates);
133
+ const updated = await ctx.db.get(existingConfig._id);
134
+ return updated;
135
+ }
136
+ else {
137
+ // Create new config with defaults for unspecified fields
138
+ const configId = await ctx.db.insert("trashConfig", {
139
+ retentionDays: retentionDays ?? DEFAULT_TRASH_RETENTION_DAYS,
140
+ autoCleanupEnabled: autoCleanupEnabled ?? true,
141
+ updatedBy,
142
+ });
143
+ const newConfig = await ctx.db.get(configId);
144
+ return newConfig;
145
+ }
146
+ },
147
+ });
148
+ // =============================================================================
149
+ // List Trash Query
150
+ // =============================================================================
151
+ /**
152
+ * Paginated response for trash listing.
153
+ */
154
+ const paginatedTrashResponse = v.object({
155
+ /** Array of deleted content entries with metadata */
156
+ page: v.array(trashItemDoc),
157
+ /** Cursor for fetching the next page */
158
+ continueCursor: v.union(v.string(), v.null()),
159
+ /** Whether this is the last page */
160
+ isDone: v.boolean(),
161
+ /** Total count of items in trash (approximate) */
162
+ totalCount: v.optional(v.number()),
163
+ });
164
+ /**
165
+ * Query to list soft-deleted content entries (trash).
166
+ *
167
+ * Returns entries that have been soft-deleted, sorted by deletion time
168
+ * (most recently deleted first). Each entry includes metadata about
169
+ * when it was deleted and when it will expire.
170
+ *
171
+ * @param contentTypeId - Filter by content type ID
172
+ * @param contentTypeName - Filter by content type name
173
+ * @param search - Search within deleted items
174
+ * @param paginationOpts - Standard pagination options
175
+ *
176
+ * @returns Paginated list of deleted entries
177
+ *
178
+ * @example
179
+ * ```typescript
180
+ * // List all trash items
181
+ * const { page, continueCursor, isDone } = await ctx.runQuery(
182
+ * api.trash.listTrash,
183
+ * { paginationOpts: { numItems: 20 } }
184
+ * );
185
+ *
186
+ * // Filter by content type
187
+ * const deletedPosts = await ctx.runQuery(api.trash.listTrash, {
188
+ * contentTypeName: "blog_post",
189
+ * paginationOpts: { numItems: 20 },
190
+ * });
191
+ *
192
+ * // Each item includes deletion metadata
193
+ * for (const item of page) {
194
+ * console.log(`${item.slug} - deleted ${item.deletedDaysAgo} days ago`);
195
+ * if (item.expiresAt) {
196
+ * console.log(` Expires: ${new Date(item.expiresAt).toISOString()}`);
197
+ * }
198
+ * }
199
+ * ```
200
+ */
201
+ export const listTrash = query({
202
+ args: listTrashArgs.fields,
203
+ returns: paginatedTrashResponse,
204
+ handler: async (ctx, args) => {
205
+ const { contentTypeId, contentTypeName, search, paginationOpts } = args;
206
+ // Clamp pagination
207
+ const numItems = Math.min(Math.max(1, paginationOpts.numItems ?? DEFAULT_NUM_ITEMS), MAX_NUM_ITEMS);
208
+ const clampedPaginationOpts = {
209
+ ...paginationOpts,
210
+ numItems,
211
+ };
212
+ // Resolve content type ID from name if provided
213
+ let resolvedContentTypeId = contentTypeId;
214
+ if (!resolvedContentTypeId && contentTypeName) {
215
+ const contentType = await ctx.db
216
+ .query("contentTypes")
217
+ .withIndex("by_name", (q) => q.eq("name", contentTypeName))
218
+ .first();
219
+ if (contentType) {
220
+ resolvedContentTypeId = contentType._id;
221
+ }
222
+ }
223
+ // Get trash config for retention period
224
+ const config = await ctx.db.query("trashConfig").first();
225
+ const retentionDays = config?.retentionDays ?? DEFAULT_TRASH_RETENTION_DAYS;
226
+ const now = Date.now();
227
+ // Create content type cache for display names
228
+ const contentTypeCache = new Map();
229
+ // Build the query using the by_deleted index
230
+ const streamDb = stream(ctx.db, schema);
231
+ // Query deleted entries (where deletedAt is defined)
232
+ // We use filterWith to handle the complex filtering
233
+ const baseQuery = streamDb.query("contentEntries");
234
+ const filteredQuery = baseQuery.order("desc").filterWith(async (entry) => {
235
+ // Must be deleted
236
+ if (!isDeleted(entry)) {
237
+ return false;
238
+ }
239
+ // Filter by content type if specified
240
+ if (resolvedContentTypeId &&
241
+ entry.contentTypeId !== resolvedContentTypeId) {
242
+ return false;
243
+ }
244
+ // Simple text search if provided
245
+ if (search && search.trim().length > 0) {
246
+ const searchLower = search.toLowerCase();
247
+ const slugMatch = entry.slug?.toLowerCase().includes(searchLower);
248
+ const searchTextMatch = entry.searchText
249
+ ?.toLowerCase()
250
+ .includes(searchLower);
251
+ if (!slugMatch && !searchTextMatch) {
252
+ return false;
253
+ }
254
+ }
255
+ return true;
256
+ });
257
+ // Execute pagination
258
+ const result = await filteredQuery.paginate({
259
+ ...clampedPaginationOpts,
260
+ maximumRowsRead: numItems * 10,
261
+ });
262
+ // Enrich results with deletion metadata
263
+ const enrichedPage = await Promise.all(result.page.map(async (entry) => {
264
+ const deletedAt = entry.deletedAt;
265
+ const deletedDaysAgo = Math.floor((now - deletedAt) / MS_PER_DAY);
266
+ // Calculate expiration time based on retention
267
+ let expiresAt;
268
+ if (retentionDays > 0) {
269
+ expiresAt = deletedAt + retentionDays * MS_PER_DAY;
270
+ }
271
+ // Get content type display name
272
+ let contentTypeName = contentTypeCache.get(entry.contentTypeId.toString());
273
+ if (!contentTypeName) {
274
+ const ct = await ctx.db.get(entry.contentTypeId);
275
+ contentTypeName = ct?.displayName ?? ct?.name;
276
+ if (contentTypeName) {
277
+ contentTypeCache.set(entry.contentTypeId.toString(), contentTypeName);
278
+ }
279
+ }
280
+ return {
281
+ ...entry,
282
+ deletedDaysAgo,
283
+ expiresAt,
284
+ contentTypeName,
285
+ };
286
+ }));
287
+ return {
288
+ page: enrichedPage,
289
+ continueCursor: result.continueCursor,
290
+ isDone: result.isDone,
291
+ };
292
+ },
293
+ });
294
+ /**
295
+ * Query to get trash statistics.
296
+ *
297
+ * Returns counts and metadata about items in trash.
298
+ * Useful for displaying trash status in the admin UI.
299
+ *
300
+ * @returns Trash statistics
301
+ */
302
+ export const getTrashStats = query({
303
+ args: {},
304
+ returns: v.object({
305
+ /** Total number of items in trash */
306
+ totalCount: v.number(),
307
+ /** Number of items that have expired (past retention period) */
308
+ expiredCount: v.number(),
309
+ /** Oldest item deletion date */
310
+ oldestDeletedAt: v.optional(v.number()),
311
+ /** Most recent item deletion date */
312
+ newestDeletedAt: v.optional(v.number()),
313
+ /** Current retention period in days */
314
+ retentionDays: v.number(),
315
+ }),
316
+ handler: async (ctx) => {
317
+ // Get trash config
318
+ const config = await ctx.db.query("trashConfig").first();
319
+ const retentionDays = config?.retentionDays ?? DEFAULT_TRASH_RETENTION_DAYS;
320
+ const now = Date.now();
321
+ const expirationThreshold = now - retentionDays * MS_PER_DAY;
322
+ // Query all deleted entries
323
+ const deletedEntries = await ctx.db
324
+ .query("contentEntries")
325
+ .filter((q) => q.neq(q.field("deletedAt"), undefined))
326
+ .collect();
327
+ let totalCount = 0;
328
+ let expiredCount = 0;
329
+ let oldestDeletedAt;
330
+ let newestDeletedAt;
331
+ for (const entry of deletedEntries) {
332
+ if (!isDeleted(entry))
333
+ continue;
334
+ const deletedAt = entry.deletedAt;
335
+ totalCount++;
336
+ if (retentionDays > 0 && deletedAt < expirationThreshold) {
337
+ expiredCount++;
338
+ }
339
+ if (oldestDeletedAt === undefined || deletedAt < oldestDeletedAt) {
340
+ oldestDeletedAt = deletedAt;
341
+ }
342
+ if (newestDeletedAt === undefined || deletedAt > newestDeletedAt) {
343
+ newestDeletedAt = deletedAt;
344
+ }
345
+ }
346
+ return {
347
+ totalCount,
348
+ expiredCount,
349
+ oldestDeletedAt,
350
+ newestDeletedAt,
351
+ retentionDays,
352
+ };
353
+ },
354
+ });
355
+ // =============================================================================
356
+ // Empty Trash Mutation
357
+ // =============================================================================
358
+ /**
359
+ * Mutation to permanently delete items from trash.
360
+ *
361
+ * This performs a hard delete, removing entries and all their version history.
362
+ * This action cannot be undone.
363
+ *
364
+ * Options:
365
+ * - Delete all trash items
366
+ * - Delete only items older than a specified number of days
367
+ * - Delete only items of a specific content type
368
+ *
369
+ * @param olderThanDays - Only delete items deleted more than this many days ago
370
+ * @param contentTypeId - Only delete items of this content type
371
+ * @param deletedBy - User performing the operation (for logging)
372
+ *
373
+ * @returns Count of deleted items and any errors
374
+ *
375
+ * @example
376
+ * ```typescript
377
+ * // Empty all trash
378
+ * const result = await ctx.runMutation(api.trash.emptyTrash, {
379
+ * deletedBy: currentUserId,
380
+ * });
381
+ * console.log(`Permanently deleted ${result.deletedCount} items`);
382
+ *
383
+ * // Delete only items older than 7 days
384
+ * await ctx.runMutation(api.trash.emptyTrash, {
385
+ * olderThanDays: 7,
386
+ * deletedBy: currentUserId,
387
+ * });
388
+ *
389
+ * // Delete only deleted blog posts
390
+ * await ctx.runMutation(api.trash.emptyTrash, {
391
+ * contentTypeId: blogTypeId,
392
+ * deletedBy: currentUserId,
393
+ * });
394
+ * ```
395
+ */
396
+ export const emptyTrash = mutation({
397
+ args: emptyTrashArgs.fields,
398
+ returns: emptyTrashResult,
399
+ handler: async (ctx, args) => {
400
+ const { olderThanDays, contentTypeId } = args;
401
+ const now = Date.now();
402
+ let cutoffTime;
403
+ if (olderThanDays !== undefined) {
404
+ cutoffTime = now - olderThanDays * MS_PER_DAY;
405
+ }
406
+ // Query all deleted entries
407
+ const deletedEntries = await ctx.db
408
+ .query("contentEntries")
409
+ .filter((q) => q.neq(q.field("deletedAt"), undefined))
410
+ .collect();
411
+ let deletedCount = 0;
412
+ let deletedVersionsCount = 0;
413
+ const errors = [];
414
+ for (const entry of deletedEntries) {
415
+ // Skip if not actually deleted
416
+ if (!isDeleted(entry))
417
+ continue;
418
+ const deletedAt = entry.deletedAt;
419
+ // Apply filters
420
+ if (cutoffTime !== undefined && deletedAt > cutoffTime) {
421
+ continue; // Not old enough
422
+ }
423
+ if (contentTypeId !== undefined &&
424
+ entry.contentTypeId !== contentTypeId) {
425
+ continue; // Wrong content type
426
+ }
427
+ try {
428
+ // Delete all versions for this entry
429
+ const versions = await ctx.db
430
+ .query("contentVersions")
431
+ .withIndex("by_entry", (q) => q.eq("entryId", entry._id))
432
+ .collect();
433
+ for (const version of versions) {
434
+ await ctx.db.delete(version._id);
435
+ deletedVersionsCount++;
436
+ }
437
+ // Delete the entry itself
438
+ await ctx.db.delete(entry._id);
439
+ deletedCount++;
440
+ }
441
+ catch (error) {
442
+ errors.push({
443
+ id: entry._id,
444
+ error: error instanceof Error ? error.message : "Unknown error",
445
+ });
446
+ }
447
+ }
448
+ return {
449
+ deletedCount,
450
+ deletedVersionsCount,
451
+ errors,
452
+ };
453
+ },
454
+ });
455
+ // =============================================================================
456
+ // Scheduled Cleanup Functions
457
+ // =============================================================================
458
+ /**
459
+ * Internal mutation for scheduled trash cleanup.
460
+ *
461
+ * This is called by the scheduler to automatically delete items that have
462
+ * exceeded the retention period. It runs periodically (e.g., daily) and
463
+ * processes items in batches to respect Convex transaction limits.
464
+ *
465
+ * The function:
466
+ * 1. Checks if auto-cleanup is enabled
467
+ * 2. Finds all items past the retention period
468
+ * 3. Permanently deletes them and their versions
469
+ * 4. Updates the config with cleanup stats
470
+ * 5. Reschedules itself for the next run
471
+ */
472
+ export const executeTrashCleanup = internalMutation({
473
+ args: {},
474
+ handler: async (ctx) => {
475
+ // Get trash configuration
476
+ const config = await ctx.db.query("trashConfig").first();
477
+ // If no config exists, create one with defaults
478
+ if (!config) {
479
+ await ctx.db.insert("trashConfig", {
480
+ retentionDays: DEFAULT_TRASH_RETENTION_DAYS,
481
+ autoCleanupEnabled: true,
482
+ });
483
+ return;
484
+ }
485
+ // Check if auto-cleanup is enabled
486
+ if (!config.autoCleanupEnabled) {
487
+ console.log("Trash auto-cleanup is disabled, skipping");
488
+ return;
489
+ }
490
+ // Check if retention is set (0 = no auto-cleanup)
491
+ if (config.retentionDays === 0) {
492
+ console.log("Trash retention is 0 days (disabled), skipping cleanup");
493
+ return;
494
+ }
495
+ const now = Date.now();
496
+ const cutoffTime = now - config.retentionDays * MS_PER_DAY;
497
+ // Find expired items
498
+ const expiredEntries = await ctx.db
499
+ .query("contentEntries")
500
+ .filter((q) => q.neq(q.field("deletedAt"), undefined))
501
+ .collect();
502
+ let deletedCount = 0;
503
+ for (const entry of expiredEntries) {
504
+ // Skip if not actually deleted or not expired
505
+ if (!isDeleted(entry))
506
+ continue;
507
+ if (entry.deletedAt > cutoffTime)
508
+ continue;
509
+ try {
510
+ // Delete all versions
511
+ const versions = await ctx.db
512
+ .query("contentVersions")
513
+ .withIndex("by_entry", (q) => q.eq("entryId", entry._id))
514
+ .collect();
515
+ for (const version of versions) {
516
+ await ctx.db.delete(version._id);
517
+ }
518
+ // Delete the entry
519
+ await ctx.db.delete(entry._id);
520
+ deletedCount++;
521
+ }
522
+ catch (error) {
523
+ console.error(`Failed to delete expired entry ${entry._id}:`, error);
524
+ }
525
+ }
526
+ // Update config with cleanup stats
527
+ await ctx.db.patch(config._id, {
528
+ lastCleanupAt: now,
529
+ lastCleanupCount: deletedCount,
530
+ });
531
+ console.log(`Trash cleanup completed: ${deletedCount} items permanently deleted`);
532
+ },
533
+ });
534
+ /**
535
+ * Mutation to manually trigger trash cleanup.
536
+ *
537
+ * Use this to run cleanup on-demand instead of waiting for the scheduled job.
538
+ * Useful for testing or when you need immediate cleanup.
539
+ *
540
+ * @param updatedBy - User triggering the cleanup
541
+ *
542
+ * @returns Cleanup result statistics
543
+ */
544
+ export const runTrashCleanup = mutation({
545
+ args: {
546
+ updatedBy: v.optional(v.string()),
547
+ },
548
+ returns: v.object({
549
+ deletedCount: v.number(),
550
+ message: v.string(),
551
+ }),
552
+ handler: async (ctx, args) => {
553
+ // Get trash configuration
554
+ const config = await ctx.db.query("trashConfig").first();
555
+ const retentionDays = config?.retentionDays ?? DEFAULT_TRASH_RETENTION_DAYS;
556
+ if (retentionDays === 0) {
557
+ return {
558
+ deletedCount: 0,
559
+ message: "Retention is set to 0 days (disabled). No items deleted.",
560
+ };
561
+ }
562
+ const now = Date.now();
563
+ const cutoffTime = now - retentionDays * MS_PER_DAY;
564
+ // Find expired items
565
+ const expiredEntries = await ctx.db
566
+ .query("contentEntries")
567
+ .filter((q) => q.neq(q.field("deletedAt"), undefined))
568
+ .collect();
569
+ let deletedCount = 0;
570
+ for (const entry of expiredEntries) {
571
+ if (!isDeleted(entry))
572
+ continue;
573
+ if (entry.deletedAt > cutoffTime)
574
+ continue;
575
+ // Delete versions
576
+ const versions = await ctx.db
577
+ .query("contentVersions")
578
+ .withIndex("by_entry", (q) => q.eq("entryId", entry._id))
579
+ .collect();
580
+ for (const version of versions) {
581
+ await ctx.db.delete(version._id);
582
+ }
583
+ // Delete entry
584
+ await ctx.db.delete(entry._id);
585
+ deletedCount++;
586
+ }
587
+ // Update config stats if it exists
588
+ if (config) {
589
+ await ctx.db.patch(config._id, {
590
+ lastCleanupAt: now,
591
+ lastCleanupCount: deletedCount,
592
+ updatedBy: args.updatedBy,
593
+ });
594
+ }
595
+ return {
596
+ deletedCount,
597
+ message: `Successfully deleted ${deletedCount} items older than ${retentionDays} days.`,
598
+ };
599
+ },
600
+ });
601
+ /**
602
+ * Mutation to schedule periodic trash cleanup.
603
+ *
604
+ * Call this once during setup to enable automatic trash cleanup.
605
+ * The function schedules itself to run daily.
606
+ *
607
+ * @param intervalMs - Cleanup interval in milliseconds (default: 24 hours)
608
+ */
609
+ export const scheduleTrashCleanup = mutation({
610
+ args: {
611
+ /** Interval between cleanups in milliseconds. Default is 24 hours. */
612
+ intervalMs: v.optional(v.number()),
613
+ },
614
+ handler: async (ctx, args) => {
615
+ const intervalMs = args.intervalMs ?? 24 * 60 * 60 * 1000; // Default: 24 hours
616
+ // Schedule the cleanup to run
617
+ await ctx.scheduler.runAfter(intervalMs, internal.trash.executeTrashCleanup, {});
618
+ console.log(`Trash cleanup scheduled to run in ${intervalMs / 1000 / 60} minutes`);
619
+ },
620
+ });
621
+ //# sourceMappingURL=trash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trash.js","sourceRoot":"","sources":["../../src/component/trash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO;AACN,mBAAmB;AACnB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,4BAA4B,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,gDAAgD;AAChD,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,6BAA6B;AAC7B,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,4BAA4B;AAC5B,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvC,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;IACnC,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE;QAC/B,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACrC,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACxC,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,kCAAkC;QAClC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QAEzD,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO;gBACN,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;gBAC7C,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;aACzC,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,OAAO;YACN,aAAa,EAAE,4BAA4B;YAC3C,kBAAkB,EAAE,IAAI;YACxB,aAAa,EAAE,SAAS;YACxB,gBAAgB,EAAE,SAAS;SAC3B,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACzC,IAAI,EAAE,qBAAqB,CAAC,MAAM;IAClC,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC5B,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAE9D,0BAA0B;QAC1B,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,GAAG,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC7D,CAAC;QACF,CAAC;QAED,sBAAsB;QACtB,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjE,IAAI,cAAc,EAAE,CAAC;YACpB,yBAAyB;YACzB,MAAM,OAAO,GAA4B,EAAE,SAAS,EAAE,CAAC;YACvD,IAAI,aAAa,KAAK,SAAS;gBAAE,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;YACvE,IAAI,kBAAkB,KAAK,SAAS;gBACnC,OAAO,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;YAEjD,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACrD,OAAO,OAAQ,CAAC;QACjB,CAAC;aAAM,CAAC;YACP,yDAAyD;YACzD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE;gBACnD,aAAa,EAAE,aAAa,IAAI,4BAA4B;gBAC5D,kBAAkB,EAAE,kBAAkB,IAAI,IAAI;gBAC9C,SAAS;aACT,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7C,OAAO,SAAU,CAAC;QACnB,CAAC;IACF,CAAC;CACD,CAAC,CAAC;AAEH,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,qDAAqD;IACrD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IAC3B,wCAAwC;IACxC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,oCAAoC;IACpC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,kDAAkD;IAClD,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAClC,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;IAC9B,IAAI,EAAE,aAAa,CAAC,MAAM;IAC1B,OAAO,EAAE,sBAAsB;IAC/B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC5B,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;QAExE,mBAAmB;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACxB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,QAAQ,IAAI,iBAAiB,CAAC,EACzD,aAAa,CACb,CAAC;QAEF,MAAM,qBAAqB,GAAG;YAC7B,GAAG,cAAc;YACjB,QAAQ;SACR,CAAC;QAEF,gDAAgD;QAChD,IAAI,qBAAqB,GAAG,aAAa,CAAC;QAC1C,IAAI,CAAC,qBAAqB,IAAI,eAAe,EAAE,CAAC;YAC/C,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,EAAE;iBAC9B,KAAK,CAAC,cAAc,CAAC;iBACrB,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;iBAC1D,KAAK,EAAE,CAAC;YACV,IAAI,WAAW,EAAE,CAAC;gBACjB,qBAAqB,GAAG,WAAW,CAAC,GAAG,CAAC;YACzC,CAAC;QACF,CAAC;QAED,wCAAwC;QACxC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QACzD,MAAM,aAAa,GAAG,MAAM,EAAE,aAAa,IAAI,4BAA4B,CAAC;QAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,8CAA8C;QAC9C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEnD,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAExC,qDAAqD;QACrD,oDAAoD;QACpD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAEnD,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxE,kBAAkB;YAClB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC;YACd,CAAC;YAED,sCAAsC;YACtC,IACC,qBAAqB;gBACrB,KAAK,CAAC,aAAa,KAAK,qBAAqB,EAC5C,CAAC;gBACF,OAAO,KAAK,CAAC;YACd,CAAC;YAED,iCAAiC;YACjC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAClE,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU;oBACvC,EAAE,WAAW,EAAE;qBACd,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACxB,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,EAAE,CAAC;oBACpC,OAAO,KAAK,CAAC;gBACd,CAAC;YACF,CAAC;YAED,OAAO,IAAI,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC;YAC3C,GAAG,qBAAqB;YACxB,eAAe,EAAE,QAAQ,GAAG,EAAE;SAC9B,CAAC,CAAC;QAEH,wCAAwC;QACxC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAU,CAAC;YACnC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC;YAElE,+CAA+C;YAC/C,IAAI,SAA6B,CAAC;YAClC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;gBACvB,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;YACpD,CAAC;YAED,gCAAgC;YAChC,IAAI,eAAe,GAAG,gBAAgB,CAAC,GAAG,CACzC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,CAC9B,CAAC;YACF,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACjD,eAAe,GAAG,EAAE,EAAE,WAAW,IAAI,EAAE,EAAE,IAAI,CAAC;gBAC9C,IAAI,eAAe,EAAE,CAAC;oBACrB,gBAAgB,CAAC,GAAG,CACnB,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,EAC9B,eAAe,CACf,CAAC;gBACH,CAAC;YACF,CAAC;YAED,OAAO;gBACN,GAAG,KAAK;gBACR,cAAc;gBACd,SAAS;gBACT,eAAe;aACf,CAAC;QACH,CAAC,CAAC,CACF,CAAC;QAEF,OAAO;YACN,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;IAClC,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,qCAAqC;QACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,gEAAgE;QAChE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,gCAAgC;QAChC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACvC,qCAAqC;QACrC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACvC,uCAAuC;QACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;KACzB,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QACzD,MAAM,aAAa,GAAG,MAAM,EAAE,aAAa,IAAI,4BAA4B,CAAC;QAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,mBAAmB,GAAG,GAAG,GAAG,aAAa,GAAG,UAAU,CAAC;QAE7D,4BAA4B;QAC5B,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,EAAE;aACjC,KAAK,CAAC,gBAAgB,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;aACrD,OAAO,EAAE,CAAC;QAEZ,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,eAAmC,CAAC;QACxC,IAAI,eAAmC,CAAC;QAExC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAAE,SAAS;YAChC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAU,CAAC;YAEnC,UAAU,EAAE,CAAC;YAEb,IAAI,aAAa,GAAG,CAAC,IAAI,SAAS,GAAG,mBAAmB,EAAE,CAAC;gBAC1D,YAAY,EAAE,CAAC;YAChB,CAAC;YAED,IAAI,eAAe,KAAK,SAAS,IAAI,SAAS,GAAG,eAAe,EAAE,CAAC;gBAClE,eAAe,GAAG,SAAS,CAAC;YAC7B,CAAC;YACD,IAAI,eAAe,KAAK,SAAS,IAAI,SAAS,GAAG,eAAe,EAAE,CAAC;gBAClE,eAAe,GAAG,SAAS,CAAC;YAC7B,CAAC;QACF,CAAC;QAED,OAAO;YACN,UAAU;YACV,YAAY;YACZ,eAAe;YACf,eAAe;YACf,aAAa;SACb,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAEH,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC;IAClC,IAAI,EAAE,cAAc,CAAC,MAAM;IAC3B,OAAO,EAAE,gBAAgB;IACzB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC5B,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAE9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,UAA8B,CAAC;QAEnC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACjC,UAAU,GAAG,GAAG,GAAG,aAAa,GAAG,UAAU,CAAC;QAC/C,CAAC;QAED,4BAA4B;QAC5B,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,EAAE;aACjC,KAAK,CAAC,gBAAgB,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;aACrD,OAAO,EAAE,CAAC;QAEZ,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,MAAM,MAAM,GAGP,EAAE,CAAC;QAER,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACpC,+BAA+B;YAC/B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAAE,SAAS;YAChC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAU,CAAC;YAEnC,gBAAgB;YAChB,IAAI,UAAU,KAAK,SAAS,IAAI,SAAS,GAAG,UAAU,EAAE,CAAC;gBACxD,SAAS,CAAC,iBAAiB;YAC5B,CAAC;YACD,IACC,aAAa,KAAK,SAAS;gBAC3B,KAAK,CAAC,aAAa,KAAK,aAAa,EACpC,CAAC;gBACF,SAAS,CAAC,qBAAqB;YAChC,CAAC;YAED,IAAI,CAAC;gBACJ,qCAAqC;gBACrC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE;qBAC3B,KAAK,CAAC,iBAAiB,CAAC;qBACxB,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;qBACxD,OAAO,EAAE,CAAC;gBAEZ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAChC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACjC,oBAAoB,EAAE,CAAC;gBACxB,CAAC;gBAED,0BAA0B;gBAC1B,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC/B,YAAY,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,KAAK,CAAC,GAAG;oBACb,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAC/D,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,OAAO;YACN,YAAY;YACZ,oBAAoB;YACpB,MAAM;SACN,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAEH,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAEhF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;IACnD,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,0BAA0B;QAC1B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QAEzD,gDAAgD;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE;gBAClC,aAAa,EAAE,4BAA4B;gBAC3C,kBAAkB,EAAE,IAAI;aACxB,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO;QACR,CAAC;QAED,kDAAkD;QAClD,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;YACtE,OAAO;QACR,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,GAAG,GAAG,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC;QAE3D,qBAAqB;QACrB,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,EAAE;aACjC,KAAK,CAAC,gBAAgB,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;aACrD,OAAO,EAAE,CAAC;QAEZ,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACpC,8CAA8C;YAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAAE,SAAS;YAChC,IAAI,KAAK,CAAC,SAAU,GAAG,UAAU;gBAAE,SAAS;YAE5C,IAAI,CAAC;gBACJ,sBAAsB;gBACtB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE;qBAC3B,KAAK,CAAC,iBAAiB,CAAC;qBACxB,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;qBACxD,OAAO,EAAE,CAAC;gBAEZ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAChC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClC,CAAC;gBAED,mBAAmB;gBACnB,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC/B,YAAY,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,kCAAkC,KAAK,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;YACtE,CAAC;QACF,CAAC;QAED,mCAAmC;QACnC,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;YAC9B,aAAa,EAAE,GAAG;YAClB,gBAAgB,EAAE,YAAY;SAC9B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CACV,4BAA4B,YAAY,4BAA4B,CACpE,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;IACvC,IAAI,EAAE;QACL,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACjC;IACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC5B,0BAA0B;QAC1B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QACzD,MAAM,aAAa,GAAG,MAAM,EAAE,aAAa,IAAI,4BAA4B,CAAC;QAE5E,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACN,YAAY,EAAE,CAAC;gBACf,OAAO,EAAE,0DAA0D;aACnE,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,GAAG,GAAG,aAAa,GAAG,UAAU,CAAC;QAEpD,qBAAqB;QACrB,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,EAAE;aACjC,KAAK,CAAC,gBAAgB,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;aACrD,OAAO,EAAE,CAAC;QAEZ,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAAE,SAAS;YAChC,IAAI,KAAK,CAAC,SAAU,GAAG,UAAU;gBAAE,SAAS;YAE5C,kBAAkB;YAClB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE;iBAC3B,KAAK,CAAC,iBAAiB,CAAC;iBACxB,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;iBACxD,OAAO,EAAE,CAAC;YAEZ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAChC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;YAED,eAAe;YACf,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,YAAY,EAAE,CAAC;QAChB,CAAC;QAED,mCAAmC;QACnC,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;gBAC9B,aAAa,EAAE,GAAG;gBAClB,gBAAgB,EAAE,YAAY;gBAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;aACzB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO;YACN,YAAY;YACZ,OAAO,EAAE,wBAAwB,YAAY,qBAAqB,aAAa,QAAQ;SACvF,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE;QACL,sEAAsE;QACtE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAClC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,oBAAoB;QAE/E,8BAA8B;QAC9B,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,CAC3B,UAAU,EACV,QAAQ,CAAC,KAAK,CAAC,mBAAmB,EAClC,EAAE,CACF,CAAC;QAEF,OAAO,CAAC,GAAG,CACV,qCAAqC,UAAU,GAAG,IAAI,GAAG,EAAE,UAAU,CACrE,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Infer } from "convex/values";
2
+ import { fieldTypeValidator } from "./schema";
3
+ export type FieldType = Infer<typeof fieldTypeValidator>;
4
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/component/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/component/types.ts"],"names":[],"mappings":""}