@rocicorp/zero 0.22.2025071101 → 0.22.2025072500

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 (189) hide show
  1. package/out/{chunk-4FQJO7OM.js → chunk-CPTFADYI.js} +26 -7
  2. package/out/{chunk-4FQJO7OM.js.map → chunk-CPTFADYI.js.map} +2 -2
  3. package/out/{chunk-INLOZBST.js → chunk-P5M53J4D.js} +2 -3
  4. package/out/{chunk-INLOZBST.js.map → chunk-P5M53J4D.js.map} +2 -2
  5. package/out/{chunk-5A6QECBY.js → chunk-ROYQ5GXF.js} +230 -137
  6. package/out/chunk-ROYQ5GXF.js.map +7 -0
  7. package/out/{inspector-HDOYOVMS.js → inspector-TFZBDN6K.js} +2 -2
  8. package/out/otel/src/enabled.d.ts +5 -0
  9. package/out/otel/src/enabled.d.ts.map +1 -0
  10. package/out/otel/src/enabled.js +16 -0
  11. package/out/otel/src/enabled.js.map +1 -0
  12. package/out/react.js +2 -2
  13. package/out/replicache/src/kv/idb-store.d.ts.map +1 -1
  14. package/out/shared/src/options.d.ts +4 -1
  15. package/out/shared/src/options.d.ts.map +1 -1
  16. package/out/shared/src/options.js +1 -1
  17. package/out/shared/src/options.js.map +1 -1
  18. package/out/solid.js +7 -3
  19. package/out/solid.js.map +1 -1
  20. package/out/zero/package.json +161 -0
  21. package/out/zero-cache/src/config/normalize.d.ts +1 -0
  22. package/out/zero-cache/src/config/normalize.d.ts.map +1 -1
  23. package/out/zero-cache/src/config/normalize.js +10 -1
  24. package/out/zero-cache/src/config/normalize.js.map +1 -1
  25. package/out/zero-cache/src/config/zero-config.d.ts +44 -6
  26. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  27. package/out/zero-cache/src/config/zero-config.js +48 -54
  28. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  29. package/out/zero-cache/src/custom/fetch.d.ts +14 -1
  30. package/out/zero-cache/src/custom/fetch.d.ts.map +1 -1
  31. package/out/zero-cache/src/custom/fetch.js +56 -1
  32. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  33. package/out/zero-cache/src/custom-queries/transform-query.d.ts +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 -1
  36. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  37. package/out/zero-cache/src/server/anonymous-otel-start.d.ts +9 -0
  38. package/out/zero-cache/src/server/anonymous-otel-start.d.ts.map +1 -0
  39. package/out/zero-cache/src/server/anonymous-otel-start.js +293 -0
  40. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -0
  41. package/out/zero-cache/src/server/logging.d.ts.map +1 -1
  42. package/out/zero-cache/src/server/logging.js +3 -3
  43. package/out/zero-cache/src/server/logging.js.map +1 -1
  44. package/out/zero-cache/src/server/main.d.ts.map +1 -1
  45. package/out/zero-cache/src/server/main.js +1 -5
  46. package/out/zero-cache/src/server/main.js.map +1 -1
  47. package/out/zero-cache/src/server/otel-start.d.ts.map +1 -1
  48. package/out/zero-cache/src/server/otel-start.js +24 -18
  49. package/out/zero-cache/src/server/otel-start.js.map +1 -1
  50. package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts.map +1 -1
  51. package/out/zero-cache/src/server/runner/zero-dispatcher.js +2 -2
  52. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  53. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  54. package/out/zero-cache/src/server/syncer.js +7 -4
  55. package/out/zero-cache/src/server/syncer.js.map +1 -1
  56. package/out/zero-cache/src/server/worker-dispatcher.js +3 -3
  57. package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
  58. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +0 -7
  59. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  60. package/out/zero-cache/src/services/change-source/pg/change-source.js +43 -32
  61. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  62. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
  63. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +24 -12
  64. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  65. package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +1 -1
  66. package/out/zero-cache/src/services/change-source/pg/schema/init.js +12 -1
  67. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  68. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +10 -0
  69. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts.map +1 -1
  70. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +21 -2
  71. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  72. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +1 -1
  73. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  74. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +4 -2
  75. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  76. package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
  77. package/out/zero-cache/src/services/litestream/commands.js +50 -23
  78. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  79. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  80. package/out/zero-cache/src/services/mutagen/mutagen.js +4 -0
  81. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  82. package/out/zero-cache/src/services/mutagen/pusher.d.ts +45 -6
  83. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
  84. package/out/zero-cache/src/services/mutagen/pusher.js +22 -6
  85. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  86. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +1 -1
  87. package/out/zero-cache/src/services/view-syncer/client-handler.js +28 -0
  88. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  89. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +11 -8
  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 +14 -13
  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 +9 -16
  94. package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
  95. package/out/zero-cache/src/services/view-syncer/cvr.js +71 -28
  96. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  97. package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +1 -1
  98. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +3 -0
  99. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  100. package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts +3 -2
  101. package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +1 -1
  102. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  103. package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +11 -11
  104. package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +1 -1
  105. package/out/zero-cache/src/services/view-syncer/schema/types.js +3 -2
  106. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
  107. package/out/zero-cache/src/services/view-syncer/ttl-clock.d.ts +10 -0
  108. package/out/zero-cache/src/services/view-syncer/ttl-clock.d.ts.map +1 -0
  109. package/out/zero-cache/src/services/view-syncer/ttl-clock.js +9 -0
  110. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -0
  111. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +14 -13
  112. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  113. package/out/zero-cache/src/services/view-syncer/view-syncer.js +81 -124
  114. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  115. package/out/zero-cache/src/types/processes.d.ts +6 -6
  116. package/out/zero-cache/src/types/processes.d.ts.map +1 -1
  117. package/out/zero-cache/src/types/processes.js +2 -2
  118. package/out/zero-cache/src/types/processes.js.map +1 -1
  119. package/out/zero-cache/src/types/websocket-handoff.d.ts +2 -2
  120. package/out/zero-cache/src/types/websocket-handoff.d.ts.map +1 -1
  121. package/out/zero-cache/src/types/websocket-handoff.js +4 -4
  122. package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
  123. package/out/zero-cache/src/workers/connection.d.ts +1 -1
  124. package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
  125. package/out/zero-cache/src/workers/connection.js +2 -0
  126. package/out/zero-cache/src/workers/connection.js.map +1 -1
  127. package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
  128. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +6 -1
  129. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  130. package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
  131. package/out/zero-cache/src/workers/syncer.js +3 -1
  132. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  133. package/out/zero-client/src/client/active-clients-manager.d.ts.map +1 -1
  134. package/out/zero-client/src/client/mutation-tracker.d.ts +7 -2
  135. package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
  136. package/out/zero-client/src/client/options.d.ts +9 -4
  137. package/out/zero-client/src/client/options.d.ts.map +1 -1
  138. package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
  139. package/out/zero-client/src/client/zero-poke-handler.d.ts +6 -2
  140. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  141. package/out/zero-client/src/client/zero.d.ts +2 -2
  142. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  143. package/out/zero-client/src/mod.d.ts +1 -1
  144. package/out/zero-client/src/mod.d.ts.map +1 -1
  145. package/out/zero-protocol/src/connect.d.ts +24 -2
  146. package/out/zero-protocol/src/connect.d.ts.map +1 -1
  147. package/out/zero-protocol/src/connect.js +17 -2
  148. package/out/zero-protocol/src/connect.js.map +1 -1
  149. package/out/zero-protocol/src/down.d.ts +18 -0
  150. package/out/zero-protocol/src/down.d.ts.map +1 -1
  151. package/out/zero-protocol/src/mutations-patch.d.ts +65 -0
  152. package/out/zero-protocol/src/mutations-patch.d.ts.map +1 -0
  153. package/out/zero-protocol/src/mutations-patch.js +16 -0
  154. package/out/zero-protocol/src/mutations-patch.js.map +1 -0
  155. package/out/zero-protocol/src/poke.d.ts +36 -0
  156. package/out/zero-protocol/src/poke.d.ts.map +1 -1
  157. package/out/zero-protocol/src/poke.js +3 -0
  158. package/out/zero-protocol/src/poke.js.map +1 -1
  159. package/out/zero-protocol/src/protocol-version.d.ts +1 -1
  160. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  161. package/out/zero-protocol/src/protocol-version.js +4 -1
  162. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  163. package/out/zero-protocol/src/push.d.ts +8 -3
  164. package/out/zero-protocol/src/push.d.ts.map +1 -1
  165. package/out/zero-protocol/src/push.js +7 -3
  166. package/out/zero-protocol/src/push.js.map +1 -1
  167. package/out/zero-protocol/src/up.d.ts +9 -1
  168. package/out/zero-protocol/src/up.d.ts.map +1 -1
  169. package/out/zero-protocol/src/up.js +2 -2
  170. package/out/zero-protocol/src/up.js.map +1 -1
  171. package/out/zero-server/src/queries/process-queries.d.ts +1 -1
  172. package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
  173. package/out/zero-server/src/queries/process-queries.js +1 -1
  174. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  175. package/out/zero-solid/src/mod.d.ts +2 -2
  176. package/out/zero-solid/src/mod.d.ts.map +1 -1
  177. package/out/zero.js +9 -7
  178. package/out/zql/src/query/named.d.ts +11 -11
  179. package/out/zql/src/query/named.d.ts.map +1 -1
  180. package/out/zql/src/query/named.js +20 -2
  181. package/out/zql/src/query/named.js.map +1 -1
  182. package/out/zql/src/query/query-impl.js +1 -1
  183. package/out/zql/src/query/query-impl.js.map +1 -1
  184. package/out/zql/src/query/query.d.ts +12 -3
  185. package/out/zql/src/query/query.d.ts.map +1 -1
  186. package/out/zql/src/query/query.js.map +1 -1
  187. package/package.json +2 -2
  188. package/out/chunk-5A6QECBY.js.map +0 -7
  189. /package/out/{inspector-HDOYOVMS.js.map → inspector-TFZBDN6K.js.map} +0 -0
@@ -98,7 +98,6 @@ import {
98
98
  normalizeAST,
99
99
  once,
100
100
  parse,
101
- parseTTL,
102
101
  primaryKeySchema,
103
102
  primaryKeyValueRecordSchema,
104
103
  readFromDefaultHead,
@@ -127,7 +126,7 @@ import {
127
126
  withWrite,
128
127
  withWriteNoImplicitCommit,
129
128
  wrapIterable
130
- } from "./chunk-INLOZBST.js";
129
+ } from "./chunk-P5M53J4D.js";
131
130
  import {
132
131
  __export
133
132
  } from "./chunk-424PT5DM.js";
@@ -405,7 +404,11 @@ var IDBStore = class {
405
404
  assertNotNull(tx);
406
405
  tx.abort();
407
406
  this.#idbDeleted = true;
408
- reject(new IDBNotFoundError(`Replicache IndexedDB not found: ${name}`));
407
+ reject(
408
+ new IDBNotFoundError(
409
+ `Expected IndexedDB not found: ${name}. This likely means that the user deleted IndexedDB instances while the app was running. This is non-fatal. The app will continue running in memory until reload.`
410
+ )
411
+ );
409
412
  };
410
413
  req.onsuccess = () => resolve(req.result);
411
414
  req.onerror = () => reject(req.error);
@@ -426,7 +429,7 @@ var IDBStore = class {
426
429
  this.#idbDeleted = true;
427
430
  mustGetBrowserGlobal("indexedDB").deleteDatabase(db.name);
428
431
  throw new IDBNotFoundError(
429
- `Replicache IndexedDB ${db.name} missing object store. Deleting db.`
432
+ `Expected IndexedDB ${db.name} missing object store. Deleting db. This is non-fatal, the app will continue working in memory until it is reloaded.`
430
433
  );
431
434
  }
432
435
  }
@@ -5891,14 +5894,29 @@ var connectedMessageSchema = valita_exports.tuple([
5891
5894
  valita_exports.literal("connected"),
5892
5895
  connectedBodySchema
5893
5896
  ]);
5894
- var userPushParamsSchema = valita_exports.object({
5897
+ var userQueryMutateParamsSchema = valita_exports.object({
5898
+ /**
5899
+ * A client driven URL to send queries or mutations to.
5900
+ * This URL must match one of the URLs set in the zero config.
5901
+ *
5902
+ * E.g., Given the following environment variable:
5903
+ * ZERO_QUERY_URL=[https://*.example.com/query]
5904
+ *
5905
+ * Then this URL could be:
5906
+ * https://myapp.example.com/query
5907
+ */
5908
+ url: valita_exports.string().optional(),
5909
+ // The query string to use for query or mutation calls.
5895
5910
  queryParams: valita_exports.record(valita_exports.string()).optional()
5896
5911
  });
5897
5912
  var initConnectionBodySchema = valita_exports.object({
5898
5913
  desiredQueriesPatch: upQueriesPatchSchema,
5899
5914
  clientSchema: clientSchemaSchema.optional(),
5900
5915
  deleted: deleteClientsBodySchema.optional(),
5901
- userPushParams: userPushParamsSchema.optional(),
5916
+ // parameters to configure the mutate endpoint
5917
+ userPushParams: userQueryMutateParamsSchema.optional(),
5918
+ // parameters to configure the query endpoint
5919
+ userQueryParams: userQueryMutateParamsSchema.optional(),
5902
5920
  /**
5903
5921
  * `activeClients` is an optional array of client IDs that are currently active
5904
5922
  * in the client group. This is used to inform the server about the clients
@@ -5970,116 +5988,6 @@ var errorMessageSchema = valita_exports.tuple([
5970
5988
  errorBodySchema
5971
5989
  ]);
5972
5990
 
5973
- // ../zero-protocol/src/row-patch.ts
5974
- var putOpSchema2 = valita_exports.object({
5975
- op: valita_exports.literal("put"),
5976
- tableName: valita_exports.string(),
5977
- value: rowSchema
5978
- });
5979
- var updateOpSchema = valita_exports.object({
5980
- op: valita_exports.literal("update"),
5981
- tableName: valita_exports.string(),
5982
- id: primaryKeyValueRecordSchema,
5983
- merge: jsonObjectSchema.optional(),
5984
- constrain: valita_exports.array(valita_exports.string()).optional()
5985
- });
5986
- var delOpSchema2 = valita_exports.object({
5987
- op: valita_exports.literal("del"),
5988
- tableName: valita_exports.string(),
5989
- id: primaryKeyValueRecordSchema
5990
- });
5991
- var clearOpSchema2 = valita_exports.object({
5992
- op: valita_exports.literal("clear")
5993
- });
5994
- var rowPatchOpSchema = valita_exports.union(
5995
- putOpSchema2,
5996
- updateOpSchema,
5997
- delOpSchema2,
5998
- clearOpSchema2
5999
- );
6000
- var rowsPatchSchema = valita_exports.array(rowPatchOpSchema);
6001
-
6002
- // ../zero-protocol/src/version.ts
6003
- var versionSchema = valita_exports.string();
6004
- var nullableVersionSchema = valita_exports.union(versionSchema, valita_exports.null());
6005
-
6006
- // ../zero-protocol/src/poke.ts
6007
- var pokeStartBodySchema = valita_exports.object({
6008
- pokeID: valita_exports.string(),
6009
- // We always specify a Version as our cookie, but Replicache starts clients
6010
- // with initial cookie `null`, before the first request. So we have to be
6011
- // able to send a base cookie with value `null` to match that state.
6012
- baseCookie: nullableVersionSchema,
6013
- /**
6014
- * This field is always set if the poke contains a `rowsPatch`.
6015
- * It may be absent for patches that only update clients and queries.
6016
- */
6017
- schemaVersions: valita_exports.object({
6018
- minSupportedVersion: valita_exports.number(),
6019
- maxSupportedVersion: valita_exports.number()
6020
- }).optional(),
6021
- timestamp: valita_exports.number().optional()
6022
- });
6023
- var pokePartBodySchema = valita_exports.object({
6024
- pokeID: valita_exports.string(),
6025
- // Changes to last mutation id by client id.
6026
- lastMutationIDChanges: valita_exports.record(valita_exports.number()).optional(),
6027
- // Patches to the desired query sets by client id.
6028
- desiredQueriesPatches: valita_exports.record(queriesPatchSchema).optional(),
6029
- // Patches to the set of queries for which entities are sync'd in
6030
- // rowsPatch.
6031
- gotQueriesPatch: queriesPatchSchema.optional(),
6032
- // Patches to the rows set.
6033
- rowsPatch: rowsPatchSchema.optional()
6034
- });
6035
- var pokeEndBodySchema = valita_exports.object({
6036
- pokeID: valita_exports.string(),
6037
- // Note: This should be ignored (and may be empty) if cancel === `true`.
6038
- cookie: versionSchema,
6039
- // If `true`, the poke with id `pokeID` should be discarded without
6040
- // applying it.
6041
- cancel: valita_exports.boolean().optional()
6042
- });
6043
- var pokeStartMessageSchema = valita_exports.tuple([
6044
- valita_exports.literal("pokeStart"),
6045
- pokeStartBodySchema
6046
- ]);
6047
- var pokePartMessageSchema = valita_exports.tuple([
6048
- valita_exports.literal("pokePart"),
6049
- pokePartBodySchema
6050
- ]);
6051
- var pokeEndMessageSchema = valita_exports.tuple([
6052
- valita_exports.literal("pokeEnd"),
6053
- pokeEndBodySchema
6054
- ]);
6055
-
6056
- // ../zero-protocol/src/pong.ts
6057
- var pongBodySchema = valita_exports.object({});
6058
- var pongMessageSchema = valita_exports.tuple([valita_exports.literal("pong"), pongBodySchema]);
6059
-
6060
- // ../zero-protocol/src/pull.ts
6061
- var pullRequestBodySchema = valita_exports.object({
6062
- clientGroupID: valita_exports.string(),
6063
- cookie: nullableVersionSchema,
6064
- requestID: valita_exports.string()
6065
- });
6066
- var pullResponseBodySchema = valita_exports.object({
6067
- cookie: versionSchema,
6068
- // Matches pullRequestBodySchema requestID that initiated this response
6069
- requestID: valita_exports.string(),
6070
- lastMutationIDChanges: valita_exports.record(valita_exports.number())
6071
- // Pull is currently only used for mutation recovery which does not use
6072
- // the patch so we save work by not computing the patch.
6073
- });
6074
- var pullRequestMessageSchema = valita_exports.tuple([
6075
- valita_exports.literal("pull"),
6076
- pullRequestBodySchema
6077
- ]);
6078
- var pullResponseMessageSchema = valita_exports.tuple([
6079
- valita_exports.literal("pull"),
6080
- pullResponseBodySchema
6081
- ]);
6082
-
6083
5991
  // ../zero-protocol/src/mutation-type-enum.ts
6084
5992
  var CRUD = "crud";
6085
5993
  var Custom = "custom";
@@ -6098,7 +6006,7 @@ var upsertOpSchema = valita_exports.object({
6098
6006
  primaryKey: primaryKeySchema,
6099
6007
  value: rowSchema
6100
6008
  });
6101
- var updateOpSchema2 = valita_exports.object({
6009
+ var updateOpSchema = valita_exports.object({
6102
6010
  op: valita_exports.literal("update"),
6103
6011
  tableName: valita_exports.string(),
6104
6012
  primaryKey: primaryKeySchema,
@@ -6115,7 +6023,7 @@ var deleteOpSchema = valita_exports.object({
6115
6023
  var crudOpSchema = valita_exports.union(
6116
6024
  insertOpSchema,
6117
6025
  upsertOpSchema,
6118
- updateOpSchema2,
6026
+ updateOpSchema,
6119
6027
  deleteOpSchema
6120
6028
  );
6121
6029
  var crudArgSchema = valita_exports.object({
@@ -6169,7 +6077,10 @@ var mutationOkSchema = valita_exports.object({
6169
6077
  data: jsonSchema.optional()
6170
6078
  });
6171
6079
  var mutationErrorSchema = valita_exports.union(appErrorSchema, zeroErrorSchema);
6172
- var mutationResultSchema = valita_exports.union(mutationOkSchema, mutationErrorSchema);
6080
+ var mutationResultSchema = valita_exports.union(
6081
+ mutationOkSchema,
6082
+ mutationErrorSchema
6083
+ );
6173
6084
  var mutationResponseSchema = valita_exports.object({
6174
6085
  id: mutationIDSchema,
6175
6086
  result: mutationResultSchema
@@ -6213,6 +6124,10 @@ var pushResponseMessageSchema = valita_exports.tuple([
6213
6124
  valita_exports.literal("pushResponse"),
6214
6125
  pushResponseSchema
6215
6126
  ]);
6127
+ var ackMutationResponsesMessageSchema = valita_exports.tuple([
6128
+ valita_exports.literal("ackMutationResponses"),
6129
+ mutationIDSchema
6130
+ ]);
6216
6131
  var pushParamsSchema = valita_exports.object({
6217
6132
  schema: valita_exports.string(),
6218
6133
  appID: valita_exports.string()
@@ -6232,6 +6147,126 @@ function mapCRUD(arg, map) {
6232
6147
  };
6233
6148
  }
6234
6149
 
6150
+ // ../zero-protocol/src/mutations-patch.ts
6151
+ var putOpSchema2 = valita_exports.object({
6152
+ op: valita_exports.literal("put"),
6153
+ mutation: mutationResponseSchema
6154
+ });
6155
+ var patchOpSchema2 = putOpSchema2;
6156
+ var mutationsPatchSchema = valita_exports.array(patchOpSchema2);
6157
+
6158
+ // ../zero-protocol/src/row-patch.ts
6159
+ var putOpSchema3 = valita_exports.object({
6160
+ op: valita_exports.literal("put"),
6161
+ tableName: valita_exports.string(),
6162
+ value: rowSchema
6163
+ });
6164
+ var updateOpSchema2 = valita_exports.object({
6165
+ op: valita_exports.literal("update"),
6166
+ tableName: valita_exports.string(),
6167
+ id: primaryKeyValueRecordSchema,
6168
+ merge: jsonObjectSchema.optional(),
6169
+ constrain: valita_exports.array(valita_exports.string()).optional()
6170
+ });
6171
+ var delOpSchema2 = valita_exports.object({
6172
+ op: valita_exports.literal("del"),
6173
+ tableName: valita_exports.string(),
6174
+ id: primaryKeyValueRecordSchema
6175
+ });
6176
+ var clearOpSchema2 = valita_exports.object({
6177
+ op: valita_exports.literal("clear")
6178
+ });
6179
+ var rowPatchOpSchema = valita_exports.union(
6180
+ putOpSchema3,
6181
+ updateOpSchema2,
6182
+ delOpSchema2,
6183
+ clearOpSchema2
6184
+ );
6185
+ var rowsPatchSchema = valita_exports.array(rowPatchOpSchema);
6186
+
6187
+ // ../zero-protocol/src/version.ts
6188
+ var versionSchema = valita_exports.string();
6189
+ var nullableVersionSchema = valita_exports.union(versionSchema, valita_exports.null());
6190
+
6191
+ // ../zero-protocol/src/poke.ts
6192
+ var pokeStartBodySchema = valita_exports.object({
6193
+ pokeID: valita_exports.string(),
6194
+ // We always specify a Version as our cookie, but Replicache starts clients
6195
+ // with initial cookie `null`, before the first request. So we have to be
6196
+ // able to send a base cookie with value `null` to match that state.
6197
+ baseCookie: nullableVersionSchema,
6198
+ /**
6199
+ * This field is always set if the poke contains a `rowsPatch`.
6200
+ * It may be absent for patches that only update clients and queries.
6201
+ */
6202
+ schemaVersions: valita_exports.object({
6203
+ minSupportedVersion: valita_exports.number(),
6204
+ maxSupportedVersion: valita_exports.number()
6205
+ }).optional(),
6206
+ timestamp: valita_exports.number().optional()
6207
+ });
6208
+ var pokePartBodySchema = valita_exports.object({
6209
+ pokeID: valita_exports.string(),
6210
+ // Changes to last mutation id by client id.
6211
+ lastMutationIDChanges: valita_exports.record(valita_exports.number()).optional(),
6212
+ // Patches to the desired query sets by client id.
6213
+ desiredQueriesPatches: valita_exports.record(queriesPatchSchema).optional(),
6214
+ // Patches to the set of queries for which entities are sync'd in
6215
+ // rowsPatch.
6216
+ gotQueriesPatch: queriesPatchSchema.optional(),
6217
+ // Patches to the rows set.
6218
+ rowsPatch: rowsPatchSchema.optional(),
6219
+ // Mutation results patch
6220
+ mutationsPatch: mutationsPatchSchema.optional()
6221
+ });
6222
+ var pokeEndBodySchema = valita_exports.object({
6223
+ pokeID: valita_exports.string(),
6224
+ // Note: This should be ignored (and may be empty) if cancel === `true`.
6225
+ cookie: versionSchema,
6226
+ // If `true`, the poke with id `pokeID` should be discarded without
6227
+ // applying it.
6228
+ cancel: valita_exports.boolean().optional()
6229
+ });
6230
+ var pokeStartMessageSchema = valita_exports.tuple([
6231
+ valita_exports.literal("pokeStart"),
6232
+ pokeStartBodySchema
6233
+ ]);
6234
+ var pokePartMessageSchema = valita_exports.tuple([
6235
+ valita_exports.literal("pokePart"),
6236
+ pokePartBodySchema
6237
+ ]);
6238
+ var pokeEndMessageSchema = valita_exports.tuple([
6239
+ valita_exports.literal("pokeEnd"),
6240
+ pokeEndBodySchema
6241
+ ]);
6242
+
6243
+ // ../zero-protocol/src/pong.ts
6244
+ var pongBodySchema = valita_exports.object({});
6245
+ var pongMessageSchema = valita_exports.tuple([valita_exports.literal("pong"), pongBodySchema]);
6246
+
6247
+ // ../zero-protocol/src/pull.ts
6248
+ var pullRequestBodySchema = valita_exports.object({
6249
+ clientGroupID: valita_exports.string(),
6250
+ cookie: nullableVersionSchema,
6251
+ requestID: valita_exports.string()
6252
+ });
6253
+ var pullResponseBodySchema = valita_exports.object({
6254
+ cookie: versionSchema,
6255
+ // Matches pullRequestBodySchema requestID that initiated this response
6256
+ requestID: valita_exports.string(),
6257
+ lastMutationIDChanges: valita_exports.record(valita_exports.number())
6258
+ // Pull is currently only used for mutation recovery which does not use
6259
+ // the patch so we save work by not computing the patch.
6260
+ });
6261
+ var pullRequestMessageSchema = valita_exports.tuple([
6262
+ valita_exports.literal("pull"),
6263
+ pullRequestBodySchema
6264
+ ]);
6265
+ var pullResponseMessageSchema = valita_exports.tuple([
6266
+ valita_exports.literal("pull"),
6267
+ pullResponseBodySchema
6268
+ ]);
6269
+
6235
6270
  // ../zero-protocol/src/down.ts
6236
6271
  var downstreamSchema = valita_exports.union(
6237
6272
  connectedMessageSchema,
@@ -6247,7 +6282,7 @@ var downstreamSchema = valita_exports.union(
6247
6282
  );
6248
6283
 
6249
6284
  // ../zero-protocol/src/protocol-version.ts
6250
- var PROTOCOL_VERSION = 21;
6285
+ var PROTOCOL_VERSION = 24;
6251
6286
  var MIN_SERVER_SUPPORTED_SYNC_PROTOCOL = 18;
6252
6287
  assert(MIN_SERVER_SUPPORTED_SYNC_PROTOCOL < PROTOCOL_VERSION);
6253
6288
 
@@ -6396,7 +6431,7 @@ var ActiveClientsManager = class _ActiveClientsManager {
6396
6431
  */
6397
6432
  static async create(clientGroupID, clientID, signal) {
6398
6433
  const instance = new _ActiveClientsManager(clientGroupID, clientID, signal);
6399
- await instance.#init(clientGroupID, clientID, signal);
6434
+ await instance.#init(signal);
6400
6435
  return instance;
6401
6436
  }
6402
6437
  constructor(clientGroupID, clientID, signal) {
@@ -6405,7 +6440,8 @@ var ActiveClientsManager = class _ActiveClientsManager {
6405
6440
  this.#lockManager = getClientLockManager(signal);
6406
6441
  this.#activeClients.add(clientID);
6407
6442
  }
6408
- async #init(clientGroupID, clientID, signal) {
6443
+ async #init(signal) {
6444
+ const { clientGroupID, clientID } = this;
6409
6445
  const name = toLockName(clientGroupID, clientID);
6410
6446
  const channel = new bc(toBroadcastChannelName(clientGroupID));
6411
6447
  channel.addEventListener(
@@ -8538,7 +8574,7 @@ function makeMessage(message, context, logLevel) {
8538
8574
  }
8539
8575
 
8540
8576
  // ../zero-client/src/client/version.ts
8541
- var version2 = "0.22.2025071101";
8577
+ var version2 = "0.22.2025072500";
8542
8578
 
8543
8579
  // ../zero-client/src/client/log-options.ts
8544
8580
  var LevelFilterLogSink = class {
@@ -8850,10 +8886,15 @@ var MutationTracker = class {
8850
8886
  #allMutationsAppliedListeners;
8851
8887
  #lc;
8852
8888
  #limboMutations;
8889
+ // This is only used in the new code path that processes
8890
+ // mutation responses that arrive via the `poke` protocol.
8891
+ // The old code path will be removed in the release after
8892
+ // the one containing mutation-responses-via-poke.
8893
+ #ackMutations;
8853
8894
  #clientID;
8854
8895
  #largestOutstandingMutationID;
8855
8896
  #currentMutationID;
8856
- constructor(lc) {
8897
+ constructor(lc, ackMutations) {
8857
8898
  this.#lc = lc.withContext("MutationTracker");
8858
8899
  this.#outstandingMutations = /* @__PURE__ */ new Map();
8859
8900
  this.#ephemeralIDsByMutationID = /* @__PURE__ */ new Map();
@@ -8861,6 +8902,7 @@ var MutationTracker = class {
8861
8902
  this.#limboMutations = /* @__PURE__ */ new Set();
8862
8903
  this.#largestOutstandingMutationID = 0;
8863
8904
  this.#currentMutationID = 0;
8905
+ this.#ackMutations = ackMutations;
8864
8906
  }
8865
8907
  set clientID(clientID) {
8866
8908
  this.#clientID = clientID;
@@ -8894,6 +8936,28 @@ var MutationTracker = class {
8894
8936
  this.#settleMutation(id, entry, "reject", e);
8895
8937
  }
8896
8938
  }
8939
+ /**
8940
+ * Used when zero-cache pokes down mutation results.
8941
+ */
8942
+ processMutationResponses(patches) {
8943
+ try {
8944
+ for (const patch of patches) {
8945
+ if (patch.mutation.id.clientID !== this.#clientID) {
8946
+ continue;
8947
+ }
8948
+ if ("error" in patch.mutation.result) {
8949
+ this.#processMutationError(patch.mutation.id, patch.mutation.result);
8950
+ } else {
8951
+ this.#processMutationOk(patch.mutation.id, patch.mutation.result);
8952
+ }
8953
+ }
8954
+ } finally {
8955
+ const last = patches[patches.length - 1];
8956
+ if (last) {
8957
+ this.#ackMutations(last.mutation.id);
8958
+ }
8959
+ }
8960
+ }
8897
8961
  processPushResponse(response) {
8898
8962
  if ("error" in response) {
8899
8963
  this.#lc.error?.(
@@ -9044,7 +9108,7 @@ var MutationTracker = class {
9044
9108
  if ("error" in mutation.result) {
9045
9109
  this.#processMutationError(mutation.id, mutation.result);
9046
9110
  } else {
9047
- this.#processMutationOk(mutation.result, mutation.id);
9111
+ this.#processMutationOk(mutation.id, mutation.result);
9048
9112
  }
9049
9113
  }
9050
9114
  }
@@ -9066,7 +9130,7 @@ var MutationTracker = class {
9066
9130
  assert(entry && entry.mutationID === mid.id);
9067
9131
  this.#settleMutation(ephemeralID, entry, "reject", error);
9068
9132
  }
9069
- #processMutationOk(result, mid) {
9133
+ #processMutationOk(mid, result) {
9070
9134
  assert(
9071
9135
  mid.clientID === this.#clientID,
9072
9136
  "received mutation for the wrong client"
@@ -9215,6 +9279,8 @@ var QueryManager = class {
9215
9279
  ast: normalized,
9216
9280
  name,
9217
9281
  args,
9282
+ // We get TTL out of the DagStore so it is possible that the TTL was written
9283
+ // with a too high TTL.
9218
9284
  ttl: clampTTL(ttl)
9219
9285
  // no lc here since no need to log here
9220
9286
  });
@@ -9327,6 +9393,7 @@ var QueryManager = class {
9327
9393
  this.#updateEntry(entry, astHash, ttl);
9328
9394
  }
9329
9395
  #updateEntry(entry, hash, ttl) {
9396
+ ttl = clampTTL(ttl, this.#lc);
9330
9397
  if (compareTTL(ttl, entry.ttl) > 0) {
9331
9398
  entry.ttl = ttl;
9332
9399
  this.#queueQueryChange({
@@ -9335,7 +9402,7 @@ var QueryManager = class {
9335
9402
  ast: entry.normalized,
9336
9403
  name: entry.name,
9337
9404
  args: entry.args,
9338
- ttl: parseTTL(ttl)
9405
+ ttl
9339
9406
  });
9340
9407
  }
9341
9408
  }
@@ -9606,14 +9673,16 @@ var PokeHandler = class {
9606
9673
  #pokeLock = new Lock3();
9607
9674
  #schema;
9608
9675
  #serverToClient;
9676
+ #mutationTracker;
9609
9677
  #raf = getBrowserGlobalMethod("requestAnimationFrame") ?? rafFallback;
9610
- constructor(replicachePoke, onPokeError, clientID, schema, lc) {
9678
+ constructor(replicachePoke, onPokeError, clientID, schema, lc, mutationTracker) {
9611
9679
  this.#replicachePoke = replicachePoke;
9612
9680
  this.#onPokeError = onPokeError;
9613
9681
  this.#clientID = clientID;
9614
9682
  this.#schema = schema;
9615
9683
  this.#serverToClient = serverToClient(schema.tables);
9616
9684
  this.#lc = lc.withContext("PokeHandler");
9685
+ this.#mutationTracker = mutationTracker;
9617
9686
  }
9618
9687
  handlePokeStart(pokeStart) {
9619
9688
  if (this.#receivingPoke) {
@@ -9704,6 +9773,15 @@ var PokeHandler = class {
9704
9773
  lc.debug?.("poking replicache");
9705
9774
  await this.#replicachePoke(merged);
9706
9775
  lc.debug?.("poking replicache took", performance.now() - start);
9776
+ this.#mutationTracker.processMutationResponses(
9777
+ merged.mutationResults ?? []
9778
+ );
9779
+ if (!("error" in merged.pullResponse)) {
9780
+ const lmid = merged.pullResponse.lastMutationIDChanges[this.#clientID];
9781
+ if (lmid !== void 0) {
9782
+ this.#mutationTracker.lmidAdvanced(lmid);
9783
+ }
9784
+ }
9707
9785
  } catch (e) {
9708
9786
  this.#handlePokeError(e);
9709
9787
  }
@@ -9732,6 +9810,7 @@ function mergePokes(pokeBuffer, schema, serverToClient2) {
9732
9810
  const { cookie } = lastPoke.pokeEnd;
9733
9811
  const mergedPatch = [];
9734
9812
  const mergedLastMutationIDChanges = {};
9813
+ const mutationResults = [];
9735
9814
  let prevPokeEnd = void 0;
9736
9815
  for (const pokeAccumulator of pokeBuffer) {
9737
9816
  if (prevPokeEnd && pokeAccumulator.pokeStart.baseCookie && pokeAccumulator.pokeStart.baseCookie > prevPokeEnd.cookie) {
@@ -9778,9 +9857,12 @@ function mergePokes(pokeBuffer, schema, serverToClient2) {
9778
9857
  );
9779
9858
  }
9780
9859
  }
9860
+ if (pokePart.mutationsPatch) {
9861
+ mutationResults.push(...pokePart.mutationsPatch);
9862
+ }
9781
9863
  }
9782
9864
  }
9783
- return {
9865
+ const ret = {
9784
9866
  baseCookie,
9785
9867
  pullResponse: {
9786
9868
  lastMutationIDChanges: mergedLastMutationIDChanges,
@@ -9788,6 +9870,10 @@ function mergePokes(pokeBuffer, schema, serverToClient2) {
9788
9870
  cookie
9789
9871
  }
9790
9872
  };
9873
+ if (mutationResults.length > 0) {
9874
+ ret.mutationResults = mutationResults;
9875
+ }
9876
+ return ret;
9791
9877
  }
9792
9878
  function queryPatchOpToReplicachePatchOp(op, toKey) {
9793
9879
  switch (op.op) {
@@ -10128,7 +10214,10 @@ var Zero = class _Zero {
10128
10214
  }
10129
10215
  };
10130
10216
  const lc = new ZeroLogContext(logOptions.logLevel, {}, logSink);
10131
- this.#mutationTracker = new MutationTracker(lc);
10217
+ this.#mutationTracker = new MutationTracker(
10218
+ lc,
10219
+ (upTo) => this.#send(["ackMutationResponses", upTo])
10220
+ );
10132
10221
  if (options.mutators) {
10133
10222
  for (const [namespaceOrKey, mutatorOrMutators] of Object.entries(
10134
10223
  options.mutators
@@ -10308,7 +10397,8 @@ var Zero = class _Zero {
10308
10397
  () => this.#onPokeError(),
10309
10398
  rep.clientID,
10310
10399
  schema,
10311
- this.#lc
10400
+ this.#lc,
10401
+ this.#mutationTracker
10312
10402
  );
10313
10403
  this.#visibilityWatcher = getDocumentVisibilityWatcher(
10314
10404
  getBrowserGlobal("document"),
@@ -10659,7 +10749,8 @@ var Zero = class _Zero {
10659
10749
  // The clientSchema only needs to be sent for the very first request.
10660
10750
  // Henceforth it is stored with the CVR and verified automatically.
10661
10751
  ...this.#connectCookie === null ? { clientSchema } : {},
10662
- userPushParams: this.#options.push
10752
+ userPushParams: this.#options.mutate ?? this.#options.push,
10753
+ userQueryParams: this.#options.query
10663
10754
  }
10664
10755
  ]);
10665
10756
  this.#deletedClients = void 0;
@@ -10734,7 +10825,8 @@ var Zero = class _Zero {
10734
10825
  wsid,
10735
10826
  this.#options.logLevel === "debug",
10736
10827
  lc,
10737
- this.#options.push,
10828
+ this.#options.mutate ?? this.#options.push,
10829
+ this.#options.query,
10738
10830
  this.#options.maxHeaderLength,
10739
10831
  additionalConnectParams,
10740
10832
  await this.#activeClientsManager
@@ -10838,7 +10930,6 @@ var Zero = class _Zero {
10838
10930
  #handlePokeEnd(_lc, pokeMessage) {
10839
10931
  this.#abortPingTimeout();
10840
10932
  this.#pokeHandler.handlePokeEnd(pokeMessage[1]);
10841
- this.#mutationTracker.lmidAdvanced(this.#lastMutationIDReceived);
10842
10933
  }
10843
10934
  #onPokeError() {
10844
10935
  const lc = this.#lc;
@@ -11207,7 +11298,7 @@ var Zero = class _Zero {
11207
11298
  */
11208
11299
  async inspect() {
11209
11300
  BUNDLE_SIZE: {
11210
- const m = await import("./inspector-HDOYOVMS.js");
11301
+ const m = await import("./inspector-TFZBDN6K.js");
11211
11302
  return m.newInspector(this.#rep, this.#schema, async () => {
11212
11303
  await this.#connectResolver.promise;
11213
11304
  return this.#socket;
@@ -11215,7 +11306,7 @@ var Zero = class _Zero {
11215
11306
  }
11216
11307
  }
11217
11308
  };
11218
- async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushParams, maxHeaderLength = 1024 * 8, additionalConnectParams, activeClientsManager) {
11309
+ async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushParams, userQueryParams, maxHeaderLength = 1024 * 8, additionalConnectParams, activeClientsManager) {
11219
11310
  const url = new URL(
11220
11311
  appendPath(socketOrigin, `/sync/v${PROTOCOL_VERSION}/connect`)
11221
11312
  );
@@ -11255,6 +11346,7 @@ async function createSocket(rep, queryManager, deleteClientsManager, socketOrigi
11255
11346
  // Henceforth it is stored with the CVR and verified automatically.
11256
11347
  ...baseCookie === null ? { clientSchema } : {},
11257
11348
  userPushParams,
11349
+ userQueryParams,
11258
11350
  activeClients: [...activeClients]
11259
11351
  }
11260
11352
  ],
@@ -11334,6 +11426,7 @@ export {
11334
11426
  dropDatabase,
11335
11427
  dropAllDatabases,
11336
11428
  error_kind_enum_exports,
11429
+ mapEntries,
11337
11430
  table,
11338
11431
  string3 as string,
11339
11432
  number2 as number,
@@ -11345,4 +11438,4 @@ export {
11345
11438
  update_needed_reason_type_enum_exports,
11346
11439
  Zero
11347
11440
  };
11348
- //# sourceMappingURL=chunk-5A6QECBY.js.map
11441
+ //# sourceMappingURL=chunk-ROYQ5GXF.js.map