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
package/src/cli.ts ADDED
@@ -0,0 +1,511 @@
1
+ #!/usr/bin/env node
2
+ import { ModelToValibot } from '@sinclair/typebox-codegen/model'
3
+ import { TypeScriptToModel } from '@sinclair/typebox-codegen/typescript'
4
+ import { defineCommand, runMain } from 'citty'
5
+ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'
6
+ import { basename, resolve } from 'node:path'
7
+ import * as ts from 'typescript'
8
+
9
+ const generateQueries = defineCommand({
10
+ meta: {
11
+ name: 'generate-queries',
12
+ description: 'Generate server-side query validators from TypeScript query functions',
13
+ },
14
+ args: {
15
+ dir: {
16
+ type: 'positional',
17
+ description: 'Directory containing query files',
18
+ required: false,
19
+ default: '.',
20
+ },
21
+ },
22
+ async run({ args }) {
23
+ const dir = resolve(args.dir)
24
+
25
+ const { readdirSync, writeFileSync } = await import('node:fs')
26
+
27
+ const files = readdirSync(dir).filter((f) => f.endsWith('.ts'))
28
+
29
+ const allQueries: Array<{ name: string; params: string; valibotCode: string }> = []
30
+
31
+ // process files in parallel
32
+ const results = await Promise.all(
33
+ files.map(async (file) => {
34
+ const filePath = resolve(dir, file)
35
+ const queries: typeof allQueries = []
36
+
37
+ try {
38
+ const content = readFileSync(filePath, 'utf-8')
39
+
40
+ const sourceFile = ts.createSourceFile(
41
+ filePath,
42
+ content,
43
+ ts.ScriptTarget.Latest,
44
+ true
45
+ )
46
+
47
+ ts.forEachChild(sourceFile, (node) => {
48
+ if (ts.isVariableStatement(node)) {
49
+ const exportModifier = node.modifiers?.find(
50
+ (m) => m.kind === ts.SyntaxKind.ExportKeyword
51
+ )
52
+ if (!exportModifier) return
53
+
54
+ const declaration = node.declarationList.declarations[0]
55
+ if (!declaration || !ts.isVariableDeclaration(declaration)) return
56
+
57
+ const name = declaration.name.getText(sourceFile)
58
+
59
+ if (
60
+ declaration.initializer &&
61
+ ts.isArrowFunction(declaration.initializer)
62
+ ) {
63
+ const params = declaration.initializer.parameters
64
+ let paramType = 'void'
65
+
66
+ if (params.length > 0) {
67
+ const param = params[0]!
68
+ paramType = param.type?.getText(sourceFile) || 'unknown'
69
+ }
70
+
71
+ try {
72
+ const typeString = `type QueryParams = ${paramType}`
73
+ const model = TypeScriptToModel.Generate(typeString)
74
+ const valibotCode = ModelToValibot.Generate(model)
75
+
76
+ queries.push({ name, params: paramType, valibotCode })
77
+ } catch (err) {
78
+ console.error(`✗ ${name}: ${err}`)
79
+ }
80
+ }
81
+ }
82
+ })
83
+ } catch (err) {
84
+ console.error(`Error processing ${file}:`, err)
85
+ }
86
+
87
+ return queries
88
+ })
89
+ )
90
+
91
+ allQueries.push(...results.flat())
92
+ console.info(`✓ ${allQueries.length} query validators`)
93
+ },
94
+ })
95
+
96
+ function generateServerQueriesFile(
97
+ queries: Array<{ name: string; params: string; valibotCode: string }>
98
+ ) {
99
+ const imports = `import * as v from 'valibot'\nimport * as queries from './queries'\n`
100
+
101
+ const validators = queries
102
+ .map((q) => {
103
+ // extract just the schema definition (without import and type export)
104
+ const lines = q.valibotCode.split('\n').filter((l) => l.trim())
105
+ // find line starting with "export const QueryParams"
106
+ const schemaLineIndex = lines.findIndex((l) =>
107
+ l.startsWith('export const QueryParams')
108
+ )
109
+ if (schemaLineIndex === -1) {
110
+ return `export const ${q.name}Schema = v.void()`
111
+ }
112
+
113
+ // get the full schema (might be multiline)
114
+ const schemaLines: string[] = []
115
+ let openBraces = 0
116
+ let started = false
117
+
118
+ for (let i = schemaLineIndex; i < lines.length; i++) {
119
+ const line = lines[i]!
120
+ const cleaned = started ? line : line.replace('export const QueryParams = ', '')
121
+ schemaLines.push(cleaned)
122
+ started = true
123
+
124
+ // count braces to know when we're done
125
+ openBraces += (cleaned.match(/\{/g) || []).length
126
+ openBraces -= (cleaned.match(/\}/g) || []).length
127
+ openBraces += (cleaned.match(/\(/g) || []).length
128
+ openBraces -= (cleaned.match(/\)/g) || []).length
129
+
130
+ // done when braces are balanced and we have at least one line
131
+ if (openBraces === 0 && schemaLines.length > 0) {
132
+ break
133
+ }
134
+ }
135
+
136
+ const schemaDef = schemaLines.join('\n')
137
+ return `export const ${q.name}Schema = ${schemaDef}`
138
+ })
139
+ .join('\n\n')
140
+
141
+ const queryMap = `\nexport const queryValidators = {\n${queries.map((q) => ` ${q.name}: ${q.name}Schema,`).join('\n')}\n} as const\n`
142
+
143
+ return imports + '\n' + validators + '\n' + queryMap
144
+ }
145
+
146
+ const generate = defineCommand({
147
+ meta: {
148
+ name: 'generate',
149
+ description: 'Generate models, types, tables, and query validators',
150
+ },
151
+ args: {
152
+ dir: {
153
+ type: 'positional',
154
+ description: 'Base directory (defaults to src/data)',
155
+ required: false,
156
+ default: 'src/data',
157
+ },
158
+ watch: {
159
+ type: 'boolean',
160
+ description: 'Watch for changes and regenerate',
161
+ required: false,
162
+ default: false,
163
+ },
164
+ after: {
165
+ type: 'string',
166
+ description: 'Command to run after generation completes',
167
+ required: false,
168
+ },
169
+ },
170
+ async run({ args }) {
171
+ const baseDir = resolve(args.dir)
172
+ const modelsDir = resolve(baseDir, 'models')
173
+ const generatedDir = resolve(baseDir, 'generated')
174
+ const queriesDir = resolve(baseDir, 'queries')
175
+
176
+ const runGenerate = async () => {
177
+ // ensure generated dir exists
178
+ if (!existsSync(generatedDir)) {
179
+ mkdirSync(generatedDir, { recursive: true })
180
+ }
181
+
182
+ // read all model files and check for schemas in parallel
183
+ const allModelFiles = readdirSync(modelsDir)
184
+ .filter((f) => f.endsWith('.ts'))
185
+ .sort()
186
+
187
+ const schemaChecks = await Promise.all(
188
+ allModelFiles.map(async (f) => ({
189
+ file: f,
190
+ hasSchema: readFileSync(resolve(modelsDir, f), 'utf-8').includes(
191
+ 'export const schema = table('
192
+ ),
193
+ }))
194
+ )
195
+
196
+ const filesWithSchema = schemaChecks.filter((c) => c.hasSchema).map((c) => c.file)
197
+
198
+ // generate all files in parallel
199
+ const [modelsOutput, typesOutput, tablesOutput] = await Promise.all([
200
+ Promise.resolve(generateModelsFile(allModelFiles)),
201
+ Promise.resolve(generateTypesFile(filesWithSchema)),
202
+ Promise.resolve(generateTablesFile(filesWithSchema)),
203
+ ])
204
+
205
+ // write all generated files in parallel
206
+ await Promise.all([
207
+ Promise.resolve(
208
+ writeFileSync(resolve(generatedDir, 'models.ts'), modelsOutput, 'utf-8')
209
+ ),
210
+ Promise.resolve(
211
+ writeFileSync(resolve(generatedDir, 'types.ts'), typesOutput, 'utf-8')
212
+ ),
213
+ Promise.resolve(
214
+ writeFileSync(resolve(generatedDir, 'tables.ts'), tablesOutput, 'utf-8')
215
+ ),
216
+ ])
217
+
218
+ // generate synced queries
219
+ if (existsSync(queriesDir)) {
220
+ const queryFiles = readdirSync(queriesDir).filter((f) => f.endsWith('.ts'))
221
+
222
+ // process query files in parallel
223
+ const queryResults = await Promise.all(
224
+ queryFiles.map(async (file) => {
225
+ const filePath = resolve(queriesDir, file)
226
+ const fileBaseName = basename(file, '.ts')
227
+ const queries: Array<{
228
+ name: string
229
+ params: string
230
+ valibotCode: string
231
+ sourceFile: string
232
+ }> = []
233
+
234
+ try {
235
+ const content = readFileSync(filePath, 'utf-8')
236
+
237
+ const sourceFile = ts.createSourceFile(
238
+ filePath,
239
+ content,
240
+ ts.ScriptTarget.Latest,
241
+ true
242
+ )
243
+
244
+ ts.forEachChild(sourceFile, (node) => {
245
+ if (ts.isVariableStatement(node)) {
246
+ const exportModifier = node.modifiers?.find(
247
+ (m) => m.kind === ts.SyntaxKind.ExportKeyword
248
+ )
249
+ if (!exportModifier) return
250
+
251
+ const declaration = node.declarationList.declarations[0]
252
+ if (!declaration || !ts.isVariableDeclaration(declaration)) return
253
+
254
+ const name = declaration.name.getText(sourceFile)
255
+
256
+ // skip 'permission' exports
257
+ if (name === 'permission') return
258
+
259
+ if (
260
+ declaration.initializer &&
261
+ ts.isArrowFunction(declaration.initializer)
262
+ ) {
263
+ const params = declaration.initializer.parameters
264
+ let paramType = 'void'
265
+
266
+ if (params.length > 0) {
267
+ const param = params[0]!
268
+ paramType = param.type?.getText(sourceFile) || 'unknown'
269
+ }
270
+
271
+ try {
272
+ const typeString = `type QueryParams = ${paramType}`
273
+ const model = TypeScriptToModel.Generate(typeString)
274
+ const valibotCode = ModelToValibot.Generate(model)
275
+
276
+ queries.push({
277
+ name,
278
+ params: paramType,
279
+ valibotCode,
280
+ sourceFile: fileBaseName,
281
+ })
282
+ } catch (err) {
283
+ console.error(`✗ ${name}: ${err}`)
284
+ }
285
+ }
286
+ }
287
+ })
288
+ } catch (err) {
289
+ console.error(`Error processing ${file}:`, err)
290
+ }
291
+
292
+ return queries
293
+ })
294
+ )
295
+
296
+ const allQueries = queryResults.flat()
297
+ const queriesOutput = generateQueriesFile(allQueries)
298
+ writeFileSync(resolve(generatedDir, 'queries.ts'), queriesOutput, 'utf-8')
299
+
300
+ console.info(
301
+ `✓ ${allModelFiles.length} models (${filesWithSchema.length} schemas), ${allQueries.length} queries`
302
+ )
303
+ } else {
304
+ console.info(
305
+ `✓ ${allModelFiles.length} models (${filesWithSchema.length} schemas)`
306
+ )
307
+ }
308
+
309
+ // run after command if provided
310
+ if (args.after) {
311
+ try {
312
+ const { execSync } = await import('node:child_process')
313
+ execSync(args.after, { stdio: 'inherit' })
314
+ } catch (err) {
315
+ console.error(`Error running after command: ${err}`)
316
+ }
317
+ }
318
+ }
319
+
320
+ // run once
321
+ await runGenerate()
322
+
323
+ // watch mode
324
+ if (args.watch) {
325
+ console.info('\n👀 watching...\n')
326
+ const chokidar = await import('chokidar')
327
+
328
+ let debounceTimer: ReturnType<typeof setTimeout> | null = null
329
+
330
+ const debouncedRegenerate = (path: string, event: string) => {
331
+ if (debounceTimer) {
332
+ clearTimeout(debounceTimer)
333
+ }
334
+
335
+ console.info(`\n${event} ${path}`)
336
+
337
+ debounceTimer = setTimeout(() => {
338
+ runGenerate()
339
+ }, 1000)
340
+ }
341
+
342
+ const watcher = chokidar.watch([modelsDir, queriesDir], {
343
+ persistent: true,
344
+ ignoreInitial: true,
345
+ })
346
+
347
+ watcher.on('change', (path) => debouncedRegenerate(path, '📝'))
348
+ watcher.on('add', (path) => debouncedRegenerate(path, '➕'))
349
+ watcher.on('unlink', (path) => debouncedRegenerate(path, '🗑️ '))
350
+
351
+ // keep process alive
352
+ await new Promise(() => {})
353
+ }
354
+ },
355
+ })
356
+
357
+ function generateModelsFile(modelFiles: string[]) {
358
+ const modelNames = modelFiles.map((f) => basename(f, '.ts')).sort()
359
+
360
+ // special case: user.ts should be imported as userPublic
361
+ const getImportName = (name: string) => (name === 'user' ? 'userPublic' : name)
362
+
363
+ // generate imports (sorted)
364
+ const imports = modelNames
365
+ .map((name) => {
366
+ const importName = getImportName(name)
367
+ return `import * as ${importName} from '~/data/models/${name}'`
368
+ })
369
+ .join('\n')
370
+
371
+ // generate models object (sorted by import name)
372
+ const sortedByImportName = [...modelNames].sort((a, b) =>
373
+ getImportName(a).localeCompare(getImportName(b))
374
+ )
375
+ const modelsObj = `export const models = {\n${sortedByImportName.map((name) => ` ${getImportName(name)},`).join('\n')}\n}`
376
+
377
+ return `// auto-generated by: over-zero generate\n${imports}\n\n${modelsObj}\n`
378
+ }
379
+
380
+ function generateTypesFile(modelFiles: string[]) {
381
+ const modelNames = modelFiles.map((f) => basename(f, '.ts')).sort()
382
+
383
+ // special case: user.ts should reference userPublic in schema
384
+ const getSchemaName = (name: string) => (name === 'user' ? 'userPublic' : name)
385
+
386
+ // generate type exports using TableInsertRow and TableUpdateRow (sorted)
387
+ const typeExports = modelNames
388
+ .map((name) => {
389
+ const pascalName = name.charAt(0).toUpperCase() + name.slice(1)
390
+ const schemaName = getSchemaName(name)
391
+ return `export type ${pascalName} = TableInsertRow<typeof schema.${schemaName}>\nexport type ${pascalName}Update = TableUpdateRow<typeof schema.${schemaName}>`
392
+ })
393
+ .join('\n\n')
394
+
395
+ return `import type { TableInsertRow, TableUpdateRow } from 'over-zero'\nimport type * as schema from '../tables'\n\n${typeExports}\n`
396
+ }
397
+
398
+ function generateTablesFile(modelFiles: string[]) {
399
+ const modelNames = modelFiles.map((f) => basename(f, '.ts')).sort()
400
+
401
+ // special case: user.ts should be exported as userPublic
402
+ const getExportName = (name: string) => (name === 'user' ? 'userPublic' : name)
403
+
404
+ // generate schema exports (sorted)
405
+ const exports = modelNames
406
+ .map(
407
+ (name) => `export { schema as ${getExportName(name)} } from '~/data/models/${name}'`
408
+ )
409
+ .join('\n')
410
+
411
+ return `// auto-generated by: over-zero generate\n// this is separate from models as otherwise you end up with circular types :/\n\n${exports}\n`
412
+ }
413
+
414
+ function generateQueriesFile(
415
+ queries: Array<{
416
+ name: string
417
+ params: string
418
+ valibotCode: string
419
+ sourceFile: string
420
+ }>
421
+ ) {
422
+ // sort queries alphabetically
423
+ const sortedQueries = [...queries].sort((a, b) => a.name.localeCompare(b.name))
424
+
425
+ // Group queries by source file
426
+ const queryByFile = new Map<string, typeof queries>()
427
+ for (const q of sortedQueries) {
428
+ if (!queryByFile.has(q.sourceFile)) {
429
+ queryByFile.set(q.sourceFile, [])
430
+ }
431
+ queryByFile.get(q.sourceFile)!.push(q)
432
+ }
433
+
434
+ // Generate imports for each query file (sorted)
435
+ const queryImports = Array.from(queryByFile.keys())
436
+ .sort()
437
+ .map((file) => `import * as ${file}Queries from '../queries/${file}'`)
438
+ .join('\n')
439
+
440
+ const imports = `import * as v from 'valibot'
441
+ import { syncedQuery } from '@rocicorp/zero'
442
+ ${queryImports}
443
+ `
444
+
445
+ const syncedQueries = sortedQueries
446
+ .map((q) => {
447
+ // extract validator schema
448
+ const lines = q.valibotCode.split('\n').filter((l) => l.trim())
449
+ const schemaLineIndex = lines.findIndex((l) =>
450
+ l.startsWith('export const QueryParams')
451
+ )
452
+
453
+ let validatorDef = 'v.void()'
454
+ if (schemaLineIndex !== -1) {
455
+ const schemaLines: string[] = []
456
+ let openBraces = 0
457
+ let started = false
458
+
459
+ for (let i = schemaLineIndex; i < lines.length; i++) {
460
+ const line = lines[i]!
461
+ const cleaned = started ? line : line.replace('export const QueryParams = ', '')
462
+ schemaLines.push(cleaned)
463
+ started = true
464
+
465
+ openBraces += (cleaned.match(/\{/g) || []).length
466
+ openBraces -= (cleaned.match(/\}/g) || []).length
467
+ openBraces += (cleaned.match(/\(/g) || []).length
468
+ openBraces -= (cleaned.match(/\)/g) || []).length
469
+
470
+ if (openBraces === 0 && schemaLines.length > 0) {
471
+ break
472
+ }
473
+ }
474
+ validatorDef = schemaLines.join('\n')
475
+ }
476
+
477
+ // wrap validator in v.parser(v.tuple([...]))
478
+ const wrappedValidator =
479
+ validatorDef === 'v.void()'
480
+ ? 'v.parser(v.tuple([]))'
481
+ : `v.parser(v.tuple([${validatorDef}]))`
482
+
483
+ // for void queries, no arg parameter
484
+ const queryFn =
485
+ validatorDef === 'v.void()'
486
+ ? `() => {
487
+ return ${q.sourceFile}Queries.${q.name}()
488
+ }`
489
+ : `(arg) => {
490
+ return ${q.sourceFile}Queries.${q.name}(arg)
491
+ }`
492
+
493
+ return `export const ${q.name} = syncedQuery('${q.name}', ${wrappedValidator}, ${queryFn})`
494
+ })
495
+ .join('\n\n')
496
+
497
+ return imports + '\n' + syncedQueries + '\n'
498
+ }
499
+
500
+ const main = defineCommand({
501
+ meta: {
502
+ name: 'over-zero',
503
+ description: 'Over-zero CLI tools',
504
+ },
505
+ subCommands: {
506
+ generate: generate,
507
+ 'generate-queries': generateQueries,
508
+ },
509
+ })
510
+
511
+ runMain(main)