@rocicorp/zero 0.25.0-canary.2 → 0.25.0-canary.3

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 (332) hide show
  1. package/out/analyze-query/src/bin-analyze.js +27 -38
  2. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  3. package/out/ast-to-zql/src/bin.js.map +1 -1
  4. package/out/{chunk-ZZXMKAAG.js → chunk-5H7WNLPK.js} +2 -2
  5. package/out/chunk-HYS7YLNL.js +575 -0
  6. package/out/chunk-HYS7YLNL.js.map +7 -0
  7. package/out/{chunk-COKJ5W7V.js → chunk-IWL6EEA6.js} +10134 -10131
  8. package/out/chunk-IWL6EEA6.js.map +7 -0
  9. package/out/{chunk-TJFNGO7E.js → chunk-JKP7HDC6.js} +15 -53
  10. package/out/chunk-JKP7HDC6.js.map +7 -0
  11. package/out/{chunk-ECUMGQGC.js → chunk-RYFBHAD4.js} +17 -4
  12. package/out/chunk-RYFBHAD4.js.map +7 -0
  13. package/out/chunk-SRLXXPNB.js +495 -0
  14. package/out/chunk-SRLXXPNB.js.map +7 -0
  15. package/out/{chunk-EZM3XBAB.js → chunk-U2KJIWVC.js} +47 -2
  16. package/out/chunk-U2KJIWVC.js.map +7 -0
  17. package/out/expo-sqlite.js +4 -4
  18. package/out/{inspector-IU2HG74I.js → inspector-GP3CBZRU.js} +1 -1
  19. package/out/inspector-GP3CBZRU.js.map +7 -0
  20. package/out/{lazy-inspector-OXIFYSSQ.js → lazy-inspector-4CO3DXP5.js} +9 -8
  21. package/out/lazy-inspector-4CO3DXP5.js.map +7 -0
  22. package/out/op-sqlite.js +3 -3
  23. package/out/react-native.js +4 -4
  24. package/out/react.js +22 -27
  25. package/out/react.js.map +2 -2
  26. package/out/replicache/src/kv/sqlite-store.d.ts +7 -1
  27. package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
  28. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  29. package/out/replicache/src/replicache-options.d.ts +3 -2
  30. package/out/replicache/src/replicache-options.d.ts.map +1 -1
  31. package/out/replicache/src/sqlite.d.ts +1 -1
  32. package/out/replicache/src/sqlite.d.ts.map +1 -1
  33. package/out/shared/src/error.js +5 -5
  34. package/out/shared/src/error.js.map +1 -1
  35. package/out/solid.js +11 -9
  36. package/out/solid.js.map +2 -2
  37. package/out/sqlite.js +5 -3
  38. package/out/z2s/src/compiler.d.ts +2 -2
  39. package/out/z2s/src/compiler.d.ts.map +1 -1
  40. package/out/z2s/src/compiler.js.map +1 -1
  41. package/out/z2s/src/sql.d.ts +1 -1
  42. package/out/z2s/src/sql.d.ts.map +1 -1
  43. package/out/zero/package.json +3 -2
  44. package/out/zero-cache/src/auth/load-permissions.d.ts +1 -1
  45. package/out/zero-cache/src/auth/load-permissions.d.ts.map +1 -1
  46. package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
  47. package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
  48. package/out/zero-cache/src/auth/write-authorizer.js +36 -12
  49. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  50. package/out/zero-cache/src/custom/fetch.d.ts.map +1 -1
  51. package/out/zero-cache/src/custom/fetch.js +5 -4
  52. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  53. package/out/zero-cache/src/custom-queries/transform-query.d.ts +3 -3
  54. package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +1 -1
  55. package/out/zero-cache/src/custom-queries/transform-query.js +6 -7
  56. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  57. package/out/zero-cache/src/scripts/permissions.d.ts +1 -1
  58. package/out/zero-cache/src/scripts/permissions.d.ts.map +1 -1
  59. package/out/zero-cache/src/scripts/permissions.js +2 -2
  60. package/out/zero-cache/src/scripts/permissions.js.map +1 -1
  61. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  62. package/out/zero-cache/src/server/change-streamer.js +7 -10
  63. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  64. package/out/zero-cache/src/services/analyze.d.ts +2 -6
  65. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  66. package/out/zero-cache/src/services/analyze.js +4 -3
  67. package/out/zero-cache/src/services/analyze.js.map +1 -1
  68. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts +2 -3
  69. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts.map +1 -1
  70. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +15 -15
  71. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  72. package/out/zero-cache/src/services/change-streamer/replica-monitor.d.ts +16 -0
  73. package/out/zero-cache/src/services/change-streamer/replica-monitor.d.ts.map +1 -0
  74. package/out/zero-cache/src/services/change-streamer/replica-monitor.js +52 -0
  75. package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -0
  76. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
  77. package/out/zero-cache/src/services/change-streamer/storer.js +15 -1
  78. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  79. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +2 -2
  80. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
  81. package/out/zero-cache/src/services/change-streamer/subscriber.js +16 -11
  82. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  83. package/out/zero-cache/src/services/mutagen/pusher.d.ts +2 -0
  84. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
  85. package/out/zero-cache/src/services/mutagen/pusher.js +7 -8
  86. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  87. package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
  88. package/out/zero-cache/src/services/run-ast.js +1 -0
  89. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  90. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
  91. package/out/zero-cache/src/services/view-syncer/cvr-store.js +41 -14
  92. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  93. package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
  94. package/out/zero-cache/src/services/view-syncer/cvr.js +5 -4
  95. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  96. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +1 -1
  97. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +1 -1
  98. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +81 -2
  99. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  100. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  101. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +24 -2
  102. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  103. package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +1 -1
  104. package/out/zero-cache/src/services/view-syncer/schema/cvr.js +4 -2
  105. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  106. package/out/zero-cache/src/services/view-syncer/schema/init.d.ts.map +1 -1
  107. package/out/zero-cache/src/services/view-syncer/schema/init.js +25 -0
  108. package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
  109. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  110. package/out/zero-cache/src/services/view-syncer/view-syncer.js +30 -5
  111. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  112. package/out/zero-cache/src/types/error-with-level.d.ts.map +1 -1
  113. package/out/zero-cache/src/types/error-with-level.js +8 -3
  114. package/out/zero-cache/src/types/error-with-level.js.map +1 -1
  115. package/out/zero-client/src/client/bindings.d.ts +42 -0
  116. package/out/zero-client/src/client/bindings.d.ts.map +1 -0
  117. package/out/zero-client/src/client/client-error-kind-enum.d.ts +12 -12
  118. package/out/zero-client/src/client/client-error-kind-enum.d.ts.map +1 -1
  119. package/out/zero-client/src/client/connection-manager.d.ts +8 -9
  120. package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
  121. package/out/zero-client/src/client/context.d.ts +12 -10
  122. package/out/zero-client/src/client/context.d.ts.map +1 -1
  123. package/out/zero-client/src/client/crud.d.ts +1 -1
  124. package/out/zero-client/src/client/crud.d.ts.map +1 -1
  125. package/out/zero-client/src/client/custom.d.ts +39 -16
  126. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  127. package/out/zero-client/src/client/error.d.ts +23 -11
  128. package/out/zero-client/src/client/error.d.ts.map +1 -1
  129. package/out/zero-client/src/client/inspector/html-dialog-prompt.d.ts.map +1 -1
  130. package/out/zero-client/src/client/inspector/inspector.d.ts +3 -2
  131. package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
  132. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts +4 -1
  133. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts.map +1 -1
  134. package/out/zero-client/src/client/mutation-tracker.d.ts +10 -2
  135. package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
  136. package/out/zero-client/src/client/mutator-proxy.d.ts +16 -0
  137. package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -0
  138. package/out/zero-client/src/client/options.d.ts +37 -7
  139. package/out/zero-client/src/client/options.d.ts.map +1 -1
  140. package/out/zero-client/src/client/query-manager.d.ts +9 -2
  141. package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
  142. package/out/zero-client/src/client/zero-log-context.d.ts +3 -3
  143. package/out/zero-client/src/client/zero-log-context.d.ts.map +1 -1
  144. package/out/zero-client/src/client/zero-poke-handler.d.ts +3 -3
  145. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  146. package/out/zero-client/src/client/zero-rep.d.ts +5 -4
  147. package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
  148. package/out/zero-client/src/client/zero.d.ts +88 -18
  149. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  150. package/out/zero-client/src/mod.d.ts +14 -9
  151. package/out/zero-client/src/mod.d.ts.map +1 -1
  152. package/out/zero-client/src/types/query-result.d.ts +5 -4
  153. package/out/zero-client/src/types/query-result.d.ts.map +1 -1
  154. package/out/zero-protocol/src/analyze-query-result.d.ts +1 -0
  155. package/out/zero-protocol/src/analyze-query-result.d.ts.map +1 -1
  156. package/out/zero-protocol/src/analyze-query-result.js +1 -0
  157. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  158. package/out/zero-protocol/src/application-error.d.ts +2 -8
  159. package/out/zero-protocol/src/application-error.d.ts.map +1 -1
  160. package/out/zero-protocol/src/application-error.js +3 -0
  161. package/out/zero-protocol/src/application-error.js.map +1 -1
  162. package/out/zero-protocol/src/down.d.ts +1 -0
  163. package/out/zero-protocol/src/down.d.ts.map +1 -1
  164. package/out/zero-protocol/src/inspect-down.d.ts +3 -0
  165. package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
  166. package/out/zero-protocol/src/protocol-version.d.ts +1 -1
  167. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  168. package/out/zero-protocol/src/protocol-version.js +2 -1
  169. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  170. package/out/zero-react/src/components/inspector.d.ts +1 -1
  171. package/out/zero-react/src/components/inspector.d.ts.map +1 -1
  172. package/out/zero-react/src/components/zero-inspector.d.ts +1 -1
  173. package/out/zero-react/src/components/zero-inspector.d.ts.map +1 -1
  174. package/out/zero-react/src/mod.d.ts +1 -1
  175. package/out/zero-react/src/mod.d.ts.map +1 -1
  176. package/out/zero-react/src/use-query.d.ts +7 -6
  177. package/out/zero-react/src/use-query.d.ts.map +1 -1
  178. package/out/zero-react/src/zero-provider.d.ts +7 -7
  179. package/out/zero-react/src/zero-provider.d.ts.map +1 -1
  180. package/out/zero-schema/src/builder/schema-builder.d.ts +1 -3
  181. package/out/zero-schema/src/builder/schema-builder.d.ts.map +1 -1
  182. package/out/zero-schema/src/permissions.d.ts +1 -1
  183. package/out/zero-schema/src/permissions.d.ts.map +1 -1
  184. package/out/zero-schema/src/schema-config.d.ts +1 -1
  185. package/out/zero-schema/src/schema-config.d.ts.map +1 -1
  186. package/out/zero-server/src/adapters/drizzle.d.ts +2 -2
  187. package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
  188. package/out/zero-server/src/adapters/drizzle.js +4 -0
  189. package/out/zero-server/src/adapters/drizzle.js.map +1 -1
  190. package/out/zero-server/src/adapters/pg.d.ts +8 -3
  191. package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
  192. package/out/zero-server/src/adapters/pg.js +4 -0
  193. package/out/zero-server/src/adapters/pg.js.map +1 -1
  194. package/out/zero-server/src/adapters/postgresjs.d.ts +8 -3
  195. package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
  196. package/out/zero-server/src/adapters/postgresjs.js +4 -0
  197. package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
  198. package/out/zero-server/src/custom.d.ts +11 -8
  199. package/out/zero-server/src/custom.d.ts.map +1 -1
  200. package/out/zero-server/src/custom.js +15 -3
  201. package/out/zero-server/src/custom.js.map +1 -1
  202. package/out/zero-server/src/mod.d.ts +0 -1
  203. package/out/zero-server/src/mod.d.ts.map +1 -1
  204. package/out/zero-server/src/mod.js +0 -1
  205. package/out/zero-server/src/mod.js.map +1 -1
  206. package/out/zero-server/src/pg-query-executor.d.ts +11 -0
  207. package/out/zero-server/src/pg-query-executor.d.ts.map +1 -0
  208. package/out/zero-server/src/pg-query-executor.js +17 -0
  209. package/out/zero-server/src/pg-query-executor.js.map +1 -0
  210. package/out/zero-server/src/process-mutations.d.ts +2 -1
  211. package/out/zero-server/src/process-mutations.d.ts.map +1 -1
  212. package/out/zero-server/src/process-mutations.js +1 -1
  213. package/out/zero-server/src/process-mutations.js.map +1 -1
  214. package/out/zero-server/src/queries/process-queries.d.ts +4 -4
  215. package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
  216. package/out/zero-server/src/queries/process-queries.js +5 -3
  217. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  218. package/out/zero-server/src/schema.d.ts +2 -2
  219. package/out/zero-server/src/schema.d.ts.map +1 -1
  220. package/out/zero-server/src/schema.js.map +1 -1
  221. package/out/zero-server/src/zql-database.d.ts +6 -3
  222. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  223. package/out/zero-server/src/zql-database.js +17 -19
  224. package/out/zero-server/src/zql-database.js.map +1 -1
  225. package/out/zero-solid/src/solid-view.d.ts +1 -1
  226. package/out/zero-solid/src/solid-view.d.ts.map +1 -1
  227. package/out/zero-solid/src/use-query.d.ts +4 -4
  228. package/out/zero-solid/src/use-query.d.ts.map +1 -1
  229. package/out/zero-solid/src/use-zero.d.ts +7 -7
  230. package/out/zero-solid/src/use-zero.d.ts.map +1 -1
  231. package/out/zero-types/src/server-schema.d.ts.map +1 -0
  232. package/out/zero-types/src/server-schema.js.map +1 -0
  233. package/out/zero.js +29 -14
  234. package/out/zql/src/builder/builder.d.ts +6 -0
  235. package/out/zql/src/builder/builder.d.ts.map +1 -1
  236. package/out/zql/src/builder/builder.js +1 -1
  237. package/out/zql/src/builder/builder.js.map +1 -1
  238. package/out/zql/src/builder/debug-delegate.d.ts +4 -0
  239. package/out/zql/src/builder/debug-delegate.d.ts.map +1 -1
  240. package/out/zql/src/builder/debug-delegate.js +17 -0
  241. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  242. package/out/zql/src/ivm/view.d.ts +3 -2
  243. package/out/zql/src/ivm/view.d.ts.map +1 -1
  244. package/out/zql/src/mutate/custom.d.ts +13 -8
  245. package/out/zql/src/mutate/custom.d.ts.map +1 -1
  246. package/out/zql/src/mutate/custom.js.map +1 -1
  247. package/out/zql/src/planner/planner-builder.d.ts.map +1 -1
  248. package/out/zql/src/planner/planner-builder.js +27 -2
  249. package/out/zql/src/planner/planner-builder.js.map +1 -1
  250. package/out/zql/src/planner/planner-graph.js +1 -1
  251. package/out/zql/src/planner/planner-graph.js.map +1 -1
  252. package/out/zql/src/planner/planner-join.d.ts +1 -1
  253. package/out/zql/src/planner/planner-join.d.ts.map +1 -1
  254. package/out/zql/src/planner/planner-join.js +9 -5
  255. package/out/zql/src/planner/planner-join.js.map +1 -1
  256. package/out/zql/src/query/chained-query.d.ts +35 -0
  257. package/out/zql/src/query/chained-query.d.ts.map +1 -0
  258. package/out/zql/src/query/chained-query.js +66 -0
  259. package/out/zql/src/query/chained-query.js.map +1 -0
  260. package/out/zql/src/query/define-query.d.ts +51 -0
  261. package/out/zql/src/query/define-query.d.ts.map +1 -0
  262. package/out/zql/src/query/define-query.js +53 -0
  263. package/out/zql/src/query/define-query.js.map +1 -0
  264. package/out/zql/src/query/named.d.ts +18 -7
  265. package/out/zql/src/query/named.d.ts.map +1 -1
  266. package/out/zql/src/query/named.js +38 -20
  267. package/out/zql/src/query/named.js.map +1 -1
  268. package/out/zql/src/query/query-delegate-base.d.ts +122 -0
  269. package/out/zql/src/query/query-delegate-base.d.ts.map +1 -0
  270. package/out/zql/src/query/query-delegate-base.js +136 -0
  271. package/out/zql/src/query/query-delegate-base.js.map +1 -0
  272. package/out/zql/src/query/query-delegate.d.ts +29 -4
  273. package/out/zql/src/query/query-delegate.d.ts.map +1 -1
  274. package/out/zql/src/query/query-impl.d.ts +27 -48
  275. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  276. package/out/zql/src/query/query-impl.js +155 -175
  277. package/out/zql/src/query/query-impl.js.map +1 -1
  278. package/out/zql/src/query/query-internals.d.ts +70 -0
  279. package/out/zql/src/query/query-internals.d.ts.map +1 -0
  280. package/out/zql/src/query/query-internals.js +21 -0
  281. package/out/zql/src/query/query-internals.js.map +1 -0
  282. package/out/zql/src/query/query.d.ts +26 -243
  283. package/out/zql/src/query/query.d.ts.map +1 -1
  284. package/out/zql/src/query/query.js +0 -1
  285. package/out/zql/src/query/query.js.map +1 -1
  286. package/out/zql/src/query/root-named-query.d.ts +33 -0
  287. package/out/zql/src/query/root-named-query.d.ts.map +1 -0
  288. package/out/zql/src/query/root-named-query.js +95 -0
  289. package/out/zql/src/query/root-named-query.js.map +1 -0
  290. package/out/zql/src/query/static-query.d.ts +5 -14
  291. package/out/zql/src/query/static-query.d.ts.map +1 -1
  292. package/out/zql/src/query/static-query.js +7 -17
  293. package/out/zql/src/query/static-query.js.map +1 -1
  294. package/out/zqlite/src/db.d.ts +2 -1
  295. package/out/zqlite/src/db.d.ts.map +1 -1
  296. package/out/zqlite/src/db.js +2 -0
  297. package/out/zqlite/src/db.js.map +1 -1
  298. package/out/zqlite/src/query-delegate.d.ts +6 -20
  299. package/out/zqlite/src/query-delegate.d.ts.map +1 -1
  300. package/out/zqlite/src/query-delegate.js +5 -29
  301. package/out/zqlite/src/query-delegate.js.map +1 -1
  302. package/out/zqlite/src/table-source.d.ts.map +1 -1
  303. package/out/zqlite/src/table-source.js +16 -0
  304. package/out/zqlite/src/table-source.js.map +1 -1
  305. package/package.json +3 -2
  306. package/out/chunk-ASRS2LFV.js +0 -35
  307. package/out/chunk-ASRS2LFV.js.map +0 -7
  308. package/out/chunk-COKJ5W7V.js.map +0 -7
  309. package/out/chunk-ECUMGQGC.js.map +0 -7
  310. package/out/chunk-EZM3XBAB.js.map +0 -7
  311. package/out/chunk-TJFNGO7E.js.map +0 -7
  312. package/out/chunk-YWU2DZ23.js +0 -372
  313. package/out/chunk-YWU2DZ23.js.map +0 -7
  314. package/out/inspector-IU2HG74I.js.map +0 -7
  315. package/out/lazy-inspector-OXIFYSSQ.js.map +0 -7
  316. package/out/zero-client/src/client/on-error.d.ts +0 -15
  317. package/out/zero-client/src/client/on-error.d.ts.map +0 -1
  318. package/out/zero-schema/src/builder/relationship-builder.js +0 -24
  319. package/out/zero-schema/src/builder/relationship-builder.js.map +0 -1
  320. package/out/zero-schema/src/builder/schema-builder.js +0 -78
  321. package/out/zero-schema/src/builder/schema-builder.js.map +0 -1
  322. package/out/zero-schema/src/builder/table-builder.js +0 -128
  323. package/out/zero-schema/src/builder/table-builder.js.map +0 -1
  324. package/out/zero-schema/src/server-schema.d.ts.map +0 -1
  325. package/out/zero-schema/src/server-schema.js.map +0 -1
  326. package/out/zero-server/src/query.d.ts +0 -22
  327. package/out/zero-server/src/query.d.ts.map +0 -1
  328. package/out/zero-server/src/query.js +0 -61
  329. package/out/zero-server/src/query.js.map +0 -1
  330. /package/out/{chunk-ZZXMKAAG.js.map → chunk-5H7WNLPK.js.map} +0 -0
  331. /package/out/{zero-schema → zero-types}/src/server-schema.d.ts +0 -0
  332. /package/out/{zero-schema → zero-types}/src/server-schema.js +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../zero-schema/src/builder/relationship-builder.ts", "../../zql/src/query/static-query.ts", "../../zero-schema/src/permissions.ts", "../../zql/src/query/chained-query.ts", "../../zql/src/query/root-named-query.ts", "../../zql/src/query/define-query.ts", "../../zql/src/query/escape-like.ts"],
4
+ "sourcesContent": ["/* oxlint-disable @typescript-eslint/no-explicit-any */\nimport type {Relationship, TableSchema} from '../table-schema.ts';\nimport type {TableBuilderWithColumns} from './table-builder.ts';\n\ntype ConnectArg<TSourceField, TDestField, TDest extends TableSchema> = {\n readonly sourceField: TSourceField;\n readonly destField: TDestField;\n readonly destSchema: TableBuilderWithColumns<TDest>;\n};\n\ntype ManyConnection<TSourceField, TDestField, TDest extends TableSchema> = {\n readonly sourceField: TSourceField;\n readonly destField: TDestField;\n readonly destSchema: TDest['name'];\n readonly cardinality: 'many';\n};\n\ntype OneConnection<TSourceField, TDestField, TDest extends TableSchema> = {\n readonly sourceField: TSourceField;\n readonly destField: TDestField;\n readonly destSchema: TDest['name'];\n readonly cardinality: 'one';\n};\n\ntype Prev = [-1, 0, 1, 2, 3, 4, 5, 6];\n\nexport type PreviousSchema<\n TSource extends TableSchema,\n K extends number,\n TDests extends TableSchema[],\n> = K extends 0 ? TSource : TDests[Prev[K]];\n\nexport type Relationships = {\n name: string; // table name\n relationships: Record<string, Relationship>; // relationships for that table\n};\n\n// Overloaded types for better inference\ntype ManyConnector<TSource extends TableSchema> = {\n // Single direct relationship\n <TDest extends TableSchema>(\n arg: ConnectArg<\n readonly (keyof TSource['columns'] & string)[],\n readonly (keyof TDest['columns'] & string)[],\n TDest\n >,\n ): [\n ManyConnection<\n readonly (keyof TSource['columns'] & string)[],\n readonly (keyof TDest['columns'] & string)[],\n TDest\n >,\n ];\n\n // Junction relationship (two hops)\n <TJunction extends TableSchema, TDest extends TableSchema>(\n firstHop: ConnectArg<\n readonly (keyof TSource['columns'] & string)[],\n readonly (keyof TJunction['columns'] & string)[],\n TJunction\n >,\n secondHop: ConnectArg<\n readonly (keyof TJunction['columns'] & string)[],\n readonly (keyof TDest['columns'] & string)[],\n TDest\n >,\n ): [\n ManyConnection<\n readonly (keyof TSource['columns'] & string)[],\n readonly (keyof TJunction['columns'] & string)[],\n TJunction\n >,\n ManyConnection<\n readonly (keyof TJunction['columns'] & string)[],\n readonly (keyof TDest['columns'] & string)[],\n TDest\n >,\n ];\n};\n\ntype OneConnector<TSource extends TableSchema> = {\n // Single direct relationship\n <TDest extends TableSchema>(\n arg: ConnectArg<\n readonly (keyof TSource['columns'] & string)[],\n readonly (keyof TDest['columns'] & string)[],\n TDest\n >,\n ): [\n OneConnection<\n readonly (keyof TSource['columns'] & string)[],\n readonly (keyof TDest['columns'] & string)[],\n TDest\n >,\n ];\n\n // Two-hop relationship (e.g., invoice_line -> invoice -> customer)\n <TIntermediate extends TableSchema, TDest extends TableSchema>(\n firstHop: ConnectArg<\n readonly (keyof TSource['columns'] & string)[],\n readonly (keyof TIntermediate['columns'] & string)[],\n TIntermediate\n >,\n secondHop: ConnectArg<\n readonly (keyof TIntermediate['columns'] & string)[],\n readonly (keyof TDest['columns'] & string)[],\n TDest\n >,\n ): [\n OneConnection<\n readonly (keyof TSource['columns'] & string)[],\n readonly (keyof TIntermediate['columns'] & string)[],\n TIntermediate\n >,\n OneConnection<\n readonly (keyof TIntermediate['columns'] & string)[],\n readonly (keyof TDest['columns'] & string)[],\n TDest\n >,\n ];\n};\n\nexport function relationships<\n TSource extends TableSchema,\n TRelationships extends Record<string, Relationship>,\n>(\n table: TableBuilderWithColumns<TSource>,\n cb: (connects: {\n many: ManyConnector<TSource>;\n one: OneConnector<TSource>;\n }) => TRelationships,\n): {name: TSource['name']; relationships: TRelationships} {\n const relationships = cb({many, one} as any);\n\n return {\n name: table.schema.name,\n relationships,\n };\n}\n\nfunction many(\n ...args: readonly ConnectArg<any, any, TableSchema>[]\n): ManyConnection<any, any, any>[] {\n return args.map(arg => ({\n sourceField: arg.sourceField,\n destField: arg.destField,\n destSchema: arg.destSchema.schema.name,\n cardinality: 'many',\n }));\n}\n\nfunction one(\n ...args: readonly ConnectArg<any, any, TableSchema>[]\n): OneConnection<any, any, any>[] {\n return args.map(arg => ({\n sourceField: arg.sourceField,\n destField: arg.destField,\n destSchema: arg.destSchema.schema.name,\n cardinality: 'one',\n }));\n}\n", "import {assert} from '../../../shared/src/asserts.ts';\nimport type {AST, System} from '../../../zero-protocol/src/ast.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {defaultFormat} from '../ivm/default-format.ts';\nimport type {Format} from '../ivm/view.ts';\nimport {ExpressionBuilder} from './expression.ts';\nimport type {CustomQueryID} from './named.ts';\nimport {AbstractQuery} from './query-impl.ts';\nimport type {PullRow, Query} from './query.ts';\n\nexport function staticQuery<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn = PullRow<TTable, TSchema>,\n TContext = unknown,\n>(\n schema: TSchema,\n tableName: TTable,\n): Query<TSchema, TTable, TReturn, TContext> {\n return new StaticQuery<TSchema, TTable, TReturn>(\n schema,\n tableName,\n {table: tableName},\n defaultFormat,\n );\n}\n\n/**\n * A query that cannot be run.\n * Only serves to generate ASTs.\n */\nexport class StaticQuery<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn = PullRow<TTable, TSchema>,\n TContext = unknown,\n> extends AbstractQuery<TSchema, TTable, TReturn, TContext> {\n constructor(\n schema: TSchema,\n tableName: TTable,\n ast: AST,\n format: Format,\n system: System = 'permissions',\n customQueryID?: CustomQueryID,\n currentJunction?: string,\n ) {\n super(\n schema,\n tableName,\n ast,\n format,\n system,\n customQueryID,\n currentJunction,\n (tableName, ast, format, _customQueryID, _currentJunction) =>\n new StaticQuery(\n schema,\n tableName,\n ast,\n format,\n system,\n customQueryID,\n currentJunction,\n ),\n );\n }\n\n expressionBuilder() {\n return new ExpressionBuilder(this._exists);\n }\n}\n\nexport function asStaticQuery<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n TContext,\n>(\n q: Query<TSchema, TTable, TReturn, TContext>,\n): StaticQuery<TSchema, TTable, TReturn, TContext> {\n assert(q instanceof StaticQuery);\n return q;\n}\n", "import {assert} from '../../shared/src/asserts.ts';\nimport {\n mapCondition,\n toStaticParam,\n type Condition,\n type Parameter,\n} from '../../zero-protocol/src/ast.ts';\nimport {defaultFormat} from '../../zero-types/src/format.ts';\nimport type {Schema} from '../../zero-types/src/schema.ts';\nimport type {ExpressionBuilder} from '../../zql/src/query/expression.ts';\nimport type {Query} from '../../zql/src/query/query.ts';\nimport {StaticQuery} from '../../zql/src/query/static-query.ts';\nimport type {\n AssetPermissions as CompiledAssetPermissions,\n PermissionsConfig as CompiledPermissionsConfig,\n} from './compiled-permissions.ts';\nimport {clientToServer, NameMapper} from './name-mapper.ts';\n\nexport const ANYONE_CAN = [\n (_: unknown, eb: ExpressionBuilder<Schema, never>) => eb.and(),\n];\n\n/**\n * @deprecated Use {@link ANYONE_CAN} instead.\n */\nexport const ANYONE_CAN_DO_ANYTHING = {\n row: {\n select: ANYONE_CAN,\n insert: ANYONE_CAN,\n update: {\n preMutation: ANYONE_CAN,\n postMutation: ANYONE_CAN,\n },\n delete: ANYONE_CAN,\n },\n};\n\nexport const NOBODY_CAN = [];\n\nexport type Anchor = 'authData' | 'preMutationRow';\n\nexport type Queries<TSchema extends Schema> = {\n [K in keyof TSchema['tables']]: Query<Schema, K & string>;\n};\n\nexport type PermissionRule<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n> = (\n authData: TAuthDataShape,\n eb: ExpressionBuilder<TSchema, TTable>,\n) => Condition;\n\nexport type AssetPermissions<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n> = {\n // Why an array of rules?: https://github.com/rocicorp/mono/pull/3184/files#r1869680716\n select?: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined;\n /**\n * @deprecated Use Mutators instead.\n * @see {@link https://zero.rocicorp.dev/docs/writing-data}\n */\n insert?: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined;\n /**\n * @deprecated Use Mutators instead.\n * @see {@link https://zero.rocicorp.dev/docs/writing-data}\n */\n update?:\n | {\n preMutation?: PermissionRule<TAuthDataShape, TSchema, TTable>[];\n postMutation?: PermissionRule<TAuthDataShape, TSchema, TTable>[];\n }\n | undefined;\n /**\n * @deprecated Use Mutators instead.\n * @see {@link https://zero.rocicorp.dev/docs/writing-data}\n */\n delete?: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined;\n};\n\nexport type PermissionsConfig<TAuthDataShape, TSchema extends Schema> = {\n [K in keyof TSchema['tables']]?: {\n row?: AssetPermissions<TAuthDataShape, TSchema, K & string> | undefined;\n cell?:\n | {\n [C in keyof TSchema['tables'][K]['columns']]?: Omit<\n AssetPermissions<TAuthDataShape, TSchema, K & string>,\n 'cell'\n >;\n }\n | undefined;\n };\n};\n\nexport async function definePermissions<TAuthDataShape, TSchema extends Schema>(\n schema: TSchema,\n definer: () =>\n | Promise<PermissionsConfig<TAuthDataShape, TSchema>>\n | PermissionsConfig<TAuthDataShape, TSchema>,\n): Promise<CompiledPermissionsConfig | undefined> {\n const expressionBuilders = {} as Record<\n string,\n ExpressionBuilder<Schema, string>\n >;\n for (const name of Object.keys(schema.tables)) {\n expressionBuilders[name] = new StaticQuery(\n schema,\n name,\n {table: name},\n defaultFormat,\n ).expressionBuilder();\n }\n\n const config = await definer();\n return compilePermissions(schema, config, expressionBuilders);\n}\n\nfunction compilePermissions<TAuthDataShape, TSchema extends Schema>(\n schema: TSchema,\n authz: PermissionsConfig<TAuthDataShape, TSchema> | undefined,\n expressionBuilders: Record<string, ExpressionBuilder<Schema, string>>,\n): CompiledPermissionsConfig | undefined {\n if (!authz) {\n return undefined;\n }\n const nameMapper = clientToServer(schema.tables);\n const ret: CompiledPermissionsConfig = {tables: {}};\n for (const [tableName, tableConfig] of Object.entries(authz)) {\n const serverName = schema.tables[tableName].serverName ?? tableName;\n ret.tables[serverName] = {\n row: compileRowConfig(\n nameMapper,\n tableName,\n tableConfig.row,\n expressionBuilders[tableName],\n ),\n cell: compileCellConfig(\n nameMapper,\n tableName,\n tableConfig.cell,\n expressionBuilders[tableName],\n ),\n };\n }\n\n return ret;\n}\n\nfunction compileRowConfig<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n>(\n clientToServer: NameMapper,\n tableName: TTable,\n rowRules: AssetPermissions<TAuthDataShape, TSchema, TTable> | undefined,\n expressionBuilder: ExpressionBuilder<TSchema, TTable>,\n): CompiledAssetPermissions | undefined {\n if (!rowRules) {\n return undefined;\n }\n return {\n select: compileRules(\n clientToServer,\n tableName,\n rowRules.select,\n expressionBuilder,\n ),\n insert: compileRules(\n clientToServer,\n tableName,\n rowRules.insert,\n expressionBuilder,\n ),\n update: {\n preMutation: compileRules(\n clientToServer,\n tableName,\n rowRules.update?.preMutation,\n expressionBuilder,\n ),\n postMutation: compileRules(\n clientToServer,\n tableName,\n rowRules.update?.postMutation,\n expressionBuilder,\n ),\n },\n delete: compileRules(\n clientToServer,\n tableName,\n rowRules.delete,\n expressionBuilder,\n ),\n };\n}\n\n/**\n * What is this \"allow\" and why are permissions policies an array of rules?\n *\n * Please read: https://github.com/rocicorp/mono/pull/3184/files#r1869680716\n */\nfunction compileRules<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n>(\n clientToServer: NameMapper,\n tableName: TTable,\n rules: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined,\n expressionBuilder: ExpressionBuilder<TSchema, TTable>,\n): ['allow', Condition][] | undefined {\n if (!rules) {\n return undefined;\n }\n\n return rules.map(rule => {\n const cond = rule(authDataRef as TAuthDataShape, expressionBuilder);\n return ['allow', mapCondition(cond, tableName, clientToServer)] as const;\n });\n}\n\nfunction compileCellConfig<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n>(\n clientToServer: NameMapper,\n tableName: TTable,\n cellRules:\n | Record<string, AssetPermissions<TAuthDataShape, TSchema, TTable>>\n | undefined,\n expressionBuilder: ExpressionBuilder<TSchema, TTable>,\n): Record<string, CompiledAssetPermissions> | undefined {\n if (!cellRules) {\n return undefined;\n }\n const ret: Record<string, CompiledAssetPermissions> = {};\n for (const [columnName, rules] of Object.entries(cellRules)) {\n ret[columnName] = {\n select: compileRules(\n clientToServer,\n tableName,\n rules.select,\n expressionBuilder,\n ),\n insert: compileRules(\n clientToServer,\n tableName,\n rules.insert,\n expressionBuilder,\n ),\n update: {\n preMutation: compileRules(\n clientToServer,\n tableName,\n rules.update?.preMutation,\n expressionBuilder,\n ),\n postMutation: compileRules(\n clientToServer,\n tableName,\n rules.update?.postMutation,\n expressionBuilder,\n ),\n },\n delete: compileRules(\n clientToServer,\n tableName,\n rules.delete,\n expressionBuilder,\n ),\n };\n }\n return ret;\n}\n\nclass CallTracker {\n readonly #anchor: Anchor;\n readonly #path: string[];\n constructor(anchor: Anchor, path: string[]) {\n this.#anchor = anchor;\n this.#path = path;\n }\n\n get(target: {[toStaticParam]: () => Parameter}, prop: string | symbol) {\n if (prop === toStaticParam) {\n return target[toStaticParam];\n }\n assert(typeof prop === 'string');\n const path = [...this.#path, prop];\n return new Proxy(\n {\n [toStaticParam]: () => staticParam(this.#anchor, path),\n },\n new CallTracker(this.#anchor, path),\n );\n }\n}\n\nfunction baseTracker(anchor: Anchor) {\n return new Proxy(\n {\n [toStaticParam]: () => {\n throw new Error('no JWT field specified');\n },\n },\n new CallTracker(anchor, []),\n );\n}\n\nexport const authDataRef = baseTracker('authData');\nexport const preMutationRowRef = baseTracker('preMutationRow');\nexport function staticParam(\n anchorClass: 'authData' | 'preMutationRow',\n field: string | string[],\n): Parameter {\n return {\n type: 'static',\n anchor: anchorClass,\n // for backwards compatibility\n field: field.length === 1 ? field[0] : field,\n };\n}\n", "import type {SimpleOperator} from '../../../zero-protocol/src/ast.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport type {ExpressionFactory, ParameterReference} from './expression.ts';\nimport type {\n AnyQuery,\n AvailableRelationships,\n DestTableName,\n ExistsOptions,\n GetFilterType,\n NoCompoundTypeSelector,\n PullRow,\n PullTableSchema,\n Query,\n} from './query.ts';\n\n/**\n * Function type for chaining one query to another.\n */\ntype ChainQuery<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn1,\n TReturn2,\n TContext,\n> = (\n q: Query<TSchema, TTable, TReturn1, TContext>,\n) => Query<TSchema, TTable, TReturn2, TContext>;\n\nexport type AnyChainQuery = ChainQuery<\n Schema,\n string,\n PullRow<string, Schema>,\n PullRow<string, Schema>,\n unknown\n>;\n\n/**\n * Chained query that applies a transformation function to a parent query.\n * This represents a query operation that builds on top of another query.\n */\nexport class ChainedQuery<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n TContext,\n> implements Query<TSchema, TTable, TReturn, TContext>\n{\n readonly #parent: {\n withContext(ctx: TContext): Query<TSchema, TTable, unknown>;\n };\n readonly #chainFn: AnyChainQuery;\n #q: Query<TSchema, TTable, TReturn> | undefined;\n\n constructor(\n parent: {withContext(ctx: TContext): Query<TSchema, TTable, unknown>},\n chainFn: AnyChainQuery,\n ) {\n this.#parent = parent;\n this.#chainFn = chainFn;\n }\n\n withContext(ctx: TContext): Query<TSchema, TTable, TReturn> {\n if (this.#q) {\n return this.#q;\n }\n\n // This is a chained query - get the parent query and apply the chain function\n const parentQuery = this.#parent.withContext(ctx);\n this.#q = this.#chainFn(parentQuery as AnyQuery) as Query<\n TSchema,\n TTable,\n TReturn\n >;\n return this.#q;\n }\n\n #withChain<TNewReturn>(\n fn: (\n q: Query<TSchema, TTable, TReturn>,\n ) => Query<TSchema, TTable, TNewReturn>,\n ): ChainedQuery<TSchema, TTable, TNewReturn, TContext> {\n return new ChainedQuery(\n this as {withContext(ctx: TContext): Query<TSchema, TTable, unknown>},\n fn as AnyChainQuery,\n );\n }\n\n // Query interface methods\n\n one(): ChainedQuery<TSchema, TTable, TReturn | undefined, TContext> {\n return this.#withChain(q => q.one());\n }\n\n whereExists<TRelationship extends AvailableRelationships<TTable, TSchema>>(\n relationship: TRelationship,\n options?: ExistsOptions,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext>;\n whereExists<TRelationship extends AvailableRelationships<TTable, TSchema>>(\n relationship: TRelationship,\n cb: (\n q: Query<\n TSchema,\n DestTableName<TTable, TSchema, TRelationship>,\n TContext\n >,\n ) => Query<TSchema, string, TContext>,\n options?: ExistsOptions,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext>;\n whereExists(\n relationship: AvailableRelationships<TTable, TSchema>,\n cbOrOptions?:\n | ((\n q: Query<TSchema, string, TContext>,\n ) => Query<TSchema, string, TContext>)\n | ExistsOptions,\n options?: ExistsOptions,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext> {\n if (typeof cbOrOptions === 'function') {\n return this.#withChain(q =>\n q.whereExists(\n relationship as string,\n cbOrOptions as unknown as (q: AnyQuery) => AnyQuery,\n options,\n ),\n );\n }\n return this.#withChain(q =>\n q.whereExists(relationship as string, cbOrOptions),\n );\n }\n\n related<TRelationship extends AvailableRelationships<TTable, TSchema>>(\n relationship: TRelationship,\n ): ChainedQuery<TSchema, TTable, TReturn & Record<string, unknown>, TContext>;\n related<\n TRelationship extends AvailableRelationships<TTable, TSchema>,\n TSub extends Query<TSchema, string, unknown>,\n >(\n relationship: TRelationship,\n cb: (\n q: Query<\n TSchema,\n DestTableName<TTable, TSchema, TRelationship>,\n TContext\n >,\n ) => TSub,\n ): ChainedQuery<TSchema, TTable, TReturn & Record<string, unknown>, TContext>;\n related(\n relationship: AvailableRelationships<TTable, TSchema>,\n cb?: (\n q: Query<TSchema, string, TContext>,\n ) => Query<TSchema, string, TContext>,\n ): ChainedQuery<\n TSchema,\n TTable,\n TReturn & Record<string, unknown>,\n TContext\n > {\n if (cb) {\n return this.#withChain(q =>\n q.related(\n relationship as string,\n cb as unknown as (q: AnyQuery) => AnyQuery,\n ),\n ) as ChainedQuery<\n TSchema,\n TTable,\n TReturn & Record<string, unknown>,\n TContext\n >;\n }\n return this.#withChain(q =>\n q.related(relationship as string),\n ) as ChainedQuery<\n TSchema,\n TTable,\n TReturn & Record<string, unknown>,\n TContext\n >;\n }\n\n where<\n TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>,\n TOperator extends SimpleOperator,\n >(\n field: TSelector,\n op: TOperator,\n value:\n | GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, TOperator>\n | ParameterReference,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext>;\n where<\n TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>,\n >(\n field: TSelector,\n value:\n | GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, '='>\n | ParameterReference,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext>;\n where(\n expressionFactory: ExpressionFactory<TSchema, TTable>,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext>;\n where(\n fieldOrExpressionFactory:\n | NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>\n | ExpressionFactory<TSchema, TTable>,\n opOrValue?: unknown,\n value?: unknown,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext> {\n if (typeof fieldOrExpressionFactory === 'function') {\n return this.#withChain(q => q.where(fieldOrExpressionFactory));\n }\n if (value !== undefined) {\n return this.#withChain(q =>\n // Cast to bypass TypeScript's strict type checking - this proxy method needs runtime flexibility\n (\n q as unknown as {\n where(\n field: unknown,\n op: unknown,\n val: unknown,\n ): Query<TSchema, TTable, TReturn>;\n }\n ).where(fieldOrExpressionFactory, opOrValue, value),\n );\n }\n return this.#withChain(q =>\n // Cast to bypass TypeScript's strict type checking - this proxy method needs runtime flexibility\n (\n q as unknown as {\n where(field: unknown, val: unknown): Query<TSchema, TTable, TReturn>;\n }\n ).where(fieldOrExpressionFactory, opOrValue),\n );\n }\n\n start(\n row: Partial<PullRow<TTable, TSchema>>,\n opts?: {inclusive: boolean},\n ): ChainedQuery<TSchema, TTable, TReturn, TContext> {\n return this.#withChain(q => q.start(row, opts));\n }\n\n limit(limit: number): ChainedQuery<TSchema, TTable, TReturn, TContext> {\n return this.#withChain(q => q.limit(limit));\n }\n\n orderBy<TSelector extends keyof PullTableSchema<TTable, TSchema>['columns']>(\n field: TSelector,\n direction: 'asc' | 'desc',\n ): ChainedQuery<TSchema, TTable, TReturn, TContext> {\n return this.#withChain(q => q.orderBy(field as string, direction));\n }\n}\n", "import type {StandardSchemaV1} from '@standard-schema/spec';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport type {SimpleOperator} from '../../../zero-protocol/src/ast.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {ChainedQuery, type AnyChainQuery} from './chained-query.ts';\nimport type {DefineQueryFunc} from './define-query.ts';\nimport type {ExpressionFactory, ParameterReference} from './expression.ts';\nimport type {CustomQueryID} from './named.ts';\nimport {queryWithContext} from './query-internals.ts';\nimport type {AnyQuery} from './query.ts';\nimport {\n type AvailableRelationships,\n type DestTableName,\n type ExistsOptions,\n type GetFilterType,\n type NoCompoundTypeSelector,\n type PullRow,\n type PullTableSchema,\n type Query,\n} from './query.ts';\n\n/**\n * Root named query that has a name, input validation, and a function to execute.\n * This is the base query that doesn't chain from another query.\n */\nexport class RootNamedQuery<\n TName extends string,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n TContext,\n TOutput extends ReadonlyJSONValue | undefined,\n TInput,\n> implements Query<TSchema, TTable, TReturn, TContext>\n{\n readonly #name: TName;\n readonly #input: TInput;\n readonly #func: DefineQueryFunc<TSchema, TTable, TReturn, TContext, TOutput>;\n readonly #validator: StandardSchemaV1<TInput, TOutput> | undefined;\n #cachedQuery: Query<TSchema, TTable, TReturn, TContext> | undefined;\n\n constructor(\n name: TName,\n func: DefineQueryFunc<TSchema, TTable, TReturn, TContext, TOutput>,\n input: TInput,\n validator: StandardSchemaV1<TInput, TOutput> | undefined,\n ) {\n this.#name = name;\n this.#func = func;\n this.#input = input;\n this.#validator = validator;\n }\n\n withContext(ctx: TContext): Query<TSchema, TTable, TReturn, TContext> {\n if (this.#cachedQuery) {\n return this.#cachedQuery;\n }\n\n // This is a root query - call the function with the context\n let output: TOutput;\n if (!this.#validator) {\n // No validator, so input and output are the same\n output = this.#input as unknown as TOutput;\n } else {\n const result = this.#validator['~standard'].validate(this.#input);\n if (result instanceof Promise) {\n throw new Error(\n `Async validators are not supported. Query name ${this.#name}`,\n );\n }\n if (result.issues) {\n throw new Error(\n `Validation failed for query ${this.#name}: ${result.issues\n .map(issue => issue.message)\n .join(', ')}`,\n );\n }\n output = result.value;\n }\n\n // TODO: Refactor to deal with the name and args at a different abstraction\n // layer.\n this.#cachedQuery = queryWithContext(\n this.#func({ctx, args: output}),\n ctx,\n ).nameAndArgs(\n this.#name,\n this.#input === undefined ? [] : [this.#input as ReadonlyJSONValue],\n );\n return this.#cachedQuery;\n }\n\n #withChain<TNewReturn>(\n fn: (\n q: Query<TSchema, TTable, TReturn>,\n ) => Query<TSchema, TTable, TNewReturn>,\n ): ChainedQuery<TSchema, TTable, TNewReturn, TContext> {\n return new ChainedQuery(\n this as {withContext(ctx: TContext): Query<TSchema, TTable, unknown>},\n fn as AnyChainQuery,\n );\n }\n\n // Query interface methods\n\n one(): ChainedQuery<TSchema, TTable, TReturn | undefined, TContext> {\n return this.#withChain(q => q.one());\n }\n\n whereExists<TRelationship extends AvailableRelationships<TTable, TSchema>>(\n relationship: TRelationship,\n options?: ExistsOptions,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext>;\n whereExists<TRelationship extends AvailableRelationships<TTable, TSchema>>(\n relationship: TRelationship,\n cb: (\n q: Query<\n TSchema,\n DestTableName<TTable, TSchema, TRelationship>,\n TContext\n >,\n ) => Query<TSchema, string, TContext>,\n options?: ExistsOptions,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext>;\n whereExists(\n relationship: AvailableRelationships<TTable, TSchema>,\n cbOrOptions?:\n | ((\n q: Query<TSchema, string, TContext>,\n ) => Query<TSchema, string, TContext>)\n | ExistsOptions,\n options?: ExistsOptions,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext> {\n if (typeof cbOrOptions === 'function') {\n return this.#withChain(q =>\n q.whereExists(\n relationship as string,\n cbOrOptions as unknown as (q: AnyQuery) => AnyQuery,\n options,\n ),\n );\n }\n return this.#withChain(q =>\n q.whereExists(relationship as string, cbOrOptions),\n );\n }\n\n related<TRelationship extends AvailableRelationships<TTable, TSchema>>(\n relationship: TRelationship,\n ): ChainedQuery<TSchema, TTable, TReturn & Record<string, unknown>, TContext>;\n related<\n TRelationship extends AvailableRelationships<TTable, TSchema>,\n TSub extends Query<TSchema, string, unknown>,\n >(\n relationship: TRelationship,\n cb: (\n q: Query<\n TSchema,\n DestTableName<TTable, TSchema, TRelationship>,\n TContext\n >,\n ) => TSub,\n ): ChainedQuery<TSchema, TTable, TReturn & Record<string, unknown>, TContext>;\n related(\n relationship: AvailableRelationships<TTable, TSchema>,\n cb?: (\n q: Query<TSchema, string, TContext>,\n ) => Query<TSchema, string, TContext>,\n ): ChainedQuery<\n TSchema,\n TTable,\n TReturn & Record<string, unknown>,\n TContext\n > {\n if (cb) {\n return this.#withChain(q =>\n q.related(\n relationship as string,\n cb as unknown as (q: AnyQuery) => AnyQuery,\n ),\n ) as ChainedQuery<\n TSchema,\n TTable,\n TReturn & Record<string, unknown>,\n TContext\n >;\n }\n return this.#withChain(q =>\n q.related(relationship as string),\n ) as ChainedQuery<\n TSchema,\n TTable,\n TReturn & Record<string, unknown>,\n TContext\n >;\n }\n\n where<\n TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>,\n TOperator extends SimpleOperator,\n >(\n field: TSelector,\n op: TOperator,\n value:\n | GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, TOperator>\n | ParameterReference,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext>;\n where<\n TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>,\n >(\n field: TSelector,\n value:\n | GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, '='>\n | ParameterReference,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext>;\n where(\n expressionFactory: ExpressionFactory<TSchema, TTable>,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext>;\n where(\n fieldOrExpressionFactory:\n | NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>\n | ExpressionFactory<TSchema, TTable>,\n opOrValue?: unknown,\n value?: unknown,\n ): ChainedQuery<TSchema, TTable, TReturn, TContext> {\n if (typeof fieldOrExpressionFactory === 'function') {\n return this.#withChain(q => q.where(fieldOrExpressionFactory));\n }\n if (value !== undefined) {\n return this.#withChain(q =>\n // Cast to bypass TypeScript's strict type checking - this proxy method needs runtime flexibility\n (\n q as unknown as {\n where(\n field: unknown,\n op: unknown,\n val: unknown,\n ): Query<TSchema, TTable, TReturn>;\n }\n ).where(fieldOrExpressionFactory, opOrValue, value),\n );\n }\n return this.#withChain(q =>\n // Cast to bypass TypeScript's strict type checking - this proxy method needs runtime flexibility\n (\n q as unknown as {\n where(field: unknown, val: unknown): Query<TSchema, TTable, TReturn>;\n }\n ).where(fieldOrExpressionFactory, opOrValue),\n );\n }\n\n start(\n row: Partial<PullRow<TTable, TSchema>>,\n opts?: {inclusive: boolean},\n ): ChainedQuery<TSchema, TTable, TReturn, TContext> {\n return this.#withChain(q => q.start(row, opts));\n }\n\n limit(limit: number): ChainedQuery<TSchema, TTable, TReturn, TContext> {\n return this.#withChain(q => q.limit(limit));\n }\n\n orderBy<TSelector extends keyof PullTableSchema<TTable, TSchema>['columns']>(\n field: TSelector,\n direction: 'asc' | 'desc',\n ): ChainedQuery<TSchema, TTable, TReturn, TContext> {\n return this.#withChain(q => q.orderBy(field as string, direction));\n }\n\n get customQueryID(): CustomQueryID {\n return {\n name: this.#name,\n args: this.#input === undefined ? [] : [this.#input as ReadonlyJSONValue],\n };\n }\n}\n", "import type {StandardSchemaV1} from '@standard-schema/spec';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport type {Query} from './query.ts';\nimport {RootNamedQuery} from './root-named-query.ts';\n\nexport type DefineQueryOptions<Input, Output> = {\n validator?: StandardSchemaV1<Input, Output> | undefined;\n};\n\n/**\n * Function type for root query functions that take context and args.\n */\nexport type DefineQueryFunc<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n TContext,\n TArgs,\n> = (options: {\n ctx: TContext;\n args: TArgs;\n}) => Query<TSchema, TTable, TReturn, TContext>;\n\nexport type NamedQueryFunction<\n TName extends string,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n TContext,\n TOutput extends ReadonlyJSONValue | undefined,\n TInput extends ReadonlyJSONValue | undefined,\n> = ([TOutput] extends [undefined]\n ? (() => Query<TSchema, TTable, TReturn, TContext>) &\n ((args: undefined) => Query<TSchema, TTable, TReturn, TContext>)\n : undefined extends TOutput\n ? (args?: TInput) => Query<TSchema, TTable, TReturn, TContext>\n : (args: TInput) => Query<TSchema, TTable, TReturn, TContext>) & {\n queryName: TName;\n};\n\nexport type AnyNamedQueryFunction = NamedQueryFunction<\n string,\n Schema,\n string,\n // oxlint-disable-next-line no-explicit-any\n any,\n // oxlint-disable-next-line no-explicit-any\n any,\n ReadonlyJSONValue | undefined,\n ReadonlyJSONValue | undefined\n>;\n\n// Overload for no options parameter with default inference for untyped functions\nexport function defineQuery<\n TName extends string,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n TContext,\n TArgs extends ReadonlyJSONValue | undefined,\n>(\n name: TName,\n queryFn: DefineQueryFunc<TSchema, TTable, TReturn, TContext, TArgs>,\n): NamedQueryFunction<TName, TSchema, TTable, TReturn, TContext, TArgs, TArgs>;\n\n// Overload for options parameter with validator - Input and Output can be different\nexport function defineQuery<\n TName extends string,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n TContext,\n TOutput extends ReadonlyJSONValue | undefined,\n TInput extends ReadonlyJSONValue | undefined = TOutput,\n>(\n name: TName,\n options: DefineQueryOptions<TInput, TOutput>,\n queryFn: DefineQueryFunc<TSchema, TTable, TReturn, TContext, TOutput>,\n): NamedQueryFunction<\n TName,\n TSchema,\n TTable,\n TReturn,\n TContext,\n TOutput,\n TInput\n>;\n\n// Overload for options parameter without validator with default inference\nexport function defineQuery<\n TName extends string,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n TContext,\n TArgs extends ReadonlyJSONValue | undefined,\n>(\n name: TName,\n options: {},\n queryFn: DefineQueryFunc<TSchema, TTable, TReturn, TContext, TArgs>,\n): NamedQueryFunction<TName, TSchema, TTable, TReturn, TContext, TArgs, TArgs>;\n\n// Implementation\nexport function defineQuery<\n TName extends string,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n TContext,\n TOutput extends ReadonlyJSONValue | undefined,\n TInput extends ReadonlyJSONValue | undefined = TOutput,\n>(\n name: TName,\n optionsOrQueryFn:\n | DefineQueryOptions<TInput, TOutput>\n | DefineQueryFunc<TSchema, TTable, TReturn, TContext, TOutput>,\n queryFn?: DefineQueryFunc<TSchema, TTable, TReturn, TContext, TOutput>,\n): NamedQueryFunction<\n TName,\n TSchema,\n TTable,\n TReturn,\n TContext,\n TOutput,\n TInput\n> {\n // Handle different parameter patterns\n let defineOptions: DefineQueryOptions<TInput, TOutput> | undefined;\n let actualQueryFn: DefineQueryFunc<\n TSchema,\n TTable,\n TReturn,\n TContext,\n TOutput\n >;\n\n if (typeof optionsOrQueryFn === 'function') {\n // defineQuery(name, queryFn) - no options\n defineOptions = undefined;\n actualQueryFn = optionsOrQueryFn;\n } else {\n // defineQuery(name, options, queryFn) - with options\n defineOptions = optionsOrQueryFn;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n actualQueryFn = queryFn!;\n }\n\n const f = ((args?: TInput) =>\n new RootNamedQuery(\n name,\n actualQueryFn,\n args,\n defineOptions?.validator,\n )) as unknown as NamedQueryFunction<\n TName,\n TSchema,\n TTable,\n TReturn,\n TContext,\n TOutput,\n TInput\n >;\n f.queryName = name;\n return f;\n}\n\n/**\n * Creates a type-safe query definition function that is parameterized by a\n * custom context type.\n *\n * This utility allows you to define queries with explicit context typing,\n * ensuring that the query function receives the correct context type. It\n * returns a function that can be used to define named queries with schema,\n * table, input, and output types.\n *\n * @typeParam TContext - The type of the context object that will be passed to\n * the query function.\n *\n * @returns A function for defining named queries with the specified context\n * type.\n *\n * @example\n * ```ts\n * const defineQuery = defineQueryWithContextType<MyContext>();\n * const myQuery = defineQuery(\n * \"getUser\",\n * {validator: z.string()},\n * ({ctx, args}) => {\n * ctx satisfies MyContext;\n * ...\n * },\n * );\n * ```\n */\nexport function defineQueryWithContextType<TContext>(): <\n TName extends string,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n TOutput extends ReadonlyJSONValue | undefined,\n TInput extends ReadonlyJSONValue | undefined = TOutput,\n>(\n name: TName,\n optionsOrQueryFn:\n | DefineQueryOptions<TInput, TOutput>\n | DefineQueryFunc<TSchema, TTable, TReturn, TContext, TOutput>,\n queryFn?: DefineQueryFunc<TSchema, TTable, TReturn, TContext, TOutput>,\n) => NamedQueryFunction<\n TName,\n TSchema,\n TTable,\n TReturn,\n TContext,\n TOutput,\n TInput\n> {\n return defineQuery as <\n TName extends string,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n TOutput extends ReadonlyJSONValue | undefined,\n TInput extends ReadonlyJSONValue | undefined = TOutput,\n >(\n name: TName,\n optionsOrQueryFn:\n | DefineQueryOptions<TInput, TOutput>\n | DefineQueryFunc<TSchema, TTable, TReturn, TContext, TOutput>,\n queryFn?: DefineQueryFunc<TSchema, TTable, TReturn, TContext, TOutput>,\n ) => NamedQueryFunction<\n TName,\n TSchema,\n TTable,\n TReturn,\n TContext,\n TOutput,\n TInput\n >;\n}\n", "export function escapeLike(val: string) {\n return val.replace(/[%_]/g, '\\\\$&');\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["table", "relationships", "tableName", "ast", "format", "clientToServer"]
7
+ }
@@ -50,6 +50,29 @@ function unreachable(_) {
50
50
  throw new Error("Unreachable");
51
51
  }
52
52
 
53
+ // ../replicache/src/with-transactions.ts
54
+ function withRead(store, fn) {
55
+ return using(store.read(), fn);
56
+ }
57
+ function withWriteNoImplicitCommit(store, fn) {
58
+ return using(store.write(), fn);
59
+ }
60
+ function withWrite(store, fn) {
61
+ return using(store.write(), async (write) => {
62
+ const result = await fn(write);
63
+ await write.commit();
64
+ return result;
65
+ });
66
+ }
67
+ async function using(x, fn) {
68
+ const write = await x;
69
+ try {
70
+ return await fn(write);
71
+ } finally {
72
+ write.release();
73
+ }
74
+ }
75
+
53
76
  // ../shared/src/has-own.ts
54
77
  var { hasOwn } = Object;
55
78
 
@@ -173,6 +196,22 @@ function deepFreezeAllowUndefined(v) {
173
196
  return deepFreeze(v);
174
197
  }
175
198
 
199
+ // ../shared/src/random-uint64.ts
200
+ function randomUint64() {
201
+ const high = Math.floor(Math.random() * 4294967295);
202
+ const low = Math.floor(Math.random() * 4294967295);
203
+ return BigInt(high) << 32n | BigInt(low);
204
+ }
205
+
206
+ // ../replicache/src/persist/make-client-id.ts
207
+ function makeClientID() {
208
+ const length = 18;
209
+ const high = randomUint64();
210
+ const low = randomUint64();
211
+ const combined = high << 64n | low;
212
+ return combined.toString(32).slice(-length).padStart(length, "0");
213
+ }
214
+
176
215
  export {
177
216
  assert,
178
217
  assertString,
@@ -187,6 +226,12 @@ export {
187
226
  hasOwn,
188
227
  deepFreeze,
189
228
  assertDeepFrozen,
190
- deepFreezeAllowUndefined
229
+ deepFreezeAllowUndefined,
230
+ randomUint64,
231
+ withRead,
232
+ withWriteNoImplicitCommit,
233
+ withWrite,
234
+ using,
235
+ makeClientID
191
236
  };
192
- //# sourceMappingURL=chunk-EZM3XBAB.js.map
237
+ //# sourceMappingURL=chunk-U2KJIWVC.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../shared/src/asserts.ts", "../../replicache/src/with-transactions.ts", "../../shared/src/has-own.ts", "../../shared/src/config.ts", "../../replicache/src/frozen-json.ts", "../../shared/src/random-uint64.ts", "../../replicache/src/persist/make-client-id.ts"],
4
+ "sourcesContent": ["export function assert(\n b: unknown,\n msg: string | (() => string) = 'Assertion failed',\n): asserts b {\n if (!b) {\n throw new Error(typeof msg === 'string' ? msg : msg());\n }\n}\n\nexport function assertString(v: unknown): asserts v is string {\n assertType(v, 'string');\n}\n\nexport function assertNumber(v: unknown): asserts v is number {\n assertType(v, 'number');\n}\n\nexport function assertBoolean(v: unknown): asserts v is boolean {\n assertType(v, 'boolean');\n}\n\nfunction assertType(v: unknown, t: string) {\n if (typeof v !== t) {\n throwInvalidType(v, t);\n }\n}\n\nexport function assertObject(v: unknown): asserts v is Record<string, unknown> {\n if (v === null) {\n throwInvalidType(v, 'object');\n }\n assertType(v, 'object');\n}\n\nexport function assertArray(v: unknown): asserts v is unknown[] {\n if (!Array.isArray(v)) {\n throwInvalidType(v, 'array');\n }\n}\n\nexport function invalidType(v: unknown, t: string): string {\n let s = 'Invalid type: ';\n if (v === null || v === undefined) {\n s += v;\n } else {\n s += `${typeof v} \\`${v}\\``;\n }\n return s + `, expected ${t}`;\n}\n\nexport function throwInvalidType(v: unknown, t: string): never {\n throw new Error(invalidType(v, t));\n}\n\nexport function assertNotNull<T>(v: T | null): asserts v is T {\n if (v === null) {\n throw new Error('Expected non-null value');\n }\n}\n\nexport function assertUndefined<T>(\n v: T | undefined,\n msg = 'Expected undefined value',\n): asserts v is T {\n if (v !== undefined) {\n throw new Error(msg);\n }\n}\n\nexport function assertNotUndefined<T>(\n v: T | undefined,\n msg = 'Expected non undefined value',\n): asserts v is T {\n if (v === undefined) {\n throw new Error(msg);\n }\n}\n\nexport function assertInstanceof<T>(\n v: unknown,\n t: new (...args: unknown[]) => T,\n): asserts v is T {\n if (!(v instanceof t)) {\n throw new Error(`Expected instanceof ${t.name}`);\n }\n}\n\nexport function assertUint8Array(v: unknown): asserts v is Uint8Array {\n assertInstanceof(v, Uint8Array);\n}\n\nexport function unreachable(): never;\nexport function unreachable(v: never): never;\nexport function unreachable(_?: never): never {\n throw new Error('Unreachable');\n}\n\nexport function notImplemented(): never {\n throw new Error('Not implemented');\n}\n", "export interface Release {\n release(): void;\n}\n\nexport interface Commit {\n commit(): Promise<void>;\n}\n\ninterface ReadStore<Read extends Release> {\n read(): Promise<Read>;\n}\n\ninterface WriteStore<Write extends Release> {\n write(): Promise<Write>;\n}\n\nexport function withRead<Read extends Release, Return>(\n store: ReadStore<Read>,\n fn: (read: Read) => Return | Promise<Return>,\n): Promise<Return> {\n return using(store.read(), fn);\n}\n\nexport function withWriteNoImplicitCommit<Write extends Release, Return>(\n store: WriteStore<Write>,\n fn: (write: Write) => Return | Promise<Return>,\n): Promise<Return> {\n return using(store.write(), fn);\n}\n\nexport function withWrite<Write extends Release & Commit, Return>(\n store: WriteStore<Write>,\n fn: (write: Write) => Return | Promise<Return>,\n): Promise<Return> {\n return using(store.write(), async write => {\n const result = await fn(write);\n await write.commit();\n return result;\n });\n}\n\n/**\n * This function takes a promise for a resource and a function that uses that\n * resource. It will release the resource after the function returns by calling\n * the `release` function\n */\nexport async function using<TX extends Release, Return>(\n x: Promise<TX>,\n fn: (tx: TX) => Return | Promise<Return>,\n): Promise<Return> {\n const write = await x;\n try {\n return await fn(write);\n } finally {\n write.release();\n }\n}\n", "// hasOwn was added in ES2022\nexport const {hasOwn} = Object;\n", "declare const process: {\n env: {\n NODE_ENV?: string;\n };\n};\n\nexport const isProd = process.env.NODE_ENV === 'production';\n\nexport {isProd as skipAssertJSONValue};\n", "import {throwInvalidType} from '../../shared/src/asserts.ts';\nimport {skipAssertJSONValue} from '../../shared/src/config.ts';\nimport {hasOwn} from '../../shared/src/has-own.ts';\nimport type {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from '../../shared/src/json.ts';\nimport {skipFreeze, skipFrozenAsserts} from './config.ts';\nimport type {Cookie, FrozenCookie} from './cookies.ts';\n\ndeclare const frozenJSONTag: unique symbol;\n\n/**\n * Used to mark a type as having been frozen.\n */\nexport type FrozenTag<T> = T & {readonly [frozenJSONTag]: true};\n\nexport type FrozenJSONValue =\n | null\n | string\n | boolean\n | number\n | FrozenJSONArray\n | FrozenJSONObject;\n\ntype FrozenJSONArray = FrozenTag<ReadonlyArray<FrozenJSONValue>>;\n\nexport type FrozenJSONObject = FrozenTag<{\n readonly [key: string]: FrozenJSONValue;\n}>;\n\n/**\n * We tag deep frozen objects in debug mode so that we do not have to deep\n * freeze an object more than once.\n */\nconst deepFrozenObjects = new WeakSet<object>();\n\n/**\n * Recursively freezes the passed in value (mutates it) and returns it.\n *\n * This is controlled by `skipFreeze` which is true in release mode.\n */\nexport function deepFreeze(v: Cookie): FrozenCookie;\nexport function deepFreeze(v: ReadonlyJSONValue): FrozenJSONValue;\nexport function deepFreeze(v: ReadonlyJSONValue): FrozenJSONValue {\n if (skipFreeze) {\n return v as FrozenJSONValue;\n }\n\n deepFreezeInternal(v, []);\n return v as FrozenJSONValue;\n}\n\nfunction deepFreezeInternal(\n v: ReadonlyJSONValue | undefined,\n seen: object[],\n): void {\n switch (typeof v) {\n case 'undefined':\n throw new TypeError('Unexpected value undefined');\n case 'boolean':\n case 'number':\n case 'string':\n return;\n case 'object': {\n if (v === null) {\n return;\n }\n\n if (deepFrozenObjects.has(v)) {\n return;\n }\n deepFrozenObjects.add(v);\n\n if (seen.includes(v)) {\n throwInvalidType(v, 'Cyclic JSON object');\n }\n\n seen.push(v);\n\n Object.freeze(v);\n if (Array.isArray(v)) {\n deepFreezeArray(v, seen);\n } else {\n deepFreezeObject(v as ReadonlyJSONObject, seen);\n }\n seen.pop();\n return;\n }\n\n default:\n throwInvalidType(v, 'JSON value');\n }\n}\n\nfunction deepFreezeArray(\n v: ReadonlyArray<ReadonlyJSONValue>,\n seen: object[],\n): void {\n for (const item of v) {\n deepFreezeInternal(item, seen);\n }\n}\n\nfunction deepFreezeObject(v: ReadonlyJSONObject, seen: object[]): void {\n for (const k in v) {\n if (hasOwn(v, k)) {\n const value = v[k];\n if (value !== undefined) {\n deepFreezeInternal(value, seen);\n }\n }\n }\n}\n\nexport function assertFrozenJSONValue(\n v: unknown,\n): asserts v is FrozenJSONValue {\n if (skipFrozenAsserts || skipAssertJSONValue) {\n return;\n }\n\n switch (typeof v) {\n case 'boolean':\n case 'number':\n case 'string':\n return;\n case 'object':\n if (v === null) {\n return;\n }\n\n if (isDeepFrozen(v, [])) {\n return;\n }\n }\n throwInvalidType(v, 'JSON value');\n}\n\nexport function assertDeepFrozen<V>(v: V): asserts v is Readonly<V> {\n if (skipFrozenAsserts) {\n return;\n }\n\n if (!isDeepFrozen(v, [])) {\n throw new Error('Expected frozen object');\n }\n}\n\n/**\n * Recursive deep frozen check.\n *\n * It adds frozen objects to the {@link deepFrozenObjects} WeakSet so that we do\n * not have to check the same object more than once.\n */\nexport function isDeepFrozen(v: unknown, seen: object[]): boolean {\n switch (typeof v) {\n case 'boolean':\n case 'number':\n case 'string':\n return true;\n case 'object':\n if (v === null) {\n return true;\n }\n\n if (deepFrozenObjects.has(v)) {\n return true;\n }\n\n if (!Object.isFrozen(v)) {\n return false;\n }\n\n if (seen.includes(v)) {\n throwInvalidType(v, 'Cyclic JSON object');\n }\n\n seen.push(v);\n\n if (Array.isArray(v)) {\n for (const item of v) {\n if (!isDeepFrozen(item, seen)) {\n seen.pop();\n return false;\n }\n }\n } else {\n for (const k in v) {\n if (hasOwn(v, k)) {\n const value = (v as Record<string, unknown>)[k];\n if (value !== undefined && !isDeepFrozen(value, seen)) {\n seen.pop();\n return false;\n }\n }\n }\n }\n\n deepFrozenObjects.add(v);\n seen.pop();\n return true;\n\n default:\n throwInvalidType(v, 'JSON value');\n }\n}\n\nexport type P = Parameters<typeof deepFreeze>[0];\nexport type R = ReturnType<typeof deepFreeze>;\nexport function deepFreezeAllowUndefined(v: P | undefined): R | undefined {\n if (v === undefined) {\n return undefined;\n }\n return deepFreeze(v) as R;\n}\n", "export function randomUint64(): bigint {\n // Generate two random 32-bit unsigned integers using Math.random()\n const high = Math.floor(Math.random() * 0xffffffff); // High 32 bits\n const low = Math.floor(Math.random() * 0xffffffff); // Low 32 bits\n\n // Combine the high and low parts to form a 64-bit unsigned integer\n return (BigInt(high) << 32n) | BigInt(low);\n}\n", "import {randomUint64} from '../../../shared/src/random-uint64.ts';\n\n/**\n * Returns a random 18 character string encoded in base32 suitable as a client\n * ID.\n */\nexport function makeClientID(): string {\n const length = 18;\n const high = randomUint64();\n const low = randomUint64();\n const combined = (high << 64n) | low;\n return combined.toString(32).slice(-length).padStart(length, '0');\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  expoSQLiteStoreProvider
3
- } from "./chunk-ZZXMKAAG.js";
4
- import "./chunk-ECUMGQGC.js";
5
- import "./chunk-ASRS2LFV.js";
6
- import "./chunk-EZM3XBAB.js";
3
+ } from "./chunk-5H7WNLPK.js";
4
+ import "./chunk-RYFBHAD4.js";
5
+ import "./chunk-HYS7YLNL.js";
6
+ import "./chunk-U2KJIWVC.js";
7
7
  import "./chunk-424PT5DM.js";
8
8
  export {
9
9
  expoSQLiteStoreProvider
@@ -40,4 +40,4 @@ function Inspector({ zero, onClose }) {
40
40
  export {
41
41
  Inspector as default
42
42
  };
43
- //# sourceMappingURL=inspector-IU2HG74I.js.map
43
+ //# sourceMappingURL=inspector-GP3CBZRU.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../zero-react/src/components/inspector.tsx"],
4
+ "sourcesContent": ["import type {CustomMutatorDefs} from '../../../zero-client/src/client/custom.ts';\nimport type {Zero} from '../../../zero-client/src/client/zero.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {MarkIcon} from './mark-icon.tsx';\n\nexport default function Inspector<\n S extends Schema,\n MD extends CustomMutatorDefs | undefined = undefined,\n>({zero, onClose}: {zero: Zero<S, MD>; onClose: () => void}) {\n return (\n <dialog\n open\n style={{\n alignItems: 'center',\n backgroundColor: 'white',\n borderRadius: '8px 0 0 0',\n bottom: 0,\n boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)',\n color: 'black',\n display: 'flex',\n height: 'fit-content',\n marginRight: 0,\n opacity: 0.95,\n padding: '0.25em 0.5em',\n position: 'fixed',\n width: 'fit-content',\n zIndex: 1000,\n }}\n >\n <MarkIcon style={{margin: '0.5em'}} />\n <div>Zero v{zero.version}</div>\n <button onClick={onClose} style={{padding: '0.5em'}}>\n \u2716\uFE0E\n </button>\n </dialog>\n );\n}\n"],
5
+ "mappings": ";;;;;;AA6BM,cACA,YADA;AAxBS,SAAR,UAGL,EAAC,MAAM,QAAO,GAA6C;AAC3D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAI;AAAA,MACJ,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,OAAO;AAAA,QACP,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,MAEA;AAAA,4BAAC,YAAS,OAAO,EAAC,QAAQ,QAAO,GAAG;AAAA,QACpC,qBAAC,SAAI;AAAA;AAAA,UAAO,KAAK;AAAA,WAAQ;AAAA,QACzB,oBAAC,YAAO,SAAS,SAAS,OAAO,EAAC,SAAS,QAAO,GAAG,0BAErD;AAAA;AAAA;AAAA,EACF;AAEJ;",
6
+ "names": []
7
+ }
@@ -18,13 +18,13 @@ import {
18
18
  normalizeTTL,
19
19
  readFromHash,
20
20
  test,
21
- valita_exports,
22
- withRead
23
- } from "./chunk-TJFNGO7E.js";
21
+ valita_exports
22
+ } from "./chunk-JKP7HDC6.js";
24
23
  import {
25
24
  assert,
26
- unreachable
27
- } from "./chunk-EZM3XBAB.js";
25
+ unreachable,
26
+ withRead
27
+ } from "./chunk-U2KJIWVC.js";
28
28
  import "./chunk-424PT5DM.js";
29
29
 
30
30
  // ../zero-client/src/client/inspector/html-dialog-prompt.ts
@@ -542,8 +542,9 @@ async function clientQueries(delegate, clientID) {
542
542
  return rows.map((row) => new Query(row, delegate, delegate.getSocket));
543
543
  }
544
544
  async function analyzeQuery(delegate, query, options) {
545
- const { customQueryID } = query;
546
- const queryParameters = customQueryID ? { name: customQueryID.name, args: customQueryID.args } : { ast: query.ast };
545
+ const qi = delegate.queryDelegate.withContext(query);
546
+ const { customQueryID } = qi;
547
+ const queryParameters = customQueryID ? { name: customQueryID.name, args: customQueryID.args } : { ast: delegate.mapClientASTToServer(qi.ast) };
547
548
  return rpc(
548
549
  await delegate.getSocket(),
549
550
  {
@@ -571,4 +572,4 @@ export {
571
572
  rpc,
572
573
  serverVersion
573
574
  };
574
- //# sourceMappingURL=lazy-inspector-OXIFYSSQ.js.map
575
+ //# sourceMappingURL=lazy-inspector-4CO3DXP5.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../zero-client/src/client/inspector/html-dialog-prompt.ts", "../../ast-to-zql/src/ast-to-zql.ts", "../../zero-client/src/client/inspector/query.ts", "../../zero-client/src/client/inspector/lazy-inspector.ts"],
4
+ "sourcesContent": ["/**\n * Checks if we can create HTML elements and are in a browser document context\n */\nfunction canUseHTMLDialog(): boolean {\n try {\n // Check if we're in a test environment (vitest sets this)\n if (\n typeof globalThis !== 'undefined' &&\n '__vitest_worker__' in globalThis\n ) {\n return false;\n }\n\n return (\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function' &&\n typeof HTMLDialogElement !== 'undefined' &&\n document.body !== null &&\n // Make sure we can actually create a dialog element\n document.createElement('dialog') instanceof HTMLDialogElement\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Creates a password prompt using HTML <dialog> element\n */\nexport function createHTMLPasswordPrompt(\n message: string,\n): Promise<string | null> {\n if (!canUseHTMLDialog()) {\n // Fallback to browser prompt if HTML dialog is not available\n return Promise.resolve(prompt(message));\n }\n\n return new Promise<string | null>(resolve => {\n // Shared CSS constants\n const reset = 'all:revert;';\n const w = 'rgba(255,255,255,';\n const white = w + '1)';\n const whiteTransp = w + '0.4)';\n const r1 = '0.25rem';\n const font = `font-family:system-ui,sans-serif;color:${white};`;\n const btnBase = `${reset}${font}cursor:pointer;font-size:1rem;font-weight:500;border:none;padding:0.4rem 0.75rem;border-radius:${r1};background:`;\n\n const dialog = document.createElement('dialog');\n dialog.style.cssText = `${reset}${font}background:rgba(0,0,0,0.95);padding:2rem;border:1px solid ${whiteTransp};border-radius:0.5rem;`;\n\n // Prevent keydown from escaping the dialog which can be interfered by other\n // listeners (e.g. global hotkeys)\n dialog.addEventListener('keydown', e => {\n e.stopPropagation();\n });\n\n dialog.oncancel = () => {\n dialog.remove();\n resolve(null);\n };\n\n const form = document.createElement('form');\n form.method = 'dialog';\n form.style.cssText = `${reset}margin:0;`;\n\n const messagePara = document.createElement('p');\n messagePara.style.cssText = `${reset}${font}font-size:1.5rem;margin:0 0 1rem 0;`;\n messagePara.append(message);\n\n const passwordInput = document.createElement('input');\n passwordInput.type = 'password';\n passwordInput.placeholder = 'Admin password';\n passwordInput.autocomplete = 'current-password';\n passwordInput.autofocus = true;\n passwordInput.style.cssText = `${reset}${font}font-size:1rem;display:block;margin:0 0 1rem 0;padding:0.5rem;background:rgba(0,0,0,0.5);border:1px solid ${whiteTransp};border-radius:${r1};`;\n\n const buttonDiv = document.createElement('div');\n buttonDiv.style.cssText = reset;\n\n const cancelBtn = document.createElement('button');\n cancelBtn.type = 'reset';\n cancelBtn.append('Cancel');\n cancelBtn.style.cssText = btnBase + w + '0.25);';\n\n const okBtn = document.createElement('button');\n okBtn.type = 'submit';\n okBtn.value = 'ok';\n okBtn.append('OK');\n okBtn.style.cssText = btnBase + 'rgba(19,106,235,1);margin-right:0.5rem;';\n\n buttonDiv.append(okBtn, cancelBtn);\n form.append(messagePara, passwordInput, buttonDiv);\n dialog.append(form);\n\n form.onreset = () => {\n dialog.close();\n };\n\n dialog.onclose = () => {\n if (dialog.returnValue === 'ok') {\n resolve(passwordInput.value || null);\n } else {\n resolve(null);\n }\n dialog.remove();\n };\n\n document.body.append(dialog);\n dialog.showModal();\n });\n}\n", "import {unreachable} from '../../shared/src/asserts.ts';\nimport {must} from '../../shared/src/must.ts';\nimport type {\n AST,\n Condition,\n Conjunction,\n CorrelatedSubquery,\n CorrelatedSubqueryCondition,\n Disjunction,\n LiteralReference,\n Ordering,\n Parameter,\n SimpleCondition,\n ValuePosition,\n} from '../../zero-protocol/src/ast.ts';\nimport {SUBQ_PREFIX} from '../../zero-protocol/src/ast.ts';\n\n/**\n * Converts an AST to the equivalent query builder code.\n * This is useful for debugging and understanding queries.\n *\n * @example\n * ```\n * const ast = query.issue.where('id', '=', 123)[astSymbol];\n * console.log(astToZQL(ast)); // outputs: .where('id', '=', 123)\n * ```\n */\nexport function astToZQL(ast: AST): string {\n let code = '';\n\n // Handle where conditions\n if (ast.where) {\n code += transformCondition(ast.where, '.where', new Set());\n }\n\n // Handle related subqueries\n if (ast.related && ast.related.length > 0) {\n for (const related of ast.related) {\n if (related.hidden) {\n const nestedRelated = related.subquery.related?.[0];\n if (nestedRelated) {\n code += transformRelated(nestedRelated);\n }\n } else {\n code += transformRelated(related);\n }\n }\n }\n\n // Handle orderBy\n if (ast.orderBy && ast.orderBy.length > 0) {\n code += transformOrder(ast.orderBy);\n }\n\n // Handle limit\n if (ast.limit !== undefined) {\n code += `.limit(${ast.limit})`;\n }\n\n // Handle start\n if (ast.start) {\n const {row, exclusive} = ast.start;\n code += `.start(${JSON.stringify(row)}${\n exclusive ? '' : ', { inclusive: true }'\n })`;\n }\n\n return code;\n}\n\ntype Args = Set<string>;\n\ntype Prefix = '.where' | 'cmp';\n\nfunction transformCondition(\n condition: Condition,\n prefix: Prefix,\n args: Args,\n): string {\n switch (condition.type) {\n case 'simple':\n return transformSimpleCondition(condition, prefix);\n case 'and':\n case 'or':\n return transformLogicalCondition(condition, prefix, args);\n case 'correlatedSubquery':\n return transformExistsCondition(condition, prefix, args);\n default:\n unreachable(condition);\n }\n}\n\nfunction transformSimpleCondition(\n condition: SimpleCondition,\n prefix: Prefix,\n): string {\n const {left, op, right} = condition;\n\n const leftCode = transformValuePosition(left);\n const rightCode = transformValuePosition(right);\n\n // Handle the shorthand form for equals\n if (op === '=') {\n return `${prefix}(${leftCode}, ${rightCode})`;\n }\n\n return `${prefix}(${leftCode}, '${op}', ${rightCode})`;\n}\n\nfunction transformLogicalCondition(\n condition: Conjunction | Disjunction,\n prefix: Prefix,\n args: Args,\n): string {\n const {type, conditions} = condition;\n\n // For single condition, no need for logical operator\n if (conditions.length === 1) {\n return transformCondition(conditions[0], prefix, args);\n }\n\n // Generate multiple where calls for top-level AND conditions\n if (type === 'and') {\n const parts = conditions.map(c => transformCondition(c, prefix, args));\n // Simply concatenate the where conditions\n if (prefix === '.where') {\n return parts.join('');\n }\n args.add('and');\n return 'and(' + parts.join(', ') + ')';\n }\n\n args = new Set<string>();\n\n // Handle nested conditions with a callback for OR conditions and nested ANDs/ORs\n const conditionsCode = conditions\n .map(c => transformCondition(c, 'cmp', args))\n .join(', ');\n\n args.add('cmp');\n args.add(type);\n const argsCode = [...args].sort().join(', ');\n\n return `.where(({${argsCode}}) => ${type}(${conditionsCode}))`;\n}\n\nfunction transformExistsCondition(\n condition: CorrelatedSubqueryCondition,\n prefix: '.where' | 'cmp',\n args: Set<string>,\n): string {\n const {related, op} = condition;\n const relationship = extractRelationshipName(related);\n\n const nextSubquery = getNextExistsSubquery(related);\n\n // Check if subquery has additional properties\n const hasSubQueryProps =\n nextSubquery.where ||\n (nextSubquery.related && nextSubquery.related.length > 0) ||\n nextSubquery.orderBy ||\n nextSubquery.limit;\n\n if (op === 'EXISTS') {\n const flipped = condition.flip ? ', {flip: true}' : '';\n if (!hasSubQueryProps) {\n if (prefix === '.where') {\n return `.whereExists('${relationship}'${flipped})`;\n }\n args.add('exists');\n return `exists('${relationship}'${flipped})`;\n }\n\n if (prefix === '.where') {\n return `.whereExists('${relationship}', q => q${astToZQL(nextSubquery)}${flipped})`;\n }\n prefix satisfies 'cmp';\n args.add('exists');\n return `exists('${relationship}', q => q${astToZQL(nextSubquery)}${flipped})`;\n }\n\n op satisfies 'NOT EXISTS';\n\n if (hasSubQueryProps) {\n if (prefix === '.where') {\n return `.where(({exists, not}) => not(exists('${relationship}', q => q${astToZQL(\n nextSubquery,\n )})))`;\n }\n prefix satisfies 'cmp';\n args.add('not');\n args.add('exists');\n return `not(exists('${relationship}', q => q${astToZQL(nextSubquery)}))`;\n }\n\n if (prefix === '.where') {\n return `.where(({exists, not}) => not(exists('${relationship}')))`;\n }\n args.add('not');\n args.add('exists');\n\n return `not(exists('${relationship}')))`;\n}\n\n// If the `exists` is applied against a junction edge, both hops will have the same alias and both hops will be exists conditions.\nfunction getNextExistsSubquery(related: CorrelatedSubquery): AST {\n if (\n related.subquery.where?.type === 'correlatedSubquery' &&\n related.subquery.where.related.subquery.alias?.includes(\n SUBQ_PREFIX + 'zhidden_',\n )\n ) {\n return getNextExistsSubquery(related.subquery.where.related);\n }\n\n return related.subquery;\n}\n\nfunction extractRelationshipName(related: CorrelatedSubquery): string {\n const alias = must(related.subquery.alias);\n return alias.startsWith(SUBQ_PREFIX)\n ? alias.substring(SUBQ_PREFIX.length)\n : alias;\n}\n\nfunction transformRelated(related: CorrelatedSubquery): string {\n const {alias} = related.subquery;\n if (!alias) return '';\n\n const relationship = alias;\n let code = `.related('${relationship}'`;\n\n // If the subquery has additional filters or configurations\n if (\n related.subquery.where ||\n (related.subquery.related && related.subquery.related.length > 0) ||\n related.subquery.orderBy ||\n related.subquery.limit\n ) {\n code += ', q => q' + astToZQL(related.subquery);\n }\n\n code += ')';\n return code;\n}\n\nfunction transformOrder(orderBy: Ordering): string {\n let code = '';\n for (const [field, direction] of orderBy) {\n code += `.orderBy('${field}', '${direction}')`;\n }\n return code;\n}\n\nfunction transformValuePosition(value: ValuePosition): string {\n switch (value.type) {\n case 'literal':\n return transformLiteral(value);\n case 'column':\n return `'${value.name}'`;\n case 'static':\n return transformParameter(value);\n default:\n unreachable(value);\n }\n}\n\nfunction transformLiteral(literal: LiteralReference): string {\n if (literal.value === null) {\n return 'null';\n }\n if (Array.isArray(literal.value)) {\n return JSON.stringify(literal.value);\n }\n if (typeof literal.value === 'string') {\n return `'${literal.value.replace(/'/g, \"\\\\'\")}'`;\n }\n return String(literal.value);\n}\n\nfunction transformParameter(param: Parameter): string {\n const fieldStr = Array.isArray(param.field)\n ? `[${param.field.map(f => `'${f}'`).join(', ')}]`\n : `'${param.field}'`;\n\n return `authParam(${fieldStr})`;\n}\n", "import {astToZQL} from '../../../../ast-to-zql/src/ast-to-zql.ts';\nimport {assert} from '../../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../../shared/src/json.ts';\nimport type {AnalyzeQueryResult} from '../../../../zero-protocol/src/analyze-query-result.ts';\nimport type {AST} from '../../../../zero-protocol/src/ast.ts';\nimport {\n type InspectQueryRow,\n inspectAnalyzeQueryDownSchema,\n} from '../../../../zero-protocol/src/inspect-down.ts';\nimport type {AnalyzeQueryOptions} from '../../../../zero-protocol/src/inspect-up.ts';\nimport {type TTL, normalizeTTL} from '../../../../zql/src/query/ttl.ts';\nimport {\n type ExtendedInspectorDelegate,\n type GetWebSocket,\n type Metrics,\n mergeMetrics,\n rpc,\n} from './lazy-inspector.ts';\n\nexport class Query {\n readonly #socket: GetWebSocket;\n\n readonly name: string | null;\n readonly args: ReadonlyArray<ReadonlyJSONValue> | null;\n readonly got: boolean;\n readonly ttl: TTL;\n readonly inactivatedAt: Date | null;\n readonly rowCount: number;\n readonly deleted: boolean;\n readonly id: string;\n readonly clientID: string;\n readonly metrics: Metrics | null;\n readonly clientZQL: string | null;\n readonly serverZQL: string | null;\n readonly #serverAST: AST | null;\n\n readonly hydrateClient: number | null;\n readonly hydrateServer: number | null;\n readonly hydrateTotal: number | null;\n\n readonly updateClientP50: number | null;\n readonly updateClientP95: number | null;\n readonly updateServerP50: number | null;\n readonly updateServerP95: number | null;\n\n constructor(\n row: InspectQueryRow,\n delegate: ExtendedInspectorDelegate,\n socket: GetWebSocket,\n ) {\n this.#socket = socket;\n\n const {ast, queryID, inactivatedAt} = row;\n // Use own properties to make this more useful in dev tools. For example, in\n // Chrome dev tools, if you do console.table(queries) you'll see the\n // properties in the table, if these were getters you would not see them in the table.\n this.clientID = row.clientID;\n this.id = queryID;\n this.inactivatedAt =\n inactivatedAt === null ? null : new Date(inactivatedAt);\n this.ttl = normalizeTTL(row.ttl);\n this.name = row.name;\n this.args = row.args;\n this.got = row.got;\n this.rowCount = row.rowCount;\n this.deleted = row.deleted;\n this.#serverAST = ast;\n this.serverZQL = ast ? ast.table + astToZQL(ast) : null;\n const clientAST = delegate.getAST(queryID);\n this.clientZQL = clientAST ? clientAST.table + astToZQL(clientAST) : null;\n\n // Merge client and server metrics\n const clientMetrics = delegate.getQueryMetrics(queryID);\n const serverMetrics = row.metrics;\n\n const merged = mergeMetrics(clientMetrics, serverMetrics);\n this.metrics = merged;\n\n const percentile = (\n name: keyof typeof merged,\n percentile: number,\n ): number | null => {\n if (!merged?.[name]) {\n return null;\n }\n const n = merged[name].quantile(percentile);\n return Number.isNaN(n) ? null : n;\n };\n\n // Extract hydration metrics (median values) - handle NaN by defaulting to 0\n this.hydrateClient = percentile('query-materialization-client', 0.5);\n this.hydrateServer = percentile('query-materialization-server', 0.5);\n this.hydrateTotal = percentile('query-materialization-end-to-end', 0.5);\n\n // Extract update metrics (P50 and P95) - handle NaN by defaulting to 0\n this.updateClientP50 = percentile('query-update-client', 0.5);\n this.updateClientP95 = percentile('query-update-client', 0.95);\n\n this.updateServerP50 = percentile('query-update-server', 0.5);\n this.updateServerP95 = percentile('query-update-server', 0.95);\n }\n\n async analyze(options?: AnalyzeQueryOptions): Promise<AnalyzeQueryResult> {\n assert(this.#serverAST, 'No server AST available for this query');\n return rpc(\n await this.#socket(),\n {\n op: 'analyze-query',\n value: this.#serverAST,\n options,\n },\n inspectAnalyzeQueryDownSchema,\n );\n }\n}\n", "import type {BTreeRead} from '../../../../replicache/src/btree/read.ts';\nimport type {Read} from '../../../../replicache/src/dag/store.ts';\nimport {readFromHash} from '../../../../replicache/src/db/read.ts';\nimport * as FormatVersion from '../../../../replicache/src/format-version-enum.ts';\nimport {getClientGroup} from '../../../../replicache/src/persist/client-groups.ts';\nimport {\n getClient,\n getClients,\n type ClientMap,\n} from '../../../../replicache/src/persist/clients.ts';\nimport type {ReplicacheImpl} from '../../../../replicache/src/replicache-impl.ts';\nimport {withRead} from '../../../../replicache/src/with-transactions.ts';\nimport {assert} from '../../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../../shared/src/json.ts';\nimport {mapValues} from '../../../../shared/src/objects.ts';\nimport {TDigest, type ReadonlyTDigest} from '../../../../shared/src/tdigest.ts';\nimport * as valita from '../../../../shared/src/valita.ts';\nimport type {AnalyzeQueryResult} from '../../../../zero-protocol/src/analyze-query-result.ts';\nimport type {AST} from '../../../../zero-protocol/src/ast.ts';\nimport type {Row} from '../../../../zero-protocol/src/data.ts';\nimport {\n inspectAnalyzeQueryDownSchema,\n inspectAuthenticatedDownSchema,\n inspectMetricsDownSchema,\n inspectQueriesDownSchema,\n inspectVersionDownSchema,\n type InspectDownBody,\n type InspectQueryRow,\n type ServerMetrics as ServerMetricsJSON,\n} from '../../../../zero-protocol/src/inspect-down.ts';\nimport type {\n AnalyzeQueryOptions,\n InspectUpBody,\n} from '../../../../zero-protocol/src/inspect-up.ts';\nimport type {\n ClientMetricMap,\n ServerMetricMap,\n} from '../../../../zql/src/query/metrics-delegate.ts';\nimport type {QueryDelegate} from '../../../../zql/src/query/query-delegate.ts';\nimport type {AnyQuery} from '../../../../zql/src/query/query.ts';\nimport {nanoid} from '../../util/nanoid.ts';\nimport {ENTITIES_KEY_PREFIX} from '../keys.ts';\nimport type {MutatorDefs} from '../replicache-types.ts';\nimport {Client} from './client.ts';\nimport {createHTMLPasswordPrompt} from './html-dialog-prompt.ts';\nimport {type Lazy} from './inspector.ts';\nimport {Query} from './query.ts';\n\nexport type GetWebSocket = () => Promise<WebSocket>;\n\nexport type Metrics = {\n readonly [K in keyof (ClientMetricMap & ServerMetricMap)]: ReadonlyTDigest;\n};\n\ntype DistributiveOmit<T, K extends string> = T extends object\n ? Omit<T, K>\n : never;\n\nexport async function rpc<T extends InspectDownBody>(\n socket: WebSocket,\n arg: DistributiveOmit<InspectUpBody, 'id'>,\n downSchema: valita.Type<T>,\n): Promise<T['value']> {\n try {\n return await rpcNoAuthTry(socket, arg, downSchema);\n } catch (e) {\n if (e instanceof UnauthenticatedError) {\n const password = await createHTMLPasswordPrompt('Enter password:');\n if (password) {\n // Do authenticate rpc\n const authRes = await rpcNoAuthTry(\n socket,\n {op: 'authenticate', value: password},\n inspectAuthenticatedDownSchema,\n );\n if (authRes) {\n // If authentication is successful, retry the original RPC\n return rpcNoAuthTry(socket, arg, downSchema);\n }\n }\n throw new Error('Authentication failed');\n }\n throw e;\n }\n}\n\nfunction rpcNoAuthTry<T extends InspectDownBody>(\n socket: WebSocket,\n arg: DistributiveOmit<InspectUpBody, 'id'>,\n downSchema: valita.Type<T>,\n): Promise<T['value']> {\n return new Promise((resolve, reject) => {\n const id = nanoid();\n const f = (ev: MessageEvent) => {\n const msg = JSON.parse(ev.data);\n if (msg[0] === 'inspect') {\n const body = msg[1];\n if (body.id !== id) {\n return;\n }\n const res = valita.test(body, downSchema);\n if (res.ok) {\n if (res.value.op === 'error') {\n reject(new Error(res.value.value));\n } else {\n resolve(res.value.value);\n }\n } else {\n // Check if we got un authenticated/false response\n const authRes = valita.test(body, inspectAuthenticatedDownSchema);\n if (authRes.ok) {\n // Handle authenticated response\n assert(\n authRes.value.value === false,\n 'Expected unauthenticated response',\n );\n reject(new UnauthenticatedError());\n }\n\n reject(res.error);\n }\n socket.removeEventListener('message', f);\n }\n };\n socket.addEventListener('message', f);\n socket.send(JSON.stringify(['inspect', {...arg, id}]));\n });\n} // T extends forces T to be resolved\n\nexport function mergeMetrics(\n clientMetrics: ClientMetrics | undefined,\n serverMetrics: ServerMetricsJSON | null | undefined,\n): ClientMetrics & ServerMetrics {\n return {\n ...(clientMetrics ?? newClientMetrics()),\n ...(serverMetrics\n ? convertServerMetrics(serverMetrics)\n : newServerMetrics()),\n };\n}\n\nfunction newClientMetrics(): ClientMetrics {\n return {\n 'query-materialization-client': new TDigest(),\n 'query-materialization-end-to-end': new TDigest(),\n 'query-update-client': new TDigest(),\n };\n}\n\nfunction newServerMetrics(): ServerMetrics {\n return {\n 'query-materialization-server': new TDigest(),\n 'query-update-server': new TDigest(),\n };\n}\n\nfunction convertServerMetrics(metrics: ServerMetricsJSON): ServerMetrics {\n return mapValues(metrics, v => TDigest.fromJSON(v));\n}\n\nexport async function inspectorMetrics(\n delegate: ExtendedInspectorDelegate,\n): Promise<Metrics> {\n const clientMetrics = delegate.metrics;\n const serverMetricsJSON = await rpc(\n await delegate.getSocket(),\n {op: 'metrics'},\n inspectMetricsDownSchema,\n );\n return mergeMetrics(clientMetrics, serverMetricsJSON);\n}\n\nexport function inspectorClients(\n delegate: ExtendedInspectorDelegate,\n): Promise<Client[]> {\n return withDagRead(delegate, dagRead => clients(delegate, dagRead));\n}\n\nexport function inspectorClientsWithQueries(\n delegate: ExtendedInspectorDelegate,\n): Promise<Client[]> {\n return withDagRead(delegate, dagRead =>\n clientsWithQueries(delegate, dagRead),\n );\n}\n\nasync function withDagRead<T>(\n delegate: ExtendedInspectorDelegate,\n f: (dagRead: Read) => Promise<T>,\n): Promise<T> {\n const {rep} = delegate;\n await rep.refresh();\n await rep.persist();\n return withRead(rep.perdag, f);\n}\n\nasync function getBTree(dagRead: Read, clientID: string): Promise<BTreeRead> {\n const client = await getClient(clientID, dagRead);\n assert(client, `Client not found: ${clientID}`);\n const {clientGroupID} = client;\n const clientGroup = await getClientGroup(clientGroupID, dagRead);\n assert(clientGroup, `Client group not found: ${clientGroupID}`);\n const dbRead = await readFromHash(\n clientGroup.headHash,\n dagRead,\n FormatVersion.Latest,\n );\n return dbRead.map;\n}\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\ntype MapEntry<T extends ReadonlyMap<any, any>> =\n T extends ReadonlyMap<infer K, infer V> ? readonly [K, V] : never;\n\nasync function clients(\n delegate: ExtendedInspectorDelegate,\n dagRead: Read,\n predicate: (entry: MapEntry<ClientMap>) => boolean = () => true,\n): Promise<Client[]> {\n const clients = await getClients(dagRead);\n return [...clients.entries()]\n .filter(predicate)\n .map(\n ([clientID, {clientGroupID}]) =>\n new Client(delegate, clientID, clientGroupID),\n );\n}\n\nasync function clientsWithQueries(\n delegate: ExtendedInspectorDelegate,\n dagRead: Read,\n predicate: (entry: MapEntry<ClientMap>) => boolean = () => true,\n): Promise<Client[]> {\n const allClients = await clients(delegate, dagRead, predicate);\n const clientsWithQueries: Client[] = [];\n await Promise.all(\n allClients.map(async client => {\n const queries = await client.queries();\n if (queries.length > 0) {\n clientsWithQueries.push(client);\n }\n }),\n );\n return clientsWithQueries;\n}\n\nexport async function clientGroupClients(\n delegate: ExtendedInspectorDelegate,\n clientGroupID: Promise<string> | string,\n): Promise<Client[]> {\n const id = await clientGroupID;\n return withDagRead(delegate, dagRead =>\n clients(delegate, dagRead, ([_, v]) => v.clientGroupID === id),\n );\n}\n\nexport async function clientGroupClientsWithQueries(\n delegate: ExtendedInspectorDelegate,\n clientGroupID: Promise<string> | string,\n): Promise<Client[]> {\n const id = await clientGroupID;\n return withDagRead(delegate, dagRead =>\n clientsWithQueries(delegate, dagRead, ([_, v]) => v.clientGroupID === id),\n );\n}\n\nexport async function clientGroupQueries(\n delegate: ExtendedInspectorDelegate,\n): Promise<Query[]> {\n const rows: InspectQueryRow[] = await rpc(\n await delegate.getSocket(),\n {op: 'queries'},\n inspectQueriesDownSchema,\n );\n return rows.map(row => new Query(row, delegate, delegate.getSocket));\n}\n\nexport function clientMap(\n delegate: ExtendedInspectorDelegate,\n clientID: string,\n): Promise<Map<string, ReadonlyJSONValue>> {\n return withDagRead(delegate, async dagRead => {\n const tree = await getBTree(dagRead, clientID);\n const map = new Map<string, ReadonlyJSONValue>();\n for await (const [key, value] of tree.scan('')) {\n map.set(key, value);\n }\n return map;\n });\n}\n\nexport function clientRows(\n delegate: ExtendedInspectorDelegate,\n clientID: string,\n tableName: string,\n): Promise<Row[]> {\n return withDagRead(delegate, async dagRead => {\n const prefix = ENTITIES_KEY_PREFIX + tableName + '/';\n const tree = await getBTree(dagRead, clientID);\n const rows: Row[] = [];\n for await (const [key, value] of tree.scan(prefix)) {\n if (!key.startsWith(prefix)) {\n break;\n }\n rows.push(value as Row);\n }\n return rows;\n });\n}\n\nexport async function serverVersion(\n delegate: ExtendedInspectorDelegate,\n): Promise<string> {\n return rpc(\n await delegate.getSocket(),\n {op: 'version'},\n inspectVersionDownSchema,\n );\n}\n\nexport async function clientQueries(\n delegate: ExtendedInspectorDelegate,\n clientID: string,\n): Promise<Query[]> {\n const rows: InspectQueryRow[] = await rpc(\n await delegate.getSocket(),\n {op: 'queries', clientID},\n inspectQueriesDownSchema,\n );\n return rows.map(row => new Query(row, delegate, delegate.getSocket));\n}\n\nexport async function analyzeQuery(\n delegate: ExtendedInspectorDelegate,\n query: AnyQuery,\n options?: AnalyzeQueryOptions,\n): Promise<AnalyzeQueryResult> {\n const qi = delegate.queryDelegate.withContext(query);\n const {customQueryID} = qi;\n const queryParameters = customQueryID\n ? {name: customQueryID.name, args: customQueryID.args}\n : {ast: delegate.mapClientASTToServer(qi.ast)};\n\n return rpc(\n await delegate.getSocket(),\n {\n op: 'analyze-query',\n ...queryParameters,\n options,\n },\n inspectAnalyzeQueryDownSchema,\n );\n}\n\nclass UnauthenticatedError extends Error {}\n\nexport interface InspectorDelegate {\n getQueryMetrics(hash: string): ClientMetrics | undefined;\n getAST(queryID: string): AST | undefined;\n readonly metrics: ClientMetrics;\n mapClientASTToServer(ast: AST): AST;\n}\n\nexport interface ExtendedInspectorDelegate extends InspectorDelegate {\n readonly rep: Rep;\n readonly getSocket: () => Promise<WebSocket>;\n readonly queryDelegate: QueryDelegate<unknown>;\n lazy: Promise<Lazy>;\n}\n\nexport type Rep = ReplicacheImpl<MutatorDefs>;\n\nexport type ClientMetrics = {\n readonly [K in keyof ClientMetricMap]: ReadonlyTDigest;\n};\n\nexport type ServerMetrics = {\n readonly [K in keyof ServerMetricMap]: ReadonlyTDigest;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["percentile", "clients", "clientsWithQueries"]
7
+ }
package/out/op-sqlite.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  SQLiteStore,
3
3
  dropStore
4
- } from "./chunk-ECUMGQGC.js";
5
- import "./chunk-ASRS2LFV.js";
6
- import "./chunk-EZM3XBAB.js";
4
+ } from "./chunk-RYFBHAD4.js";
5
+ import "./chunk-HYS7YLNL.js";
6
+ import "./chunk-U2KJIWVC.js";
7
7
  import "./chunk-424PT5DM.js";
8
8
 
9
9
  // ../replicache/src/kv/op-sqlite/types.ts
@@ -1,14 +1,14 @@
1
1
  import "./chunk-AFADJQ2O.js";
2
2
  import {
3
3
  expoSQLiteStoreProvider
4
- } from "./chunk-ZZXMKAAG.js";
4
+ } from "./chunk-5H7WNLPK.js";
5
5
  import {
6
6
  SQLiteStore,
7
7
  clearAllNamedStoresForTesting,
8
8
  dropStore
9
- } from "./chunk-ECUMGQGC.js";
10
- import "./chunk-ASRS2LFV.js";
11
- import "./chunk-EZM3XBAB.js";
9
+ } from "./chunk-RYFBHAD4.js";
10
+ import "./chunk-HYS7YLNL.js";
11
+ import "./chunk-U2KJIWVC.js";
12
12
  import "./chunk-424PT5DM.js";
13
13
 
14
14
  // src/react-native.ts
package/out/react.js CHANGED
@@ -3,21 +3,23 @@ import {
3
3
  } from "./chunk-VZOYWIRW.js";
4
4
  import {
5
5
  Zero,
6
+ bindingsForZero,
6
7
  connection_status_enum_exports
7
- } from "./chunk-COKJ5W7V.js";
8
- import "./chunk-ASRS2LFV.js";
8
+ } from "./chunk-IWL6EEA6.js";
9
+ import "./chunk-HYS7YLNL.js";
9
10
  import {
10
- DEFAULT_TTL_MS
11
- } from "./chunk-TJFNGO7E.js";
11
+ DEFAULT_TTL_MS,
12
+ stringCompare
13
+ } from "./chunk-JKP7HDC6.js";
12
14
  import {
13
15
  hasOwn
14
- } from "./chunk-EZM3XBAB.js";
16
+ } from "./chunk-U2KJIWVC.js";
15
17
  import "./chunk-424PT5DM.js";
16
18
 
17
19
  // ../zero-react/src/components/zero-inspector.tsx
18
20
  import { lazy, Suspense, useState } from "react";
19
21
  import { jsx } from "react/jsx-runtime";
20
- var Inspector = lazy(() => import("./inspector-IU2HG74I.js"));
22
+ var Inspector = lazy(() => import("./inspector-GP3CBZRU.js"));
21
23
  function ZeroInspector({ zero }) {
22
24
  const [show, setShow] = useState(false);
23
25
  return show ? /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx("div", { children: "Loading Inspector..." }), children: /* @__PURE__ */ jsx(
@@ -122,7 +124,7 @@ function useZero() {
122
124
  function createUseZero() {
123
125
  return () => useZero();
124
126
  }
125
- var NO_AUTH_SET = Symbol("NO_AUTH_SET");
127
+ var NO_AUTH_SET = Symbol();
126
128
  function ZeroProvider({ children, init, ...props }) {
127
129
  const isExternalZero = "zero" in props;
128
130
  const [zero, setZero] = useState2(
@@ -131,7 +133,7 @@ function ZeroProvider({ children, init, ...props }) {
131
133
  const auth = "auth" in props ? props.auth : NO_AUTH_SET;
132
134
  const prevAuthRef = useRef(auth);
133
135
  const keysWithoutAuth = useMemo(
134
- () => Object.entries(props).filter(([key]) => key !== "auth").sort(([a], [b]) => a.localeCompare(b)).map(([_, value]) => value),
136
+ () => Object.entries(props).filter(([key]) => key !== "auth").sort(([a], [b]) => stringCompare(a, b)).map(([_, value]) => value),
135
137
  [props]
136
138
  );
137
139
  useEffect(() => {
@@ -173,12 +175,7 @@ function useQuery(query, options) {
173
175
  } else if (options) {
174
176
  ({ enabled = true, ttl = DEFAULT_TTL_MS } = options);
175
177
  }
176
- const view = viewStore.getView(
177
- useZero(),
178
- query,
179
- enabled,
180
- ttl
181
- );
178
+ const view = viewStore.getView(useZero(), query, enabled, ttl);
182
179
  return useSyncExternalStore(
183
180
  view.subscribeReactInternals,
184
181
  view.getSnapshot,
@@ -198,12 +195,7 @@ function useSuspenseQuery(query, options) {
198
195
  suspendUntil = "complete"
199
196
  } = options);
200
197
  }
201
- const view = viewStore.getView(
202
- useZero(),
203
- query,
204
- enabled,
205
- ttl
206
- );
198
+ const view = viewStore.getView(useZero(), query, enabled, ttl);
207
199
  const snapshot = useSyncExternalStore(
208
200
  view.subscribeReactInternals,
209
201
  view.getSnapshot,
@@ -308,7 +300,8 @@ var ViewStore = class {
308
300
  }
309
301
  }
310
302
  getView(zero, query, enabled, ttl) {
311
- const { format } = query;
303
+ const bindings = bindingsForZero(zero);
304
+ const format = bindings.format(query);
312
305
  if (!enabled) {
313
306
  return {
314
307
  getSnapshot: () => getDefaultSnapshot(format.singular),
@@ -321,10 +314,10 @@ var ViewStore = class {
321
314
  nonEmpty: false
322
315
  };
323
316
  }
324
- const hash = query.hash() + zero.clientID;
317
+ const hash = bindings.hash(query) + zero.clientID;
325
318
  let existing = this.#views.get(hash);
326
319
  if (!existing) {
327
- existing = new ViewWrapper(zero, query, format, ttl, (view) => {
320
+ existing = new ViewWrapper(bindings, query, format, ttl, (view) => {
328
321
  const currentView = this.#views.get(hash);
329
322
  if (currentView && currentView !== view) {
330
323
  return;
@@ -340,7 +333,6 @@ var ViewStore = class {
340
333
  };
341
334
  var viewStore = new ViewStore();
342
335
  var ViewWrapper = class {
343
- #zero;
344
336
  #view;
345
337
  #onDematerialized;
346
338
  #query;
@@ -352,8 +344,9 @@ var ViewWrapper = class {
352
344
  #completeResolver = resolver();
353
345
  #nonEmpty = false;
354
346
  #nonEmptyResolver = resolver();
355
- constructor(zero, query, format, ttl, onDematerialized) {
356
- this.#zero = zero;
347
+ #bindings;
348
+ constructor(bindings, query, format, ttl, onDematerialized) {
349
+ this.#bindings = bindings;
357
350
  this.#query = query;
358
351
  this.#format = format;
359
352
  this.#ttl = ttl;
@@ -398,7 +391,9 @@ var ViewWrapper = class {
398
391
  if (this.#view) {
399
392
  return;
400
393
  }
401
- this.#view = this.#zero.materialize(this.#query, { ttl: this.#ttl });
394
+ this.#view = this.#bindings.materialize(this.#query, void 0, {
395
+ ttl: this.#ttl
396
+ });
402
397
  this.#view.addListener(this.#onData);
403
398
  };
404
399
  getSnapshot = () => this.#snapshot;