convex 1.44.0 → 1.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (594) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/browser.bundle.js +1 -1
  3. package/dist/browser.bundle.js.map +1 -1
  4. package/dist/cjs/cli/convexExport.js +1 -1
  5. package/dist/cjs/cli/convexExport.js.map +1 -1
  6. package/dist/cjs/cli/index.js +2 -32
  7. package/dist/cjs/cli/index.js.map +2 -2
  8. package/dist/cjs/cli/lib/api.js +11 -5
  9. package/dist/cjs/cli/lib/api.js.map +2 -2
  10. package/dist/cjs/cli/lib/convexExport.js +12 -1
  11. package/dist/cjs/cli/lib/convexExport.js.map +2 -2
  12. package/dist/cjs/cli/lib/dashboard.js.map +2 -2
  13. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  14. package/dist/cjs/cli/lib/indexes.js +1 -1
  15. package/dist/cjs/cli/lib/indexes.js.map +1 -1
  16. package/dist/cjs/cli/lib/localDeployment/upgrade.js +23 -188
  17. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +3 -3
  18. package/dist/cjs/cli/lib/mcp/tools/index.js.map +1 -1
  19. package/dist/cjs/cli/mcp.js +76 -69
  20. package/dist/cjs/cli/mcp.js.map +2 -2
  21. package/dist/cjs/index.js +1 -1
  22. package/dist/cjs/index.js.map +1 -1
  23. package/dist/cjs/server/impl/actions_impl.js.map +2 -2
  24. package/dist/cjs/server/index.js.map +2 -2
  25. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  26. package/dist/cjs-types/cli/lib/convexExport.d.ts +1 -0
  27. package/dist/cjs-types/cli/lib/convexExport.d.ts.map +1 -1
  28. package/dist/cjs-types/cli/lib/dashboard.d.ts.map +1 -1
  29. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  30. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  31. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts +2 -0
  32. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  33. package/dist/cjs-types/cli/lib/mcp/tools/index.d.ts +1 -1
  34. package/dist/cjs-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  35. package/dist/cjs-types/cli/mcp.d.ts +3 -0
  36. package/dist/cjs-types/cli/mcp.d.ts.map +1 -1
  37. package/dist/cjs-types/index.d.ts +1 -1
  38. package/dist/cjs-types/server/impl/actions_impl.d.ts +14 -0
  39. package/dist/cjs-types/server/impl/actions_impl.d.ts.map +1 -1
  40. package/dist/cjs-types/server/index.d.ts +1 -0
  41. package/dist/cjs-types/server/index.d.ts.map +1 -1
  42. package/dist/cli.bundle.cjs +31210 -25495
  43. package/dist/cli.bundle.cjs.map +4 -4
  44. package/dist/esm/cli/convexExport.js +1 -1
  45. package/dist/esm/cli/convexExport.js.map +1 -1
  46. package/dist/esm/cli/index.js +2 -32
  47. package/dist/esm/cli/index.js.map +2 -2
  48. package/dist/esm/cli/lib/api.js +11 -5
  49. package/dist/esm/cli/lib/api.js.map +2 -2
  50. package/dist/esm/cli/lib/convexExport.js +16 -3
  51. package/dist/esm/cli/lib/convexExport.js.map +2 -2
  52. package/dist/esm/cli/lib/dashboard.js.map +2 -2
  53. package/dist/esm/cli/lib/indexes.js +1 -1
  54. package/dist/esm/cli/lib/indexes.js.map +1 -1
  55. package/dist/esm/cli/lib/localDeployment/upgrade.js +22 -190
  56. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  57. package/dist/esm/cli/lib/mcp/tools/index.js.map +1 -1
  58. package/dist/esm/cli/mcp.js +75 -72
  59. package/dist/esm/cli/mcp.js.map +2 -2
  60. package/dist/esm/index.js +1 -1
  61. package/dist/esm/index.js.map +1 -1
  62. package/dist/esm/server/impl/actions_impl.js.map +2 -2
  63. package/dist/esm/server/index.js.map +2 -2
  64. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  65. package/dist/esm-types/cli/lib/convexExport.d.ts +1 -0
  66. package/dist/esm-types/cli/lib/convexExport.d.ts.map +1 -1
  67. package/dist/esm-types/cli/lib/dashboard.d.ts.map +1 -1
  68. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  69. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  70. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts +2 -0
  71. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  72. package/dist/esm-types/cli/lib/mcp/tools/index.d.ts +1 -1
  73. package/dist/esm-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  74. package/dist/esm-types/cli/mcp.d.ts +3 -0
  75. package/dist/esm-types/cli/mcp.d.ts.map +1 -1
  76. package/dist/esm-types/index.d.ts +1 -1
  77. package/dist/esm-types/server/impl/actions_impl.d.ts +14 -0
  78. package/dist/esm-types/server/impl/actions_impl.d.ts.map +1 -1
  79. package/dist/esm-types/server/index.d.ts +1 -0
  80. package/dist/esm-types/server/index.d.ts.map +1 -1
  81. package/dist/react.bundle.js +1 -1
  82. package/dist/react.bundle.js.map +1 -1
  83. package/package.json +3 -3
  84. package/src/cli/convexExport.ts +1 -1
  85. package/src/cli/index.ts +2 -35
  86. package/src/cli/lib/api.ts +11 -5
  87. package/src/cli/lib/convexExport.ts +21 -0
  88. package/src/cli/lib/dashboard.ts +2 -0
  89. package/src/cli/lib/generatedFunctionLogsApi.ts +2 -0
  90. package/src/cli/lib/indexes.ts +1 -1
  91. package/src/cli/lib/localDeployment/upgrade.ts +34 -207
  92. package/src/cli/lib/mcp/tools/index.ts +1 -1
  93. package/src/cli/mcp.ts +91 -77
  94. package/src/index.ts +1 -1
  95. package/src/server/impl/actions_impl.ts +3 -1
  96. package/src/server/index.ts +0 -3
  97. package/dist/cjs-types/browser/http_client.test.d.ts +0 -2
  98. package/dist/cjs-types/browser/http_client.test.d.ts.map +0 -1
  99. package/dist/cjs-types/browser/query_options.test.d.ts +0 -2
  100. package/dist/cjs-types/browser/query_options.test.d.ts.map +0 -1
  101. package/dist/cjs-types/browser/simple_client.test.d.ts +0 -2
  102. package/dist/cjs-types/browser/simple_client.test.d.ts.map +0 -1
  103. package/dist/cjs-types/browser/sync/client.test.d.ts +0 -5
  104. package/dist/cjs-types/browser/sync/client.test.d.ts.map +0 -1
  105. package/dist/cjs-types/browser/sync/client_node.test.d.ts +0 -2
  106. package/dist/cjs-types/browser/sync/client_node.test.d.ts.map +0 -1
  107. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts +0 -44
  108. package/dist/cjs-types/browser/sync/client_node_test_helpers.d.ts.map +0 -1
  109. package/dist/cjs-types/browser/sync/local_state.test.d.ts +0 -2
  110. package/dist/cjs-types/browser/sync/local_state.test.d.ts.map +0 -1
  111. package/dist/cjs-types/browser/sync/optimistic_query_set.test.d.ts +0 -2
  112. package/dist/cjs-types/browser/sync/optimistic_query_set.test.d.ts.map +0 -1
  113. package/dist/cjs-types/browser/sync/paginated_query_client.test.d.ts +0 -2
  114. package/dist/cjs-types/browser/sync/paginated_query_client.test.d.ts.map +0 -1
  115. package/dist/cjs-types/browser/sync/protocol.test.d.ts +0 -5
  116. package/dist/cjs-types/browser/sync/protocol.test.d.ts.map +0 -1
  117. package/dist/cjs-types/browser/sync/request_manager.test.d.ts +0 -2
  118. package/dist/cjs-types/browser/sync/request_manager.test.d.ts.map +0 -1
  119. package/dist/cjs-types/bundler/fs.test.d.ts +0 -2
  120. package/dist/cjs-types/bundler/fs.test.d.ts.map +0 -1
  121. package/dist/cjs-types/bundler/index.test.d.ts +0 -2
  122. package/dist/cjs-types/bundler/index.test.d.ts.map +0 -1
  123. package/dist/cjs-types/cli/codegen_templates/api.test.d.ts +0 -2
  124. package/dist/cjs-types/cli/codegen_templates/api.test.d.ts.map +0 -1
  125. package/dist/cjs-types/cli/codegen_templates/common.test.d.ts +0 -2
  126. package/dist/cjs-types/cli/codegen_templates/common.test.d.ts.map +0 -1
  127. package/dist/cjs-types/cli/codegen_templates/templates.test.d.ts +0 -2
  128. package/dist/cjs-types/cli/codegen_templates/templates.test.d.ts.map +0 -1
  129. package/dist/cjs-types/cli/codegen_templates/validator_helpers.test.d.ts +0 -2
  130. package/dist/cjs-types/cli/codegen_templates/validator_helpers.test.d.ts.map +0 -1
  131. package/dist/cjs-types/cli/configure.test.d.ts +0 -2
  132. package/dist/cjs-types/cli/configure.test.d.ts.map +0 -1
  133. package/dist/cjs-types/cli/deploymentCreate.test.d.ts +0 -2
  134. package/dist/cjs-types/cli/deploymentCreate.test.d.ts.map +0 -1
  135. package/dist/cjs-types/cli/deploymentSelect.test.d.ts +0 -2
  136. package/dist/cjs-types/cli/deploymentSelect.test.d.ts.map +0 -1
  137. package/dist/cjs-types/cli/deploymentSelection.test.d.ts +0 -2
  138. package/dist/cjs-types/cli/deploymentSelection.test.d.ts.map +0 -1
  139. package/dist/cjs-types/cli/deploymentToken.test.d.ts +0 -2
  140. package/dist/cjs-types/cli/deploymentToken.test.d.ts.map +0 -1
  141. package/dist/cjs-types/cli/dev.test.d.ts +0 -2
  142. package/dist/cjs-types/cli/dev.test.d.ts.map +0 -1
  143. package/dist/cjs-types/cli/envDefault.test.d.ts +0 -2
  144. package/dist/cjs-types/cli/envDefault.test.d.ts.map +0 -1
  145. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +0 -2
  146. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +0 -1
  147. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +0 -2
  148. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +0 -1
  149. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +0 -2
  150. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +0 -1
  151. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts +0 -2
  152. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +0 -1
  153. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts +0 -2
  154. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +0 -1
  155. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts +0 -2
  156. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +0 -1
  157. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +0 -2
  158. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +0 -1
  159. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +0 -2
  160. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +0 -1
  161. package/dist/cjs-types/cli/lib/codegen.test.d.ts +0 -2
  162. package/dist/cjs-types/cli/lib/codegen.test.d.ts.map +0 -1
  163. package/dist/cjs-types/cli/lib/components.test.d.ts +0 -2
  164. package/dist/cjs-types/cli/lib/components.test.d.ts.map +0 -1
  165. package/dist/cjs-types/cli/lib/config.test.d.ts +0 -2
  166. package/dist/cjs-types/cli/lib/config.test.d.ts.map +0 -1
  167. package/dist/cjs-types/cli/lib/deployment.test.d.ts +0 -2
  168. package/dist/cjs-types/cli/lib/deployment.test.d.ts.map +0 -1
  169. package/dist/cjs-types/cli/lib/deploymentSelector.test.d.ts +0 -2
  170. package/dist/cjs-types/cli/lib/deploymentSelector.test.d.ts.map +0 -1
  171. package/dist/cjs-types/cli/lib/env.test.d.ts +0 -2
  172. package/dist/cjs-types/cli/lib/env.test.d.ts.map +0 -1
  173. package/dist/cjs-types/cli/lib/expiration.test.d.ts +0 -2
  174. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +0 -1
  175. package/dist/cjs-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts +0 -2
  176. package/dist/cjs-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts.map +0 -1
  177. package/dist/cjs-types/cli/lib/formatEnvValueForDotfile.test.d.ts +0 -2
  178. package/dist/cjs-types/cli/lib/formatEnvValueForDotfile.test.d.ts.map +0 -1
  179. package/dist/cjs-types/cli/lib/formatTargetedDeployment.test.d.ts +0 -2
  180. package/dist/cjs-types/cli/lib/formatTargetedDeployment.test.d.ts.map +0 -1
  181. package/dist/cjs-types/cli/lib/fsUtils.test.d.ts +0 -2
  182. package/dist/cjs-types/cli/lib/fsUtils.test.d.ts.map +0 -1
  183. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts +0 -2
  184. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts.map +0 -1
  185. package/dist/cjs-types/cli/lib/indexes.test.d.ts +0 -2
  186. package/dist/cjs-types/cli/lib/indexes.test.d.ts.map +0 -1
  187. package/dist/cjs-types/cli/lib/localDeployment/run.test.d.ts +0 -2
  188. package/dist/cjs-types/cli/lib/localDeployment/run.test.d.ts.map +0 -1
  189. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts +0 -2
  190. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts.map +0 -1
  191. package/dist/cjs-types/cli/lib/run.test.d.ts +0 -2
  192. package/dist/cjs-types/cli/lib/run.test.d.ts.map +0 -1
  193. package/dist/cjs-types/cli/lib/runTestFunction.test.d.ts +0 -2
  194. package/dist/cjs-types/cli/lib/runTestFunction.test.d.ts.map +0 -1
  195. package/dist/cjs-types/cli/lib/typecheck.test.d.ts +0 -2
  196. package/dist/cjs-types/cli/lib/typecheck.test.d.ts.map +0 -1
  197. package/dist/cjs-types/cli/lib/updates.test.d.ts +0 -2
  198. package/dist/cjs-types/cli/lib/updates.test.d.ts.map +0 -1
  199. package/dist/cjs-types/cli/lib/utils/hash.test.d.ts +0 -2
  200. package/dist/cjs-types/cli/lib/utils/hash.test.d.ts.map +0 -1
  201. package/dist/cjs-types/cli/lib/utils/utils.test.d.ts +0 -2
  202. package/dist/cjs-types/cli/lib/utils/utils.test.d.ts.map +0 -1
  203. package/dist/cjs-types/cli/lib/versionApi.test.d.ts +0 -2
  204. package/dist/cjs-types/cli/lib/versionApi.test.d.ts.map +0 -1
  205. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts +0 -2
  206. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts.map +0 -1
  207. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts +0 -2
  208. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts.map +0 -1
  209. package/dist/cjs-types/cli/login.test.d.ts +0 -2
  210. package/dist/cjs-types/cli/login.test.d.ts.map +0 -1
  211. package/dist/cjs-types/common/index.test.d.ts +0 -2
  212. package/dist/cjs-types/common/index.test.d.ts.map +0 -1
  213. package/dist/cjs-types/nextjs/nextjs.test.d.ts +0 -2
  214. package/dist/cjs-types/nextjs/nextjs.test.d.ts.map +0 -1
  215. package/dist/cjs-types/react/ConvexAuthState.test.d.ts +0 -2
  216. package/dist/cjs-types/react/ConvexAuthState.test.d.ts.map +0 -1
  217. package/dist/cjs-types/react/auth_helpers.test.d.ts +0 -2
  218. package/dist/cjs-types/react/auth_helpers.test.d.ts.map +0 -1
  219. package/dist/cjs-types/react/auth_websocket.test.d.ts +0 -2
  220. package/dist/cjs-types/react/auth_websocket.test.d.ts.map +0 -1
  221. package/dist/cjs-types/react/client.test.d.ts +0 -2
  222. package/dist/cjs-types/react/client.test.d.ts.map +0 -1
  223. package/dist/cjs-types/react/client_provided_base_client.test.d.ts +0 -2
  224. package/dist/cjs-types/react/client_provided_base_client.test.d.ts.map +0 -1
  225. package/dist/cjs-types/react/queries_observer.test.d.ts +0 -2
  226. package/dist/cjs-types/react/queries_observer.test.d.ts.map +0 -1
  227. package/dist/cjs-types/react/react_node.test.d.ts +0 -2
  228. package/dist/cjs-types/react/react_node.test.d.ts.map +0 -1
  229. package/dist/cjs-types/react/use_paginated_query.test.d.ts +0 -2
  230. package/dist/cjs-types/react/use_paginated_query.test.d.ts.map +0 -1
  231. package/dist/cjs-types/react/use_queries.test.d.ts +0 -5
  232. package/dist/cjs-types/react/use_queries.test.d.ts.map +0 -1
  233. package/dist/cjs-types/react/use_query.test.d.ts +0 -5
  234. package/dist/cjs-types/react/use_query.test.d.ts.map +0 -1
  235. package/dist/cjs-types/react/use_query_object_options.test.d.ts +0 -5
  236. package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +0 -1
  237. package/dist/cjs-types/react/use_query_result.test.d.ts +0 -5
  238. package/dist/cjs-types/react/use_query_result.test.d.ts.map +0 -1
  239. package/dist/cjs-types/react-auth0/ConvexProviderWithAuth0.test.d.ts +0 -2
  240. package/dist/cjs-types/react-auth0/ConvexProviderWithAuth0.test.d.ts.map +0 -1
  241. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.test.d.ts +0 -2
  242. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.test.d.ts.map +0 -1
  243. package/dist/cjs-types/server/api.intersect.test.d.ts +0 -2
  244. package/dist/cjs-types/server/api.intersect.test.d.ts.map +0 -1
  245. package/dist/cjs-types/server/api.test.d.ts +0 -2
  246. package/dist/cjs-types/server/api.test.d.ts.map +0 -1
  247. package/dist/cjs-types/server/audit_logging.test.d.ts +0 -2
  248. package/dist/cjs-types/server/audit_logging.test.d.ts.map +0 -1
  249. package/dist/cjs-types/server/components/index.test.d.ts +0 -2
  250. package/dist/cjs-types/server/components/index.test.d.ts.map +0 -1
  251. package/dist/cjs-types/server/cron.test.d.ts +0 -2
  252. package/dist/cjs-types/server/cron.test.d.ts.map +0 -1
  253. package/dist/cjs-types/server/data_model.test.d.ts +0 -2
  254. package/dist/cjs-types/server/data_model.test.d.ts.map +0 -1
  255. package/dist/cjs-types/server/database.test.d.ts +0 -2
  256. package/dist/cjs-types/server/database.test.d.ts.map +0 -1
  257. package/dist/cjs-types/server/database_api.test.d.ts +0 -2
  258. package/dist/cjs-types/server/database_api.test.d.ts.map +0 -1
  259. package/dist/cjs-types/server/filter_builder.test.d.ts +0 -2
  260. package/dist/cjs-types/server/filter_builder.test.d.ts.map +0 -1
  261. package/dist/cjs-types/server/impl/actions_impl.test.d.ts +0 -2
  262. package/dist/cjs-types/server/impl/actions_impl.test.d.ts.map +0 -1
  263. package/dist/cjs-types/server/impl/filter_builder_impl.test.d.ts +0 -2
  264. package/dist/cjs-types/server/impl/filter_builder_impl.test.d.ts.map +0 -1
  265. package/dist/cjs-types/server/impl/query_impl.test.d.ts +0 -2
  266. package/dist/cjs-types/server/impl/query_impl.test.d.ts.map +0 -1
  267. package/dist/cjs-types/server/pagination.test.d.ts +0 -2
  268. package/dist/cjs-types/server/pagination.test.d.ts.map +0 -1
  269. package/dist/cjs-types/server/query.test.d.ts +0 -2
  270. package/dist/cjs-types/server/query.test.d.ts.map +0 -1
  271. package/dist/cjs-types/server/registration.test.d.ts +0 -2
  272. package/dist/cjs-types/server/registration.test.d.ts.map +0 -1
  273. package/dist/cjs-types/server/router.test.d.ts +0 -2
  274. package/dist/cjs-types/server/router.test.d.ts.map +0 -1
  275. package/dist/cjs-types/server/scheduler.test.d.ts +0 -2
  276. package/dist/cjs-types/server/scheduler.test.d.ts.map +0 -1
  277. package/dist/cjs-types/server/schema.test.d.ts +0 -2
  278. package/dist/cjs-types/server/schema.test.d.ts.map +0 -1
  279. package/dist/cjs-types/test/fake_watch.d.ts +0 -16
  280. package/dist/cjs-types/test/fake_watch.d.ts.map +0 -1
  281. package/dist/cjs-types/test/type_testing.d.ts +0 -9
  282. package/dist/cjs-types/test/type_testing.d.ts.map +0 -1
  283. package/dist/cjs-types/type_utils.test.d.ts +0 -2
  284. package/dist/cjs-types/type_utils.test.d.ts.map +0 -1
  285. package/dist/cjs-types/values/size.test.d.ts +0 -2
  286. package/dist/cjs-types/values/size.test.d.ts.map +0 -1
  287. package/dist/cjs-types/values/validator.test.d.ts +0 -2
  288. package/dist/cjs-types/values/validator.test.d.ts.map +0 -1
  289. package/dist/cjs-types/values/value.test.d.ts +0 -2
  290. package/dist/cjs-types/values/value.test.d.ts.map +0 -1
  291. package/dist/esm-types/browser/http_client.test.d.ts +0 -2
  292. package/dist/esm-types/browser/http_client.test.d.ts.map +0 -1
  293. package/dist/esm-types/browser/query_options.test.d.ts +0 -2
  294. package/dist/esm-types/browser/query_options.test.d.ts.map +0 -1
  295. package/dist/esm-types/browser/simple_client.test.d.ts +0 -2
  296. package/dist/esm-types/browser/simple_client.test.d.ts.map +0 -1
  297. package/dist/esm-types/browser/sync/client.test.d.ts +0 -5
  298. package/dist/esm-types/browser/sync/client.test.d.ts.map +0 -1
  299. package/dist/esm-types/browser/sync/client_node.test.d.ts +0 -2
  300. package/dist/esm-types/browser/sync/client_node.test.d.ts.map +0 -1
  301. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts +0 -44
  302. package/dist/esm-types/browser/sync/client_node_test_helpers.d.ts.map +0 -1
  303. package/dist/esm-types/browser/sync/local_state.test.d.ts +0 -2
  304. package/dist/esm-types/browser/sync/local_state.test.d.ts.map +0 -1
  305. package/dist/esm-types/browser/sync/optimistic_query_set.test.d.ts +0 -2
  306. package/dist/esm-types/browser/sync/optimistic_query_set.test.d.ts.map +0 -1
  307. package/dist/esm-types/browser/sync/paginated_query_client.test.d.ts +0 -2
  308. package/dist/esm-types/browser/sync/paginated_query_client.test.d.ts.map +0 -1
  309. package/dist/esm-types/browser/sync/protocol.test.d.ts +0 -5
  310. package/dist/esm-types/browser/sync/protocol.test.d.ts.map +0 -1
  311. package/dist/esm-types/browser/sync/request_manager.test.d.ts +0 -2
  312. package/dist/esm-types/browser/sync/request_manager.test.d.ts.map +0 -1
  313. package/dist/esm-types/bundler/fs.test.d.ts +0 -2
  314. package/dist/esm-types/bundler/fs.test.d.ts.map +0 -1
  315. package/dist/esm-types/bundler/index.test.d.ts +0 -2
  316. package/dist/esm-types/bundler/index.test.d.ts.map +0 -1
  317. package/dist/esm-types/cli/codegen_templates/api.test.d.ts +0 -2
  318. package/dist/esm-types/cli/codegen_templates/api.test.d.ts.map +0 -1
  319. package/dist/esm-types/cli/codegen_templates/common.test.d.ts +0 -2
  320. package/dist/esm-types/cli/codegen_templates/common.test.d.ts.map +0 -1
  321. package/dist/esm-types/cli/codegen_templates/templates.test.d.ts +0 -2
  322. package/dist/esm-types/cli/codegen_templates/templates.test.d.ts.map +0 -1
  323. package/dist/esm-types/cli/codegen_templates/validator_helpers.test.d.ts +0 -2
  324. package/dist/esm-types/cli/codegen_templates/validator_helpers.test.d.ts.map +0 -1
  325. package/dist/esm-types/cli/configure.test.d.ts +0 -2
  326. package/dist/esm-types/cli/configure.test.d.ts.map +0 -1
  327. package/dist/esm-types/cli/deploymentCreate.test.d.ts +0 -2
  328. package/dist/esm-types/cli/deploymentCreate.test.d.ts.map +0 -1
  329. package/dist/esm-types/cli/deploymentSelect.test.d.ts +0 -2
  330. package/dist/esm-types/cli/deploymentSelect.test.d.ts.map +0 -1
  331. package/dist/esm-types/cli/deploymentSelection.test.d.ts +0 -2
  332. package/dist/esm-types/cli/deploymentSelection.test.d.ts.map +0 -1
  333. package/dist/esm-types/cli/deploymentToken.test.d.ts +0 -2
  334. package/dist/esm-types/cli/deploymentToken.test.d.ts.map +0 -1
  335. package/dist/esm-types/cli/dev.test.d.ts +0 -2
  336. package/dist/esm-types/cli/dev.test.d.ts.map +0 -1
  337. package/dist/esm-types/cli/envDefault.test.d.ts +0 -2
  338. package/dist/esm-types/cli/envDefault.test.d.ts.map +0 -1
  339. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +0 -2
  340. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +0 -1
  341. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +0 -2
  342. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +0 -1
  343. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +0 -2
  344. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +0 -1
  345. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts +0 -2
  346. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +0 -1
  347. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts +0 -2
  348. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +0 -1
  349. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts +0 -2
  350. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +0 -1
  351. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +0 -2
  352. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +0 -1
  353. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +0 -2
  354. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +0 -1
  355. package/dist/esm-types/cli/lib/codegen.test.d.ts +0 -2
  356. package/dist/esm-types/cli/lib/codegen.test.d.ts.map +0 -1
  357. package/dist/esm-types/cli/lib/components.test.d.ts +0 -2
  358. package/dist/esm-types/cli/lib/components.test.d.ts.map +0 -1
  359. package/dist/esm-types/cli/lib/config.test.d.ts +0 -2
  360. package/dist/esm-types/cli/lib/config.test.d.ts.map +0 -1
  361. package/dist/esm-types/cli/lib/deployment.test.d.ts +0 -2
  362. package/dist/esm-types/cli/lib/deployment.test.d.ts.map +0 -1
  363. package/dist/esm-types/cli/lib/deploymentSelector.test.d.ts +0 -2
  364. package/dist/esm-types/cli/lib/deploymentSelector.test.d.ts.map +0 -1
  365. package/dist/esm-types/cli/lib/env.test.d.ts +0 -2
  366. package/dist/esm-types/cli/lib/env.test.d.ts.map +0 -1
  367. package/dist/esm-types/cli/lib/expiration.test.d.ts +0 -2
  368. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +0 -1
  369. package/dist/esm-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts +0 -2
  370. package/dist/esm-types/cli/lib/extractDeploymentNameForWorkOS.test.d.ts.map +0 -1
  371. package/dist/esm-types/cli/lib/formatEnvValueForDotfile.test.d.ts +0 -2
  372. package/dist/esm-types/cli/lib/formatEnvValueForDotfile.test.d.ts.map +0 -1
  373. package/dist/esm-types/cli/lib/formatTargetedDeployment.test.d.ts +0 -2
  374. package/dist/esm-types/cli/lib/formatTargetedDeployment.test.d.ts.map +0 -1
  375. package/dist/esm-types/cli/lib/fsUtils.test.d.ts +0 -2
  376. package/dist/esm-types/cli/lib/fsUtils.test.d.ts.map +0 -1
  377. package/dist/esm-types/cli/lib/generateDocs.test.d.ts +0 -2
  378. package/dist/esm-types/cli/lib/generateDocs.test.d.ts.map +0 -1
  379. package/dist/esm-types/cli/lib/indexes.test.d.ts +0 -2
  380. package/dist/esm-types/cli/lib/indexes.test.d.ts.map +0 -1
  381. package/dist/esm-types/cli/lib/localDeployment/run.test.d.ts +0 -2
  382. package/dist/esm-types/cli/lib/localDeployment/run.test.d.ts.map +0 -1
  383. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts +0 -2
  384. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts.map +0 -1
  385. package/dist/esm-types/cli/lib/run.test.d.ts +0 -2
  386. package/dist/esm-types/cli/lib/run.test.d.ts.map +0 -1
  387. package/dist/esm-types/cli/lib/runTestFunction.test.d.ts +0 -2
  388. package/dist/esm-types/cli/lib/runTestFunction.test.d.ts.map +0 -1
  389. package/dist/esm-types/cli/lib/typecheck.test.d.ts +0 -2
  390. package/dist/esm-types/cli/lib/typecheck.test.d.ts.map +0 -1
  391. package/dist/esm-types/cli/lib/updates.test.d.ts +0 -2
  392. package/dist/esm-types/cli/lib/updates.test.d.ts.map +0 -1
  393. package/dist/esm-types/cli/lib/utils/hash.test.d.ts +0 -2
  394. package/dist/esm-types/cli/lib/utils/hash.test.d.ts.map +0 -1
  395. package/dist/esm-types/cli/lib/utils/utils.test.d.ts +0 -2
  396. package/dist/esm-types/cli/lib/utils/utils.test.d.ts.map +0 -1
  397. package/dist/esm-types/cli/lib/versionApi.test.d.ts +0 -2
  398. package/dist/esm-types/cli/lib/versionApi.test.d.ts.map +0 -1
  399. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts +0 -2
  400. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts.map +0 -1
  401. package/dist/esm-types/cli/lib/workos/workos.test.d.ts +0 -2
  402. package/dist/esm-types/cli/lib/workos/workos.test.d.ts.map +0 -1
  403. package/dist/esm-types/cli/login.test.d.ts +0 -2
  404. package/dist/esm-types/cli/login.test.d.ts.map +0 -1
  405. package/dist/esm-types/common/index.test.d.ts +0 -2
  406. package/dist/esm-types/common/index.test.d.ts.map +0 -1
  407. package/dist/esm-types/nextjs/nextjs.test.d.ts +0 -2
  408. package/dist/esm-types/nextjs/nextjs.test.d.ts.map +0 -1
  409. package/dist/esm-types/react/ConvexAuthState.test.d.ts +0 -2
  410. package/dist/esm-types/react/ConvexAuthState.test.d.ts.map +0 -1
  411. package/dist/esm-types/react/auth_helpers.test.d.ts +0 -2
  412. package/dist/esm-types/react/auth_helpers.test.d.ts.map +0 -1
  413. package/dist/esm-types/react/auth_websocket.test.d.ts +0 -2
  414. package/dist/esm-types/react/auth_websocket.test.d.ts.map +0 -1
  415. package/dist/esm-types/react/client.test.d.ts +0 -2
  416. package/dist/esm-types/react/client.test.d.ts.map +0 -1
  417. package/dist/esm-types/react/client_provided_base_client.test.d.ts +0 -2
  418. package/dist/esm-types/react/client_provided_base_client.test.d.ts.map +0 -1
  419. package/dist/esm-types/react/queries_observer.test.d.ts +0 -2
  420. package/dist/esm-types/react/queries_observer.test.d.ts.map +0 -1
  421. package/dist/esm-types/react/react_node.test.d.ts +0 -2
  422. package/dist/esm-types/react/react_node.test.d.ts.map +0 -1
  423. package/dist/esm-types/react/use_paginated_query.test.d.ts +0 -2
  424. package/dist/esm-types/react/use_paginated_query.test.d.ts.map +0 -1
  425. package/dist/esm-types/react/use_queries.test.d.ts +0 -5
  426. package/dist/esm-types/react/use_queries.test.d.ts.map +0 -1
  427. package/dist/esm-types/react/use_query.test.d.ts +0 -5
  428. package/dist/esm-types/react/use_query.test.d.ts.map +0 -1
  429. package/dist/esm-types/react/use_query_object_options.test.d.ts +0 -5
  430. package/dist/esm-types/react/use_query_object_options.test.d.ts.map +0 -1
  431. package/dist/esm-types/react/use_query_result.test.d.ts +0 -5
  432. package/dist/esm-types/react/use_query_result.test.d.ts.map +0 -1
  433. package/dist/esm-types/react-auth0/ConvexProviderWithAuth0.test.d.ts +0 -2
  434. package/dist/esm-types/react-auth0/ConvexProviderWithAuth0.test.d.ts.map +0 -1
  435. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.test.d.ts +0 -2
  436. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.test.d.ts.map +0 -1
  437. package/dist/esm-types/server/api.intersect.test.d.ts +0 -2
  438. package/dist/esm-types/server/api.intersect.test.d.ts.map +0 -1
  439. package/dist/esm-types/server/api.test.d.ts +0 -2
  440. package/dist/esm-types/server/api.test.d.ts.map +0 -1
  441. package/dist/esm-types/server/audit_logging.test.d.ts +0 -2
  442. package/dist/esm-types/server/audit_logging.test.d.ts.map +0 -1
  443. package/dist/esm-types/server/components/index.test.d.ts +0 -2
  444. package/dist/esm-types/server/components/index.test.d.ts.map +0 -1
  445. package/dist/esm-types/server/cron.test.d.ts +0 -2
  446. package/dist/esm-types/server/cron.test.d.ts.map +0 -1
  447. package/dist/esm-types/server/data_model.test.d.ts +0 -2
  448. package/dist/esm-types/server/data_model.test.d.ts.map +0 -1
  449. package/dist/esm-types/server/database.test.d.ts +0 -2
  450. package/dist/esm-types/server/database.test.d.ts.map +0 -1
  451. package/dist/esm-types/server/database_api.test.d.ts +0 -2
  452. package/dist/esm-types/server/database_api.test.d.ts.map +0 -1
  453. package/dist/esm-types/server/filter_builder.test.d.ts +0 -2
  454. package/dist/esm-types/server/filter_builder.test.d.ts.map +0 -1
  455. package/dist/esm-types/server/impl/actions_impl.test.d.ts +0 -2
  456. package/dist/esm-types/server/impl/actions_impl.test.d.ts.map +0 -1
  457. package/dist/esm-types/server/impl/filter_builder_impl.test.d.ts +0 -2
  458. package/dist/esm-types/server/impl/filter_builder_impl.test.d.ts.map +0 -1
  459. package/dist/esm-types/server/impl/query_impl.test.d.ts +0 -2
  460. package/dist/esm-types/server/impl/query_impl.test.d.ts.map +0 -1
  461. package/dist/esm-types/server/pagination.test.d.ts +0 -2
  462. package/dist/esm-types/server/pagination.test.d.ts.map +0 -1
  463. package/dist/esm-types/server/query.test.d.ts +0 -2
  464. package/dist/esm-types/server/query.test.d.ts.map +0 -1
  465. package/dist/esm-types/server/registration.test.d.ts +0 -2
  466. package/dist/esm-types/server/registration.test.d.ts.map +0 -1
  467. package/dist/esm-types/server/router.test.d.ts +0 -2
  468. package/dist/esm-types/server/router.test.d.ts.map +0 -1
  469. package/dist/esm-types/server/scheduler.test.d.ts +0 -2
  470. package/dist/esm-types/server/scheduler.test.d.ts.map +0 -1
  471. package/dist/esm-types/server/schema.test.d.ts +0 -2
  472. package/dist/esm-types/server/schema.test.d.ts.map +0 -1
  473. package/dist/esm-types/test/fake_watch.d.ts +0 -16
  474. package/dist/esm-types/test/fake_watch.d.ts.map +0 -1
  475. package/dist/esm-types/test/type_testing.d.ts +0 -9
  476. package/dist/esm-types/test/type_testing.d.ts.map +0 -1
  477. package/dist/esm-types/type_utils.test.d.ts +0 -2
  478. package/dist/esm-types/type_utils.test.d.ts.map +0 -1
  479. package/dist/esm-types/values/size.test.d.ts +0 -2
  480. package/dist/esm-types/values/size.test.d.ts.map +0 -1
  481. package/dist/esm-types/values/validator.test.d.ts +0 -2
  482. package/dist/esm-types/values/validator.test.d.ts.map +0 -1
  483. package/dist/esm-types/values/value.test.d.ts +0 -2
  484. package/dist/esm-types/values/value.test.d.ts.map +0 -1
  485. package/src/browser/http_client.test.ts +0 -202
  486. package/src/browser/query_options.test.ts +0 -43
  487. package/src/browser/simple_client.test.ts +0 -104
  488. package/src/browser/sync/client.test.ts +0 -44
  489. package/src/browser/sync/client_node.test.ts +0 -1207
  490. package/src/browser/sync/client_node_test_helpers.ts +0 -200
  491. package/src/browser/sync/local_state.test.ts +0 -128
  492. package/src/browser/sync/optimistic_query_set.test.ts +0 -253
  493. package/src/browser/sync/paginated_query_client.test.ts +0 -597
  494. package/src/browser/sync/protocol.test.ts +0 -14
  495. package/src/browser/sync/request_manager.test.ts +0 -273
  496. package/src/bundler/fs.test.ts +0 -86
  497. package/src/bundler/index.test.ts +0 -210
  498. package/src/bundler/test_fixtures/js/project01/bar.js +0 -4
  499. package/src/bundler/test_fixtures/js/project01/file with spaces.js +0 -1
  500. package/src/bundler/test_fixtures/js/project01/foo.js +0 -9
  501. package/src/bundler/test_fixtures/js/project_with_https/https.js +0 -9
  502. package/src/bundler/test_fixtures/js/project_with_https_not_at_top_level/default.js +0 -3
  503. package/src/bundler/test_fixtures/js/project_with_https_not_at_top_level/more_code/https.js +0 -5
  504. package/src/bundler/test_fixtures/js/project_with_https_without_router/https.js +0 -1
  505. package/src/bundler/test_fixtures/js/project_with_node_shims/uses_node_shims.js +0 -4
  506. package/src/cli/codegen_templates/api.test.ts +0 -18
  507. package/src/cli/codegen_templates/common.test.ts +0 -52
  508. package/src/cli/codegen_templates/templates.test.ts +0 -16
  509. package/src/cli/codegen_templates/validator_helpers.test.ts +0 -31
  510. package/src/cli/configure.test.ts +0 -138
  511. package/src/cli/deploymentCreate.test.ts +0 -1376
  512. package/src/cli/deploymentSelect.test.ts +0 -1291
  513. package/src/cli/deploymentSelection.test.ts +0 -2546
  514. package/src/cli/deploymentToken.test.ts +0 -397
  515. package/src/cli/dev.test.ts +0 -157
  516. package/src/cli/envDefault.test.ts +0 -495
  517. package/src/cli/lib/__snapshots__/formatTargetedDeployment.test.ts.snap +0 -94
  518. package/src/cli/lib/aiFiles/agentsmd.test.ts +0 -133
  519. package/src/cli/lib/aiFiles/claudemd.test.ts +0 -92
  520. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +0 -50
  521. package/src/cli/lib/aiFiles/index.test.ts +0 -986
  522. package/src/cli/lib/aiFiles/integration.test.ts +0 -692
  523. package/src/cli/lib/aiFiles/prompt.test.ts +0 -202
  524. package/src/cli/lib/aiFiles/state.test.ts +0 -305
  525. package/src/cli/lib/aiFiles/utils.test.ts +0 -50
  526. package/src/cli/lib/codegen.test.ts +0 -49
  527. package/src/cli/lib/components.test.ts +0 -227
  528. package/src/cli/lib/config.test.ts +0 -1026
  529. package/src/cli/lib/deployment.test.ts +0 -85
  530. package/src/cli/lib/deploymentSelector.test.ts +0 -107
  531. package/src/cli/lib/env.test.ts +0 -60
  532. package/src/cli/lib/expiration.test.ts +0 -159
  533. package/src/cli/lib/extractDeploymentNameForWorkOS.test.ts +0 -30
  534. package/src/cli/lib/formatEnvValueForDotfile.test.ts +0 -294
  535. package/src/cli/lib/formatTargetedDeployment.test.ts +0 -281
  536. package/src/cli/lib/fsUtils.test.ts +0 -67
  537. package/src/cli/lib/generateDocs.test.ts +0 -326
  538. package/src/cli/lib/indexes.test.ts +0 -77
  539. package/src/cli/lib/localDeployment/run.test.ts +0 -104
  540. package/src/cli/lib/localDeployment/secrets.test.ts +0 -53
  541. package/src/cli/lib/run.test.ts +0 -54
  542. package/src/cli/lib/runTestFunction.test.ts +0 -84
  543. package/src/cli/lib/typecheck.test.ts +0 -71
  544. package/src/cli/lib/updates.test.ts +0 -157
  545. package/src/cli/lib/utils/hash.test.ts +0 -25
  546. package/src/cli/lib/utils/utils.test.ts +0 -340
  547. package/src/cli/lib/versionApi.test.ts +0 -471
  548. package/src/cli/lib/workos/environmentApi.test.ts +0 -107
  549. package/src/cli/lib/workos/workos.test.ts +0 -242
  550. package/src/cli/login.test.ts +0 -261
  551. package/src/common/README.md +0 -2
  552. package/src/common/index.test.ts +0 -35
  553. package/src/nextjs/nextjs.test.tsx +0 -94
  554. package/src/react/ConvexAuthState.test.tsx +0 -702
  555. package/src/react/auth_helpers.test.tsx +0 -45
  556. package/src/react/auth_websocket.test.tsx +0 -1177
  557. package/src/react/client.test.tsx +0 -261
  558. package/src/react/client_provided_base_client.test.tsx +0 -174
  559. package/src/react/queries_observer.test.ts +0 -176
  560. package/src/react/react_node.test.ts +0 -78
  561. package/src/react/use_paginated_query.test.tsx +0 -1420
  562. package/src/react/use_queries.test.ts +0 -140
  563. package/src/react/use_query.test.ts +0 -71
  564. package/src/react/use_query_object_options.test.ts +0 -51
  565. package/src/react/use_query_result.test.ts +0 -75
  566. package/src/react-auth0/ConvexProviderWithAuth0.test.tsx +0 -17
  567. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +0 -18
  568. package/src/server/README.md +0 -15
  569. package/src/server/api.intersect.test.ts +0 -109
  570. package/src/server/api.test.ts +0 -447
  571. package/src/server/audit_logging.test.ts +0 -131
  572. package/src/server/components/index.test.ts +0 -48
  573. package/src/server/cron.test.ts +0 -58
  574. package/src/server/data_model.test.ts +0 -221
  575. package/src/server/database.test.ts +0 -184
  576. package/src/server/database_api.test.ts +0 -439
  577. package/src/server/filter_builder.test.ts +0 -102
  578. package/src/server/impl/actions_impl.test.ts +0 -59
  579. package/src/server/impl/filter_builder_impl.test.ts +0 -13
  580. package/src/server/impl/query_impl.test.ts +0 -46
  581. package/src/server/pagination.test.ts +0 -49
  582. package/src/server/query.test.ts +0 -112
  583. package/src/server/registration.test.ts +0 -589
  584. package/src/server/router.test.ts +0 -148
  585. package/src/server/scheduler.test.ts +0 -31
  586. package/src/server/schema.test.ts +0 -1081
  587. package/src/test/fake_watch.ts +0 -54
  588. package/src/test/type_testing.ts +0 -21
  589. package/src/type_utils.test.ts +0 -62
  590. package/src/values/size.test.ts +0 -95
  591. package/src/values/validator.test.ts +0 -619
  592. package/src/values/value.test.ts +0 -232
  593. package/src/vendor/README.md +0 -18
  594. package/src/vendor/jwt-decode/README.md +0 -1
@@ -1,1081 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-vars */
2
- import { CommitTsPlaceholder, GenericId } from "../values/index.js";
3
- import { describe, expect, test } from "vitest";
4
- import { assert, Equals } from "../test/type_testing.js";
5
- import { SystemIndexes } from "./system_fields.js";
6
- import {
7
- defineSchema,
8
- defineTable,
9
- DataModelFromSchemaDefinition,
10
- GenericSchema,
11
- SchemaDefinition,
12
- docValidator,
13
- } from "./schema.js";
14
- import { v, Infer } from "../values/validator.js";
15
- import {
16
- AnyDataModel,
17
- GenericDataModel,
18
- IndexNames,
19
- NamedTableInfo,
20
- } from "./data_model.js";
21
-
22
- describe("DataModelFromSchemaDefinition", () => {
23
- test("defineSchema produces the correct data model for basic types", () => {
24
- const schema = defineSchema({
25
- table: defineTable({
26
- ref: v.id("reference"),
27
- null: v.null(),
28
- number: v.number(),
29
- float64: v.float64(),
30
- int64: v.int64(),
31
- commitTs: v.commitTs(),
32
- boolean: v.boolean(),
33
- string: v.string(),
34
- bytes: v.bytes(),
35
- array: v.array(v.boolean()),
36
- record: v.record(v.string(), v.boolean()),
37
- }),
38
- });
39
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
40
- type ExpectedDocument = {
41
- _id: GenericId<"table">;
42
- _creationTime: number;
43
- ref: GenericId<"reference">;
44
- null: null;
45
- number: number;
46
- float64: number;
47
- int64: bigint;
48
- commitTs: bigint | CommitTsPlaceholder;
49
- boolean: boolean;
50
- string: string;
51
- array: boolean[];
52
- bytes: ArrayBuffer;
53
- record: Record<string, boolean>;
54
- };
55
- type ExpectedFieldPaths =
56
- | "_id"
57
- | "_creationTime"
58
- | "ref"
59
- | "null"
60
- | "number"
61
- | "float64"
62
- | "int64"
63
- | "commitTs"
64
- | "boolean"
65
- | "string"
66
- | "bytes"
67
- | "array"
68
- | "record"
69
- | `record.${string}`;
70
-
71
- type ExpectedDataModel = {
72
- table: {
73
- document: ExpectedDocument;
74
- fieldPaths: ExpectedFieldPaths;
75
- indexes: SystemIndexes;
76
- searchIndexes: {};
77
- vectorIndexes: {};
78
- };
79
- };
80
-
81
- assert<Equals<DataModel, ExpectedDataModel>>();
82
- });
83
- test("defineSchema produces the correct data model any", () => {
84
- const schema = defineSchema({
85
- table: defineTable({
86
- any: v.any(),
87
- }),
88
- });
89
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
90
- type ExpectedDocument = {
91
- _id: GenericId<"table">;
92
- _creationTime: number;
93
- any: any;
94
- };
95
- type ExpectedFieldPaths =
96
- | "_id"
97
- | "_creationTime"
98
- | "any"
99
- // You can index anything into an `any`
100
- | `any.${string}`;
101
-
102
- type ExpectedDataModel = {
103
- table: {
104
- document: ExpectedDocument;
105
- fieldPaths: ExpectedFieldPaths;
106
- indexes: SystemIndexes;
107
- searchIndexes: {};
108
- vectorIndexes: {};
109
- };
110
- };
111
-
112
- assert<Equals<DataModel, ExpectedDataModel>>();
113
- });
114
- test("defineSchema handles all the literal types", () => {
115
- const schema = defineSchema({
116
- table: defineTable({
117
- string: v.literal("string"),
118
- number: v.literal(1),
119
- bigint: v.literal(1n),
120
- boolean: v.literal(true),
121
- }),
122
- });
123
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
124
- type ExpectedDocument = {
125
- _id: GenericId<"table">;
126
- _creationTime: number;
127
- string: "string";
128
- number: 1;
129
- bigint: 1n;
130
- boolean: true;
131
- };
132
- type ExpectedFieldPaths =
133
- | "_id"
134
- | "_creationTime"
135
- | "string"
136
- | "number"
137
- | "bigint"
138
- | "boolean";
139
-
140
- type ExpectedDataModel = {
141
- table: {
142
- document: ExpectedDocument;
143
- fieldPaths: ExpectedFieldPaths;
144
- indexes: SystemIndexes;
145
- searchIndexes: {};
146
- vectorIndexes: {};
147
- };
148
- };
149
- assert<Equals<DataModel, ExpectedDataModel>>();
150
- });
151
-
152
- test("defineSchema handles nested objects", () => {
153
- const schema = defineSchema({
154
- table: defineTable({
155
- prop1: v.string(),
156
- nested: v.object({
157
- prop2: v.string(),
158
- doublyNested: v.object({
159
- prop3: v.string(),
160
- }),
161
- }),
162
- }),
163
- });
164
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
165
- type ExpectedDocument = {
166
- _id: GenericId<"table">;
167
- _creationTime: number;
168
- prop1: string;
169
- nested: {
170
- prop2: string;
171
- doublyNested: {
172
- prop3: string;
173
- };
174
- };
175
- };
176
- type ExpectedFieldPaths =
177
- | "_id"
178
- | "_creationTime"
179
- | "prop1"
180
- | "nested"
181
- | "nested.prop2"
182
- | "nested.doublyNested"
183
- | "nested.doublyNested.prop3";
184
-
185
- type ExpectedDataModel = {
186
- table: {
187
- document: ExpectedDocument;
188
- fieldPaths: ExpectedFieldPaths;
189
- indexes: SystemIndexes;
190
- searchIndexes: {};
191
- vectorIndexes: {};
192
- };
193
- };
194
- assert<Equals<DataModel, ExpectedDataModel>>();
195
- });
196
-
197
- test("defineSchema handles object unions", () => {
198
- const schema = defineSchema({
199
- table: defineTable(
200
- v.union(
201
- v.object({
202
- string: v.string(),
203
- }),
204
- v.object({
205
- number: v.number(),
206
- }),
207
- ),
208
- ),
209
- });
210
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
211
- type ExpectedDocument =
212
- | {
213
- _id: GenericId<"table">;
214
- _creationTime: number;
215
- string: string;
216
- }
217
- | {
218
- _id: GenericId<"table">;
219
- _creationTime: number;
220
- number: number;
221
- };
222
- type ExpectedFieldPaths = "_id" | "_creationTime" | "string" | "number";
223
- type ExpectedDataModel = {
224
- table: {
225
- document: ExpectedDocument;
226
- fieldPaths: ExpectedFieldPaths;
227
- indexes: SystemIndexes;
228
- searchIndexes: {};
229
- vectorIndexes: {};
230
- };
231
- };
232
- assert<Equals<DataModel, ExpectedDataModel>>();
233
- });
234
-
235
- test("defineSchema handles mixed unions", () => {
236
- // Testing that we can mix objects and other things in unions and still
237
- // generate the right index field paths.
238
- const schema = defineSchema({
239
- table: defineTable({
240
- property: v.union(v.object({ string: v.string() }), v.number()),
241
- }),
242
- });
243
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
244
- type ExpectedDocument = {
245
- _id: GenericId<"table">;
246
- _creationTime: number;
247
- property: { string: string } | number;
248
- };
249
- type ExpectedFieldPaths =
250
- | "_id"
251
- | "_creationTime"
252
- | "property"
253
- | "property.string";
254
- type ExpectedDataModel = {
255
- table: {
256
- document: ExpectedDocument;
257
- fieldPaths: ExpectedFieldPaths;
258
- indexes: SystemIndexes;
259
- searchIndexes: {};
260
- vectorIndexes: {};
261
- };
262
- };
263
- assert<Equals<DataModel, ExpectedDataModel>>();
264
- });
265
-
266
- test("defineSchema handles array of unions", () => {
267
- const schema = defineSchema({
268
- table: defineTable({
269
- property: v.array(v.union(v.number(), v.string())),
270
- }),
271
- });
272
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
273
- type ExpectedDocument = {
274
- _id: GenericId<"table">;
275
- _creationTime: number;
276
- property: (number | string)[];
277
- };
278
- type ExpectedFieldPaths = "_id" | "_creationTime" | "property";
279
- type ExpectedDataModel = {
280
- table: {
281
- document: ExpectedDocument;
282
- fieldPaths: ExpectedFieldPaths;
283
- indexes: SystemIndexes;
284
- searchIndexes: {};
285
- vectorIndexes: {};
286
- };
287
- };
288
- assert<Equals<DataModel, ExpectedDataModel>>();
289
- });
290
-
291
- test("defineSchema handles records with Ids", () => {
292
- const schema = defineSchema({
293
- table: defineTable({
294
- property: v.record(v.id("reference"), v.string()),
295
- }),
296
- });
297
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
298
- type ExpectedDocument = {
299
- _id: GenericId<"table">;
300
- _creationTime: number;
301
- property: Record<GenericId<"reference">, string>;
302
- };
303
- type ExpectedFieldPaths =
304
- | "_id"
305
- | "_creationTime"
306
- | "property"
307
- | `property.${string}`;
308
- type ExpectedDataModel = {
309
- table: {
310
- document: ExpectedDocument;
311
- fieldPaths: ExpectedFieldPaths;
312
- indexes: SystemIndexes;
313
- searchIndexes: {};
314
- vectorIndexes: {};
315
- };
316
- };
317
- assert<Equals<DataModel, ExpectedDataModel>>();
318
- });
319
-
320
- test("defineSchema handles records with type unions", () => {
321
- const schema = defineSchema({
322
- table: defineTable({
323
- property: v.record(v.union(v.id("foo"), v.id("bla")), v.string()),
324
- }),
325
- });
326
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
327
- type ExpectedDocument = {
328
- _id: GenericId<"table">;
329
- _creationTime: number;
330
- property: Record<GenericId<"foo"> | GenericId<"bla">, string>;
331
- };
332
- type ExpectedFieldPaths =
333
- | "_id"
334
- | "_creationTime"
335
- | "property"
336
- | `property.${string}`;
337
- type ExpectedDataModel = {
338
- table: {
339
- document: ExpectedDocument;
340
- fieldPaths: ExpectedFieldPaths;
341
- indexes: SystemIndexes;
342
- searchIndexes: {};
343
- vectorIndexes: {};
344
- };
345
- };
346
- assert<Equals<DataModel, ExpectedDataModel>>();
347
- });
348
-
349
- test("defineSchema handles optional keys", () => {
350
- const schema = defineSchema({
351
- table: defineTable({
352
- required: v.string(),
353
- optional: v.optional(v.boolean()),
354
- nested: v.object({
355
- required: v.int64(),
356
- optional: v.optional(v.number()),
357
- }),
358
- }),
359
- });
360
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
361
- type ExpectedDocument = {
362
- _id: GenericId<"table">;
363
- _creationTime: number;
364
- required: string;
365
- optional?: boolean;
366
- nested: {
367
- required: bigint;
368
- optional?: number;
369
- };
370
- };
371
- type ExpectedFieldPaths =
372
- | "_id"
373
- | "_creationTime"
374
- | "required"
375
- | "optional"
376
- | "nested"
377
- | "nested.required"
378
- | "nested.optional";
379
-
380
- type ExpectedDataModel = {
381
- table: {
382
- document: ExpectedDocument;
383
- fieldPaths: ExpectedFieldPaths;
384
- indexes: SystemIndexes;
385
- searchIndexes: {};
386
- vectorIndexes: {};
387
- };
388
- };
389
- assert<Equals<DataModel, ExpectedDataModel>>();
390
- });
391
-
392
- test("defineSchema supports loose schemas", () => {
393
- const schema = defineSchema(
394
- {
395
- table: defineTable({
396
- property: v.string(),
397
- }),
398
- },
399
- { strictTableNameTypes: false },
400
- );
401
-
402
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
403
- type ExpectedDocument = {
404
- _id: GenericId<"table">;
405
- _creationTime: number;
406
- property: string;
407
- };
408
-
409
- type ExpectedDataModel = {
410
- table: {
411
- document: ExpectedDocument;
412
- fieldPaths: "_id" | "_creationTime" | "property";
413
- indexes: SystemIndexes;
414
- searchIndexes: {};
415
- vectorIndexes: {};
416
- };
417
- [tableName: string]: {
418
- document: any;
419
- fieldPaths: string;
420
- indexes: SystemIndexes;
421
- searchIndexes: {};
422
- vectorIndexes: {};
423
- };
424
- };
425
- assert<Equals<DataModel, ExpectedDataModel>>();
426
- });
427
-
428
- test("defineSchema generates index types", () => {
429
- const schema = defineSchema({
430
- table: defineTable({
431
- property1: v.string(),
432
- property2: v.string(),
433
- })
434
- .index("by_property1", ["property1"])
435
- .index("by_property1_property2", ["property1", "property2"]),
436
- });
437
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
438
- type ExpectedDocument = {
439
- _id: GenericId<"table">;
440
- _creationTime: number;
441
- property1: string;
442
- property2: string;
443
- };
444
- type ExpectedFieldPaths =
445
- | "_id"
446
- | "_creationTime"
447
- | "property1"
448
- | "property2";
449
- type ExpectedIndexes = {
450
- by_property1: ["property1", "_creationTime"];
451
- by_property1_property2: ["property1", "property2", "_creationTime"];
452
-
453
- // System indexes
454
- by_creation_time: ["_creationTime"];
455
- by_id: ["_id"];
456
- };
457
- type ExpectedDataModel = {
458
- table: {
459
- document: ExpectedDocument;
460
- fieldPaths: ExpectedFieldPaths;
461
- indexes: ExpectedIndexes;
462
- searchIndexes: {};
463
- vectorIndexes: {};
464
- };
465
- };
466
- assert<Equals<DataModel, ExpectedDataModel>>();
467
- });
468
-
469
- test("defineSchema creates staged indexes", () => {
470
- const schema = defineSchema({
471
- table: defineTable({
472
- enabled: v.string(),
473
- enabled2: v.string(),
474
- enabled3: v.string(),
475
- staged: v.string(),
476
- })
477
- .index("by_enabled", ["enabled"])
478
- .index("by_enabled2", { fields: ["enabled2"] })
479
- .index("by_enabled3", { fields: ["enabled3"], staged: false })
480
- .index("by_staged", { fields: ["staged"], staged: true }),
481
- });
482
- type Indexes = DataModelFromSchemaDefinition<
483
- typeof schema
484
- >["table"]["indexes"];
485
- type ExpectedIndexes = {
486
- by_enabled: ["enabled", "_creationTime"];
487
- by_enabled2: ["enabled2", "_creationTime"];
488
- by_enabled3: ["enabled3", "_creationTime"];
489
- by_id: ["_id"];
490
- by_creation_time: ["_creationTime"];
491
- };
492
- assert<Equals<Indexes, ExpectedIndexes>>();
493
- });
494
-
495
- test("defineSchema creates staged search indexes", () => {
496
- const schema = defineSchema({
497
- table: defineTable({
498
- enabled: v.string(),
499
- enabled2: v.string(),
500
- staged: v.string(),
501
- })
502
- .searchIndex("by_enabled", { searchField: "enabled" })
503
- .searchIndex("by_enabled2", { searchField: "enabled2", staged: false })
504
- .searchIndex("by_staged", { searchField: "staged", staged: true }),
505
- });
506
- type SearchIndexes = DataModelFromSchemaDefinition<
507
- typeof schema
508
- >["table"]["searchIndexes"];
509
- type ExpectedSearchIndexes = {
510
- by_enabled: {
511
- searchField: "enabled";
512
- filterFields: never;
513
- };
514
- by_enabled2: {
515
- searchField: "enabled2";
516
- filterFields: never;
517
- };
518
- };
519
- assert<Equals<SearchIndexes, ExpectedSearchIndexes>>();
520
- });
521
-
522
- test("defineSchema creates staged vector indexes", () => {
523
- const schema = defineSchema({
524
- table: defineTable({
525
- enabled: v.string(),
526
- enabled2: v.string(),
527
- staged: v.string(),
528
- })
529
- .vectorIndex("by_enabled", {
530
- vectorField: "enabled",
531
- dimensions: 1536,
532
- })
533
- .vectorIndex("by_enabled2", {
534
- vectorField: "enabled2",
535
- dimensions: 1536,
536
- staged: false,
537
- })
538
- .vectorIndex("by_staged", {
539
- vectorField: "staged",
540
- dimensions: 1536,
541
- staged: true,
542
- }),
543
- });
544
- type VectorIndexes = DataModelFromSchemaDefinition<
545
- typeof schema
546
- >["table"]["vectorIndexes"];
547
- type ExpectedVectorIndexes = {
548
- by_enabled: {
549
- vectorField: "enabled";
550
- dimensions: number;
551
- filterFields: never;
552
- };
553
- by_enabled2: {
554
- vectorField: "enabled2";
555
- dimensions: number;
556
- filterFields: never;
557
- };
558
- };
559
- assert<Equals<VectorIndexes, ExpectedVectorIndexes>>();
560
- });
561
- });
562
-
563
- test("defineSchema doesn’t allow creating indexes with a staged status not known at compile time", () => {
564
- defineSchema({
565
- // @ts-expect-error
566
- table: defineTable({
567
- field: v.string(),
568
- }).index("staged_database_index", {
569
- fields: ["field"],
570
- staged: Math.random() < 0.5,
571
- }),
572
- });
573
-
574
- defineSchema({
575
- table: defineTable({
576
- field: v.string(),
577
- }).searchIndex("staged_search_index", {
578
- searchField: "field",
579
- // @ts-expect-error
580
- staged: Math.random() < 0.5,
581
- }),
582
- });
583
-
584
- defineSchema({
585
- table: defineTable({
586
- field: v.array(v.float64()),
587
- }).vectorIndex("staged_vector_index", {
588
- vectorField: "field",
589
- dimensions: 42,
590
- // @ts-expect-error
591
- staged: Math.random() < 0.5,
592
- }),
593
- });
594
- });
595
-
596
- test("defineSchema generates search index types", () => {
597
- const schema = defineSchema({
598
- table: defineTable({
599
- property1: v.string(),
600
- property2: v.string(),
601
- })
602
- .searchIndex("no_filter_fields", {
603
- searchField: "property1",
604
- })
605
- .searchIndex("one_filter_field", {
606
- searchField: "property1",
607
- filterFields: ["property1"],
608
- })
609
- .searchIndex("two_filter_fields", {
610
- searchField: "property1",
611
- filterFields: ["property1", "property2"],
612
- }),
613
- });
614
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
615
- type ExpectedDocument = {
616
- _id: GenericId<"table">;
617
- _creationTime: number;
618
- property1: string;
619
- property2: string;
620
- };
621
- type ExpectedFieldPaths = "_id" | "_creationTime" | "property1" | "property2";
622
- type ExpectedSearchIndexes = {
623
- no_filter_fields: {
624
- searchField: "property1";
625
- filterFields: never;
626
- };
627
- one_filter_field: {
628
- searchField: "property1";
629
- filterFields: "property1";
630
- };
631
- two_filter_fields: {
632
- searchField: "property1";
633
- filterFields: "property1" | "property2";
634
- };
635
- };
636
- type ExpectedDataModel = {
637
- table: {
638
- document: ExpectedDocument;
639
- fieldPaths: ExpectedFieldPaths;
640
- indexes: SystemIndexes;
641
- searchIndexes: ExpectedSearchIndexes;
642
- vectorIndexes: {};
643
- };
644
- };
645
- assert<Equals<DataModel, ExpectedDataModel>>();
646
- });
647
-
648
- test("defineSchema generates vector search index types", () => {
649
- const schema = defineSchema({
650
- table: defineTable({
651
- property1: v.string(),
652
- property2: v.string(),
653
- embedding: v.array(v.float64()),
654
- })
655
- .vectorIndex("no_filter_fields", {
656
- vectorField: "embedding",
657
- dimensions: 1536,
658
- })
659
- .vectorIndex("one_filter_field", {
660
- vectorField: "embedding",
661
- dimensions: 1536,
662
- filterFields: ["property1"],
663
- })
664
- .vectorIndex("two_filter_fields", {
665
- vectorField: "embedding",
666
- dimensions: 1536,
667
- filterFields: ["property1", "property2"],
668
- }),
669
- });
670
- type DataModel = DataModelFromSchemaDefinition<typeof schema>;
671
- type ExpectedDocument = {
672
- _id: GenericId<"table">;
673
- _creationTime: number;
674
- property1: string;
675
- property2: string;
676
- embedding: number[];
677
- };
678
- type ExpectedFieldPaths =
679
- | "_id"
680
- | "_creationTime"
681
- | "property1"
682
- | "property2"
683
- | "embedding";
684
- type ExpectedVectorSearchIndexes = {
685
- no_filter_fields: {
686
- vectorField: "embedding";
687
- dimensions: number;
688
- filterFields: never;
689
- };
690
- one_filter_field: {
691
- vectorField: "embedding";
692
- dimensions: number;
693
- filterFields: "property1";
694
- };
695
- two_filter_fields: {
696
- vectorField: "embedding";
697
- dimensions: number;
698
- filterFields: "property1" | "property2";
699
- };
700
- };
701
- schema.tables.table.vectorIndex;
702
- type ExpectedDataModel = {
703
- table: {
704
- document: ExpectedDocument;
705
- fieldPaths: ExpectedFieldPaths;
706
- indexes: SystemIndexes;
707
- searchIndexes: {};
708
- vectorIndexes: ExpectedVectorSearchIndexes;
709
- };
710
- };
711
- assert<Equals<DataModel, ExpectedDataModel>>();
712
- });
713
-
714
- test("defineTable collects indexes", () => {
715
- const table = defineTable({
716
- a: v.string(),
717
- b: v.string(),
718
- })
719
- .index("by_a", ["a"])
720
- .index("by_a_b", ["a", "b"]);
721
-
722
- expect(table.export().indexes).toEqual([
723
- { indexDescriptor: "by_a", fields: ["a"] },
724
- { indexDescriptor: "by_a_b", fields: ["a", "b"] },
725
- ]);
726
- });
727
-
728
- test("Experimental API table.[' indexes']() returns indexes", () => {
729
- const table = defineTable({
730
- a: v.string(),
731
- b: v.string(),
732
- })
733
- .index("by_a", ["a"])
734
- .index("by_a_b", ["a", "b"]);
735
-
736
- expect(table[" indexes"]()).toEqual([
737
- { indexDescriptor: "by_a", fields: ["a"] },
738
- { indexDescriptor: "by_a_b", fields: ["a", "b"] },
739
- ]);
740
- });
741
-
742
- describe("JsonTypesFromSchema", () => {
743
- test("TableDefinition includes field types", () => {
744
- const table = defineTable({
745
- ref: v.id("reference"),
746
- nullField: v.null(),
747
- numberField: v.number(),
748
- float64Field: v.float64(),
749
- int64Field: v.int64(),
750
- commitTsField: v.commitTs(),
751
- booleanField: v.boolean(),
752
- stringField: v.string(),
753
- bytesField: v.bytes(),
754
- arrayField: v.array(v.boolean()),
755
- anyField: v.any(),
756
- literalBigint: v.literal(1n),
757
- literalNumber: v.literal(0.0),
758
- literalString: v.literal("hello world"),
759
- literalBoolean: v.literal(true),
760
- union: v.union(v.string(), v.number()),
761
- object: v.object({ a: v.optional(v.any()) }),
762
- }).export();
763
- expect(table.documentType).toEqual({
764
- type: "object",
765
- value: {
766
- ref: {
767
- fieldType: { type: "id", tableName: "reference" },
768
- optional: false,
769
- },
770
- nullField: { fieldType: { type: "null" }, optional: false },
771
- numberField: { fieldType: { type: "number" }, optional: false },
772
- float64Field: { fieldType: { type: "number" }, optional: false },
773
- int64Field: { fieldType: { type: "bigint" }, optional: false },
774
- commitTsField: { fieldType: { type: "commitTs" }, optional: false },
775
- booleanField: { fieldType: { type: "boolean" }, optional: false },
776
- stringField: { fieldType: { type: "string" }, optional: false },
777
- bytesField: { fieldType: { type: "bytes" }, optional: false },
778
- arrayField: {
779
- fieldType: { type: "array", value: { type: "boolean" } },
780
- optional: false,
781
- },
782
- anyField: { fieldType: { type: "any" }, optional: false },
783
- literalBigint: {
784
- fieldType: {
785
- type: "literal",
786
- value: {
787
- $integer: "AQAAAAAAAAA=",
788
- },
789
- },
790
- optional: false,
791
- },
792
- literalNumber: {
793
- fieldType: {
794
- type: "literal",
795
- value: 0.0,
796
- },
797
- optional: false,
798
- },
799
- literalString: {
800
- fieldType: {
801
- type: "literal",
802
- value: "hello world",
803
- },
804
- optional: false,
805
- },
806
- literalBoolean: {
807
- fieldType: {
808
- type: "literal",
809
- value: true,
810
- },
811
- optional: false,
812
- },
813
- union: {
814
- fieldType: {
815
- type: "union",
816
- value: [{ type: "string" }, { type: "number" }],
817
- },
818
- optional: false,
819
- },
820
- object: {
821
- fieldType: {
822
- type: "object",
823
- value: {
824
- a: { fieldType: { type: "any" }, optional: true },
825
- },
826
- },
827
- optional: false,
828
- },
829
- },
830
- });
831
- });
832
- test("TableDefinition includes union and object types", () => {
833
- const table = defineTable(
834
- v.union(
835
- v.object({ a: v.array(v.number()), b: v.optional(v.string()) }),
836
- v.object({ c: v.any(), d: v.bytes() }),
837
- ),
838
- ).export();
839
- expect(table.documentType).toEqual({
840
- type: "union",
841
- value: [
842
- {
843
- type: "object",
844
- value: {
845
- a: {
846
- fieldType: { type: "array", value: { type: "number" } },
847
- optional: false,
848
- },
849
- b: { fieldType: { type: "string" }, optional: true },
850
- },
851
- },
852
- {
853
- type: "object",
854
- value: {
855
- c: { fieldType: { type: "any" }, optional: false },
856
- d: { fieldType: { type: "bytes" }, optional: false },
857
- },
858
- },
859
- ],
860
- });
861
- });
862
- });
863
-
864
- test("Infer", () => {
865
- const documentSchema = v.object({
866
- property: v.string(),
867
- });
868
-
869
- type Actual = Infer<typeof documentSchema>;
870
- type Expected = {
871
- property: string;
872
- };
873
-
874
- assert<Equals<Actual, Expected>>();
875
- });
876
-
877
- describe("defineSchema/defineTable expose table validators", () => {
878
- const obj = {
879
- ref: v.id("reference"),
880
- string: v.string(),
881
- } as const;
882
- const table = defineTable(obj);
883
- const schema = defineSchema({ table });
884
-
885
- test("defineTable", () => {
886
- const actual = table.validator;
887
- const expected = v.object(obj);
888
- expect(actual).toEqual(expected);
889
- assert<Equals<typeof actual, typeof expected>>();
890
- });
891
-
892
- test("defineSchema", () => {
893
- const actual = schema.tables.table.validator;
894
- const expected = v.object(obj);
895
- expect(actual).toEqual(expected);
896
- assert<Equals<typeof actual, typeof expected>>();
897
- });
898
-
899
- test("system tables are not present", () => {
900
- expect(table.validator).not.toHaveProperty("_id");
901
- expect(table.validator).not.toHaveProperty("_creationTime");
902
- expect(schema.tables.table.validator).not.toHaveProperty("_id");
903
- expect(schema.tables.table.validator).not.toHaveProperty("_creationTime");
904
- });
905
- });
906
-
907
- describe("docValidator", () => {
908
- const objectSchema = defineSchema({
909
- messages: defineTable({ body: v.string(), author: v.id("users") }),
910
- });
911
-
912
- const unionSchema = defineSchema({
913
- results: defineTable(
914
- v.union(
915
- v.object({ kind: v.literal("error"), message: v.string() }),
916
- v.object({ kind: v.literal("success"), value: v.number() }),
917
- ),
918
- ),
919
- });
920
-
921
- test("adds system fields to an object table", () => {
922
- const doc = docValidator("messages", objectSchema.tables.messages);
923
- const expected = v.object({
924
- _id: v.id("messages"),
925
- _creationTime: v.number(),
926
- body: v.string(),
927
- author: v.id("users"),
928
- });
929
- expect(doc.json).toEqual(expected.json);
930
- assert<Equals<Infer<typeof doc>, Infer<typeof expected>>>();
931
- });
932
-
933
- test("adds system fields to each member of a union table", () => {
934
- const doc = docValidator("results", unionSchema.tables.results);
935
- const systemFields = {
936
- _id: v.id("results"),
937
- _creationTime: v.number(),
938
- };
939
- const expected = v.union(
940
- v.object({
941
- ...systemFields,
942
- kind: v.literal("error"),
943
- message: v.string(),
944
- }),
945
- v.object({
946
- ...systemFields,
947
- kind: v.literal("success"),
948
- value: v.number(),
949
- }),
950
- );
951
- expect(doc.json).toEqual(expected.json);
952
- assert<Equals<Infer<typeof doc>, Infer<typeof expected>>>();
953
- // The members stay individually typed, so they can be narrowed.
954
- assert<
955
- Equals<
956
- Infer<(typeof doc.members)[0]>,
957
- Infer<(typeof expected.members)[0]>
958
- >
959
- >();
960
- });
961
-
962
- test("passes through v.any()", () => {
963
- const anySchema = defineSchema({ anything: defineTable(v.any()) });
964
- const doc = docValidator("anything", anySchema.tables.anything);
965
- expect(doc.json).toEqual(v.any().json);
966
- });
967
-
968
- test("rejects a table whose documents are not objects", () => {
969
- const table = defineTable(v.array(v.string()) as any);
970
- expect(() => docValidator("bad", table)).toThrow(
971
- 'Invalid validator for table "bad"',
972
- );
973
- });
974
- });
975
-
976
- describe("SchemaDefinition.doc/.id", () => {
977
- const schema = defineSchema({
978
- messages: defineTable({ body: v.string() }),
979
- users: defineTable({ name: v.string() }),
980
- });
981
-
982
- test("doc matches docValidator", () => {
983
- const actual = schema.doc("messages");
984
- const expected = docValidator("messages", schema.tables.messages);
985
- expect(actual.json).toEqual(expected.json);
986
- assert<Equals<typeof actual, typeof expected>>();
987
- });
988
-
989
- test("id is typed to the table", () => {
990
- const actual = schema.id("users");
991
- const expected = v.id("users");
992
- expect(actual.json).toEqual(expected.json);
993
- assert<Equals<typeof actual, typeof expected>>();
994
- });
995
-
996
- test("only accepts tables in the schema", () => {
997
- // @ts-expect-error "nonexistent" is not a table in the schema.
998
- expect(() => schema.doc("nonexistent")).toThrow("is not in this schema");
999
- // @ts-expect-error "nonexistent" is not a table in the schema.
1000
- expect(() => schema.id("nonexistent")).toThrow("is not in this schema");
1001
- });
1002
- });
1003
-
1004
- describe("GenericSchema assignability", () => {
1005
- test("DataModelFromSchemaDefinition<GenericSchema> extends GenericDataModel", () => {
1006
- type GenericDM = DataModelFromSchemaDefinition<
1007
- SchemaDefinition<GenericSchema, boolean>
1008
- >;
1009
- type _check = GenericDM extends GenericDataModel ? true : false;
1010
- assert<Equals<_check, true>>();
1011
- });
1012
-
1013
- test("a specific schema’s DataModel extends GenericDataModel", () => {
1014
- const specificSchema = defineSchema({
1015
- users: defineTable({ name: v.string() }).index("by_name", ["name"]),
1016
- });
1017
- type SpecificDM = DataModelFromSchemaDefinition<typeof specificSchema>;
1018
-
1019
- // This is the key assignability check: specific DataModels must extend
1020
- // GenericDataModel so that generic code can accept any schema.
1021
- type _check = SpecificDM extends GenericDataModel ? true : false;
1022
- assert<Equals<_check, true>>();
1023
- });
1024
-
1025
- test("SchemaDefinition<SpecificSchema> extends SchemaDefinition<GenericSchema, boolean>", () => {
1026
- const specificSchema = defineSchema({
1027
- messages: defineTable({ body: v.string() }),
1028
- });
1029
- type SpecificSD = typeof specificSchema;
1030
- type GenericSD = SchemaDefinition<GenericSchema, boolean>;
1031
-
1032
- type _check = SpecificSD extends GenericSD ? true : false;
1033
- assert<Equals<_check, true>>();
1034
- });
1035
-
1036
- test("specific DM from boolean-strict schema extends generic DM", () => {
1037
- // This mirrors the convexTest() return type: Schema is specific, but
1038
- // StrictTableNameTypes is widened to boolean.
1039
- const specificSchema = defineSchema({
1040
- users: defineTable({ name: v.string() }).index("by_name", ["name"]),
1041
- });
1042
- type SpecificDM = DataModelFromSchemaDefinition<
1043
- SchemaDefinition<(typeof specificSchema)["tables"], boolean>
1044
- >;
1045
- type GenericDM = DataModelFromSchemaDefinition<
1046
- SchemaDefinition<GenericSchema, boolean>
1047
- >;
1048
-
1049
- // The specific DM must extend the generic DM for TestConvex covariance.
1050
- type _check = SpecificDM extends GenericDM ? true : false;
1051
- assert<Equals<_check, true>>();
1052
- });
1053
-
1054
- test("AnyDataModel exposes system indexes", () => {
1055
- // AnyDataModel is used as the DataModel when no schema is defined.
1056
- // Verify that system indexes (by_id, by_creation_time) are available,
1057
- // since every table always has them.
1058
- type AnyTable = NamedTableInfo<AnyDataModel, string>;
1059
- type AnyIndexNames = IndexNames<AnyTable>;
1060
- type _check = "by_id" | "by_creation_time" extends AnyIndexNames
1061
- ? true
1062
- : false;
1063
- assert<Equals<_check, true>>();
1064
- });
1065
-
1066
- // SpecificDM extends GenericDM because:
1067
- // 1. GenericSchema uses TableDefinition defaults (Validator<any,any,any>)
1068
- // producing document: any and fieldPaths: any
1069
- // 2. AnyDataModel includes SystemIndexes, so the loose variant's index
1070
- // signature satisfies GenericDM's SystemIndexes requirement
1071
- });
1072
-
1073
- test("defineTable fails if it can’t export the validator", () => {
1074
- const table = defineTable(
1075
- // @ts-expect-error
1076
- { ...v.object({}) }, // This will clone `isConvexValidator` but not the `json` getter used by `export`
1077
- );
1078
- expect(() => table.export()).toThrow(
1079
- "Invalid validator: please make sure that the parameter of `defineTable` is valid (see https://docs.convex.dev/database/schemas)",
1080
- );
1081
- });