@rocicorp/zero 0.25.0-canary.12 → 0.25.0-canary.14

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 (173) hide show
  1. package/out/zero/package.json.js +1 -1
  2. package/out/zero/src/pg.js +4 -2
  3. package/out/zero/src/server.js +4 -2
  4. package/out/zero-cache/src/config/zero-config.d.ts +0 -4
  5. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  6. package/out/zero-cache/src/config/zero-config.js +5 -15
  7. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  8. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  9. package/out/zero-cache/src/server/change-streamer.js +2 -8
  10. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  11. package/out/zero-cache/src/server/otel-diag-logger.js +1 -0
  12. package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
  13. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  14. package/out/zero-cache/src/services/change-source/pg/change-source.js +62 -42
  15. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  16. package/out/zero-cache/src/services/change-source/protocol/current/control.d.ts +1 -0
  17. package/out/zero-cache/src/services/change-source/protocol/current/control.d.ts.map +1 -1
  18. package/out/zero-cache/src/services/change-source/protocol/current/control.js +5 -1
  19. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
  20. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +2 -0
  21. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
  22. package/out/zero-cache/src/services/change-source/protocol/current/json.d.ts +8 -0
  23. package/out/zero-cache/src/services/change-source/protocol/current/json.d.ts.map +1 -0
  24. package/out/zero-cache/src/services/change-source/protocol/current/json.js +19 -0
  25. package/out/zero-cache/src/services/change-source/protocol/current/json.js.map +1 -0
  26. package/out/zero-cache/src/services/change-source/protocol/current.d.ts +1 -0
  27. package/out/zero-cache/src/services/change-source/protocol/current.d.ts.map +1 -1
  28. package/out/zero-cache/src/services/change-source/protocol/current.js +3 -0
  29. package/out/zero-cache/src/services/change-source/protocol/current.js.map +1 -1
  30. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +0 -2
  31. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  32. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +0 -5
  33. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  34. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  35. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +8 -1
  36. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  37. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
  38. package/out/zero-cache/src/services/change-streamer/storer.js +2 -3
  39. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  40. package/out/zero-cache/src/services/http-service.d.ts +0 -1
  41. package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
  42. package/out/zero-cache/src/services/http-service.js +0 -4
  43. package/out/zero-cache/src/services/http-service.js.map +1 -1
  44. package/out/zero-cache/src/services/replicator/replication-status.d.ts +2 -0
  45. package/out/zero-cache/src/services/replicator/replication-status.d.ts.map +1 -1
  46. package/out/zero-cache/src/services/replicator/replication-status.js +14 -1
  47. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  48. package/out/zero-client/src/client/connection-manager.d.ts +3 -3
  49. package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
  50. package/out/zero-client/src/client/connection-manager.js.map +1 -1
  51. package/out/zero-client/src/client/connection.d.ts.map +1 -1
  52. package/out/zero-client/src/client/connection.js +8 -1
  53. package/out/zero-client/src/client/connection.js.map +1 -1
  54. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  55. package/out/zero-client/src/client/custom.js +4 -3
  56. package/out/zero-client/src/client/custom.js.map +1 -1
  57. package/out/zero-client/src/client/error.d.ts +6 -1
  58. package/out/zero-client/src/client/error.d.ts.map +1 -1
  59. package/out/zero-client/src/client/error.js +2 -2
  60. package/out/zero-client/src/client/error.js.map +1 -1
  61. package/out/zero-client/src/client/make-mutate-property.d.ts +6 -9
  62. package/out/zero-client/src/client/make-mutate-property.d.ts.map +1 -1
  63. package/out/zero-client/src/client/make-mutate-property.js +3 -8
  64. package/out/zero-client/src/client/make-mutate-property.js.map +1 -1
  65. package/out/zero-client/src/client/mutator-proxy.d.ts +3 -2
  66. package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -1
  67. package/out/zero-client/src/client/mutator-proxy.js +15 -3
  68. package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
  69. package/out/zero-client/src/client/version.js +1 -1
  70. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  71. package/out/zero-client/src/client/zero.js +8 -8
  72. package/out/zero-client/src/client/zero.js.map +1 -1
  73. package/out/zero-events/src/status.d.ts +1 -1
  74. package/out/zero-events/src/status.d.ts.map +1 -1
  75. package/out/zero-schema/src/permissions.d.ts +3 -0
  76. package/out/zero-schema/src/permissions.d.ts.map +1 -1
  77. package/out/zero-schema/src/permissions.js.map +1 -1
  78. package/out/zero-server/src/custom.d.ts +2 -2
  79. package/out/zero-server/src/custom.d.ts.map +1 -1
  80. package/out/zero-server/src/custom.js +40 -4
  81. package/out/zero-server/src/custom.js.map +1 -1
  82. package/out/zero-server/src/mod.d.ts +1 -1
  83. package/out/zero-server/src/mod.d.ts.map +1 -1
  84. package/out/zero-server/src/process-mutations.d.ts +10 -6
  85. package/out/zero-server/src/process-mutations.d.ts.map +1 -1
  86. package/out/zero-server/src/process-mutations.js +9 -18
  87. package/out/zero-server/src/process-mutations.js.map +1 -1
  88. package/out/zero-server/src/push-processor.d.ts.map +1 -1
  89. package/out/zero-server/src/push-processor.js +10 -8
  90. package/out/zero-server/src/push-processor.js.map +1 -1
  91. package/out/zero-server/src/queries/process-queries.d.ts +14 -2
  92. package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
  93. package/out/zero-server/src/queries/process-queries.js +18 -15
  94. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  95. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  96. package/out/zero-server/src/zql-database.js +1 -5
  97. package/out/zero-server/src/zql-database.js.map +1 -1
  98. package/out/zql/src/builder/builder.d.ts.map +1 -1
  99. package/out/zql/src/builder/builder.js +0 -1
  100. package/out/zql/src/builder/builder.js.map +1 -1
  101. package/out/zql/src/ivm/data.js +0 -11
  102. package/out/zql/src/ivm/data.js.map +1 -1
  103. package/out/zql/src/ivm/exists.d.ts +2 -2
  104. package/out/zql/src/ivm/exists.d.ts.map +1 -1
  105. package/out/zql/src/ivm/exists.js +34 -20
  106. package/out/zql/src/ivm/exists.js.map +1 -1
  107. package/out/zql/src/ivm/fan-in.d.ts +1 -1
  108. package/out/zql/src/ivm/fan-in.d.ts.map +1 -1
  109. package/out/zql/src/ivm/fan-in.js +4 -2
  110. package/out/zql/src/ivm/fan-in.js.map +1 -1
  111. package/out/zql/src/ivm/fan-out.d.ts +1 -1
  112. package/out/zql/src/ivm/fan-out.d.ts.map +1 -1
  113. package/out/zql/src/ivm/fan-out.js +9 -3
  114. package/out/zql/src/ivm/fan-out.js.map +1 -1
  115. package/out/zql/src/ivm/filter-operators.d.ts +4 -6
  116. package/out/zql/src/ivm/filter-operators.d.ts.map +1 -1
  117. package/out/zql/src/ivm/filter-operators.js +14 -27
  118. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  119. package/out/zql/src/ivm/filter.d.ts +1 -1
  120. package/out/zql/src/ivm/filter.d.ts.map +1 -1
  121. package/out/zql/src/ivm/filter.js +4 -2
  122. package/out/zql/src/ivm/filter.js.map +1 -1
  123. package/out/zql/src/ivm/flipped-join.d.ts +0 -1
  124. package/out/zql/src/ivm/flipped-join.d.ts.map +1 -1
  125. package/out/zql/src/ivm/flipped-join.js +0 -2
  126. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  127. package/out/zql/src/ivm/join.d.ts +2 -15
  128. package/out/zql/src/ivm/join.d.ts.map +1 -1
  129. package/out/zql/src/ivm/join.js +33 -96
  130. package/out/zql/src/ivm/join.js.map +1 -1
  131. package/out/zql/src/ivm/memory-source.d.ts +4 -3
  132. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  133. package/out/zql/src/ivm/memory-source.js +24 -23
  134. package/out/zql/src/ivm/memory-source.js.map +1 -1
  135. package/out/zql/src/ivm/operator.d.ts +0 -12
  136. package/out/zql/src/ivm/operator.d.ts.map +1 -1
  137. package/out/zql/src/ivm/operator.js.map +1 -1
  138. package/out/zql/src/ivm/skip.d.ts +0 -1
  139. package/out/zql/src/ivm/skip.d.ts.map +1 -1
  140. package/out/zql/src/ivm/skip.js +3 -11
  141. package/out/zql/src/ivm/skip.js.map +1 -1
  142. package/out/zql/src/ivm/take.d.ts +0 -1
  143. package/out/zql/src/ivm/take.d.ts.map +1 -1
  144. package/out/zql/src/ivm/take.js +0 -17
  145. package/out/zql/src/ivm/take.js.map +1 -1
  146. package/out/zql/src/ivm/union-fan-in.d.ts +0 -1
  147. package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
  148. package/out/zql/src/ivm/union-fan-in.js +0 -3
  149. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  150. package/out/zql/src/ivm/union-fan-out.d.ts +0 -1
  151. package/out/zql/src/ivm/union-fan-out.d.ts.map +1 -1
  152. package/out/zql/src/ivm/union-fan-out.js +0 -3
  153. package/out/zql/src/ivm/union-fan-out.js.map +1 -1
  154. package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
  155. package/out/zql/src/ivm/view-apply-change.js +1 -2
  156. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  157. package/out/zql/src/mutate/mutator.d.ts +2 -2
  158. package/out/zql/src/mutate/mutator.d.ts.map +1 -1
  159. package/out/zql/src/mutate/mutator.js.map +1 -1
  160. package/out/zql/src/query/create-builder.d.ts +2 -2
  161. package/out/zql/src/query/create-builder.d.ts.map +1 -1
  162. package/out/zql/src/query/create-builder.js +12 -3
  163. package/out/zql/src/query/create-builder.js.map +1 -1
  164. package/out/zql/src/query/measure-push-operator.d.ts +0 -1
  165. package/out/zql/src/query/measure-push-operator.d.ts.map +1 -1
  166. package/out/zql/src/query/measure-push-operator.js +0 -3
  167. package/out/zql/src/query/measure-push-operator.js.map +1 -1
  168. package/out/zql/src/query/query.d.ts +18 -5
  169. package/out/zql/src/query/query.d.ts.map +1 -1
  170. package/out/zqlite/src/table-source.d.ts.map +1 -1
  171. package/out/zqlite/src/table-source.js +6 -10
  172. package/out/zqlite/src/table-source.js.map +1 -1
  173. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sources":["../../../../../zero-client/src/client/connection.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {unreachable} from '../../../shared/src/asserts.ts';\nimport {ErrorKind} from '../../../zero-protocol/src/error-kind.ts';\nimport type {\n ConnectionManager,\n ConnectionManagerState,\n} from './connection-manager.ts';\nimport {ConnectionStatus} from './connection-status.ts';\n\n/**\n * The current connection state of the Zero instance. One of the following states:\n *\n * - `connecting`: The client is actively trying to connect every 5 seconds.\n * - `disconnected`: The client is now in an \"offline\" state. It will continue\n * to try to connect every 5 seconds.\n * - `connected`: The client has opened a successful connection to the server.\n * - `needs-auth`: Authentication is invalid or expired. No connection retries will be made\n * until the host application calls `connect()`.\n * - `error`: A fatal error occurred. No connection retries will be made until the host\n * application calls `connect()` again.\n * - `closed`: The client was shut down (for example via `zero.close()`). This is\n * a terminal state, and a new Zero instance must be created to reconnect.\n */\nexport type ConnectionState =\n | {\n name: 'disconnected';\n reason: string;\n }\n | {\n name: 'connecting';\n reason?: string;\n }\n | {\n name: 'connected';\n }\n | {\n name: 'needs-auth';\n reason:\n | {\n type: 'mutate';\n status: 401 | 403;\n body?: string;\n }\n | {\n type: 'query';\n status: 401 | 403;\n body?: string;\n }\n | {\n type: 'zero-cache';\n reason: string;\n };\n }\n | {\n name: 'error';\n reason: string;\n }\n | {\n name: 'closed';\n reason: string;\n };\n\nexport interface Source<T> {\n /**\n * The current state value.\n */\n readonly current: T;\n\n /**\n * Subscribe to state changes.\n *\n * @param listener - Called when the state changes with the new state value.\n * @returns A function to unsubscribe from state changes.\n */\n subscribe(listener: (state: T) => void): () => void;\n}\n\n/**\n * Connection API for managing Zero's connection lifecycle.\n */\nexport interface Connection {\n /**\n * The current connection state as a subscribable value.\n */\n readonly state: Source<ConnectionState>;\n\n /**\n * Resumes the connection from a terminal state.\n *\n * If called when not in a terminal state, this method does nothing.\n *\n * @param opts - Optional connection options\n * @param opts.auth - Token to use for authentication. If provided, this overrides\n * the stored auth credential for this connection attempt.\n * If `null` or `undefined`, the stored auth credential is cleared.\n * @returns A promise that resolves once the connection state has transitioned to connecting.\n */\n connect(opts?: {auth: string | null | undefined}): Promise<void>;\n}\n\nexport class ConnectionImpl implements Connection {\n readonly #connectionManager: ConnectionManager;\n readonly #lc: LogContext;\n readonly #source: ConnectionSource;\n readonly #setAuth: (auth: string | null | undefined) => void;\n\n constructor(\n connectionManager: ConnectionManager,\n lc: LogContext,\n setAuth: (auth: string | null | undefined) => void,\n ) {\n this.#connectionManager = connectionManager;\n this.#lc = lc;\n this.#source = new ConnectionSource(connectionManager);\n this.#setAuth = setAuth;\n }\n\n get state(): Source<ConnectionState> {\n return this.#source;\n }\n\n async connect(opts?: {auth: string | null | undefined}): Promise<void> {\n const lc = this.#lc.withContext('connect');\n\n if (opts && 'auth' in opts) {\n lc.debug?.('Updating auth credential from connect()');\n this.#setAuth(opts.auth);\n }\n\n // only allow connect() to be called from a terminal state\n if (!this.#connectionManager.isInTerminalState()) {\n lc.debug?.(\n 'connect() called but not in a terminal state. Current state:',\n this.#connectionManager.state.name,\n );\n return;\n }\n\n lc.info?.(\n `Resuming connection from state: ${this.#connectionManager.state.name}`,\n );\n\n // Transition to connecting, which will trigger the state change resolver\n // and unblock the run loop. Wait for the next state change (connected, disconnected, etc.)\n const {nextStatePromise} = this.#connectionManager.connecting();\n await nextStatePromise;\n }\n}\n\nexport class ConnectionSource implements Source<ConnectionState> {\n #state: ConnectionState;\n readonly #connectionManager: ConnectionManager;\n\n constructor(connectionManager: ConnectionManager) {\n this.#connectionManager = connectionManager;\n this.#state = this.#mapConnectionManagerState(connectionManager.state);\n }\n\n get current(): ConnectionState {\n return this.#state;\n }\n\n subscribe = (listener: (s: ConnectionState) => void): (() => void) =>\n this.#connectionManager.subscribe(state => {\n this.#state = this.#mapConnectionManagerState(state);\n listener(this.#state);\n });\n\n #mapConnectionManagerState(state: ConnectionManagerState): ConnectionState {\n switch (state.name) {\n case ConnectionStatus.Closed:\n return {\n name: 'closed',\n reason: state.reason.message,\n };\n case ConnectionStatus.Connected:\n return {\n name: 'connected',\n };\n case ConnectionStatus.Connecting:\n return {\n name: 'connecting',\n ...(state.reason?.message ? {reason: state.reason.message} : {}),\n };\n case ConnectionStatus.Disconnected:\n return {\n name: 'disconnected',\n reason: state.reason.message,\n };\n case ConnectionStatus.Error:\n return {\n name: 'error',\n reason: state.reason.message,\n };\n case ConnectionStatus.NeedsAuth:\n return {\n name: 'needs-auth',\n reason:\n state.reason.errorBody.kind === ErrorKind.PushFailed\n ? {\n type: 'mutate',\n status: state.reason.errorBody.status,\n ...(state.reason.errorBody.bodyPreview\n ? {body: state.reason.errorBody.bodyPreview}\n : {}),\n }\n : state.reason.errorBody.kind === ErrorKind.TransformFailed\n ? {\n type: 'query',\n status: state.reason.errorBody.status,\n ...(state.reason.errorBody.bodyPreview\n ? {body: state.reason.errorBody.bodyPreview}\n : {}),\n }\n : {\n type: 'zero-cache',\n reason: state.reason.message,\n },\n };\n\n default:\n unreachable(state);\n }\n }\n}\n"],"names":["ConnectionStatus.Closed","ConnectionStatus.Connected","ConnectionStatus.Connecting","ConnectionStatus.Disconnected","ConnectionStatus.Error","ConnectionStatus.NeedsAuth","ErrorKind.PushFailed","ErrorKind.TransformFailed"],"mappings":";;;AAoGO,MAAM,eAAqC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YACE,mBACA,IACA,SACA;AACA,SAAK,qBAAqB;AAC1B,SAAK,MAAM;AACX,SAAK,UAAU,IAAI,iBAAiB,iBAAiB;AACrD,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,IAAI,QAAiC;AACnC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,QAAQ,MAAyD;AACrE,UAAM,KAAK,KAAK,IAAI,YAAY,SAAS;AAEzC,QAAI,QAAQ,UAAU,MAAM;AAC1B,SAAG,QAAQ,yCAAyC;AACpD,WAAK,SAAS,KAAK,IAAI;AAAA,IACzB;AAGA,QAAI,CAAC,KAAK,mBAAmB,qBAAqB;AAChD,SAAG;AAAA,QACD;AAAA,QACA,KAAK,mBAAmB,MAAM;AAAA,MAAA;AAEhC;AAAA,IACF;AAEA,OAAG;AAAA,MACD,mCAAmC,KAAK,mBAAmB,MAAM,IAAI;AAAA,IAAA;AAKvE,UAAM,EAAC,iBAAA,IAAoB,KAAK,mBAAmB,WAAA;AACnD,UAAM;AAAA,EACR;AACF;AAEO,MAAM,iBAAoD;AAAA,EAC/D;AAAA,EACS;AAAA,EAET,YAAY,mBAAsC;AAChD,SAAK,qBAAqB;AAC1B,SAAK,SAAS,KAAK,2BAA2B,kBAAkB,KAAK;AAAA,EACvE;AAAA,EAEA,IAAI,UAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY,CAAC,aACX,KAAK,mBAAmB,UAAU,CAAA,UAAS;AACzC,SAAK,SAAS,KAAK,2BAA2B,KAAK;AACnD,aAAS,KAAK,MAAM;AAAA,EACtB,CAAC;AAAA,EAEH,2BAA2B,OAAgD;AACzE,YAAQ,MAAM,MAAA;AAAA,MACZ,KAAKA;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ,MAAM,OAAO;AAAA,QAAA;AAAA,MAEzB,KAAKC;AACH,eAAO;AAAA,UACL,MAAM;AAAA,QAAA;AAAA,MAEV,KAAKC;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,GAAI,MAAM,QAAQ,UAAU,EAAC,QAAQ,MAAM,OAAO,YAAW,CAAA;AAAA,QAAC;AAAA,MAElE,KAAKC;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ,MAAM,OAAO;AAAA,QAAA;AAAA,MAEzB,KAAKC;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ,MAAM,OAAO;AAAA,QAAA;AAAA,MAEzB,KAAKC;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QACE,MAAM,OAAO,UAAU,SAASC,aAC5B;AAAA,YACE,MAAM;AAAA,YACN,QAAQ,MAAM,OAAO,UAAU;AAAA,YAC/B,GAAI,MAAM,OAAO,UAAU,cACvB,EAAC,MAAM,MAAM,OAAO,UAAU,gBAC9B,CAAA;AAAA,UAAC,IAEP,MAAM,OAAO,UAAU,SAASC,kBAC9B;AAAA,YACE,MAAM;AAAA,YACN,QAAQ,MAAM,OAAO,UAAU;AAAA,YAC/B,GAAI,MAAM,OAAO,UAAU,cACvB,EAAC,MAAM,MAAM,OAAO,UAAU,gBAC9B,CAAA;AAAA,UAAC,IAEP;AAAA,YACE,MAAM;AAAA,YACN,QAAQ,MAAM,OAAO;AAAA,UAAA;AAAA,QACvB;AAAA,MAGZ;AACE,oBAAiB;AAAA,IAAA;AAAA,EAEvB;AACF;"}
1
+ {"version":3,"file":"connection.js","sources":["../../../../../zero-client/src/client/connection.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {unreachable} from '../../../shared/src/asserts.ts';\nimport {ErrorKind} from '../../../zero-protocol/src/error-kind.ts';\nimport {ClientErrorKind} from './client-error-kind.ts';\nimport type {\n ConnectionManager,\n ConnectionManagerState,\n} from './connection-manager.ts';\nimport {ConnectionStatus} from './connection-status.ts';\n\n/**\n * The current connection state of the Zero instance. One of the following states:\n *\n * - `connecting`: The client is actively trying to connect every 5 seconds.\n * - `disconnected`: The client is now in an \"offline\" state. It will continue\n * to try to connect every 5 seconds.\n * - `connected`: The client has opened a successful connection to the server.\n * - `needs-auth`: Authentication is invalid or expired. No connection retries will be made\n * until the host application calls `connect()`.\n * - `error`: A fatal error occurred. No connection retries will be made until the host\n * application calls `connect()` again.\n * - `closed`: The client was shut down (for example via `zero.close()`). This is\n * a terminal state, and a new Zero instance must be created to reconnect.\n */\nexport type ConnectionState =\n | {\n name: 'disconnected';\n reason: string;\n }\n | {\n name: 'connecting';\n reason?: string;\n }\n | {\n name: 'connected';\n }\n | {\n name: 'needs-auth';\n reason:\n | {\n type: 'mutate';\n status: 401 | 403;\n body?: string;\n }\n | {\n type: 'query';\n status: 401 | 403;\n body?: string;\n }\n | {\n type: 'zero-cache';\n reason: string;\n };\n }\n | {\n name: 'error';\n reason: string;\n }\n | {\n name: 'closed';\n reason: string;\n };\n\nexport interface Source<T> {\n /**\n * The current state value.\n */\n readonly current: T;\n\n /**\n * Subscribe to state changes.\n *\n * @param listener - Called when the state changes with the new state value.\n * @returns A function to unsubscribe from state changes.\n */\n subscribe(listener: (state: T) => void): () => void;\n}\n\n/**\n * Connection API for managing Zero's connection lifecycle.\n */\nexport interface Connection {\n /**\n * The current connection state as a subscribable value.\n */\n readonly state: Source<ConnectionState>;\n\n /**\n * Resumes the connection from a terminal state.\n *\n * If called when not in a terminal state, this method does nothing.\n *\n * @param opts - Optional connection options\n * @param opts.auth - Token to use for authentication. If provided, this overrides\n * the stored auth credential for this connection attempt.\n * If `null` or `undefined`, the stored auth credential is cleared.\n * @returns A promise that resolves once the connection state has transitioned to connecting.\n */\n connect(opts?: {auth: string | null | undefined}): Promise<void>;\n}\n\nexport class ConnectionImpl implements Connection {\n readonly #connectionManager: ConnectionManager;\n readonly #lc: LogContext;\n readonly #source: ConnectionSource;\n readonly #setAuth: (auth: string | null | undefined) => void;\n\n constructor(\n connectionManager: ConnectionManager,\n lc: LogContext,\n setAuth: (auth: string | null | undefined) => void,\n ) {\n this.#connectionManager = connectionManager;\n this.#lc = lc;\n this.#source = new ConnectionSource(connectionManager);\n this.#setAuth = setAuth;\n }\n\n get state(): Source<ConnectionState> {\n return this.#source;\n }\n\n async connect(opts?: {auth: string | null | undefined}): Promise<void> {\n const lc = this.#lc.withContext('connect');\n\n if (opts && 'auth' in opts) {\n lc.debug?.('Updating auth credential from connect()');\n this.#setAuth(opts.auth);\n }\n\n // if the connection is disconnected due to a missing cacheURL, we don't allow a reconnect\n if (\n this.#connectionManager.state.name === ConnectionStatus.Disconnected &&\n this.#connectionManager.state.reason.kind ===\n ClientErrorKind.NoSocketOrigin\n ) {\n lc.error?.(\n 'connect() called but the connection is disconnected due to a missing cacheURL. No reconnect will be attempted.',\n );\n return;\n }\n\n // only allow connect() to be called from a terminal state\n if (!this.#connectionManager.isInTerminalState()) {\n lc.debug?.(\n 'connect() called but not in a terminal state. Current state:',\n this.#connectionManager.state.name,\n );\n return;\n }\n\n lc.info?.(\n `Resuming connection from state: ${this.#connectionManager.state.name}`,\n );\n\n // Transition to connecting, which will trigger the state change resolver\n // and unblock the run loop. Wait for the next state change (connected, disconnected, etc.)\n const {nextStatePromise} = this.#connectionManager.connecting();\n await nextStatePromise;\n }\n}\n\nexport class ConnectionSource implements Source<ConnectionState> {\n #state: ConnectionState;\n readonly #connectionManager: ConnectionManager;\n\n constructor(connectionManager: ConnectionManager) {\n this.#connectionManager = connectionManager;\n this.#state = this.#mapConnectionManagerState(connectionManager.state);\n }\n\n get current(): ConnectionState {\n return this.#state;\n }\n\n subscribe = (listener: (s: ConnectionState) => void): (() => void) =>\n this.#connectionManager.subscribe(state => {\n this.#state = this.#mapConnectionManagerState(state);\n listener(this.#state);\n });\n\n #mapConnectionManagerState(state: ConnectionManagerState): ConnectionState {\n switch (state.name) {\n case ConnectionStatus.Closed:\n return {\n name: 'closed',\n reason: state.reason.message,\n };\n case ConnectionStatus.Connected:\n return {\n name: 'connected',\n };\n case ConnectionStatus.Connecting:\n return {\n name: 'connecting',\n ...(state.reason?.message ? {reason: state.reason.message} : {}),\n };\n case ConnectionStatus.Disconnected:\n return {\n name: 'disconnected',\n reason: state.reason.message,\n };\n case ConnectionStatus.Error:\n return {\n name: 'error',\n reason: state.reason.message,\n };\n case ConnectionStatus.NeedsAuth:\n return {\n name: 'needs-auth',\n reason:\n state.reason.errorBody.kind === ErrorKind.PushFailed\n ? {\n type: 'mutate',\n status: state.reason.errorBody.status,\n ...(state.reason.errorBody.bodyPreview\n ? {body: state.reason.errorBody.bodyPreview}\n : {}),\n }\n : state.reason.errorBody.kind === ErrorKind.TransformFailed\n ? {\n type: 'query',\n status: state.reason.errorBody.status,\n ...(state.reason.errorBody.bodyPreview\n ? {body: state.reason.errorBody.bodyPreview}\n : {}),\n }\n : {\n type: 'zero-cache',\n reason: state.reason.message,\n },\n };\n\n default:\n unreachable(state);\n }\n }\n}\n"],"names":["ConnectionStatus.Disconnected","ClientErrorKind.NoSocketOrigin","ConnectionStatus.Closed","ConnectionStatus.Connected","ConnectionStatus.Connecting","ConnectionStatus.Error","ConnectionStatus.NeedsAuth","ErrorKind.PushFailed","ErrorKind.TransformFailed"],"mappings":";;;;AAqGO,MAAM,eAAqC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YACE,mBACA,IACA,SACA;AACA,SAAK,qBAAqB;AAC1B,SAAK,MAAM;AACX,SAAK,UAAU,IAAI,iBAAiB,iBAAiB;AACrD,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,IAAI,QAAiC;AACnC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,QAAQ,MAAyD;AACrE,UAAM,KAAK,KAAK,IAAI,YAAY,SAAS;AAEzC,QAAI,QAAQ,UAAU,MAAM;AAC1B,SAAG,QAAQ,yCAAyC;AACpD,WAAK,SAAS,KAAK,IAAI;AAAA,IACzB;AAGA,QACE,KAAK,mBAAmB,MAAM,SAASA,gBACvC,KAAK,mBAAmB,MAAM,OAAO,SACnCC,gBACF;AACA,SAAG;AAAA,QACD;AAAA,MAAA;AAEF;AAAA,IACF;AAGA,QAAI,CAAC,KAAK,mBAAmB,qBAAqB;AAChD,SAAG;AAAA,QACD;AAAA,QACA,KAAK,mBAAmB,MAAM;AAAA,MAAA;AAEhC;AAAA,IACF;AAEA,OAAG;AAAA,MACD,mCAAmC,KAAK,mBAAmB,MAAM,IAAI;AAAA,IAAA;AAKvE,UAAM,EAAC,iBAAA,IAAoB,KAAK,mBAAmB,WAAA;AACnD,UAAM;AAAA,EACR;AACF;AAEO,MAAM,iBAAoD;AAAA,EAC/D;AAAA,EACS;AAAA,EAET,YAAY,mBAAsC;AAChD,SAAK,qBAAqB;AAC1B,SAAK,SAAS,KAAK,2BAA2B,kBAAkB,KAAK;AAAA,EACvE;AAAA,EAEA,IAAI,UAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY,CAAC,aACX,KAAK,mBAAmB,UAAU,CAAA,UAAS;AACzC,SAAK,SAAS,KAAK,2BAA2B,KAAK;AACnD,aAAS,KAAK,MAAM;AAAA,EACtB,CAAC;AAAA,EAEH,2BAA2B,OAAgD;AACzE,YAAQ,MAAM,MAAA;AAAA,MACZ,KAAKC;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ,MAAM,OAAO;AAAA,QAAA;AAAA,MAEzB,KAAKC;AACH,eAAO;AAAA,UACL,MAAM;AAAA,QAAA;AAAA,MAEV,KAAKC;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,GAAI,MAAM,QAAQ,UAAU,EAAC,QAAQ,MAAM,OAAO,YAAW,CAAA;AAAA,QAAC;AAAA,MAElE,KAAKJ;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ,MAAM,OAAO;AAAA,QAAA;AAAA,MAEzB,KAAKK;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ,MAAM,OAAO;AAAA,QAAA;AAAA,MAEzB,KAAKC;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QACE,MAAM,OAAO,UAAU,SAASC,aAC5B;AAAA,YACE,MAAM;AAAA,YACN,QAAQ,MAAM,OAAO,UAAU;AAAA,YAC/B,GAAI,MAAM,OAAO,UAAU,cACvB,EAAC,MAAM,MAAM,OAAO,UAAU,gBAC9B,CAAA;AAAA,UAAC,IAEP,MAAM,OAAO,UAAU,SAASC,kBAC9B;AAAA,YACE,MAAM;AAAA,YACN,QAAQ,MAAM,OAAO,UAAU;AAAA,YAC/B,GAAI,MAAM,OAAO,UAAU,cACvB,EAAC,MAAM,MAAM,OAAO,UAAU,gBAC9B,CAAA;AAAA,UAAC,IAEP;AAAA,YACE,MAAM;AAAA,YACN,QAAQ,MAAM,OAAO;AAAA,UAAA;AAAA,QACvB;AAAA,MAGZ;AACE,oBAAiB;AAAA,IAAA;AAAA,EAEvB;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/custom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/custom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,+CAA+C,CAAC;AAI9E,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAInE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0CAA0C,CAAC;AAC5E,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAC9D,OAAO,KAAK,EACV,iBAAiB,EAGjB,UAAU,EAEV,WAAW,EAGZ,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,wCAAwC,CAAC;AACxE,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAIvD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAE5D;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAE9B,CAAC,cAAc,EAAE,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EACV;QACE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC;KACjD,GACD;QACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;CACP,CAAC;AAEN,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAC/C,oBAAoB,EACpB;IAAC,IAAI,EAAE,SAAS,CAAA;CAAC,CAClB,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,oBAAoB,EACpB;IAAC,IAAI,EAAE,OAAO,CAAA;CAAC,CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,OAAO,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;IAC3C,MAAM,EAAE,OAAO,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;CAC5C,GAAG,EAAE,CAAC;AAEP,MAAM,MAAM,iBAAiB,CAC3B,CAAC,SAAS,MAAM,EAChB,mBAAmB,GAAG,OAAO,EAE7B,KAAK,GAAG,GAAG,EACX,OAAO,GAAG,OAAO,IACf,CACF,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,mBAAmB,CAAC,EAGvC,IAAI,EAAE,KAAK,EACX,GAAG,EAAE,OAAO,KACT,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB;;;;;;;GAOG;AACH,MAAM,MAAM,2BAA2B,CACrC,CAAC,SAAS,MAAM,EAChB,EAAE,SAAS,iBAAiB,EAC5B,QAAQ,IACN;IACF,QAAQ,EAAE,eAAe,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAClE,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,EAClB,GAAG,IAAI,EAAE,MAAM,IAAI,KAChB,OAAO,CAAC,IAAI,CAAC,GACd,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,aAAa,GAChC,EAAE,CAAC,eAAe,CAAC,SAAS,iBAAiB,GAC3C,2BAA2B,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,GAC7D,KAAK;CACZ,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,OAAO,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAC5E,EAAE,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAC9B,GAAG,IAAI,EAAE,MAAM,IAAI,KAChB,OAAO,CAAC,IAAI,CAAC,GACd,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,aAAa,GAChC,KAAK,CAAC;AAEV,qBAAa,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,aAAa,CACjE,YAAW,iBAAiB,CAAC,OAAO,CAAC;;IAErC,QAAQ,CAAC,QAAQ,YAAY;IAC7B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;gBAIzB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO;IAoBpE,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,MAAM,IAAI,YAAY,GAAG,QAAQ,CAEpC;IAED,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,GAAG,CAAC,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,EAC1D,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EACtC,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;CAGnC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAMjE;AAED,wBAAgB,qBAAqB,CACnC,CAAC,SAAS,MAAM,EAChB,mBAAmB,EACnB,OAAO,EAEP,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,iBAAiB,CAAC,CAAC,EAAE,mBAAmB,CAAC,EAClD,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,OAAO,GACf,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAQrE"}
@@ -2,7 +2,7 @@ import { zeroData } from "../../../replicache/src/transactions.js";
2
2
  import { assert } from "../../../shared/src/asserts.js";
3
3
  import { must } from "../../../shared/src/must.js";
4
4
  import { emptyFunction } from "../../../shared/src/sentinels.js";
5
- import { createBuilder } from "../../../zql/src/query/create-builder.js";
5
+ import { createRunnableBuilder } from "../../../zql/src/query/create-builder.js";
6
6
  import "../../../zero-protocol/src/ast.js";
7
7
  import { ZeroContext } from "./context.js";
8
8
  import { deleteImpl, updateImpl, upsertImpl, insertImpl } from "./crud.js";
@@ -21,11 +21,12 @@ class TransactionImpl {
21
21
  repTx,
22
22
  txData.ivmSources
23
23
  );
24
- this.query = createBuilder(schema);
25
- this.#zeroContext = newZeroContext(
24
+ const zeroContext = newZeroContext(
26
25
  lc,
27
26
  txData.ivmSources
28
27
  );
28
+ this.query = createRunnableBuilder(zeroContext, schema);
29
+ this.#zeroContext = zeroContext;
29
30
  }
30
31
  get clientID() {
31
32
  return this.#repTx.clientID;
@@ -1 +1 @@
1
- {"version":3,"file":"custom.js","sources":["../../../../../zero-client/src/client/custom.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport type {ZeroTxData} from '../../../replicache/src/replicache-options.ts';\nimport type {WriteTransactionImpl} from '../../../replicache/src/transactions.ts';\nimport {zeroData} from '../../../replicache/src/transactions.ts';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport {emptyFunction} from '../../../shared/src/sentinels.ts';\nimport type {TableSchema} from '../../../zero-schema/src/table-schema.ts';\nimport type {DefaultSchema} from '../../../zero-types/src/default-types.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport type {\n ClientTransaction,\n DeleteID,\n InsertValue,\n SchemaCRUD,\n TableCRUD,\n Transaction,\n UpdateValue,\n UpsertValue,\n} from '../../../zql/src/mutate/custom.ts';\nimport {createBuilder} from '../../../zql/src/query/create-builder.ts';\nimport {\n type HumanReadable,\n type Query,\n type RunOptions,\n} from '../../../zql/src/query/query.ts';\nimport type {SchemaQuery} from '../../../zql/src/query/schema-query.ts';\nimport type {ClientID} from '../types/client-state.ts';\nimport {ZeroContext} from './context.ts';\nimport {deleteImpl, insertImpl, updateImpl, upsertImpl} from './crud.ts';\nimport type {IVMSourceBranch} from './ivm-branch.ts';\nimport type {WriteTransaction} from './replicache-types.ts';\n\n/**\n * The shape which a user's custom mutator definitions must conform to.\n * Supports arbitrary depth nesting of namespaces.\n */\nexport type CustomMutatorDefs = {\n // oxlint-disable-next-line no-explicit-any\n [namespaceOrKey: string]: CustomMutatorImpl<any> | CustomMutatorDefs;\n};\n\nexport type MutatorResultDetails =\n | {\n readonly type: 'success';\n }\n | {\n readonly type: 'error';\n readonly error:\n | {\n readonly type: 'app';\n readonly message: string;\n readonly details: ReadonlyJSONValue | undefined;\n }\n | {\n readonly type: 'zero';\n readonly message: string;\n };\n };\n\nexport type MutatorResultSuccessDetails = Extract<\n MutatorResultDetails,\n {type: 'success'}\n>;\nexport type MutatorResultErrorDetails = Extract<\n MutatorResultDetails,\n {type: 'error'}\n>;\n\nexport type MutatorResult = {\n client: Promise<MutatorResultDetails & {}>;\n server: Promise<MutatorResultDetails & {}>;\n} & {};\n\nexport type CustomMutatorImpl<\n S extends Schema,\n TWrappedTransaction = unknown,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n TArgs = any,\n Context = unknown,\n> = (\n tx: Transaction<S, TWrappedTransaction>,\n // TODO: many args. See commit: 52657c2f934b4a458d628ea77e56ce92b61eb3c6 which did have many args.\n // The issue being that it will be a protocol change to support varargs.\n args: TArgs,\n ctx: Context,\n) => Promise<void>;\n\n/**\n * The shape exposed on the `Zero.mutate` instance.\n * The signature of a custom mutator takes a `transaction` as its first arg\n * but the user does not provide this arg when calling the mutator.\n *\n * This utility strips the `tx` arg from the user's custom mutator signatures.\n * Supports arbitrary depth nesting of namespaces.\n */\nexport type MakeCustomMutatorInterfaces<\n S extends Schema,\n MD extends CustomMutatorDefs,\n TContext,\n> = {\n readonly [NamespaceOrName in keyof MD]: MD[NamespaceOrName] extends (\n tx: Transaction<S>,\n ...args: infer Args\n ) => Promise<void>\n ? (...args: Args) => MutatorResult\n : MD[NamespaceOrName] extends CustomMutatorDefs\n ? MakeCustomMutatorInterfaces<S, MD[NamespaceOrName], TContext>\n : never;\n};\n\nexport type MakeCustomMutatorInterface<TSchema extends Schema, F> = F extends (\n tx: ClientTransaction<TSchema>,\n ...args: infer Args\n) => Promise<void>\n ? (...args: Args) => MutatorResult\n : never;\n\nexport class TransactionImpl<TSchema extends Schema = DefaultSchema>\n implements ClientTransaction<TSchema>\n{\n readonly location = 'client';\n readonly mutate: SchemaCRUD<TSchema>;\n readonly query: SchemaQuery<TSchema>;\n readonly #repTx: WriteTransaction;\n readonly #zeroContext: ZeroContext;\n\n constructor(lc: LogContext, repTx: WriteTransaction, schema: TSchema) {\n must(repTx.reason === 'initial' || repTx.reason === 'rebase');\n const txData = getZeroTxData(repTx);\n\n this.#repTx = repTx;\n this.mutate = makeSchemaCRUD(\n schema,\n repTx,\n txData.ivmSources as IVMSourceBranch,\n );\n this.query = createBuilder(schema);\n\n this.#zeroContext = newZeroContext(\n lc,\n txData.ivmSources as IVMSourceBranch,\n );\n }\n\n get clientID(): ClientID {\n return this.#repTx.clientID;\n }\n\n get mutationID(): number {\n return this.#repTx.mutationID;\n }\n\n get reason(): 'optimistic' | 'rebase' {\n return this.#repTx.reason === 'initial' ? 'optimistic' : 'rebase';\n }\n\n get token(): string | undefined {\n return (this.#repTx as WriteTransactionImpl)[zeroData]?.token;\n }\n\n run<TTable extends keyof TSchema['tables'] & string, TReturn>(\n query: Query<TTable, TSchema, TReturn>,\n options?: RunOptions,\n ): Promise<HumanReadable<TReturn>> {\n return this.#zeroContext.run(query, options);\n }\n}\n\nexport function getZeroTxData(repTx: WriteTransaction): ZeroTxData {\n const txData = must(\n (repTx as WriteTransactionImpl)[zeroData],\n 'zero was not set on replicache internal options!',\n );\n return txData as ZeroTxData;\n}\n\nexport function makeReplicacheMutator<\n S extends Schema,\n TWrappedTransaction,\n Context,\n>(\n lc: LogContext,\n mutator: CustomMutatorImpl<S, TWrappedTransaction>,\n schema: S,\n context: Context,\n): (repTx: WriteTransaction, args: ReadonlyJSONValue) => Promise<void> {\n return async (\n repTx: WriteTransaction,\n args: ReadonlyJSONValue,\n ): Promise<void> => {\n const tx = new TransactionImpl(lc, repTx, schema);\n await mutator(tx, args, context);\n };\n}\n\nfunction makeSchemaCRUD<S extends Schema>(\n schema: S,\n tx: WriteTransaction,\n ivmBranch: IVMSourceBranch,\n) {\n // Only creates the CRUD mutators on demand\n // rather than creating them all up-front for each mutation.\n return new Proxy(\n {},\n {\n get(target: Record<string, TableCRUD<TableSchema>>, prop: string) {\n if (prop in target) {\n return target[prop];\n }\n\n target[prop] = makeTableCRUD(schema, prop, tx, ivmBranch);\n return target[prop];\n },\n },\n ) as SchemaCRUD<S>;\n}\n\nfunction assertValidRunOptions(options: RunOptions | undefined): void {\n // TODO(arv): We should enforce this with the type system too.\n assert(\n options?.type !== 'complete',\n 'Cannot wait for complete results in custom mutations',\n );\n}\n\nfunction newZeroContext(lc: LogContext, ivmBranch: IVMSourceBranch) {\n return new ZeroContext(\n lc,\n ivmBranch,\n () => emptyFunction,\n () => emptyFunction,\n emptyFunction,\n emptyFunction,\n emptyFunction,\n applyViewUpdates => applyViewUpdates(),\n emptyFunction,\n assertValidRunOptions,\n );\n}\n\nfunction makeTableCRUD(\n schema: Schema,\n tableName: string,\n tx: WriteTransaction,\n ivmBranch: IVMSourceBranch,\n) {\n const table = must(schema.tables[tableName]);\n const {primaryKey} = table;\n return {\n insert: (value: InsertValue<TableSchema>) =>\n insertImpl(\n tx,\n {op: 'insert', tableName, primaryKey, value},\n schema,\n ivmBranch,\n ),\n upsert: (value: UpsertValue<TableSchema>) =>\n upsertImpl(\n tx,\n {op: 'upsert', tableName, primaryKey, value},\n schema,\n ivmBranch,\n ),\n update: (value: UpdateValue<TableSchema>) =>\n updateImpl(\n tx,\n {op: 'update', tableName, primaryKey, value},\n schema,\n ivmBranch,\n ),\n delete: (id: DeleteID<TableSchema>) =>\n deleteImpl(\n tx,\n {op: 'delete', tableName, primaryKey, value: id},\n schema,\n ivmBranch,\n ),\n };\n}\n"],"names":[],"mappings":";;;;;;;;AAuHO,MAAM,gBAEb;AAAA,EACW,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,IAAgB,OAAyB,QAAiB;AACpE,SAAK,MAAM,WAAW,aAAa,MAAM,WAAW,QAAQ;AAC5D,UAAM,SAAS,cAAc,KAAK;AAElC,SAAK,SAAS;AACd,SAAK,SAAS;AAAA,MACZ;AAAA,MACA;AAAA,MACA,OAAO;AAAA,IAAA;AAET,SAAK,QAAQ,cAAc,MAAM;AAEjC,SAAK,eAAe;AAAA,MAClB;AAAA,MACA,OAAO;AAAA,IAAA;AAAA,EAEX;AAAA,EAEA,IAAI,WAAqB;AACvB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,aAAqB;AACvB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,SAAkC;AACpC,WAAO,KAAK,OAAO,WAAW,YAAY,eAAe;AAAA,EAC3D;AAAA,EAEA,IAAI,QAA4B;AAC9B,WAAQ,KAAK,OAAgC,QAAQ,GAAG;AAAA,EAC1D;AAAA,EAEA,IACE,OACA,SACiC;AACjC,WAAO,KAAK,aAAa,IAAI,OAAO,OAAO;AAAA,EAC7C;AACF;AAEO,SAAS,cAAc,OAAqC;AACjE,QAAM,SAAS;AAAA,IACZ,MAA+B,QAAQ;AAAA,IACxC;AAAA,EAAA;AAEF,SAAO;AACT;AAEO,SAAS,sBAKd,IACA,SACA,QACA,SACqE;AACrE,SAAO,OACL,OACA,SACkB;AAClB,UAAM,KAAK,IAAI,gBAAgB,IAAI,OAAO,MAAM;AAChD,UAAM,QAAQ,IAAI,MAAM,OAAO;AAAA,EACjC;AACF;AAEA,SAAS,eACP,QACA,IACA,WACA;AAGA,SAAO,IAAI;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAI,QAAgD,MAAc;AAChE,YAAI,QAAQ,QAAQ;AAClB,iBAAO,OAAO,IAAI;AAAA,QACpB;AAEA,eAAO,IAAI,IAAI,cAAc,QAAQ,MAAM,IAAI,SAAS;AACxD,eAAO,OAAO,IAAI;AAAA,MACpB;AAAA,IAAA;AAAA,EACF;AAEJ;AAEA,SAAS,sBAAsB,SAAuC;AAEpE;AAAA,IACE,SAAS,SAAS;AAAA,IAClB;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAe,IAAgB,WAA4B;AAClE,SAAO,IAAI;AAAA,IACT;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA,sBAAoB,iBAAA;AAAA,IACpB;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,SAAS,cACP,QACA,WACA,IACA,WACA;AACA,QAAM,QAAQ,KAAK,OAAO,OAAO,SAAS,CAAC;AAC3C,QAAM,EAAC,eAAc;AACrB,SAAO;AAAA,IACL,QAAQ,CAAC,UACP;AAAA,MACE;AAAA,MACA,EAAe,WAAuB,MAAA;AAAA,MACtC;AAAA,MACA;AAAA,IAAA;AAAA,IAEJ,QAAQ,CAAC,UACP;AAAA,MACE;AAAA,MACA,EAAC,IAAI,UAAU,WAAW,YAAY,MAAA;AAAA,MACtC;AAAA,MACA;AAAA,IAAA;AAAA,IAEJ,QAAQ,CAAC,UACP;AAAA,MACE;AAAA,MACA,EAAe,WAAuB,MAAA;AAAA,MACtC;AAAA,MACA;AAAA,IAAA;AAAA,IAEJ,QAAQ,CAAC,OACP;AAAA,MACE;AAAA,MACA,EAAe,WAAuB,OAAO,GAAA;AAAA,MAC7C;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAEN;"}
1
+ {"version":3,"file":"custom.js","sources":["../../../../../zero-client/src/client/custom.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport type {ZeroTxData} from '../../../replicache/src/replicache-options.ts';\nimport type {WriteTransactionImpl} from '../../../replicache/src/transactions.ts';\nimport {zeroData} from '../../../replicache/src/transactions.ts';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport {emptyFunction} from '../../../shared/src/sentinels.ts';\nimport type {TableSchema} from '../../../zero-schema/src/table-schema.ts';\nimport type {DefaultSchema} from '../../../zero-types/src/default-types.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport type {\n ClientTransaction,\n DeleteID,\n InsertValue,\n SchemaCRUD,\n TableCRUD,\n Transaction,\n UpdateValue,\n UpsertValue,\n} from '../../../zql/src/mutate/custom.ts';\nimport {createRunnableBuilder} from '../../../zql/src/query/create-builder.ts';\nimport {\n type HumanReadable,\n type Query,\n type RunOptions,\n} from '../../../zql/src/query/query.ts';\nimport type {SchemaQuery} from '../../../zql/src/query/schema-query.ts';\nimport type {ClientID} from '../types/client-state.ts';\nimport {ZeroContext} from './context.ts';\nimport {deleteImpl, insertImpl, updateImpl, upsertImpl} from './crud.ts';\nimport type {IVMSourceBranch} from './ivm-branch.ts';\nimport type {WriteTransaction} from './replicache-types.ts';\n\n/**\n * The shape which a user's custom mutator definitions must conform to.\n * Supports arbitrary depth nesting of namespaces.\n */\nexport type CustomMutatorDefs = {\n // oxlint-disable-next-line no-explicit-any\n [namespaceOrKey: string]: CustomMutatorImpl<any> | CustomMutatorDefs;\n};\n\nexport type MutatorResultDetails =\n | {\n readonly type: 'success';\n }\n | {\n readonly type: 'error';\n readonly error:\n | {\n readonly type: 'app';\n readonly message: string;\n readonly details: ReadonlyJSONValue | undefined;\n }\n | {\n readonly type: 'zero';\n readonly message: string;\n };\n };\n\nexport type MutatorResultSuccessDetails = Extract<\n MutatorResultDetails,\n {type: 'success'}\n>;\nexport type MutatorResultErrorDetails = Extract<\n MutatorResultDetails,\n {type: 'error'}\n>;\n\nexport type MutatorResult = {\n client: Promise<MutatorResultDetails & {}>;\n server: Promise<MutatorResultDetails & {}>;\n} & {};\n\nexport type CustomMutatorImpl<\n S extends Schema,\n TWrappedTransaction = unknown,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n TArgs = any,\n Context = unknown,\n> = (\n tx: Transaction<S, TWrappedTransaction>,\n // TODO: many args. See commit: 52657c2f934b4a458d628ea77e56ce92b61eb3c6 which did have many args.\n // The issue being that it will be a protocol change to support varargs.\n args: TArgs,\n ctx: Context,\n) => Promise<void>;\n\n/**\n * The shape exposed on the `Zero.mutate` instance.\n * The signature of a custom mutator takes a `transaction` as its first arg\n * but the user does not provide this arg when calling the mutator.\n *\n * This utility strips the `tx` arg from the user's custom mutator signatures.\n * Supports arbitrary depth nesting of namespaces.\n */\nexport type MakeCustomMutatorInterfaces<\n S extends Schema,\n MD extends CustomMutatorDefs,\n TContext,\n> = {\n readonly [NamespaceOrName in keyof MD]: MD[NamespaceOrName] extends (\n tx: Transaction<S>,\n ...args: infer Args\n ) => Promise<void>\n ? (...args: Args) => MutatorResult\n : MD[NamespaceOrName] extends CustomMutatorDefs\n ? MakeCustomMutatorInterfaces<S, MD[NamespaceOrName], TContext>\n : never;\n};\n\nexport type MakeCustomMutatorInterface<TSchema extends Schema, F> = F extends (\n tx: ClientTransaction<TSchema>,\n ...args: infer Args\n) => Promise<void>\n ? (...args: Args) => MutatorResult\n : never;\n\nexport class TransactionImpl<TSchema extends Schema = DefaultSchema>\n implements ClientTransaction<TSchema>\n{\n readonly location = 'client';\n readonly mutate: SchemaCRUD<TSchema>;\n readonly query: SchemaQuery<TSchema>;\n readonly #repTx: WriteTransaction;\n readonly #zeroContext: ZeroContext;\n\n constructor(lc: LogContext, repTx: WriteTransaction, schema: TSchema) {\n must(repTx.reason === 'initial' || repTx.reason === 'rebase');\n const txData = getZeroTxData(repTx);\n\n this.#repTx = repTx;\n this.mutate = makeSchemaCRUD(\n schema,\n repTx,\n txData.ivmSources as IVMSourceBranch,\n );\n\n const zeroContext = newZeroContext(\n lc,\n txData.ivmSources as IVMSourceBranch,\n );\n\n this.query = createRunnableBuilder(zeroContext, schema);\n this.#zeroContext = zeroContext;\n }\n\n get clientID(): ClientID {\n return this.#repTx.clientID;\n }\n\n get mutationID(): number {\n return this.#repTx.mutationID;\n }\n\n get reason(): 'optimistic' | 'rebase' {\n return this.#repTx.reason === 'initial' ? 'optimistic' : 'rebase';\n }\n\n get token(): string | undefined {\n return (this.#repTx as WriteTransactionImpl)[zeroData]?.token;\n }\n\n run<TTable extends keyof TSchema['tables'] & string, TReturn>(\n query: Query<TTable, TSchema, TReturn>,\n options?: RunOptions,\n ): Promise<HumanReadable<TReturn>> {\n return this.#zeroContext.run(query, options);\n }\n}\n\nexport function getZeroTxData(repTx: WriteTransaction): ZeroTxData {\n const txData = must(\n (repTx as WriteTransactionImpl)[zeroData],\n 'zero was not set on replicache internal options!',\n );\n return txData as ZeroTxData;\n}\n\nexport function makeReplicacheMutator<\n S extends Schema,\n TWrappedTransaction,\n Context,\n>(\n lc: LogContext,\n mutator: CustomMutatorImpl<S, TWrappedTransaction>,\n schema: S,\n context: Context,\n): (repTx: WriteTransaction, args: ReadonlyJSONValue) => Promise<void> {\n return async (\n repTx: WriteTransaction,\n args: ReadonlyJSONValue,\n ): Promise<void> => {\n const tx = new TransactionImpl(lc, repTx, schema);\n await mutator(tx, args, context);\n };\n}\n\nfunction makeSchemaCRUD<S extends Schema>(\n schema: S,\n tx: WriteTransaction,\n ivmBranch: IVMSourceBranch,\n) {\n // Only creates the CRUD mutators on demand\n // rather than creating them all up-front for each mutation.\n return new Proxy(\n {},\n {\n get(target: Record<string, TableCRUD<TableSchema>>, prop: string) {\n if (prop in target) {\n return target[prop];\n }\n\n target[prop] = makeTableCRUD(schema, prop, tx, ivmBranch);\n return target[prop];\n },\n },\n ) as SchemaCRUD<S>;\n}\n\nfunction assertValidRunOptions(options: RunOptions | undefined): void {\n // TODO(arv): We should enforce this with the type system too.\n assert(\n options?.type !== 'complete',\n 'Cannot wait for complete results in custom mutations',\n );\n}\n\nfunction newZeroContext(lc: LogContext, ivmBranch: IVMSourceBranch) {\n return new ZeroContext(\n lc,\n ivmBranch,\n () => emptyFunction,\n () => emptyFunction,\n emptyFunction,\n emptyFunction,\n emptyFunction,\n applyViewUpdates => applyViewUpdates(),\n emptyFunction,\n assertValidRunOptions,\n );\n}\n\nfunction makeTableCRUD(\n schema: Schema,\n tableName: string,\n tx: WriteTransaction,\n ivmBranch: IVMSourceBranch,\n) {\n const table = must(schema.tables[tableName]);\n const {primaryKey} = table;\n return {\n insert: (value: InsertValue<TableSchema>) =>\n insertImpl(\n tx,\n {op: 'insert', tableName, primaryKey, value},\n schema,\n ivmBranch,\n ),\n upsert: (value: UpsertValue<TableSchema>) =>\n upsertImpl(\n tx,\n {op: 'upsert', tableName, primaryKey, value},\n schema,\n ivmBranch,\n ),\n update: (value: UpdateValue<TableSchema>) =>\n updateImpl(\n tx,\n {op: 'update', tableName, primaryKey, value},\n schema,\n ivmBranch,\n ),\n delete: (id: DeleteID<TableSchema>) =>\n deleteImpl(\n tx,\n {op: 'delete', tableName, primaryKey, value: id},\n schema,\n ivmBranch,\n ),\n };\n}\n"],"names":[],"mappings":";;;;;;;;AAuHO,MAAM,gBAEb;AAAA,EACW,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,IAAgB,OAAyB,QAAiB;AACpE,SAAK,MAAM,WAAW,aAAa,MAAM,WAAW,QAAQ;AAC5D,UAAM,SAAS,cAAc,KAAK;AAElC,SAAK,SAAS;AACd,SAAK,SAAS;AAAA,MACZ;AAAA,MACA;AAAA,MACA,OAAO;AAAA,IAAA;AAGT,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,OAAO;AAAA,IAAA;AAGT,SAAK,QAAQ,sBAAsB,aAAa,MAAM;AACtD,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,WAAqB;AACvB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,aAAqB;AACvB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,SAAkC;AACpC,WAAO,KAAK,OAAO,WAAW,YAAY,eAAe;AAAA,EAC3D;AAAA,EAEA,IAAI,QAA4B;AAC9B,WAAQ,KAAK,OAAgC,QAAQ,GAAG;AAAA,EAC1D;AAAA,EAEA,IACE,OACA,SACiC;AACjC,WAAO,KAAK,aAAa,IAAI,OAAO,OAAO;AAAA,EAC7C;AACF;AAEO,SAAS,cAAc,OAAqC;AACjE,QAAM,SAAS;AAAA,IACZ,MAA+B,QAAQ;AAAA,IACxC;AAAA,EAAA;AAEF,SAAO;AACT;AAEO,SAAS,sBAKd,IACA,SACA,QACA,SACqE;AACrE,SAAO,OACL,OACA,SACkB;AAClB,UAAM,KAAK,IAAI,gBAAgB,IAAI,OAAO,MAAM;AAChD,UAAM,QAAQ,IAAI,MAAM,OAAO;AAAA,EACjC;AACF;AAEA,SAAS,eACP,QACA,IACA,WACA;AAGA,SAAO,IAAI;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAI,QAAgD,MAAc;AAChE,YAAI,QAAQ,QAAQ;AAClB,iBAAO,OAAO,IAAI;AAAA,QACpB;AAEA,eAAO,IAAI,IAAI,cAAc,QAAQ,MAAM,IAAI,SAAS;AACxD,eAAO,OAAO,IAAI;AAAA,MACpB;AAAA,IAAA;AAAA,EACF;AAEJ;AAEA,SAAS,sBAAsB,SAAuC;AAEpE;AAAA,IACE,SAAS,SAAS;AAAA,IAClB;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAe,IAAgB,WAA4B;AAClE,SAAO,IAAI;AAAA,IACT;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA,sBAAoB,iBAAA;AAAA,IACpB;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,SAAS,cACP,QACA,WACA,IACA,WACA;AACA,QAAM,QAAQ,KAAK,OAAO,OAAO,SAAS,CAAC;AAC3C,QAAM,EAAC,eAAc;AACrB,SAAO;AAAA,IACL,QAAQ,CAAC,UACP;AAAA,MACE;AAAA,MACA,EAAe,WAAuB,MAAA;AAAA,MACtC;AAAA,MACA;AAAA,IAAA;AAAA,IAEJ,QAAQ,CAAC,UACP;AAAA,MACE;AAAA,MACA,EAAC,IAAI,UAAU,WAAW,YAAY,MAAA;AAAA,MACtC;AAAA,MACA;AAAA,IAAA;AAAA,IAEJ,QAAQ,CAAC,UACP;AAAA,MACE;AAAA,MACA,EAAe,WAAuB,MAAA;AAAA,MACtC;AAAA,MACA;AAAA,IAAA;AAAA,IAEJ,QAAQ,CAAC,OACP;AAAA,MACE;AAAA,MACA,EAAe,WAAuB,OAAO,GAAA;AAAA,MAC7C;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAEN;"}
@@ -31,6 +31,11 @@ export type OfflineError = ClientError<{
31
31
  kind: ClientErrorKind.Offline;
32
32
  message: string;
33
33
  }>;
34
+ export type NoSocketOriginError = ClientError<{
35
+ kind: ClientErrorKind.NoSocketOrigin;
36
+ message: string;
37
+ }>;
38
+ export type DisconnectedReason = OfflineError | NoSocketOriginError;
34
39
  export type ServerError = ProtocolError<ErrorBody>;
35
40
  export type ZeroError = ServerError | ClientError;
36
41
  export type ZeroErrorBody = Expand<ErrorBody | ClientErrorBody>;
@@ -64,7 +69,7 @@ export type ErrorConnectionTransition = {
64
69
  reason: ZeroError;
65
70
  } | {
66
71
  status: ConnectionStatus.Disconnected;
67
- reason: OfflineError;
72
+ reason: DisconnectedReason;
68
73
  } | {
69
74
  status: ConnectionStatus.Closed;
70
75
  reason: ZeroError;
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/error.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/error.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { MutationFailed, MutationRateLimited, Unauthorized, AuthInvalidated, Ser
4
4
  import { Client, Server, ZeroCache } from "../../../zero-protocol/src/error-origin-enum.js";
5
5
  import { HTTP } from "../../../zero-protocol/src/error-reason-enum.js";
6
6
  import { isProtocolError } from "../../../zero-protocol/src/error.js";
7
- import { ClientClosed, Offline, UserDisconnect, InvalidMessage, Internal, UnexpectedBaseCookie, NoSocketOrigin, Hidden, PullTimeout, PingTimeout, ConnectTimeout, CleanClose, AbruptClose } from "./client-error-kind-enum.js";
7
+ import { ClientClosed, NoSocketOrigin, Offline, UserDisconnect, InvalidMessage, Internal, UnexpectedBaseCookie, Hidden, PullTimeout, PingTimeout, ConnectTimeout, CleanClose, AbruptClose } from "./client-error-kind-enum.js";
8
8
  import { NeedsAuth, Closed, Disconnected, Error as Error$1 } from "./connection-status-enum.js";
9
9
  class ClientError extends Error {
10
10
  errorBody;
@@ -65,7 +65,6 @@ function getErrorConnectionTransition(ex) {
65
65
  case PingTimeout:
66
66
  case PullTimeout:
67
67
  case Hidden:
68
- case NoSocketOrigin:
69
68
  return { status: NO_STATUS_TRANSITION, reason: ex };
70
69
  // Fatal errors that should transition to error state
71
70
  case UnexpectedBaseCookie:
@@ -75,6 +74,7 @@ function getErrorConnectionTransition(ex) {
75
74
  return { status: Error$1, reason: ex };
76
75
  // Disconnected error (this should already result in a disconnected state)
77
76
  case Offline:
77
+ case NoSocketOrigin:
78
78
  return {
79
79
  status: Disconnected,
80
80
  reason: ex
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sources":["../../../../../zero-client/src/client/error.ts"],"sourcesContent":["import {unreachable} from '../../../shared/src/asserts.ts';\nimport {getErrorMessage} from '../../../shared/src/error.ts';\nimport type {Expand} from '../../../shared/src/expand.ts';\nimport {ErrorKind} from '../../../zero-protocol/src/error-kind.ts';\nimport {ErrorOrigin} from '../../../zero-protocol/src/error-origin.ts';\nimport {ErrorReason} from '../../../zero-protocol/src/error-reason.ts';\nimport type {ProtocolError} from '../../../zero-protocol/src/error.ts';\nimport {\n type BackoffBody,\n type ErrorBody,\n isProtocolError,\n type PushFailedBody,\n type TransformFailedBody,\n} from '../../../zero-protocol/src/error.ts';\nimport {ClientErrorKind} from './client-error-kind.ts';\nimport {ConnectionStatus} from './connection-status.ts';\n\nexport type AuthError = ProtocolError<NeedsAuthReason>;\nexport type ClientErrorBody = {\n kind: ClientErrorKind;\n origin: typeof ErrorOrigin.Client;\n message: string;\n};\nexport type ClosedError = ClientError<{\n kind: ClientErrorKind.ClientClosed;\n message: string;\n}>;\nexport type NeedsAuthReason = Expand<\n | (ErrorBody & {\n kind: ErrorKind.AuthInvalidated | ErrorKind.Unauthorized;\n })\n | (Extract<PushFailedBody, {reason: ErrorReason.HTTP}> & {status: 401 | 403})\n | (Extract<TransformFailedBody, {reason: ErrorReason.HTTP}> & {\n status: 401 | 403;\n })\n>;\nexport type OfflineError = ClientError<{\n kind: ClientErrorKind.Offline;\n message: string;\n}>;\nexport type ServerError = ProtocolError<ErrorBody>;\nexport type ZeroError = ServerError | ClientError;\nexport type ZeroErrorBody = Expand<ErrorBody | ClientErrorBody>;\nexport type ZeroErrorDetails = Expand<Omit<ZeroErrorBody, 'message'>>;\nexport type ZeroErrorKind = Expand<ErrorKind | ClientErrorKind>;\n\n/**\n * Represents an error encountered by the Zero client.\n */\nexport class ClientError<\n const T extends Omit<ClientErrorBody, 'origin'> = Omit<\n ClientErrorBody,\n 'origin'\n >,\n> extends Error {\n readonly errorBody: {origin: typeof ErrorOrigin.Client} & T;\n\n constructor(errorBody: T, options?: ErrorOptions) {\n super(errorBody.message, options);\n this.name = 'ClientError';\n this.errorBody = {...errorBody, origin: ErrorOrigin.Client};\n }\n\n get kind(): T['kind'] {\n return this.errorBody.kind;\n }\n}\n\nexport function isZeroError(ex: unknown): ex is ZeroError {\n return isClientError(ex) || isServerError(ex);\n}\n\nexport function isClientError(ex: unknown): ex is ClientError<ClientErrorBody> {\n return (\n ex instanceof ClientError && ex.errorBody.origin === ErrorOrigin.Client\n );\n}\n\nexport function isServerError(ex: unknown): ex is ServerError {\n return (\n isProtocolError(ex) &&\n (ex.errorBody.origin === ErrorOrigin.Server ||\n ex.errorBody.origin === ErrorOrigin.ZeroCache)\n );\n}\n\nexport function isOfflineError(ex: unknown): ex is OfflineError {\n return isClientError(ex) && ex.kind === ClientErrorKind.Offline;\n}\n\nexport function isAuthError(ex: unknown): ex is AuthError {\n if (isServerError(ex)) {\n if (\n ex.kind === ErrorKind.AuthInvalidated ||\n ex.kind === ErrorKind.Unauthorized\n ) {\n return true;\n }\n if (\n (ex.errorBody.kind === ErrorKind.PushFailed ||\n ex.errorBody.kind === ErrorKind.TransformFailed) &&\n ex.errorBody.reason === ErrorReason.HTTP &&\n (ex.errorBody.status === 401 || ex.errorBody.status === 403)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function getBackoffParams(error: ZeroError): BackoffBody | undefined {\n if (isServerError(error)) {\n switch (error.errorBody.kind) {\n case ErrorKind.Rebalance:\n case ErrorKind.Rehome:\n case ErrorKind.ServerOverloaded:\n return error.errorBody;\n }\n }\n return undefined;\n}\n\nexport const NO_STATUS_TRANSITION = 'NO_STATUS_TRANSITION';\n\nexport type ErrorConnectionTransition =\n | {status: typeof NO_STATUS_TRANSITION; reason: ZeroError}\n | {status: ConnectionStatus.NeedsAuth; reason: AuthError}\n | {status: ConnectionStatus.Error; reason: ZeroError}\n | {status: ConnectionStatus.Disconnected; reason: OfflineError}\n | {status: ConnectionStatus.Closed; reason: ZeroError};\n\n/**\n * Returns the status to transition to, or null if the error\n * indicates that the connection should continue in the current state.\n */\nexport function getErrorConnectionTransition(\n ex: unknown,\n): ErrorConnectionTransition {\n // Handle auth errors by transitioning to needs-auth state\n if (isAuthError(ex)) {\n return {\n status: ConnectionStatus.NeedsAuth,\n reason: ex,\n } as const;\n }\n\n if (isClientError(ex)) {\n switch (ex.kind) {\n // Connecting errors that should continue in the current state\n case ClientErrorKind.AbruptClose:\n case ClientErrorKind.CleanClose:\n case ClientErrorKind.ConnectTimeout:\n case ClientErrorKind.PingTimeout:\n case ClientErrorKind.PullTimeout:\n case ClientErrorKind.Hidden:\n case ClientErrorKind.NoSocketOrigin:\n return {status: NO_STATUS_TRANSITION, reason: ex} as const;\n\n // Fatal errors that should transition to error state\n case ClientErrorKind.UnexpectedBaseCookie:\n case ClientErrorKind.Internal:\n case ClientErrorKind.InvalidMessage:\n case ClientErrorKind.UserDisconnect:\n return {status: ConnectionStatus.Error, reason: ex} as const;\n\n // Disconnected error (this should already result in a disconnected state)\n case ClientErrorKind.Offline:\n return {\n status: ConnectionStatus.Disconnected,\n reason: ex as OfflineError,\n } as const;\n\n // Closed error (this should already result in a closed state)\n case ClientErrorKind.ClientClosed:\n return {status: ConnectionStatus.Closed, reason: ex} as const;\n\n default:\n unreachable(ex.kind);\n }\n }\n\n if (isServerError(ex)) {\n switch (ex.kind) {\n // Errors that should transition to error state\n case ErrorKind.ClientNotFound:\n case ErrorKind.InvalidConnectionRequest:\n case ErrorKind.InvalidConnectionRequestBaseCookie:\n case ErrorKind.InvalidConnectionRequestLastMutationID:\n case ErrorKind.InvalidConnectionRequestClientDeleted:\n case ErrorKind.InvalidMessage:\n case ErrorKind.InvalidPush:\n case ErrorKind.VersionNotSupported:\n case ErrorKind.SchemaVersionNotSupported:\n case ErrorKind.Internal:\n // PushFailed and TransformFailed can be auth errors (401/403)\n // or other errors - handle non-auth cases here\n case ErrorKind.PushFailed:\n case ErrorKind.TransformFailed:\n return {status: ConnectionStatus.Error, reason: ex} as const;\n\n // Errors that should continue with backoff/retry\n case ErrorKind.Rebalance:\n case ErrorKind.Rehome:\n case ErrorKind.ServerOverloaded:\n return {status: NO_STATUS_TRANSITION, reason: ex} as const;\n\n // Auth errors are handled above by isAuthError check\n case ErrorKind.AuthInvalidated:\n case ErrorKind.Unauthorized:\n return {\n status: ConnectionStatus.NeedsAuth,\n reason: ex as AuthError,\n } as const;\n\n // Mutation-specific errors don't affect connection state\n case ErrorKind.MutationRateLimited:\n case ErrorKind.MutationFailed:\n return {status: NO_STATUS_TRANSITION, reason: ex} as const;\n\n default:\n unreachable(ex.kind);\n }\n }\n\n // we default to error state if we don't know what to do\n // this is a catch-all for unexpected errors\n return {\n status: ConnectionStatus.Error,\n reason: new ClientError(\n {\n kind: ClientErrorKind.Internal,\n message: 'Unexpected internal error: ' + getErrorMessage(ex),\n },\n {cause: ex},\n ),\n } as const;\n}\n"],"names":["ErrorOrigin.Client","ErrorOrigin.Server","ErrorOrigin.ZeroCache","ErrorKind.AuthInvalidated","ErrorKind.Unauthorized","ErrorKind.PushFailed","ErrorKind.TransformFailed","ErrorReason.HTTP","ErrorKind.Rebalance","ErrorKind.Rehome","ErrorKind.ServerOverloaded","ConnectionStatus.NeedsAuth","ClientErrorKind.AbruptClose","ClientErrorKind.CleanClose","ClientErrorKind.ConnectTimeout","ClientErrorKind.PingTimeout","ClientErrorKind.PullTimeout","ClientErrorKind.Hidden","ClientErrorKind.NoSocketOrigin","ClientErrorKind.UnexpectedBaseCookie","ClientErrorKind.Internal","ClientErrorKind.InvalidMessage","ClientErrorKind.UserDisconnect","ConnectionStatus.Error","ClientErrorKind.Offline","ConnectionStatus.Disconnected","ClientErrorKind.ClientClosed","ConnectionStatus.Closed","ErrorKind.ClientNotFound","ErrorKind.InvalidConnectionRequest","ErrorKind.InvalidConnectionRequestBaseCookie","ErrorKind.InvalidConnectionRequestLastMutationID","ErrorKind.InvalidConnectionRequestClientDeleted","ErrorKind.InvalidMessage","ErrorKind.InvalidPush","ErrorKind.VersionNotSupported","ErrorKind.SchemaVersionNotSupported","ErrorKind.Internal","ErrorKind.MutationRateLimited","ErrorKind.MutationFailed"],"mappings":"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"}
1
+ {"version":3,"file":"error.js","sources":["../../../../../zero-client/src/client/error.ts"],"sourcesContent":["import {unreachable} from '../../../shared/src/asserts.ts';\nimport {getErrorMessage} from '../../../shared/src/error.ts';\nimport type {Expand} from '../../../shared/src/expand.ts';\nimport {ErrorKind} from '../../../zero-protocol/src/error-kind.ts';\nimport {ErrorOrigin} from '../../../zero-protocol/src/error-origin.ts';\nimport {ErrorReason} from '../../../zero-protocol/src/error-reason.ts';\nimport type {ProtocolError} from '../../../zero-protocol/src/error.ts';\nimport {\n type BackoffBody,\n type ErrorBody,\n isProtocolError,\n type PushFailedBody,\n type TransformFailedBody,\n} from '../../../zero-protocol/src/error.ts';\nimport {ClientErrorKind} from './client-error-kind.ts';\nimport {ConnectionStatus} from './connection-status.ts';\n\nexport type AuthError = ProtocolError<NeedsAuthReason>;\nexport type ClientErrorBody = {\n kind: ClientErrorKind;\n origin: typeof ErrorOrigin.Client;\n message: string;\n};\nexport type ClosedError = ClientError<{\n kind: ClientErrorKind.ClientClosed;\n message: string;\n}>;\nexport type NeedsAuthReason = Expand<\n | (ErrorBody & {\n kind: ErrorKind.AuthInvalidated | ErrorKind.Unauthorized;\n })\n | (Extract<PushFailedBody, {reason: ErrorReason.HTTP}> & {status: 401 | 403})\n | (Extract<TransformFailedBody, {reason: ErrorReason.HTTP}> & {\n status: 401 | 403;\n })\n>;\nexport type OfflineError = ClientError<{\n kind: ClientErrorKind.Offline;\n message: string;\n}>;\nexport type NoSocketOriginError = ClientError<{\n kind: ClientErrorKind.NoSocketOrigin;\n message: string;\n}>;\nexport type DisconnectedReason = OfflineError | NoSocketOriginError;\nexport type ServerError = ProtocolError<ErrorBody>;\nexport type ZeroError = ServerError | ClientError;\nexport type ZeroErrorBody = Expand<ErrorBody | ClientErrorBody>;\nexport type ZeroErrorDetails = Expand<Omit<ZeroErrorBody, 'message'>>;\nexport type ZeroErrorKind = Expand<ErrorKind | ClientErrorKind>;\n\n/**\n * Represents an error encountered by the Zero client.\n */\nexport class ClientError<\n const T extends Omit<ClientErrorBody, 'origin'> = Omit<\n ClientErrorBody,\n 'origin'\n >,\n> extends Error {\n readonly errorBody: {origin: typeof ErrorOrigin.Client} & T;\n\n constructor(errorBody: T, options?: ErrorOptions) {\n super(errorBody.message, options);\n this.name = 'ClientError';\n this.errorBody = {...errorBody, origin: ErrorOrigin.Client};\n }\n\n get kind(): T['kind'] {\n return this.errorBody.kind;\n }\n}\n\nexport function isZeroError(ex: unknown): ex is ZeroError {\n return isClientError(ex) || isServerError(ex);\n}\n\nexport function isClientError(ex: unknown): ex is ClientError<ClientErrorBody> {\n return (\n ex instanceof ClientError && ex.errorBody.origin === ErrorOrigin.Client\n );\n}\n\nexport function isServerError(ex: unknown): ex is ServerError {\n return (\n isProtocolError(ex) &&\n (ex.errorBody.origin === ErrorOrigin.Server ||\n ex.errorBody.origin === ErrorOrigin.ZeroCache)\n );\n}\n\nexport function isOfflineError(ex: unknown): ex is OfflineError {\n return isClientError(ex) && ex.kind === ClientErrorKind.Offline;\n}\n\nexport function isAuthError(ex: unknown): ex is AuthError {\n if (isServerError(ex)) {\n if (\n ex.kind === ErrorKind.AuthInvalidated ||\n ex.kind === ErrorKind.Unauthorized\n ) {\n return true;\n }\n if (\n (ex.errorBody.kind === ErrorKind.PushFailed ||\n ex.errorBody.kind === ErrorKind.TransformFailed) &&\n ex.errorBody.reason === ErrorReason.HTTP &&\n (ex.errorBody.status === 401 || ex.errorBody.status === 403)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function getBackoffParams(error: ZeroError): BackoffBody | undefined {\n if (isServerError(error)) {\n switch (error.errorBody.kind) {\n case ErrorKind.Rebalance:\n case ErrorKind.Rehome:\n case ErrorKind.ServerOverloaded:\n return error.errorBody;\n }\n }\n return undefined;\n}\n\nexport const NO_STATUS_TRANSITION = 'NO_STATUS_TRANSITION';\n\nexport type ErrorConnectionTransition =\n | {status: typeof NO_STATUS_TRANSITION; reason: ZeroError}\n | {status: ConnectionStatus.NeedsAuth; reason: AuthError}\n | {status: ConnectionStatus.Error; reason: ZeroError}\n | {status: ConnectionStatus.Disconnected; reason: DisconnectedReason}\n | {status: ConnectionStatus.Closed; reason: ZeroError};\n\n/**\n * Returns the status to transition to, or null if the error\n * indicates that the connection should continue in the current state.\n */\nexport function getErrorConnectionTransition(\n ex: unknown,\n): ErrorConnectionTransition {\n // Handle auth errors by transitioning to needs-auth state\n if (isAuthError(ex)) {\n return {\n status: ConnectionStatus.NeedsAuth,\n reason: ex,\n } as const;\n }\n\n if (isClientError(ex)) {\n switch (ex.kind) {\n // Connecting errors that should continue in the current state\n case ClientErrorKind.AbruptClose:\n case ClientErrorKind.CleanClose:\n case ClientErrorKind.ConnectTimeout:\n case ClientErrorKind.PingTimeout:\n case ClientErrorKind.PullTimeout:\n case ClientErrorKind.Hidden:\n return {status: NO_STATUS_TRANSITION, reason: ex} as const;\n\n // Fatal errors that should transition to error state\n case ClientErrorKind.UnexpectedBaseCookie:\n case ClientErrorKind.Internal:\n case ClientErrorKind.InvalidMessage:\n case ClientErrorKind.UserDisconnect:\n return {status: ConnectionStatus.Error, reason: ex} as const;\n\n // Disconnected error (this should already result in a disconnected state)\n case ClientErrorKind.Offline:\n case ClientErrorKind.NoSocketOrigin:\n return {\n status: ConnectionStatus.Disconnected,\n reason: ex as DisconnectedReason,\n } as const;\n\n // Closed error (this should already result in a closed state)\n case ClientErrorKind.ClientClosed:\n return {status: ConnectionStatus.Closed, reason: ex} as const;\n\n default:\n unreachable(ex.kind);\n }\n }\n\n if (isServerError(ex)) {\n switch (ex.kind) {\n // Errors that should transition to error state\n case ErrorKind.ClientNotFound:\n case ErrorKind.InvalidConnectionRequest:\n case ErrorKind.InvalidConnectionRequestBaseCookie:\n case ErrorKind.InvalidConnectionRequestLastMutationID:\n case ErrorKind.InvalidConnectionRequestClientDeleted:\n case ErrorKind.InvalidMessage:\n case ErrorKind.InvalidPush:\n case ErrorKind.VersionNotSupported:\n case ErrorKind.SchemaVersionNotSupported:\n case ErrorKind.Internal:\n // PushFailed and TransformFailed can be auth errors (401/403)\n // or other errors - handle non-auth cases here\n case ErrorKind.PushFailed:\n case ErrorKind.TransformFailed:\n return {status: ConnectionStatus.Error, reason: ex} as const;\n\n // Errors that should continue with backoff/retry\n case ErrorKind.Rebalance:\n case ErrorKind.Rehome:\n case ErrorKind.ServerOverloaded:\n return {status: NO_STATUS_TRANSITION, reason: ex} as const;\n\n // Auth errors are handled above by isAuthError check\n case ErrorKind.AuthInvalidated:\n case ErrorKind.Unauthorized:\n return {\n status: ConnectionStatus.NeedsAuth,\n reason: ex as AuthError,\n } as const;\n\n // Mutation-specific errors don't affect connection state\n case ErrorKind.MutationRateLimited:\n case ErrorKind.MutationFailed:\n return {status: NO_STATUS_TRANSITION, reason: ex} as const;\n\n default:\n unreachable(ex.kind);\n }\n }\n\n // we default to error state if we don't know what to do\n // this is a catch-all for unexpected errors\n return {\n status: ConnectionStatus.Error,\n reason: new ClientError(\n {\n kind: ClientErrorKind.Internal,\n message: 'Unexpected internal error: ' + getErrorMessage(ex),\n },\n {cause: ex},\n ),\n } as const;\n}\n"],"names":["ErrorOrigin.Client","ErrorOrigin.Server","ErrorOrigin.ZeroCache","ErrorKind.AuthInvalidated","ErrorKind.Unauthorized","ErrorKind.PushFailed","ErrorKind.TransformFailed","ErrorReason.HTTP","ErrorKind.Rebalance","ErrorKind.Rehome","ErrorKind.ServerOverloaded","ConnectionStatus.NeedsAuth","ClientErrorKind.AbruptClose","ClientErrorKind.CleanClose","ClientErrorKind.ConnectTimeout","ClientErrorKind.PingTimeout","ClientErrorKind.PullTimeout","ClientErrorKind.Hidden","ClientErrorKind.UnexpectedBaseCookie","ClientErrorKind.Internal","ClientErrorKind.InvalidMessage","ClientErrorKind.UserDisconnect","ConnectionStatus.Error","ClientErrorKind.Offline","ClientErrorKind.NoSocketOrigin","ConnectionStatus.Disconnected","ClientErrorKind.ClientClosed","ConnectionStatus.Closed","ErrorKind.ClientNotFound","ErrorKind.InvalidConnectionRequest","ErrorKind.InvalidConnectionRequestBaseCookie","ErrorKind.InvalidConnectionRequestLastMutationID","ErrorKind.InvalidConnectionRequestClientDeleted","ErrorKind.InvalidMessage","ErrorKind.InvalidPush","ErrorKind.VersionNotSupported","ErrorKind.SchemaVersionNotSupported","ErrorKind.Internal","ErrorKind.MutationRateLimited","ErrorKind.MutationFailed"],"mappings":"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"}
@@ -1,8 +1,6 @@
1
1
  import type { DeepMerge } from '../../../shared/src/deep-merge.ts';
2
2
  import type { Schema } from '../../../zero-types/src/schema.ts';
3
3
  import { type Transaction } from '../../../zql/src/mutate/custom.ts';
4
- import type { AnyMutatorRegistry } from '../../../zql/src/mutate/mutator-registry.ts';
5
- import { type MutatorDefinition } from '../../../zql/src/mutate/mutator.ts';
6
4
  import type { DBMutator } from './crud.ts';
7
5
  import type { CustomMutatorDefs, MutatorResult } from './custom.ts';
8
6
  import type { MutatorProxy } from './mutator-proxy.ts';
@@ -29,15 +27,14 @@ import type { MutatorProxy } from './mutator-proxy.ts';
29
27
  * using different separators ('.' for mutator definitions, '|' for custom functions) and wraps them
30
28
  * using the mutator proxy.
31
29
  */
32
- export declare function makeMutateProperty(mutators: AnyMutatorRegistry | CustomMutatorDefs, mutatorProxy: MutatorProxy, mutateObject: Record<string, unknown>, replicacheMutate: Record<string, unknown>): void;
30
+ export declare function makeMutateProperty(mutators: CustomMutatorDefs, mutatorProxy: MutatorProxy, mutateObject: Record<string, unknown>, replicacheMutate: Record<string, unknown>): void;
33
31
  /**
34
- * Builds the mutate type from mutator definitions, handling arbitrary nesting.
35
- * Each node can be either a MutatorDefinition or a CustomMutatorImpl function,
36
- * or a namespace containing more mutators.
32
+ * Builds the mutate type from legacy CustomMutatorDefs, handling arbitrary nesting.
33
+ * Each node can be either a CustomMutatorImpl function or a namespace containing more mutators.
37
34
  */
38
- type MakeFromMutatorDefinitions<S extends Schema, MD extends AnyMutatorRegistry | CustomMutatorDefs, C> = {
39
- readonly [K in keyof MD]: MD[K] extends MutatorDefinition<infer TInput, any, C, any> ? [TInput] extends [undefined] ? () => MutatorResult : undefined extends TInput ? (args?: TInput) => MutatorResult : (args: TInput) => MutatorResult : MD[K] extends (tx: Transaction<S>, ...args: infer Args) => Promise<void> ? (...args: Args) => MutatorResult : MD[K] extends AnyMutatorRegistry | CustomMutatorDefs ? MakeFromMutatorDefinitions<S, MD[K], C> : never;
35
+ type MakeFromMutatorDefinitions<S extends Schema, MD extends CustomMutatorDefs, C> = {
36
+ readonly [K in keyof MD]: MD[K] extends (tx: Transaction<S>, ...args: infer Args) => Promise<void> ? (...args: Args) => MutatorResult : MD[K] extends CustomMutatorDefs ? MakeFromMutatorDefinitions<S, MD[K], C> : never;
40
37
  };
41
- export type MakeMutatePropertyType<S extends Schema, MD extends CustomMutatorDefs | undefined, C> = MD extends AnyMutatorRegistry ? {} : MD extends AnyMutatorRegistry | CustomMutatorDefs ? S['enableLegacyMutators'] extends false ? MakeFromMutatorDefinitions<S, MD, C> : DeepMerge<DBMutator<S>, MakeFromMutatorDefinitions<S, MD, C>> : DBMutator<S>;
38
+ export type MakeMutatePropertyType<S extends Schema, MD extends CustomMutatorDefs | undefined, C> = MD extends CustomMutatorDefs ? S['enableLegacyMutators'] extends false ? MakeFromMutatorDefinitions<S, MD, C> : DeepMerge<DBMutator<S>, MakeFromMutatorDefinitions<S, MD, C>> : DBMutator<S>;
42
39
  export {};
43
40
  //# sourceMappingURL=make-mutate-property.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"make-mutate-property.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/make-mutate-property.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,mCAAmC,CAAC;AAEjE,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAC,iBAAiB,EAAE,aAAa,EAAC,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,kBAAkB,GAAG,iBAAiB,EAChD,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,IAAI,CAwCN;AAED;;;;GAIG;AACH,KAAK,0BAA0B,CAC7B,CAAC,SAAS,MAAM,EAChB,EAAE,SAAS,kBAAkB,GAAG,iBAAiB,EACjD,CAAC,IACC;IACF,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,iBAAiB,CACvD,MAAM,MAAM,EAEZ,GAAG,EACH,CAAC,EAED,GAAG,CACJ,GACG,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,GAC1B,MAAM,aAAa,GACnB,SAAS,SAAS,MAAM,GACtB,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,aAAa,GAChC,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GACnC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,GACtE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,aAAa,GAChC,EAAE,CAAC,CAAC,CAAC,SAAS,kBAAkB,GAAG,iBAAiB,GAClD,0BAA0B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACvC,KAAK;CACd,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAChC,CAAC,SAAS,MAAM,EAChB,EAAE,SAAS,iBAAiB,GAAG,SAAS,EACxC,CAAC,IACC,EAAE,SAAS,kBAAkB,GAE7B,EAAE,GACF,EAAE,SAAS,kBAAkB,GAAG,iBAAiB,GAC/C,CAAC,CAAC,sBAAsB,CAAC,SAAS,KAAK,GACrC,0BAA0B,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GACpC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAC/D,SAAS,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"make-mutate-property.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/make-mutate-property.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,mCAAmC,CAAC;AAEjE,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAC,iBAAiB,EAAE,aAAa,EAAC,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,IAAI,CAkCN;AAED;;;GAGG;AACH,KAAK,0BAA0B,CAC7B,CAAC,SAAS,MAAM,EAChB,EAAE,SAAS,iBAAiB,EAC5B,CAAC,IACC;IACF,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CACtC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,EAClB,GAAG,IAAI,EAAE,MAAM,IAAI,KAChB,OAAO,CAAC,IAAI,CAAC,GACd,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,aAAa,GAChC,EAAE,CAAC,CAAC,CAAC,SAAS,iBAAiB,GAC7B,0BAA0B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACvC,KAAK;CACZ,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAChC,CAAC,SAAS,MAAM,EAChB,EAAE,SAAS,iBAAiB,GAAG,SAAS,EACxC,CAAC,IACC,EAAE,SAAS,iBAAiB,GAC5B,CAAC,CAAC,sBAAsB,CAAC,SAAS,KAAK,GACrC,0BAA0B,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GACpC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAC/D,SAAS,CAAC,CAAC,CAAC,CAAC"}
@@ -1,18 +1,13 @@
1
1
  import { must } from "../../../shared/src/must.js";
2
2
  import { customMutatorKey } from "../../../zql/src/mutate/custom.js";
3
- import { isMutator } from "../../../zql/src/mutate/mutator.js";
4
3
  function makeMutateProperty(mutators, mutatorProxy, mutateObject, replicacheMutate) {
5
4
  const processMutators = (mutators2, path, mutateObject2) => {
6
5
  for (const [key, mutator] of Object.entries(mutators2)) {
7
6
  path.push(key);
8
- let fullKey;
9
- if (isMutator(mutator)) {
10
- fullKey = customMutatorKey(".", path);
11
- } else if (typeof mutator === "function") {
12
- fullKey = customMutatorKey("|", path);
13
- }
14
- if (fullKey) {
7
+ if (typeof mutator === "function") {
8
+ const fullKey = customMutatorKey("|", path);
15
9
  mutateObject2[key] = mutatorProxy.wrapCustomMutator(
10
+ fullKey,
16
11
  must(replicacheMutate[fullKey])
17
12
  );
18
13
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"make-mutate-property.js","sources":["../../../../../zero-client/src/client/make-mutate-property.ts"],"sourcesContent":["import type {DeepMerge} from '../../../shared/src/deep-merge.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {\n customMutatorKey,\n type Transaction,\n} from '../../../zql/src/mutate/custom.ts';\nimport type {AnyMutatorRegistry} from '../../../zql/src/mutate/mutator-registry.ts';\nimport {\n isMutator,\n type MutatorDefinition,\n} from '../../../zql/src/mutate/mutator.ts';\nimport type {DBMutator} from './crud.ts';\nimport type {CustomMutatorDefs, MutatorResult} from './custom.ts';\nimport type {MutatorProxy} from './mutator-proxy.ts';\n\n/**\n * Creates and populates a mutate property object by processing mutator definitions recursively.\n *\n * This function traverses through mutator definitions (either schema-based or custom) and builds\n * a corresponding object structure where each mutator is wrapped by the mutator proxy. It handles\n * both flat mutator functions and nested mutator definition objects.\n *\n * @template S - The schema type that defines the structure of the data\n * @template C - The context type used by mutators, defaults to unknown\n *\n * @param mutators - The mutator definitions to process, can be schema-based or custom mutator definitions\n * @param mutatorProxy - The proxy object responsible for wrapping mutators with additional functionality\n * @param mutateObject - The target object to populate with wrapped mutators\n * @param replicacheMutate - The source object containing the actual mutator implementations to wrap\n *\n * @returns void - This function mutates the mutateObject parameter directly\n *\n * @remarks\n * The function recursively processes nested mutator structures, creating corresponding nested objects\n * in the mutateObject. For leaf mutators (functions or mutator definitions), it generates a full key\n * using different separators ('.' for mutator definitions, '|' for custom functions) and wraps them\n * using the mutator proxy.\n */\nexport function makeMutateProperty(\n mutators: AnyMutatorRegistry | CustomMutatorDefs,\n mutatorProxy: MutatorProxy,\n mutateObject: Record<string, unknown>,\n replicacheMutate: Record<string, unknown>,\n): void {\n const processMutators = (\n mutators: AnyMutatorRegistry | CustomMutatorDefs,\n path: string[],\n mutateObject: Record<string, unknown>,\n ) => {\n for (const [key, mutator] of Object.entries(mutators)) {\n path.push(key);\n let fullKey: string | undefined;\n if (isMutator(mutator)) {\n fullKey = customMutatorKey('.', path);\n } else if (typeof mutator === 'function') {\n // Legacy CustomMutatorImpl\n fullKey = customMutatorKey('|', path);\n }\n\n if (fullKey) {\n mutateObject[key] = mutatorProxy.wrapCustomMutator(\n must(replicacheMutate[fullKey]) as unknown as (\n ...args: unknown[]\n ) => MutatorResult,\n );\n } else {\n // recursive build and process.\n let existing = mutateObject[key];\n if (existing === undefined) {\n existing = {};\n mutateObject[key] = existing;\n }\n processMutators(\n mutator as AnyMutatorRegistry | CustomMutatorDefs,\n path,\n existing as Record<string, unknown>,\n );\n }\n path.pop();\n }\n };\n\n processMutators(mutators, [], mutateObject);\n}\n\n/**\n * Builds the mutate type from mutator definitions, handling arbitrary nesting.\n * Each node can be either a MutatorDefinition or a CustomMutatorImpl function,\n * or a namespace containing more mutators.\n */\ntype MakeFromMutatorDefinitions<\n S extends Schema,\n MD extends AnyMutatorRegistry | CustomMutatorDefs,\n C,\n> = {\n readonly [K in keyof MD]: MD[K] extends MutatorDefinition<\n infer TInput,\n // oxlint-disable-next-line no-explicit-any\n any,\n C,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n any\n >\n ? [TInput] extends [undefined]\n ? () => MutatorResult\n : undefined extends TInput\n ? (args?: TInput) => MutatorResult\n : (args: TInput) => MutatorResult\n : MD[K] extends (tx: Transaction<S>, ...args: infer Args) => Promise<void>\n ? (...args: Args) => MutatorResult\n : MD[K] extends AnyMutatorRegistry | CustomMutatorDefs\n ? MakeFromMutatorDefinitions<S, MD[K], C>\n : never;\n};\n\nexport type MakeMutatePropertyType<\n S extends Schema,\n MD extends CustomMutatorDefs | undefined,\n C,\n> = MD extends AnyMutatorRegistry\n ? // MutatorRegistry: no property tree, user calls zero.mutate(mr) directly\n {}\n : MD extends AnyMutatorRegistry | CustomMutatorDefs\n ? S['enableLegacyMutators'] extends false\n ? MakeFromMutatorDefinitions<S, MD, C>\n : DeepMerge<DBMutator<S>, MakeFromMutatorDefinitions<S, MD, C>>\n : DBMutator<S>;\n"],"names":["mutators","mutateObject"],"mappings":";;;AAuCO,SAAS,mBACd,UACA,cACA,cACA,kBACM;AACN,QAAM,kBAAkB,CACtBA,WACA,MACAC,kBACG;AACH,eAAW,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQD,SAAQ,GAAG;AACrD,WAAK,KAAK,GAAG;AACb,UAAI;AACJ,UAAI,UAAU,OAAO,GAAG;AACtB,kBAAU,iBAAiB,KAAK,IAAI;AAAA,MACtC,WAAW,OAAO,YAAY,YAAY;AAExC,kBAAU,iBAAiB,KAAK,IAAI;AAAA,MACtC;AAEA,UAAI,SAAS;AACXC,sBAAa,GAAG,IAAI,aAAa;AAAA,UAC/B,KAAK,iBAAiB,OAAO,CAAC;AAAA,QAAA;AAAA,MAIlC,OAAO;AAEL,YAAI,WAAWA,cAAa,GAAG;AAC/B,YAAI,aAAa,QAAW;AAC1B,qBAAW,CAAA;AACXA,wBAAa,GAAG,IAAI;AAAA,QACtB;AACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACA,WAAK,IAAA;AAAA,IACP;AAAA,EACF;AAEA,kBAAgB,UAAU,CAAA,GAAI,YAAY;AAC5C;"}
1
+ {"version":3,"file":"make-mutate-property.js","sources":["../../../../../zero-client/src/client/make-mutate-property.ts"],"sourcesContent":["import type {DeepMerge} from '../../../shared/src/deep-merge.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {\n customMutatorKey,\n type Transaction,\n} from '../../../zql/src/mutate/custom.ts';\nimport type {DBMutator} from './crud.ts';\nimport type {CustomMutatorDefs, MutatorResult} from './custom.ts';\nimport type {MutatorProxy} from './mutator-proxy.ts';\n\n/**\n * Creates and populates a mutate property object by processing mutator definitions recursively.\n *\n * This function traverses through mutator definitions (either schema-based or custom) and builds\n * a corresponding object structure where each mutator is wrapped by the mutator proxy. It handles\n * both flat mutator functions and nested mutator definition objects.\n *\n * @template S - The schema type that defines the structure of the data\n * @template C - The context type used by mutators, defaults to unknown\n *\n * @param mutators - The mutator definitions to process, can be schema-based or custom mutator definitions\n * @param mutatorProxy - The proxy object responsible for wrapping mutators with additional functionality\n * @param mutateObject - The target object to populate with wrapped mutators\n * @param replicacheMutate - The source object containing the actual mutator implementations to wrap\n *\n * @returns void - This function mutates the mutateObject parameter directly\n *\n * @remarks\n * The function recursively processes nested mutator structures, creating corresponding nested objects\n * in the mutateObject. For leaf mutators (functions or mutator definitions), it generates a full key\n * using different separators ('.' for mutator definitions, '|' for custom functions) and wraps them\n * using the mutator proxy.\n */\nexport function makeMutateProperty(\n mutators: CustomMutatorDefs,\n mutatorProxy: MutatorProxy,\n mutateObject: Record<string, unknown>,\n replicacheMutate: Record<string, unknown>,\n): void {\n const processMutators = (\n mutators: CustomMutatorDefs,\n path: string[],\n mutateObject: Record<string, unknown>,\n ) => {\n for (const [key, mutator] of Object.entries(mutators)) {\n path.push(key);\n if (typeof mutator === 'function') {\n const fullKey = customMutatorKey('|', path);\n mutateObject[key] = mutatorProxy.wrapCustomMutator(\n fullKey,\n must(replicacheMutate[fullKey]) as unknown as (\n ...args: unknown[]\n ) => MutatorResult,\n );\n } else {\n // Nested namespace - recursive build and process.\n let existing = mutateObject[key];\n if (existing === undefined) {\n existing = {};\n mutateObject[key] = existing;\n }\n processMutators(\n mutator as CustomMutatorDefs,\n path,\n existing as Record<string, unknown>,\n );\n }\n path.pop();\n }\n };\n\n processMutators(mutators, [], mutateObject);\n}\n\n/**\n * Builds the mutate type from legacy CustomMutatorDefs, handling arbitrary nesting.\n * Each node can be either a CustomMutatorImpl function or a namespace containing more mutators.\n */\ntype MakeFromMutatorDefinitions<\n S extends Schema,\n MD extends CustomMutatorDefs,\n C,\n> = {\n readonly [K in keyof MD]: MD[K] extends (\n tx: Transaction<S>,\n ...args: infer Args\n ) => Promise<void>\n ? (...args: Args) => MutatorResult\n : MD[K] extends CustomMutatorDefs\n ? MakeFromMutatorDefinitions<S, MD[K], C>\n : never;\n};\n\nexport type MakeMutatePropertyType<\n S extends Schema,\n MD extends CustomMutatorDefs | undefined,\n C,\n> = MD extends CustomMutatorDefs\n ? S['enableLegacyMutators'] extends false\n ? MakeFromMutatorDefinitions<S, MD, C>\n : DeepMerge<DBMutator<S>, MakeFromMutatorDefinitions<S, MD, C>>\n : DBMutator<S>;\n"],"names":["mutators","mutateObject"],"mappings":";;AAkCO,SAAS,mBACd,UACA,cACA,cACA,kBACM;AACN,QAAM,kBAAkB,CACtBA,WACA,MACAC,kBACG;AACH,eAAW,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQD,SAAQ,GAAG;AACrD,WAAK,KAAK,GAAG;AACb,UAAI,OAAO,YAAY,YAAY;AACjC,cAAM,UAAU,iBAAiB,KAAK,IAAI;AAC1CC,sBAAa,GAAG,IAAI,aAAa;AAAA,UAC/B;AAAA,UACA,KAAK,iBAAiB,OAAO,CAAC;AAAA,QAAA;AAAA,MAIlC,OAAO;AAEL,YAAI,WAAWA,cAAa,GAAG;AAC/B,YAAI,aAAa,QAAW;AAC1B,qBAAW,CAAA;AACXA,wBAAa,GAAG,IAAI;AAAA,QACtB;AACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACA,WAAK,IAAA;AAAA,IACP;AAAA,EACF;AAEA,kBAAgB,UAAU,CAAA,GAAI,YAAY;AAC5C;"}
@@ -1,3 +1,4 @@
1
+ import type { LogContext } from '@rocicorp/logger';
1
2
  import type { ReadonlyJSONValue } from '../../../shared/src/json.ts';
2
3
  import type { ConnectionManager } from './connection-manager.ts';
3
4
  import type { MutatorResult } from './custom.ts';
@@ -5,11 +6,11 @@ import { type ZeroError } from './error.ts';
5
6
  import type { MutationTracker } from './mutation-tracker.ts';
6
7
  export declare class MutatorProxy {
7
8
  #private;
8
- constructor(connectionManager: ConnectionManager, mutationTracker: MutationTracker);
9
+ constructor(lc: LogContext, connectionManager: ConnectionManager, mutationTracker: MutationTracker);
9
10
  get mutationRejectionError(): ZeroError | undefined;
10
11
  wrapCustomMutator<F extends (...args: [] | [ReadonlyJSONValue]) => {
11
12
  client: Promise<unknown>;
12
13
  server: Promise<unknown>;
13
- }>(f: F): (...args: Parameters<F>) => MutatorResult;
14
+ }>(name: string, f: F): (...args: Parameters<F>) => MutatorResult;
14
15
  }
15
16
  //# sourceMappingURL=mutator-proxy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mutator-proxy.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/mutator-proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAGnE,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAc,KAAK,SAAS,EAAC,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAY3D,qBAAa,YAAY;;gBAMrB,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe;IAWlC,IAAI,sBAAsB,IAAI,SAAS,GAAG,SAAS,CAElD;IAgCD,iBAAiB,CACf,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,iBAAiB,CAAC,KAAK;QAC/C,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;KAC1B,EACD,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,aAAa;CAkGnD"}
1
+ {"version":3,"file":"mutator-proxy.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/mutator-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAInE,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAc,KAAK,SAAS,EAAC,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAY3D,qBAAa,YAAY;;gBAOrB,EAAE,EAAE,UAAU,EACd,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe;IAYlC,IAAI,sBAAsB,IAAI,SAAS,GAAG,SAAS,CAElD;IA0CD,iBAAiB,CACf,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,iBAAiB,CAAC,KAAK;QAC/C,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;KAC1B,EACD,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,aAAa;CAwGjE"}
@@ -1,16 +1,19 @@
1
1
  import { unreachable } from "../../../shared/src/asserts.js";
2
2
  import { wrapWithApplicationError } from "../../../zero-protocol/src/application-error.js";
3
- import { NeedsAuth, Connecting, Connected, Closed, Error, Disconnected } from "./connection-status-enum.js";
3
+ import { NoSocketOrigin } from "./client-error-kind-enum.js";
4
+ import { Disconnected, NeedsAuth, Connecting, Connected, Closed, Error } from "./connection-status-enum.js";
4
5
  import { isZeroError } from "./error.js";
5
6
  const successResultDetails = {
6
7
  type: "success"
7
8
  };
8
9
  const successResult = () => successResultDetails;
9
10
  class MutatorProxy {
11
+ #lc;
10
12
  #connectionManager;
11
13
  #mutationTracker;
12
14
  #mutationRejection;
13
- constructor(connectionManager, mutationTracker) {
15
+ constructor(lc, connectionManager, mutationTracker) {
16
+ this.#lc = lc;
14
17
  this.#connectionManager = connectionManager;
15
18
  this.#mutationTracker = mutationTracker;
16
19
  this.#connectionManager.subscribe(
@@ -29,6 +32,10 @@ class MutatorProxy {
29
32
  * the mutation tracker are rejected with the error.
30
33
  */
31
34
  #onConnectionStateChange(state) {
35
+ if (state.name === Disconnected && state.reason.kind === NoSocketOrigin) {
36
+ this.#mutationRejection = void 0;
37
+ return;
38
+ }
32
39
  switch (state.name) {
33
40
  case Disconnected:
34
41
  case Error:
@@ -50,7 +57,7 @@ class MutatorProxy {
50
57
  unreachable();
51
58
  }
52
59
  }
53
- wrapCustomMutator(f) {
60
+ wrapCustomMutator(name, f) {
54
61
  return (...args) => {
55
62
  if (this.#mutationRejection) {
56
63
  return {
@@ -65,6 +72,11 @@ class MutatorProxy {
65
72
  if (cachedPromise) {
66
73
  return cachedPromise;
67
74
  }
75
+ this.#lc.error?.(
76
+ `Mutator "${name}" error on ${origin}`,
77
+ args[0],
78
+ error
79
+ );
68
80
  if (isZeroError(error)) {
69
81
  const zeroErrorPromise = this.#makeZeroErrorResultDetails(error);
70
82
  cachedMutationPromises[origin] = zeroErrorPromise;
@@ -1 +1 @@
1
- {"version":3,"file":"mutator-proxy.js","sources":["../../../../../zero-client/src/client/mutator-proxy.ts"],"sourcesContent":["import {unreachable} from '../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport type {ApplicationError} from '../../../zero-protocol/src/application-error.ts';\nimport {wrapWithApplicationError} from '../../../zero-protocol/src/application-error.ts';\nimport type {\n ConnectionManager,\n ConnectionManagerState,\n} from './connection-manager.ts';\nimport {ConnectionStatus} from './connection-status.ts';\nimport type {\n MutatorResult,\n MutatorResultErrorDetails,\n MutatorResultSuccessDetails,\n} from './custom.ts';\nimport {isZeroError, type ZeroError} from './error.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\n\nconst successResultDetails = {\n type: 'success',\n} as const satisfies MutatorResultSuccessDetails;\nconst successResult = () => successResultDetails;\n\ntype CachedMutationRejection = {\n readonly error: ZeroError;\n readonly promise: Promise<MutatorResultErrorDetails>;\n};\n\nexport class MutatorProxy {\n readonly #connectionManager: ConnectionManager;\n readonly #mutationTracker: MutationTracker;\n #mutationRejection: CachedMutationRejection | undefined;\n\n constructor(\n connectionManager: ConnectionManager,\n mutationTracker: MutationTracker,\n ) {\n this.#connectionManager = connectionManager;\n this.#mutationTracker = mutationTracker;\n\n this.#connectionManager.subscribe(state =>\n this.#onConnectionStateChange(state),\n );\n this.#onConnectionStateChange(connectionManager.state);\n }\n\n get mutationRejectionError(): ZeroError | undefined {\n return this.#mutationRejection?.error;\n }\n\n /**\n * Called when the connection state changes.\n *\n * If the connection state is disconnected, error, or closed, the\n * mutation rejection error is set and all outstanding `.server` promises in\n * the mutation tracker are rejected with the error.\n */\n #onConnectionStateChange(state: ConnectionManagerState) {\n switch (state.name) {\n case ConnectionStatus.Disconnected:\n case ConnectionStatus.Error:\n case ConnectionStatus.Closed:\n this.#mutationRejection = {\n error: state.reason,\n promise: Promise.resolve(\n this.#makeZeroErrorResultDetails(state.reason),\n ),\n };\n this.#mutationTracker.rejectAllOutstandingMutations(state.reason);\n break;\n case ConnectionStatus.Connected:\n case ConnectionStatus.Connecting:\n case ConnectionStatus.NeedsAuth:\n this.#mutationRejection = undefined;\n return;\n default:\n unreachable(state);\n }\n }\n\n wrapCustomMutator<\n F extends (...args: [] | [ReadonlyJSONValue]) => {\n client: Promise<unknown>;\n server: Promise<unknown>;\n },\n >(f: F): (...args: Parameters<F>) => MutatorResult {\n return (...args) => {\n if (this.#mutationRejection) {\n return {\n client: this.#mutationRejection.promise,\n server: this.#mutationRejection.promise,\n } as const satisfies MutatorResult;\n }\n\n let result: {\n client: Promise<unknown>;\n server: Promise<unknown>;\n };\n\n const cachedMutationPromises: Partial<\n Record<'client' | 'server', Promise<MutatorResultErrorDetails>>\n > = {};\n\n const wrapErrorFor =\n (origin: 'client' | 'server') =>\n (error: unknown): Promise<MutatorResultErrorDetails> => {\n const cachedPromise = cachedMutationPromises[origin];\n if (cachedPromise) {\n return cachedPromise;\n }\n\n if (isZeroError(error)) {\n const zeroErrorPromise = this.#makeZeroErrorResultDetails(error);\n cachedMutationPromises[origin] = zeroErrorPromise;\n return zeroErrorPromise;\n }\n\n const applicationErrorPromise =\n this.#makeApplicationErrorResultDetails(\n wrapWithApplicationError(error),\n );\n cachedMutationPromises[origin] = applicationErrorPromise;\n return applicationErrorPromise;\n };\n\n try {\n result = f(...args);\n } catch (error) {\n const clientPromise = wrapErrorFor('client')(error);\n const serverPromise = wrapErrorFor('server')(error);\n\n return {\n client: clientPromise,\n server: serverPromise,\n } as const satisfies MutatorResult;\n }\n\n const client = this.#normalizeResultPromise(\n result.client,\n wrapErrorFor('client'),\n );\n const server = this.#normalizeResultPromise(\n result.server,\n wrapErrorFor('server'),\n );\n\n return {\n client,\n server,\n };\n };\n }\n\n #normalizeResultPromise(\n promise: Promise<unknown>,\n wrapError: (error: unknown) => Promise<MutatorResultErrorDetails>,\n ) {\n return promise.then<MutatorResultSuccessDetails, MutatorResultErrorDetails>(\n successResult,\n wrapError,\n );\n }\n\n #makeZeroErrorResultDetails(zeroError: ZeroError) {\n return Promise.resolve({\n type: 'error',\n error: {\n type: 'zero',\n message: zeroError.message,\n },\n } as const satisfies MutatorResultErrorDetails);\n }\n\n #makeApplicationErrorResultDetails(applicationError: ApplicationError) {\n return Promise.resolve({\n type: 'error',\n error: {\n type: 'app',\n message: applicationError.message,\n details: applicationError.details,\n },\n } as const satisfies MutatorResultErrorDetails);\n }\n}\n"],"names":["ConnectionStatus.Disconnected","ConnectionStatus.Error","ConnectionStatus.Closed","ConnectionStatus.Connected","ConnectionStatus.Connecting","ConnectionStatus.NeedsAuth"],"mappings":"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"}
1
+ {"version":3,"file":"mutator-proxy.js","sources":["../../../../../zero-client/src/client/mutator-proxy.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {unreachable} from '../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport type {ApplicationError} from '../../../zero-protocol/src/application-error.ts';\nimport {wrapWithApplicationError} from '../../../zero-protocol/src/application-error.ts';\nimport {ClientErrorKind} from './client-error-kind.ts';\nimport type {\n ConnectionManager,\n ConnectionManagerState,\n} from './connection-manager.ts';\nimport {ConnectionStatus} from './connection-status.ts';\nimport type {\n MutatorResult,\n MutatorResultErrorDetails,\n MutatorResultSuccessDetails,\n} from './custom.ts';\nimport {isZeroError, type ZeroError} from './error.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\n\nconst successResultDetails = {\n type: 'success',\n} as const satisfies MutatorResultSuccessDetails;\nconst successResult = () => successResultDetails;\n\ntype CachedMutationRejection = {\n readonly error: ZeroError;\n readonly promise: Promise<MutatorResultErrorDetails>;\n};\n\nexport class MutatorProxy {\n readonly #lc: LogContext;\n readonly #connectionManager: ConnectionManager;\n readonly #mutationTracker: MutationTracker;\n #mutationRejection: CachedMutationRejection | undefined;\n\n constructor(\n lc: LogContext,\n connectionManager: ConnectionManager,\n mutationTracker: MutationTracker,\n ) {\n this.#lc = lc;\n this.#connectionManager = connectionManager;\n this.#mutationTracker = mutationTracker;\n\n this.#connectionManager.subscribe(state =>\n this.#onConnectionStateChange(state),\n );\n this.#onConnectionStateChange(connectionManager.state);\n }\n\n get mutationRejectionError(): ZeroError | undefined {\n return this.#mutationRejection?.error;\n }\n\n /**\n * Called when the connection state changes.\n *\n * If the connection state is disconnected, error, or closed, the\n * mutation rejection error is set and all outstanding `.server` promises in\n * the mutation tracker are rejected with the error.\n */\n #onConnectionStateChange(state: ConnectionManagerState) {\n // we short circuit the rejection if the error is due to a missing cacheURL\n // this allows local writes to continue\n if (\n state.name === ConnectionStatus.Disconnected &&\n state.reason.kind === ClientErrorKind.NoSocketOrigin\n ) {\n this.#mutationRejection = undefined;\n return;\n }\n\n switch (state.name) {\n case ConnectionStatus.Disconnected:\n case ConnectionStatus.Error:\n case ConnectionStatus.Closed:\n this.#mutationRejection = {\n error: state.reason,\n promise: Promise.resolve(\n this.#makeZeroErrorResultDetails(state.reason),\n ),\n };\n this.#mutationTracker.rejectAllOutstandingMutations(state.reason);\n break;\n case ConnectionStatus.Connected:\n case ConnectionStatus.Connecting:\n case ConnectionStatus.NeedsAuth:\n this.#mutationRejection = undefined;\n return;\n default:\n unreachable(state);\n }\n }\n\n wrapCustomMutator<\n F extends (...args: [] | [ReadonlyJSONValue]) => {\n client: Promise<unknown>;\n server: Promise<unknown>;\n },\n >(name: string, f: F): (...args: Parameters<F>) => MutatorResult {\n return (...args) => {\n if (this.#mutationRejection) {\n return {\n client: this.#mutationRejection.promise,\n server: this.#mutationRejection.promise,\n } as const satisfies MutatorResult;\n }\n\n let result: {\n client: Promise<unknown>;\n server: Promise<unknown>;\n };\n\n const cachedMutationPromises: Partial<\n Record<'client' | 'server', Promise<MutatorResultErrorDetails>>\n > = {};\n\n const wrapErrorFor =\n (origin: 'client' | 'server') =>\n (error: unknown): Promise<MutatorResultErrorDetails> => {\n const cachedPromise = cachedMutationPromises[origin];\n if (cachedPromise) {\n return cachedPromise;\n }\n\n this.#lc.error?.(\n `Mutator \"${name}\" error on ${origin}`,\n args[0],\n error,\n );\n\n if (isZeroError(error)) {\n const zeroErrorPromise = this.#makeZeroErrorResultDetails(error);\n cachedMutationPromises[origin] = zeroErrorPromise;\n return zeroErrorPromise;\n }\n\n const applicationErrorPromise =\n this.#makeApplicationErrorResultDetails(\n wrapWithApplicationError(error),\n );\n cachedMutationPromises[origin] = applicationErrorPromise;\n return applicationErrorPromise;\n };\n\n try {\n result = f(...args);\n } catch (error) {\n const clientPromise = wrapErrorFor('client')(error);\n const serverPromise = wrapErrorFor('server')(error);\n\n return {\n client: clientPromise,\n server: serverPromise,\n } as const satisfies MutatorResult;\n }\n\n const client = this.#normalizeResultPromise(\n result.client,\n wrapErrorFor('client'),\n );\n const server = this.#normalizeResultPromise(\n result.server,\n wrapErrorFor('server'),\n );\n\n return {\n client,\n server,\n };\n };\n }\n\n #normalizeResultPromise(\n promise: Promise<unknown>,\n wrapError: (error: unknown) => Promise<MutatorResultErrorDetails>,\n ) {\n return promise.then<MutatorResultSuccessDetails, MutatorResultErrorDetails>(\n successResult,\n wrapError,\n );\n }\n\n #makeZeroErrorResultDetails(zeroError: ZeroError) {\n return Promise.resolve({\n type: 'error',\n error: {\n type: 'zero',\n message: zeroError.message,\n },\n } as const satisfies MutatorResultErrorDetails);\n }\n\n #makeApplicationErrorResultDetails(applicationError: ApplicationError) {\n return Promise.resolve({\n type: 'error',\n error: {\n type: 'app',\n message: applicationError.message,\n details: applicationError.details,\n },\n } as const satisfies MutatorResultErrorDetails);\n }\n}\n"],"names":["ConnectionStatus.Disconnected","ClientErrorKind.NoSocketOrigin","ConnectionStatus.Error","ConnectionStatus.Closed","ConnectionStatus.Connected","ConnectionStatus.Connecting","ConnectionStatus.NeedsAuth"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const version = "0.25.0-canary.12";
1
+ const version = "0.25.0-canary.14";
2
2
  export {
3
3
  version
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"zero.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/zero.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zero.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/zero.ts"],"names":[],"mappings":"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"}
@@ -27,10 +27,9 @@ import { nullableVersionSchema } from "../../../zero-protocol/src/version.js";
27
27
  import { clientSchemaFrom } from "../../../zero-schema/src/builder/schema-builder.js";
28
28
  import { clientToServer } from "../../../zero-schema/src/name-mapper.js";
29
29
  import { iterateMutators, isMutatorRegistry } from "../../../zql/src/mutate/mutator-registry.js";
30
- import { createBuilderWithQueryFactory } from "../../../zql/src/query/create-builder.js";
30
+ import { createRunnableBuilder } from "../../../zql/src/query/create-builder.js";
31
31
  import { isClientMetric } from "../../../zql/src/query/metrics-delegate.js";
32
32
  import "../../../zero-protocol/src/ast.js";
33
- import { newRunnableQuery } from "../../../zql/src/query/runnable-query-impl.js";
34
33
  import { nanoid } from "../util/nanoid.js";
35
34
  import { send } from "../util/socket.js";
36
35
  import { ActiveClientsManager } from "./active-clients-manager.js";
@@ -248,10 +247,6 @@ class Zero {
248
247
  this.#onlineManager.subscribe(onOnlineChange);
249
248
  }
250
249
  this.#options = options;
251
- this.query = createBuilderWithQueryFactory(
252
- schema,
253
- (table) => newRunnableQuery(this.#zeroContext, schema, table)
254
- );
255
250
  this.#logOptions = this.#createLogOptions({
256
251
  consoleLogLevel: options.logLevel ?? "warn",
257
252
  server: null,
@@ -334,6 +329,7 @@ class Zero {
334
329
  assertValidRunOptions
335
330
  );
336
331
  registerZeroDelegate(this, this.#zeroContext);
332
+ this.query = createRunnableBuilder(this.#zeroContext, schema);
337
333
  const replicacheImplOptions = {
338
334
  enableClientGroupForking: false,
339
335
  enableMutationRecovery: false,
@@ -396,6 +392,7 @@ class Zero {
396
392
  this.#onClientStateNotFound = onClientStateNotFoundCallback;
397
393
  this.#rep.onClientStateNotFound = onClientStateNotFoundCallback;
398
394
  const mutatorProxy = new MutatorProxy(
395
+ this.#lc,
399
396
  this.#connectionManager,
400
397
  this.#mutationTracker
401
398
  );
@@ -410,7 +407,10 @@ class Zero {
410
407
  );
411
408
  }
412
409
  const repMutator = rep.mutate[mr.mutator.mutatorName];
413
- return mutatorProxy.wrapCustomMutator(repMutator)(mr.args);
410
+ return mutatorProxy.wrapCustomMutator(
411
+ mr.mutator.mutatorName,
412
+ repMutator
413
+ )(mr.args);
414
414
  };
415
415
  const mutateBatch = makeCRUDMutate(schema, rep.mutate, callableMutate);
416
416
  if (mutators && !isMutatorRegistry(mutators)) {
@@ -1271,7 +1271,7 @@ ${error.errorBody.message}`, error);
1271
1271
  this.#lc.info?.(`Starting Zero version: ${this.version}`);
1272
1272
  if (this.#server === null) {
1273
1273
  this.#lc.info?.("No socket origin provided, not starting connect loop.");
1274
- this.#connectionManager.error(
1274
+ this.#connectionManager.disconnected(
1275
1275
  new ClientError({
1276
1276
  kind: NoSocketOrigin,
1277
1277
  message: "No server socket origin provided"