on-zero 0.7.2 → 0.7.3-1784533014336

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 (355) hide show
  1. package/dist/cjs/helpers/createMutators.cjs +4 -3
  2. package/dist/cjs/helpers/createMutators.native.js +6 -3
  3. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  4. package/dist/cjs/index.cjs +0 -1
  5. package/dist/cjs/index.native.js +0 -1
  6. package/dist/cjs/index.native.js.map +1 -1
  7. package/dist/cjs/orez.cjs +231 -0
  8. package/dist/cjs/orez.native.js +324 -0
  9. package/dist/cjs/orez.native.js.map +1 -0
  10. package/dist/cjs/orez.test.cjs +268 -0
  11. package/dist/cjs/orez.test.native.js +288 -0
  12. package/dist/cjs/orez.test.native.js.map +1 -0
  13. package/dist/cjs/run.cjs +1 -1
  14. package/dist/cjs/run.native.js +1 -1
  15. package/dist/cjs/state.cjs +1 -1
  16. package/dist/cjs/state.native.js +1 -1
  17. package/dist/cjs/zeroRunner.cjs +1 -1
  18. package/dist/cjs/zeroRunner.native.js +1 -1
  19. package/dist/esm/cli.native.js +1 -1
  20. package/dist/esm/cli.native.js.map +1 -1
  21. package/dist/esm/combineZeroClients.native.js +2 -2
  22. package/dist/esm/combineZeroClients.native.js.map +1 -1
  23. package/dist/esm/createPermissions.native.js +4 -4
  24. package/dist/esm/createPermissions.native.js.map +1 -1
  25. package/dist/esm/createSchemaFromDrizzle.native.js +1 -1
  26. package/dist/esm/createSchemaFromDrizzle.native.js.map +1 -1
  27. package/dist/esm/createUseQuery.native.js +2 -2
  28. package/dist/esm/createUseQuery.native.js.map +1 -1
  29. package/dist/esm/createUseQueryDirect.native.js +2 -2
  30. package/dist/esm/createUseQueryDirect.native.js.map +1 -1
  31. package/dist/esm/createZeroClient.authData.test.native.js +2 -2
  32. package/dist/esm/createZeroClient.authData.test.native.js.map +1 -1
  33. package/dist/esm/createZeroClient.connection.test.native.js +1 -1
  34. package/dist/esm/createZeroClient.connection.test.native.js.map +1 -1
  35. package/dist/esm/createZeroClient.native.js +15 -15
  36. package/dist/esm/createZeroClient.native.js.map +1 -1
  37. package/dist/esm/createZeroClient.recovery.test.native.js +1 -1
  38. package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -1
  39. package/dist/esm/generate-helpers.native.js.map +1 -1
  40. package/dist/esm/generate-lite.native.js +1 -1
  41. package/dist/esm/generate-lite.native.js.map +1 -1
  42. package/dist/esm/generate-lite.test.native.js +1 -1
  43. package/dist/esm/generate-lite.test.native.js.map +1 -1
  44. package/dist/esm/generate.native.js +1 -1
  45. package/dist/esm/generate.native.js.map +1 -1
  46. package/dist/esm/generate.test.native.js +1 -1
  47. package/dist/esm/generate.test.native.js.map +1 -1
  48. package/dist/esm/helpers/batchQuery.native.js.map +1 -1
  49. package/dist/esm/helpers/clearZeroClientData.native.js.map +1 -1
  50. package/dist/esm/helpers/createMutators.mjs +4 -3
  51. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  52. package/dist/esm/helpers/createMutators.native.js +8 -5
  53. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  54. package/dist/esm/helpers/createMutators.test.native.js +1 -1
  55. package/dist/esm/helpers/createMutators.test.native.js.map +1 -1
  56. package/dist/esm/helpers/ensureLoggedIn.native.js +1 -1
  57. package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -1
  58. package/dist/esm/helpers/getAuth.native.js +3 -3
  59. package/dist/esm/helpers/getAuth.native.js.map +1 -1
  60. package/dist/esm/helpers/mutatorContext.native.js.map +1 -1
  61. package/dist/esm/helpers/prettyFormatZeroQuery.native.js.map +1 -1
  62. package/dist/esm/helpers/queryContext.native.js.map +1 -1
  63. package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
  64. package/dist/esm/helpers/recoverZeroClient.test.native.js +1 -1
  65. package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
  66. package/dist/esm/helpers/showZeroClientError.native.js +1 -1
  67. package/dist/esm/helpers/showZeroClientError.native.js.map +1 -1
  68. package/dist/esm/helpers/useMutation.native.js.map +1 -1
  69. package/dist/esm/helpers/useMutation.test.native.js +1 -1
  70. package/dist/esm/helpers/useMutation.test.native.js.map +1 -1
  71. package/dist/esm/helpers/useZeroDebug.native.js +1 -1
  72. package/dist/esm/helpers/useZeroDebug.native.js.map +1 -1
  73. package/dist/esm/httpPull/fixtureSchema.native.js.map +1 -1
  74. package/dist/esm/httpPull/transport.test.native.js +3 -3
  75. package/dist/esm/httpPull/transport.test.native.js.map +1 -1
  76. package/dist/esm/httpPullTransport.native.js.map +1 -1
  77. package/dist/esm/index.js +0 -1
  78. package/dist/esm/index.js.map +1 -1
  79. package/dist/esm/index.mjs +0 -1
  80. package/dist/esm/index.mjs.map +1 -1
  81. package/dist/esm/index.native.js +22 -23
  82. package/dist/esm/index.native.js.map +1 -1
  83. package/dist/esm/instanceRegistry.native.js +1 -1
  84. package/dist/esm/instanceRegistry.native.js.map +1 -1
  85. package/dist/esm/modelRegistry.native.js.map +1 -1
  86. package/dist/esm/multi.native.js +3 -3
  87. package/dist/esm/multi.native.js.map +1 -1
  88. package/dist/esm/multiInstance.test.native.js +8 -8
  89. package/dist/esm/multiInstance.test.native.js.map +1 -1
  90. package/dist/esm/multiInstanceNested.test.native.js +3 -3
  91. package/dist/esm/multiInstanceNested.test.native.js.map +1 -1
  92. package/dist/esm/multiPartition.test.native.js +1 -1
  93. package/dist/esm/multiPartition.test.native.js.map +1 -1
  94. package/dist/esm/mutations.native.js +1 -1
  95. package/dist/esm/mutations.native.js.map +1 -1
  96. package/dist/esm/mutations.test.native.js +2 -2
  97. package/dist/esm/mutations.test.native.js.map +1 -1
  98. package/dist/esm/orez.mjs +205 -0
  99. package/dist/esm/orez.mjs.map +1 -0
  100. package/dist/esm/orez.native.js +295 -0
  101. package/dist/esm/orez.native.js.map +1 -0
  102. package/dist/esm/orez.test.mjs +245 -0
  103. package/dist/esm/orez.test.mjs.map +1 -0
  104. package/dist/esm/orez.test.native.js +262 -0
  105. package/dist/esm/orez.test.native.js.map +1 -0
  106. package/dist/esm/provideZero.hydration.test.native.js +1 -1
  107. package/dist/esm/provideZero.hydration.test.native.js.map +1 -1
  108. package/dist/esm/queryRegistry.native.js.map +1 -1
  109. package/dist/esm/resolveQuery.native.js +1 -1
  110. package/dist/esm/resolveQuery.native.js.map +1 -1
  111. package/dist/esm/run.mjs +1 -1
  112. package/dist/esm/run.mjs.map +1 -1
  113. package/dist/esm/run.native.js +5 -5
  114. package/dist/esm/run.native.js.map +1 -1
  115. package/dist/esm/serverWhere.native.js +1 -1
  116. package/dist/esm/serverWhere.native.js.map +1 -1
  117. package/dist/esm/serverWhere.test.native.js +3 -3
  118. package/dist/esm/serverWhere.test.native.js.map +1 -1
  119. package/dist/esm/state.mjs +1 -1
  120. package/dist/esm/state.native.js +1 -1
  121. package/dist/esm/state.native.js.map +1 -1
  122. package/dist/esm/testSetup.native.js.map +1 -1
  123. package/dist/esm/types.native.js.map +1 -1
  124. package/dist/esm/usePermission.test.native.js +3 -3
  125. package/dist/esm/usePermission.test.native.js.map +1 -1
  126. package/dist/esm/useQuery.empty.test.native.js +2 -2
  127. package/dist/esm/useQuery.empty.test.native.js.map +1 -1
  128. package/dist/esm/useQuery.ssr.test.native.js +2 -2
  129. package/dist/esm/useQuery.ssr.test.native.js.map +1 -1
  130. package/dist/esm/vite-plugin.native.js +1 -1
  131. package/dist/esm/vite-plugin.native.js.map +1 -1
  132. package/dist/esm/where.native.js +2 -2
  133. package/dist/esm/where.native.js.map +1 -1
  134. package/dist/esm/zeroRunner.mjs +1 -1
  135. package/dist/esm/zeroRunner.mjs.map +1 -1
  136. package/dist/esm/zeroRunner.native.js +2 -2
  137. package/dist/esm/zeroRunner.native.js.map +1 -1
  138. package/dist/esm/zql.native.js +1 -1
  139. package/dist/esm/zql.native.js.map +1 -1
  140. package/package.json +7 -23
  141. package/readme.md +40 -65
  142. package/src/createZeroClient.tsx +1 -1
  143. package/src/helpers/createMutators.ts +6 -2
  144. package/src/index.ts +0 -1
  145. package/src/orez.test.ts +266 -0
  146. package/src/orez.ts +344 -0
  147. package/src/run.ts +1 -1
  148. package/src/state.ts +1 -1
  149. package/src/types.ts +0 -5
  150. package/src/zeroRunner.ts +1 -1
  151. package/test-fixtures/server-return-types.ts +21 -58
  152. package/types/helpers/createMutators.d.ts +2 -1
  153. package/types/helpers/createMutators.d.ts.map +1 -1
  154. package/types/httpPull/fixtureSchema.d.ts +1 -1
  155. package/types/index.d.ts +0 -1
  156. package/types/index.d.ts.map +1 -1
  157. package/types/orez.d.ts +54 -0
  158. package/types/orez.d.ts.map +1 -0
  159. package/types/orez.test.d.ts +2 -0
  160. package/types/orez.test.d.ts.map +1 -0
  161. package/types/types.d.ts +0 -4
  162. package/types/types.d.ts.map +1 -1
  163. package/dist/cjs/asyncTasks.cjs +0 -51
  164. package/dist/cjs/asyncTasks.native.js +0 -84
  165. package/dist/cjs/asyncTasks.native.js.map +0 -1
  166. package/dist/cjs/createZeroDirectServer.cjs +0 -269
  167. package/dist/cjs/createZeroDirectServer.native.js +0 -287
  168. package/dist/cjs/createZeroDirectServer.native.js.map +0 -1
  169. package/dist/cjs/createZeroSQLiteServer.cjs +0 -50
  170. package/dist/cjs/createZeroSQLiteServer.native.js +0 -58
  171. package/dist/cjs/createZeroSQLiteServer.native.js.map +0 -1
  172. package/dist/cjs/createZeroSQLiteServer.test.cjs +0 -595
  173. package/dist/cjs/createZeroSQLiteServer.test.native.js +0 -647
  174. package/dist/cjs/createZeroSQLiteServer.test.native.js.map +0 -1
  175. package/dist/cjs/createZeroServer.cjs +0 -82
  176. package/dist/cjs/createZeroServer.native.js +0 -93
  177. package/dist/cjs/createZeroServer.native.js.map +0 -1
  178. package/dist/cjs/createZeroServer.test.cjs +0 -378
  179. package/dist/cjs/createZeroServer.test.native.js +0 -448
  180. package/dist/cjs/createZeroServer.test.native.js.map +0 -1
  181. package/dist/cjs/createZeroServerCore.cjs +0 -211
  182. package/dist/cjs/createZeroServerCore.native.js +0 -355
  183. package/dist/cjs/createZeroServerCore.native.js.map +0 -1
  184. package/dist/cjs/httpPull/auth.test.cjs +0 -197
  185. package/dist/cjs/httpPull/auth.test.native.js +0 -279
  186. package/dist/cjs/httpPull/auth.test.native.js.map +0 -1
  187. package/dist/cjs/httpPull/churn.test.cjs +0 -132
  188. package/dist/cjs/httpPull/churn.test.native.js +0 -155
  189. package/dist/cjs/httpPull/churn.test.native.js.map +0 -1
  190. package/dist/cjs/httpPull/completeAck.test.cjs +0 -69
  191. package/dist/cjs/httpPull/completeAck.test.native.js +0 -76
  192. package/dist/cjs/httpPull/completeAck.test.native.js.map +0 -1
  193. package/dist/cjs/httpPull/fixtureServer.cjs +0 -340
  194. package/dist/cjs/httpPull/fixtureServer.native.js +0 -534
  195. package/dist/cjs/httpPull/fixtureServer.native.js.map +0 -1
  196. package/dist/cjs/httpPull/integration.test.cjs +0 -53
  197. package/dist/cjs/httpPull/integration.test.native.js +0 -60
  198. package/dist/cjs/httpPull/integration.test.native.js.map +0 -1
  199. package/dist/cjs/httpPull/rebase.test.cjs +0 -360
  200. package/dist/cjs/httpPull/rebase.test.native.js +0 -420
  201. package/dist/cjs/httpPull/rebase.test.native.js.map +0 -1
  202. package/dist/cjs/httpPull/relations.test.cjs +0 -107
  203. package/dist/cjs/httpPull/relations.test.native.js +0 -119
  204. package/dist/cjs/httpPull/relations.test.native.js.map +0 -1
  205. package/dist/cjs/httpPull/testHarness.cjs +0 -100
  206. package/dist/cjs/httpPull/testHarness.native.js +0 -112
  207. package/dist/cjs/httpPull/testHarness.native.js.map +0 -1
  208. package/dist/cjs/server.cjs +0 -22
  209. package/dist/cjs/server.native.js +0 -4
  210. package/dist/cjs/server.native.js.map +0 -1
  211. package/dist/cjs/sqliteRuntime.cjs +0 -318
  212. package/dist/cjs/sqliteRuntime.native.js +0 -438
  213. package/dist/cjs/sqliteRuntime.native.js.map +0 -1
  214. package/dist/cjs/syncHost.cjs +0 -179
  215. package/dist/cjs/syncHost.native.js +0 -388
  216. package/dist/cjs/syncHost.native.js.map +0 -1
  217. package/dist/cjs/syncHost.test.cjs +0 -240
  218. package/dist/cjs/syncHost.test.native.js +0 -290
  219. package/dist/cjs/syncHost.test.native.js.map +0 -1
  220. package/dist/esm/asyncTasks.mjs +0 -26
  221. package/dist/esm/asyncTasks.mjs.map +0 -1
  222. package/dist/esm/asyncTasks.native.js +0 -56
  223. package/dist/esm/asyncTasks.native.js.map +0 -1
  224. package/dist/esm/createZeroDirectServer.mjs +0 -241
  225. package/dist/esm/createZeroDirectServer.mjs.map +0 -1
  226. package/dist/esm/createZeroDirectServer.native.js +0 -256
  227. package/dist/esm/createZeroDirectServer.native.js.map +0 -1
  228. package/dist/esm/createZeroSQLiteServer.mjs +0 -24
  229. package/dist/esm/createZeroSQLiteServer.mjs.map +0 -1
  230. package/dist/esm/createZeroSQLiteServer.native.js +0 -29
  231. package/dist/esm/createZeroSQLiteServer.native.js.map +0 -1
  232. package/dist/esm/createZeroSQLiteServer.test.mjs +0 -596
  233. package/dist/esm/createZeroSQLiteServer.test.mjs.map +0 -1
  234. package/dist/esm/createZeroSQLiteServer.test.native.js +0 -645
  235. package/dist/esm/createZeroSQLiteServer.test.native.js.map +0 -1
  236. package/dist/esm/createZeroServer.mjs +0 -57
  237. package/dist/esm/createZeroServer.mjs.map +0 -1
  238. package/dist/esm/createZeroServer.native.js +0 -65
  239. package/dist/esm/createZeroServer.native.js.map +0 -1
  240. package/dist/esm/createZeroServer.test.mjs +0 -379
  241. package/dist/esm/createZeroServer.test.mjs.map +0 -1
  242. package/dist/esm/createZeroServer.test.native.js +0 -446
  243. package/dist/esm/createZeroServer.test.native.js.map +0 -1
  244. package/dist/esm/createZeroServerCore.mjs +0 -186
  245. package/dist/esm/createZeroServerCore.mjs.map +0 -1
  246. package/dist/esm/createZeroServerCore.native.js +0 -327
  247. package/dist/esm/createZeroServerCore.native.js.map +0 -1
  248. package/dist/esm/httpPull/auth.test.mjs +0 -198
  249. package/dist/esm/httpPull/auth.test.mjs.map +0 -1
  250. package/dist/esm/httpPull/auth.test.native.js +0 -277
  251. package/dist/esm/httpPull/auth.test.native.js.map +0 -1
  252. package/dist/esm/httpPull/churn.test.mjs +0 -133
  253. package/dist/esm/httpPull/churn.test.mjs.map +0 -1
  254. package/dist/esm/httpPull/churn.test.native.js +0 -153
  255. package/dist/esm/httpPull/churn.test.native.js.map +0 -1
  256. package/dist/esm/httpPull/completeAck.test.mjs +0 -70
  257. package/dist/esm/httpPull/completeAck.test.mjs.map +0 -1
  258. package/dist/esm/httpPull/completeAck.test.native.js +0 -74
  259. package/dist/esm/httpPull/completeAck.test.native.js.map +0 -1
  260. package/dist/esm/httpPull/fixtureServer.mjs +0 -315
  261. package/dist/esm/httpPull/fixtureServer.mjs.map +0 -1
  262. package/dist/esm/httpPull/fixtureServer.native.js +0 -506
  263. package/dist/esm/httpPull/fixtureServer.native.js.map +0 -1
  264. package/dist/esm/httpPull/integration.test.mjs +0 -54
  265. package/dist/esm/httpPull/integration.test.mjs.map +0 -1
  266. package/dist/esm/httpPull/integration.test.native.js +0 -58
  267. package/dist/esm/httpPull/integration.test.native.js.map +0 -1
  268. package/dist/esm/httpPull/rebase.test.mjs +0 -361
  269. package/dist/esm/httpPull/rebase.test.mjs.map +0 -1
  270. package/dist/esm/httpPull/rebase.test.native.js +0 -418
  271. package/dist/esm/httpPull/rebase.test.native.js.map +0 -1
  272. package/dist/esm/httpPull/relations.test.mjs +0 -108
  273. package/dist/esm/httpPull/relations.test.mjs.map +0 -1
  274. package/dist/esm/httpPull/relations.test.native.js +0 -117
  275. package/dist/esm/httpPull/relations.test.native.js.map +0 -1
  276. package/dist/esm/httpPull/testHarness.mjs +0 -72
  277. package/dist/esm/httpPull/testHarness.mjs.map +0 -1
  278. package/dist/esm/httpPull/testHarness.native.js +0 -81
  279. package/dist/esm/httpPull/testHarness.native.js.map +0 -1
  280. package/dist/esm/server.mjs +0 -4
  281. package/dist/esm/server.mjs.map +0 -1
  282. package/dist/esm/server.native.js +0 -2
  283. package/dist/esm/server.native.js.map +0 -1
  284. package/dist/esm/sqliteRuntime.mjs +0 -289
  285. package/dist/esm/sqliteRuntime.mjs.map +0 -1
  286. package/dist/esm/sqliteRuntime.native.js +0 -406
  287. package/dist/esm/sqliteRuntime.native.js.map +0 -1
  288. package/dist/esm/syncHost.mjs +0 -153
  289. package/dist/esm/syncHost.mjs.map +0 -1
  290. package/dist/esm/syncHost.native.js +0 -359
  291. package/dist/esm/syncHost.native.js.map +0 -1
  292. package/dist/esm/syncHost.test.mjs +0 -217
  293. package/dist/esm/syncHost.test.mjs.map +0 -1
  294. package/dist/esm/syncHost.test.native.js +0 -264
  295. package/dist/esm/syncHost.test.native.js.map +0 -1
  296. package/src/asyncTasks.ts +0 -36
  297. package/src/createZeroDirectServer.ts +0 -411
  298. package/src/createZeroSQLiteServer.test.ts +0 -614
  299. package/src/createZeroSQLiteServer.ts +0 -56
  300. package/src/createZeroServer.test.ts +0 -421
  301. package/src/createZeroServer.ts +0 -105
  302. package/src/createZeroServerCore.ts +0 -296
  303. package/src/httpPull/auth.test.ts +0 -208
  304. package/src/httpPull/churn.test.ts +0 -147
  305. package/src/httpPull/completeAck.test.ts +0 -80
  306. package/src/httpPull/fixtureServer.ts +0 -391
  307. package/src/httpPull/integration.test.ts +0 -57
  308. package/src/httpPull/rebase.test.ts +0 -368
  309. package/src/httpPull/relations.test.ts +0 -135
  310. package/src/httpPull/testHarness.ts +0 -95
  311. package/src/server.native.ts +0 -3
  312. package/src/server.ts +0 -4
  313. package/src/sqliteRuntime.ts +0 -512
  314. package/src/syncHost.test.ts +0 -223
  315. package/src/syncHost.ts +0 -294
  316. package/types/asyncTasks.d.ts +0 -11
  317. package/types/asyncTasks.d.ts.map +0 -1
  318. package/types/createZeroDirectServer.d.ts +0 -80
  319. package/types/createZeroDirectServer.d.ts.map +0 -1
  320. package/types/createZeroSQLiteServer.d.ts +0 -12
  321. package/types/createZeroSQLiteServer.d.ts.map +0 -1
  322. package/types/createZeroSQLiteServer.test.d.ts +0 -2
  323. package/types/createZeroSQLiteServer.test.d.ts.map +0 -1
  324. package/types/createZeroServer.d.ts +0 -18
  325. package/types/createZeroServer.d.ts.map +0 -1
  326. package/types/createZeroServer.test.d.ts +0 -2
  327. package/types/createZeroServer.test.d.ts.map +0 -1
  328. package/types/createZeroServerCore.d.ts +0 -256
  329. package/types/createZeroServerCore.d.ts.map +0 -1
  330. package/types/httpPull/auth.test.d.ts +0 -2
  331. package/types/httpPull/auth.test.d.ts.map +0 -1
  332. package/types/httpPull/churn.test.d.ts +0 -2
  333. package/types/httpPull/churn.test.d.ts.map +0 -1
  334. package/types/httpPull/completeAck.test.d.ts +0 -2
  335. package/types/httpPull/completeAck.test.d.ts.map +0 -1
  336. package/types/httpPull/fixtureServer.d.ts +0 -14
  337. package/types/httpPull/fixtureServer.d.ts.map +0 -1
  338. package/types/httpPull/integration.test.d.ts +0 -2
  339. package/types/httpPull/integration.test.d.ts.map +0 -1
  340. package/types/httpPull/rebase.test.d.ts +0 -2
  341. package/types/httpPull/rebase.test.d.ts.map +0 -1
  342. package/types/httpPull/relations.test.d.ts +0 -2
  343. package/types/httpPull/relations.test.d.ts.map +0 -1
  344. package/types/httpPull/testHarness.d.ts +0 -32
  345. package/types/httpPull/testHarness.d.ts.map +0 -1
  346. package/types/server.d.ts +0 -5
  347. package/types/server.d.ts.map +0 -1
  348. package/types/server.native.d.ts +0 -1
  349. package/types/server.native.d.ts.map +0 -1
  350. package/types/sqliteRuntime.d.ts +0 -71
  351. package/types/sqliteRuntime.d.ts.map +0 -1
  352. package/types/syncHost.d.ts +0 -42
  353. package/types/syncHost.d.ts.map +0 -1
  354. package/types/syncHost.test.d.ts +0 -2
  355. package/types/syncHost.test.d.ts.map +0 -1
@@ -1,411 +0,0 @@
1
- import { createBuilder, mustGetQuery } from '@rocicorp/zero'
2
-
3
- import { runAsyncTaskEntries } from './asyncTasks'
4
- import { createPermissions } from './createPermissions'
5
- import { createMutators } from './helpers/createMutators'
6
- import {
7
- getScopedAuthData,
8
- isInZeroMutation,
9
- mutatorContext,
10
- runWithAuthScope,
11
- } from './helpers/mutatorContext'
12
- import { runWithQueryContext } from './helpers/queryContext'
13
- import { getMutationsPermissions } from './modelRegistry'
14
- import { setCustomQueries } from './run'
15
- import { getZQL, setEnvironment, setSchema } from './state'
16
- import { setEvaluatingPermission } from './where'
17
- import { setRunner } from './zeroRunner'
18
-
19
- import type {
20
- AdminRoleMode,
21
- AsyncTask,
22
- AsyncTaskEntry,
23
- AsyncTaskOptions,
24
- AuthData,
25
- GenericModels,
26
- MutatorContext,
27
- QueryBuilder,
28
- Transaction,
29
- } from './types'
30
- import type {
31
- AnyQueryRegistry,
32
- HumanReadable,
33
- Query,
34
- Schema as ZeroSchema,
35
- } from '@rocicorp/zero'
36
- import type { Database, TransactionProviderInput } from '@rocicorp/zero/server'
37
-
38
- type MutateAuthData = Pick<AuthData, 'email' | 'id'> & Partial<AuthData>
39
-
40
- export type MutateOptions = {
41
- authData?: MutateAuthData
42
- awaitEffects?: boolean
43
- }
44
-
45
- export type ServerMutate<Models extends GenericModels> = {
46
- [Key in keyof Models]: {
47
- [K in keyof Models[Key]['mutate']]: Models[Key]['mutate'][K] extends (
48
- ctx: MutatorContext,
49
- arg: infer Arg,
50
- ) => any
51
- ? (arg: Arg, options?: MutateOptions) => Promise<void>
52
- : (options?: MutateOptions) => Promise<void>
53
- }
54
- }
55
-
56
- export type ValidateQueryArgs = {
57
- authData: AuthData | null
58
- queryName: string
59
- params: unknown
60
- }
61
-
62
- export type ValidateMutationArgs = {
63
- authData: AuthData | null
64
- mutatorName: string
65
- tableName: string
66
- args: unknown
67
- }
68
-
69
- export type ValidateQueryFn = (args: ValidateQueryArgs) => void
70
- export type ValidateMutationFn = (args: ValidateMutationArgs) => void | Promise<void>
71
-
72
- export type ServerQueryResolverOptions = {
73
- authData: AuthData | null
74
- name: string
75
- args: unknown
76
- queries: AnyQueryRegistry
77
- permissions: ReturnType<typeof createPermissions>
78
- validateQuery?: ValidateQueryFn
79
- }
80
-
81
- export function resolveServerQuery({
82
- authData,
83
- name,
84
- args,
85
- queries,
86
- permissions,
87
- validateQuery,
88
- }: ServerQueryResolverOptions) {
89
- if (name.startsWith('permission.')) {
90
- const table = name.slice('permission.'.length)
91
- const { objOrId } = args as {
92
- objOrId: string | Record<string, any>
93
- }
94
- const permission = getMutationsPermissions(table)
95
- if (!permission) {
96
- throw new Error(`[permission] no permission defined for table: ${table}`)
97
- }
98
- setEvaluatingPermission(true)
99
- try {
100
- return (getZQL() as any)[table]
101
- .where((eb: any) => {
102
- return permissions.buildPermissionQuery(
103
- authData,
104
- eb,
105
- permission,
106
- objOrId,
107
- table,
108
- )
109
- })
110
- .one()
111
- } finally {
112
- setEvaluatingPermission(false)
113
- }
114
- }
115
-
116
- if (validateQuery) {
117
- validateQuery({ authData, queryName: name, params: args })
118
- }
119
-
120
- const query = (mustGetQuery as any)(queries, name)
121
- return query.fn({ args, ctx: authData })
122
- }
123
-
124
- export type TransactionAttemptLifecycle = {
125
- beginAttempt(): void
126
- completeAttempt(): void
127
- rollbackAttempt(): void
128
- commitTransaction(): void
129
- rollbackTransaction(): void
130
- }
131
-
132
- export type ZeroServerDatabase = Database<Transaction>
133
-
134
- export type ZeroServerCommonOptions<
135
- Schema extends ZeroSchema,
136
- Models extends GenericModels,
137
- ServerActions extends Record<string, unknown>,
138
- > = {
139
- schema: Schema
140
- models: Models
141
- createServerActions: () => ServerActions
142
- queries?: AnyQueryRegistry
143
- /** generated validators keyed by model and mutation name */
144
- mutations?: Record<string, Record<string, any>>
145
- /** synchronous query authorization hook; throw to reject */
146
- validateQuery?: ValidateQueryFn
147
- /** mutation authorization hook; throw to reject */
148
- validateMutation?: ValidateMutationFn
149
- /** controls which operations the admin role bypasses */
150
- defaultAllowAdminRole?: AdminRoleMode
151
- /** auth data used by direct server mutations when no scope provides it */
152
- defaultMutateAuthData?: MutateAuthData
153
- }
154
-
155
- export type ZeroDirectServerOptions<
156
- Schema extends ZeroSchema,
157
- Models extends GenericModels,
158
- ServerActions extends Record<string, unknown>,
159
- > = ZeroServerCommonOptions<Schema, Models, ServerActions> & {
160
- createDatabase: () => ZeroServerDatabase
161
- }
162
-
163
- export type ZeroDirectServer<Schema extends ZeroSchema, Models extends GenericModels> = {
164
- transaction: <
165
- CB extends (tx: Transaction) => Promise<any>,
166
- Returns extends CB extends (tx: Transaction) => Promise<infer X> ? X : never,
167
- >(
168
- query: CB,
169
- ) => Promise<Returns>
170
- mutate: ServerMutate<Models>
171
- query: <R>(
172
- cb: (q: QueryBuilder) => Query<any, Schema, R>,
173
- authData?: AuthData | null,
174
- ) => Promise<HumanReadable<R>>
175
- }
176
-
177
- export function createAsyncTaskCollector() {
178
- const committed: AsyncTaskEntry[] = []
179
- let attempt: AsyncTaskEntry[] | undefined
180
- let completedAttempt: AsyncTaskEntry[] | undefined
181
-
182
- const enqueueTask = (task: AsyncTask, opts?: AsyncTaskOptions) => {
183
- const entries = attempt ?? committed
184
- entries.push({ task, barrier: opts?.barrier === true })
185
- }
186
-
187
- const lifecycle: TransactionAttemptLifecycle = {
188
- beginAttempt() {
189
- attempt = []
190
- completedAttempt = undefined
191
- },
192
- completeAttempt() {
193
- completedAttempt = attempt
194
- attempt = undefined
195
- },
196
- rollbackAttempt() {
197
- attempt = undefined
198
- completedAttempt = undefined
199
- },
200
- commitTransaction() {
201
- if (completedAttempt) committed.push(...completedAttempt)
202
- completedAttempt = undefined
203
- },
204
- rollbackTransaction() {
205
- attempt = undefined
206
- completedAttempt = undefined
207
- },
208
- }
209
-
210
- return { committed, enqueueTask, lifecycle }
211
- }
212
-
213
- export function createZeroDirectServerRuntime<
214
- Schema extends ZeroSchema,
215
- Models extends GenericModels,
216
- ServerActions extends Record<string, unknown>,
217
- >({
218
- createDatabase,
219
- createServerActions,
220
- defaultAllowAdminRole = 'all',
221
- defaultMutateAuthData = {} as MutateAuthData,
222
- models,
223
- mutations: mutationValidators,
224
- queries,
225
- schema,
226
- validateMutation,
227
- validateQuery,
228
- }: ZeroDirectServerOptions<Schema, Models, ServerActions>): {
229
- permissions: ReturnType<typeof createPermissions<Schema>>
230
- server: ZeroDirectServer<Schema, Models>
231
- } {
232
- setSchema(schema, createBuilder(schema))
233
- setEnvironment('server')
234
-
235
- const permissions = createPermissions<Schema>({
236
- environment: 'server',
237
- schema,
238
- adminRoleMode: defaultAllowAdminRole,
239
- })
240
-
241
- async function runTransaction<
242
- CB extends (tx: Transaction) => Promise<any>,
243
- Returns extends CB extends (tx: Transaction) => Promise<infer X> ? X : never,
244
- >(database: ZeroServerDatabase, query: CB): Promise<Returns> {
245
- try {
246
- if (isInZeroMutation()) {
247
- const { tx } = mutatorContext()
248
- return await query(tx)
249
- }
250
- return (await database.transaction(query, dummyTransactionInput)) as Returns
251
- } catch (err) {
252
- if ((err as any)?.name !== 'PermissionError') {
253
- console.error(`Error running transaction(): ${err}`)
254
- }
255
- throw err
256
- }
257
- }
258
-
259
- async function transaction<
260
- CB extends (tx: Transaction) => Promise<any>,
261
- Returns extends CB extends (tx: Transaction) => Promise<infer X> ? X : never,
262
- >(query: CB): Promise<Returns> {
263
- return runTransaction(createDatabase(), query)
264
- }
265
-
266
- async function runMutate(
267
- modelName: string,
268
- mutatorName: string,
269
- mutatorArg: unknown,
270
- options?: MutateOptions,
271
- ) {
272
- let authData = options?.authData
273
- if (!authData) {
274
- const scoped = getScopedAuthData()
275
- if (scoped) authData = scoped as MutateAuthData
276
- }
277
-
278
- const tasks = createAsyncTaskCollector()
279
- const mutators = createMutators({
280
- models,
281
- environment: 'server',
282
- enqueueTask: tasks.enqueueTask,
283
- authData: {
284
- ...defaultMutateAuthData,
285
- ...authData,
286
- },
287
- createServerActions,
288
- can: permissions.can,
289
- validateMutation,
290
- mutationValidators,
291
- })
292
- const modelMutators = mutators[modelName as keyof typeof mutators] as Record<
293
- string,
294
- (tx: Transaction, arg?: unknown) => Promise<void>
295
- >
296
- const mutator = modelMutators[mutatorName]
297
-
298
- await runTransaction(
299
- createDatabaseWithLifecycle(createDatabase(), tasks.lifecycle),
300
- async (tx) => {
301
- await mutator(tx, mutatorArg)
302
- },
303
- )
304
-
305
- if (tasks.committed.length) {
306
- const resolvedAuth = authData ?? null
307
- const entries = tasks.committed.map((entry) => ({
308
- ...entry,
309
- task: () => runWithAuthScope(resolvedAuth, entry.task),
310
- }))
311
- if (options?.awaitEffects) {
312
- await Promise.all(entries.map(({ task }) => task()))
313
- } else {
314
- await runAsyncTaskEntries(entries, { background: () => undefined })
315
- }
316
- }
317
- }
318
-
319
- const mutate = new Proxy({} as ServerMutate<Models>, {
320
- get(_, modelName: string) {
321
- return new Proxy(
322
- {},
323
- {
324
- get(_, mutatorName: string) {
325
- return (arg: unknown, options?: MutateOptions) =>
326
- runMutate(modelName, mutatorName, arg, options)
327
- },
328
- },
329
- )
330
- },
331
- })
332
-
333
- function query<R>(
334
- cb: (q: QueryBuilder) => Query<any, Schema, R>,
335
- authData?: AuthData | null,
336
- ): Promise<HumanReadable<R>> {
337
- const run = () =>
338
- transaction(async (tx) => {
339
- return tx.run(cb(getZQL()))
340
- }) as any
341
-
342
- if (authData !== undefined) {
343
- return runWithQueryContext({ authData }, run)
344
- }
345
- return run()
346
- }
347
-
348
- if (queries) {
349
- setCustomQueries(queries)
350
- }
351
-
352
- setRunner((queryObj) => {
353
- return transaction(async (tx) => {
354
- return tx.run(queryObj)
355
- })
356
- })
357
-
358
- return {
359
- permissions,
360
- server: {
361
- transaction,
362
- mutate,
363
- query,
364
- },
365
- }
366
- }
367
-
368
- export function createZeroDirectServer<
369
- Schema extends ZeroSchema,
370
- Models extends GenericModels,
371
- ServerActions extends Record<string, unknown>,
372
- >(
373
- options: ZeroDirectServerOptions<Schema, Models, ServerActions>,
374
- ): ZeroDirectServer<Schema, Models> {
375
- return createZeroDirectServerRuntime(options).server
376
- }
377
-
378
- function createDatabaseWithLifecycle(
379
- database: ZeroServerDatabase,
380
- lifecycle: TransactionAttemptLifecycle,
381
- ): ZeroServerDatabase {
382
- return {
383
- async transaction(callback, input) {
384
- try {
385
- const value = await database.transaction(async (tx, hooks) => {
386
- lifecycle.beginAttempt()
387
- try {
388
- const result = await callback(tx, hooks)
389
- lifecycle.completeAttempt()
390
- return result
391
- } catch (error) {
392
- lifecycle.rollbackAttempt()
393
- throw error
394
- }
395
- }, input)
396
- lifecycle.commitTransaction()
397
- return value
398
- } catch (error) {
399
- lifecycle.rollbackTransaction()
400
- throw error
401
- }
402
- },
403
- }
404
- }
405
-
406
- const dummyTransactionInput: TransactionProviderInput = {
407
- clientGroupID: 'unused',
408
- clientID: 'unused',
409
- mutationID: 42,
410
- upstreamSchema: 'unused',
411
- }