over-zero 0.0.9 → 0.0.11

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 (392) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/{build/schema.cjs → builder.cjs} +10 -7
  3. package/dist/cjs/{helpers/zeroEmitter.js → builder.js} +11 -7
  4. package/dist/cjs/builder.js.map +6 -0
  5. package/dist/cjs/builder.native.js +35 -0
  6. package/dist/cjs/builder.native.js.map +1 -0
  7. package/dist/cjs/cli.cjs +299 -0
  8. package/dist/cjs/cli.js +292 -0
  9. package/dist/cjs/cli.js.map +6 -0
  10. package/dist/cjs/cli.native.js +386 -0
  11. package/dist/cjs/cli.native.js.map +1 -0
  12. package/dist/cjs/createPermissions.cjs +22 -56
  13. package/dist/cjs/createPermissions.js +22 -64
  14. package/dist/cjs/createPermissions.js.map +1 -1
  15. package/dist/cjs/createPermissions.native.js +61 -87
  16. package/dist/cjs/createPermissions.native.js.map +1 -6
  17. package/dist/cjs/createZeroClient.cjs +41 -21
  18. package/dist/cjs/createZeroClient.js +23 -16
  19. package/dist/cjs/createZeroClient.js.map +1 -1
  20. package/dist/cjs/createZeroClient.native.js +139 -81
  21. package/dist/cjs/createZeroClient.native.js.map +1 -6
  22. package/dist/cjs/createZeroServer.cjs +40 -34
  23. package/dist/cjs/createZeroServer.js +35 -27
  24. package/dist/cjs/createZeroServer.js.map +2 -2
  25. package/dist/cjs/createZeroServer.native.js +119 -77
  26. package/dist/cjs/createZeroServer.native.js.map +1 -6
  27. package/dist/cjs/helpers/batchQuery.native.js +25 -18
  28. package/dist/cjs/helpers/batchQuery.native.js.map +1 -6
  29. package/dist/cjs/helpers/context.js.map +1 -1
  30. package/dist/cjs/helpers/context.native.js +20 -19
  31. package/dist/cjs/helpers/context.native.js.map +1 -6
  32. package/dist/cjs/helpers/createMutators.cjs +2 -2
  33. package/dist/cjs/helpers/createMutators.js +2 -2
  34. package/dist/cjs/helpers/createMutators.js.map +1 -1
  35. package/dist/cjs/helpers/createMutators.native.js +52 -41
  36. package/dist/cjs/helpers/createMutators.native.js.map +1 -6
  37. package/dist/cjs/helpers/didRunPermissionCheck.native.js +27 -22
  38. package/dist/cjs/helpers/didRunPermissionCheck.native.js.map +1 -6
  39. package/dist/cjs/helpers/ensureLoggedIn.cjs +2 -2
  40. package/dist/cjs/helpers/ensureLoggedIn.js +2 -2
  41. package/dist/cjs/helpers/ensureLoggedIn.js.map +1 -1
  42. package/dist/cjs/helpers/ensureLoggedIn.native.js +25 -18
  43. package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -6
  44. package/dist/cjs/helpers/getQueryOrMutatorAuthData.cjs +30 -0
  45. package/dist/cjs/{build/schema.native.js → helpers/getQueryOrMutatorAuthData.js} +9 -13
  46. package/dist/cjs/helpers/getQueryOrMutatorAuthData.js.map +6 -0
  47. package/dist/cjs/helpers/getQueryOrMutatorAuthData.native.js +33 -0
  48. package/dist/cjs/helpers/getQueryOrMutatorAuthData.native.js.map +1 -0
  49. package/dist/cjs/helpers/mutatorContext.cjs +40 -0
  50. package/dist/cjs/helpers/mutatorContext.js +36 -0
  51. package/dist/cjs/helpers/mutatorContext.js.map +6 -0
  52. package/dist/cjs/helpers/mutatorContext.native.js +43 -0
  53. package/dist/cjs/helpers/mutatorContext.native.js.map +1 -0
  54. package/dist/cjs/helpers/prettyFormatZeroQuery.native.js +102 -82
  55. package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +1 -6
  56. package/dist/cjs/helpers/queryContext.cjs +40 -0
  57. package/dist/cjs/helpers/{getDidRunPermissionCheck.native.js → queryContext.js} +21 -13
  58. package/dist/cjs/helpers/queryContext.js.map +6 -0
  59. package/dist/cjs/helpers/queryContext.native.js +43 -0
  60. package/dist/cjs/helpers/queryContext.native.js.map +1 -0
  61. package/dist/cjs/helpers/queryOrMutatorAuthData.js +1 -0
  62. package/dist/cjs/helpers/queryOrMutatorAuthData.native.js +2 -0
  63. package/dist/cjs/helpers/queryOrMutatorContext.js +1 -0
  64. package/dist/cjs/helpers/queryOrMutatorContext.native.js +2 -0
  65. package/dist/cjs/helpers/useZeroDebug.native.js +63 -50
  66. package/dist/cjs/helpers/useZeroDebug.native.js.map +1 -6
  67. package/dist/cjs/index.cjs +3 -2
  68. package/dist/cjs/index.js +3 -2
  69. package/dist/cjs/index.js.map +1 -1
  70. package/dist/cjs/index.native.js +21 -26
  71. package/dist/cjs/index.native.js.map +1 -6
  72. package/dist/cjs/mutations.cjs +1 -1
  73. package/dist/cjs/mutations.js +1 -1
  74. package/dist/cjs/mutations.js.map +1 -1
  75. package/dist/cjs/mutations.native.js +33 -28
  76. package/dist/cjs/mutations.native.js.map +1 -6
  77. package/dist/cjs/query.cjs +34 -0
  78. package/dist/cjs/{helpers/zeroEmitter.native.js → query.js} +13 -11
  79. package/dist/cjs/query.js.map +6 -0
  80. package/dist/cjs/query.native.js +39 -0
  81. package/dist/cjs/query.native.js.map +1 -0
  82. package/dist/cjs/{helpers/getDidRunPermissionCheck.cjs → queryBuilder.cjs} +10 -6
  83. package/dist/cjs/{build/schema.js → queryBuilder.js} +11 -7
  84. package/dist/cjs/queryBuilder.js.map +6 -0
  85. package/dist/cjs/queryBuilder.native.js +35 -0
  86. package/dist/cjs/queryBuilder.native.js.map +1 -0
  87. package/dist/cjs/server.native.js +13 -12
  88. package/dist/cjs/server.native.js.map +1 -6
  89. package/dist/cjs/state.cjs +52 -0
  90. package/dist/cjs/state.js +40 -0
  91. package/dist/cjs/state.js.map +6 -0
  92. package/dist/cjs/state.native.js +55 -0
  93. package/dist/cjs/state.native.js.map +1 -0
  94. package/dist/cjs/types.native.js +9 -5
  95. package/dist/cjs/types.native.js.map +1 -6
  96. package/dist/cjs/where.cjs +9 -2
  97. package/dist/cjs/where.js +8 -2
  98. package/dist/cjs/where.js.map +2 -2
  99. package/dist/cjs/where.native.js +29 -19
  100. package/dist/cjs/where.native.js.map +1 -6
  101. package/dist/cjs/{helpers/zeroEmitter.cjs → zql.cjs} +10 -6
  102. package/dist/cjs/{helpers/getDidRunPermissionCheck.js → zql.js} +11 -6
  103. package/dist/cjs/zql.js.map +6 -0
  104. package/dist/cjs/zql.native.js +35 -0
  105. package/dist/cjs/zql.native.js.map +1 -0
  106. package/dist/esm/builder.js +10 -0
  107. package/dist/esm/builder.js.map +6 -0
  108. package/dist/esm/builder.mjs +8 -0
  109. package/dist/esm/builder.mjs.map +1 -0
  110. package/dist/esm/builder.native.js +9 -0
  111. package/dist/esm/builder.native.js.map +1 -0
  112. package/dist/esm/cli.js +278 -0
  113. package/dist/esm/cli.js.map +6 -0
  114. package/dist/esm/cli.mjs +278 -0
  115. package/dist/esm/cli.mjs.map +1 -0
  116. package/dist/esm/cli.native.js +362 -0
  117. package/dist/esm/cli.native.js.map +1 -0
  118. package/dist/esm/createPermissions.js +21 -64
  119. package/dist/esm/createPermissions.js.map +1 -1
  120. package/dist/esm/createPermissions.mjs +20 -54
  121. package/dist/esm/createPermissions.mjs.map +1 -1
  122. package/dist/esm/createPermissions.native.js +26 -66
  123. package/dist/esm/createPermissions.native.js.map +1 -1
  124. package/dist/esm/createZeroClient.js +24 -16
  125. package/dist/esm/createZeroClient.js.map +1 -1
  126. package/dist/esm/createZeroClient.mjs +40 -20
  127. package/dist/esm/createZeroClient.mjs.map +1 -1
  128. package/dist/esm/createZeroClient.native.js +56 -25
  129. package/dist/esm/createZeroClient.native.js.map +1 -1
  130. package/dist/esm/createZeroServer.js +36 -19
  131. package/dist/esm/createZeroServer.js.map +1 -1
  132. package/dist/esm/createZeroServer.mjs +35 -18
  133. package/dist/esm/createZeroServer.mjs.map +1 -1
  134. package/dist/esm/createZeroServer.native.js +43 -23
  135. package/dist/esm/createZeroServer.native.js.map +1 -1
  136. package/dist/esm/helpers/context.js.map +1 -1
  137. package/dist/esm/helpers/context.mjs.map +1 -1
  138. package/dist/esm/helpers/context.native.js.map +1 -1
  139. package/dist/esm/helpers/createMutators.js +1 -1
  140. package/dist/esm/helpers/createMutators.mjs +1 -1
  141. package/dist/esm/helpers/createMutators.native.js +1 -1
  142. package/dist/esm/helpers/ensureLoggedIn.js +2 -2
  143. package/dist/esm/helpers/ensureLoggedIn.js.map +1 -1
  144. package/dist/esm/helpers/ensureLoggedIn.mjs +2 -2
  145. package/dist/esm/helpers/ensureLoggedIn.mjs.map +1 -1
  146. package/dist/esm/helpers/ensureLoggedIn.native.js +2 -2
  147. package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -1
  148. package/dist/esm/helpers/getQueryOrMutatorAuthData.js +9 -0
  149. package/dist/esm/helpers/getQueryOrMutatorAuthData.js.map +6 -0
  150. package/dist/esm/helpers/getQueryOrMutatorAuthData.mjs +7 -0
  151. package/dist/esm/helpers/getQueryOrMutatorAuthData.mjs.map +1 -0
  152. package/dist/esm/helpers/getQueryOrMutatorAuthData.native.js +7 -0
  153. package/dist/esm/helpers/getQueryOrMutatorAuthData.native.js.map +1 -0
  154. package/dist/esm/helpers/mutatorContext.js +20 -0
  155. package/dist/esm/helpers/mutatorContext.js.map +6 -0
  156. package/dist/esm/helpers/mutatorContext.mjs +15 -0
  157. package/dist/esm/helpers/mutatorContext.mjs.map +1 -0
  158. package/dist/esm/helpers/mutatorContext.native.js +15 -0
  159. package/dist/esm/helpers/mutatorContext.native.js.map +1 -0
  160. package/dist/esm/helpers/queryContext.js +20 -0
  161. package/dist/esm/helpers/queryContext.js.map +6 -0
  162. package/dist/esm/helpers/queryContext.mjs +15 -0
  163. package/dist/esm/helpers/queryContext.mjs.map +1 -0
  164. package/dist/esm/helpers/queryContext.native.js +15 -0
  165. package/dist/esm/helpers/queryContext.native.js.map +1 -0
  166. package/dist/esm/helpers/queryOrMutatorAuthData.js +1 -0
  167. package/dist/esm/helpers/queryOrMutatorAuthData.mjs +2 -0
  168. package/dist/esm/helpers/queryOrMutatorAuthData.native.js +2 -0
  169. package/dist/esm/helpers/queryOrMutatorContext.js +1 -0
  170. package/dist/esm/helpers/queryOrMutatorContext.mjs +2 -0
  171. package/dist/esm/helpers/queryOrMutatorContext.mjs.map +1 -0
  172. package/dist/esm/helpers/queryOrMutatorContext.native.js +2 -0
  173. package/dist/esm/helpers/queryOrMutatorContext.native.js.map +1 -0
  174. package/dist/esm/index.js +3 -2
  175. package/dist/esm/index.js.map +1 -1
  176. package/dist/esm/index.mjs +3 -2
  177. package/dist/esm/index.mjs.map +1 -1
  178. package/dist/esm/index.native.js +3 -2
  179. package/dist/esm/index.native.js.map +1 -1
  180. package/dist/esm/mutations.js +1 -1
  181. package/dist/esm/mutations.js.map +1 -1
  182. package/dist/esm/mutations.mjs +1 -1
  183. package/dist/esm/mutations.mjs.map +1 -1
  184. package/dist/esm/mutations.native.js +1 -1
  185. package/dist/esm/mutations.native.js.map +1 -1
  186. package/dist/esm/query.js +13 -0
  187. package/dist/esm/query.js.map +6 -0
  188. package/dist/esm/query.mjs +11 -0
  189. package/dist/esm/query.mjs.map +1 -0
  190. package/dist/esm/query.native.js +13 -0
  191. package/dist/esm/query.native.js.map +1 -0
  192. package/dist/esm/queryBuilder.js +10 -0
  193. package/dist/esm/queryBuilder.js.map +6 -0
  194. package/dist/esm/queryBuilder.mjs +8 -0
  195. package/dist/esm/queryBuilder.mjs.map +1 -0
  196. package/dist/esm/queryBuilder.native.js +9 -0
  197. package/dist/esm/queryBuilder.native.js.map +1 -0
  198. package/dist/esm/state.js +24 -0
  199. package/dist/esm/state.js.map +6 -0
  200. package/dist/esm/state.mjs +25 -0
  201. package/dist/esm/state.mjs.map +1 -0
  202. package/dist/esm/state.native.js +25 -0
  203. package/dist/esm/state.native.js.map +1 -0
  204. package/dist/esm/where.js +9 -2
  205. package/dist/esm/where.js.map +2 -2
  206. package/dist/esm/where.mjs +9 -2
  207. package/dist/esm/where.mjs.map +1 -1
  208. package/dist/esm/where.native.js +10 -2
  209. package/dist/esm/where.native.js.map +1 -1
  210. package/dist/esm/zql.js +10 -0
  211. package/dist/esm/zql.js.map +6 -0
  212. package/dist/esm/zql.mjs +8 -0
  213. package/dist/esm/zql.mjs.map +1 -0
  214. package/dist/esm/zql.native.js +9 -0
  215. package/dist/esm/zql.native.js.map +1 -0
  216. package/package.json +13 -3
  217. package/readme.md +460 -13
  218. package/src/cli.ts +511 -0
  219. package/src/createPermissions.ts +21 -123
  220. package/src/createZeroClient.tsx +107 -23
  221. package/src/createZeroServer.ts +64 -29
  222. package/src/helpers/createMutators.ts +1 -1
  223. package/src/helpers/ensureLoggedIn.ts +2 -2
  224. package/src/helpers/getQueryOrMutatorAuthData.ts +11 -0
  225. package/src/helpers/{context.ts → mutatorContext.ts} +2 -6
  226. package/src/index.ts +3 -2
  227. package/src/mutations.ts +1 -1
  228. package/src/state.ts +32 -0
  229. package/src/types.ts +11 -5
  230. package/src/where.ts +33 -8
  231. package/src/zql.ts +9 -0
  232. package/types/builder.d.ts +3 -0
  233. package/types/builder.d.ts.map +1 -0
  234. package/types/cli.d.ts +3 -0
  235. package/types/cli.d.ts.map +1 -0
  236. package/types/createPermissions.d.ts +3 -27
  237. package/types/createPermissions.d.ts.map +1 -1
  238. package/types/createZeroClient.d.ts +16 -4
  239. package/types/createZeroClient.d.ts.map +1 -1
  240. package/types/createZeroServer.d.ts +33 -6
  241. package/types/createZeroServer.d.ts.map +1 -1
  242. package/types/helpers/context.d.ts.map +1 -1
  243. package/types/helpers/getQueryOrMutatorAuthData.d.ts +3 -0
  244. package/types/helpers/getQueryOrMutatorAuthData.d.ts.map +1 -0
  245. package/types/helpers/mutatorContext.d.ts +5 -0
  246. package/types/helpers/mutatorContext.d.ts.map +1 -0
  247. package/types/helpers/queryContext.d.ts +5 -0
  248. package/types/helpers/queryContext.d.ts.map +1 -0
  249. package/types/index.d.ts +3 -2
  250. package/types/index.d.ts.map +1 -1
  251. package/types/state.d.ts +8 -0
  252. package/types/state.d.ts.map +1 -0
  253. package/types/types.d.ts +5 -4
  254. package/types/types.d.ts.map +1 -1
  255. package/types/where.d.ts +3 -2
  256. package/types/where.d.ts.map +1 -1
  257. package/types/zql.d.ts +3 -0
  258. package/types/zql.d.ts.map +1 -0
  259. package/dist/cjs/build/readPermissions.cjs +0 -51
  260. package/dist/cjs/build/readPermissions.js +0 -48
  261. package/dist/cjs/build/readPermissions.js.map +0 -6
  262. package/dist/cjs/build/readPermissions.native.js +0 -56
  263. package/dist/cjs/build/readPermissions.native.js.map +0 -6
  264. package/dist/cjs/build/schema.js.map +0 -6
  265. package/dist/cjs/build/schema.native.js.map +0 -6
  266. package/dist/cjs/createClient.cjs +0 -89
  267. package/dist/cjs/createClient.js +0 -76
  268. package/dist/cjs/createClient.js.map +0 -6
  269. package/dist/cjs/createClient.native.js +0 -81
  270. package/dist/cjs/createClient.native.js.map +0 -6
  271. package/dist/cjs/createMutations.cjs +0 -50
  272. package/dist/cjs/createMutations.js +0 -43
  273. package/dist/cjs/createMutations.js.map +0 -6
  274. package/dist/cjs/createMutations.native.js +0 -50
  275. package/dist/cjs/createMutations.native.js.map +0 -6
  276. package/dist/cjs/createServer.cjs +0 -92
  277. package/dist/cjs/createServer.js +0 -71
  278. package/dist/cjs/createServer.js.map +0 -6
  279. package/dist/cjs/createServer.native.js +0 -75
  280. package/dist/cjs/createServer.native.js.map +0 -6
  281. package/dist/cjs/createZero.cjs +0 -128
  282. package/dist/cjs/createZero.js +0 -107
  283. package/dist/cjs/createZero.js.map +0 -6
  284. package/dist/cjs/createZero.native.js +0 -115
  285. package/dist/cjs/createZero.native.js.map +0 -6
  286. package/dist/cjs/helpers/clearZeroDatabase.cjs +0 -57
  287. package/dist/cjs/helpers/clearZeroDatabase.js +0 -57
  288. package/dist/cjs/helpers/clearZeroDatabase.js.map +0 -6
  289. package/dist/cjs/helpers/clearZeroDatabase.native.js +0 -71
  290. package/dist/cjs/helpers/clearZeroDatabase.native.js.map +0 -6
  291. package/dist/cjs/helpers/getAuthData.js +0 -1
  292. package/dist/cjs/helpers/getAuthData.native.js +0 -2
  293. package/dist/cjs/helpers/getDidRunPermissionCheck.js.map +0 -6
  294. package/dist/cjs/helpers/getDidRunPermissionCheck.native.js.map +0 -6
  295. package/dist/cjs/helpers/setupZeroClientGlobalEffects.cjs +0 -40
  296. package/dist/cjs/helpers/setupZeroClientGlobalEffects.js +0 -36
  297. package/dist/cjs/helpers/setupZeroClientGlobalEffects.js.map +0 -6
  298. package/dist/cjs/helpers/setupZeroClientGlobalEffects.native.js +0 -36
  299. package/dist/cjs/helpers/setupZeroClientGlobalEffects.native.js.map +0 -6
  300. package/dist/cjs/helpers/useAuthData.js +0 -1
  301. package/dist/cjs/helpers/useAuthData.native.js +0 -2
  302. package/dist/cjs/helpers/useZDB.cjs +0 -70
  303. package/dist/cjs/helpers/useZDB.js +0 -51
  304. package/dist/cjs/helpers/useZDB.js.map +0 -6
  305. package/dist/cjs/helpers/useZDB.native.js +0 -68
  306. package/dist/cjs/helpers/useZDB.native.js.map +0 -6
  307. package/dist/cjs/helpers/zeroEmitter.js.map +0 -6
  308. package/dist/cjs/helpers/zeroEmitter.native.js.map +0 -6
  309. package/dist/esm/build/readPermissions.js +0 -36
  310. package/dist/esm/build/readPermissions.js.map +0 -6
  311. package/dist/esm/build/readPermissions.mjs +0 -28
  312. package/dist/esm/build/readPermissions.mjs.map +0 -1
  313. package/dist/esm/build/readPermissions.native.js +0 -34
  314. package/dist/esm/build/readPermissions.native.js.map +0 -1
  315. package/dist/esm/build/schema.js +0 -7
  316. package/dist/esm/build/schema.js.map +0 -6
  317. package/dist/esm/build/schema.mjs +0 -4
  318. package/dist/esm/build/schema.mjs.map +0 -1
  319. package/dist/esm/build/schema.native.js +0 -4
  320. package/dist/esm/build/schema.native.js.map +0 -1
  321. package/dist/esm/createClient.js +0 -68
  322. package/dist/esm/createClient.js.map +0 -6
  323. package/dist/esm/createClient.mjs +0 -66
  324. package/dist/esm/createClient.mjs.map +0 -1
  325. package/dist/esm/createClient.native.js +0 -74
  326. package/dist/esm/createClient.native.js.map +0 -1
  327. package/dist/esm/createMutations.js +0 -27
  328. package/dist/esm/createMutations.js.map +0 -6
  329. package/dist/esm/createMutations.mjs +0 -27
  330. package/dist/esm/createMutations.mjs.map +0 -1
  331. package/dist/esm/createMutations.native.js +0 -29
  332. package/dist/esm/createMutations.native.js.map +0 -1
  333. package/dist/esm/createServer.js +0 -54
  334. package/dist/esm/createServer.js.map +0 -6
  335. package/dist/esm/createServer.mjs +0 -58
  336. package/dist/esm/createServer.mjs.map +0 -1
  337. package/dist/esm/createServer.native.js +0 -61
  338. package/dist/esm/createServer.native.js.map +0 -1
  339. package/dist/esm/createZero.js +0 -99
  340. package/dist/esm/createZero.js.map +0 -6
  341. package/dist/esm/createZero.mjs +0 -105
  342. package/dist/esm/createZero.mjs.map +0 -1
  343. package/dist/esm/createZero.native.js +0 -119
  344. package/dist/esm/createZero.native.js.map +0 -1
  345. package/dist/esm/helpers/clearZeroDatabase.js +0 -42
  346. package/dist/esm/helpers/clearZeroDatabase.js.map +0 -6
  347. package/dist/esm/helpers/clearZeroDatabase.mjs +0 -34
  348. package/dist/esm/helpers/clearZeroDatabase.mjs.map +0 -1
  349. package/dist/esm/helpers/clearZeroDatabase.native.js +0 -50
  350. package/dist/esm/helpers/clearZeroDatabase.native.js.map +0 -1
  351. package/dist/esm/helpers/getAuthData.js +0 -1
  352. package/dist/esm/helpers/getAuthData.js.map +0 -6
  353. package/dist/esm/helpers/getAuthData.mjs +0 -2
  354. package/dist/esm/helpers/getAuthData.native.js +0 -2
  355. package/dist/esm/helpers/getDidRunPermissionCheck.js +0 -5
  356. package/dist/esm/helpers/getDidRunPermissionCheck.js.map +0 -6
  357. package/dist/esm/helpers/getDidRunPermissionCheck.mjs +0 -4
  358. package/dist/esm/helpers/getDidRunPermissionCheck.mjs.map +0 -1
  359. package/dist/esm/helpers/getDidRunPermissionCheck.native.js +0 -6
  360. package/dist/esm/helpers/getDidRunPermissionCheck.native.js.map +0 -1
  361. package/dist/esm/helpers/setupZeroClientGlobalEffects.js +0 -40
  362. package/dist/esm/helpers/setupZeroClientGlobalEffects.js.map +0 -6
  363. package/dist/esm/helpers/setupZeroClientGlobalEffects.mjs +0 -41
  364. package/dist/esm/helpers/setupZeroClientGlobalEffects.mjs.map +0 -1
  365. package/dist/esm/helpers/setupZeroClientGlobalEffects.native.js +0 -41
  366. package/dist/esm/helpers/setupZeroClientGlobalEffects.native.js.map +0 -1
  367. package/dist/esm/helpers/useAuthData.js +0 -1
  368. package/dist/esm/helpers/useAuthData.js.map +0 -6
  369. package/dist/esm/helpers/useAuthData.mjs +0 -2
  370. package/dist/esm/helpers/useAuthData.native.js +0 -2
  371. package/dist/esm/helpers/useZDB.js +0 -38
  372. package/dist/esm/helpers/useZDB.js.map +0 -6
  373. package/dist/esm/helpers/useZDB.mjs +0 -47
  374. package/dist/esm/helpers/useZDB.mjs.map +0 -1
  375. package/dist/esm/helpers/useZDB.native.js +0 -55
  376. package/dist/esm/helpers/useZDB.native.js.map +0 -1
  377. package/dist/esm/helpers/zeroEmitter.js +0 -6
  378. package/dist/esm/helpers/zeroEmitter.js.map +0 -6
  379. package/dist/esm/helpers/zeroEmitter.mjs +0 -4
  380. package/dist/esm/helpers/zeroEmitter.mjs.map +0 -1
  381. package/dist/esm/helpers/zeroEmitter.native.js +0 -4
  382. package/dist/esm/helpers/zeroEmitter.native.js.map +0 -1
  383. /package/dist/cjs/helpers/{getAuthData.cjs → queryOrMutatorAuthData.cjs} +0 -0
  384. /package/dist/cjs/helpers/{getAuthData.js.map → queryOrMutatorAuthData.js.map} +0 -0
  385. /package/dist/{esm/helpers/getAuthData.mjs.map → cjs/helpers/queryOrMutatorAuthData.native.js.map} +0 -0
  386. /package/dist/cjs/helpers/{useAuthData.cjs → queryOrMutatorContext.cjs} +0 -0
  387. /package/dist/cjs/helpers/{getAuthData.native.js.map → queryOrMutatorContext.js.map} +0 -0
  388. /package/dist/{esm/helpers/getAuthData.native.js.map → cjs/helpers/queryOrMutatorContext.native.js.map} +0 -0
  389. /package/dist/{cjs/helpers/useAuthData.js.map → esm/helpers/queryOrMutatorAuthData.js.map} +0 -0
  390. /package/dist/esm/helpers/{useAuthData.mjs.map → queryOrMutatorAuthData.mjs.map} +0 -0
  391. /package/dist/esm/helpers/{useAuthData.native.js.map → queryOrMutatorAuthData.native.js.map} +0 -0
  392. /package/dist/{cjs/helpers/useAuthData.native.js.map → esm/helpers/queryOrMutatorContext.js.map} +0 -0
@@ -4,65 +4,31 @@ import type {
4
4
  Query,
5
5
  Schema as ZeroSchema,
6
6
  } from '@rocicorp/zero'
7
- import { ANYONE_CAN, definePermissions } from '@rocicorp/zero'
8
- import { ensure, EnsureError, objectEntries } from '@vxrn/helpers'
9
- import { runWithContext } from './helpers/context'
7
+ import { ensure, EnsureError } from '@vxrn/helpers'
10
8
  import { setDidRunPermissionCheck } from './helpers/didRunPermissionCheck'
9
+ import { mutatorContext } from './helpers/mutatorContext'
11
10
  import { prettyFormatZeroQuery } from './helpers/prettyFormatZeroQuery'
12
- import type {
13
- AuthData,
14
- Can,
15
- MutatorContext,
16
- TableName,
17
- Transaction,
18
- Where,
19
- } from './types'
11
+ import type { AuthData, Can, TableName, Transaction, Where } from './types'
20
12
  import { getWhereTableName } from './where'
21
13
 
22
14
  export function createPermissions<Schema extends ZeroSchema>({
23
15
  environment,
24
16
  schema,
25
- models,
26
- getContext,
27
17
  }: {
28
18
  environment: 'client' | 'server'
29
19
  schema: Schema
30
- models: any
31
- getContext: () => MutatorContext
32
20
  }) {
33
- type PermissionPresetActions =
34
- | 'read'
35
- | 'write'
36
- | 'insert'
37
- | 'update'
38
- | 'delete'
39
- | 'select'
40
-
41
- type PermissionsConditions = Partial<
42
- Record<PermissionPresetActions | (string & {}), Condition | boolean>
43
- >
21
+ type PermissionReturn = Condition | boolean
44
22
 
45
23
  type PermissionsWhere<Table extends TableName = TableName> = Where<
46
24
  Table,
47
- PermissionsConditions
25
+ PermissionReturn
48
26
  >
49
27
 
50
- const fallbackActions: Record<string, string> = {
51
- select: 'read',
52
- insert: 'write',
53
- update: 'write',
54
- upsert: 'write',
55
- delete: 'write',
56
- }
57
-
58
- function buildPermissionQuery<
59
- PermissionWhere extends PermissionsWhere,
60
- Action extends string,
61
- >(
28
+ function buildPermissionQuery<PermissionWhere extends PermissionsWhere>(
62
29
  authData: AuthData | null,
63
30
  eb: ExpressionBuilder<any, any>,
64
31
  permissionWhere: PermissionWhere,
65
- action: Action,
66
32
  // TODO until i can get a working PickPrimaryKeys<'message'>
67
33
  objOrId: Record<string, any> | string
68
34
  ) {
@@ -79,22 +45,17 @@ export function createPermissions<Schema extends ZeroSchema>({
79
45
  }
80
46
 
81
47
  const primaryKeys = tableSchema.primaryKey
82
- const permissionQueryBuilder = permissionWhere(eb, authData)
83
- const fallbackAction = fallbackActions[action]
48
+ const permissionReturn = permissionWhere(eb, authData)
84
49
 
85
- const permissionCondition =
86
- permissionQueryBuilder[action] ||
87
- (fallbackAction ? permissionQueryBuilder[fallbackAction] : undefined)
88
-
89
- if (permissionCondition == null) {
90
- throw new Error(`No permission defined for ${action} (or ${fallbackAction})`)
50
+ if (permissionReturn == null) {
51
+ throw new Error(`No permission defined for ${tableName}`)
91
52
  }
92
53
 
93
- if (permissionCondition === true) {
54
+ if (permissionReturn === true) {
94
55
  return eb.cmpLit(true, '=', true)
95
56
  }
96
57
 
97
- if (permissionCondition === false) {
58
+ if (permissionReturn === false) {
98
59
  return eb.cmpLit(true, '=', false)
99
60
  }
100
61
 
@@ -105,39 +66,27 @@ export function createPermissions<Schema extends ZeroSchema>({
105
66
  primaryKeyWheres.push(eb.cmp(key as any, value))
106
67
  }
107
68
 
108
- return eb.and(permissionCondition, ...primaryKeyWheres)
69
+ return eb.and(permissionReturn, ...primaryKeyWheres)
109
70
  }
110
71
 
111
- const can: Can = async (where, action, obj) => {
112
- const ctx = getContext()
113
- const tableName = getWhereTableName(where)
114
- if (!tableName) {
115
- throw new Error(`Must use where('table') style where to pass to can()`)
116
- }
117
-
72
+ const can: Can = async (where, obj) => {
118
73
  // on client we always allow! we only check on server (like zero does)
119
74
  if (environment === 'server') {
120
- await ensurePermission(
121
- ctx.tx,
122
- ctx.authData,
123
- tableName,
124
- where,
125
- action as string,
126
- obj
127
- )
75
+ const ctx = mutatorContext()
76
+ const tableName = getWhereTableName(where)
77
+ if (!tableName) {
78
+ throw new Error(`Must use where('table') style where to pass to can()`)
79
+ }
80
+ await ensurePermission(ctx.tx, ctx.authData, tableName, where, obj)
128
81
  setDidRunPermissionCheck(ctx)
129
82
  }
130
83
  }
131
84
 
132
- async function ensurePermission<
133
- PW extends PermissionsWhere,
134
- Action extends keyof ReturnType<PW>,
135
- >(
85
+ async function ensurePermission(
136
86
  tx: Transaction,
137
87
  authData: AuthData | null,
138
88
  tableName: TableName,
139
89
  where: Where,
140
- actionIn: Action,
141
90
  obj: any // TODO until i can get a working PickPrimaryKeys<'message'>
142
91
  ): Promise<void> {
143
92
  if (authData?.role === 'admin') {
@@ -145,16 +94,13 @@ export function createPermissions<Schema extends ZeroSchema>({
145
94
  return
146
95
  }
147
96
 
148
- const action = String(actionIn)
149
- const name = `${tableName}.${action}`
150
- // @ts-ignore TODO its the right type but need to figure out better way to get TableName
151
97
  const queryBase = tx.query[tableName] as Query<any, any>
152
98
  let query: Query<any, any, any> | null = null
153
99
 
154
100
  try {
155
101
  query = queryBase
156
102
  .where((eb) => {
157
- return buildPermissionQuery(authData, eb, where, action, obj)
103
+ return buildPermissionQuery(authData, eb, where, obj)
158
104
  })
159
105
  .one()
160
106
 
@@ -174,56 +120,8 @@ export function createPermissions<Schema extends ZeroSchema>({
174
120
  }
175
121
  }
176
122
 
177
- const readPermissions = definePermissions<AuthData, Schema>(schema, async () => {
178
- const permissionsEntries = await Promise.all(
179
- objectEntries(models)
180
- // non permissioned models dont turn into read permissions
181
- .filter(([_, model]) => !!model.permissions)
182
- .map(async ([key, model]) => {
183
- return await runWithContext(
184
- {
185
- authData: { id: '', role: undefined, email: '' },
186
- } as any,
187
- () => {
188
- return [
189
- key,
190
- {
191
- row: {
192
- select: [
193
- (authData: AuthData, eb: ExpressionBuilder<any, any>) => {
194
- const out = model.permissions(eb, authData).read
195
-
196
- if (out === true) {
197
- return eb.and()
198
- }
199
-
200
- if (out === false) {
201
- return eb.cmpLit(true, '=', false)
202
- }
203
-
204
- return out
205
- },
206
- ],
207
- // we have permissions on these through our model system with custom mutators:
208
- insert: ANYONE_CAN,
209
- update: ANYONE_CAN,
210
- delete: ANYONE_CAN,
211
- },
212
- },
213
- ]
214
- }
215
- )
216
- })
217
- )
218
-
219
- const permissions = Object.fromEntries(permissionsEntries)
220
-
221
- return permissions as any
222
- })
223
-
224
123
  return {
225
124
  can,
226
125
  buildPermissionQuery,
227
- readPermissions,
228
126
  }
229
127
  }
@@ -1,13 +1,22 @@
1
- import type { Row, Zero, ZeroOptions, Schema as ZeroSchema } from '@rocicorp/zero'
1
+ import type {
2
+ HumanReadable,
3
+ Query,
4
+ ReadonlyJSONValue,
5
+ Row,
6
+ SyncedQuery,
7
+ Zero,
8
+ ZeroOptions,
9
+ Schema as ZeroSchema,
10
+ } from '@rocicorp/zero'
11
+ import { syncedQuery } from '@rocicorp/zero'
2
12
  import { useZero, ZeroProvider, useQuery as zeroUseQuery } from '@rocicorp/zero/react'
3
13
  import { createEmitter, mapObject } from '@vxrn/helpers'
4
14
  import { createContext, use, useMemo, type ReactNode } from 'react'
5
15
  import { createPermissions } from './createPermissions'
6
- import { context } from './helpers/context'
7
16
  import { createMutators } from './helpers/createMutators'
8
17
  import { prettyFormatZeroQuery } from './helpers/prettyFormatZeroQuery'
9
18
  import { useZeroDebug } from './helpers/useZeroDebug'
10
-
19
+ import { setAuthData, setSchema } from './state'
11
20
  import type { AuthData, GenericModels, GetZeroMutators, ZeroEvent } from './types'
12
21
 
13
22
  export function createZeroClient<
@@ -18,7 +27,9 @@ export function createZeroClient<
18
27
  type ZeroInstance = Zero<Schema, ZeroMutators>
19
28
  type TableName = keyof ZeroInstance['query']
20
29
 
21
- const modelPermissions = mapObject(models, (val) => val.permissions) as {
30
+ setSchema(schema)
31
+
32
+ const modelWritePermissions = mapObject(models, (val) => val.permissions) as {
22
33
  [K in TableName]: K extends keyof Models ? Models[K]['permissions'] : never
23
34
  }
24
35
 
@@ -34,8 +45,6 @@ export function createZeroClient<
34
45
 
35
46
  const permissionsHelpers = createPermissions<Schema>({
36
47
  schema,
37
- models,
38
- getContext: context,
39
48
  environment: 'client',
40
49
  })
41
50
 
@@ -52,22 +61,15 @@ export function createZeroClient<
52
61
  // and things generally aren't changing with permissions rapidly, so lets
53
62
  // cache the last results and use that when first rendering, they will
54
63
  // always update once the query resolves
55
- function usePermission<
56
- K extends TableName,
57
- Action extends 'insert' | 'update' | 'delete' | 'select',
58
- >(
64
+ function usePermission<K extends TableName>(
59
65
  table: K,
60
- action: Action,
61
66
  objOrId: string | Partial<Row<Schema['tables'][K]>> | undefined,
62
67
  enabled = typeof objOrId !== 'undefined',
63
68
  debug = false
64
69
  ): boolean | null {
65
- // we fallback to just table.action, to avoid flickers for now
66
- const keyBase = `${String(table)}${action}`
67
- const key = `${keyBase}${typeof objOrId === 'string' ? objOrId : JSON.stringify(objOrId)}`
68
70
  // const cacheVal = permissionCache.get(key) ?? permissionCache.get(keyBase)
69
71
  const authData = useAuthData()
70
- const permission = modelPermissions[table]
72
+ const permission = modelWritePermissions[table]
71
73
 
72
74
  const query = (() => {
73
75
  let baseQuery = zero.query[table].one()
@@ -81,7 +83,6 @@ export function createZeroClient<
81
83
  authData,
82
84
  eb,
83
85
  permission,
84
- action,
85
86
  objOrId as any
86
87
  )
87
88
  })
@@ -94,7 +95,7 @@ export function createZeroClient<
94
95
  if (debug) {
95
96
  console.info(
96
97
  `usePermission()`,
97
- { data, status, action, authData, permission },
98
+ { data, status, authData, permission },
98
99
  prettyFormatZeroQuery(query)
99
100
  )
100
101
  }
@@ -110,16 +111,97 @@ export function createZeroClient<
110
111
  return allowed
111
112
  }
112
113
 
113
- const useQuery: typeof zeroUseQuery = (query, options) => {
114
- if (disable) {
115
- return [null, { type: 'unknown' }] as never
116
- }
114
+ type PlainQueryFn<
115
+ TArg = any,
116
+ TReturn extends Query<any, any, any> = Query<any, any, any>,
117
+ > = (args: TArg) => TReturn
118
+
119
+ type UseQueryOptions = {
120
+ enabled?: boolean | undefined
121
+ ttl?: 'always' | 'never' | number | undefined
122
+ }
123
+
124
+ type QueryResultDetails = ReturnType<typeof zeroUseQuery>[1]
125
+ type QueryResult<TReturn> = readonly [HumanReadable<TReturn>, QueryResultDetails]
117
126
 
118
- const out = zeroUseQuery(query, options)
127
+ const queryCache = new Map<string, SyncedQuery<any, any, any, any, any>>()
128
+
129
+ const parseAny = (x: unknown[]): [ReadonlyJSONValue] => [x[0] as ReadonlyJSONValue]
130
+
131
+ // Overload 1: Original API - Query or SyncedQuery with options
132
+ function useQuery<TTable extends keyof Schema['tables'] & string, TReturn>(
133
+ query:
134
+ | Query<Schema, TTable, TReturn>
135
+ | SyncedQuery<any, any, any, any, Query<Schema, TTable, TReturn>>,
136
+ options?: UseQueryOptions | boolean
137
+ ): QueryResult<TReturn>
138
+
139
+ // Overload 2: Plain function with params
140
+ function useQuery<TArg, TTable extends keyof Schema['tables'] & string, TReturn>(
141
+ fn: PlainQueryFn<TArg, Query<Schema, TTable, TReturn>>,
142
+ params: TArg,
143
+ options?: UseQueryOptions | boolean
144
+ ): QueryResult<TReturn>
145
+
146
+ // Overload 3: Plain function with no params
147
+ function useQuery<TTable extends keyof Schema['tables'] & string, TReturn>(
148
+ fn: PlainQueryFn<void, Query<Schema, TTable, TReturn>>,
149
+ options?: UseQueryOptions | boolean
150
+ ): QueryResult<TReturn>
151
+
152
+ // Implementation - keep it simple with any
153
+ function useQuery(...args: any[]): any {
154
+ const [queryOrFn, paramsOrOptions, optionsArg] = args
155
+
156
+ // Detect which calling pattern is being used
157
+ const isPlainFunction = typeof queryOrFn === 'function' && !('queryName' in queryOrFn)
158
+
159
+ const { actualQuery, options } = useMemo(() => {
160
+ if (!isPlainFunction) {
161
+ // Pattern 1: Original API - useQuery(query, options)
162
+ return {
163
+ actualQuery: queryOrFn,
164
+ options: paramsOrOptions,
165
+ }
166
+ }
167
+
168
+ const fn = queryOrFn
169
+ const queryName = fn.name || 'anonymousQuery'
170
+
171
+ // Determine if this is Pattern 2 (with params) or Pattern 3 (no params)
172
+ const hasParams =
173
+ optionsArg !== undefined ||
174
+ (paramsOrOptions &&
175
+ typeof paramsOrOptions === 'object' &&
176
+ !('enabled' in paramsOrOptions) &&
177
+ !('ttl' in paramsOrOptions))
178
+
179
+ const params = hasParams ? paramsOrOptions : undefined
180
+ const opts = hasParams ? optionsArg : paramsOrOptions
181
+
182
+ let synced = queryCache.get(queryName)
183
+ if (!synced) {
184
+ synced = syncedQuery(queryName, parseAny, (arg: ReadonlyJSONValue) => {
185
+ return fn(arg)
186
+ })
187
+ queryCache.set(queryName, synced)
188
+ }
189
+
190
+ // Call the SyncedQuery with params if provided
191
+ const query = params !== undefined ? (synced as any)(params) : synced
192
+
193
+ return { actualQuery: query, options: opts }
194
+ }, [queryOrFn, paramsOrOptions, optionsArg, isPlainFunction])
195
+
196
+ const out = zeroUseQuery(actualQuery, options)
119
197
 
120
198
  if (process.env.NODE_ENV === 'development') {
121
199
  // biome-ignore lint/correctness/useHookAtTopLevel: ok
122
- useZeroDebug(query, options, out)
200
+ useZeroDebug(actualQuery, options, out)
201
+ }
202
+
203
+ if (disable) {
204
+ return [null, { type: 'unknown' }] as never
123
205
  }
124
206
 
125
207
  return out
@@ -134,6 +216,8 @@ export function createZeroClient<
134
216
  authData?: any
135
217
  }) => {
136
218
  const mutators = useMemo(() => {
219
+ setAuthData(authData)
220
+
137
221
  return createMutators({
138
222
  models,
139
223
  environment: 'client',
@@ -1,12 +1,19 @@
1
- import type { Query, Schema as ZeroSchema } from '@rocicorp/zero'
1
+ import type {
2
+ HumanReadable,
3
+ Query,
4
+ ReadonlyJSONValue,
5
+ SyncedQuery,
6
+ Schema as ZeroSchema,
7
+ } from '@rocicorp/zero'
2
8
  import type { TransactionProviderInput } from '@rocicorp/zero/pg'
3
- import { PostgresJSConnection, PushProcessor } from '@rocicorp/zero/pg'
4
- import { ZQLDatabase } from '@rocicorp/zero/server'
9
+ import { handleGetQueriesRequest, PushProcessor } from '@rocicorp/zero/pg'
10
+ import { zeroNodePg } from '@rocicorp/zero/server/adapters/pg'
5
11
  import { assertString, randomId } from '@vxrn/helpers'
6
- import postgres from 'postgres'
12
+ import { Pool } from 'pg'
7
13
  import { createPermissions } from './createPermissions'
8
- import { context, isInZeroMutation } from './helpers/context'
9
14
  import { createMutators } from './helpers/createMutators'
15
+ import { isInZeroMutation, mutatorContext } from './helpers/mutatorContext'
16
+ import { setAuthData, setSchema } from './state'
10
17
  import type {
11
18
  AsyncAction,
12
19
  AuthData,
@@ -19,11 +26,16 @@ export function createZeroServer<
19
26
  Schema extends ZeroSchema,
20
27
  Models extends GenericModels,
21
28
  ServerActions extends Record<string, unknown>,
29
+ Queries extends Record<string, SyncedQuery<any, any, any, any, any>> = Record<
30
+ string,
31
+ never
32
+ >,
22
33
  >({
23
34
  createServerActions,
24
35
  database,
25
36
  schema,
26
37
  models,
38
+ queries,
27
39
  }: {
28
40
  /**
29
41
  * The DB connection string, same as ZERO_UPSTREAM_DB
@@ -32,26 +44,25 @@ export function createZeroServer<
32
44
  schema: Schema
33
45
  models: Models
34
46
  createServerActions: () => ServerActions
47
+ queries?: Queries
35
48
  }) {
36
- const dbString = assertString(database, `"database" prop`)
37
- const db = postgres(dbString)
38
-
39
- const zeroServerDatabase = new ZQLDatabase(
40
- new PostgresJSConnection(
41
- // TODO if you have duplicate postgres due to zero having its own in node_modules TS types break
42
- db as any
43
- ),
44
- schema
49
+ setSchema(schema)
50
+
51
+ const dbString = assertString(database, `createZeroServer "database"`)
52
+
53
+ const zeroDb = zeroNodePg(
54
+ schema,
55
+ new Pool({
56
+ connectionString: dbString,
57
+ })
45
58
  )
46
59
 
47
60
  const permissions = createPermissions<Schema>({
48
61
  environment: 'server',
49
62
  schema,
50
- models,
51
- getContext: context,
52
63
  })
53
64
 
54
- const processor = new PushProcessor(zeroServerDatabase)
65
+ const processor = new PushProcessor(zeroDb)
55
66
 
56
67
  const handleMutationRequest = async ({
57
68
  authData,
@@ -96,6 +107,33 @@ export function createZeroServer<
96
107
  }
97
108
  }
98
109
 
110
+ const handleQueryRequest = async ({
111
+ authData,
112
+ request,
113
+ }: {
114
+ authData: AuthData | null
115
+ request: Request
116
+ }) => {
117
+ function getQuery(name: string, args: readonly ReadonlyJSONValue[]) {
118
+ const q = queries?.[name]
119
+ if (!q) {
120
+ throw new Error(`No such query: ${name}`)
121
+ }
122
+
123
+ return {
124
+ // @ts-expect-error zero bug atm
125
+ query: q(...args),
126
+ }
127
+ }
128
+
129
+ setAuthData(authData || {})
130
+ const response = await handleGetQueriesRequest(getQuery, schema, request)
131
+
132
+ return {
133
+ response,
134
+ }
135
+ }
136
+
99
137
  const mutate = async (
100
138
  run: (tx: Transaction, mutators: GetZeroMutators<Models>) => Promise<void>,
101
139
  authData?: Pick<AuthData, 'email' | 'id'> & Partial<AuthData>
@@ -129,11 +167,11 @@ export function createZeroServer<
129
167
  >(query: CB): Promise<Returns> {
130
168
  try {
131
169
  if (isInZeroMutation()) {
132
- const { tx } = context()
170
+ const { tx } = mutatorContext()
133
171
  return await query(tx)
134
172
  }
135
173
  // @ts-ignore type
136
- const output = await zeroServerDatabase.transaction(query, dummyTransactionInput)
174
+ const output = await zeroDb.transaction(query, dummyTransactionInput)
137
175
  return output as any
138
176
  } catch (err) {
139
177
  console.error(`Error running transaction(): ${err}`)
@@ -141,16 +179,12 @@ export function createZeroServer<
141
179
  }
142
180
  }
143
181
 
144
- type ZeroQueryFn<Response extends Query<any, any>> = (
145
- query: Transaction['query']
146
- ) => Promise<Response>
147
-
148
- async function query<GetQuery extends ZeroQueryFn<any>>(
149
- cb: GetQuery
150
- ): Promise<ReturnType<GetQuery>> {
151
- return await transaction(async (tx) => {
152
- return await cb(tx.query)
153
- })
182
+ function query<R>(
183
+ cb: (q: Transaction['query']) => Query<Schema, any, R>
184
+ ): Promise<HumanReadable<R>> {
185
+ return transaction(async (tx) => {
186
+ return cb(tx.query)
187
+ }) as any
154
188
  }
155
189
 
156
190
  // This is needed temporarily and will be cleaned up in the future.
@@ -163,6 +197,7 @@ export function createZeroServer<
163
197
 
164
198
  return {
165
199
  handleMutationRequest,
200
+ handleQueryRequest,
166
201
  transaction,
167
202
  mutate,
168
203
  query,
@@ -7,7 +7,7 @@ import type {
7
7
  MutatorContext,
8
8
  Transaction,
9
9
  } from '../types'
10
- import { runWithContext } from './context'
10
+ import { runWithContext } from './mutatorContext'
11
11
 
12
12
  export function createMutators<Models extends GenericModels>({
13
13
  environment,
@@ -1,9 +1,9 @@
1
1
  import { ensure } from '@vxrn/helpers'
2
2
  import type { AuthData } from '../types'
3
- import { context } from './context'
3
+ import { mutatorContext } from './mutatorContext'
4
4
 
5
5
  export const ensureLoggedIn = (): AuthData => {
6
- const { authData } = context()
6
+ const { authData } = mutatorContext()
7
7
  ensure(authData, 'logged in')
8
8
  return authData
9
9
  }
@@ -0,0 +1,11 @@
1
+ import { getAuthData } from '../state'
2
+ import type { AuthData } from '../types'
3
+ import { isInZeroMutation, mutatorContext } from './mutatorContext'
4
+
5
+ export function getQueryOrMutatorAuthData(): AuthData {
6
+ if (isInZeroMutation()) {
7
+ return mutatorContext().authData as AuthData
8
+ }
9
+
10
+ return getAuthData()
11
+ }
@@ -1,16 +1,12 @@
1
1
  import { createAsyncContext } from '@vxrn/helpers'
2
2
  import type { MutatorContext } from '../types'
3
3
 
4
- // TODO likely should be called "DataContext" or "ZeroContext" as its useful for permissions outside mutators
5
-
6
4
  const asyncContext = createAsyncContext<MutatorContext>()
7
5
 
8
- // TODO probably rename mutatorContext()
9
-
10
- export function context(): MutatorContext {
6
+ export function mutatorContext(): MutatorContext {
11
7
  const currentContext = asyncContext.get()
12
8
  if (!currentContext) {
13
- throw new Error('context must be called within a mutator')
9
+ throw new Error('mutatorContext must be called within a mutator')
14
10
  }
15
11
 
16
12
  return currentContext
package/src/index.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  export * from './createPermissions'
2
2
  export * from './helpers/batchQuery'
3
- export * from './helpers/context'
4
3
  export * from './helpers/createMutators'
5
4
  export * from './helpers/ensureLoggedIn'
5
+ export * from './helpers/mutatorContext'
6
6
 
7
+ export * from './createZeroClient'
7
8
  export * from './mutations'
8
9
  export * from './where'
9
- export * from './createZeroClient'
10
+ export * from './zql'
10
11
 
11
12
  export type * from './types'
package/src/mutations.ts CHANGED
@@ -89,7 +89,7 @@ export function mutations<
89
89
 
90
90
  // only validate on the server
91
91
  if (process.env.VITE_ENVIRONMENT === 'ssr') {
92
- await ctx.can(permissions, action, obj)
92
+ await ctx.can(permissions, obj)
93
93
  }
94
94
  }
95
95