on-zero 0.16.20 → 0.16.21

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 (329) hide show
  1. package/dist/cjs/cli.cjs +6 -0
  2. package/dist/cjs/cli.native.js +6 -0
  3. package/dist/cjs/cli.native.js.map +1 -1
  4. package/dist/cjs/combineZeroClients.native.js.map +1 -1
  5. package/dist/cjs/config.native.js.map +1 -1
  6. package/dist/cjs/createPermissions.native.js.map +1 -1
  7. package/dist/cjs/createSchemaFromDrizzle.native.js.map +1 -1
  8. package/dist/cjs/createUseQuery.cjs +14 -4
  9. package/dist/cjs/createUseQuery.native.js +18 -5
  10. package/dist/cjs/createUseQuery.native.js.map +1 -1
  11. package/dist/cjs/createUseQueryDirect.cjs +13 -2
  12. package/dist/cjs/createUseQueryDirect.native.js +14 -2
  13. package/dist/cjs/createUseQueryDirect.native.js.map +1 -1
  14. package/dist/cjs/createZeroClient.authData.test.native.js.map +1 -1
  15. package/dist/cjs/createZeroClient.cjs +21 -3
  16. package/dist/cjs/createZeroClient.connection.test.native.js.map +1 -1
  17. package/dist/cjs/createZeroClient.exportProbe.test.native.js.map +1 -1
  18. package/dist/cjs/createZeroClient.headless.test.native.js.map +1 -1
  19. package/dist/cjs/createZeroClient.httpAuth.test.native.js.map +1 -1
  20. package/dist/cjs/createZeroClient.native.js +28 -3
  21. package/dist/cjs/createZeroClient.native.js.map +1 -1
  22. package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -1
  23. package/dist/cjs/generate-helpers.native.js.map +1 -1
  24. package/dist/cjs/generate-helpers.test.native.js.map +1 -1
  25. package/dist/cjs/generate-layout.native.js.map +1 -1
  26. package/dist/cjs/generate-lite.native.js.map +1 -1
  27. package/dist/cjs/generate-lite.test.native.js.map +1 -1
  28. package/dist/cjs/generate.cjs +57 -30
  29. package/dist/cjs/generate.native.js +92 -31
  30. package/dist/cjs/generate.native.js.map +1 -1
  31. package/dist/cjs/generate.test.cjs +147 -0
  32. package/dist/cjs/generate.test.native.js +147 -0
  33. package/dist/cjs/generate.test.native.js.map +1 -1
  34. package/dist/cjs/helpers/NullToOptional.native.js.map +1 -1
  35. package/dist/cjs/helpers/asyncContext.hostStorage.test.native.js.map +1 -1
  36. package/dist/cjs/helpers/batchQuery.native.js.map +1 -1
  37. package/dist/cjs/helpers/clearZeroClientData.native.js.map +1 -1
  38. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  39. package/dist/cjs/helpers/createMutators.test.native.js.map +1 -1
  40. package/dist/cjs/helpers/ellipsis.native.js.map +1 -1
  41. package/dist/cjs/helpers/emitter.native.js.map +1 -1
  42. package/dist/cjs/helpers/ensure.native.js.map +1 -1
  43. package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
  44. package/dist/cjs/helpers/errors.native.js.map +1 -1
  45. package/dist/cjs/helpers/getAuth.native.js.map +1 -1
  46. package/dist/cjs/helpers/getCurrentComponentStack.native.js.map +1 -1
  47. package/dist/cjs/helpers/globalValue.native.js.map +1 -1
  48. package/dist/cjs/helpers/hostStorageScope.native.js.map +1 -1
  49. package/dist/cjs/helpers/mapObject.native.js.map +1 -1
  50. package/dist/cjs/helpers/mutationLifecycle.native.js.map +1 -1
  51. package/dist/cjs/helpers/mutationLifecycle.test.native.js.map +1 -1
  52. package/dist/cjs/helpers/mutatorContext.native.js.map +1 -1
  53. package/dist/cjs/helpers/mutatorContext.test.native.js.map +1 -1
  54. package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +1 -1
  55. package/dist/cjs/helpers/queryContext.native.js.map +1 -1
  56. package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
  57. package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
  58. package/dist/cjs/helpers/showZeroClientError.native.js.map +1 -1
  59. package/dist/cjs/helpers/sleep.native.js.map +1 -1
  60. package/dist/cjs/helpers/time.native.js.map +1 -1
  61. package/dist/cjs/helpers/tuple.native.js.map +1 -1
  62. package/dist/cjs/helpers/useMutation.native.js.map +1 -1
  63. package/dist/cjs/helpers/useMutation.test.native.js.map +1 -1
  64. package/dist/cjs/helpers/useZeroDebug.native.js.map +1 -1
  65. package/dist/cjs/index.native.js.map +1 -1
  66. package/dist/cjs/instanceRegistry.native.js.map +1 -1
  67. package/dist/cjs/modelRegistry.native.js.map +1 -1
  68. package/dist/cjs/multi.cjs +10 -5
  69. package/dist/cjs/multi.native.js +10 -5
  70. package/dist/cjs/multi.native.js.map +1 -1
  71. package/dist/cjs/multiInstance.test.native.js.map +1 -1
  72. package/dist/cjs/multiInstanceMutations.test.native.js.map +1 -1
  73. package/dist/cjs/multiInstanceNested.test.native.js.map +1 -1
  74. package/dist/cjs/multiPartition.test.cjs +46 -2
  75. package/dist/cjs/multiPartition.test.native.js +50 -2
  76. package/dist/cjs/multiPartition.test.native.js.map +1 -1
  77. package/dist/cjs/mutations.native.js.map +1 -1
  78. package/dist/cjs/mutations.test.native.js.map +1 -1
  79. package/dist/cjs/native-typescript.cjs +50 -11
  80. package/dist/cjs/native-typescript.native.js +158 -30
  81. package/dist/cjs/native-typescript.native.js.map +1 -1
  82. package/dist/cjs/provideZero.eagerInstance.test.cjs +22 -0
  83. package/dist/cjs/provideZero.eagerInstance.test.native.js +30 -0
  84. package/dist/cjs/provideZero.eagerInstance.test.native.js.map +1 -1
  85. package/dist/cjs/provideZero.hydration.test.native.js.map +1 -1
  86. package/dist/cjs/provideZero.ssr.test.native.js.map +1 -1
  87. package/dist/cjs/queryErrorRecovery.cjs +93 -0
  88. package/dist/cjs/queryErrorRecovery.native.js +205 -0
  89. package/dist/cjs/queryErrorRecovery.native.js.map +1 -0
  90. package/dist/cjs/queryJson.native.js.map +1 -1
  91. package/dist/cjs/queryRegistry.native.js.map +1 -1
  92. package/dist/cjs/resolveQuery.native.js.map +1 -1
  93. package/dist/cjs/run.native.js.map +1 -1
  94. package/dist/cjs/server.native.js.map +1 -1
  95. package/dist/cjs/server.test.native.js.map +1 -1
  96. package/dist/cjs/serverWhere.native.js.map +1 -1
  97. package/dist/cjs/serverWhere.test.native.js.map +1 -1
  98. package/dist/cjs/state.native.js.map +1 -1
  99. package/dist/cjs/streaming.native.js.map +1 -1
  100. package/dist/cjs/testSetup.native.js.map +1 -1
  101. package/dist/cjs/types.native.js.map +1 -1
  102. package/dist/cjs/usePermission.test.native.js.map +1 -1
  103. package/dist/cjs/useQuery.aggregate.zero.test.cjs +199 -4
  104. package/dist/cjs/useQuery.aggregate.zero.test.native.js +212 -4
  105. package/dist/cjs/useQuery.aggregate.zero.test.native.js.map +1 -1
  106. package/dist/cjs/useQuery.empty.test.native.js.map +1 -1
  107. package/dist/cjs/useQuery.ssr.test.native.js.map +1 -1
  108. package/dist/cjs/useStreamingField.loop.test.native.js.map +1 -1
  109. package/dist/cjs/useStreamingField.native.js.map +1 -1
  110. package/dist/cjs/vite-plugin.cjs +10 -0
  111. package/dist/cjs/vite-plugin.native.js +10 -0
  112. package/dist/cjs/vite-plugin.native.js.map +1 -1
  113. package/dist/cjs/where.native.js.map +1 -1
  114. package/dist/cjs/zeroRunner.native.js.map +1 -1
  115. package/dist/cjs/zql.native.js.map +1 -1
  116. package/dist/esm/cli.mjs +6 -0
  117. package/dist/esm/cli.mjs.map +1 -1
  118. package/dist/esm/cli.native.js +7 -1
  119. package/dist/esm/cli.native.js.map +1 -1
  120. package/dist/esm/combineZeroClients.native.js +4 -4
  121. package/dist/esm/combineZeroClients.native.js.map +1 -1
  122. package/dist/esm/config.native.js.map +1 -1
  123. package/dist/esm/createPermissions.native.js +4 -4
  124. package/dist/esm/createPermissions.native.js.map +1 -1
  125. package/dist/esm/createSchemaFromDrizzle.native.js +1 -1
  126. package/dist/esm/createSchemaFromDrizzle.native.js.map +1 -1
  127. package/dist/esm/createUseQuery.mjs +16 -6
  128. package/dist/esm/createUseQuery.mjs.map +1 -1
  129. package/dist/esm/createUseQuery.native.js +24 -11
  130. package/dist/esm/createUseQuery.native.js.map +1 -1
  131. package/dist/esm/createUseQueryDirect.mjs +13 -2
  132. package/dist/esm/createUseQueryDirect.mjs.map +1 -1
  133. package/dist/esm/createUseQueryDirect.native.js +19 -7
  134. package/dist/esm/createUseQueryDirect.native.js.map +1 -1
  135. package/dist/esm/createZeroClient.authData.test.native.js +2 -2
  136. package/dist/esm/createZeroClient.authData.test.native.js.map +1 -1
  137. package/dist/esm/createZeroClient.connection.test.native.js +1 -1
  138. package/dist/esm/createZeroClient.connection.test.native.js.map +1 -1
  139. package/dist/esm/createZeroClient.exportProbe.test.native.js +1 -1
  140. package/dist/esm/createZeroClient.exportProbe.test.native.js.map +1 -1
  141. package/dist/esm/createZeroClient.headless.test.native.js +2 -2
  142. package/dist/esm/createZeroClient.headless.test.native.js.map +1 -1
  143. package/dist/esm/createZeroClient.httpAuth.test.native.js +1 -1
  144. package/dist/esm/createZeroClient.httpAuth.test.native.js.map +1 -1
  145. package/dist/esm/createZeroClient.mjs +21 -3
  146. package/dist/esm/createZeroClient.mjs.map +1 -1
  147. package/dist/esm/createZeroClient.native.js +49 -24
  148. package/dist/esm/createZeroClient.native.js.map +1 -1
  149. package/dist/esm/createZeroClient.recovery.test.native.js +2 -2
  150. package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -1
  151. package/dist/esm/generate-helpers.native.js.map +1 -1
  152. package/dist/esm/generate-helpers.test.native.js +1 -1
  153. package/dist/esm/generate-helpers.test.native.js.map +1 -1
  154. package/dist/esm/generate-layout.native.js.map +1 -1
  155. package/dist/esm/generate-lite.native.js +1 -1
  156. package/dist/esm/generate-lite.native.js.map +1 -1
  157. package/dist/esm/generate-lite.test.native.js +1 -1
  158. package/dist/esm/generate-lite.test.native.js.map +1 -1
  159. package/dist/esm/generate.mjs +57 -30
  160. package/dist/esm/generate.mjs.map +1 -1
  161. package/dist/esm/generate.native.js +95 -34
  162. package/dist/esm/generate.native.js.map +1 -1
  163. package/dist/esm/generate.test.mjs +147 -0
  164. package/dist/esm/generate.test.mjs.map +1 -1
  165. package/dist/esm/generate.test.native.js +148 -1
  166. package/dist/esm/generate.test.native.js.map +1 -1
  167. package/dist/esm/helpers/NullToOptional.native.js.map +1 -1
  168. package/dist/esm/helpers/asyncContext.hostStorage.test.native.js +7 -7
  169. package/dist/esm/helpers/asyncContext.hostStorage.test.native.js.map +1 -1
  170. package/dist/esm/helpers/batchQuery.native.js +1 -1
  171. package/dist/esm/helpers/batchQuery.native.js.map +1 -1
  172. package/dist/esm/helpers/clearZeroClientData.native.js.map +1 -1
  173. package/dist/esm/helpers/createMutators.native.js +4 -4
  174. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  175. package/dist/esm/helpers/createMutators.test.native.js +2 -2
  176. package/dist/esm/helpers/createMutators.test.native.js.map +1 -1
  177. package/dist/esm/helpers/ellipsis.native.js.map +1 -1
  178. package/dist/esm/helpers/emitter.native.js.map +1 -1
  179. package/dist/esm/helpers/ensure.native.js +1 -1
  180. package/dist/esm/helpers/ensure.native.js.map +1 -1
  181. package/dist/esm/helpers/ensureLoggedIn.native.js +2 -2
  182. package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -1
  183. package/dist/esm/helpers/errors.native.js.map +1 -1
  184. package/dist/esm/helpers/getAuth.native.js +3 -3
  185. package/dist/esm/helpers/getAuth.native.js.map +1 -1
  186. package/dist/esm/helpers/getCurrentComponentStack.native.js.map +1 -1
  187. package/dist/esm/helpers/globalValue.native.js.map +1 -1
  188. package/dist/esm/helpers/hostStorageScope.native.js.map +1 -1
  189. package/dist/esm/helpers/mapObject.native.js.map +1 -1
  190. package/dist/esm/helpers/mutationLifecycle.native.js +1 -1
  191. package/dist/esm/helpers/mutationLifecycle.native.js.map +1 -1
  192. package/dist/esm/helpers/mutationLifecycle.test.native.js +1 -1
  193. package/dist/esm/helpers/mutationLifecycle.test.native.js.map +1 -1
  194. package/dist/esm/helpers/mutatorContext.native.js +1 -1
  195. package/dist/esm/helpers/mutatorContext.native.js.map +1 -1
  196. package/dist/esm/helpers/mutatorContext.test.native.js +6 -6
  197. package/dist/esm/helpers/mutatorContext.test.native.js.map +1 -1
  198. package/dist/esm/helpers/prettyFormatZeroQuery.native.js +1 -1
  199. package/dist/esm/helpers/prettyFormatZeroQuery.native.js.map +1 -1
  200. package/dist/esm/helpers/queryContext.native.js +1 -1
  201. package/dist/esm/helpers/queryContext.native.js.map +1 -1
  202. package/dist/esm/helpers/recoverZeroClient.native.js +1 -1
  203. package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
  204. package/dist/esm/helpers/recoverZeroClient.test.native.js +2 -2
  205. package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
  206. package/dist/esm/helpers/showZeroClientError.native.js +1 -1
  207. package/dist/esm/helpers/showZeroClientError.native.js.map +1 -1
  208. package/dist/esm/helpers/sleep.native.js +1 -1
  209. package/dist/esm/helpers/sleep.native.js.map +1 -1
  210. package/dist/esm/helpers/time.native.js.map +1 -1
  211. package/dist/esm/helpers/tuple.native.js.map +1 -1
  212. package/dist/esm/helpers/useMutation.native.js.map +1 -1
  213. package/dist/esm/helpers/useMutation.test.native.js +1 -1
  214. package/dist/esm/helpers/useMutation.test.native.js.map +1 -1
  215. package/dist/esm/helpers/useZeroDebug.native.js +2 -2
  216. package/dist/esm/helpers/useZeroDebug.native.js.map +1 -1
  217. package/dist/esm/index.native.js +23 -23
  218. package/dist/esm/index.native.js.map +1 -1
  219. package/dist/esm/instanceRegistry.native.js +2 -2
  220. package/dist/esm/instanceRegistry.native.js.map +1 -1
  221. package/dist/esm/modelRegistry.native.js.map +1 -1
  222. package/dist/esm/multi.mjs +10 -5
  223. package/dist/esm/multi.mjs.map +1 -1
  224. package/dist/esm/multi.native.js +15 -10
  225. package/dist/esm/multi.native.js.map +1 -1
  226. package/dist/esm/multiInstance.test.native.js +10 -10
  227. package/dist/esm/multiInstance.test.native.js.map +1 -1
  228. package/dist/esm/multiInstanceMutations.test.native.js +4 -4
  229. package/dist/esm/multiInstanceMutations.test.native.js.map +1 -1
  230. package/dist/esm/multiInstanceNested.test.native.js +3 -3
  231. package/dist/esm/multiInstanceNested.test.native.js.map +1 -1
  232. package/dist/esm/multiPartition.test.mjs +47 -3
  233. package/dist/esm/multiPartition.test.mjs.map +1 -1
  234. package/dist/esm/multiPartition.test.native.js +52 -4
  235. package/dist/esm/multiPartition.test.native.js.map +1 -1
  236. package/dist/esm/mutations.native.js +2 -2
  237. package/dist/esm/mutations.native.js.map +1 -1
  238. package/dist/esm/mutations.test.native.js +4 -4
  239. package/dist/esm/mutations.test.native.js.map +1 -1
  240. package/dist/esm/native-typescript.mjs +50 -11
  241. package/dist/esm/native-typescript.mjs.map +1 -1
  242. package/dist/esm/native-typescript.native.js +158 -30
  243. package/dist/esm/native-typescript.native.js.map +1 -1
  244. package/dist/esm/provideZero.eagerInstance.test.mjs +22 -0
  245. package/dist/esm/provideZero.eagerInstance.test.mjs.map +1 -1
  246. package/dist/esm/provideZero.eagerInstance.test.native.js +31 -1
  247. package/dist/esm/provideZero.eagerInstance.test.native.js.map +1 -1
  248. package/dist/esm/provideZero.hydration.test.native.js +2 -2
  249. package/dist/esm/provideZero.hydration.test.native.js.map +1 -1
  250. package/dist/esm/provideZero.ssr.test.native.js +2 -2
  251. package/dist/esm/provideZero.ssr.test.native.js.map +1 -1
  252. package/dist/esm/queryErrorRecovery.mjs +66 -0
  253. package/dist/esm/queryErrorRecovery.mjs.map +1 -0
  254. package/dist/esm/queryErrorRecovery.native.js +175 -0
  255. package/dist/esm/queryErrorRecovery.native.js.map +1 -0
  256. package/dist/esm/queryJson.native.js +1 -1
  257. package/dist/esm/queryJson.native.js.map +1 -1
  258. package/dist/esm/queryRegistry.native.js.map +1 -1
  259. package/dist/esm/resolveQuery.native.js +2 -2
  260. package/dist/esm/resolveQuery.native.js.map +1 -1
  261. package/dist/esm/run.native.js +4 -4
  262. package/dist/esm/run.native.js.map +1 -1
  263. package/dist/esm/server.native.js +10 -10
  264. package/dist/esm/server.native.js.map +1 -1
  265. package/dist/esm/server.test.native.js +2 -2
  266. package/dist/esm/server.test.native.js.map +1 -1
  267. package/dist/esm/serverWhere.native.js +1 -1
  268. package/dist/esm/serverWhere.native.js.map +1 -1
  269. package/dist/esm/serverWhere.test.native.js +3 -3
  270. package/dist/esm/serverWhere.test.native.js.map +1 -1
  271. package/dist/esm/state.native.js +1 -1
  272. package/dist/esm/state.native.js.map +1 -1
  273. package/dist/esm/streaming.native.js +1 -1
  274. package/dist/esm/streaming.native.js.map +1 -1
  275. package/dist/esm/testSetup.native.js.map +1 -1
  276. package/dist/esm/types.native.js.map +1 -1
  277. package/dist/esm/usePermission.test.native.js +3 -3
  278. package/dist/esm/usePermission.test.native.js.map +1 -1
  279. package/dist/esm/useQuery.aggregate.zero.test.mjs +197 -2
  280. package/dist/esm/useQuery.aggregate.zero.test.mjs.map +1 -1
  281. package/dist/esm/useQuery.aggregate.zero.test.native.js +212 -4
  282. package/dist/esm/useQuery.aggregate.zero.test.native.js.map +1 -1
  283. package/dist/esm/useQuery.empty.test.native.js +3 -3
  284. package/dist/esm/useQuery.empty.test.native.js.map +1 -1
  285. package/dist/esm/useQuery.ssr.test.native.js +2 -2
  286. package/dist/esm/useQuery.ssr.test.native.js.map +1 -1
  287. package/dist/esm/useStreamingField.loop.test.native.js +1 -1
  288. package/dist/esm/useStreamingField.loop.test.native.js.map +1 -1
  289. package/dist/esm/useStreamingField.native.js.map +1 -1
  290. package/dist/esm/vite-plugin.mjs +10 -0
  291. package/dist/esm/vite-plugin.mjs.map +1 -1
  292. package/dist/esm/vite-plugin.native.js +11 -1
  293. package/dist/esm/vite-plugin.native.js.map +1 -1
  294. package/dist/esm/where.native.js +3 -3
  295. package/dist/esm/where.native.js.map +1 -1
  296. package/dist/esm/zeroRunner.native.js +1 -1
  297. package/dist/esm/zeroRunner.native.js.map +1 -1
  298. package/dist/esm/zql.native.js +1 -1
  299. package/dist/esm/zql.native.js.map +1 -1
  300. package/package.json +4 -4
  301. package/src/cli.ts +6 -0
  302. package/src/createUseQuery.tsx +20 -5
  303. package/src/createUseQueryDirect.tsx +17 -1
  304. package/src/createZeroClient.tsx +37 -4
  305. package/src/generate.test.ts +116 -0
  306. package/src/generate.ts +109 -52
  307. package/src/multi.ts +11 -3
  308. package/src/multiPartition.test.ts +55 -11
  309. package/src/native-typescript.ts +64 -11
  310. package/src/provideZero.eagerInstance.test.tsx +27 -0
  311. package/src/queryErrorRecovery.ts +95 -0
  312. package/src/useQuery.aggregate.zero.test.tsx +187 -2
  313. package/src/vite-plugin.ts +10 -0
  314. package/types/createUseQuery.d.ts +3 -1
  315. package/types/createUseQuery.d.ts.map +1 -1
  316. package/types/createUseQueryDirect.d.ts +3 -1
  317. package/types/createUseQueryDirect.d.ts.map +1 -1
  318. package/types/createZeroClient.d.ts +3 -1
  319. package/types/createZeroClient.d.ts.map +1 -1
  320. package/types/generate.d.ts +4 -0
  321. package/types/generate.d.ts.map +1 -1
  322. package/types/multi.d.ts +3 -1
  323. package/types/multi.d.ts.map +1 -1
  324. package/types/native-typescript.d.ts +7 -1
  325. package/types/native-typescript.d.ts.map +1 -1
  326. package/types/queryErrorRecovery.d.ts +33 -0
  327. package/types/queryErrorRecovery.d.ts.map +1 -0
  328. package/types/useQuery.aggregate.zero.test.d.ts.map +1 -1
  329. package/types/vite-plugin.d.ts.map +1 -1
@@ -1,5 +1,5 @@
1
1
  import { isAbsolute, relative, resolve } from "path";
2
- import { generate } from "./generate.native.js";
2
+ import { generate } from "./generate";
3
3
  function createOnZeroHmrPlugin() {
4
4
  var hmrInclude = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [],
5
5
  dataDir = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "src/data";
@@ -42,9 +42,12 @@ function onZeroPlugin() {
42
42
  var dir = (_options_dir = options.dir) !== null && _options_dir !== void 0 ? _options_dir : "src/data";
43
43
  var dataDir;
44
44
  var databaseDir;
45
+ var tsconfig;
45
46
  var runGenerate = function runGenerate2(silent) {
46
47
  return generate({
47
48
  dir: dataDir,
49
+ config: options.config,
50
+ tsconfig,
48
51
  after: options.after,
49
52
  silent,
50
53
  force: options.force
@@ -56,13 +59,19 @@ function onZeroPlugin() {
56
59
  configResolved(config) {
57
60
  dataDir = resolve(config.root, dir);
58
61
  databaseDir = resolve(dataDir, "../database");
62
+ tsconfig = options.tsconfig ? resolve(config.root, options.tsconfig) : void 0;
59
63
  },
60
64
  async buildStart() {
61
65
  if (!options.disableGenerate) await runGenerate(false);
62
66
  },
63
67
  configureServer(server) {
64
68
  if (options.disableGenerate) return;
69
+ if (tsconfig) server.watcher.add(tsconfig);
65
70
  var handler = async function handler2(file) {
71
+ if (file === tsconfig) {
72
+ await runGenerate(false);
73
+ return;
74
+ }
66
75
  if (!/\.tsx?$/.test(file)) return;
67
76
  if (isWithinDirectory(file, dataDir) && !isWithinDirectory(file, resolve(dataDir, "generated")) || isWithinDirectory(file, databaseDir)) {
68
77
  await runGenerate(false);
@@ -77,6 +86,7 @@ function onZeroPlugin() {
77
86
  apply: "build",
78
87
  configResolved(config) {
79
88
  dataDir = resolve(config.root, dir);
89
+ tsconfig = options.tsconfig ? resolve(config.root, options.tsconfig) : void 0;
80
90
  },
81
91
  async buildStart() {
82
92
  if (!options.disableGenerate) await runGenerate(true);
@@ -1 +1 @@
1
- {"version":3,"names":["isAbsolute","relative","resolve","generate","createOnZeroHmrPlugin","hmrInclude","arguments","length","dataDir","normalizedDataDir","replaceAll","replace","hmrPaths","name","apply","enforce","transform","code","id","some","p","includes","test","transformed","map","isWithinDirectory","file","dir","rel","startsWith","onZeroPlugin","options","_options_dir","databaseDir","runGenerate","runGenerate2","silent","after","force","configResolved","config","root","buildStart","disableGenerate","configureServer","server","handler","handler2","watcher","on"],"sources":["../../src/vite-plugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["isAbsolute","relative","resolve","generate","createOnZeroHmrPlugin","hmrInclude","arguments","length","dataDir","normalizedDataDir","replaceAll","replace","hmrPaths","name","apply","enforce","transform","code","id","some","p","includes","test","transformed","map","isWithinDirectory","file","dir","rel","startsWith","onZeroPlugin","options","_options_dir","databaseDir","tsconfig","runGenerate","runGenerate2","silent","config","after","force","configResolved","root","buildStart","disableGenerate","configureServer","server","watcher","add","handler","handler2","on","onZeroHmrPlugin","onZeroHmrPlugin2","include","vite_plugin_default","default"],"sources":["vite-plugin.native.js"],"sourcesContent":["import { isAbsolute, relative, resolve } from \"path\";\nimport { generate } from \"./generate\";\nfunction createOnZeroHmrPlugin() {\n var hmrInclude = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], dataDir = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : \"src/data\";\n var normalizedDataDir = `/${dataDir.replaceAll(\"\\\\\", \"/\").replace(/^\\/+|\\/+$/g, \"\")}/`;\n var hmrPaths = [\n normalizedDataDir,\n ...hmrInclude\n ];\n return {\n name: \"on-zero:hmr\",\n apply: \"serve\",\n enforce: \"post\",\n transform(code, id) {\n if (!hmrPaths.some(function(p) {\n return id.includes(p);\n }) || !/\\.tsx?$/.test(id)) return;\n var transformed = code;\n if (code.includes(\"import.meta.hot.invalidate\")) {\n transformed = transformed.replace(/if\\s*\\(invalidateMessage\\)\\s*import\\.meta\\.hot\\.invalidate\\(invalidateMessage\\);?/g, \"/* on-zero: HMR invalidate disabled */\");\n }\n if (id.includes(\"/generated/models.\") && !code.includes(\"import.meta.hot.accept\")) {\n transformed += `\nif (import.meta.hot) {\n import.meta.hot.accept()\n}\n`;\n }\n if (transformed === code) return;\n return {\n code: transformed,\n map: null\n };\n }\n };\n}\nfunction isWithinDirectory(file, dir) {\n var rel = relative(dir, file);\n return rel !== \"\" && !rel.startsWith(\"..\") && !isAbsolute(rel);\n}\nfunction onZeroPlugin() {\n var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n var _options_dir;\n var dir = (_options_dir = options.dir) !== null && _options_dir !== void 0 ? _options_dir : \"src/data\";\n var dataDir;\n var databaseDir;\n var tsconfig;\n var runGenerate = function runGenerate2(silent) {\n return generate({\n dir: dataDir,\n config: options.config,\n tsconfig,\n after: options.after,\n silent,\n force: options.force\n });\n };\n return [\n {\n name: \"on-zero:serve\",\n apply: \"serve\",\n configResolved(config) {\n dataDir = resolve(config.root, dir);\n databaseDir = resolve(dataDir, \"../database\");\n tsconfig = options.tsconfig ? resolve(config.root, options.tsconfig) : void 0;\n },\n async buildStart() {\n if (!options.disableGenerate) await runGenerate(false);\n },\n configureServer(server) {\n if (options.disableGenerate) return;\n if (tsconfig) server.watcher.add(tsconfig);\n var handler = async function handler2(file) {\n if (file === tsconfig) {\n await runGenerate(false);\n return;\n }\n if (!/\\.tsx?$/.test(file)) return;\n if (isWithinDirectory(file, dataDir) && !isWithinDirectory(file, resolve(dataDir, \"generated\")) || isWithinDirectory(file, databaseDir)) {\n await runGenerate(false);\n }\n };\n server.watcher.on(\"change\", handler);\n server.watcher.on(\"add\", handler);\n server.watcher.on(\"unlink\", handler);\n }\n },\n {\n name: \"on-zero:build\",\n apply: \"build\",\n configResolved(config) {\n dataDir = resolve(config.root, dir);\n tsconfig = options.tsconfig ? resolve(config.root, options.tsconfig) : void 0;\n },\n async buildStart() {\n if (!options.disableGenerate) await runGenerate(true);\n }\n },\n createOnZeroHmrPlugin(options.hmrInclude, dir)\n ];\n}\nvar onZeroHmrPlugin = function onZeroHmrPlugin2(options) {\n return createOnZeroHmrPlugin(options === null || options === void 0 ? void 0 : options.include);\n};\nvar vite_plugin_default = onZeroPlugin;\nexport {\n vite_plugin_default as default,\n onZeroHmrPlugin,\n onZeroPlugin\n};\n//# sourceMappingURL=vite-plugin.js.map\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
- import { getAuth } from "./helpers/getAuth.native.js";
2
- import { globalValue } from "./helpers/globalValue.native.js";
3
- import { getEnvironment } from "./state.native.js";
1
+ import { getAuth } from "./helpers/getAuth";
2
+ import { globalValue } from "./helpers/globalValue";
3
+ import { getEnvironment } from "./state";
4
4
  var _evaluatingPermission = false;
5
5
  function setEvaluatingPermission(value) {
6
6
  _evaluatingPermission = value;
@@ -1 +1 @@
1
- {"version":3,"names":["getAuth","globalValue","getEnvironment","_evaluatingPermission","setEvaluatingPermission","value","where","a","b","isServerOnly","arguments","length","whereFn","wrappedWhereFn","wrappedWhereFn2","a2","_$b","and","result","cmpLit","WhereRawBuilderMap","set","WhereTableNameMap","WeakMap","getWhereTableName","where2","get","getRawWhere"],"sources":["../../src/where.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,OAAA,QAAe;AACxB,SAASC,WAAA,QAAmB;AAC5B,SAASC,cAAA,QAAsB;AAO/B,IAAIC,qBAAA,GAAwB;AAErB,SAASC,wBAAwBC,KAAA,EAAgB;EACtDF,qBAAA,GAAwBE,KAAA;AAC1B;AAYO,SAASC,MACdC,CAAA,EACAC,CAAA,EACA;EAEA,IAAAC,YAAiB,GAAAC,SAAK,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;EAEtB,IAAAE,OAAM,GAAAJ,CAAA,IAAAD,CAAA;EACJ,IAAAM,cAAI,GAAe,SAAMC,eAAYA,CAAAC,EAAA;IAEnC,IAAAC,GAAA,GAAON,SAAM,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA,MAAAV,OAAA;IACf,IAAAE,cAAA,mBAAAO,YAAA,KAAAN,qBAAA;MAEA,OAAMY,EAAA,CAAAE,GAAS;IACf;IACE,IAAAC,MAAI,GAAAN,OAAQ,CAAAG,EAAA,EAAAC,GAAA;IACV,WAAOT,MAAE,KAAO,SAAS;MAC3B,IAAAW,MAAO;QACL,OAAOX,EAAA,CAAEY,MAAA,CAAO,GAAG,KAAK,CAAC;MAC3B;QACF,OAAAJ,EAAA,CAAAI,MAAA;MACA;IACF;IAGA,OAAAD,MAAA;EAEA;EACEE,kBAAA,CAAAC,GAAkB,CAAAR,cAAI,EAAAD,OAA0B;EAClD,IAAAJ,CAAA;IAEAc,iBAAO,CAAAD,GAAA,CAAAR,cAAA,EAAAN,CAAA;EACT;EAIA,OAAMM,cAAA;AAAoB;AACxB,IACAS,iBAAM,GAAArB,WAAI,CAA0B;EACtC,0BAAAsB,OAAA;AAEA;AAA2B,IACzBH,kBAAA,GAAAnB,WAAA;EACA,OAAM,mBAAIsB,OAAsB;AAClC;AAEO,SAASC,kBAAkBC,MAAA,EAAc;EAC9C,OAAOH,iBAAA,CAAkBI,GAAA,CAAIpB,MAAK;AACpC;AAGO,SAASqB,YAAYF,MAAA,EAAiC;EAC3D,OAAOL,kBAAA,CAAmBM,GAAA,CAAIpB,MAAK;AACrC","ignoreList":[]}
1
+ {"version":3,"names":["getAuth","globalValue","getEnvironment","_evaluatingPermission","setEvaluatingPermission","value","where","a","b","isServerOnly","arguments","length","whereFn","wrappedWhereFn","wrappedWhereFn2","a2","_$b","and","result","cmpLit","WhereRawBuilderMap","set","WhereTableNameMap","WeakMap","getWhereTableName","where2","get","getRawWhere"],"sources":["where.native.js"],"sourcesContent":["import { getAuth } from \"./helpers/getAuth\";\nimport { globalValue } from \"./helpers/globalValue\";\nimport { getEnvironment } from \"./state\";\nvar _evaluatingPermission = false;\nfunction setEvaluatingPermission(value) {\n _evaluatingPermission = value;\n}\nfunction where(a, b) {\n var isServerOnly = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;\n var whereFn = b || a;\n var wrappedWhereFn = function wrappedWhereFn2(a2) {\n var _$b = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : getAuth();\n if (getEnvironment() !== \"server\" && isServerOnly && !_evaluatingPermission) {\n return a2.and();\n }\n var result = whereFn(a2, _$b);\n if (typeof result === \"boolean\") {\n if (result) {\n return a2.cmpLit(0, \"=\", 0);\n } else {\n return a2.cmpLit(1, \"=\", 0);\n }\n }\n return result;\n };\n WhereRawBuilderMap.set(wrappedWhereFn, whereFn);\n if (b) {\n WhereTableNameMap.set(wrappedWhereFn, a);\n }\n return wrappedWhereFn;\n}\nvar WhereTableNameMap = globalValue(`on-zero:where-name`, function() {\n return /* @__PURE__ */ new WeakMap();\n});\nvar WhereRawBuilderMap = globalValue(`on-zero:where-raw`, function() {\n return /* @__PURE__ */ new WeakMap();\n});\nfunction getWhereTableName(where2) {\n return WhereTableNameMap.get(where2);\n}\nfunction getRawWhere(where2) {\n return WhereRawBuilderMap.get(where2);\n}\nexport {\n getRawWhere,\n getWhereTableName,\n setEvaluatingPermission,\n where\n};\n//# sourceMappingURL=where.js.map\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,mBAAmB;AAC3C,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,cAAc,QAAQ,SAAS;AACxC,IAAIC,qBAAqB,GAAG,KAAK;AACjC,SAASC,uBAAuBA,CAACC,KAAK,EAAE;EACtCF,qBAAqB,GAAGE,KAAK;AAC/B;AACA,SAASC,KAAKA,CAACC,CAAC,EAAEC,CAAC,EAAE;EACnB,IAAIC,YAAY,GAAGC,SAAS,CAACC,MAAM,GAAG,CAAC,IAAID,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,GAAGA,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK;EACzF,IAAIE,OAAO,GAAGJ,CAAC,IAAID,CAAC;EACpB,IAAIM,cAAc,GAAG,SAASC,eAAeA,CAACC,EAAE,EAAE;IAChD,IAAIC,GAAG,GAAGN,SAAS,CAACC,MAAM,GAAG,CAAC,IAAID,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,GAAGA,SAAS,CAAC,CAAC,CAAC,GAAGV,OAAO,CAAC,CAAC;IACpF,IAAIE,cAAc,CAAC,CAAC,KAAK,QAAQ,IAAIO,YAAY,IAAI,CAACN,qBAAqB,EAAE;MAC3E,OAAOY,EAAE,CAACE,GAAG,CAAC,CAAC;IACjB;IACA,IAAIC,MAAM,GAAGN,OAAO,CAACG,EAAE,EAAEC,GAAG,CAAC;IAC7B,IAAI,OAAOE,MAAM,KAAK,SAAS,EAAE;MAC/B,IAAIA,MAAM,EAAE;QACV,OAAOH,EAAE,CAACI,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;MAC7B,CAAC,MAAM;QACL,OAAOJ,EAAE,CAACI,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;MAC7B;IACF;IACA,OAAOD,MAAM;EACf,CAAC;EACDE,kBAAkB,CAACC,GAAG,CAACR,cAAc,EAAED,OAAO,CAAC;EAC/C,IAAIJ,CAAC,EAAE;IACLc,iBAAiB,CAACD,GAAG,CAACR,cAAc,EAAEN,CAAC,CAAC;EAC1C;EACA,OAAOM,cAAc;AACvB;AACA,IAAIS,iBAAiB,GAAGrB,WAAW,CAAC,oBAAoB,EAAE,YAAW;EACnE,OAAO,eAAgB,IAAIsB,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC;AACF,IAAIH,kBAAkB,GAAGnB,WAAW,CAAC,mBAAmB,EAAE,YAAW;EACnE,OAAO,eAAgB,IAAIsB,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC;AACF,SAASC,iBAAiBA,CAACC,MAAM,EAAE;EACjC,OAAOH,iBAAiB,CAACI,GAAG,CAACD,MAAM,CAAC;AACtC;AACA,SAASE,WAAWA,CAACF,MAAM,EAAE;EAC3B,OAAOL,kBAAkB,CAACM,GAAG,CAACD,MAAM,CAAC;AACvC;AACA,SACEE,WAAW,EACXH,iBAAiB,EACjBpB,uBAAuB,EACvBE,KAAK","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { isInZeroMutation, mutatorContext } from "./helpers/mutatorContext.native.js";
1
+ import { isInZeroMutation, mutatorContext } from "./helpers/mutatorContext";
2
2
  var runner = null;
3
3
  function setRunner(r) {
4
4
  runner = r;
@@ -1 +1 @@
1
- {"version":3,"names":["isInZeroMutation","mutatorContext","runner","setRunner","r","getRunner","instance","q","o","tx","run","getAmbientRunner","Error"],"sources":["../../src/zeroRunner.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,gBAAA,EAAkBC,cAAA,QAAsB;AAgBjD,IAAIC,MAAA,GAA4B;AAEzB,SAASC,UAAUC,CAAA,EAAsB;EAC9CF,MAAA,GAASE,CAAA;AACX;AAEO,SAASC,UAAUC,QAAA,EAAsD;EAO9E,IAAIN,gBAAA,CAAiB,GAAG;IACtB,OAAO,UAAIO,CAAM,EAAAC,CAAA;MACnB,OAAAP,cAAA,GAAAQ,EAAA,CAAAC,GAAA,CAAAH,CAAA,EAAAC,CAAA;IAEA;EACF;EAEO,OAASG,gBAAA,CAAiBL,QAAA;AAG/B;AACE,SAAAK,gBAAgBA,CAAAL,QAAA;EAClB,IAAAA,QAAA,aAAAA,QAAA,uBAAAA,QAAA,CAAAJ,MAAA;IAEA,OAAKI,QAAQ,CAAAJ,MAAA;EACX;EAAU,IACR,CAAAA,MAAA;IACF,UAAAU,KAAA;EACF;EAEA,OAAOV,MAAA;AACT","ignoreList":[]}
1
+ {"version":3,"names":["isInZeroMutation","mutatorContext","runner","setRunner","r","getRunner","instance","q","o","tx","run","getAmbientRunner","Error"],"sources":["zeroRunner.native.js"],"sourcesContent":["import { isInZeroMutation, mutatorContext } from \"./helpers/mutatorContext\";\nvar runner = null;\nfunction setRunner(r) {\n runner = r;\n}\nfunction getRunner(instance) {\n if (isInZeroMutation()) {\n return function(q, o) {\n return mutatorContext().tx.run(q, o);\n };\n }\n return getAmbientRunner(instance);\n}\nfunction getAmbientRunner(instance) {\n if (instance === null || instance === void 0 ? void 0 : instance.runner) {\n return instance.runner;\n }\n if (!runner) {\n throw new Error(\"Zero runner not initialized. Ensure ProvideZero is mounted, connectHeadless() was called, or server bindings are active.\");\n }\n return runner;\n}\nexport {\n getAmbientRunner,\n getRunner,\n setRunner\n};\n//# sourceMappingURL=zeroRunner.js.map\n"],"mappings":"AAAA,SAASA,gBAAgB,EAAEC,cAAc,QAAQ,0BAA0B;AAC3E,IAAIC,MAAM,GAAG,IAAI;AACjB,SAASC,SAASA,CAACC,CAAC,EAAE;EACpBF,MAAM,GAAGE,CAAC;AACZ;AACA,SAASC,SAASA,CAACC,QAAQ,EAAE;EAC3B,IAAIN,gBAAgB,CAAC,CAAC,EAAE;IACtB,OAAO,UAASO,CAAC,EAAEC,CAAC,EAAE;MACpB,OAAOP,cAAc,CAAC,CAAC,CAACQ,EAAE,CAACC,GAAG,CAACH,CAAC,EAAEC,CAAC,CAAC;IACtC,CAAC;EACH;EACA,OAAOG,gBAAgB,CAACL,QAAQ,CAAC;AACnC;AACA,SAASK,gBAAgBA,CAACL,QAAQ,EAAE;EAClC,IAAIA,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,QAAQ,CAACJ,MAAM,EAAE;IACvE,OAAOI,QAAQ,CAACJ,MAAM;EACxB;EACA,IAAI,CAACA,MAAM,EAAE;IACX,MAAM,IAAIU,KAAK,CAAC,0HAA0H,CAAC;EAC7I;EACA,OAAOV,MAAM;AACf;AACA,SACES,gBAAgB,EAChBN,SAAS,EACTF,SAAS","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { getZQL } from "./state.native.js";
1
+ import { getZQL } from "./state";
2
2
  var zql = new Proxy({}, {
3
3
  get(_target, prop) {
4
4
  var b = getZQL();
@@ -1 +1 @@
1
- {"version":3,"names":["getZQL","zql","Proxy","get","_target","prop","b"],"sources":["../../src/zql.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,MAAA,QAAc;AAIhB,IAAAC,GAAM,OAAMC,KAAI,GAAM,EAAC;EAC5BC,IAAIC,OAAA,EAASC,IAAA,EAAM;IACjB,IAAAC,CAAA,GAAMN,MAAI;IACV,OAAQM,CAAA,CAAUD,IAAI;EACxB;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["getZQL","zql","Proxy","get","_target","prop","b"],"sources":["zql.native.js"],"sourcesContent":["import { getZQL } from \"./state\";\nvar zql = new Proxy({}, {\n get(_target, prop) {\n var b = getZQL();\n return b[prop];\n }\n});\nexport {\n zql\n};\n//# sourceMappingURL=zql.js.map\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,SAAS;AAChC,IAAIC,GAAG,GAAG,IAAIC,KAAK,CAAC,CAAC,CAAC,EAAE;EACtBC,GAAGA,CAACC,OAAO,EAAEC,IAAI,EAAE;IACjB,IAAIC,CAAC,GAAGN,MAAM,CAAC,CAAC;IAChB,OAAOM,CAAC,CAACD,IAAI,CAAC;EAChB;AACF,CAAC,CAAC;AACF,SACEJ,GAAG","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "on-zero",
3
- "version": "0.16.20",
3
+ "version": "0.16.21",
4
4
  "description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
5
5
  "sideEffects": false,
6
6
  "files": [
@@ -113,7 +113,7 @@
113
113
  "chokidar": "^4.0.3",
114
114
  "citty": "^0.1.6",
115
115
  "dequal": "^2.0.3",
116
- "orez-lite": "0.16.20",
116
+ "orez-lite": "0.16.21",
117
117
  "typescript": "7.0.2",
118
118
  "valibot": "^1.1.0"
119
119
  },
@@ -145,7 +145,7 @@
145
145
  "react": "^19.0.0",
146
146
  "react-dom": "^19.0.0",
147
147
  "react-native": "*",
148
- "vitest": "^3.1.1"
148
+ "vitest": "^3.2.7"
149
149
  },
150
- "releaseSourceCommit": "ea248201d35f2c30b74a6401eda49b9bdd3d2287"
150
+ "releaseSourceCommit": "692d233ff502256274f2ff23036a5d17c0936b5a"
151
151
  }
package/src/cli.ts CHANGED
@@ -24,6 +24,11 @@ const generateCommand = defineCommand({
24
24
  required: false,
25
25
  default: false,
26
26
  },
27
+ tsconfig: {
28
+ type: 'string',
29
+ description: 'TypeScript project used only for generation',
30
+ required: false,
31
+ },
27
32
  after: {
28
33
  type: 'string',
29
34
  description: 'Command to run after generation completes',
@@ -43,6 +48,7 @@ const generateCommand = defineCommand({
43
48
  const opts = {
44
49
  dir: config ? dirname(config) : target,
45
50
  config,
51
+ tsconfig: args.tsconfig,
46
52
  after: args.after,
47
53
  force: args.force,
48
54
  }
@@ -1,9 +1,10 @@
1
1
  import { addContextToQuery, asQueryInternals } from '@rocicorp/zero/bindings'
2
- import { useQuery as zeroUseQuery } from '@rocicorp/zero/react'
3
- import { useContext, useMemo, useRef, type Context } from 'react'
2
+ import { useQuery as zeroUseQuery, useZero } from '@rocicorp/zero/react'
3
+ import { useContext, useEffect, useMemo, useRef, type Context } from 'react'
4
4
 
5
5
  import { IS_SERVER_RUNTIME } from './helpers/platform'
6
6
  import { useZeroDebug } from './helpers/useZeroDebug'
7
+ import { QueryErrorRecovery, useQueryFault, type QueryFaults } from './queryErrorRecovery'
7
8
  import { serializeQueryParams } from './queryJson'
8
9
  import { resolveQuery, type PlainQueryFn } from './resolveQuery'
9
10
 
@@ -90,9 +91,11 @@ export function parseUseQueryArgs(paramsOrOptions: any, optionsArg: any) {
90
91
  export function createUseQuery<Schema extends ZeroSchema>({
91
92
  DisabledContext,
92
93
  customQueries,
94
+ getQueryFaults,
93
95
  }: {
94
96
  DisabledContext: Context<QueryControlMode>
95
97
  customQueries: AnyQueryRegistry
98
+ getQueryFaults: (zero: object) => QueryFaults | undefined
96
99
  }): UseQueryHook<Schema> {
97
100
  // SSG: return an inert hook. on-zero's bundled React copy isn't the same
98
101
  // one the SSG build's renderer initialises, so hook dispatch returns null.
@@ -156,6 +159,18 @@ export function createUseQuery<Schema extends ZeroSchema>({
156
159
  [effectiveEnabled, optionTTL]
157
160
  )
158
161
  const rawOut = zeroUseQuery(queryRequest, effectiveOptions)
162
+ const zero = useZero()
163
+ const faultOut = useQueryFault(
164
+ effectiveEnabled === false ? undefined : getQueryFaults(zero),
165
+ queryRequest,
166
+ rawOut
167
+ )
168
+ const recovery = useMemo(() => new QueryErrorRecovery(), [queryRequest])
169
+ useEffect(() => {
170
+ if (recovery.changed(rawOut[0], rawOut[1].type) && rawOut[1].type === 'error') {
171
+ rawOut[1].retry?.()
172
+ }
173
+ }, [rawOut, recovery])
159
174
 
160
175
  // normalize the rare null-data first snapshot for plural queries to []:
161
176
  // zero-react's viewStore briefly hands us [null, {type:'unknown'}] when a
@@ -164,11 +179,11 @@ export function createUseQuery<Schema extends ZeroSchema>({
164
179
  // callers must never see null here. cheap drop-in: only allocates a new
165
180
  // tuple in the (rare) null case; the steady-state pass-through is one
166
181
  // identity check per render.
167
- let out: any = rawOut
168
- if (rawOut?.[0] === null) {
182
+ let out: any = faultOut
183
+ if (faultOut?.[0] === null) {
169
184
  const fallback = emptyResponseFor(queryRequest)
170
185
  if (fallback === EMPTY_RESPONSE_PLURAL) {
171
- out = [EMPTY_PLURAL, rawOut[1] ?? RESULT_UNKNOWN]
186
+ out = [EMPTY_PLURAL, faultOut[1] ?? RESULT_UNKNOWN]
172
187
  }
173
188
  }
174
189
 
@@ -15,6 +15,7 @@ import {
15
15
  } from './createUseQuery'
16
16
  import { useEmitterValue, type Emitter } from './helpers/emitter'
17
17
  import { IS_SERVER_RUNTIME } from './helpers/platform'
18
+ import { QueryErrorRecovery, useQueryFault, type QueryFaults } from './queryErrorRecovery'
18
19
  import { serializeQueryParams } from './queryJson'
19
20
  import { resolveQuery } from './resolveQuery'
20
21
 
@@ -60,6 +61,7 @@ export type CreateUseQueryDirect<Schema extends ZeroSchema> = (props: {
60
61
  customQueries: AnyQueryRegistry
61
62
  getZero: () => MaterializableZero | null
62
63
  zeroVersion: Emitter<number>
64
+ getQueryFaults: (zero: object) => QueryFaults | undefined
63
65
  }) => UseQueryHook<Schema>
64
66
 
65
67
  type DirectResultType = 'unknown' | 'complete' | 'error'
@@ -134,6 +136,7 @@ class DirectViewWrapper implements DirectView {
134
136
  private snapshot: DirectSnapshot
135
137
  private readonly listeners = new Set<() => void>()
136
138
  private destroyTimer: ReturnType<typeof setTimeout> | undefined
139
+ private readonly recovery = new QueryErrorRecovery()
137
140
 
138
141
  constructor(
139
142
  private readonly query: any,
@@ -148,6 +151,8 @@ class DirectViewWrapper implements DirectView {
148
151
 
149
152
  private onData = (data: unknown, resultType: string, error?: DirectQueryError) => {
150
153
  const cloned = data === undefined ? undefined : deepClone(data as ReadonlyJSONValue)
154
+ const retryAfterChange = this.recovery.changed(cloned, resultType)
155
+ const current = this.view
151
156
  this.snapshot = getSnapshot(
152
157
  this.singular,
153
158
  cloned,
@@ -158,6 +163,11 @@ class DirectViewWrapper implements DirectView {
158
163
  for (const listener of this.listeners) {
159
164
  listener()
160
165
  }
166
+ if (retryAfterChange) {
167
+ queueMicrotask(() => {
168
+ if (this.view === current && this.snapshot[1].type === 'error') this.retry()
169
+ })
170
+ }
161
171
  }
162
172
 
163
173
  private retry = () => {
@@ -259,6 +269,7 @@ export function createUseQueryDirect<Schema extends ZeroSchema>({
259
269
  customQueries,
260
270
  getZero,
261
271
  zeroVersion,
272
+ getQueryFaults,
262
273
  }: Parameters<CreateUseQueryDirect<Schema>>[0]): UseQueryHook<Schema> {
263
274
  // SSG: return an inert hook — see createUseQuery for the rationale. resolve
264
275
  // each call's query shape so singular queries get [undefined, info] and
@@ -334,11 +345,16 @@ export function createUseQueryDirect<Schema extends ZeroSchema>({
334
345
  }, [queryRequest, enabled, ttl, zeroInstance])
335
346
 
336
347
  const getEmpty = () => emptyForQuery as DirectSnapshot
337
- const out = useSyncExternalStore(
348
+ const rawOut = useSyncExternalStore(
338
349
  view ? view.subscribe : DISABLED_SUBSCRIBE,
339
350
  view ? view.getSnapshot : getEmpty,
340
351
  view ? view.getSnapshot : getEmpty
341
352
  )
353
+ const out = useQueryFault(
354
+ zeroInstance && enabled && !disableMode ? getQueryFaults(zeroInstance) : undefined,
355
+ queryRequest,
356
+ rawOut
357
+ )
342
358
 
343
359
  if (!disableMode) {
344
360
  lastRef.current = out
@@ -51,6 +51,7 @@ import {
51
51
  import { observeMutation, reportMutationInvocationError } from './helpers/useMutation'
52
52
  import { registerClientInstance } from './instanceRegistry'
53
53
  import { getAllMutationsPermissions, getMutationsPermissions } from './modelRegistry'
54
+ import { QueryFaults } from './queryErrorRecovery'
54
55
  import { assertQueryJson } from './queryJson'
55
56
  import { registerQuery } from './queryRegistry'
56
57
  import { resolveQuery, type PlainQueryFn } from './resolveQuery'
@@ -92,7 +93,12 @@ export type GroupedQueries = Record<string, Record<string, (...args: any[]) => a
92
93
  export type PermissionStrategy = 'optimistic' | 'optimistic-deny' | 'optimistic-allow'
93
94
 
94
95
  export type ZeroProviderTransport = {
95
- install(serverURL: string): Pick<HttpPullTransport, 'subscribeLifecycle'> | undefined
96
+ install(
97
+ serverURL: string
98
+ ):
99
+ | (Pick<HttpPullTransport, 'subscribeLifecycle'> &
100
+ Partial<Pick<HttpPullTransport, 'pull'>>)
101
+ | undefined
96
102
  logClassifications?: {
97
103
  benign?: readonly ZeroLogPattern[]
98
104
  }
@@ -129,6 +135,7 @@ export type DirectQueryAdapter<Schema extends ZeroSchema> = (props: {
129
135
  customQueries: AnyQueryRegistry
130
136
  getZero: () => any
131
137
  zeroVersion: Emitter<number>
138
+ getQueryFaults: (zero: object) => QueryFaults | undefined
132
139
  }) => UseQueryHook<Schema>
133
140
 
134
141
  function getZeroProxyValue(instance: object, key: PropertyKey) {
@@ -335,8 +342,9 @@ export function createZeroClientInternal<
335
342
  let clientMutators: ReturnType<typeof createMutators> | null = null
336
343
  const installedTransports = new WeakMap<
337
344
  ZeroInstance,
338
- Pick<HttpPullTransport, 'subscribeLifecycle'>
345
+ ReturnType<ZeroProviderTransport['install']>
339
346
  >()
347
+ const queryFaults = new WeakMap<object, QueryFaults>()
340
348
  function getClientMutators() {
341
349
  clientMutators ??= createMutators({
342
350
  models,
@@ -375,7 +383,7 @@ export function createZeroClientInternal<
375
383
  awaitReconnected,
376
384
  reload,
377
385
  }: ConstructZeroInstanceArgs): ZeroInstance {
378
- let installedTransport: Pick<HttpPullTransport, 'subscribeLifecycle'> | undefined
386
+ let installedTransport: ReturnType<ZeroProviderTransport['install']>
379
387
  // install before construction so the instance's first connect goes through
380
388
  // HTTP. ensureHttpPullTransport is per-origin idempotent by design (a
381
389
  // rotation would otherwise chain shims), so repeat calls reuse.
@@ -433,7 +441,15 @@ export function createZeroClientInternal<
433
441
  options.onClientStateNotFound ?? recovery.onClientStateNotFound,
434
442
  })
435
443
  instanceRef.current = createdInstance
436
- if (installedTransport) installedTransports.set(createdInstance, installedTransport)
444
+ if (installedTransport) {
445
+ installedTransports.set(createdInstance, installedTransport)
446
+ queryFaults.set(
447
+ createdInstance,
448
+ new QueryFaults(() => {
449
+ void installedTransport?.pull?.()
450
+ })
451
+ )
452
+ }
437
453
  primeGroupCache(recoveryDeps)
438
454
  return createdInstance
439
455
  }
@@ -600,6 +616,7 @@ export function createZeroClientInternal<
600
616
  const useQuery = createUseQuery<Schema>({
601
617
  DisabledContext,
602
618
  customQueries,
619
+ getQueryFaults: (zero) => queryFaults.get(zero),
603
620
  })
604
621
 
605
622
  const useQueryDirect = createDirectUseQuery
@@ -608,6 +625,7 @@ export function createZeroClientInternal<
608
625
  customQueries,
609
626
  getZero: () => zeroRuntime.zero,
610
627
  zeroVersion: zeroInstanceVersion!,
628
+ getQueryFaults: (zero) => queryFaults.get(zero),
611
629
  })
612
630
  : createUnavailableDirectUseQuery<Schema>()
613
631
 
@@ -1244,6 +1262,12 @@ export function createZeroClientInternal<
1244
1262
 
1245
1263
  const ProvideZero = IS_SERVER_RUNTIME ? ProvideZeroServer : ProvideZeroClient
1246
1264
 
1265
+ // committed SetZeroInstance mounts per client. a tree can hold two mounts of
1266
+ // one client at once (a remounted subtree commits before its predecessor
1267
+ // cleans up), and the first cleanup must not clear a facade the second
1268
+ // still owns.
1269
+ const publishedMounts = new Map<ZeroInstance, number>()
1270
+
1247
1271
  const SetZeroInstance = () => {
1248
1272
  const zeroInstance = useZero<Schema, ZeroMutators>()
1249
1273
 
@@ -1256,7 +1280,14 @@ export function createZeroClientInternal<
1256
1280
  // provider actually unmounts, which is the lifecycle boundary that
1257
1281
  // invalidates this generation.
1258
1282
  publishZeroInstance(zeroInstance)
1283
+ publishedMounts.set(zeroInstance, (publishedMounts.get(zeroInstance) ?? 0) + 1)
1259
1284
  return () => {
1285
+ const remaining = publishedMounts.get(zeroInstance)! - 1
1286
+ if (remaining > 0) {
1287
+ publishedMounts.set(zeroInstance, remaining)
1288
+ return
1289
+ }
1290
+ publishedMounts.delete(zeroInstance)
1260
1291
  if (!unpublishZeroInstance(zeroInstance)) return
1261
1292
  mutationLifecycle.fence()
1262
1293
  }
@@ -1405,6 +1436,8 @@ export function createZeroClientInternal<
1405
1436
  ? installedTransport.subscribeLifecycle((event: HttpPullLifecycleEvent) => {
1406
1437
  if (event.type === 'pull' && event.clientID === zeroInstance.clientID) {
1407
1438
  authRefreshAttempts = 0
1439
+ if (event.queryErrors)
1440
+ queryFaults.get(zeroInstance)?.update(event.queryErrors)
1408
1441
  }
1409
1442
  })
1410
1443
  : undefined
@@ -20,6 +20,7 @@ import {
20
20
  generateDrizzleSchemaFile,
21
21
  generateDrizzleSchemaInputFile,
22
22
  } from './generate'
23
+ import { createNativeTypeScriptProject } from './native-typescript'
23
24
 
24
25
  const testDir = join(tmpdir(), 'on-zero-test-' + Date.now())
25
26
 
@@ -38,6 +39,51 @@ afterEach(() => {
38
39
  })
39
40
 
40
41
  describe('generate', () => {
42
+ test('scopes generation to its project and keeps explicit ambient argument types', async () => {
43
+ const dataDir = join(testDir, 'data')
44
+ const sourcePath = join(dataDir, 'post/mutations.ts')
45
+ const tsconfig = join(testDir, 'tsconfig.generate.json')
46
+ const ambient = join(testDir, 'ambient.d.ts')
47
+ const unrelated = join(testDir, 'application.ts')
48
+ writeFileSync(
49
+ join(testDir, 'tsconfig.json'),
50
+ JSON.stringify({ include: ['**/*.ts'] })
51
+ )
52
+ writeFileSync(
53
+ tsconfig,
54
+ JSON.stringify({
55
+ extends: './tsconfig.json',
56
+ include: ['data/**/*.ts', 'ambient.d.ts'],
57
+ })
58
+ )
59
+ writeFileSync(ambient, 'type ScopedArgs = { count: number }')
60
+ writeFileSync(unrelated, 'export const application = 1')
61
+ writeFileSync(
62
+ sourcePath,
63
+ `
64
+ export const schema = table('post').columns({ id: string() }).primaryKey('id')
65
+ export const mutate = mutations(schema, permission, {
66
+ publish: async (ctx, args: ScopedArgs) => {},
67
+ })
68
+ `
69
+ )
70
+ const project = await createNativeTypeScriptProject(dataDir, [sourcePath], {
71
+ tsconfig,
72
+ })
73
+ const dependencies = await project.sourceFilePaths()
74
+ await project.close()
75
+ expect(dependencies).toContain(ambient)
76
+ expect(dependencies).not.toContain(unrelated)
77
+
78
+ await generate({ dir: dataDir, tsconfig, silent: true })
79
+ const outputPath = join(dataDir, 'generated/syncedMutations.ts')
80
+ expect(readFileSync(outputPath, 'utf8')).toContain('count: v.number()')
81
+
82
+ writeFileSync(ambient, 'type ScopedArgs = { count: string }')
83
+ await generate({ dir: dataDir, tsconfig, silent: true })
84
+ expect(readFileSync(outputPath, 'utf8')).toContain('count: v.string()')
85
+ })
86
+
41
87
  test('runs after command when files change', async () => {
42
88
  writeFileSync(
43
89
  join(testDir, 'post/mutations.ts'),
@@ -69,6 +115,76 @@ describe('generate', () => {
69
115
  expect(second.filesChanged).toBe(0)
70
116
  })
71
117
 
118
+ test('refreshes validators when a transitive imported union changes', async () => {
119
+ const dataDir = join(testDir, 'data')
120
+ const kindsPath = join(testDir, 'protocol/kinds.ts')
121
+ writeFileSync(kindsPath, `export type Kind = 'send'`)
122
+ writeFileSync(
123
+ join(testDir, 'protocol/index.ts'),
124
+ `export type { Kind } from './kinds'`
125
+ )
126
+ writeFileSync(
127
+ join(dataDir, 'command/mutations.ts'),
128
+ `import type { Kind } from '../../protocol'
129
+ export const schema = table('command').columns({ id: string() }).primaryKey('id')
130
+ export const mutate = mutations(schema, permission, {
131
+ dispatch: async (ctx, args: { kind: Kind }) => {},
132
+ })`
133
+ )
134
+ const validator = () => {
135
+ const context = { v, exports: {} as { mutationValidators?: any } }
136
+ runInNewContext(
137
+ readFileSync(join(dataDir, 'generated/syncedMutations.ts'), 'utf8')
138
+ .replace(/^import .*$/m, '')
139
+ .replace('export const', 'exports.mutationValidators ='),
140
+ context
141
+ )
142
+ return context.exports.mutationValidators!.command.dispatch
143
+ }
144
+
145
+ await generate({ dir: dataDir, silent: true })
146
+ expect(v.safeParse(validator(), { kind: 'send' }).success).toBe(true)
147
+ expect(v.safeParse(validator(), { kind: 'throttle' }).success).toBe(false)
148
+ expect((await generate({ dir: dataDir, silent: true })).filesChanged).toBe(0)
149
+
150
+ writeFileSync(kindsPath, `export type Kind = 'send' | 'throttle'`)
151
+ await generate({ dir: dataDir, silent: true })
152
+ expect(v.safeParse(validator(), { kind: 'throttle' }).success).toBe(true)
153
+ expect(v.safeParse(validator(), { kind: 'unknown' }).success).toBe(false)
154
+ expect((await generate({ dir: dataDir, silent: true })).filesChanged).toBe(0)
155
+
156
+ writeFileSync(kindsPath, `export type Kind = 'throttle'`)
157
+ await generate({ dir: dataDir, silent: true })
158
+ expect(v.safeParse(validator(), { kind: 'send' }).success).toBe(false)
159
+ expect(v.safeParse(validator(), { kind: 'throttle' }).success).toBe(true)
160
+ })
161
+
162
+ test('validates a type reused by siblings and stops at a cycle', async () => {
163
+ const dataDir = join(testDir, 'data')
164
+ writeFileSync(
165
+ join(dataDir, 'command/mutations.ts'),
166
+ `type Tree = { name: string; children: Tree[] }
167
+ export const schema = table('command').columns({ id: string() }).primaryKey('id')
168
+ export const mutate = mutations(schema, permission, {
169
+ dispatch: async (ctx, args: { a: string[]; b: string[]; nested: { c: string[] }; tree: Tree }) => {},
170
+ })`
171
+ )
172
+ await generate({ dir: dataDir, silent: true })
173
+ const context = { v, exports: {} as { mutationValidators?: any } }
174
+ runInNewContext(
175
+ readFileSync(join(dataDir, 'generated/syncedMutations.ts'), 'utf8')
176
+ .replace(/^import .*$/m, '')
177
+ .replace('export const', 'exports.mutationValidators ='),
178
+ context
179
+ )
180
+ const validator = context.exports.mutationValidators!.command.dispatch
181
+ const tree = { name: 'root', children: [{ name: 'leaf', children: [] }] }
182
+ const valid = { a: ['x'], b: ['y'], nested: { c: ['z'] }, tree }
183
+ expect(v.safeParse(validator, valid).success).toBe(true)
184
+ expect(v.safeParse(validator, { ...valid, b: [1] }).success).toBe(false)
185
+ expect(v.safeParse(validator, { ...valid, nested: { c: [1] } }).success).toBe(false)
186
+ })
187
+
72
188
  test('force regenerates without source changes', async () => {
73
189
  writeFileSync(
74
190
  join(testDir, 'post/mutations.ts'),