convex 1.45.0 → 1.46.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 (319) hide show
  1. package/CHANGELOG.md +48 -6
  2. package/dist/browser.bundle.js +1 -1
  3. package/dist/browser.bundle.js.map +2 -2
  4. package/dist/cjs/browser/http_client.js.map +2 -2
  5. package/dist/cjs/browser/query_options.js.map +2 -2
  6. package/dist/cjs/browser/simple_client.js.map +2 -2
  7. package/dist/cjs/browser/sync/optimistic_updates.js.map +1 -1
  8. package/dist/cjs/browser/sync/optimistic_updates_impl.js.map +2 -2
  9. package/dist/cjs/cli/codegen.js +2 -0
  10. package/dist/cjs/cli/codegen.js.map +2 -2
  11. package/dist/cjs/cli/deploy.js +1 -0
  12. package/dist/cjs/cli/deploy.js.map +2 -2
  13. package/dist/cjs/cli/docs.js +3 -36
  14. package/dist/cjs/cli/docs.js.map +2 -2
  15. package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js +101 -60
  16. package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
  17. package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js +107 -0
  18. package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js.map +7 -0
  19. package/dist/cjs/cli/lib/codegen.js.map +2 -2
  20. package/dist/cjs/cli/lib/components.js +12 -0
  21. package/dist/cjs/cli/lib/components.js.map +2 -2
  22. package/dist/cjs/cli/lib/deploy2.js +29 -2
  23. package/dist/cjs/cli/lib/deploy2.js.map +2 -2
  24. package/dist/cjs/cli/lib/deployApi/evaluateSchema.js +73 -0
  25. package/dist/cjs/cli/lib/deployApi/evaluateSchema.js.map +7 -0
  26. package/dist/cjs/cli/lib/deployApi/finishPush.js +1 -0
  27. package/dist/cjs/cli/lib/deployApi/finishPush.js.map +2 -2
  28. package/dist/cjs/cli/lib/deployApi/startPush.js +1 -1
  29. package/dist/cjs/cli/lib/deployApi/startPush.js.map +2 -2
  30. package/dist/cjs/cli/lib/dev.js +1 -0
  31. package/dist/cjs/cli/lib/dev.js.map +2 -2
  32. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  33. package/dist/cjs/cli/lib/localDeployment/run.js +30 -1
  34. package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
  35. package/dist/cjs/cli/lib/localDeployment/upgrade.js +6 -5
  36. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
  37. package/dist/cjs/cli/lib/localDeployment/utils.js +5 -1
  38. package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
  39. package/dist/cjs/cli/lib/run.js +1 -0
  40. package/dist/cjs/cli/lib/run.js.map +2 -2
  41. package/dist/cjs/cli/lib/utils/utils.js +36 -29
  42. package/dist/cjs/cli/lib/utils/utils.js.map +2 -2
  43. package/dist/cjs/index.js +1 -1
  44. package/dist/cjs/index.js.map +1 -1
  45. package/dist/cjs/nextjs/index.js.map +2 -2
  46. package/dist/cjs/react/client.js.map +2 -2
  47. package/dist/cjs/react/hydration.js.map +2 -2
  48. package/dist/cjs/react/queries_observer.js.map +2 -2
  49. package/dist/cjs/react/use_paginated_query2.js.map +2 -2
  50. package/dist/cjs/react/use_queries.js.map +2 -2
  51. package/dist/cjs/server/api.js.map +2 -2
  52. package/dist/cjs/server/components/index.js.map +2 -2
  53. package/dist/cjs/server/cron.js +10 -10
  54. package/dist/cjs/server/cron.js.map +2 -2
  55. package/dist/cjs/server/impl/actions_impl.js.map +2 -2
  56. package/dist/cjs/server/impl/meta_impl.js +8 -2
  57. package/dist/cjs/server/impl/meta_impl.js.map +2 -2
  58. package/dist/cjs/server/impl/scheduler_impl.js.map +2 -2
  59. package/dist/cjs/server/index.js.map +2 -2
  60. package/dist/cjs/server/meta.js.map +1 -1
  61. package/dist/cjs/server/registration.js.map +1 -1
  62. package/dist/cjs/server/scheduler.js.map +1 -1
  63. package/dist/cjs/server/schema.js +50 -3
  64. package/dist/cjs/server/schema.js.map +2 -2
  65. package/dist/cjs/values/validator.js +1 -1
  66. package/dist/cjs/values/validator.js.map +2 -2
  67. package/dist/cjs/values/validators.js +81 -25
  68. package/dist/cjs/values/validators.js.map +2 -2
  69. package/dist/cjs-types/browser/http_client.d.ts +5 -5
  70. package/dist/cjs-types/browser/http_client.d.ts.map +1 -1
  71. package/dist/cjs-types/browser/query_options.d.ts +2 -2
  72. package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
  73. package/dist/cjs-types/browser/simple_client.d.ts +6 -6
  74. package/dist/cjs-types/browser/simple_client.d.ts.map +1 -1
  75. package/dist/cjs-types/browser/sync/optimistic_updates.d.ts +4 -4
  76. package/dist/cjs-types/browser/sync/optimistic_updates.d.ts.map +1 -1
  77. package/dist/cjs-types/browser/sync/optimistic_updates_impl.d.ts.map +1 -1
  78. package/dist/cjs-types/cli/codegen.d.ts.map +1 -1
  79. package/dist/cjs-types/cli/docs.d.ts.map +1 -1
  80. package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts +26 -5
  81. package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
  82. package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts +14 -0
  83. package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -0
  84. package/dist/cjs-types/cli/lib/codegen.d.ts +1 -0
  85. package/dist/cjs-types/cli/lib/codegen.d.ts.map +1 -1
  86. package/dist/cjs-types/cli/lib/components.d.ts +1 -0
  87. package/dist/cjs-types/cli/lib/components.d.ts.map +1 -1
  88. package/dist/cjs-types/cli/lib/deploy2.d.ts +6 -0
  89. package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
  90. package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts +453 -0
  91. package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -0
  92. package/dist/cjs-types/cli/lib/deployApi/finishPush.d.ts +1 -2
  93. package/dist/cjs-types/cli/lib/deployApi/finishPush.d.ts.map +1 -1
  94. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  95. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  96. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  97. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +2 -0
  98. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  99. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  100. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +1 -0
  101. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  102. package/dist/cjs-types/cli/lib/run.d.ts.map +1 -1
  103. package/dist/cjs-types/cli/lib/utils/utils.d.ts +5 -5
  104. package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
  105. package/dist/cjs-types/index.d.ts +1 -1
  106. package/dist/cjs-types/nextjs/index.d.ts +6 -6
  107. package/dist/cjs-types/nextjs/index.d.ts.map +1 -1
  108. package/dist/cjs-types/react/client.d.ts +15 -15
  109. package/dist/cjs-types/react/client.d.ts.map +1 -1
  110. package/dist/cjs-types/react/hydration.d.ts +3 -3
  111. package/dist/cjs-types/react/hydration.d.ts.map +1 -1
  112. package/dist/cjs-types/react/queries_observer.d.ts +9 -9
  113. package/dist/cjs-types/react/queries_observer.d.ts.map +1 -1
  114. package/dist/cjs-types/react/use_paginated_query2.d.ts.map +1 -1
  115. package/dist/cjs-types/react/use_queries.d.ts +14 -6
  116. package/dist/cjs-types/react/use_queries.d.ts.map +1 -1
  117. package/dist/cjs-types/server/api.d.ts +157 -7
  118. package/dist/cjs-types/server/api.d.ts.map +1 -1
  119. package/dist/cjs-types/server/components/index.d.ts +2 -2
  120. package/dist/cjs-types/server/components/index.d.ts.map +1 -1
  121. package/dist/cjs-types/server/cron.d.ts +21 -20
  122. package/dist/cjs-types/server/cron.d.ts.map +1 -1
  123. package/dist/cjs-types/server/impl/actions_impl.d.ts +4 -4
  124. package/dist/cjs-types/server/impl/actions_impl.d.ts.map +1 -1
  125. package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -1
  126. package/dist/cjs-types/server/impl/scheduler_impl.d.ts.map +1 -1
  127. package/dist/cjs-types/server/index.d.ts +1 -1
  128. package/dist/cjs-types/server/index.d.ts.map +1 -1
  129. package/dist/cjs-types/server/meta.d.ts.map +1 -1
  130. package/dist/cjs-types/server/registration.d.ts +7 -7
  131. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  132. package/dist/cjs-types/server/scheduler.d.ts +9 -7
  133. package/dist/cjs-types/server/scheduler.d.ts.map +1 -1
  134. package/dist/cjs-types/server/schema.d.ts +1 -0
  135. package/dist/cjs-types/server/schema.d.ts.map +1 -1
  136. package/dist/cjs-types/values/validator.d.ts.map +1 -1
  137. package/dist/cjs-types/values/validators.d.ts +30 -0
  138. package/dist/cjs-types/values/validators.d.ts.map +1 -1
  139. package/dist/cli.bundle.cjs +347 -133
  140. package/dist/cli.bundle.cjs.map +4 -4
  141. package/dist/esm/browser/http_client.js.map +2 -2
  142. package/dist/esm/browser/query_options.js.map +2 -2
  143. package/dist/esm/browser/simple_client.js.map +2 -2
  144. package/dist/esm/browser/sync/optimistic_updates_impl.js.map +2 -2
  145. package/dist/esm/cli/codegen.js +2 -0
  146. package/dist/esm/cli/codegen.js.map +2 -2
  147. package/dist/esm/cli/deploy.js +1 -0
  148. package/dist/esm/cli/deploy.js.map +2 -2
  149. package/dist/esm/cli/docs.js +3 -43
  150. package/dist/esm/cli/docs.js.map +2 -2
  151. package/dist/esm/cli/lib/checkForLargeIndexDeletion.js +100 -60
  152. package/dist/esm/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
  153. package/dist/esm/cli/lib/checkForSlowSchemaValidation.js +85 -0
  154. package/dist/esm/cli/lib/checkForSlowSchemaValidation.js.map +7 -0
  155. package/dist/esm/cli/lib/codegen.js.map +2 -2
  156. package/dist/esm/cli/lib/components.js +12 -0
  157. package/dist/esm/cli/lib/components.js.map +2 -2
  158. package/dist/esm/cli/lib/deploy2.js +30 -2
  159. package/dist/esm/cli/lib/deploy2.js.map +2 -2
  160. package/dist/esm/cli/lib/deployApi/evaluateSchema.js +46 -0
  161. package/dist/esm/cli/lib/deployApi/evaluateSchema.js.map +7 -0
  162. package/dist/esm/cli/lib/deployApi/finishPush.js +1 -1
  163. package/dist/esm/cli/lib/deployApi/finishPush.js.map +2 -2
  164. package/dist/esm/cli/lib/deployApi/startPush.js +1 -1
  165. package/dist/esm/cli/lib/deployApi/startPush.js.map +2 -2
  166. package/dist/esm/cli/lib/dev.js +1 -0
  167. package/dist/esm/cli/lib/dev.js.map +2 -2
  168. package/dist/esm/cli/lib/localDeployment/run.js +30 -2
  169. package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
  170. package/dist/esm/cli/lib/localDeployment/upgrade.js +4 -3
  171. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  172. package/dist/esm/cli/lib/localDeployment/utils.js +3 -0
  173. package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
  174. package/dist/esm/cli/lib/run.js +1 -0
  175. package/dist/esm/cli/lib/run.js.map +2 -2
  176. package/dist/esm/cli/lib/utils/utils.js +36 -30
  177. package/dist/esm/cli/lib/utils/utils.js.map +2 -2
  178. package/dist/esm/index.js +1 -1
  179. package/dist/esm/index.js.map +1 -1
  180. package/dist/esm/nextjs/index.js.map +2 -2
  181. package/dist/esm/react/client.js.map +2 -2
  182. package/dist/esm/react/hydration.js +3 -1
  183. package/dist/esm/react/hydration.js.map +2 -2
  184. package/dist/esm/react/queries_observer.js +3 -1
  185. package/dist/esm/react/queries_observer.js.map +2 -2
  186. package/dist/esm/react/use_paginated_query2.js +3 -1
  187. package/dist/esm/react/use_paginated_query2.js.map +2 -2
  188. package/dist/esm/react/use_queries.js.map +2 -2
  189. package/dist/esm/server/api.js.map +2 -2
  190. package/dist/esm/server/components/index.js.map +2 -2
  191. package/dist/esm/server/cron.js +13 -11
  192. package/dist/esm/server/cron.js.map +2 -2
  193. package/dist/esm/server/impl/actions_impl.js.map +2 -2
  194. package/dist/esm/server/impl/meta_impl.js +9 -3
  195. package/dist/esm/server/impl/meta_impl.js.map +2 -2
  196. package/dist/esm/server/impl/scheduler_impl.js.map +2 -2
  197. package/dist/esm/server/index.js.map +2 -2
  198. package/dist/esm/server/schema.js +50 -3
  199. package/dist/esm/server/schema.js.map +2 -2
  200. package/dist/esm/values/validator.js +1 -1
  201. package/dist/esm/values/validator.js.map +2 -2
  202. package/dist/esm/values/validators.js +81 -25
  203. package/dist/esm/values/validators.js.map +2 -2
  204. package/dist/esm-types/browser/http_client.d.ts +5 -5
  205. package/dist/esm-types/browser/http_client.d.ts.map +1 -1
  206. package/dist/esm-types/browser/query_options.d.ts +2 -2
  207. package/dist/esm-types/browser/query_options.d.ts.map +1 -1
  208. package/dist/esm-types/browser/simple_client.d.ts +6 -6
  209. package/dist/esm-types/browser/simple_client.d.ts.map +1 -1
  210. package/dist/esm-types/browser/sync/optimistic_updates.d.ts +4 -4
  211. package/dist/esm-types/browser/sync/optimistic_updates.d.ts.map +1 -1
  212. package/dist/esm-types/browser/sync/optimistic_updates_impl.d.ts.map +1 -1
  213. package/dist/esm-types/cli/codegen.d.ts.map +1 -1
  214. package/dist/esm-types/cli/docs.d.ts.map +1 -1
  215. package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts +26 -5
  216. package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
  217. package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts +14 -0
  218. package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -0
  219. package/dist/esm-types/cli/lib/codegen.d.ts +1 -0
  220. package/dist/esm-types/cli/lib/codegen.d.ts.map +1 -1
  221. package/dist/esm-types/cli/lib/components.d.ts +1 -0
  222. package/dist/esm-types/cli/lib/components.d.ts.map +1 -1
  223. package/dist/esm-types/cli/lib/deploy2.d.ts +6 -0
  224. package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
  225. package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts +453 -0
  226. package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -0
  227. package/dist/esm-types/cli/lib/deployApi/finishPush.d.ts +1 -2
  228. package/dist/esm-types/cli/lib/deployApi/finishPush.d.ts.map +1 -1
  229. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  230. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
  231. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  232. package/dist/esm-types/cli/lib/localDeployment/run.d.ts +2 -0
  233. package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  234. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  235. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +1 -0
  236. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  237. package/dist/esm-types/cli/lib/run.d.ts.map +1 -1
  238. package/dist/esm-types/cli/lib/utils/utils.d.ts +5 -5
  239. package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
  240. package/dist/esm-types/index.d.ts +1 -1
  241. package/dist/esm-types/nextjs/index.d.ts +6 -6
  242. package/dist/esm-types/nextjs/index.d.ts.map +1 -1
  243. package/dist/esm-types/react/client.d.ts +15 -15
  244. package/dist/esm-types/react/client.d.ts.map +1 -1
  245. package/dist/esm-types/react/hydration.d.ts +3 -3
  246. package/dist/esm-types/react/hydration.d.ts.map +1 -1
  247. package/dist/esm-types/react/queries_observer.d.ts +9 -9
  248. package/dist/esm-types/react/queries_observer.d.ts.map +1 -1
  249. package/dist/esm-types/react/use_paginated_query2.d.ts.map +1 -1
  250. package/dist/esm-types/react/use_queries.d.ts +14 -6
  251. package/dist/esm-types/react/use_queries.d.ts.map +1 -1
  252. package/dist/esm-types/server/api.d.ts +157 -7
  253. package/dist/esm-types/server/api.d.ts.map +1 -1
  254. package/dist/esm-types/server/components/index.d.ts +2 -2
  255. package/dist/esm-types/server/components/index.d.ts.map +1 -1
  256. package/dist/esm-types/server/cron.d.ts +21 -20
  257. package/dist/esm-types/server/cron.d.ts.map +1 -1
  258. package/dist/esm-types/server/impl/actions_impl.d.ts +4 -4
  259. package/dist/esm-types/server/impl/actions_impl.d.ts.map +1 -1
  260. package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -1
  261. package/dist/esm-types/server/impl/scheduler_impl.d.ts.map +1 -1
  262. package/dist/esm-types/server/index.d.ts +1 -1
  263. package/dist/esm-types/server/index.d.ts.map +1 -1
  264. package/dist/esm-types/server/meta.d.ts.map +1 -1
  265. package/dist/esm-types/server/registration.d.ts +7 -7
  266. package/dist/esm-types/server/registration.d.ts.map +1 -1
  267. package/dist/esm-types/server/scheduler.d.ts +9 -7
  268. package/dist/esm-types/server/scheduler.d.ts.map +1 -1
  269. package/dist/esm-types/server/schema.d.ts +1 -0
  270. package/dist/esm-types/server/schema.d.ts.map +1 -1
  271. package/dist/esm-types/values/validator.d.ts.map +1 -1
  272. package/dist/esm-types/values/validators.d.ts +30 -0
  273. package/dist/esm-types/values/validators.d.ts.map +1 -1
  274. package/dist/react.bundle.js +1 -1
  275. package/dist/react.bundle.js.map +2 -2
  276. package/package.json +5 -5
  277. package/src/browser/http_client.ts +43 -10
  278. package/src/browser/query_options.ts +11 -5
  279. package/src/browser/simple_client.ts +35 -14
  280. package/src/browser/sync/optimistic_updates.ts +17 -4
  281. package/src/browser/sync/optimistic_updates_impl.ts +17 -4
  282. package/src/cli/codegen.ts +1 -0
  283. package/src/cli/deploy.ts +1 -0
  284. package/src/cli/docs.ts +3 -44
  285. package/src/cli/lib/checkForLargeIndexDeletion.ts +154 -82
  286. package/src/cli/lib/checkForSlowSchemaValidation.ts +130 -0
  287. package/src/cli/lib/codegen.ts +1 -0
  288. package/src/cli/lib/components.ts +17 -0
  289. package/src/cli/lib/deploy2.ts +56 -1
  290. package/src/cli/lib/deployApi/evaluateSchema.ts +62 -0
  291. package/src/cli/lib/deployApi/finishPush.ts +1 -1
  292. package/src/cli/lib/deployApi/startPush.ts +1 -1
  293. package/src/cli/lib/dev.ts +1 -0
  294. package/src/cli/lib/generatedFunctionLogsApi.ts +2 -0
  295. package/src/cli/lib/localDeployment/run.ts +44 -2
  296. package/src/cli/lib/localDeployment/upgrade.ts +4 -6
  297. package/src/cli/lib/localDeployment/utils.ts +6 -0
  298. package/src/cli/lib/run.ts +1 -0
  299. package/src/cli/lib/utils/utils.ts +63 -35
  300. package/src/index.ts +1 -1
  301. package/src/nextjs/index.ts +19 -8
  302. package/src/react/client.ts +73 -30
  303. package/src/react/hydration.tsx +14 -6
  304. package/src/react/queries_observer.ts +19 -16
  305. package/src/react/use_paginated_query2.ts +10 -6
  306. package/src/react/use_queries.ts +23 -7
  307. package/src/server/api.ts +220 -14
  308. package/src/server/components/index.ts +4 -6
  309. package/src/server/cron.ts +34 -24
  310. package/src/server/impl/actions_impl.ts +13 -4
  311. package/src/server/impl/meta_impl.ts +8 -1
  312. package/src/server/impl/scheduler_impl.ts +13 -6
  313. package/src/server/index.ts +1 -0
  314. package/src/server/meta.ts +25 -0
  315. package/src/server/registration.ts +28 -7
  316. package/src/server/scheduler.ts +22 -7
  317. package/src/server/schema.ts +55 -0
  318. package/src/values/validator.ts +3 -1
  319. package/src/values/validators.ts +84 -26
@@ -15222,7 +15222,7 @@ var require_context = __commonJS({
15222
15222
  };
15223
15223
  });
15224
15224
  var nodeContextIntegration = core.defineIntegration(_nodeContextIntegration);
15225
- var Context12 = core.convertIntegrationFnToClass(INTEGRATION_NAME, nodeContextIntegration);
15225
+ var Context11 = core.convertIntegrationFnToClass(INTEGRATION_NAME, nodeContextIntegration);
15226
15226
  function _updateContext(contexts) {
15227
15227
  if (_optionalChain([contexts, "optionalAccess", (_11) => _11.app, "optionalAccess", (_12) => _12.app_memory])) {
15228
15228
  contexts.app.app_memory = process.memoryUsage().rss;
@@ -15432,7 +15432,7 @@ var require_context = __commonJS({
15432
15432
  return void 0;
15433
15433
  }
15434
15434
  }
15435
- exports2.Context = Context12;
15435
+ exports2.Context = Context11;
15436
15436
  exports2.getDeviceContext = getDeviceContext;
15437
15437
  exports2.nodeContextIntegration = nodeContextIntegration;
15438
15438
  exports2.readDirAsync = readDirAsync;
@@ -47456,7 +47456,7 @@ var version;
47456
47456
  var init_index = __esm({
47457
47457
  "src/index.ts"() {
47458
47458
  "use strict";
47459
- version = "1.45.0";
47459
+ version = "1.46.0";
47460
47460
  }
47461
47461
  });
47462
47462
 
@@ -50783,6 +50783,9 @@ function printLocalDeploymentWelcomeMessage() {
50783
50783
  )
50784
50784
  );
50785
50785
  }
50786
+ function releaseDate(version4) {
50787
+ return /^precompiled-(\d{4}-\d{2}-\d{2})-/.exec(version4)?.[1] ?? null;
50788
+ }
50786
50789
  var LOCAL_BACKEND_INSTANCE_SECRET;
50787
50790
  var init_utils2 = __esm({
50788
50791
  "src/cli/lib/localDeployment/utils.ts"() {
@@ -53834,6 +53837,16 @@ var init_download = __esm({
53834
53837
  });
53835
53838
 
53836
53839
  // src/cli/lib/localDeployment/run.ts
53840
+ function _backendSupportsControlPlaneAuth(version4) {
53841
+ if (version4 === FIRST_CONTROL_PLANE_AUTH_BACKEND_VERSION) {
53842
+ return true;
53843
+ }
53844
+ const backendDate = releaseDate(version4);
53845
+ const firstSupportedDate = releaseDate(
53846
+ FIRST_CONTROL_PLANE_AUTH_BACKEND_VERSION
53847
+ );
53848
+ return backendDate !== null && firstSupportedDate !== null && backendDate > firstSupportedDate;
53849
+ }
53837
53850
  async function parseStartupTimeoutSecs(ctx) {
53838
53851
  const raw = process.env.CONVEX_LOCAL_BACKEND_STARTUP_TIMEOUT_SECS;
53839
53852
  if (raw === void 0) {
@@ -53921,7 +53934,22 @@ async function runLocalBackend(ctx, args) {
53921
53934
  errForSentry: new LocalDeploymentError(message)
53922
53935
  });
53923
53936
  }
53924
- const commandStr = `${args.binaryPath} ${commandArgs.join(" ")}`;
53937
+ const supportsControlPlane = _backendSupportsControlPlaneAuth(
53938
+ args.backendVersion
53939
+ );
53940
+ if (supportsControlPlane && provisionHost !== productionProvisionHost) {
53941
+ commandArgs.push("--control-plane-url", provisionHost);
53942
+ }
53943
+ const auth2 = ctx.bigBrainAuth();
53944
+ if (supportsControlPlane && args.deploymentKind === "local" && auth2?.kind === "accessToken") {
53945
+ commandArgs.push("--control-plane-access-token", auth2.accessToken);
53946
+ }
53947
+ const displayArgs = commandArgs.map(
53948
+ (arg, index) => index > 0 && ["--instance-secret", "--control-plane-access-token"].includes(
53949
+ commandArgs[index - 1]
53950
+ ) ? "[REDACTED]" : arg
53951
+ );
53952
+ const commandStr = `${args.binaryPath} ${displayArgs.join(" ")}`;
53925
53953
  logVerbose(`Starting local backend: \`${commandStr}\``);
53926
53954
  const p = import_child_process2.default.spawn(args.binaryPath, commandArgs, {
53927
53955
  stdio: "ignore",
@@ -54125,6 +54153,7 @@ Run \`npx convex dev\` first.`
54125
54153
  const instanceSecret = config3.instanceSecret ?? LOCAL_BACKEND_INSTANCE_SECRET;
54126
54154
  const { cleanupHandle } = await runLocalBackend(ctx, {
54127
54155
  binaryPath,
54156
+ backendVersion: config3.backendVersion,
54128
54157
  ports: config3.ports,
54129
54158
  deploymentKind,
54130
54159
  deploymentName: args.deploymentName,
@@ -54140,7 +54169,7 @@ Run \`npx convex dev\` first.`
54140
54169
  }
54141
54170
  };
54142
54171
  }
54143
- var import_path6, import_child_process2, import_crypto3, DEFAULT_STARTUP_TIMEOUT_SECS;
54172
+ var import_path6, import_child_process2, import_crypto3, DEFAULT_STARTUP_TIMEOUT_SECS, FIRST_CONTROL_PLANE_AUTH_BACKEND_VERSION;
54144
54173
  var init_run = __esm({
54145
54174
  "src/cli/lib/localDeployment/run.ts"() {
54146
54175
  "use strict";
@@ -54154,7 +54183,9 @@ var init_run = __esm({
54154
54183
  import_crypto3 = require("crypto");
54155
54184
  init_errors3();
54156
54185
  init_utils2();
54186
+ init_config();
54157
54187
  DEFAULT_STARTUP_TIMEOUT_SECS = 30;
54188
+ FIRST_CONTROL_PLANE_AUTH_BACKEND_VERSION = "precompiled-2026-09-15-4e9b83a";
54158
54189
  }
54159
54190
  });
54160
54191
 
@@ -64238,23 +64269,19 @@ function waitUntilCalled() {
64238
64269
  return [waitPromise, () => onCalled(null)];
64239
64270
  }
64240
64271
  function formatSize(n) {
64241
- if (n === 0) {
64242
- return "0 bytes";
64272
+ let value = n;
64273
+ let unitIndex = 0;
64274
+ while (value >= 1024 && unitIndex < BYTE_UNITS.length - 1) {
64275
+ value /= 1024;
64276
+ unitIndex++;
64243
64277
  }
64244
- for (const [unitSize, unitName] of BYTE_UNITS) {
64245
- if (n < unitSize) {
64246
- continue;
64247
- }
64248
- if (n % unitSize === 0) {
64249
- return `${n / unitSize} ${unitName}`;
64250
- }
64251
- if (n * 10 % unitSize === 0) {
64252
- const whole = Math.floor(n / unitSize);
64253
- const frac = Math.floor(n * 10 / unitSize) % 10;
64254
- return `${whole}.${frac} ${unitName}`;
64255
- }
64278
+ const roundedValue = Number(value.toFixed(1));
64279
+ if (roundedValue >= 1024 && unitIndex < BYTE_UNITS.length - 1) {
64280
+ value /= 1024;
64281
+ unitIndex++;
64256
64282
  }
64257
- return `${n} bytes`;
64283
+ const formatted = value.toFixed(1).replace(/\.0$/, "");
64284
+ return `${formatted} ${BYTE_UNITS[unitIndex]}`;
64258
64285
  }
64259
64286
  function formatDuration(ms) {
64260
64287
  const twoDigits = (n, unit) => `${n.toLocaleString("en-US", { maximumFractionDigits: 2 })}${unit}`;
@@ -64371,8 +64398,8 @@ function retryDelay(attempt, _error, _response) {
64371
64398
  const randomSum = delay * 0.2 * Math.random();
64372
64399
  return delay + randomSum;
64373
64400
  }
64374
- function deploymentFetchRetryOn(onError, method) {
64375
- const shouldRetry = function(_attempt, error3, response) {
64401
+ function deploymentFetchRetryOn(onError, method, maxRetries = MAX_RETRIES, shouldRetryOverride) {
64402
+ const defaultShouldRetry = function(_attempt, error3, response) {
64376
64403
  if (error3 !== null) {
64377
64404
  return { kind: "retry", error: error3 };
64378
64405
  }
@@ -64418,12 +64445,18 @@ function deploymentFetchRetryOn(onError, method) {
64418
64445
  }
64419
64446
  return { kind: "stop" };
64420
64447
  };
64448
+ const shouldRetry = shouldRetryOverride ? function(_attempt, error3, response) {
64449
+ return shouldRetryOverride(error3, response) ? {
64450
+ kind: "retry",
64451
+ error: error3 ?? `Received response with status ${response?.status}`
64452
+ } : { kind: "stop" };
64453
+ } : defaultShouldRetry;
64421
64454
  return function(attempt, error3, response) {
64422
64455
  const result = shouldRetry(attempt, error3, response);
64423
64456
  if (result.kind === "retry") {
64424
64457
  onError?.(result.error, attempt);
64425
64458
  }
64426
- if (attempt >= MAX_RETRIES) {
64459
+ if (attempt >= maxRetries) {
64427
64460
  return false;
64428
64461
  }
64429
64462
  return result.kind === "retry";
@@ -64452,13 +64485,19 @@ function bareDeploymentFetch(_ctx, options) {
64452
64485
  };
64453
64486
  }
64454
64487
  function deploymentFetch(_ctx, options) {
64455
- const { deploymentUrl, adminKey, onError } = options;
64488
+ const {
64489
+ deploymentUrl,
64490
+ adminKey,
64491
+ onError,
64492
+ maxRetries = MAX_RETRIES,
64493
+ shouldRetry
64494
+ } = options;
64456
64495
  const onErrorWithAttempt = (err, attempt) => {
64457
64496
  onError?.(err);
64458
64497
  if (attempt >= RETRY_LOG_THRESHOLD) {
64459
64498
  logMessage(
64460
64499
  chalkStderr.gray(
64461
- `Retrying request (attempt ${attempt}/${MAX_RETRIES})...`
64500
+ `Retrying request (attempt ${attempt}/${maxRetries})...`
64462
64501
  )
64463
64502
  );
64464
64503
  }
@@ -64477,7 +64516,12 @@ function deploymentFetch(_ctx, options) {
64477
64516
  }
64478
64517
  const func = throwingFetch(url2, {
64479
64518
  retryDelay,
64480
- retryOn: deploymentFetchRetryOn(onErrorWithAttempt, options2?.method),
64519
+ retryOn: deploymentFetchRetryOn(
64520
+ onErrorWithAttempt,
64521
+ options2?.method,
64522
+ maxRetries,
64523
+ shouldRetry
64524
+ ),
64481
64525
  ...options2,
64482
64526
  headers
64483
64527
  });
@@ -64611,14 +64655,7 @@ ${advice}`;
64611
64655
  PLATFORM_MANAGEMENT_API_URL,
64612
64656
  bigBrainFetch
64613
64657
  );
64614
- BYTE_UNITS = [
64615
- [1 << 30, "GiB"],
64616
- [1e9, "GB"],
64617
- [1 << 20, "MiB"],
64618
- [1e6, "MB"],
64619
- [1 << 10, "KiB"],
64620
- [1e3, "KB"]
64621
- ];
64658
+ BYTE_UNITS = ["bytes", "KiB", "MiB", "GiB", "TiB", "PiB"];
64622
64659
  IDEMPOTENT_METHODS = ["GET", "HEAD", "PUT", "DELETE", "OPTIONS", "TRACE"];
64623
64660
  }
64624
64661
  });
@@ -110146,6 +110183,7 @@ init_run();
110146
110183
  init_log();
110147
110184
  init_filePaths();
110148
110185
  init_run();
110186
+ init_utils2();
110149
110187
  init_prompts();
110150
110188
  init_download();
110151
110189
 
@@ -110236,6 +110274,7 @@ async function handlePotentialUpgradeAndStart(ctx, args) {
110236
110274
  );
110237
110275
  const { cleanupHandle: cleanupHandle2 } = await runLocalBackend(ctx, {
110238
110276
  binaryPath: args.newBinaryPath,
110277
+ backendVersion: args.newVersion,
110239
110278
  deploymentKind: args.deploymentKind,
110240
110279
  deploymentName: args.deploymentName,
110241
110280
  ports: args.ports,
@@ -110265,6 +110304,7 @@ async function handlePotentialUpgradeAndStart(ctx, args) {
110265
110304
  });
110266
110305
  const { cleanupHandle: cleanupHandle2 } = await runLocalBackend(ctx, {
110267
110306
  binaryPath: oldBinaryPath,
110307
+ backendVersion: args.oldVersion,
110268
110308
  ports: args.ports,
110269
110309
  deploymentKind: args.deploymentKind,
110270
110310
  deploymentName: args.deploymentName,
@@ -110296,6 +110336,7 @@ async function handleUpgrade(ctx, args) {
110296
110336
  logVerbose(`Running backend on new version ${args.newVersion}`);
110297
110337
  const { cleanupHandle } = await runLocalBackend(ctx, {
110298
110338
  binaryPath: args.newBinaryPath,
110339
+ backendVersion: args.newVersion,
110299
110340
  ports: args.ports,
110300
110341
  deploymentKind: args.deploymentKind,
110301
110342
  deploymentName: args.deploymentName,
@@ -110319,9 +110360,6 @@ function _isDowngrade(oldVersion, newVersion) {
110319
110360
  const newDate = releaseDate(newVersion);
110320
110361
  return oldDate !== null && newDate !== null && newDate < oldDate;
110321
110362
  }
110322
- function releaseDate(version4) {
110323
- return /^precompiled-(\d{4}-\d{2}-\d{2})-/.exec(version4)?.[1] ?? null;
110324
- }
110325
110363
 
110326
110364
  // src/cli/lib/localDeployment/localDeployment.ts
110327
110365
  init_errors3();
@@ -114593,7 +114631,7 @@ var startPushRequest = looseObject({
114593
114631
  var schemaChange = looseObject({
114594
114632
  allocatedComponentIds: external_exports.any(),
114595
114633
  schemaIds: external_exports.any(),
114596
- indexDiffs: external_exports.record(componentDefinitionPath, indexDiff).optional()
114634
+ indexDiffs: external_exports.record(componentPath, indexDiff).optional()
114597
114635
  });
114598
114636
  var startPushResponse = looseObject({
114599
114637
  environmentVariables: external_exports.record(external_exports.string(), external_exports.string()),
@@ -114631,6 +114669,49 @@ var schemaStatus = external_exports.union([
114631
114669
  })
114632
114670
  ]);
114633
114671
 
114672
+ // src/cli/lib/deployApi/evaluateSchema.ts
114673
+ init_zod();
114674
+ var tableValidationOutcome = external_exports.enum([
114675
+ "notValidated",
114676
+ "supersetOfEnforced",
114677
+ "supersetOfShape",
114678
+ "mustWalk"
114679
+ ]);
114680
+ var indexChangePrediction = external_exports.enum([
114681
+ "added",
114682
+ "identical",
114683
+ "enabled",
114684
+ "disabled",
114685
+ "dropped"
114686
+ ]);
114687
+ var tablePrediction = looseObject({
114688
+ name: external_exports.string(),
114689
+ outcome: tableValidationOutcome,
114690
+ numDocs: external_exports.number(),
114691
+ sizeBytes: external_exports.number()
114692
+ });
114693
+ var indexPrediction = external_exports.intersection(
114694
+ developerIndexConfig,
114695
+ looseObject({
114696
+ change: indexChangePrediction,
114697
+ needsBackfill: external_exports.boolean(),
114698
+ numDocs: external_exports.number()
114699
+ })
114700
+ );
114701
+ var componentSchemaPrediction = looseObject({
114702
+ definitionPath: external_exports.string(),
114703
+ schemaValidation: external_exports.boolean(),
114704
+ tables: external_exports.array(tablePrediction),
114705
+ indexes: external_exports.array(indexPrediction)
114706
+ });
114707
+ var evaluateSchemaResponse = looseObject({
114708
+ componentSchemaEvaluations: external_exports.record(
114709
+ componentPath,
114710
+ componentSchemaPrediction
114711
+ ),
114712
+ newComponentDefinitions: external_exports.array(componentDefinitionPath)
114713
+ });
114714
+
114634
114715
  // src/cli/lib/deploy2.ts
114635
114716
  init_source();
114636
114717
  var import_node_util9 = require("node:util");
@@ -115710,7 +115791,19 @@ async function evaluatePush(ctx, span, request, options) {
115710
115791
  );
115711
115792
  return evaluatePushResponse.parse(response);
115712
115793
  }
115713
- async function pushCode(ctx, span, request, options, endpoint) {
115794
+ async function evaluateSchema(ctx, span, request, options, bestEffort) {
115795
+ const response = await pushCode(
115796
+ ctx,
115797
+ span,
115798
+ request,
115799
+ options,
115800
+ "/api/deploy2/evaluate_schema",
115801
+ bestEffort
115802
+ );
115803
+ return evaluateSchemaResponse.parse(response);
115804
+ }
115805
+ var BEST_EFFORT_RETRIES = 5;
115806
+ async function pushCode(ctx, span, request, options, endpoint, bestEffort) {
115714
115807
  const unchangedModuleCount = request.appDefinition?.unchangedModuleHashes?.length ?? 0;
115715
115808
  const changedModuleCount = request.appDefinition?.changedModules?.length ?? 0;
115716
115809
  const requestSummary = {
@@ -115730,7 +115823,16 @@ async function pushCode(ctx, span, request, options, endpoint) {
115730
115823
  const fetch2 = deploymentFetch(ctx, {
115731
115824
  deploymentUrl: options.url,
115732
115825
  adminKey: request.adminKey,
115733
- onError
115826
+ onError,
115827
+ // Best-effort callers tolerate failure, so retry only plausibly
115828
+ // transient conditions — network errors and 5xx responses (e.g. table
115829
+ // summaries still bootstrapping) — and fail fast on everything else,
115830
+ // like a 404 from a deployment whose backend doesn't yet expose the
115831
+ // endpoint.
115832
+ ...bestEffort ? {
115833
+ maxRetries: BEST_EFFORT_RETRIES,
115834
+ shouldRetry: (error3, response) => error3 !== null || response !== null && response.status >= 500
115835
+ } : {}
115734
115836
  });
115735
115837
  try {
115736
115838
  const response = await fetch2(endpoint, {
@@ -115744,6 +115846,9 @@ async function pushCode(ctx, span, request, options, endpoint) {
115744
115846
  });
115745
115847
  return await response.json();
115746
115848
  } catch (error3) {
115849
+ if (bestEffort) {
115850
+ throw error3;
115851
+ }
115747
115852
  return await handlePushConfigError(
115748
115853
  ctx,
115749
115854
  error3,
@@ -115956,6 +116061,7 @@ async function deployToDeployment(ctx, credentials, options) {
115956
116061
  liveComponentSources: !!options.liveComponentSources,
115957
116062
  pushAllModules: !!options.pushAllModules,
115958
116063
  largeIndexDeletionCheck: options.allowDeletingLargeIndexes ? "has confirmation" : "ask for confirmation",
116064
+ warnOnSlowSchemaValidation: true,
115959
116065
  message: options.message
115960
116066
  };
115961
116067
  showSpinner(`Deploying to ${url2}...${options.dryRun ? " [dry run]" : ""}`);
@@ -119641,71 +119747,28 @@ async function checkForLargeIndexDeletion({
119641
119747
  askForConfirmation
119642
119748
  }) {
119643
119749
  changeSpinner("Verifying that the push isn\u2019t deleting large indexes...");
119644
- const { schemaChange: schemaChange2 } = await evaluatePush(ctx, span, request, options);
119645
- const indexDiffs = schemaChange2.indexDiffs ?? {};
119646
- const deletedIndexes = Object.entries(indexDiffs).flatMap(
119647
- ([componentDefinitionPath2, indexDiff2]) => indexDiff2.removed_indexes.map((index) => ({
119648
- componentDefinitionPath: componentDefinitionPath2,
119649
- index
119650
- }))
119651
- );
119750
+ const deletedIndexes = await deletedIndexesFromSchemaEvaluation({
119751
+ ctx,
119752
+ span,
119753
+ request,
119754
+ options
119755
+ }) ?? await deletedIndexesFromTableSizes({ ctx, span, request, options });
119652
119756
  if (deletedIndexes.length === 0) {
119653
119757
  logFinishedStep("No indexes are deleted by this push");
119654
119758
  return;
119655
119759
  }
119656
- const tablesWithDeletedIndexes = [
119657
- ...new Set(
119658
- deletedIndexes.map(
119659
- ({ componentDefinitionPath: componentDefinitionPath2, index }) => `${componentDefinitionPath2}:${getTableName(index)}`
119660
- )
119661
- )
119662
- ].map((str) => {
119663
- const [componentDefinitionPath2, table] = str.split(":");
119664
- return { componentDefinitionPath: componentDefinitionPath2, table };
119665
- });
119666
- changeSpinner("Checking whether the deleted indexes are on large tables...");
119667
- const documentCounts = await Promise.all(
119668
- tablesWithDeletedIndexes.map(
119669
- async ({ componentDefinitionPath: componentDefinitionPath2, table }) => ({
119670
- componentDefinitionPath: componentDefinitionPath2,
119671
- table,
119672
- count: await runSystemQuery(ctx, {
119673
- deploymentUrl: options.url,
119674
- adminKey: options.adminKey,
119675
- functionName: "_system/cli/tableSize:default",
119676
- componentPath: componentDefinitionPath2,
119677
- args: { tableName: table }
119678
- })
119679
- })
119680
- )
119681
- );
119682
- const deletedIndexesWithDocumentsCount = deletedIndexes.map(
119683
- ({ componentDefinitionPath: componentDefinitionPath2, index }) => ({
119684
- componentDefinitionPath: componentDefinitionPath2,
119685
- index,
119686
- count: documentCounts.find(
119687
- (count) => count.table === getTableName(index) && count.componentDefinitionPath === componentDefinitionPath2
119688
- ).count
119689
- })
119690
- );
119691
119760
  const minDocumentsForWarning = minDocumentsForIndexDeleteWarning();
119692
- if (!deletedIndexesWithDocumentsCount.some(
119693
- ({ count }) => count >= minDocumentsForWarning
119761
+ if (!deletedIndexes.some(
119762
+ ({ documentsCount }) => documentsCount >= minDocumentsForWarning
119694
119763
  )) {
119695
119764
  logFinishedStep("No large indexes are deleted by this push");
119696
119765
  return;
119697
119766
  }
119698
- logMessage(`\u26A0\uFE0F This code push will ${chalkStderr.bold("delete")} the following ${deletedIndexesWithDocumentsCount.length === 1 ? "index" : "indexes"}
119767
+ logMessage(`\u26A0\uFE0F This code push will ${chalkStderr.bold("delete")} the following ${deletedIndexes.length === 1 ? "index" : "indexes"}
119699
119768
  from your production deployment (${options.url}):
119700
119769
 
119701
- ${deletedIndexesWithDocumentsCount.map(
119702
- ({ componentDefinitionPath: componentDefinitionPath2, index, count }) => formatDeletedIndex({
119703
- componentDefinitionPath: componentDefinitionPath2,
119704
- index,
119705
- indexDiff: indexDiffs[componentDefinitionPath2],
119706
- documentsCount: count,
119707
- minDocumentsForWarning
119708
- })
119770
+ ${deletedIndexes.map(
119771
+ (deletedIndex) => formatDeletedIndex({ ...deletedIndex, minDocumentsForWarning })
119709
119772
  ).join("\n")}
119710
119773
 
119711
119774
  The documents that are in the index won\u2019t be deleted, but the index will need
@@ -119728,7 +119791,7 @@ to be backfilled again if you want to restore it later.
119728
119791
  }
119729
119792
  stopSpinner();
119730
119793
  if (!await promptYesNo(ctx, {
119731
- message: `Delete ${deletedIndexesWithDocumentsCount.length === 1 ? "this index" : "these indexes"}?`,
119794
+ message: `Delete ${deletedIndexes.length === 1 ? "this index" : "these indexes"}?`,
119732
119795
  default: false
119733
119796
  })) {
119734
119797
  return ctx.crash({
@@ -119739,16 +119802,98 @@ to be backfilled again if you want to restore it later.
119739
119802
  }
119740
119803
  logFinishedStep("Proceeding with push.");
119741
119804
  }
119805
+ async function deletedIndexesFromSchemaEvaluation({
119806
+ ctx,
119807
+ span,
119808
+ request,
119809
+ options
119810
+ }) {
119811
+ try {
119812
+ const response = await evaluateSchema(
119813
+ ctx,
119814
+ span,
119815
+ request,
119816
+ options,
119817
+ /* bestEffort */
119818
+ true
119819
+ );
119820
+ return Object.entries(response.componentSchemaEvaluations).flatMap(
119821
+ ([componentPath2, prediction]) => prediction.indexes.filter((index) => index.change === "dropped").map((index) => ({
119822
+ componentPath: componentPath2,
119823
+ index,
119824
+ documentsCount: index.numDocs,
119825
+ replacedBy: prediction.indexes.find(
119826
+ (other) => other.change === "added" && other.name === index.name
119827
+ ) ?? null
119828
+ }))
119829
+ );
119830
+ } catch (error3) {
119831
+ logVerbose(
119832
+ `Schema evaluation unavailable, sizing deleted indexes per table: ${error3 instanceof Error ? error3.message : String(error3)}`
119833
+ );
119834
+ return null;
119835
+ }
119836
+ }
119837
+ async function deletedIndexesFromTableSizes({
119838
+ ctx,
119839
+ span,
119840
+ request,
119841
+ options
119842
+ }) {
119843
+ const { schemaChange: schemaChange2 } = await evaluatePush(ctx, span, request, options);
119844
+ const indexDiffs = schemaChange2.indexDiffs ?? {};
119845
+ const deletedIndexes = Object.entries(indexDiffs).flatMap(
119846
+ ([componentPath2, indexDiff2]) => indexDiff2.removed_indexes.map((index) => ({
119847
+ componentPath: componentPath2,
119848
+ index,
119849
+ replacedBy: indexDiff2.added_indexes.find((other) => other.name === index.name) ?? null
119850
+ }))
119851
+ );
119852
+ if (deletedIndexes.length === 0) {
119853
+ return [];
119854
+ }
119855
+ const tablesWithDeletedIndexes = [
119856
+ ...new Set(
119857
+ deletedIndexes.map(
119858
+ ({ componentPath: componentPath2, index }) => `${componentPath2}:${getTableName(index)}`
119859
+ )
119860
+ )
119861
+ ].map((str) => {
119862
+ const [componentPath2, table] = str.split(":");
119863
+ return { componentPath: componentPath2, table };
119864
+ });
119865
+ changeSpinner("Checking whether the deleted indexes are on large tables...");
119866
+ const documentCounts = await Promise.all(
119867
+ tablesWithDeletedIndexes.map(async ({ componentPath: componentPath2, table }) => ({
119868
+ componentPath: componentPath2,
119869
+ table,
119870
+ count: await runSystemQuery(ctx, {
119871
+ deploymentUrl: options.url,
119872
+ adminKey: options.adminKey,
119873
+ functionName: "_system/cli/tableSize:default",
119874
+ componentPath: componentPath2,
119875
+ args: { tableName: table }
119876
+ })
119877
+ }))
119878
+ );
119879
+ return deletedIndexes.map(({ componentPath: componentPath2, index, replacedBy }) => ({
119880
+ componentPath: componentPath2,
119881
+ index,
119882
+ replacedBy,
119883
+ documentsCount: documentCounts.find(
119884
+ (count) => count.table === getTableName(index) && count.componentPath === componentPath2
119885
+ ).count
119886
+ }));
119887
+ }
119742
119888
  function formatDeletedIndex({
119743
- componentDefinitionPath: componentDefinitionPath2,
119889
+ componentPath: componentPath2,
119744
119890
  index,
119745
- indexDiff: indexDiff2,
119746
119891
  documentsCount,
119892
+ replacedBy,
119747
119893
  minDocumentsForWarning
119748
119894
  }) {
119749
- const componentNameFormatted = componentDefinitionPath2 !== "" ? `${chalkStderr.gray(componentDefinitionPath2)}:` : "";
119895
+ const componentNameFormatted = componentPath2 !== "" ? `${chalkStderr.gray(componentPath2)}:` : "";
119750
119896
  const documentsCountFormatted = documentsCount >= minDocumentsForWarning ? ` ${chalkStderr.yellowBright(`\u26A0\uFE0F ${documentsCount.toLocaleString()} documents`)}` : ` ${documentsCount.toLocaleString()} ${documentsCount === 1 ? "document" : "documents"}`;
119751
- const replacedBy = indexDiff2.added_indexes.find((i) => i.name === index.name);
119752
119897
  const replacedByFormatted = replacedBy ? `
119753
119898
  ${chalkStderr.green("\u2192 replaced by:")} ${formatIndex(replacedBy)}` : "";
119754
119899
  return "\u26D4 " + componentNameFormatted + formatIndex(index) + documentsCountFormatted + replacedByFormatted;
@@ -119768,6 +119913,90 @@ function minDocumentsForIndexDeleteWarning() {
119768
119913
  return MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING;
119769
119914
  }
119770
119915
 
119916
+ // src/cli/lib/checkForSlowSchemaValidation.ts
119917
+ init_source();
119918
+ init_log();
119919
+ init_utils3();
119920
+ var MIN_BYTES_FOR_SCHEMA_WALK_WARNING = 1 << 27;
119921
+ async function checkForSlowSchemaValidation({
119922
+ ctx,
119923
+ span,
119924
+ request,
119925
+ options
119926
+ }) {
119927
+ const response = await evaluateSchemaBestEffort({
119928
+ ctx,
119929
+ span,
119930
+ request,
119931
+ options
119932
+ });
119933
+ if (response === null) {
119934
+ return;
119935
+ }
119936
+ const walkedTables = Object.entries(
119937
+ response.componentSchemaEvaluations
119938
+ ).flatMap(
119939
+ ([componentPath2, prediction]) => prediction.tables.filter((table) => table.outcome === "mustWalk").map((table) => ({ componentPath: componentPath2, table }))
119940
+ );
119941
+ if (walkedTables.length === 0) {
119942
+ return;
119943
+ }
119944
+ const totalBytes = walkedTables.reduce(
119945
+ (sum, { table }) => sum + table.sizeBytes,
119946
+ 0
119947
+ );
119948
+ if (totalBytes < minBytesForSchemaWalkWarning()) {
119949
+ return;
119950
+ }
119951
+ logMessage(`\u26A0\uFE0F This schema change requires checking every document in the following ${walkedTables.length === 1 ? "table" : "tables"} against your new schema, totaling ${chalkStderr.yellowBright(formatSize(totalBytes))}. This deploy may take a while:
119952
+
119953
+ ${walkedTables.map(
119954
+ ({ componentPath: componentPath2, table }) => formatWalkedTable({ componentPath: componentPath2, table })
119955
+ ).join("\n")}
119956
+ `);
119957
+ }
119958
+ async function evaluateSchemaBestEffort({
119959
+ ctx,
119960
+ span,
119961
+ request,
119962
+ options
119963
+ }) {
119964
+ try {
119965
+ return await evaluateSchema(
119966
+ ctx,
119967
+ span,
119968
+ request,
119969
+ options,
119970
+ /* bestEffort */
119971
+ true
119972
+ );
119973
+ } catch (error3) {
119974
+ logVerbose(
119975
+ `Skipping slow schema validation check: ${error3 instanceof Error ? error3.message : String(error3)}`
119976
+ );
119977
+ return null;
119978
+ }
119979
+ }
119980
+ function formatWalkedTable({
119981
+ componentPath: componentPath2,
119982
+ table
119983
+ }) {
119984
+ const componentPrefix = componentPath2 !== "" ? `${chalkStderr.gray(componentPath2)}: ` : "";
119985
+ const docsFormatted = `${table.numDocs.toLocaleString()} documents, `;
119986
+ const sizeFormatted = formatSize(table.sizeBytes);
119987
+ return ` ${componentPrefix}${table.name} (${docsFormatted}${sizeFormatted})`;
119988
+ }
119989
+ function minBytesForSchemaWalkWarning() {
119990
+ const envValue = process.env.CONVEX_MIN_BYTES_FOR_SCHEMA_WALK_WARNING;
119991
+ if (envValue !== void 0) {
119992
+ const parsed = parseInt(envValue, 10);
119993
+ if (!isNaN(parsed)) {
119994
+ return parsed;
119995
+ }
119996
+ }
119997
+ return MIN_BYTES_FOR_SCHEMA_WALK_WARNING;
119998
+ }
119999
+
119771
120000
  // src/cli/lib/components.ts
119772
120001
  var import_crypto6 = require("crypto");
119773
120002
  async function runCodegen(ctx, credentials, options) {
@@ -120041,6 +120270,17 @@ async function startComponentsPushAndCodegen(ctx, parentSpan, projectConfig, con
120041
120270
  })
120042
120271
  );
120043
120272
  }
120273
+ if (options.dryRun && options.warnOnSlowSchemaValidation) {
120274
+ await parentSpan.enterAsync(
120275
+ "checkForSlowSchemaValidation",
120276
+ (span) => checkForSlowSchemaValidation({
120277
+ ctx,
120278
+ span,
120279
+ request: startPushRequest2,
120280
+ options
120281
+ })
120282
+ );
120283
+ }
120044
120284
  changeSpinner("Uploading functions to Convex...");
120045
120285
  const startPushResponse2 = await parentSpan.enterAsync(
120046
120286
  "startPush",
@@ -120569,6 +120809,7 @@ async function devAgainstDeployment(ctx, credentials, devOptions) {
120569
120809
  // Pass logManager to control logs during deploy
120570
120810
  largeIndexDeletionCheck: "no verification",
120571
120811
  // `convex dev` can’t push to prod
120812
+ warnOnSlowSchemaValidation: true,
120572
120813
  message: null
120573
120814
  },
120574
120815
  devOptions
@@ -121311,6 +121552,7 @@ async function pushToDeployment(ctx, args) {
121311
121552
  pushAllModules: false,
121312
121553
  largeIndexDeletionCheck: "no verification",
121313
121554
  // `convex run` can’t push to prod
121555
+ warnOnSlowSchemaValidation: true,
121314
121556
  message: null
121315
121557
  },
121316
121558
  {
@@ -124991,6 +125233,8 @@ var codegen = new Command2("codegen").summary("Generate backend type definitions
124991
125233
  systemUdfs: !!options.systemUdfs,
124992
125234
  largeIndexDeletionCheck: "no verification",
124993
125235
  // `codegen` is a read-only operation
125236
+ warnOnSlowSchemaValidation: false,
125237
+ // ditto: a codegen dry run never deploys
124994
125238
  codegenOnlyThisComponent: options.componentDir
124995
125239
  };
124996
125240
  if (options.systemUdfs) {
@@ -127385,6 +127629,7 @@ async function deployToNewPreviewDeployment(ctx, deploymentSelection, options) {
127385
127629
  pushAllModules: !!options.pushAllModules,
127386
127630
  largeIndexDeletionCheck: "no verification",
127387
127631
  // fine for preview deployments
127632
+ warnOnSlowSchemaValidation: true,
127388
127633
  message: options.message
127389
127634
  };
127390
127635
  showSpinner(`Deploying to ${previewUrl}...`);
@@ -130679,42 +130924,11 @@ var dev = new Command2("dev").summary("Develop against a dev deployment, watchin
130679
130924
  // src/cli/docs.ts
130680
130925
  init_source();
130681
130926
  init_log();
130682
- init_utils3();
130683
130927
  var docs = new Command2("docs").description("Open the docs in the browser").allowExcessArguments(false).option("--no-open", "Print docs URL instead of opening it in your browser").action(async (options) => {
130684
- const ctx = await oneoffContext({
130685
- url: void 0,
130686
- adminKey: void 0,
130687
- envFile: void 0
130688
- });
130689
- const deploymentSelection = await getDeploymentSelection(ctx, {
130690
- url: void 0,
130691
- adminKey: void 0,
130692
- envFile: void 0
130693
- });
130694
- const configuredDeployment = deploymentNameFromSelection(deploymentSelection);
130695
- if (configuredDeployment === null) {
130696
- await openDocs(ctx, options.open);
130697
- return;
130698
- }
130699
- const getCookieUrl = new URL(
130700
- `get_cookie/${configuredDeployment}`,
130701
- BIG_BRAIN_URL
130702
- );
130703
- const fetch2 = bigBrainFetch(ctx);
130704
- try {
130705
- const res = await fetch2(getCookieUrl);
130706
- deprecationCheckWarning(ctx, res);
130707
- const { cookie } = await res.json();
130708
- await openDocs(ctx, options.open, cookie);
130709
- } catch {
130710
- await openDocs(ctx, options.open);
130711
- }
130928
+ await openDocs(options.open);
130712
130929
  });
130713
- async function openDocs(ctx, toOpen, cookie) {
130714
- let docsUrl = "https://docs.convex.dev";
130715
- if (cookie !== void 0) {
130716
- docsUrl += "/?t=" + cookie;
130717
- }
130930
+ async function openDocs(toOpen) {
130931
+ const docsUrl = "https://docs.convex.dev/?utm_source=convex-cli";
130718
130932
  if (toOpen) {
130719
130933
  await open_default(docsUrl);
130720
130934
  logMessage(chalkStderr.green("Docs have launched! Check your browser."));