@rocicorp/zero 0.25.0-canary.8 → 0.25.0-canary.9

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 (272) hide show
  1. package/out/shared/src/deep-merge.d.ts +20 -3
  2. package/out/shared/src/deep-merge.d.ts.map +1 -1
  3. package/out/shared/src/deep-merge.js +27 -0
  4. package/out/shared/src/deep-merge.js.map +1 -0
  5. package/out/shared/src/logging.d.ts.map +1 -1
  6. package/out/shared/src/logging.js +25 -9
  7. package/out/shared/src/logging.js.map +1 -1
  8. package/out/shared/src/object-traversal.d.ts +19 -0
  9. package/out/shared/src/object-traversal.d.ts.map +1 -0
  10. package/out/shared/src/object-traversal.js +27 -0
  11. package/out/shared/src/object-traversal.js.map +1 -0
  12. package/out/zero/package.json.js +1 -1
  13. package/out/zero/src/pg.js +0 -2
  14. package/out/zero/src/pg.js.map +1 -1
  15. package/out/zero/src/server.js +0 -2
  16. package/out/zero/src/server.js.map +1 -1
  17. package/out/zero/src/zero.js +19 -3
  18. package/out/zero/src/zero.js.map +1 -1
  19. package/out/zero-cache/src/auth/jwt.d.ts +3 -0
  20. package/out/zero-cache/src/auth/jwt.d.ts.map +1 -1
  21. package/out/zero-cache/src/auth/jwt.js.map +1 -1
  22. package/out/zero-cache/src/auth/write-authorizer.d.ts +2 -1
  23. package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
  24. package/out/zero-cache/src/auth/write-authorizer.js +1 -11
  25. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  26. package/out/zero-cache/src/config/zero-config.d.ts +27 -0
  27. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  28. package/out/zero-cache/src/config/zero-config.js +35 -7
  29. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  30. package/out/zero-cache/src/custom/fetch.d.ts +5 -5
  31. package/out/zero-cache/src/custom/fetch.d.ts.map +1 -1
  32. package/out/zero-cache/src/custom/fetch.js +14 -11
  33. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  34. package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +1 -1
  35. package/out/zero-cache/src/custom-queries/transform-query.js +2 -4
  36. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  37. package/out/zero-cache/src/db/specs.d.ts +1 -1
  38. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  39. package/out/zero-cache/src/server/change-streamer.js +9 -9
  40. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  41. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  42. package/out/zero-cache/src/server/syncer.js +20 -8
  43. package/out/zero-cache/src/server/syncer.js.map +1 -1
  44. package/out/zero-cache/src/services/analyze.d.ts +1 -1
  45. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  46. package/out/zero-cache/src/services/analyze.js +10 -1
  47. package/out/zero-cache/src/services/analyze.js.map +1 -1
  48. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +5 -5
  49. package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts +2 -2
  50. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +1 -1
  51. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +11 -2
  52. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  53. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +36 -0
  54. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  55. package/out/zero-cache/src/services/http-service.d.ts +5 -4
  56. package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
  57. package/out/zero-cache/src/services/http-service.js +15 -10
  58. package/out/zero-cache/src/services/http-service.js.map +1 -1
  59. package/out/zero-cache/src/services/mutagen/mutagen.d.ts +2 -1
  60. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  61. package/out/zero-cache/src/services/mutagen/mutagen.js +3 -2
  62. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  63. package/out/zero-cache/src/services/mutagen/pusher.d.ts +198 -0
  64. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
  65. package/out/zero-cache/src/services/mutagen/pusher.js +5 -5
  66. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  67. package/out/zero-cache/src/services/run-ast.d.ts +4 -0
  68. package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
  69. package/out/zero-cache/src/services/run-ast.js +8 -1
  70. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  71. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +1 -1
  72. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +2 -1
  73. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  74. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  75. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +15 -8
  76. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  77. package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +4 -4
  78. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  79. package/out/zero-cache/src/services/view-syncer/view-syncer.js +48 -25
  80. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  81. package/out/zero-cache/src/workers/connection.js +20 -15
  82. package/out/zero-cache/src/workers/connection.js.map +1 -1
  83. package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
  84. package/out/zero-cache/src/workers/syncer.js +3 -3
  85. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  86. package/out/zero-client/src/client/bindings.d.ts +4 -4
  87. package/out/zero-client/src/client/bindings.d.ts.map +1 -1
  88. package/out/zero-client/src/client/bindings.js.map +1 -1
  89. package/out/zero-client/src/client/connection.d.ts +1 -1
  90. package/out/zero-client/src/client/connection.d.ts.map +1 -1
  91. package/out/zero-client/src/client/connection.js +1 -1
  92. package/out/zero-client/src/client/connection.js.map +1 -1
  93. package/out/zero-client/src/client/crud.d.ts +7 -5
  94. package/out/zero-client/src/client/crud.d.ts.map +1 -1
  95. package/out/zero-client/src/client/crud.js +7 -7
  96. package/out/zero-client/src/client/crud.js.map +1 -1
  97. package/out/zero-client/src/client/custom.d.ts +7 -5
  98. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  99. package/out/zero-client/src/client/custom.js +12 -7
  100. package/out/zero-client/src/client/custom.js.map +1 -1
  101. package/out/zero-client/src/client/inspector/inspector.d.ts +5 -1
  102. package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
  103. package/out/zero-client/src/client/inspector/inspector.js +7 -0
  104. package/out/zero-client/src/client/inspector/inspector.js.map +1 -1
  105. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts.map +1 -1
  106. package/out/zero-client/src/client/inspector/lazy-inspector.js +13 -13
  107. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
  108. package/out/zero-client/src/client/make-mutate-property.d.ts +43 -0
  109. package/out/zero-client/src/client/make-mutate-property.d.ts.map +1 -0
  110. package/out/zero-client/src/client/make-mutate-property.js +38 -0
  111. package/out/zero-client/src/client/make-mutate-property.js.map +1 -0
  112. package/out/zero-client/src/client/make-replicache-mutators.d.ts +34 -0
  113. package/out/zero-client/src/client/make-replicache-mutators.d.ts.map +1 -0
  114. package/out/zero-client/src/client/make-replicache-mutators.js +103 -0
  115. package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -0
  116. package/out/zero-client/src/client/options.d.ts +39 -27
  117. package/out/zero-client/src/client/options.d.ts.map +1 -1
  118. package/out/zero-client/src/client/options.js.map +1 -1
  119. package/out/zero-client/src/client/version.js +1 -1
  120. package/out/zero-client/src/client/zero.d.ts +23 -33
  121. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  122. package/out/zero-client/src/client/zero.js +52 -118
  123. package/out/zero-client/src/client/zero.js.map +1 -1
  124. package/out/zero-client/src/mod.d.ts +12 -7
  125. package/out/zero-client/src/mod.d.ts.map +1 -1
  126. package/out/zero-protocol/src/analyze-query-result.d.ts +236 -0
  127. package/out/zero-protocol/src/analyze-query-result.d.ts.map +1 -1
  128. package/out/zero-protocol/src/analyze-query-result.js +128 -2
  129. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  130. package/out/zero-protocol/src/ast.d.ts +1 -1
  131. package/out/zero-protocol/src/connect.d.ts.map +1 -1
  132. package/out/zero-protocol/src/connect.js +4 -0
  133. package/out/zero-protocol/src/connect.js.map +1 -1
  134. package/out/zero-protocol/src/custom-queries.d.ts +1 -1
  135. package/out/zero-protocol/src/down.d.ts +99 -0
  136. package/out/zero-protocol/src/down.d.ts.map +1 -1
  137. package/out/zero-protocol/src/error.d.ts +4 -4
  138. package/out/zero-protocol/src/inspect-down.d.ts +297 -0
  139. package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
  140. package/out/zero-protocol/src/inspect-up.d.ts +4 -0
  141. package/out/zero-protocol/src/inspect-up.d.ts.map +1 -1
  142. package/out/zero-protocol/src/inspect-up.js +2 -1
  143. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  144. package/out/zero-protocol/src/protocol-version.d.ts +1 -1
  145. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  146. package/out/zero-protocol/src/protocol-version.js +1 -1
  147. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  148. package/out/zero-protocol/src/push.d.ts +1 -1
  149. package/out/zero-protocol/src/up.d.ts +1 -0
  150. package/out/zero-protocol/src/up.d.ts.map +1 -1
  151. package/out/zero-react/src/components/inspector.d.ts +3 -2
  152. package/out/zero-react/src/components/inspector.d.ts.map +1 -1
  153. package/out/zero-react/src/components/inspector.js.map +1 -1
  154. package/out/zero-react/src/components/zero-inspector.d.ts +3 -2
  155. package/out/zero-react/src/components/zero-inspector.d.ts.map +1 -1
  156. package/out/zero-react/src/components/zero-inspector.js.map +1 -1
  157. package/out/zero-react/src/use-query.d.ts +5 -4
  158. package/out/zero-react/src/use-query.d.ts.map +1 -1
  159. package/out/zero-react/src/use-query.js +4 -3
  160. package/out/zero-react/src/use-query.js.map +1 -1
  161. package/out/zero-react/src/zero-provider.d.ts +7 -7
  162. package/out/zero-react/src/zero-provider.d.ts.map +1 -1
  163. package/out/zero-react/src/zero-provider.js.map +1 -1
  164. package/out/zero-schema/src/builder/schema-builder.js +1 -1
  165. package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
  166. package/out/zero-server/src/custom.d.ts +4 -5
  167. package/out/zero-server/src/custom.d.ts.map +1 -1
  168. package/out/zero-server/src/custom.js.map +1 -1
  169. package/out/zero-server/src/mod.d.ts +0 -1
  170. package/out/zero-server/src/mod.d.ts.map +1 -1
  171. package/out/zero-server/src/process-mutations.d.ts +9 -14
  172. package/out/zero-server/src/process-mutations.d.ts.map +1 -1
  173. package/out/zero-server/src/process-mutations.js +151 -105
  174. package/out/zero-server/src/process-mutations.js.map +1 -1
  175. package/out/zero-server/src/push-processor.d.ts +5 -3
  176. package/out/zero-server/src/push-processor.d.ts.map +1 -1
  177. package/out/zero-server/src/push-processor.js +17 -25
  178. package/out/zero-server/src/push-processor.js.map +1 -1
  179. package/out/zero-server/src/queries/process-queries.js +1 -1
  180. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  181. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  182. package/out/zero-server/src/zql-database.js +1 -1
  183. package/out/zero-server/src/zql-database.js.map +1 -1
  184. package/out/zero-solid/src/use-query.d.ts +3 -3
  185. package/out/zero-solid/src/use-query.d.ts.map +1 -1
  186. package/out/zero-solid/src/use-query.js +27 -38
  187. package/out/zero-solid/src/use-query.js.map +1 -1
  188. package/out/zero-solid/src/use-zero-connection-state.d.ts.map +1 -1
  189. package/out/zero-solid/src/use-zero-connection-state.js +7 -5
  190. package/out/zero-solid/src/use-zero-connection-state.js.map +1 -1
  191. package/out/zero-solid/src/use-zero-online.d.ts.map +1 -1
  192. package/out/zero-solid/src/use-zero-online.js +7 -5
  193. package/out/zero-solid/src/use-zero-online.js.map +1 -1
  194. package/out/zero-solid/src/use-zero.d.ts +6 -5
  195. package/out/zero-solid/src/use-zero.d.ts.map +1 -1
  196. package/out/zero-solid/src/use-zero.js +2 -6
  197. package/out/zero-solid/src/use-zero.js.map +1 -1
  198. package/out/zql/src/builder/builder.d.ts +2 -1
  199. package/out/zql/src/builder/builder.d.ts.map +1 -1
  200. package/out/zql/src/builder/builder.js +4 -3
  201. package/out/zql/src/builder/builder.js.map +1 -1
  202. package/out/zql/src/mutate/custom.d.ts +15 -6
  203. package/out/zql/src/mutate/custom.d.ts.map +1 -1
  204. package/out/zql/src/mutate/custom.js +6 -6
  205. package/out/zql/src/mutate/custom.js.map +1 -1
  206. package/out/zql/src/mutate/mutator-registry.d.ts +142 -0
  207. package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -0
  208. package/out/zql/src/mutate/mutator-registry.js +97 -0
  209. package/out/zql/src/mutate/mutator-registry.js.map +1 -0
  210. package/out/zql/src/mutate/mutator.d.ts +98 -0
  211. package/out/zql/src/mutate/mutator.d.ts.map +1 -0
  212. package/out/zql/src/mutate/mutator.js +35 -0
  213. package/out/zql/src/mutate/mutator.js.map +1 -0
  214. package/out/zql/src/planner/planner-connection.d.ts +7 -15
  215. package/out/zql/src/planner/planner-connection.d.ts.map +1 -1
  216. package/out/zql/src/planner/planner-connection.js +30 -24
  217. package/out/zql/src/planner/planner-connection.js.map +1 -1
  218. package/out/zql/src/planner/planner-debug.d.ts +37 -43
  219. package/out/zql/src/planner/planner-debug.d.ts.map +1 -1
  220. package/out/zql/src/planner/planner-debug.js +242 -0
  221. package/out/zql/src/planner/planner-debug.js.map +1 -0
  222. package/out/zql/src/planner/planner-fan-in.d.ts.map +1 -1
  223. package/out/zql/src/planner/planner-fan-in.js +11 -8
  224. package/out/zql/src/planner/planner-fan-in.js.map +1 -1
  225. package/out/zql/src/planner/planner-fan-out.d.ts.map +1 -1
  226. package/out/zql/src/planner/planner-fan-out.js +11 -8
  227. package/out/zql/src/planner/planner-fan-out.js.map +1 -1
  228. package/out/zql/src/planner/planner-graph.d.ts.map +1 -1
  229. package/out/zql/src/planner/planner-graph.js +13 -5
  230. package/out/zql/src/planner/planner-graph.js.map +1 -1
  231. package/out/zql/src/planner/planner-join.d.ts.map +1 -1
  232. package/out/zql/src/planner/planner-join.js +12 -9
  233. package/out/zql/src/planner/planner-join.js.map +1 -1
  234. package/out/zql/src/planner/planner-node.d.ts +4 -0
  235. package/out/zql/src/planner/planner-node.d.ts.map +1 -1
  236. package/out/zql/src/planner/planner-node.js +8 -0
  237. package/out/zql/src/planner/planner-node.js.map +1 -0
  238. package/out/zql/src/query/create-builder.d.ts +7 -0
  239. package/out/zql/src/query/create-builder.d.ts.map +1 -0
  240. package/out/zql/src/query/create-builder.js +44 -0
  241. package/out/zql/src/query/create-builder.js.map +1 -0
  242. package/out/zql/src/query/named.d.ts +1 -7
  243. package/out/zql/src/query/named.d.ts.map +1 -1
  244. package/out/zql/src/query/named.js +0 -21
  245. package/out/zql/src/query/named.js.map +1 -1
  246. package/out/zql/src/query/query-impl.d.ts +4 -3
  247. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  248. package/out/zql/src/query/query-impl.js +3 -0
  249. package/out/zql/src/query/query-impl.js.map +1 -1
  250. package/out/zql/src/query/query-internals.js +0 -4
  251. package/out/zql/src/query/query-internals.js.map +1 -1
  252. package/out/zql/src/query/query-registry.d.ts +253 -0
  253. package/out/zql/src/query/query-registry.d.ts.map +1 -0
  254. package/out/zql/src/query/query-registry.js +131 -0
  255. package/out/zql/src/query/query-registry.js.map +1 -0
  256. package/out/zql/src/query/query.d.ts +16 -1
  257. package/out/zql/src/query/query.d.ts.map +1 -1
  258. package/out/zql/src/query/schema-query.d.ts +6 -0
  259. package/out/zql/src/query/schema-query.d.ts.map +1 -0
  260. package/out/zql/src/query/validate-input.js +12 -13
  261. package/out/zql/src/query/validate-input.js.map +1 -1
  262. package/package.json +2 -1
  263. package/out/zero-server/src/query-registry.d.ts +0 -10
  264. package/out/zero-server/src/query-registry.d.ts.map +0 -1
  265. package/out/zero-server/src/query-registry.js +0 -35
  266. package/out/zero-server/src/query-registry.js.map +0 -1
  267. package/out/zql/src/query/define-query.d.ts +0 -75
  268. package/out/zql/src/query/define-query.d.ts.map +0 -1
  269. package/out/zql/src/query/define-query.js +0 -47
  270. package/out/zql/src/query/define-query.js.map +0 -1
  271. package/out/zql/src/query/query-definitions.d.ts +0 -32
  272. package/out/zql/src/query/query-definitions.d.ts.map +0 -1
@@ -8,7 +8,7 @@ import { stringify } from "../../../../shared/src/bigint-json.js";
8
8
  import { CustomKeyMap } from "../../../../shared/src/custom-key-map.js";
9
9
  import { must } from "../../../../shared/src/must.js";
10
10
  import { randInt } from "../../../../shared/src/rand.js";
11
- import { Rehome, ClientNotFound, TransformFailed, Unauthorized, InvalidConnectionRequestBaseCookie } from "../../../../zero-protocol/src/error-kind-enum.js";
11
+ import { Rehome, ClientNotFound, InvalidConnectionRequest, TransformFailed, Unauthorized, InvalidConnectionRequestBaseCookie } from "../../../../zero-protocol/src/error-kind-enum.js";
12
12
  import { ZeroCache } from "../../../../zero-protocol/src/error-origin-enum.js";
13
13
  import { ProtocolError } from "../../../../zero-protocol/src/error.js";
14
14
  import { clampTTL, MAX_TTL_MS } from "../../../../zql/src/query/ttl.js";
@@ -156,11 +156,11 @@ class ViewSyncerService {
156
156
  #inspectorDelegate;
157
157
  #config;
158
158
  constructor(config, lc, shard, taskID, clientGroupID, cvrDb, upstreamDb, pipelineDriver, versionChanges, drainCoordinator, slowHydrateThreshold, inspectorDelegate, customQueryTransformer, keepaliveMs = DEFAULT_KEEPALIVE_MS, setTimeoutFn = setTimeout.bind(globalThis)) {
159
- const { getQueries: pullConfig } = config;
159
+ const queryConfig = config.query?.url ? config.query : config.getQueries;
160
160
  this.#config = config;
161
161
  this.id = clientGroupID;
162
162
  this.#shard = shard;
163
- this.#queryConfig = pullConfig;
163
+ this.#queryConfig = queryConfig;
164
164
  this.#lc = lc;
165
165
  this.#pipelines = pipelineDriver;
166
166
  this.#stateChanges = versionChanges;
@@ -249,8 +249,12 @@ class ViewSyncerService {
249
249
  }
250
250
  assert(state === "version-ready", "state should be version-ready");
251
251
  await this.#runInLockWithCVR(async (lc, cvr) => {
252
+ const clientSchema = must(
253
+ cvr.clientSchema,
254
+ "cvr.clientSchema missing after initialization"
255
+ );
252
256
  if (!this.#pipelines.initialized()) {
253
- this.#pipelines.init(must(cvr.clientSchema));
257
+ this.#pipelines.init(clientSchema);
254
258
  }
255
259
  if (cvr.replicaVersion !== null && cvr.version.stateVersion !== "00" && this.#pipelines.replicaVersion < cvr.replicaVersion) {
256
260
  const message = `Cannot sync from older replica: CVR=${cvr.replicaVersion}, DB=${this.#pipelines.replicaVersion}`;
@@ -267,7 +271,7 @@ class ViewSyncerService {
267
271
  return;
268
272
  }
269
273
  lc.info?.(`resetting pipelines: ${result.message}`);
270
- this.#pipelines.reset(must(cvr.clientSchema));
274
+ this.#pipelines.reset(clientSchema);
271
275
  }
272
276
  const version2 = this.#pipelines.advanceWithoutDiff();
273
277
  const cvrVer = versionString(cvr.version);
@@ -286,11 +290,14 @@ class ViewSyncerService {
286
290
  }
287
291
  this.#cleanup();
288
292
  } catch (e) {
289
- this.#lc[getLogLevel(e)]?.(`stopping view-syncer: ${String(e)}`, e);
293
+ this.#lc[getLogLevel(e)]?.(
294
+ `stopping view-syncer ${this.id}: ${String(e)}`,
295
+ e
296
+ );
290
297
  this.#cleanup(e);
291
298
  } finally {
292
299
  await this.#cvrStore.flushed(this.#lc).catch((e) => this.#lc[getLogLevel(e)]?.(e));
293
- this.#lc.info?.("view-syncer stopped");
300
+ this.#lc.info?.(`view-syncer ${this.id} finished`);
294
301
  this.#stopped.resolve();
295
302
  }
296
303
  }
@@ -381,7 +388,6 @@ class ViewSyncerService {
381
388
  protocolVersion
382
389
  } = ctx;
383
390
  this.#authData = pickToken(this.#lc, this.#authData, tokenData);
384
- this.#initialized.resolve("initialized");
385
391
  this.#lc.debug?.(
386
392
  `Picked auth token: ${JSON.stringify(this.#authData?.decoded)}`
387
393
  );
@@ -391,7 +397,7 @@ class ViewSyncerService {
391
397
  this.userQueryURL = userQueryURL;
392
398
  } else {
393
399
  if (this.userQueryURL !== userQueryURL) {
394
- this.#lc.error?.(
400
+ this.#lc.warn?.(
395
401
  "Client provided different query parameters than client group",
396
402
  {
397
403
  clientID,
@@ -433,7 +439,17 @@ class ViewSyncerService {
433
439
  void this.#runInLockForClient(
434
440
  ctx,
435
441
  initConnectionMessage,
436
- this.#handleConfigUpdate,
442
+ async (lc2, clientID2, msg, cvr) => {
443
+ if (cvr.clientSchema === null && !msg.clientSchema) {
444
+ throw new ProtocolErrorWithLevel({
445
+ kind: InvalidConnectionRequest,
446
+ message: "The initConnection message for a new client group must include client schema.",
447
+ origin: ZeroCache
448
+ });
449
+ }
450
+ await this.#handleConfigUpdate(lc2, clientID2, msg, cvr);
451
+ this.#initialized.resolve("initialized");
452
+ },
437
453
  newClient
438
454
  ).catch((e) => newClient.fail(e));
439
455
  return downstream;
@@ -443,15 +459,11 @@ class ViewSyncerService {
443
459
  await this.#runInLockForClient(ctx, msg, this.#handleConfigUpdate);
444
460
  }
445
461
  async deleteClients(ctx, msg) {
446
- try {
447
- await this.#runInLockForClient(
448
- ctx,
449
- [msg[0], { deleted: msg[1] }],
450
- this.#handleConfigUpdate
451
- );
452
- } catch (e) {
453
- this.#lc.error?.("deleteClients failed", e);
454
- }
462
+ await this.#runInLockForClient(
463
+ ctx,
464
+ [msg[0], { deleted: msg[1] }],
465
+ this.#handleConfigUpdate
466
+ );
455
467
  }
456
468
  #getTTLClock(now) {
457
469
  const delta = now - this.#ttlClockBase;
@@ -729,8 +741,8 @@ class ViewSyncerService {
729
741
  }
730
742
  const transformedQueries = [];
731
743
  if (customQueries.size > 0 && !this.#customQueryTransformer) {
732
- lc.error?.(
733
- "Custom/named queries were requested but no `ZERO_GET_QUERIES_URL` is configured for Zero Cache."
744
+ lc.warn?.(
745
+ "Custom/named queries were requested but no `ZERO_QUERY_URL` is configured for Zero Cache."
734
746
  );
735
747
  }
736
748
  if (this.#customQueryTransformer && customQueries.size > 0) {
@@ -808,7 +820,7 @@ class ViewSyncerService {
808
820
  for (const q of transformedCustomQueries) {
809
821
  if ("error" in q) {
810
822
  const errorMessage = `Error transforming custom query ${q.name}: ${q.error}${q.details ? ` ${JSON.stringify(q.details)}` : ""}`;
811
- lc.error?.(errorMessage, q);
823
+ lc.warn?.(errorMessage, q);
812
824
  appQueryErrors.push(q);
813
825
  continue;
814
826
  }
@@ -907,8 +919,8 @@ class ViewSyncerService {
907
919
  });
908
920
  }
909
921
  if (customQueries.size > 0 && !this.#customQueryTransformer) {
910
- lc.error?.(
911
- "Custom/named queries were requested but no `ZERO_GET_QUERIES_URL` is configured for Zero Cache."
922
+ lc.warn?.(
923
+ "Custom/named queries were requested but no `ZERO_QUERY_URL` is configured for Zero Cache."
912
924
  );
913
925
  }
914
926
  let erroredQueryIDs;
@@ -1002,10 +1014,21 @@ class ViewSyncerService {
1002
1014
  );
1003
1015
  }
1004
1016
  if (erroredQueryIDs) {
1017
+ const successfulHashes = new Set(
1018
+ transformedQueries.map(
1019
+ ({ transformed }) => transformed.transformationHash
1020
+ )
1021
+ );
1005
1022
  for (const queryID of erroredQueryIDs) {
1023
+ let lastKnownHash;
1024
+ const cvrQuery = cvr.queries[queryID];
1025
+ if (cvrQuery?.transformationHash) {
1026
+ lastKnownHash = cvrQuery.transformationHash;
1027
+ }
1028
+ const transformationHash = lastKnownHash && successfulHashes.has(lastKnownHash) ? void 0 : lastKnownHash;
1006
1029
  removeQueries.push({
1007
1030
  id: queryID,
1008
- transformationHash: void 0
1031
+ transformationHash
1009
1032
  });
1010
1033
  }
1011
1034
  }