on-zero 0.7.10 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/{readme.md → README.md} +172 -231
  2. package/dist/cjs/cli.cjs +5 -2
  3. package/dist/cjs/cli.native.js +5 -2
  4. package/dist/cjs/cli.native.js.map +1 -1
  5. package/dist/cjs/combineZeroClients.cjs +2 -2
  6. package/dist/cjs/combineZeroClients.native.js +6 -6
  7. package/dist/cjs/combineZeroClients.native.js.map +1 -1
  8. package/dist/cjs/config.cjs +30 -0
  9. package/dist/cjs/config.native.js +33 -0
  10. package/dist/cjs/config.native.js.map +1 -0
  11. package/dist/cjs/createPermissions.cjs +2 -2
  12. package/dist/cjs/createPermissions.native.js +17 -27
  13. package/dist/cjs/createPermissions.native.js.map +1 -1
  14. package/dist/cjs/createUseQuery.cjs +3 -3
  15. package/dist/cjs/createUseQuery.native.js +4 -4
  16. package/dist/cjs/createUseQuery.native.js.map +1 -1
  17. package/dist/cjs/createUseQueryDirect.cjs +4 -3
  18. package/dist/cjs/createUseQueryDirect.native.js +14 -18
  19. package/dist/cjs/createUseQueryDirect.native.js.map +1 -1
  20. package/dist/cjs/createZeroClient.cjs +29 -9
  21. package/dist/cjs/createZeroClient.connection.test.cjs +11 -0
  22. package/dist/cjs/createZeroClient.connection.test.native.js +14 -7
  23. package/dist/cjs/createZeroClient.connection.test.native.js.map +1 -1
  24. package/dist/cjs/createZeroClient.native.js +58 -32
  25. package/dist/cjs/createZeroClient.native.js.map +1 -1
  26. package/dist/cjs/createZeroClient.recovery.test.cjs +90 -3
  27. package/dist/cjs/createZeroClient.recovery.test.native.js +109 -19
  28. package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -1
  29. package/dist/cjs/generate-helpers.cjs +70 -17
  30. package/dist/cjs/generate-helpers.native.js +110 -23
  31. package/dist/cjs/generate-helpers.native.js.map +1 -1
  32. package/dist/cjs/generate-layout.cjs +586 -0
  33. package/dist/cjs/generate-layout.native.js +1275 -0
  34. package/dist/cjs/generate-layout.native.js.map +1 -0
  35. package/dist/cjs/generate-lite.cjs +295 -27
  36. package/dist/cjs/generate-lite.native.js +854 -102
  37. package/dist/cjs/generate-lite.native.js.map +1 -1
  38. package/dist/cjs/generate-lite.test.cjs +433 -41
  39. package/dist/cjs/generate-lite.test.native.js +446 -41
  40. package/dist/cjs/generate-lite.test.native.js.map +1 -1
  41. package/dist/cjs/generate.cjs +172 -94
  42. package/dist/cjs/generate.native.js +324 -148
  43. package/dist/cjs/generate.native.js.map +1 -1
  44. package/dist/cjs/generate.test.cjs +362 -45
  45. package/dist/cjs/generate.test.native.js +374 -45
  46. package/dist/cjs/generate.test.native.js.map +1 -1
  47. package/dist/cjs/helpers/NullToOptional.cjs +18 -0
  48. package/dist/cjs/helpers/NullToOptional.native.js +21 -0
  49. package/dist/cjs/helpers/NullToOptional.native.js.map +1 -0
  50. package/dist/cjs/helpers/asyncContext.cjs +128 -0
  51. package/dist/cjs/helpers/asyncContext.native.js +87 -0
  52. package/dist/cjs/helpers/asyncContext.native.js.map +1 -0
  53. package/dist/cjs/helpers/batchQuery.cjs +2 -2
  54. package/dist/cjs/helpers/batchQuery.native.js +2 -2
  55. package/dist/cjs/helpers/batchQuery.native.js.map +1 -1
  56. package/dist/cjs/helpers/createMutators.cjs +7 -4
  57. package/dist/cjs/helpers/createMutators.native.js +12 -9
  58. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  59. package/dist/cjs/helpers/createMutators.test.native.js +2 -2
  60. package/dist/cjs/helpers/createMutators.test.native.js.map +1 -1
  61. package/dist/cjs/helpers/ellipsis.cjs +35 -0
  62. package/dist/cjs/helpers/ellipsis.native.js +38 -0
  63. package/dist/cjs/helpers/ellipsis.native.js.map +1 -0
  64. package/dist/cjs/helpers/emitter.cjs +99 -0
  65. package/dist/cjs/helpers/emitter.native.js +125 -0
  66. package/dist/cjs/helpers/emitter.native.js.map +1 -0
  67. package/dist/cjs/helpers/ensure.cjs +33 -0
  68. package/dist/cjs/helpers/ensure.native.js +37 -0
  69. package/dist/cjs/helpers/ensure.native.js.map +1 -0
  70. package/dist/cjs/helpers/ensureLoggedIn.cjs +2 -2
  71. package/dist/cjs/helpers/ensureLoggedIn.native.js +3 -3
  72. package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
  73. package/dist/cjs/helpers/errors.cjs +40 -0
  74. package/dist/cjs/helpers/errors.native.js +152 -0
  75. package/dist/cjs/helpers/errors.native.js.map +1 -0
  76. package/dist/cjs/helpers/getCurrentComponentStack.cjs +71 -0
  77. package/dist/cjs/helpers/getCurrentComponentStack.native.js +93 -0
  78. package/dist/cjs/helpers/getCurrentComponentStack.native.js.map +1 -0
  79. package/dist/cjs/helpers/globalValue.cjs +39 -0
  80. package/dist/cjs/helpers/globalValue.native.js +42 -0
  81. package/dist/cjs/helpers/globalValue.native.js.map +1 -0
  82. package/dist/cjs/helpers/mapObject.cjs +36 -0
  83. package/dist/cjs/helpers/mapObject.native.js +39 -0
  84. package/dist/cjs/helpers/mapObject.native.js.map +1 -0
  85. package/dist/cjs/helpers/mutationLifecycle.cjs +251 -0
  86. package/dist/cjs/helpers/mutationLifecycle.native.js +392 -0
  87. package/dist/cjs/helpers/mutationLifecycle.native.js.map +1 -0
  88. package/dist/cjs/helpers/mutationLifecycle.test.cjs +174 -0
  89. package/dist/cjs/helpers/mutationLifecycle.test.native.js +182 -0
  90. package/dist/cjs/helpers/mutationLifecycle.test.native.js.map +1 -0
  91. package/dist/cjs/helpers/mutatorContext.cjs +3 -3
  92. package/dist/cjs/helpers/mutatorContext.native.js +5 -5
  93. package/dist/cjs/helpers/mutatorContext.native.js.map +1 -1
  94. package/dist/cjs/helpers/platform.cjs +31 -0
  95. package/dist/cjs/helpers/platform.native.js +33 -0
  96. package/dist/cjs/helpers/platform.native.js.map +1 -0
  97. package/dist/cjs/helpers/prettyFormatZeroQuery.cjs +2 -2
  98. package/dist/cjs/helpers/prettyFormatZeroQuery.native.js +7 -7
  99. package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +1 -1
  100. package/dist/cjs/helpers/queryContext.cjs +2 -2
  101. package/dist/cjs/helpers/queryContext.native.js +4 -4
  102. package/dist/cjs/helpers/queryContext.native.js.map +1 -1
  103. package/dist/cjs/helpers/recoverZeroClient.cjs +14 -15
  104. package/dist/cjs/helpers/recoverZeroClient.native.js +26 -23
  105. package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
  106. package/dist/cjs/helpers/recoverZeroClient.test.cjs +10 -8
  107. package/dist/cjs/helpers/recoverZeroClient.test.native.js +17 -21
  108. package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
  109. package/dist/cjs/helpers/sleep.cjs +34 -0
  110. package/dist/cjs/helpers/sleep.native.js +39 -0
  111. package/dist/cjs/helpers/sleep.native.js.map +1 -0
  112. package/dist/cjs/helpers/time.cjs +47 -0
  113. package/dist/cjs/helpers/time.native.js +80 -0
  114. package/dist/cjs/helpers/time.native.js.map +1 -0
  115. package/dist/cjs/helpers/tuple.cjs +18 -0
  116. package/dist/cjs/helpers/tuple.native.js +21 -0
  117. package/dist/cjs/helpers/tuple.native.js.map +1 -0
  118. package/dist/cjs/helpers/useMutation.native.js +5 -5
  119. package/dist/cjs/helpers/useMutation.native.js.map +1 -1
  120. package/dist/cjs/helpers/useMutation.test.native.js +1 -1
  121. package/dist/cjs/helpers/useMutation.test.native.js.map +1 -1
  122. package/dist/cjs/helpers/useZeroDebug.cjs +2 -2
  123. package/dist/cjs/helpers/useZeroDebug.native.js +7 -8
  124. package/dist/cjs/helpers/useZeroDebug.native.js.map +1 -1
  125. package/dist/cjs/index.cjs +9 -1
  126. package/dist/cjs/index.native.js +8 -0
  127. package/dist/cjs/index.native.js.map +1 -1
  128. package/dist/cjs/instanceRegistry.cjs +16 -4
  129. package/dist/cjs/instanceRegistry.native.js +56 -6
  130. package/dist/cjs/instanceRegistry.native.js.map +1 -1
  131. package/dist/cjs/multi.cjs +34 -13
  132. package/dist/cjs/multi.native.js +39 -17
  133. package/dist/cjs/multi.native.js.map +1 -1
  134. package/dist/cjs/multiInstance.test.cjs +6 -2
  135. package/dist/cjs/multiInstance.test.native.js +13 -9
  136. package/dist/cjs/multiInstance.test.native.js.map +1 -1
  137. package/dist/cjs/multiInstanceNested.test.native.js +10 -10
  138. package/dist/cjs/multiInstanceNested.test.native.js.map +1 -1
  139. package/dist/cjs/multiPartition.test.cjs +85 -36
  140. package/dist/cjs/multiPartition.test.native.js +102 -39
  141. package/dist/cjs/multiPartition.test.native.js.map +1 -1
  142. package/dist/cjs/mutations.cjs +2 -2
  143. package/dist/cjs/mutations.native.js +4 -4
  144. package/dist/cjs/mutations.native.js.map +1 -1
  145. package/dist/cjs/mutations.test.native.js +3 -3
  146. package/dist/cjs/mutations.test.native.js.map +1 -1
  147. package/dist/cjs/provideZero.hydration.test.cjs +3 -3
  148. package/dist/cjs/provideZero.hydration.test.native.js +4 -4
  149. package/dist/cjs/provideZero.hydration.test.native.js.map +1 -1
  150. package/dist/cjs/run.cjs +1 -1
  151. package/dist/cjs/run.native.js +3 -3
  152. package/dist/cjs/run.native.js.map +1 -1
  153. package/dist/cjs/server.cjs +20 -16
  154. package/dist/cjs/server.native.js +50 -57
  155. package/dist/cjs/server.native.js.map +1 -1
  156. package/dist/cjs/server.test.cjs +129 -6
  157. package/dist/cjs/server.test.native.js +141 -10
  158. package/dist/cjs/server.test.native.js.map +1 -1
  159. package/dist/cjs/serverWhere.test.native.js +3 -3
  160. package/dist/cjs/serverWhere.test.native.js.map +1 -1
  161. package/dist/cjs/state.cjs +2 -2
  162. package/dist/cjs/state.native.js +10 -10
  163. package/dist/cjs/state.native.js.map +1 -1
  164. package/dist/cjs/usePermission.test.native.js +3 -3
  165. package/dist/cjs/usePermission.test.native.js.map +1 -1
  166. package/dist/cjs/useQuery.empty.test.cjs +3 -3
  167. package/dist/cjs/useQuery.empty.test.native.js +6 -6
  168. package/dist/cjs/useQuery.empty.test.native.js.map +1 -1
  169. package/dist/cjs/useQuery.ssr.test.native.js +2 -2
  170. package/dist/cjs/useQuery.ssr.test.native.js.map +1 -1
  171. package/dist/cjs/vite-plugin.cjs +7 -8
  172. package/dist/cjs/vite-plugin.native.js +11 -11
  173. package/dist/cjs/vite-plugin.native.js.map +1 -1
  174. package/dist/cjs/where.cjs +3 -3
  175. package/dist/cjs/where.native.js +4 -4
  176. package/dist/cjs/where.native.js.map +1 -1
  177. package/dist/esm/cli.mjs +6 -3
  178. package/dist/esm/cli.mjs.map +1 -1
  179. package/dist/esm/cli.native.js +6 -3
  180. package/dist/esm/cli.native.js.map +1 -1
  181. package/dist/esm/combineZeroClients.mjs +1 -1
  182. package/dist/esm/combineZeroClients.mjs.map +1 -1
  183. package/dist/esm/combineZeroClients.native.js +5 -5
  184. package/dist/esm/combineZeroClients.native.js.map +1 -1
  185. package/dist/esm/config.mjs +5 -0
  186. package/dist/esm/config.mjs.map +1 -0
  187. package/dist/esm/config.native.js +5 -0
  188. package/dist/esm/config.native.js.map +1 -0
  189. package/dist/esm/createPermissions.mjs +1 -1
  190. package/dist/esm/createPermissions.mjs.map +1 -1
  191. package/dist/esm/createPermissions.native.js +16 -26
  192. package/dist/esm/createPermissions.native.js.map +1 -1
  193. package/dist/esm/createUseQuery.mjs +2 -2
  194. package/dist/esm/createUseQuery.mjs.map +1 -1
  195. package/dist/esm/createUseQuery.native.js +3 -3
  196. package/dist/esm/createUseQuery.native.js.map +1 -1
  197. package/dist/esm/createUseQueryDirect.mjs +2 -1
  198. package/dist/esm/createUseQueryDirect.mjs.map +1 -1
  199. package/dist/esm/createUseQueryDirect.native.js +12 -16
  200. package/dist/esm/createUseQueryDirect.native.js.map +1 -1
  201. package/dist/esm/createZeroClient.connection.test.mjs +11 -0
  202. package/dist/esm/createZeroClient.connection.test.mjs.map +1 -1
  203. package/dist/esm/createZeroClient.connection.test.native.js +14 -7
  204. package/dist/esm/createZeroClient.connection.test.native.js.map +1 -1
  205. package/dist/esm/createZeroClient.mjs +25 -5
  206. package/dist/esm/createZeroClient.mjs.map +1 -1
  207. package/dist/esm/createZeroClient.native.js +54 -28
  208. package/dist/esm/createZeroClient.native.js.map +1 -1
  209. package/dist/esm/createZeroClient.recovery.test.mjs +90 -3
  210. package/dist/esm/createZeroClient.recovery.test.mjs.map +1 -1
  211. package/dist/esm/createZeroClient.recovery.test.native.js +109 -19
  212. package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -1
  213. package/dist/esm/generate-helpers.mjs +70 -18
  214. package/dist/esm/generate-helpers.mjs.map +1 -1
  215. package/dist/esm/generate-helpers.native.js +110 -24
  216. package/dist/esm/generate-helpers.native.js.map +1 -1
  217. package/dist/esm/generate-layout.mjs +560 -0
  218. package/dist/esm/generate-layout.mjs.map +1 -0
  219. package/dist/esm/generate-layout.native.js +1246 -0
  220. package/dist/esm/generate-layout.native.js.map +1 -0
  221. package/dist/esm/generate-lite.mjs +296 -28
  222. package/dist/esm/generate-lite.mjs.map +1 -1
  223. package/dist/esm/generate-lite.native.js +855 -103
  224. package/dist/esm/generate-lite.native.js.map +1 -1
  225. package/dist/esm/generate-lite.test.mjs +434 -42
  226. package/dist/esm/generate-lite.test.mjs.map +1 -1
  227. package/dist/esm/generate-lite.test.native.js +447 -42
  228. package/dist/esm/generate-lite.test.native.js.map +1 -1
  229. package/dist/esm/generate.mjs +172 -96
  230. package/dist/esm/generate.mjs.map +1 -1
  231. package/dist/esm/generate.native.js +324 -150
  232. package/dist/esm/generate.native.js.map +1 -1
  233. package/dist/esm/generate.test.mjs +366 -49
  234. package/dist/esm/generate.test.mjs.map +1 -1
  235. package/dist/esm/generate.test.native.js +378 -49
  236. package/dist/esm/generate.test.native.js.map +1 -1
  237. package/dist/esm/helpers/NullToOptional.mjs +2 -0
  238. package/dist/esm/helpers/NullToOptional.mjs.map +1 -0
  239. package/dist/esm/helpers/NullToOptional.native.js +2 -0
  240. package/dist/esm/helpers/NullToOptional.native.js.map +1 -0
  241. package/dist/esm/helpers/asyncContext.mjs +102 -0
  242. package/dist/esm/helpers/asyncContext.mjs.map +1 -0
  243. package/dist/esm/helpers/asyncContext.native.js +58 -0
  244. package/dist/esm/helpers/asyncContext.native.js.map +1 -0
  245. package/dist/esm/helpers/batchQuery.mjs +1 -1
  246. package/dist/esm/helpers/batchQuery.native.js +1 -1
  247. package/dist/esm/helpers/createMutators.mjs +5 -2
  248. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  249. package/dist/esm/helpers/createMutators.native.js +10 -7
  250. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  251. package/dist/esm/helpers/createMutators.test.native.js +2 -2
  252. package/dist/esm/helpers/createMutators.test.native.js.map +1 -1
  253. package/dist/esm/helpers/ellipsis.mjs +10 -0
  254. package/dist/esm/helpers/ellipsis.mjs.map +1 -0
  255. package/dist/esm/helpers/ellipsis.native.js +10 -0
  256. package/dist/esm/helpers/ellipsis.native.js.map +1 -0
  257. package/dist/esm/helpers/emitter.mjs +72 -0
  258. package/dist/esm/helpers/emitter.mjs.map +1 -0
  259. package/dist/esm/helpers/emitter.native.js +95 -0
  260. package/dist/esm/helpers/emitter.native.js.map +1 -0
  261. package/dist/esm/helpers/ensure.mjs +8 -0
  262. package/dist/esm/helpers/ensure.mjs.map +1 -0
  263. package/dist/esm/helpers/ensure.native.js +9 -0
  264. package/dist/esm/helpers/ensure.native.js.map +1 -0
  265. package/dist/esm/helpers/ensureLoggedIn.mjs +1 -1
  266. package/dist/esm/helpers/ensureLoggedIn.mjs.map +1 -1
  267. package/dist/esm/helpers/ensureLoggedIn.native.js +2 -2
  268. package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -1
  269. package/dist/esm/helpers/errors.mjs +14 -0
  270. package/dist/esm/helpers/errors.mjs.map +1 -0
  271. package/dist/esm/helpers/errors.native.js +123 -0
  272. package/dist/esm/helpers/errors.native.js.map +1 -0
  273. package/dist/esm/helpers/getCurrentComponentStack.mjs +35 -0
  274. package/dist/esm/helpers/getCurrentComponentStack.mjs.map +1 -0
  275. package/dist/esm/helpers/getCurrentComponentStack.native.js +54 -0
  276. package/dist/esm/helpers/getCurrentComponentStack.native.js.map +1 -0
  277. package/dist/esm/helpers/globalValue.mjs +14 -0
  278. package/dist/esm/helpers/globalValue.mjs.map +1 -0
  279. package/dist/esm/helpers/globalValue.native.js +14 -0
  280. package/dist/esm/helpers/globalValue.native.js.map +1 -0
  281. package/dist/esm/helpers/mapObject.mjs +11 -0
  282. package/dist/esm/helpers/mapObject.mjs.map +1 -0
  283. package/dist/esm/helpers/mapObject.native.js +11 -0
  284. package/dist/esm/helpers/mapObject.native.js.map +1 -0
  285. package/dist/esm/helpers/mutationLifecycle.mjs +221 -0
  286. package/dist/esm/helpers/mutationLifecycle.mjs.map +1 -0
  287. package/dist/esm/helpers/mutationLifecycle.native.js +359 -0
  288. package/dist/esm/helpers/mutationLifecycle.native.js.map +1 -0
  289. package/dist/esm/helpers/mutationLifecycle.test.mjs +175 -0
  290. package/dist/esm/helpers/mutationLifecycle.test.mjs.map +1 -0
  291. package/dist/esm/helpers/mutationLifecycle.test.native.js +180 -0
  292. package/dist/esm/helpers/mutationLifecycle.test.native.js.map +1 -0
  293. package/dist/esm/helpers/mutatorContext.mjs +1 -1
  294. package/dist/esm/helpers/mutatorContext.native.js +4 -4
  295. package/dist/esm/helpers/mutatorContext.native.js.map +1 -1
  296. package/dist/esm/helpers/platform.mjs +5 -0
  297. package/dist/esm/helpers/platform.mjs.map +1 -0
  298. package/dist/esm/helpers/platform.native.js +4 -0
  299. package/dist/esm/helpers/platform.native.js.map +1 -0
  300. package/dist/esm/helpers/prettyFormatZeroQuery.mjs +1 -1
  301. package/dist/esm/helpers/prettyFormatZeroQuery.native.js +6 -6
  302. package/dist/esm/helpers/prettyFormatZeroQuery.native.js.map +1 -1
  303. package/dist/esm/helpers/queryContext.mjs +1 -1
  304. package/dist/esm/helpers/queryContext.native.js +3 -3
  305. package/dist/esm/helpers/queryContext.native.js.map +1 -1
  306. package/dist/esm/helpers/recoverZeroClient.mjs +14 -15
  307. package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
  308. package/dist/esm/helpers/recoverZeroClient.native.js +26 -23
  309. package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
  310. package/dist/esm/helpers/recoverZeroClient.test.mjs +8 -6
  311. package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
  312. package/dist/esm/helpers/recoverZeroClient.test.native.js +15 -19
  313. package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
  314. package/dist/esm/helpers/sleep.mjs +9 -0
  315. package/dist/esm/helpers/sleep.mjs.map +1 -0
  316. package/dist/esm/helpers/sleep.native.js +11 -0
  317. package/dist/esm/helpers/sleep.native.js.map +1 -0
  318. package/dist/esm/helpers/time.mjs +22 -0
  319. package/dist/esm/helpers/time.mjs.map +1 -0
  320. package/dist/esm/helpers/time.native.js +52 -0
  321. package/dist/esm/helpers/time.native.js.map +1 -0
  322. package/dist/esm/helpers/tuple.mjs +2 -0
  323. package/dist/esm/helpers/tuple.mjs.map +1 -0
  324. package/dist/esm/helpers/tuple.native.js +2 -0
  325. package/dist/esm/helpers/tuple.native.js.map +1 -0
  326. package/dist/esm/helpers/useMutation.native.js +5 -5
  327. package/dist/esm/helpers/useMutation.native.js.map +1 -1
  328. package/dist/esm/helpers/useMutation.test.native.js +1 -1
  329. package/dist/esm/helpers/useMutation.test.native.js.map +1 -1
  330. package/dist/esm/helpers/useZeroDebug.mjs +1 -1
  331. package/dist/esm/helpers/useZeroDebug.mjs.map +1 -1
  332. package/dist/esm/helpers/useZeroDebug.native.js +6 -7
  333. package/dist/esm/helpers/useZeroDebug.native.js.map +1 -1
  334. package/dist/esm/index.js +3 -1
  335. package/dist/esm/index.js.map +1 -1
  336. package/dist/esm/index.mjs +3 -1
  337. package/dist/esm/index.mjs.map +1 -1
  338. package/dist/esm/index.native.js +3 -1
  339. package/dist/esm/index.native.js.map +1 -1
  340. package/dist/esm/instanceRegistry.mjs +13 -2
  341. package/dist/esm/instanceRegistry.mjs.map +1 -1
  342. package/dist/esm/instanceRegistry.native.js +53 -4
  343. package/dist/esm/instanceRegistry.native.js.map +1 -1
  344. package/dist/esm/multi.mjs +33 -12
  345. package/dist/esm/multi.mjs.map +1 -1
  346. package/dist/esm/multi.native.js +38 -16
  347. package/dist/esm/multi.native.js.map +1 -1
  348. package/dist/esm/multiInstance.test.mjs +5 -1
  349. package/dist/esm/multiInstance.test.mjs.map +1 -1
  350. package/dist/esm/multiInstance.test.native.js +12 -8
  351. package/dist/esm/multiInstance.test.native.js.map +1 -1
  352. package/dist/esm/multiInstanceNested.test.native.js +10 -10
  353. package/dist/esm/multiInstanceNested.test.native.js.map +1 -1
  354. package/dist/esm/multiPartition.test.mjs +86 -37
  355. package/dist/esm/multiPartition.test.mjs.map +1 -1
  356. package/dist/esm/multiPartition.test.native.js +103 -40
  357. package/dist/esm/multiPartition.test.native.js.map +1 -1
  358. package/dist/esm/mutations.mjs +1 -1
  359. package/dist/esm/mutations.mjs.map +1 -1
  360. package/dist/esm/mutations.native.js +3 -3
  361. package/dist/esm/mutations.native.js.map +1 -1
  362. package/dist/esm/mutations.test.native.js +3 -3
  363. package/dist/esm/mutations.test.native.js.map +1 -1
  364. package/dist/esm/provideZero.hydration.test.mjs +1 -1
  365. package/dist/esm/provideZero.hydration.test.mjs.map +1 -1
  366. package/dist/esm/provideZero.hydration.test.native.js +2 -2
  367. package/dist/esm/provideZero.hydration.test.native.js.map +1 -1
  368. package/dist/esm/run.mjs +1 -1
  369. package/dist/esm/run.mjs.map +1 -1
  370. package/dist/esm/run.native.js +3 -3
  371. package/dist/esm/run.native.js.map +1 -1
  372. package/dist/esm/server.mjs +20 -15
  373. package/dist/esm/server.mjs.map +1 -1
  374. package/dist/esm/server.native.js +50 -56
  375. package/dist/esm/server.native.js.map +1 -1
  376. package/dist/esm/server.test.mjs +130 -7
  377. package/dist/esm/server.test.mjs.map +1 -1
  378. package/dist/esm/server.test.native.js +142 -11
  379. package/dist/esm/server.test.native.js.map +1 -1
  380. package/dist/esm/serverWhere.test.mjs.map +1 -1
  381. package/dist/esm/serverWhere.test.native.js +3 -3
  382. package/dist/esm/serverWhere.test.native.js.map +1 -1
  383. package/dist/esm/state.mjs +1 -1
  384. package/dist/esm/state.mjs.map +1 -1
  385. package/dist/esm/state.native.js +9 -9
  386. package/dist/esm/state.native.js.map +1 -1
  387. package/dist/esm/usePermission.test.native.js +3 -3
  388. package/dist/esm/usePermission.test.native.js.map +1 -1
  389. package/dist/esm/useQuery.empty.test.mjs +1 -1
  390. package/dist/esm/useQuery.empty.test.mjs.map +1 -1
  391. package/dist/esm/useQuery.empty.test.native.js +4 -4
  392. package/dist/esm/useQuery.empty.test.native.js.map +1 -1
  393. package/dist/esm/useQuery.ssr.test.native.js +2 -2
  394. package/dist/esm/useQuery.ssr.test.native.js.map +1 -1
  395. package/dist/esm/vite-plugin.mjs +7 -8
  396. package/dist/esm/vite-plugin.mjs.map +1 -1
  397. package/dist/esm/vite-plugin.native.js +11 -11
  398. package/dist/esm/vite-plugin.native.js.map +1 -1
  399. package/dist/esm/where.mjs +1 -1
  400. package/dist/esm/where.mjs.map +1 -1
  401. package/dist/esm/where.native.js +2 -2
  402. package/dist/esm/where.native.js.map +1 -1
  403. package/package.json +18 -6
  404. package/src/cli.ts +11 -3
  405. package/src/combineZeroClients.tsx +18 -10
  406. package/src/config.ts +72 -0
  407. package/src/createPermissions.ts +3 -4
  408. package/src/createUseQuery.tsx +8 -8
  409. package/src/createUseQueryDirect.tsx +11 -10
  410. package/src/createZeroClient.authData.test.tsx +1 -1
  411. package/src/createZeroClient.connection.test.tsx +13 -2
  412. package/src/createZeroClient.recovery.test.tsx +100 -4
  413. package/src/createZeroClient.tsx +87 -30
  414. package/src/generate-helpers.ts +108 -31
  415. package/src/generate-layout.ts +841 -0
  416. package/src/generate-lite.test.ts +421 -42
  417. package/src/generate-lite.ts +479 -43
  418. package/src/generate.test.ts +552 -90
  419. package/src/generate.ts +360 -163
  420. package/src/helpers/NullToOptional.ts +5 -0
  421. package/src/helpers/asyncContext.native.ts +90 -0
  422. package/src/helpers/asyncContext.ts +159 -0
  423. package/src/helpers/batchQuery.ts +2 -2
  424. package/src/helpers/createMutators.ts +11 -8
  425. package/src/helpers/ellipsis.ts +9 -0
  426. package/src/helpers/emitter.tsx +106 -0
  427. package/src/helpers/ensure.ts +10 -0
  428. package/src/helpers/ensureLoggedIn.ts +1 -2
  429. package/src/helpers/errors.ts +13 -0
  430. package/src/helpers/getCurrentComponentStack.ts +56 -0
  431. package/src/helpers/globalValue.ts +40 -0
  432. package/src/helpers/mapObject.ts +14 -0
  433. package/src/helpers/mutationLifecycle.test.ts +180 -0
  434. package/src/helpers/mutationLifecycle.ts +313 -0
  435. package/src/helpers/mutatorContext.ts +3 -3
  436. package/src/helpers/platform.native.ts +2 -0
  437. package/src/helpers/platform.ts +16 -0
  438. package/src/helpers/prettyFormatZeroQuery.ts +2 -2
  439. package/src/helpers/queryContext.ts +2 -2
  440. package/src/helpers/recoverZeroClient.test.ts +23 -21
  441. package/src/helpers/recoverZeroClient.ts +56 -49
  442. package/src/helpers/sleep.ts +8 -0
  443. package/src/helpers/time.ts +51 -0
  444. package/src/helpers/tuple.ts +1 -0
  445. package/src/helpers/useMutation.tsx +3 -3
  446. package/src/helpers/useZeroDebug.ts +3 -3
  447. package/src/index.ts +13 -1
  448. package/src/instanceRegistry.ts +19 -6
  449. package/src/multi.ts +75 -31
  450. package/src/multiInstance.test.tsx +31 -13
  451. package/src/multiInstanceNested.test.tsx +2 -2
  452. package/src/multiPartition.test.ts +62 -27
  453. package/src/mutations.ts +10 -10
  454. package/src/provideZero.hydration.test.tsx +1 -1
  455. package/src/resolveQuery.ts +2 -2
  456. package/src/run.ts +7 -7
  457. package/src/server.test.ts +117 -18
  458. package/src/server.ts +70 -43
  459. package/src/serverWhere.ts +2 -2
  460. package/src/state.ts +2 -2
  461. package/src/types.ts +47 -6
  462. package/src/useQuery.empty.test.tsx +3 -3
  463. package/src/useQuery.ssr.test.ts +1 -1
  464. package/src/vite-plugin.ts +12 -9
  465. package/src/where.ts +6 -7
  466. package/src/zeroRunner.ts +2 -2
  467. package/types/combineZeroClients.d.ts +11 -5
  468. package/types/combineZeroClients.d.ts.map +1 -1
  469. package/types/config.d.ts +62 -0
  470. package/types/config.d.ts.map +1 -0
  471. package/types/createPermissions.d.ts.map +1 -1
  472. package/types/createUseQuery.d.ts.map +1 -1
  473. package/types/createUseQueryDirect.d.ts +1 -1
  474. package/types/createUseQueryDirect.d.ts.map +1 -1
  475. package/types/createZeroClient.d.ts +22 -12
  476. package/types/createZeroClient.d.ts.map +1 -1
  477. package/types/createZeroClient.recovery.test.d.ts.map +1 -1
  478. package/types/generate-helpers.d.ts +17 -2
  479. package/types/generate-helpers.d.ts.map +1 -1
  480. package/types/generate-layout.d.ts +26 -0
  481. package/types/generate-layout.d.ts.map +1 -0
  482. package/types/generate-lite.d.ts +29 -1
  483. package/types/generate-lite.d.ts.map +1 -1
  484. package/types/generate.d.ts +20 -0
  485. package/types/generate.d.ts.map +1 -1
  486. package/types/helpers/NullToOptional.d.ts +6 -0
  487. package/types/helpers/NullToOptional.d.ts.map +1 -0
  488. package/types/helpers/asyncContext.d.ts +15 -0
  489. package/types/helpers/asyncContext.d.ts.map +1 -0
  490. package/types/helpers/asyncContext.native.d.ts +8 -0
  491. package/types/helpers/asyncContext.native.d.ts.map +1 -0
  492. package/types/helpers/createMutators.d.ts +2 -1
  493. package/types/helpers/createMutators.d.ts.map +1 -1
  494. package/types/helpers/ellipsis.d.ts +2 -0
  495. package/types/helpers/ellipsis.d.ts.map +1 -0
  496. package/types/helpers/emitter.d.ts +21 -0
  497. package/types/helpers/emitter.d.ts.map +1 -0
  498. package/types/helpers/ensure.d.ts +2 -0
  499. package/types/helpers/ensure.d.ts.map +1 -0
  500. package/types/helpers/ensureLoggedIn.d.ts.map +1 -1
  501. package/types/helpers/errors.d.ts +7 -0
  502. package/types/helpers/errors.d.ts.map +1 -0
  503. package/types/helpers/getCurrentComponentStack.d.ts +2 -0
  504. package/types/helpers/getCurrentComponentStack.d.ts.map +1 -0
  505. package/types/helpers/globalValue.d.ts +23 -0
  506. package/types/helpers/globalValue.d.ts.map +1 -0
  507. package/types/helpers/mapObject.d.ts +4 -0
  508. package/types/helpers/mapObject.d.ts.map +1 -0
  509. package/types/helpers/mutationLifecycle.d.ts +44 -0
  510. package/types/helpers/mutationLifecycle.d.ts.map +1 -0
  511. package/types/helpers/mutationLifecycle.test.d.ts +2 -0
  512. package/types/helpers/mutationLifecycle.test.d.ts.map +1 -0
  513. package/types/helpers/platform.d.ts +3 -0
  514. package/types/helpers/platform.d.ts.map +1 -0
  515. package/types/helpers/platform.native.d.ts +3 -0
  516. package/types/helpers/platform.native.d.ts.map +1 -0
  517. package/types/helpers/recoverZeroClient.d.ts +13 -9
  518. package/types/helpers/recoverZeroClient.d.ts.map +1 -1
  519. package/types/helpers/sleep.d.ts +2 -0
  520. package/types/helpers/sleep.d.ts.map +1 -0
  521. package/types/helpers/time.d.ts +28 -0
  522. package/types/helpers/time.d.ts.map +1 -0
  523. package/types/helpers/tuple.d.ts +2 -0
  524. package/types/helpers/tuple.d.ts.map +1 -0
  525. package/types/index.d.ts +3 -1
  526. package/types/index.d.ts.map +1 -1
  527. package/types/instanceRegistry.d.ts +1 -0
  528. package/types/instanceRegistry.d.ts.map +1 -1
  529. package/types/multi.d.ts +23 -1
  530. package/types/multi.d.ts.map +1 -1
  531. package/types/mutations.d.ts +1 -1
  532. package/types/mutations.d.ts.map +1 -1
  533. package/types/run.d.ts.map +1 -1
  534. package/types/server.d.ts +12 -8
  535. package/types/server.d.ts.map +1 -1
  536. package/types/state.d.ts +1 -1
  537. package/types/state.d.ts.map +1 -1
  538. package/types/types.d.ts +23 -1
  539. package/types/types.d.ts.map +1 -1
  540. package/types/vite-plugin.d.ts.map +1 -1
  541. package/types/where.d.ts.map +1 -1
  542. package/lint/ssr-guards.js +0 -165
  543. package/test-fixtures/server-return-types.ts +0 -58
  544. package/test-fixtures/tsconfig.json +0 -13
  545. package/tsconfig.json +0 -26
  546. package/vitest.config.ts +0 -8
@@ -33,15 +33,19 @@ var import_vitest = require("vitest");
33
33
  var import_generate = require("./generate.native.js");
34
34
  const import_meta = {};
35
35
  var testDir = (0, import_path.join)((0, import_os.tmpdir)(), "on-zero-test-" + Date.now());
36
- (0, import_vitest.beforeEach)(function () {
37
- (0, import_fs.mkdirSync)((0, import_path.join)(testDir, "models"), {
36
+ function writeFileSync(path, content) {
37
+ (0, import_fs.mkdirSync)((0, import_path.dirname)(path), {
38
38
  recursive: true
39
39
  });
40
- (0, import_fs.mkdirSync)((0, import_path.join)(testDir, "queries"), {
40
+ (0, import_fs.writeFileSync)(path, content);
41
+ }
42
+ (0, import_vitest.beforeEach)(function () {
43
+ (0, import_fs.mkdirSync)(testDir, {
41
44
  recursive: true
42
45
  });
43
46
  });
44
47
  (0, import_vitest.afterEach)(function () {
48
+ import_vitest.vi.restoreAllMocks();
45
49
  (0, import_fs.rmSync)(testDir, {
46
50
  recursive: true,
47
51
  force: true
@@ -49,7 +53,7 @@ var testDir = (0, import_path.join)((0, import_os.tmpdir)(), "on-zero-test-" + D
49
53
  });
50
54
  (0, import_vitest.describe)("generate", function () {
51
55
  (0, import_vitest.test)("generates models.ts, types.ts, tables.ts from model files", async function () {
52
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/post.ts"), `
56
+ writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `
53
57
  import { table, string, boolean } from 'on-zero'
54
58
 
55
59
  export const schema = table('post', {
@@ -58,7 +62,7 @@ export const schema = table('post', {
58
62
  published: boolean(),
59
63
  })
60
64
  `);
61
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/comment.ts"), `
65
+ writeFileSync((0, import_path.join)(testDir, "comment/mutations.ts"), `
62
66
  import { table, string } from 'on-zero'
63
67
 
64
68
  export const schema = table('comment', {
@@ -67,8 +71,8 @@ export const schema = table('comment', {
67
71
  body: string(),
68
72
  })
69
73
  `);
70
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/post.test.ts"), `throw new Error('test files must not be generated as models')`);
71
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "queries/comment.spec.ts"), `throw new Error('spec files must not be generated as queries')`);
74
+ writeFileSync((0, import_path.join)(testDir, "post/post.test.ts"), `throw new Error('test files must not be generated as models')`);
75
+ writeFileSync((0, import_path.join)(testDir, "comment/comment.spec.ts"), `throw new Error('spec files must not be generated as queries')`);
72
76
  var result = await (0, import_generate.generate)({
73
77
  dir: testDir,
74
78
  silent: true
@@ -80,20 +84,20 @@ export const schema = table('comment', {
80
84
  (0, import_vitest.expect)((0, import_fs.existsSync)((0, import_path.join)(testDir, "generated/types.ts"))).toBe(true);
81
85
  (0, import_vitest.expect)((0, import_fs.existsSync)((0, import_path.join)(testDir, "generated/tables.ts"))).toBe(true);
82
86
  var modelsContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/models.ts"), "utf-8");
83
- (0, import_vitest.expect)(modelsContent).toContain("import * as comment from '../models/comment'");
84
- (0, import_vitest.expect)(modelsContent).toContain("import * as post from '../models/post'");
87
+ (0, import_vitest.expect)(modelsContent).toContain("import * as comment from '../comment/mutations'");
88
+ (0, import_vitest.expect)(modelsContent).toContain("import * as post from '../post/mutations'");
85
89
  (0, import_vitest.expect)(modelsContent).not.toContain("post.test");
86
90
  (0, import_vitest.expect)(modelsContent).toContain("export const models = {");
87
91
  var typesContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/types.ts"), "utf-8");
88
92
  (0, import_vitest.expect)(typesContent).toContain("export type Post = TableInsertRow<typeof schema.post>");
89
93
  (0, import_vitest.expect)(typesContent).toContain("export type Comment = TableInsertRow<typeof schema.comment>");
90
94
  var tablesContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/tables.ts"), "utf-8");
91
- (0, import_vitest.expect)(tablesContent).toContain("export { schema as post } from '../models/post'");
92
- (0, import_vitest.expect)(tablesContent).toContain("export { schema as comment } from '../models/comment'");
95
+ (0, import_vitest.expect)(tablesContent).toContain("export { schema as post } from '../post/mutations'");
96
+ (0, import_vitest.expect)(tablesContent).toContain("export { schema as comment } from '../comment/mutations'");
93
97
  });
94
98
  (0, import_vitest.test)("generates query validators from query files", async function () {
95
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/post.ts"), `export const schema = table('post', { id: string() })`);
96
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "queries/post.ts"), `
99
+ writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
100
+ writeFileSync((0, import_path.join)(testDir, "post/queries.ts"), `
97
101
  import { zero } from '../zero'
98
102
 
99
103
  export const allPosts = () => zero.query.post
@@ -111,7 +115,8 @@ export const postsByAuthor = ({ authorId, limit }: { authorId: string; limit?: n
111
115
  (0, import_vitest.expect)((0, import_fs.existsSync)((0, import_path.join)(testDir, "generated/groupedQueries.ts"))).toBe(true);
112
116
  (0, import_vitest.expect)((0, import_fs.existsSync)((0, import_path.join)(testDir, "generated/syncedQueries.ts"))).toBe(true);
113
117
  var groupedContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/groupedQueries.ts"), "utf-8");
114
- (0, import_vitest.expect)(groupedContent).toContain("export * as post from '../queries/post'");
118
+ (0, import_vitest.expect)(groupedContent).toContain("import * as postSource from '../post/queries'");
119
+ (0, import_vitest.expect)(groupedContent).toContain("postById: postSource.postById");
115
120
  var syncedContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/syncedQueries.ts"), "utf-8");
116
121
  (0, import_vitest.expect)(syncedContent).toContain("allPosts: defineQuery");
117
122
  (0, import_vitest.expect)(syncedContent).toContain("postById: defineQuery");
@@ -119,8 +124,8 @@ export const postsByAuthor = ({ authorId, limit }: { authorId: string; limit?: n
119
124
  (0, import_vitest.expect)(syncedContent).toContain("v.object");
120
125
  });
121
126
  (0, import_vitest.test)("skips permission exports in queries", async function () {
122
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/post.ts"), `export const schema = table('post', { id: string() })`);
123
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "queries/post.ts"), `
127
+ writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
128
+ writeFileSync((0, import_path.join)(testDir, "post/queries.ts"), `
124
129
  export const permission = () => ({ canRead: true })
125
130
  export const allPosts = () => zero.query.post
126
131
  `);
@@ -134,20 +139,20 @@ export const allPosts = () => zero.query.post
134
139
  (0, import_vitest.expect)(syncedContent).not.toContain("permission:");
135
140
  });
136
141
  (0, import_vitest.test)("aliases user import without changing the model key", async function () {
137
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/user.ts"), `export const schema = table('user', { id: string(), name: string() })`);
142
+ writeFileSync((0, import_path.join)(testDir, "user/mutations.ts"), `export const schema = table('user', { id: string(), name: string() })`);
138
143
  await (0, import_generate.generate)({
139
144
  dir: testDir,
140
145
  silent: true
141
146
  });
142
147
  var modelsContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/models.ts"), "utf-8");
143
- (0, import_vitest.expect)(modelsContent).toContain("import * as userPublic from '../models/user'");
148
+ (0, import_vitest.expect)(modelsContent).toContain("import * as userPublic from '../user/mutations'");
144
149
  (0, import_vitest.expect)(modelsContent).toContain("user: userPublic,");
145
150
  (0, import_vitest.expect)(modelsContent).not.toContain("\n userPublic,");
146
151
  var typesContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/types.ts"), "utf-8");
147
152
  (0, import_vitest.expect)(typesContent).toContain("typeof schema.userPublic");
148
153
  });
149
154
  (0, import_vitest.test)("runs after command when files change", async function () {
150
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/post.ts"), `export const schema = table('post', { id: string() })`);
155
+ writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
151
156
  var markerFile = (0, import_path.join)(testDir, "after-ran");
152
157
  var result = await (0, import_generate.generate)({
153
158
  dir: testDir,
@@ -158,7 +163,7 @@ export const allPosts = () => zero.query.post
158
163
  (0, import_vitest.expect)((0, import_fs.existsSync)(markerFile)).toBe(true);
159
164
  });
160
165
  (0, import_vitest.test)("does not regenerate when nothing changed", async function () {
161
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/post.ts"), `export const schema = table('post', { id: string() })`);
166
+ writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
162
167
  var first = await (0, import_generate.generate)({
163
168
  dir: testDir,
164
169
  silent: true
@@ -171,8 +176,8 @@ export const allPosts = () => zero.query.post
171
176
  (0, import_vitest.expect)(second.filesChanged).toBe(0);
172
177
  });
173
178
  (0, import_vitest.test)("force regenerates without source changes", async function () {
174
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/post.ts"), `export const schema = table('post', { id: string() })`);
175
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "queries/post.ts"), `export const allPosts = () => zero.query.post`);
179
+ writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
180
+ writeFileSync((0, import_path.join)(testDir, "post/queries.ts"), `export const allPosts = () => zero.query.post`);
176
181
  await (0, import_generate.generate)({
177
182
  dir: testDir,
178
183
  silent: true
@@ -187,9 +192,333 @@ export const allPosts = () => zero.query.post
187
192
  (0, import_vitest.expect)((0, import_fs.existsSync)(syncedQueriesPath)).toBe(true);
188
193
  });
189
194
  });
195
+ (0, import_vitest.describe)("instance layout", function () {
196
+ var dataDir = function dataDir2() {
197
+ return (0, import_path.join)(testDir, "src/data");
198
+ };
199
+ (0, import_vitest.test)("discovers file and folder namespaces and emits related sync closure", async function () {
200
+ writeFileSync((0, import_path.join)(dataDir(), "control/reaction.ts"), `export const allReactions = () => zql.reaction`);
201
+ writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: {}, project: { scope: 'projectId' } } })`);
202
+ writeFileSync((0, import_path.join)(dataDir(), "project/message/queries.ts"), `
203
+ const unused = () => zql.message.related('notARealRelation')
204
+ const withComments = () => zql.message.related('comments', (q) => q.related('author'))
205
+ export const messages = () => withComments()
206
+ `);
207
+ writeFileSync((0, import_path.join)(dataDir(), "project/message/mutations.ts"), `export const schema = table('message').columns({ id: string(), projectId: string() })`);
208
+ writeFileSync((0, import_path.join)(dataDir(), "project/message/helpers.ts"), `export const privateHelper = () => 'ignored'`);
209
+ writeFileSync((0, import_path.join)(testDir, "src/database/relations.ts"), `
210
+ export const relations = defineRelations(schema, (r) => ({
211
+ message: { comments: r.many.comment({}) },
212
+ comment: { author: r.one.userPublic({}) },
213
+ }))
214
+ `);
215
+ writeFileSync((0, import_path.join)(testDir, "src/database/schema.ts"), `
216
+ export const comment = sqliteTable('comment', { id: text(), projectId: text() })
217
+ export const userPublic = sqliteTable('user_public', { id: text(), projectId: text() })
218
+ `);
219
+ var membership = await (0, import_generate.deriveDataMembership)({
220
+ dir: dataDir()
221
+ });
222
+ (0, import_vitest.expect)(membership.allTables).toEqual(["comment", "message", "reaction", "userPublic"]);
223
+ (0, import_vitest.expect)(membership.instances.project).toEqual({
224
+ tables: ["message"],
225
+ syncTables: ["comment", "message", "userPublic"],
226
+ supportTables: [],
227
+ scope: "projectId"
228
+ });
229
+ await (0, import_generate.generate)({
230
+ dir: dataDir(),
231
+ silent: true
232
+ });
233
+ var grouped = (0, import_fs.readFileSync)((0, import_path.join)(dataDir(), "generated/groupedQueries.ts"), "utf8");
234
+ (0, import_vitest.expect)(grouped).toContain("from '../control/reaction'");
235
+ (0, import_vitest.expect)(grouped).toContain("from '../project/message/queries'");
236
+ (0, import_vitest.expect)(grouped).not.toContain("privateHelper");
237
+ var manifest = (0, import_fs.readFileSync)((0, import_path.join)(dataDir(), "generated/instances.ts"), "utf8");
238
+ (0, import_vitest.expect)(manifest).toContain("control: {");
239
+ (0, import_vitest.expect)(manifest).toContain("project: {");
240
+ (0, import_vitest.expect)(manifest).toContain('tables: ["message"]');
241
+ (0, import_vitest.expect)(manifest).toContain('syncTables: ["comment","message","userPublic"]');
242
+ (0, import_vitest.expect)(manifest).toContain(`defaultVisibility: (value: string) => ({ column: "projectId", value })`);
243
+ });
244
+ (0, import_vitest.test)("derives single-file namespaces from data exports", async function () {
245
+ writeFileSync((0, import_path.join)(dataDir(), "server.ts"), `export const serverRows = () => zql.server`);
246
+ writeFileSync((0, import_path.join)(dataDir(), "types.ts"), `export const formatRow = (value: string) => value`);
247
+ writeFileSync((0, import_path.join)(dataDir(), "auth.ts"), `export function authId(auth: { id: string }) { return auth.id }`);
248
+ await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
249
+ dir: dataDir()
250
+ })).resolves.toEqual({
251
+ instances: {
252
+ default: {
253
+ tables: ["server"],
254
+ syncTables: ["server"],
255
+ supportTables: [],
256
+ scope: null
257
+ }
258
+ },
259
+ allTables: ["server"]
260
+ });
261
+ });
262
+ (0, import_vitest.test)("warns once and ignores an unparseable non-data file", async function () {
263
+ writeFileSync((0, import_path.join)(dataDir(), "post.ts"), `export const posts = () => zql.post`);
264
+ writeFileSync((0, import_path.join)(dataDir(), "types.ts"), `export type Broken = {`);
265
+ var warn = import_vitest.vi.spyOn(console, "warn").mockImplementation(function () {});
266
+ await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
267
+ dir: dataDir()
268
+ })).resolves.toMatchObject({
269
+ allTables: ["post"]
270
+ });
271
+ (0, import_vitest.expect)(warn).toHaveBeenCalledOnce();
272
+ (0, import_vitest.expect)(warn).toHaveBeenCalledWith("[on-zero] ignoring data/types.ts: no recognized data exports");
273
+ warn.mockRestore();
274
+ });
275
+ (0, import_vitest.test)("derives fileless support tables through mutation helpers", async function () {
276
+ writeFileSync((0, import_path.join)(dataDir(), "post.ts"), `
277
+ import { writeAudit } from './helpers/writeAudit'
278
+ export const posts = () => zql.post
279
+ export const mutate = mutations('post', { save: async (ctx) => writeAudit(ctx.tx) })
280
+ `);
281
+ writeFileSync((0, import_path.join)(dataDir(), "helpers/writeAudit.ts"), `
282
+ import { readSettings } from './readSettings'
283
+ export async function writeAudit(tx: Transaction) {
284
+ await tx.mutate.audit.insert({ id: 'audit' })
285
+ await tx.mutate.post.update({ id: 'post' })
286
+ await tx.mutate[tableName].insert({ id: 'dynamic' })
287
+ return readSettings(tx)
288
+ }
289
+ `);
290
+ writeFileSync((0, import_path.join)(dataDir(), "helpers/readSettings.ts"), `export const readSettings = (tx: Transaction) => tx.query.settings`);
291
+ await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
292
+ dir: dataDir()
293
+ })).resolves.toEqual({
294
+ instances: {
295
+ default: {
296
+ tables: ["post"],
297
+ syncTables: ["post"],
298
+ supportTables: ["audit", "settings"],
299
+ scope: null
300
+ }
301
+ },
302
+ allTables: ["audit", "post", "settings"]
303
+ });
304
+ });
305
+ (0, import_vitest.test)("includes a fileless support table in every instance that uses it", async function () {
306
+ writeFileSync((0, import_path.join)(dataDir(), "control/account.ts"), `export const mutate = mutations('account', { save: async (ctx) => ctx.tx.mutate.audit.insert({}) })`);
307
+ writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: {}, project: { scope: 'projectId' } } })`);
308
+ writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `
309
+ export const schema = table('message').columns({ id: string(), projectId: string() })
310
+ export const mutate = mutations(schema, permission, {
311
+ save: async (ctx) => ctx.tx.mutate.audit.insert({}),
312
+ })
313
+ `);
314
+ await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
315
+ dir: dataDir()
316
+ })).resolves.toMatchObject({
317
+ instances: {
318
+ control: {
319
+ supportTables: ["audit"]
320
+ },
321
+ project: {
322
+ supportTables: ["audit"]
323
+ }
324
+ },
325
+ allTables: ["account", "audit", "message"]
326
+ });
327
+ });
328
+ (0, import_vitest.test)("keeps a configured default instance at the data root", async function () {
329
+ writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { default: { dir: '.', supportTables: ['accountGithubOrgLink', 'accountRepo', 'usageLedger'] }, project: { scope: 'projectId' } } })`);
330
+ writeFileSync((0, import_path.join)(dataDir(), "account.ts"), `export const accounts = () => zql.account`);
331
+ writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `export const schema = table('message').columns({ id: string(), projectId: string() })`);
332
+ await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
333
+ dir: dataDir()
334
+ })).resolves.toEqual({
335
+ instances: {
336
+ default: {
337
+ tables: ["account"],
338
+ syncTables: ["account"],
339
+ supportTables: ["accountGithubOrgLink", "accountRepo", "usageLedger"],
340
+ scope: null
341
+ },
342
+ project: {
343
+ tables: ["message"],
344
+ syncTables: ["message"],
345
+ supportTables: [],
346
+ scope: "projectId"
347
+ }
348
+ },
349
+ allTables: ["account", "accountGithubOrgLink", "accountRepo", "message", "usageLedger"]
350
+ });
351
+ });
352
+ (0, import_vitest.test)("emits only relations whose source and target are derived members", async function () {
353
+ writeFileSync((0, import_path.join)(dataDir(), "post.ts"), `export const posts = () => zql.post`);
354
+ writeFileSync((0, import_path.join)(dataDir(), "comment.ts"), `export const comments = () => zql.comment`);
355
+ writeFileSync((0, import_path.join)(testDir, "src/database/relations.ts"), `
356
+ export const relations = defineRelations(schema, (r) => ({
357
+ post: {
358
+ comments: r.many.comment({}),
359
+ privateNotes: r.many.privateNote({}),
360
+ },
361
+ comment: { post: r.one.post({}), author: r.one.privateUser({}) },
362
+ privateNote: { post: r.one.post({}) },
363
+ }))
364
+ `);
365
+ var generated = await (0, import_generate.generateDrizzleSchemaInputFile)({
366
+ dir: dataDir(),
367
+ schemaImportPath: "../../database/schema"
368
+ });
369
+ var runnable = generated.replace(`import { defineRelations } from 'drizzle-orm'`, "").replace(`import * as schema from "../../database/schema"`, "").replace(/export \{[^\n]+\} from [^\n]+/, "").replace("export const relations =", "globalThis.relations =");
370
+ var context = {
371
+ schema: {
372
+ comment: {},
373
+ post: {}
374
+ },
375
+ defineRelations: function defineRelations(_schema, factory) {
376
+ return factory({
377
+ one: new Proxy({}, {
378
+ get: function get(_target, table) {
379
+ return function () {
380
+ return {
381
+ table
382
+ };
383
+ };
384
+ }
385
+ }),
386
+ many: new Proxy({}, {
387
+ get: function get(_target, table) {
388
+ return function () {
389
+ return {
390
+ table
391
+ };
392
+ };
393
+ }
394
+ })
395
+ });
396
+ }
397
+ };
398
+ (0, import_vm.runInNewContext)(runnable, context);
399
+ (0, import_vitest.expect)(context.relations).toEqual({
400
+ comment: {
401
+ post: {
402
+ table: "post"
403
+ }
404
+ },
405
+ post: {
406
+ comments: {
407
+ table: "comment"
408
+ }
409
+ }
410
+ });
411
+ });
412
+ (0, import_vitest.test)("rejects a relation that crosses instance ownership", async function () {
413
+ writeFileSync((0, import_path.join)(dataDir(), "control/userPublic.ts"), `export const users = () => zql.userPublic`);
414
+ writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: {}, project: { scope: 'projectId' } } })`);
415
+ writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `
416
+ export const schema = table('message').columns({ id: string(), projectId: string() })
417
+ export const messages = () => zql.message.related('author')
418
+ `);
419
+ writeFileSync((0, import_path.join)(testDir, "src/database/relations.ts"), `export const relations = defineRelations(schema, (r) => ({ message: { author: r.one.userPublic({}) } }))`);
420
+ await (0, import_vitest.expect)((0, import_generate.generate)({
421
+ dir: dataDir(),
422
+ silent: true
423
+ })).rejects.toThrow(/message\.messages.*instance 'project'.*userPublic.*instance 'control'/);
424
+ });
425
+ (0, import_vitest.test)("rejects a scoped sync table without the scope column", async function () {
426
+ writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { project: { scope: 'projectId' } } })`);
427
+ writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `export const schema = table('message').columns({ id: string() })`);
428
+ await (0, import_vitest.expect)((0, import_generate.generate)({
429
+ dir: dataDir(),
430
+ silent: true
431
+ })).rejects.toThrow(/table 'message'.*instance 'project'.*scope column 'projectId'/);
432
+ });
433
+ (0, import_vitest.test)("rejects duplicate namespaces across instances", async function () {
434
+ writeFileSync((0, import_path.join)(dataDir(), "control/message.ts"), `export const messages = () => zql.message`);
435
+ writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: {}, project: { scope: 'projectId' } } })`);
436
+ writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `export const schema = table('message').columns({ projectId: string() })`);
437
+ await (0, import_vitest.expect)((0, import_generate.generate)({
438
+ dir: dataDir(),
439
+ silent: true
440
+ })).rejects.toThrow(/namespace 'message'.*instances 'control' and 'project'/);
441
+ });
442
+ (0, import_vitest.test)("resolves configured instance directories relative to the config file", async function () {
443
+ writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: { dir: './planes/control-data', supportTables: ['audit'] }, project: { dir: '../project-data', scope: 'projectId' } } })`);
444
+ writeFileSync((0, import_path.join)(dataDir(), "planes/control-data/account.ts"), `export const accounts = () => zql.account`);
445
+ writeFileSync((0, import_path.join)(testDir, "src/project-data/message.ts"), `export const schema = table('message').columns({ id: string(), projectId: string() })`);
446
+ await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
447
+ dir: dataDir(),
448
+ config: (0, import_path.join)(dataDir(), "on-zero.config.ts")
449
+ })).resolves.toEqual({
450
+ instances: {
451
+ control: {
452
+ tables: ["account"],
453
+ syncTables: ["account"],
454
+ supportTables: ["audit"],
455
+ scope: null
456
+ },
457
+ project: {
458
+ tables: ["message"],
459
+ syncTables: ["message"],
460
+ supportTables: [],
461
+ scope: "projectId"
462
+ }
463
+ },
464
+ allTables: ["account", "audit", "message"]
465
+ });
466
+ await (0, import_vitest.expect)((0, import_generate.generate)({
467
+ dir: dataDir(),
468
+ config: (0, import_path.join)(dataDir(), "on-zero.config.ts"),
469
+ silent: true
470
+ })).resolves.toMatchObject({
471
+ modelCount: 2,
472
+ schemaCount: 1
473
+ });
474
+ (0, import_vitest.expect)((0, import_fs.readFileSync)((0, import_path.join)(dataDir(), "generated/models.ts"), "utf8")).toContain("from '../../project-data/message'");
475
+ });
476
+ (0, import_vitest.test)("rejects missing configured instance directories", async function () {
477
+ writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { project: { dir: './missing' } } })`);
478
+ await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
479
+ dir: dataDir()
480
+ })).rejects.toThrow(/instance 'project' directory does not exist.*missing/);
481
+ });
482
+ (0, import_vitest.test)("rejects two instances that resolve to the same directory", async function () {
483
+ writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: { dir: './shared' }, project: { dir: './shared' } } })`);
484
+ writeFileSync((0, import_path.join)(dataDir(), "shared/account.ts"), `export const accounts = () => zql.account`);
485
+ await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
486
+ dir: dataDir()
487
+ })).rejects.toThrow(/instances 'control' and 'project' resolve to the same directory/);
488
+ });
489
+ (0, import_vitest.test)("rejects root namespaces when instances are configured", async function () {
490
+ writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { project: {} } })`);
491
+ writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `export const rows = () => zql.message`);
492
+ writeFileSync((0, import_path.join)(dataDir(), "account.ts"), `export const rows = () => zql.account`);
493
+ await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
494
+ dir: dataDir()
495
+ })).rejects.toThrow(/data namespace .*account\.ts.*outside every instance directory/);
496
+ });
497
+ (0, import_vitest.test)("rejects removed instance.ts configuration", async function () {
498
+ writeFileSync((0, import_path.join)(dataDir(), "post.ts"), `export const posts = () => zql.post`);
499
+ writeFileSync((0, import_path.join)(dataDir(), "project/instance.ts"), `export default defineInstance({ scope: 'projectId' })`);
500
+ await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
501
+ dir: dataDir()
502
+ })).rejects.toThrow(/uses removed instance\.ts configuration/);
503
+ });
504
+ (0, import_vitest.test)("rejects the removed top-level layout", async function () {
505
+ writeFileSync((0, import_path.join)(dataDir(), "queries/message.ts"), `export const messages = () => zql.message`);
506
+ await (0, import_vitest.expect)((0, import_generate.generate)({
507
+ dir: dataDir(),
508
+ silent: true
509
+ })).rejects.toThrow(/removed top-level queries\/ layout/);
510
+ });
511
+ (0, import_vitest.test)("rejects dynamically named relations", async function () {
512
+ writeFileSync((0, import_path.join)(dataDir(), "message.ts"), `export const messages = (relation: string) => zql.message.related(relation)`);
513
+ await (0, import_vitest.expect)((0, import_generate.generate)({
514
+ dir: dataDir(),
515
+ silent: true
516
+ })).rejects.toThrow(/related\(\) without a string literal.*statically derivable/);
517
+ });
518
+ });
190
519
  (0, import_vitest.describe)("mutations", function () {
191
520
  (0, import_vitest.test)("generates validators for inline mutation param types", async function () {
192
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/post.ts"), `
521
+ writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `
193
522
  import { table, string } from 'on-zero'
194
523
  import { mutations, serverWhere } from 'on-zero'
195
524
 
@@ -218,7 +547,7 @@ export const mutate = mutations(schema, perm, {
218
547
  (0, import_vitest.expect)(content).toContain("v.string()");
219
548
  });
220
549
  (0, import_vitest.test)("generates CRUD validators from schema columns", async function () {
221
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/task.ts"), `
550
+ writeFileSync((0, import_path.join)(testDir, "task/mutations.ts"), `
222
551
  import { table, string, number, boolean } from 'on-zero'
223
552
  import { mutations, serverWhere } from 'on-zero'
224
553
 
@@ -245,7 +574,7 @@ export const mutate = mutations(schema, perm)
245
574
  (0, import_vitest.expect)(content).toContain("delete:");
246
575
  });
247
576
  (0, import_vitest.test)("treats models without export const mutate as empty mutations", async function () {
248
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/readonly.ts"), `
577
+ writeFileSync((0, import_path.join)(testDir, "readonly/mutations.ts"), `
249
578
  import { table, string } from 'on-zero'
250
579
 
251
580
  export const schema = table('readonly').columns({
@@ -262,7 +591,7 @@ export const schema = table('readonly').columns({
262
591
  (0, import_vitest.expect)(content).toContain("readonly: {");
263
592
  });
264
593
  (0, import_vitest.test)("extracts custom mutations from bare mutations({})", async function () {
265
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/admin.ts"), `
594
+ writeFileSync((0, import_path.join)(testDir, "admin/mutations.ts"), `
266
595
  import { mutations } from 'on-zero'
267
596
 
268
597
  export const mutate = mutations({
@@ -280,7 +609,7 @@ export const mutate = mutations({
280
609
  (0, import_vitest.expect)(content).toContain("v.string()");
281
610
  });
282
611
  (0, import_vitest.test)("generates validators for string-model multiline mutation params", async function () {
283
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/agentEvent.ts"), `
612
+ writeFileSync((0, import_path.join)(testDir, "agentEvent/mutations.ts"), `
284
613
  import { mutations, serverWhere } from 'on-zero'
285
614
 
286
615
  const perm = serverWhere('agentEvent', () => true)
@@ -314,7 +643,7 @@ export const mutate = mutations('agentEvent', perm, {
314
643
  (0, import_vitest.expect)(content).not.toContain("claimReviewLease: v.object({})");
315
644
  });
316
645
  (0, import_vitest.test)("generates validators for object intersections", async function () {
317
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/agent.ts"), `
646
+ writeFileSync((0, import_path.join)(testDir, "agent/mutations.ts"), `
318
647
  import { mutations, serverWhere } from 'on-zero'
319
648
 
320
649
  const perm = serverWhere('agent', () => true)
@@ -347,7 +676,7 @@ export const mutate = mutations('agent', perm, {
347
676
  (0, import_vitest.expect)(content).not.toContain("[key");
348
677
  });
349
678
  (0, import_vitest.test)("uses v.unknown for untyped mutation payloads", async function () {
350
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/project.ts"), `
679
+ writeFileSync((0, import_path.join)(testDir, "project/mutations.ts"), `
351
680
  import { mutations, serverWhere } from 'on-zero'
352
681
 
353
682
  const perm = serverWhere('project', () => true)
@@ -367,7 +696,7 @@ export const mutate = mutations('project', perm, {
367
696
  (0, import_vitest.expect)(content).not.toContain("insert: v.void_()");
368
697
  });
369
698
  (0, import_vitest.test)("handles mutations with only context param (void)", async function () {
370
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/user.ts"), `
699
+ writeFileSync((0, import_path.join)(testDir, "user/mutations.ts"), `
371
700
  import { table, string } from 'on-zero'
372
701
  import { mutations, serverWhere } from 'on-zero'
373
702
 
@@ -392,7 +721,7 @@ export const mutate = mutations(schema, perm, {
392
721
  (0, import_vitest.expect)(content).toContain("finishOnboarding");
393
722
  });
394
723
  (0, import_vitest.test)("handles primitive param type", async function () {
395
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/user.ts"), `
724
+ writeFileSync((0, import_path.join)(testDir, "user/mutations.ts"), `
396
725
  import { table, string } from 'on-zero'
397
726
  import { mutations, serverWhere } from 'on-zero'
398
727
 
@@ -418,7 +747,7 @@ export const mutate = mutations(schema, perm, {
418
747
  (0, import_vitest.expect)(content).toContain("v.string()");
419
748
  });
420
749
  (0, import_vitest.test)("handles array param type", async function () {
421
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/batch.ts"), `
750
+ writeFileSync((0, import_path.join)(testDir, "batch/mutations.ts"), `
422
751
  import { mutations } from 'on-zero'
423
752
 
424
753
  export const mutate = mutations({
@@ -436,7 +765,7 @@ export const mutate = mutations({
436
765
  (0, import_vitest.expect)(content).toContain("v.array");
437
766
  });
438
767
  (0, import_vitest.test)("populates mutationCount and caching works", async function () {
439
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/item.ts"), `
768
+ writeFileSync((0, import_path.join)(testDir, "item/mutations.ts"), `
440
769
  import { table, string } from 'on-zero'
441
770
  import { mutations, serverWhere } from 'on-zero'
442
771
 
@@ -468,14 +797,14 @@ export const mutate = mutations(schema, perm, {
468
797
  });
469
798
  (0, import_vitest.describe)("type resolution", function () {
470
799
  (0, import_vitest.test)("resolves imported type references for mutations", async function () {
471
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/types.ts"), `
800
+ writeFileSync((0, import_path.join)(testDir, "post/types.ts"), `
472
801
  export type ArchiveParams = {
473
802
  id: string
474
803
  reason: string
475
804
  archived: boolean
476
805
  }
477
806
  `);
478
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/post.ts"), `
807
+ writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `
479
808
  import { table, string, boolean } from 'on-zero'
480
809
  import { mutations } from 'on-zero'
481
810
  import type { ArchiveParams } from './types'
@@ -497,7 +826,7 @@ export const mutate = mutations({
497
826
  (0, import_vitest.expect)(content).toContain("archived");
498
827
  });
499
828
  (0, import_vitest.test)("resolves utility types like Pick", async function () {
500
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/types.ts"), `
829
+ writeFileSync((0, import_path.join)(testDir, "item/types.ts"), `
501
830
  export type Item = {
502
831
  id: string
503
832
  name: string
@@ -505,7 +834,7 @@ export type Item = {
505
834
  count: number
506
835
  }
507
836
  `);
508
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/item.ts"), `
837
+ writeFileSync((0, import_path.join)(testDir, "item/mutations.ts"), `
509
838
  import { table, string, number } from 'on-zero'
510
839
  import { mutations, serverWhere } from 'on-zero'
511
840
  import type { Item } from './types'
@@ -536,8 +865,8 @@ export const mutate = mutations(schema, perm, {
536
865
  (0, import_vitest.expect)(content).not.toMatch(/rename:[\s\S]*count/);
537
866
  });
538
867
  (0, import_vitest.test)("resolves instantiated Zero row fields through Partial and Omit", async function () {
539
- (0, import_fs.symlinkSync)((0, import_path.join)(import_meta.dirname, "../../../node_modules"), (0, import_path.join)(testDir, "node_modules"), "dir");
540
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/types.ts"), `
868
+ (0, import_fs.symlinkSync)((0, import_path.join)(import_meta.dirname, "../node_modules"), (0, import_path.join)(testDir, "node_modules"), "dir");
869
+ writeFileSync((0, import_path.join)(testDir, "item/types.ts"), `
541
870
  import type { Row } from '@rocicorp/zero'
542
871
  import { drizzleZeroConfig } from 'drizzle-zero-sqlite'
543
872
  import { sqliteTable, text } from 'drizzle-orm/sqlite-core'
@@ -551,7 +880,7 @@ const schema = drizzleZeroConfig({ item })
551
880
 
552
881
  export type Item = Row<(typeof schema)['tables']['item']>
553
882
  `);
554
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/item.ts"), `
883
+ writeFileSync((0, import_path.join)(testDir, "item/mutations.ts"), `
555
884
  import { mutations } from 'on-zero'
556
885
  import type { Item } from './types'
557
886
 
@@ -574,13 +903,13 @@ export const mutate = mutations('item', {
574
903
  (0, import_vitest.expect)(content).not.toContain("description: v.optional(v.unknown())");
575
904
  });
576
905
  (0, import_vitest.test)("skips symbol-keyed properties when resolving imported mutation param types", async function () {
577
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/types.ts"), `
906
+ writeFileSync((0, import_path.join)(testDir, "item/types.ts"), `
578
907
  export type WeirdParams = {
579
908
  id: string
580
909
  [Symbol.iterator]?: () => Iterator<string>
581
910
  }
582
911
  `);
583
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/item.ts"), `
912
+ writeFileSync((0, import_path.join)(testDir, "item/mutations.ts"), `
584
913
  import { mutations } from 'on-zero'
585
914
  import type { WeirdParams } from './types'
586
915
 
@@ -600,14 +929,14 @@ export const mutate = mutations({
600
929
  (0, import_vitest.expect)(content).not.toContain("__@iterator");
601
930
  });
602
931
  (0, import_vitest.test)("resolves imported types in query params", async function () {
603
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "models/post.ts"), `export const schema = table('post', { id: string() })`);
604
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "queries/types.ts"), `
932
+ writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
933
+ writeFileSync((0, import_path.join)(testDir, "post/types.ts"), `
605
934
  export type PostFilter = {
606
935
  authorId: string
607
936
  published: boolean
608
937
  }
609
938
  `);
610
- (0, import_fs.writeFileSync)((0, import_path.join)(testDir, "queries/post.ts"), `
939
+ writeFileSync((0, import_path.join)(testDir, "post/queries.ts"), `
611
940
  import type { PostFilter } from './types'
612
941
 
613
942
  export const filteredPosts = (filter: PostFilter) => zero.query.post